Lines Matching refs:vout
243 void omap_vout_free_buffers(struct omap_vout_device *vout) in omap_vout_free_buffers() argument
248 numbuffers = (vout->vid) ? video2_numbuffers : video1_numbuffers; in omap_vout_free_buffers()
249 vout->buffer_size = (vout->vid) ? video2_bufsize : video1_bufsize; in omap_vout_free_buffers()
252 omap_vout_free_buffer(vout->buf_virt_addr[i], in omap_vout_free_buffers()
253 vout->buffer_size); in omap_vout_free_buffers()
254 vout->buf_phy_addr[i] = 0; in omap_vout_free_buffers()
255 vout->buf_virt_addr[i] = 0; in omap_vout_free_buffers()
288 static int omap_vout_calculate_offset(struct omap_vout_device *vout) in omap_vout_calculate_offset() argument
291 struct v4l2_rect *crop = &vout->crop; in omap_vout_calculate_offset()
292 struct v4l2_pix_format *pix = &vout->pix; in omap_vout_calculate_offset()
293 int *cropped_offset = &vout->cropped_offset; in omap_vout_calculate_offset()
296 ovid = &vout->vid_info; in omap_vout_calculate_offset()
299 omap_vout_calculate_vrfb_offset(vout); in omap_vout_calculate_offset()
301 vout->line_length = line_length = pix->width; in omap_vout_calculate_offset()
311 vout->ps = ps; in omap_vout_calculate_offset()
317 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, "%s Offset:%x\n", in omap_vout_calculate_offset()
318 __func__, vout->cropped_offset); in omap_vout_calculate_offset()
326 static int video_mode_to_dss_mode(struct omap_vout_device *vout) in video_mode_to_dss_mode() argument
330 struct v4l2_pix_format *pix = &vout->pix; in video_mode_to_dss_mode()
333 ovid = &vout->vid_info; in video_mode_to_dss_mode()
366 static int omapvid_setup_overlay(struct omap_vout_device *vout, in omapvid_setup_overlay() argument
375 (outw != vout->pix.width || outh != vout->pix.height)) { in omapvid_setup_overlay()
380 vout->dss_mode = video_mode_to_dss_mode(vout); in omapvid_setup_overlay()
381 if (vout->dss_mode == -EINVAL) { in omapvid_setup_overlay()
389 if (is_rotation_90_or_270(vout)) { in omapvid_setup_overlay()
390 cropheight = vout->crop.width; in omapvid_setup_overlay()
391 cropwidth = vout->crop.height; in omapvid_setup_overlay()
392 pixwidth = vout->pix.height; in omapvid_setup_overlay()
394 cropheight = vout->crop.height; in omapvid_setup_overlay()
395 cropwidth = vout->crop.width; in omapvid_setup_overlay()
396 pixwidth = vout->pix.width; in omapvid_setup_overlay()
403 info.color_mode = vout->dss_mode; in omapvid_setup_overlay()
404 info.mirror = vout->mirror; in omapvid_setup_overlay()
409 info.global_alpha = vout->win.global_alpha; in omapvid_setup_overlay()
410 if (!is_rotation_enabled(vout)) { in omapvid_setup_overlay()
415 info.rotation = vout->rotation; in omapvid_setup_overlay()
420 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, in omapvid_setup_overlay()
436 v4l2_warn(&vout->vid_dev->v4l2_dev, "setup_overlay failed\n"); in omapvid_setup_overlay()
443 static int omapvid_init(struct omap_vout_device *vout, u32 addr) in omapvid_init() argument
450 struct omapvideo_info *ovid = &vout->vid_info; in omapvid_init()
452 win = &vout->win; in omapvid_init()
466 switch (vout->rotation) { in omapvid_init()
497 ret = omapvid_setup_overlay(vout, ovl, posx, posy, in omapvid_init()
505 v4l2_warn(&vout->vid_dev->v4l2_dev, "apply_changes failed\n"); in omapvid_init()
512 static int omapvid_apply_changes(struct omap_vout_device *vout) in omapvid_apply_changes() argument
516 struct omapvideo_info *ovid = &vout->vid_info; in omapvid_apply_changes()
531 static int omapvid_handle_interlace_display(struct omap_vout_device *vout, in omapvid_handle_interlace_display() argument
536 if (vout->first_int) { in omapvid_handle_interlace_display()
537 vout->first_int = 0; in omapvid_handle_interlace_display()
548 vout->field_id ^= 1; in omapvid_handle_interlace_display()
549 if (fid != vout->field_id) { in omapvid_handle_interlace_display()
551 vout->field_id = fid; in omapvid_handle_interlace_display()
553 if (vout->cur_frm == vout->next_frm) in omapvid_handle_interlace_display()
556 vout->cur_frm->ts = timevalue; in omapvid_handle_interlace_display()
557 vout->cur_frm->state = VIDEOBUF_DONE; in omapvid_handle_interlace_display()
558 wake_up_interruptible(&vout->cur_frm->done); in omapvid_handle_interlace_display()
559 vout->cur_frm = vout->next_frm; in omapvid_handle_interlace_display()
561 if (list_empty(&vout->dma_queue) || in omapvid_handle_interlace_display()
562 (vout->cur_frm != vout->next_frm)) in omapvid_handle_interlace_display()
566 return vout->field_id; in omapvid_handle_interlace_display()
579 struct omap_vout_device *vout = (struct omap_vout_device *)arg; in omap_vout_isr() local
581 if (!vout->streaming) in omap_vout_isr()
584 ovid = &vout->vid_info; in omap_vout_isr()
595 spin_lock(&vout->vbq_lock); in omap_vout_isr()
613 fid = omapvid_handle_interlace_display(vout, irqstatus, in omap_vout_isr()
626 if (!vout->first_int && (vout->cur_frm != vout->next_frm)) { in omap_vout_isr()
627 vout->cur_frm->ts = timevalue; in omap_vout_isr()
628 vout->cur_frm->state = VIDEOBUF_DONE; in omap_vout_isr()
629 wake_up_interruptible(&vout->cur_frm->done); in omap_vout_isr()
630 vout->cur_frm = vout->next_frm; in omap_vout_isr()
633 vout->first_int = 0; in omap_vout_isr()
634 if (list_empty(&vout->dma_queue)) in omap_vout_isr()
637 vout->next_frm = list_entry(vout->dma_queue.next, in omap_vout_isr()
639 list_del(&vout->next_frm->queue); in omap_vout_isr()
641 vout->next_frm->state = VIDEOBUF_ACTIVE; in omap_vout_isr()
643 addr = (unsigned long) vout->queued_buf_addr[vout->next_frm->i] in omap_vout_isr()
644 + vout->cropped_offset; in omap_vout_isr()
647 ret = omapvid_init(vout, addr); in omap_vout_isr()
655 ret = omapvid_apply_changes(vout); in omap_vout_isr()
660 spin_unlock(&vout->vbq_lock); in omap_vout_isr()
676 struct omap_vout_device *vout = q->priv_data; in omap_vout_buffer_setup() local
677 struct omapvideo_info *ovid = &vout->vid_info; in omap_vout_buffer_setup()
680 if (!vout) in omap_vout_buffer_setup()
683 vid_max_buf_size = vout->vid == OMAP_VIDEO1 ? video1_bufsize : in omap_vout_buffer_setup()
689 startindex = (vout->vid == OMAP_VIDEO1) ? in omap_vout_buffer_setup()
691 if (V4L2_MEMORY_MMAP == vout->memory && *count < startindex) in omap_vout_buffer_setup()
695 if (omap_vout_vrfb_buffer_setup(vout, count, startindex)) in omap_vout_buffer_setup()
699 if (V4L2_MEMORY_MMAP != vout->memory) in omap_vout_buffer_setup()
703 *size = PAGE_ALIGN(vout->pix.width * vout->pix.height * vout->bpp); in omap_vout_buffer_setup()
704 startindex = (vout->vid == OMAP_VIDEO1) ? in omap_vout_buffer_setup()
709 v4l2_err(&vout->vid_dev->v4l2_dev, in omap_vout_buffer_setup()
711 *size, vout->buffer_size); in omap_vout_buffer_setup()
716 vout->buffer_size = *size; in omap_vout_buffer_setup()
718 virt_addr = omap_vout_alloc_buffer(vout->buffer_size, in omap_vout_buffer_setup()
724 if (!is_rotation_enabled(vout)) in omap_vout_buffer_setup()
729 vout->smsshado_virt_addr[j], in omap_vout_buffer_setup()
730 vout->smsshado_size); in omap_vout_buffer_setup()
731 vout->smsshado_virt_addr[j] = 0; in omap_vout_buffer_setup()
732 vout->smsshado_phy_addr[j] = 0; in omap_vout_buffer_setup()
736 vout->buf_virt_addr[i] = virt_addr; in omap_vout_buffer_setup()
737 vout->buf_phy_addr[i] = phy_addr; in omap_vout_buffer_setup()
739 *count = vout->buffer_allocated = i; in omap_vout_buffer_setup()
748 static void omap_vout_free_extra_buffers(struct omap_vout_device *vout) in omap_vout_free_extra_buffers() argument
752 num_buffers = (vout->vid == OMAP_VIDEO1) ? in omap_vout_free_extra_buffers()
755 for (i = num_buffers; i < vout->buffer_allocated; i++) { in omap_vout_free_extra_buffers()
756 if (vout->buf_virt_addr[i]) in omap_vout_free_extra_buffers()
757 omap_vout_free_buffer(vout->buf_virt_addr[i], in omap_vout_free_extra_buffers()
758 vout->buffer_size); in omap_vout_free_extra_buffers()
760 vout->buf_virt_addr[i] = 0; in omap_vout_free_extra_buffers()
761 vout->buf_phy_addr[i] = 0; in omap_vout_free_extra_buffers()
763 vout->buffer_allocated = num_buffers; in omap_vout_free_extra_buffers()
777 struct omap_vout_device *vout = q->priv_data; in omap_vout_buffer_prepare() local
778 struct omapvideo_info *ovid = &vout->vid_info; in omap_vout_buffer_prepare()
781 vb->width = vout->pix.width; in omap_vout_buffer_prepare()
782 vb->height = vout->pix.height; in omap_vout_buffer_prepare()
783 vb->size = vb->width * vb->height * vout->bpp; in omap_vout_buffer_prepare()
794 vout->queued_buf_addr[vb->i] = (u8 *) in omap_vout_buffer_prepare()
800 addr = (unsigned long) vout->buf_virt_addr[vb->i]; in omap_vout_buffer_prepare()
803 dma_addr = dma_map_single(vout->vid_dev->v4l2_dev.dev, (void *) addr, in omap_vout_buffer_prepare()
805 if (dma_mapping_error(vout->vid_dev->v4l2_dev.dev, dma_addr)) in omap_vout_buffer_prepare()
806 v4l2_err(&vout->vid_dev->v4l2_dev, "dma_map_single failed\n"); in omap_vout_buffer_prepare()
808 vout->queued_buf_addr[vb->i] = (u8 *)vout->buf_phy_addr[vb->i]; in omap_vout_buffer_prepare()
812 return omap_vout_prepare_vrfb(vout, vb); in omap_vout_buffer_prepare()
825 struct omap_vout_device *vout = q->priv_data; in omap_vout_buffer_queue() local
829 list_add_tail(&vb->queue, &vout->dma_queue); in omap_vout_buffer_queue()
841 struct omap_vout_device *vout = q->priv_data; in omap_vout_buffer_release() local
845 if (V4L2_MEMORY_MMAP != vout->memory) in omap_vout_buffer_release()
855 struct omap_vout_device *vout = file->private_data; in omap_vout_poll() local
856 struct videobuf_queue *q = &vout->vbq; in omap_vout_poll()
863 struct omap_vout_device *vout = vma->vm_private_data; in omap_vout_vm_open() local
865 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, in omap_vout_vm_open()
867 vout->mmap_count++; in omap_vout_vm_open()
872 struct omap_vout_device *vout = vma->vm_private_data; in omap_vout_vm_close() local
874 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, in omap_vout_vm_close()
876 vout->mmap_count--; in omap_vout_vm_close()
890 struct omap_vout_device *vout = file->private_data; in omap_vout_mmap() local
891 struct videobuf_queue *q = &vout->vbq; in omap_vout_mmap()
893 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, in omap_vout_mmap()
908 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, in omap_vout_mmap()
914 if (size > vout->buffer_size) { in omap_vout_mmap()
915 v4l2_err(&vout->vid_dev->v4l2_dev, in omap_vout_mmap()
917 size, vout->buffer_size); in omap_vout_mmap()
926 vma->vm_private_data = (void *) vout; in omap_vout_mmap()
927 pos = (void *)vout->buf_virt_addr[i]; in omap_vout_mmap()
938 vout->mmap_count++; in omap_vout_mmap()
939 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, "Exiting %s\n", __func__); in omap_vout_mmap()
949 struct omap_vout_device *vout = file->private_data; in omap_vout_release() local
951 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, "Entering %s\n", __func__); in omap_vout_release()
952 ovid = &vout->vid_info; in omap_vout_release()
954 if (!vout) in omap_vout_release()
957 q = &vout->vbq; in omap_vout_release()
967 ret = omapvid_apply_changes(vout); in omap_vout_release()
969 v4l2_warn(&vout->vid_dev->v4l2_dev, in omap_vout_release()
973 omap_vout_free_extra_buffers(vout); in omap_vout_release()
979 if (!vout->vrfb_static_allocation) in omap_vout_release()
980 omap_vout_free_vrfb_buffers(vout); in omap_vout_release()
986 if (vout->streaming) { in omap_vout_release()
991 omap_dispc_unregister_isr(omap_vout_isr, vout, mask); in omap_vout_release()
992 vout->streaming = false; in omap_vout_release()
998 if (vout->mmap_count != 0) in omap_vout_release()
999 vout->mmap_count = 0; in omap_vout_release()
1001 vout->opened -= 1; in omap_vout_release()
1004 if (vout->buffer_allocated) in omap_vout_release()
1007 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, "Exiting %s\n", __func__); in omap_vout_release()
1014 struct omap_vout_device *vout = NULL; in omap_vout_open() local
1016 vout = video_drvdata(file); in omap_vout_open()
1017 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, "Entering %s\n", __func__); in omap_vout_open()
1019 if (vout == NULL) in omap_vout_open()
1023 if (vout->opened) in omap_vout_open()
1026 vout->opened += 1; in omap_vout_open()
1028 file->private_data = vout; in omap_vout_open()
1029 vout->type = V4L2_BUF_TYPE_VIDEO_OUTPUT; in omap_vout_open()
1031 q = &vout->vbq; in omap_vout_open()
1036 spin_lock_init(&vout->vbq_lock); in omap_vout_open()
1039 &vout->vbq_lock, vout->type, V4L2_FIELD_NONE, in omap_vout_open()
1040 sizeof(struct videobuf_buffer), vout, NULL); in omap_vout_open()
1042 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, "Exiting %s\n", __func__); in omap_vout_open()
1052 struct omap_vout_device *vout = fh; in vidioc_querycap() local
1055 strlcpy(cap->card, vout->vfd->name, sizeof(cap->card)); in vidioc_querycap()
1083 struct omap_vout_device *vout = fh; in vidioc_g_fmt_vid_out() local
1085 f->fmt.pix = vout->pix; in vidioc_g_fmt_vid_out()
1096 struct omap_vout_device *vout = fh; in vidioc_try_fmt_vid_out() local
1099 ovid = &vout->vid_info; in vidioc_try_fmt_vid_out()
1109 vout->fbuf.fmt.height = timing->y_res; in vidioc_try_fmt_vid_out()
1110 vout->fbuf.fmt.width = timing->x_res; in vidioc_try_fmt_vid_out()
1123 struct omap_vout_device *vout = fh; in vidioc_s_fmt_vid_out() local
1126 if (vout->streaming) in vidioc_s_fmt_vid_out()
1129 mutex_lock(&vout->lock); in vidioc_s_fmt_vid_out()
1131 ovid = &vout->vid_info; in vidioc_s_fmt_vid_out()
1144 if ((is_rotation_enabled(vout)) && in vidioc_s_fmt_vid_out()
1152 if (is_rotation_90_or_270(vout)) { in vidioc_s_fmt_vid_out()
1153 vout->fbuf.fmt.height = timing->x_res; in vidioc_s_fmt_vid_out()
1154 vout->fbuf.fmt.width = timing->y_res; in vidioc_s_fmt_vid_out()
1156 vout->fbuf.fmt.height = timing->y_res; in vidioc_s_fmt_vid_out()
1157 vout->fbuf.fmt.width = timing->x_res; in vidioc_s_fmt_vid_out()
1166 vout->bpp = bpp; in vidioc_s_fmt_vid_out()
1167 vout->pix = f->fmt.pix; in vidioc_s_fmt_vid_out()
1168 vout->vrfb_bpp = 1; in vidioc_s_fmt_vid_out()
1171 if (V4L2_PIX_FMT_YUYV == vout->pix.pixelformat || in vidioc_s_fmt_vid_out()
1172 V4L2_PIX_FMT_UYVY == vout->pix.pixelformat) in vidioc_s_fmt_vid_out()
1173 vout->vrfb_bpp = 2; in vidioc_s_fmt_vid_out()
1176 omap_vout_new_format(&vout->pix, &vout->fbuf, &vout->crop, &vout->win); in vidioc_s_fmt_vid_out()
1181 mutex_unlock(&vout->lock); in vidioc_s_fmt_vid_out()
1189 struct omap_vout_device *vout = fh; in vidioc_try_fmt_vid_overlay() local
1194 ovid = &vout->vid_info; in vidioc_try_fmt_vid_overlay()
1197 ret = omap_vout_try_window(&vout->fbuf, win); in vidioc_try_fmt_vid_overlay()
1215 struct omap_vout_device *vout = fh; in vidioc_s_fmt_vid_overlay() local
1218 mutex_lock(&vout->lock); in vidioc_s_fmt_vid_overlay()
1219 ovid = &vout->vid_info; in vidioc_s_fmt_vid_overlay()
1222 ret = omap_vout_new_window(&vout->crop, &vout->win, &vout->fbuf, win); in vidioc_s_fmt_vid_overlay()
1226 vout->win.global_alpha = 255; in vidioc_s_fmt_vid_overlay()
1228 vout->win.global_alpha = f->fmt.win.global_alpha; in vidioc_s_fmt_vid_overlay()
1230 vout->win.chromakey = f->fmt.win.chromakey; in vidioc_s_fmt_vid_overlay()
1232 mutex_unlock(&vout->lock); in vidioc_s_fmt_vid_overlay()
1242 struct omap_vout_device *vout = fh; in vidioc_g_fmt_vid_overlay() local
1246 ovid = &vout->vid_info; in vidioc_g_fmt_vid_overlay()
1249 win->w = vout->win.w; in vidioc_g_fmt_vid_overlay()
1250 win->field = vout->win.field; in vidioc_g_fmt_vid_overlay()
1251 win->global_alpha = vout->win.global_alpha; in vidioc_g_fmt_vid_overlay()
1264 struct omap_vout_device *vout = fh; in vidioc_cropcap() local
1265 struct v4l2_pix_format *pix = &vout->pix; in vidioc_cropcap()
1274 omap_vout_default_crop(&vout->pix, &vout->fbuf, &cropcap->defrect); in vidioc_cropcap()
1282 struct omap_vout_device *vout = fh; in vidioc_g_crop() local
1286 crop->c = vout->crop; in vidioc_g_crop()
1293 struct omap_vout_device *vout = fh; in vidioc_s_crop() local
1299 if (vout->streaming) in vidioc_s_crop()
1302 mutex_lock(&vout->lock); in vidioc_s_crop()
1303 ovid = &vout->vid_info; in vidioc_s_crop()
1315 if (is_rotation_90_or_270(vout)) { in vidioc_s_crop()
1316 vout->fbuf.fmt.height = timing->x_res; in vidioc_s_crop()
1317 vout->fbuf.fmt.width = timing->y_res; in vidioc_s_crop()
1319 vout->fbuf.fmt.height = timing->y_res; in vidioc_s_crop()
1320 vout->fbuf.fmt.width = timing->x_res; in vidioc_s_crop()
1324 ret = omap_vout_new_crop(&vout->pix, &vout->crop, &vout->win, in vidioc_s_crop()
1325 &vout->fbuf, &crop->c); in vidioc_s_crop()
1328 mutex_unlock(&vout->lock); in vidioc_s_crop()
1357 struct omap_vout_device *vout = fh; in vidioc_g_ctrl() local
1361 ctrl->value = vout->control[0].value; in vidioc_g_ctrl()
1368 ovl = vout->vid_info.overlays[0]; in vidioc_g_ctrl()
1379 ctrl->value = vout->control[2].value; in vidioc_g_ctrl()
1390 struct omap_vout_device *vout = fh; in vidioc_s_ctrl() local
1398 ovid = &vout->vid_info; in vidioc_s_ctrl()
1400 mutex_lock(&vout->lock); in vidioc_s_ctrl()
1402 mutex_unlock(&vout->lock); in vidioc_s_ctrl()
1407 if (rotation && vout->pix.pixelformat == V4L2_PIX_FMT_RGB24) { in vidioc_s_ctrl()
1408 mutex_unlock(&vout->lock); in vidioc_s_ctrl()
1413 if (v4l2_rot_to_dss_rot(rotation, &vout->rotation, in vidioc_s_ctrl()
1414 vout->mirror)) { in vidioc_s_ctrl()
1415 mutex_unlock(&vout->lock); in vidioc_s_ctrl()
1420 vout->control[0].value = rotation; in vidioc_s_ctrl()
1421 mutex_unlock(&vout->lock); in vidioc_s_ctrl()
1430 ovl = vout->vid_info.overlays[0]; in vidioc_s_ctrl()
1432 mutex_lock(&vout->lock); in vidioc_s_ctrl()
1434 mutex_unlock(&vout->lock); in vidioc_s_ctrl()
1442 mutex_unlock(&vout->lock); in vidioc_s_ctrl()
1447 vout->control[1].value = color; in vidioc_s_ctrl()
1448 mutex_unlock(&vout->lock); in vidioc_s_ctrl()
1456 ovid = &vout->vid_info; in vidioc_s_ctrl()
1458 mutex_lock(&vout->lock); in vidioc_s_ctrl()
1460 mutex_unlock(&vout->lock); in vidioc_s_ctrl()
1465 if (mirror && vout->pix.pixelformat == V4L2_PIX_FMT_RGB24) { in vidioc_s_ctrl()
1466 mutex_unlock(&vout->lock); in vidioc_s_ctrl()
1470 vout->mirror = mirror; in vidioc_s_ctrl()
1471 vout->control[2].value = mirror; in vidioc_s_ctrl()
1472 mutex_unlock(&vout->lock); in vidioc_s_ctrl()
1486 struct omap_vout_device *vout = fh; in vidioc_reqbufs() local
1487 struct videobuf_queue *q = &vout->vbq; in vidioc_reqbufs()
1497 mutex_lock(&vout->lock); in vidioc_reqbufs()
1499 if (vout->streaming) { in vidioc_reqbufs()
1506 if (vout->mmap_count) { in vidioc_reqbufs()
1510 num_buffers = (vout->vid == OMAP_VIDEO1) ? in vidioc_reqbufs()
1512 for (i = num_buffers; i < vout->buffer_allocated; i++) { in vidioc_reqbufs()
1513 omap_vout_free_buffer(vout->buf_virt_addr[i], in vidioc_reqbufs()
1514 vout->buffer_size); in vidioc_reqbufs()
1515 vout->buf_virt_addr[i] = 0; in vidioc_reqbufs()
1516 vout->buf_phy_addr[i] = 0; in vidioc_reqbufs()
1518 vout->buffer_allocated = num_buffers; in vidioc_reqbufs()
1521 if (vout->buffer_allocated) { in vidioc_reqbufs()
1523 for (i = 0; i < vout->buffer_allocated; i++) { in vidioc_reqbufs()
1527 vout->buffer_allocated = 0; in vidioc_reqbufs()
1532 vout->memory = req->memory; in vidioc_reqbufs()
1534 INIT_LIST_HEAD(&vout->dma_queue); in vidioc_reqbufs()
1541 vout->buffer_allocated = req->count; in vidioc_reqbufs()
1544 mutex_unlock(&vout->lock); in vidioc_reqbufs()
1551 struct omap_vout_device *vout = fh; in vidioc_querybuf() local
1553 return videobuf_querybuf(&vout->vbq, b); in vidioc_querybuf()
1559 struct omap_vout_device *vout = fh; in vidioc_qbuf() local
1560 struct videobuf_queue *q = &vout->vbq; in vidioc_qbuf()
1563 (buffer->index >= vout->buffer_allocated) || in vidioc_qbuf()
1568 if ((buffer->length < vout->pix.sizeimage) || in vidioc_qbuf()
1574 if ((is_rotation_enabled(vout)) && in vidioc_qbuf()
1575 vout->vrfb_dma_tx.req_status == DMA_CHAN_NOT_ALLOTED) { in vidioc_qbuf()
1576 v4l2_warn(&vout->vid_dev->v4l2_dev, in vidioc_qbuf()
1586 struct omap_vout_device *vout = fh; in vidioc_dqbuf() local
1587 struct videobuf_queue *q = &vout->vbq; in vidioc_dqbuf()
1596 if (!vout->streaming) in vidioc_dqbuf()
1606 addr = (unsigned long) vout->buf_phy_addr[vb->i]; in vidioc_dqbuf()
1608 dma_unmap_single(vout->vid_dev->v4l2_dev.dev, addr, in vidioc_dqbuf()
1617 struct omap_vout_device *vout = fh; in vidioc_streamon() local
1618 struct videobuf_queue *q = &vout->vbq; in vidioc_streamon()
1619 struct omapvideo_info *ovid = &vout->vid_info; in vidioc_streamon()
1621 mutex_lock(&vout->lock); in vidioc_streamon()
1623 if (vout->streaming) { in vidioc_streamon()
1632 if (list_empty(&vout->dma_queue)) { in vidioc_streamon()
1638 vout->next_frm = vout->cur_frm = list_entry(vout->dma_queue.next, in vidioc_streamon()
1641 list_del(&vout->cur_frm->queue); in vidioc_streamon()
1643 vout->cur_frm->state = VIDEOBUF_ACTIVE; in vidioc_streamon()
1645 vout->field_id = 0; in vidioc_streamon()
1648 vout->streaming = true; in vidioc_streamon()
1650 vout->first_int = 1; in vidioc_streamon()
1652 if (omap_vout_calculate_offset(vout)) { in vidioc_streamon()
1656 addr = (unsigned long) vout->queued_buf_addr[vout->cur_frm->i] in vidioc_streamon()
1657 + vout->cropped_offset; in vidioc_streamon()
1663 ret = omapvid_init(vout, addr); in vidioc_streamon()
1665 v4l2_err(&vout->vid_dev->v4l2_dev, in vidioc_streamon()
1670 omap_dispc_register_isr(omap_vout_isr, vout, mask); in vidioc_streamon()
1673 ret = omapvid_apply_changes(vout); in vidioc_streamon()
1675 v4l2_err(&vout->vid_dev->v4l2_dev, "failed to change mode\n"); in vidioc_streamon()
1694 mutex_unlock(&vout->lock); in vidioc_streamon()
1702 struct omap_vout_device *vout = fh; in vidioc_streamoff() local
1703 struct omapvideo_info *ovid = &vout->vid_info; in vidioc_streamoff()
1705 if (!vout->streaming) in vidioc_streamoff()
1708 vout->streaming = false; in vidioc_streamoff()
1712 omap_dispc_unregister_isr(omap_vout_isr, vout, mask); in vidioc_streamoff()
1723 ret = omapvid_apply_changes(vout); in vidioc_streamoff()
1725 v4l2_err(&vout->vid_dev->v4l2_dev, "failed to change mode in" in vidioc_streamoff()
1728 INIT_LIST_HEAD(&vout->dma_queue); in vidioc_streamoff()
1729 ret = videobuf_streamoff(&vout->vbq); in vidioc_streamoff()
1740 struct omap_vout_device *vout = fh; in vidioc_s_fbuf() local
1744 ovid = &vout->vid_info; in vidioc_s_fbuf()
1759 vout->fbuf.flags |= V4L2_FBUF_FLAG_SRC_CHROMAKEY; in vidioc_s_fbuf()
1762 vout->fbuf.flags &= ~V4L2_FBUF_FLAG_SRC_CHROMAKEY; in vidioc_s_fbuf()
1765 vout->fbuf.flags |= V4L2_FBUF_FLAG_CHROMAKEY; in vidioc_s_fbuf()
1768 vout->fbuf.flags &= ~V4L2_FBUF_FLAG_CHROMAKEY; in vidioc_s_fbuf()
1781 info.trans_key = vout->win.chromakey; in vidioc_s_fbuf()
1787 vout->fbuf.flags |= V4L2_FBUF_FLAG_LOCAL_ALPHA; in vidioc_s_fbuf()
1790 vout->fbuf.flags &= ~V4L2_FBUF_FLAG_LOCAL_ALPHA; in vidioc_s_fbuf()
1811 struct omap_vout_device *vout = fh; in vidioc_g_fbuf() local
1814 ovid = &vout->vid_info; in vidioc_g_fbuf()
1875 static int __init omap_vout_setup_video_data(struct omap_vout_device *vout) in omap_vout_setup_video_data() argument
1880 struct omap_overlay *ovl = vout->vid_info.overlays[0]; in omap_vout_setup_video_data()
1884 pix = &vout->pix; in omap_vout_setup_video_data()
1897 vout->bpp = RGB565_BPP; in omap_vout_setup_video_data()
1898 vout->fbuf.fmt.width = display->panel.timings.x_res; in omap_vout_setup_video_data()
1899 vout->fbuf.fmt.height = display->panel.timings.y_res; in omap_vout_setup_video_data()
1902 vout->win.global_alpha = 255; in omap_vout_setup_video_data()
1903 vout->fbuf.flags = 0; in omap_vout_setup_video_data()
1904 vout->fbuf.capability = V4L2_FBUF_CAP_LOCAL_ALPHA | in omap_vout_setup_video_data()
1906 vout->win.chromakey = 0; in omap_vout_setup_video_data()
1908 omap_vout_new_format(pix, &vout->fbuf, &vout->crop, &vout->win); in omap_vout_setup_video_data()
1912 control = vout->control; in omap_vout_setup_video_data()
1915 vout->rotation = 0; in omap_vout_setup_video_data()
1916 vout->mirror = false; in omap_vout_setup_video_data()
1917 vout->control[2].id = V4L2_CID_HFLIP; in omap_vout_setup_video_data()
1918 vout->control[2].value = 0; in omap_vout_setup_video_data()
1919 if (vout->vid_info.rotation_type == VOUT_ROT_VRFB) in omap_vout_setup_video_data()
1920 vout->vrfb_bpp = 2; in omap_vout_setup_video_data()
1926 vfd = vout->vfd = video_device_alloc(); in omap_vout_setup_video_data()
1939 vfd->v4l2_dev = &vout->vid_dev->v4l2_dev; in omap_vout_setup_video_data()
1941 mutex_init(&vout->lock); in omap_vout_setup_video_data()
1955 struct omap_vout_device *vout; in omap_vout_setup_video_bufs() local
1960 vout = vid_dev->vouts[vid_num]; in omap_vout_setup_video_bufs()
1961 ovid = &vout->vid_info; in omap_vout_setup_video_bufs()
1964 vout->buffer_size = (vid_num == 0) ? video1_bufsize : video2_bufsize; in omap_vout_setup_video_bufs()
1965 dev_info(&pdev->dev, "Buffer Size = %d\n", vout->buffer_size); in omap_vout_setup_video_bufs()
1968 vout->buf_virt_addr[i] = in omap_vout_setup_video_bufs()
1969 omap_vout_alloc_buffer(vout->buffer_size, in omap_vout_setup_video_bufs()
1970 (u32 *) &vout->buf_phy_addr[i]); in omap_vout_setup_video_bufs()
1971 if (!vout->buf_virt_addr[i]) { in omap_vout_setup_video_bufs()
1978 vout->cropped_offset = 0; in omap_vout_setup_video_bufs()
1991 omap_vout_free_buffer(vout->buf_virt_addr[i], in omap_vout_setup_video_bufs()
1992 vout->buffer_size); in omap_vout_setup_video_bufs()
1993 vout->buf_virt_addr[i] = 0; in omap_vout_setup_video_bufs()
1994 vout->buf_phy_addr[i] = 0; in omap_vout_setup_video_bufs()
2004 struct omap_vout_device *vout; in omap_vout_create_video_devices() local
2012 vout = kzalloc(sizeof(struct omap_vout_device), GFP_KERNEL); in omap_vout_create_video_devices()
2013 if (!vout) { in omap_vout_create_video_devices()
2018 vout->vid = k; in omap_vout_create_video_devices()
2019 vid_dev->vouts[k] = vout; in omap_vout_create_video_devices()
2020 vout->vid_dev = vid_dev; in omap_vout_create_video_devices()
2023 vout->vid_info.overlays[0] = vid_dev->overlays[k + 2]; in omap_vout_create_video_devices()
2026 vout->vid_info.overlays[0] = vid_dev->overlays[k + 1]; in omap_vout_create_video_devices()
2027 vout->vid_info.num_overlays = 1; in omap_vout_create_video_devices()
2028 vout->vid_info.id = k + 1; in omap_vout_create_video_devices()
2032 vout->vid_info.rotation_type = VOUT_ROT_VRFB; in omap_vout_create_video_devices()
2036 if (omap_vout_setup_video_data(vout) != 0) { in omap_vout_create_video_devices()
2051 vfd = vout->vfd; in omap_vout_create_video_devices()
2059 video_set_drvdata(vfd, vout); in omap_vout_create_video_devices()
2068 if (vout->vid_info.rotation_type == VOUT_ROT_VRFB) in omap_vout_create_video_devices()
2069 omap_vout_release_vrfb(vout); in omap_vout_create_video_devices()
2070 omap_vout_free_buffers(vout); in omap_vout_create_video_devices()
2074 kfree(vout); in omap_vout_create_video_devices()
2081 static void omap_vout_cleanup_device(struct omap_vout_device *vout) in omap_vout_cleanup_device() argument
2086 if (!vout) in omap_vout_cleanup_device()
2089 vfd = vout->vfd; in omap_vout_cleanup_device()
2090 ovid = &vout->vid_info; in omap_vout_cleanup_device()
2107 omap_vout_release_vrfb(vout); in omap_vout_cleanup_device()
2111 if (vout->vrfb_static_allocation) in omap_vout_cleanup_device()
2112 omap_vout_free_vrfb_buffers(vout); in omap_vout_cleanup_device()
2114 omap_vout_free_buffers(vout); in omap_vout_cleanup_device()
2116 kfree(vout); in omap_vout_cleanup_device()