Lines Matching refs:vout
231 void omap_vout_free_buffers(struct omap_vout_device *vout) in omap_vout_free_buffers() argument
236 numbuffers = (vout->vid) ? video2_numbuffers : video1_numbuffers; in omap_vout_free_buffers()
237 vout->buffer_size = (vout->vid) ? video2_bufsize : video1_bufsize; in omap_vout_free_buffers()
240 omap_vout_free_buffer(vout->buf_virt_addr[i], in omap_vout_free_buffers()
241 vout->buffer_size); in omap_vout_free_buffers()
242 vout->buf_phy_addr[i] = 0; in omap_vout_free_buffers()
243 vout->buf_virt_addr[i] = 0; in omap_vout_free_buffers()
276 static int omap_vout_calculate_offset(struct omap_vout_device *vout) in omap_vout_calculate_offset() argument
279 struct v4l2_rect *crop = &vout->crop; in omap_vout_calculate_offset()
280 struct v4l2_pix_format *pix = &vout->pix; in omap_vout_calculate_offset()
281 int *cropped_offset = &vout->cropped_offset; in omap_vout_calculate_offset()
284 ovid = &vout->vid_info; in omap_vout_calculate_offset()
287 omap_vout_calculate_vrfb_offset(vout); in omap_vout_calculate_offset()
289 vout->line_length = line_length = pix->width; in omap_vout_calculate_offset()
299 vout->ps = ps; in omap_vout_calculate_offset()
305 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, "%s Offset:%x\n", in omap_vout_calculate_offset()
306 __func__, vout->cropped_offset); in omap_vout_calculate_offset()
314 static int video_mode_to_dss_mode(struct omap_vout_device *vout) in video_mode_to_dss_mode() argument
318 struct v4l2_pix_format *pix = &vout->pix; in video_mode_to_dss_mode()
321 ovid = &vout->vid_info; in video_mode_to_dss_mode()
354 static int omapvid_setup_overlay(struct omap_vout_device *vout, in omapvid_setup_overlay() argument
363 (outw != vout->pix.width || outh != vout->pix.height)) { in omapvid_setup_overlay()
368 vout->dss_mode = video_mode_to_dss_mode(vout); in omapvid_setup_overlay()
369 if (vout->dss_mode == -EINVAL) { in omapvid_setup_overlay()
377 if (is_rotation_90_or_270(vout)) { in omapvid_setup_overlay()
378 cropheight = vout->crop.width; in omapvid_setup_overlay()
379 cropwidth = vout->crop.height; in omapvid_setup_overlay()
380 pixwidth = vout->pix.height; in omapvid_setup_overlay()
382 cropheight = vout->crop.height; in omapvid_setup_overlay()
383 cropwidth = vout->crop.width; in omapvid_setup_overlay()
384 pixwidth = vout->pix.width; in omapvid_setup_overlay()
391 info.color_mode = vout->dss_mode; in omapvid_setup_overlay()
392 info.mirror = vout->mirror; in omapvid_setup_overlay()
397 info.global_alpha = vout->win.global_alpha; in omapvid_setup_overlay()
398 if (!is_rotation_enabled(vout)) { in omapvid_setup_overlay()
403 info.rotation = vout->rotation; in omapvid_setup_overlay()
408 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, in omapvid_setup_overlay()
424 v4l2_warn(&vout->vid_dev->v4l2_dev, "setup_overlay failed\n"); in omapvid_setup_overlay()
431 static int omapvid_init(struct omap_vout_device *vout, u32 addr) in omapvid_init() argument
438 struct omapvideo_info *ovid = &vout->vid_info; in omapvid_init()
440 win = &vout->win; in omapvid_init()
454 switch (vout->rotation) { in omapvid_init()
481 ret = omapvid_setup_overlay(vout, ovl, posx, posy, in omapvid_init()
489 v4l2_warn(&vout->vid_dev->v4l2_dev, "apply_changes failed\n"); in omapvid_init()
496 static int omapvid_apply_changes(struct omap_vout_device *vout) in omapvid_apply_changes() argument
500 struct omapvideo_info *ovid = &vout->vid_info; in omapvid_apply_changes()
515 static int omapvid_handle_interlace_display(struct omap_vout_device *vout, in omapvid_handle_interlace_display() argument
520 if (vout->first_int) { in omapvid_handle_interlace_display()
521 vout->first_int = 0; in omapvid_handle_interlace_display()
532 vout->field_id ^= 1; in omapvid_handle_interlace_display()
533 if (fid != vout->field_id) { in omapvid_handle_interlace_display()
535 vout->field_id = fid; in omapvid_handle_interlace_display()
537 if (vout->cur_frm == vout->next_frm) in omapvid_handle_interlace_display()
540 vout->cur_frm->ts = timevalue; in omapvid_handle_interlace_display()
541 vout->cur_frm->state = VIDEOBUF_DONE; in omapvid_handle_interlace_display()
542 wake_up_interruptible(&vout->cur_frm->done); in omapvid_handle_interlace_display()
543 vout->cur_frm = vout->next_frm; in omapvid_handle_interlace_display()
545 if (list_empty(&vout->dma_queue) || in omapvid_handle_interlace_display()
546 (vout->cur_frm != vout->next_frm)) in omapvid_handle_interlace_display()
550 return vout->field_id; in omapvid_handle_interlace_display()
563 struct omap_vout_device *vout = (struct omap_vout_device *)arg; in omap_vout_isr() local
565 if (!vout->streaming) in omap_vout_isr()
568 ovid = &vout->vid_info; in omap_vout_isr()
579 spin_lock(&vout->vbq_lock); in omap_vout_isr()
597 fid = omapvid_handle_interlace_display(vout, irqstatus, in omap_vout_isr()
610 if (!vout->first_int && (vout->cur_frm != vout->next_frm)) { in omap_vout_isr()
611 vout->cur_frm->ts = timevalue; in omap_vout_isr()
612 vout->cur_frm->state = VIDEOBUF_DONE; in omap_vout_isr()
613 wake_up_interruptible(&vout->cur_frm->done); in omap_vout_isr()
614 vout->cur_frm = vout->next_frm; in omap_vout_isr()
617 vout->first_int = 0; in omap_vout_isr()
618 if (list_empty(&vout->dma_queue)) in omap_vout_isr()
621 vout->next_frm = list_entry(vout->dma_queue.next, in omap_vout_isr()
623 list_del(&vout->next_frm->queue); in omap_vout_isr()
625 vout->next_frm->state = VIDEOBUF_ACTIVE; in omap_vout_isr()
627 addr = (unsigned long) vout->queued_buf_addr[vout->next_frm->i] in omap_vout_isr()
628 + vout->cropped_offset; in omap_vout_isr()
631 ret = omapvid_init(vout, addr); in omap_vout_isr()
639 ret = omapvid_apply_changes(vout); in omap_vout_isr()
644 spin_unlock(&vout->vbq_lock); in omap_vout_isr()
660 struct omap_vout_device *vout = q->priv_data; in omap_vout_buffer_setup() local
661 struct omapvideo_info *ovid = &vout->vid_info; in omap_vout_buffer_setup()
664 if (!vout) in omap_vout_buffer_setup()
667 vid_max_buf_size = vout->vid == OMAP_VIDEO1 ? video1_bufsize : in omap_vout_buffer_setup()
673 startindex = (vout->vid == OMAP_VIDEO1) ? in omap_vout_buffer_setup()
675 if (V4L2_MEMORY_MMAP == vout->memory && *count < startindex) in omap_vout_buffer_setup()
679 if (omap_vout_vrfb_buffer_setup(vout, count, startindex)) in omap_vout_buffer_setup()
683 if (V4L2_MEMORY_MMAP != vout->memory) in omap_vout_buffer_setup()
687 *size = PAGE_ALIGN(vout->pix.width * vout->pix.height * vout->bpp); in omap_vout_buffer_setup()
688 startindex = (vout->vid == OMAP_VIDEO1) ? in omap_vout_buffer_setup()
693 v4l2_err(&vout->vid_dev->v4l2_dev, in omap_vout_buffer_setup()
695 *size, vout->buffer_size); in omap_vout_buffer_setup()
700 vout->buffer_size = *size; in omap_vout_buffer_setup()
702 virt_addr = omap_vout_alloc_buffer(vout->buffer_size, in omap_vout_buffer_setup()
708 if (!is_rotation_enabled(vout)) in omap_vout_buffer_setup()
713 omap_vout_free_buffer(vout->smsshado_virt_addr[j], in omap_vout_buffer_setup()
714 vout->smsshado_size); in omap_vout_buffer_setup()
715 vout->smsshado_virt_addr[j] = 0; in omap_vout_buffer_setup()
716 vout->smsshado_phy_addr[j] = 0; in omap_vout_buffer_setup()
719 vout->buf_virt_addr[i] = virt_addr; in omap_vout_buffer_setup()
720 vout->buf_phy_addr[i] = phy_addr; in omap_vout_buffer_setup()
722 *count = vout->buffer_allocated = i; in omap_vout_buffer_setup()
731 static void omap_vout_free_extra_buffers(struct omap_vout_device *vout) in omap_vout_free_extra_buffers() argument
735 num_buffers = (vout->vid == OMAP_VIDEO1) ? in omap_vout_free_extra_buffers()
738 for (i = num_buffers; i < vout->buffer_allocated; i++) { in omap_vout_free_extra_buffers()
739 if (vout->buf_virt_addr[i]) in omap_vout_free_extra_buffers()
740 omap_vout_free_buffer(vout->buf_virt_addr[i], in omap_vout_free_extra_buffers()
741 vout->buffer_size); in omap_vout_free_extra_buffers()
743 vout->buf_virt_addr[i] = 0; in omap_vout_free_extra_buffers()
744 vout->buf_phy_addr[i] = 0; in omap_vout_free_extra_buffers()
746 vout->buffer_allocated = num_buffers; in omap_vout_free_extra_buffers()
760 struct omap_vout_device *vout = q->priv_data; in omap_vout_buffer_prepare() local
761 struct omapvideo_info *ovid = &vout->vid_info; in omap_vout_buffer_prepare()
764 vb->width = vout->pix.width; in omap_vout_buffer_prepare()
765 vb->height = vout->pix.height; in omap_vout_buffer_prepare()
766 vb->size = vb->width * vb->height * vout->bpp; in omap_vout_buffer_prepare()
780 (u32 *)&vout->queued_buf_addr[vb->i]); in omap_vout_buffer_prepare()
787 addr = (unsigned long) vout->buf_virt_addr[vb->i]; in omap_vout_buffer_prepare()
790 dma_addr = dma_map_single(vout->vid_dev->v4l2_dev.dev, (void *) addr, in omap_vout_buffer_prepare()
792 if (dma_mapping_error(vout->vid_dev->v4l2_dev.dev, dma_addr)) in omap_vout_buffer_prepare()
793 v4l2_err(&vout->vid_dev->v4l2_dev, in omap_vout_buffer_prepare()
796 vout->queued_buf_addr[vb->i] = (u8 *)vout->buf_phy_addr[vb->i]; in omap_vout_buffer_prepare()
800 return omap_vout_prepare_vrfb(vout, vb); in omap_vout_buffer_prepare()
813 struct omap_vout_device *vout = q->priv_data; in omap_vout_buffer_queue() local
817 list_add_tail(&vb->queue, &vout->dma_queue); in omap_vout_buffer_queue()
844 struct omap_vout_device *vout = file->private_data; in omap_vout_poll() local
845 struct videobuf_queue *q = &vout->vbq; in omap_vout_poll()
852 struct omap_vout_device *vout = vma->vm_private_data; in omap_vout_vm_open() local
854 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, in omap_vout_vm_open()
856 vout->mmap_count++; in omap_vout_vm_open()
861 struct omap_vout_device *vout = vma->vm_private_data; in omap_vout_vm_close() local
863 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, in omap_vout_vm_close()
865 vout->mmap_count--; in omap_vout_vm_close()
879 struct omap_vout_device *vout = file->private_data; in omap_vout_mmap() local
880 struct videobuf_queue *q = &vout->vbq; in omap_vout_mmap()
882 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, in omap_vout_mmap()
897 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, in omap_vout_mmap()
903 if (size > vout->buffer_size) { in omap_vout_mmap()
904 v4l2_err(&vout->vid_dev->v4l2_dev, in omap_vout_mmap()
906 size, vout->buffer_size); in omap_vout_mmap()
915 vma->vm_private_data = (void *) vout; in omap_vout_mmap()
916 pos = (void *)vout->buf_virt_addr[i]; in omap_vout_mmap()
927 vout->mmap_count++; in omap_vout_mmap()
928 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, "Exiting %s\n", __func__); in omap_vout_mmap()
938 struct omap_vout_device *vout = file->private_data; in omap_vout_release() local
940 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, "Entering %s\n", __func__); in omap_vout_release()
941 ovid = &vout->vid_info; in omap_vout_release()
943 if (!vout) in omap_vout_release()
946 q = &vout->vbq; in omap_vout_release()
956 ret = omapvid_apply_changes(vout); in omap_vout_release()
958 v4l2_warn(&vout->vid_dev->v4l2_dev, in omap_vout_release()
962 omap_vout_free_extra_buffers(vout); in omap_vout_release()
968 if (!vout->vrfb_static_allocation) in omap_vout_release()
969 omap_vout_free_vrfb_buffers(vout); in omap_vout_release()
975 if (vout->streaming) { in omap_vout_release()
980 omap_dispc_unregister_isr(omap_vout_isr, vout, mask); in omap_vout_release()
981 vout->streaming = false; in omap_vout_release()
987 if (vout->mmap_count != 0) in omap_vout_release()
988 vout->mmap_count = 0; in omap_vout_release()
990 vout->opened -= 1; in omap_vout_release()
993 if (vout->buffer_allocated) in omap_vout_release()
996 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, "Exiting %s\n", __func__); in omap_vout_release()
1003 struct omap_vout_device *vout = NULL; in omap_vout_open() local
1005 vout = video_drvdata(file); in omap_vout_open()
1007 if (vout == NULL) in omap_vout_open()
1010 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, "Entering %s\n", __func__); in omap_vout_open()
1013 if (vout->opened) in omap_vout_open()
1016 vout->opened += 1; in omap_vout_open()
1018 file->private_data = vout; in omap_vout_open()
1019 vout->type = V4L2_BUF_TYPE_VIDEO_OUTPUT; in omap_vout_open()
1021 q = &vout->vbq; in omap_vout_open()
1026 spin_lock_init(&vout->vbq_lock); in omap_vout_open()
1029 &vout->vbq_lock, vout->type, V4L2_FIELD_NONE, in omap_vout_open()
1030 sizeof(struct videobuf_buffer), vout, NULL); in omap_vout_open()
1032 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, "Exiting %s\n", __func__); in omap_vout_open()
1042 struct omap_vout_device *vout = fh; in vidioc_querycap() local
1045 strlcpy(cap->card, vout->vfd->name, sizeof(cap->card)); in vidioc_querycap()
1073 struct omap_vout_device *vout = fh; in vidioc_g_fmt_vid_out() local
1075 f->fmt.pix = vout->pix; in vidioc_g_fmt_vid_out()
1086 struct omap_vout_device *vout = fh; in vidioc_try_fmt_vid_out() local
1089 ovid = &vout->vid_info; in vidioc_try_fmt_vid_out()
1099 vout->fbuf.fmt.height = timing->y_res; in vidioc_try_fmt_vid_out()
1100 vout->fbuf.fmt.width = timing->x_res; in vidioc_try_fmt_vid_out()
1113 struct omap_vout_device *vout = fh; in vidioc_s_fmt_vid_out() local
1116 if (vout->streaming) in vidioc_s_fmt_vid_out()
1119 mutex_lock(&vout->lock); in vidioc_s_fmt_vid_out()
1121 ovid = &vout->vid_info; in vidioc_s_fmt_vid_out()
1134 if ((is_rotation_enabled(vout)) && in vidioc_s_fmt_vid_out()
1142 if (is_rotation_90_or_270(vout)) { in vidioc_s_fmt_vid_out()
1143 vout->fbuf.fmt.height = timing->x_res; in vidioc_s_fmt_vid_out()
1144 vout->fbuf.fmt.width = timing->y_res; in vidioc_s_fmt_vid_out()
1146 vout->fbuf.fmt.height = timing->y_res; in vidioc_s_fmt_vid_out()
1147 vout->fbuf.fmt.width = timing->x_res; in vidioc_s_fmt_vid_out()
1156 vout->bpp = bpp; in vidioc_s_fmt_vid_out()
1157 vout->pix = f->fmt.pix; in vidioc_s_fmt_vid_out()
1158 vout->vrfb_bpp = 1; in vidioc_s_fmt_vid_out()
1161 if (V4L2_PIX_FMT_YUYV == vout->pix.pixelformat || in vidioc_s_fmt_vid_out()
1162 V4L2_PIX_FMT_UYVY == vout->pix.pixelformat) in vidioc_s_fmt_vid_out()
1163 vout->vrfb_bpp = 2; in vidioc_s_fmt_vid_out()
1166 omap_vout_new_format(&vout->pix, &vout->fbuf, &vout->crop, &vout->win); in vidioc_s_fmt_vid_out()
1171 mutex_unlock(&vout->lock); in vidioc_s_fmt_vid_out()
1179 struct omap_vout_device *vout = fh; in vidioc_try_fmt_vid_overlay() local
1184 ovid = &vout->vid_info; in vidioc_try_fmt_vid_overlay()
1187 ret = omap_vout_try_window(&vout->fbuf, win); in vidioc_try_fmt_vid_overlay()
1205 struct omap_vout_device *vout = fh; in vidioc_s_fmt_vid_overlay() local
1208 mutex_lock(&vout->lock); in vidioc_s_fmt_vid_overlay()
1209 ovid = &vout->vid_info; in vidioc_s_fmt_vid_overlay()
1212 ret = omap_vout_new_window(&vout->crop, &vout->win, &vout->fbuf, win); in vidioc_s_fmt_vid_overlay()
1216 vout->win.global_alpha = 255; in vidioc_s_fmt_vid_overlay()
1218 vout->win.global_alpha = f->fmt.win.global_alpha; in vidioc_s_fmt_vid_overlay()
1220 vout->win.chromakey = f->fmt.win.chromakey; in vidioc_s_fmt_vid_overlay()
1222 mutex_unlock(&vout->lock); in vidioc_s_fmt_vid_overlay()
1232 struct omap_vout_device *vout = fh; in vidioc_g_fmt_vid_overlay() local
1236 ovid = &vout->vid_info; in vidioc_g_fmt_vid_overlay()
1239 win->w = vout->win.w; in vidioc_g_fmt_vid_overlay()
1240 win->field = vout->win.field; in vidioc_g_fmt_vid_overlay()
1241 win->global_alpha = vout->win.global_alpha; in vidioc_g_fmt_vid_overlay()
1253 struct omap_vout_device *vout = fh; in vidioc_g_selection() local
1254 struct v4l2_pix_format *pix = &vout->pix; in vidioc_g_selection()
1261 sel->r = vout->crop; in vidioc_g_selection()
1264 omap_vout_default_crop(&vout->pix, &vout->fbuf, &sel->r); in vidioc_g_selection()
1280 struct omap_vout_device *vout = fh; in vidioc_s_selection() local
1292 if (vout->streaming) in vidioc_s_selection()
1295 mutex_lock(&vout->lock); in vidioc_s_selection()
1296 ovid = &vout->vid_info; in vidioc_s_selection()
1308 if (is_rotation_90_or_270(vout)) { in vidioc_s_selection()
1309 vout->fbuf.fmt.height = timing->x_res; in vidioc_s_selection()
1310 vout->fbuf.fmt.width = timing->y_res; in vidioc_s_selection()
1312 vout->fbuf.fmt.height = timing->y_res; in vidioc_s_selection()
1313 vout->fbuf.fmt.width = timing->x_res; in vidioc_s_selection()
1316 ret = omap_vout_new_crop(&vout->pix, &vout->crop, &vout->win, in vidioc_s_selection()
1317 &vout->fbuf, &sel->r); in vidioc_s_selection()
1320 mutex_unlock(&vout->lock); in vidioc_s_selection()
1326 struct omap_vout_device *vout = in omap_vout_s_ctrl() local
1335 ovid = &vout->vid_info; in omap_vout_s_ctrl()
1337 mutex_lock(&vout->lock); in omap_vout_s_ctrl()
1339 mutex_unlock(&vout->lock); in omap_vout_s_ctrl()
1344 if (rotation && vout->pix.pixelformat == V4L2_PIX_FMT_RGB24) { in omap_vout_s_ctrl()
1345 mutex_unlock(&vout->lock); in omap_vout_s_ctrl()
1350 if (v4l2_rot_to_dss_rot(rotation, &vout->rotation, in omap_vout_s_ctrl()
1351 vout->mirror)) { in omap_vout_s_ctrl()
1352 mutex_unlock(&vout->lock); in omap_vout_s_ctrl()
1356 mutex_unlock(&vout->lock); in omap_vout_s_ctrl()
1365 ovl = vout->vid_info.overlays[0]; in omap_vout_s_ctrl()
1367 mutex_lock(&vout->lock); in omap_vout_s_ctrl()
1369 mutex_unlock(&vout->lock); in omap_vout_s_ctrl()
1377 mutex_unlock(&vout->lock); in omap_vout_s_ctrl()
1381 mutex_unlock(&vout->lock); in omap_vout_s_ctrl()
1389 ovid = &vout->vid_info; in omap_vout_s_ctrl()
1391 mutex_lock(&vout->lock); in omap_vout_s_ctrl()
1393 mutex_unlock(&vout->lock); in omap_vout_s_ctrl()
1398 if (mirror && vout->pix.pixelformat == V4L2_PIX_FMT_RGB24) { in omap_vout_s_ctrl()
1399 mutex_unlock(&vout->lock); in omap_vout_s_ctrl()
1403 vout->mirror = mirror; in omap_vout_s_ctrl()
1404 mutex_unlock(&vout->lock); in omap_vout_s_ctrl()
1422 struct omap_vout_device *vout = fh; in vidioc_reqbufs() local
1423 struct videobuf_queue *q = &vout->vbq; in vidioc_reqbufs()
1433 mutex_lock(&vout->lock); in vidioc_reqbufs()
1435 if (vout->streaming) { in vidioc_reqbufs()
1442 if (vout->mmap_count) { in vidioc_reqbufs()
1446 num_buffers = (vout->vid == OMAP_VIDEO1) ? in vidioc_reqbufs()
1448 for (i = num_buffers; i < vout->buffer_allocated; i++) { in vidioc_reqbufs()
1449 omap_vout_free_buffer(vout->buf_virt_addr[i], in vidioc_reqbufs()
1450 vout->buffer_size); in vidioc_reqbufs()
1451 vout->buf_virt_addr[i] = 0; in vidioc_reqbufs()
1452 vout->buf_phy_addr[i] = 0; in vidioc_reqbufs()
1454 vout->buffer_allocated = num_buffers; in vidioc_reqbufs()
1457 if (vout->buffer_allocated) { in vidioc_reqbufs()
1459 for (i = 0; i < vout->buffer_allocated; i++) { in vidioc_reqbufs()
1463 vout->buffer_allocated = 0; in vidioc_reqbufs()
1468 vout->memory = req->memory; in vidioc_reqbufs()
1470 INIT_LIST_HEAD(&vout->dma_queue); in vidioc_reqbufs()
1477 vout->buffer_allocated = req->count; in vidioc_reqbufs()
1480 mutex_unlock(&vout->lock); in vidioc_reqbufs()
1487 struct omap_vout_device *vout = fh; in vidioc_querybuf() local
1489 return videobuf_querybuf(&vout->vbq, b); in vidioc_querybuf()
1495 struct omap_vout_device *vout = fh; in vidioc_qbuf() local
1496 struct videobuf_queue *q = &vout->vbq; in vidioc_qbuf()
1499 (buffer->index >= vout->buffer_allocated) || in vidioc_qbuf()
1504 if ((buffer->length < vout->pix.sizeimage) || in vidioc_qbuf()
1510 if ((is_rotation_enabled(vout)) && in vidioc_qbuf()
1511 vout->vrfb_dma_tx.req_status == DMA_CHAN_NOT_ALLOTED) { in vidioc_qbuf()
1512 v4l2_warn(&vout->vid_dev->v4l2_dev, in vidioc_qbuf()
1522 struct omap_vout_device *vout = fh; in vidioc_dqbuf() local
1523 struct videobuf_queue *q = &vout->vbq; in vidioc_dqbuf()
1532 if (!vout->streaming) in vidioc_dqbuf()
1542 addr = (unsigned long) vout->buf_phy_addr[vb->i]; in vidioc_dqbuf()
1544 dma_unmap_single(vout->vid_dev->v4l2_dev.dev, addr, in vidioc_dqbuf()
1553 struct omap_vout_device *vout = fh; in vidioc_streamon() local
1554 struct videobuf_queue *q = &vout->vbq; in vidioc_streamon()
1555 struct omapvideo_info *ovid = &vout->vid_info; in vidioc_streamon()
1557 mutex_lock(&vout->lock); in vidioc_streamon()
1559 if (vout->streaming) { in vidioc_streamon()
1568 if (list_empty(&vout->dma_queue)) { in vidioc_streamon()
1574 vout->next_frm = vout->cur_frm = list_entry(vout->dma_queue.next, in vidioc_streamon()
1577 list_del(&vout->cur_frm->queue); in vidioc_streamon()
1579 vout->cur_frm->state = VIDEOBUF_ACTIVE; in vidioc_streamon()
1581 vout->field_id = 0; in vidioc_streamon()
1584 vout->streaming = true; in vidioc_streamon()
1586 vout->first_int = 1; in vidioc_streamon()
1588 if (omap_vout_calculate_offset(vout)) { in vidioc_streamon()
1592 addr = (unsigned long) vout->queued_buf_addr[vout->cur_frm->i] in vidioc_streamon()
1593 + vout->cropped_offset; in vidioc_streamon()
1599 ret = omapvid_init(vout, addr); in vidioc_streamon()
1601 v4l2_err(&vout->vid_dev->v4l2_dev, in vidioc_streamon()
1606 omap_dispc_register_isr(omap_vout_isr, vout, mask); in vidioc_streamon()
1609 ret = omapvid_apply_changes(vout); in vidioc_streamon()
1611 v4l2_err(&vout->vid_dev->v4l2_dev, "failed to change mode\n"); in vidioc_streamon()
1630 mutex_unlock(&vout->lock); in vidioc_streamon()
1638 struct omap_vout_device *vout = fh; in vidioc_streamoff() local
1639 struct omapvideo_info *ovid = &vout->vid_info; in vidioc_streamoff()
1641 if (!vout->streaming) in vidioc_streamoff()
1644 vout->streaming = false; in vidioc_streamoff()
1648 omap_dispc_unregister_isr(omap_vout_isr, vout, mask); in vidioc_streamoff()
1659 ret = omapvid_apply_changes(vout); in vidioc_streamoff()
1661 v4l2_err(&vout->vid_dev->v4l2_dev, in vidioc_streamoff()
1664 INIT_LIST_HEAD(&vout->dma_queue); in vidioc_streamoff()
1665 ret = videobuf_streamoff(&vout->vbq); in vidioc_streamoff()
1676 struct omap_vout_device *vout = fh; in vidioc_s_fbuf() local
1680 ovid = &vout->vid_info; in vidioc_s_fbuf()
1695 vout->fbuf.flags |= V4L2_FBUF_FLAG_SRC_CHROMAKEY; in vidioc_s_fbuf()
1698 vout->fbuf.flags &= ~V4L2_FBUF_FLAG_SRC_CHROMAKEY; in vidioc_s_fbuf()
1701 vout->fbuf.flags |= V4L2_FBUF_FLAG_CHROMAKEY; in vidioc_s_fbuf()
1704 vout->fbuf.flags &= ~V4L2_FBUF_FLAG_CHROMAKEY; in vidioc_s_fbuf()
1717 info.trans_key = vout->win.chromakey; in vidioc_s_fbuf()
1723 vout->fbuf.flags |= V4L2_FBUF_FLAG_LOCAL_ALPHA; in vidioc_s_fbuf()
1726 vout->fbuf.flags &= ~V4L2_FBUF_FLAG_LOCAL_ALPHA; in vidioc_s_fbuf()
1747 struct omap_vout_device *vout = fh; in vidioc_g_fbuf() local
1750 ovid = &vout->vid_info; in vidioc_g_fbuf()
1807 static int __init omap_vout_setup_video_data(struct omap_vout_device *vout) in omap_vout_setup_video_data() argument
1811 struct omap_overlay *ovl = vout->vid_info.overlays[0]; in omap_vout_setup_video_data()
1816 pix = &vout->pix; in omap_vout_setup_video_data()
1829 vout->bpp = RGB565_BPP; in omap_vout_setup_video_data()
1830 vout->fbuf.fmt.width = display->panel.timings.x_res; in omap_vout_setup_video_data()
1831 vout->fbuf.fmt.height = display->panel.timings.y_res; in omap_vout_setup_video_data()
1834 vout->win.global_alpha = 255; in omap_vout_setup_video_data()
1835 vout->fbuf.flags = 0; in omap_vout_setup_video_data()
1836 vout->fbuf.capability = V4L2_FBUF_CAP_LOCAL_ALPHA | in omap_vout_setup_video_data()
1838 vout->win.chromakey = 0; in omap_vout_setup_video_data()
1840 omap_vout_new_format(pix, &vout->fbuf, &vout->crop, &vout->win); in omap_vout_setup_video_data()
1842 hdl = &vout->ctrl_handler; in omap_vout_setup_video_data()
1853 vout->rotation = 0; in omap_vout_setup_video_data()
1854 vout->mirror = false; in omap_vout_setup_video_data()
1855 if (vout->vid_info.rotation_type == VOUT_ROT_VRFB) in omap_vout_setup_video_data()
1856 vout->vrfb_bpp = 2; in omap_vout_setup_video_data()
1859 vfd = vout->vfd = video_device_alloc(); in omap_vout_setup_video_data()
1874 vfd->v4l2_dev = &vout->vid_dev->v4l2_dev; in omap_vout_setup_video_data()
1876 mutex_init(&vout->lock); in omap_vout_setup_video_data()
1890 struct omap_vout_device *vout; in omap_vout_setup_video_bufs() local
1895 vout = vid_dev->vouts[vid_num]; in omap_vout_setup_video_bufs()
1896 ovid = &vout->vid_info; in omap_vout_setup_video_bufs()
1899 vout->buffer_size = (vid_num == 0) ? video1_bufsize : video2_bufsize; in omap_vout_setup_video_bufs()
1900 dev_info(&pdev->dev, "Buffer Size = %d\n", vout->buffer_size); in omap_vout_setup_video_bufs()
1903 vout->buf_virt_addr[i] = in omap_vout_setup_video_bufs()
1904 omap_vout_alloc_buffer(vout->buffer_size, in omap_vout_setup_video_bufs()
1905 (u32 *) &vout->buf_phy_addr[i]); in omap_vout_setup_video_bufs()
1906 if (!vout->buf_virt_addr[i]) { in omap_vout_setup_video_bufs()
1913 vout->cropped_offset = 0; in omap_vout_setup_video_bufs()
1926 omap_vout_free_buffer(vout->buf_virt_addr[i], in omap_vout_setup_video_bufs()
1927 vout->buffer_size); in omap_vout_setup_video_bufs()
1928 vout->buf_virt_addr[i] = 0; in omap_vout_setup_video_bufs()
1929 vout->buf_phy_addr[i] = 0; in omap_vout_setup_video_bufs()
1939 struct omap_vout_device *vout; in omap_vout_create_video_devices() local
1947 vout = kzalloc(sizeof(struct omap_vout_device), GFP_KERNEL); in omap_vout_create_video_devices()
1948 if (!vout) { in omap_vout_create_video_devices()
1953 vout->vid = k; in omap_vout_create_video_devices()
1954 vid_dev->vouts[k] = vout; in omap_vout_create_video_devices()
1955 vout->vid_dev = vid_dev; in omap_vout_create_video_devices()
1958 vout->vid_info.overlays[0] = vid_dev->overlays[k + 2]; in omap_vout_create_video_devices()
1961 vout->vid_info.overlays[0] = vid_dev->overlays[k + 1]; in omap_vout_create_video_devices()
1962 vout->vid_info.num_overlays = 1; in omap_vout_create_video_devices()
1963 vout->vid_info.id = k + 1; in omap_vout_create_video_devices()
1967 vout->vid_info.rotation_type = VOUT_ROT_VRFB; in omap_vout_create_video_devices()
1971 if (omap_vout_setup_video_data(vout) != 0) { in omap_vout_create_video_devices()
1986 vfd = vout->vfd; in omap_vout_create_video_devices()
1994 video_set_drvdata(vfd, vout); in omap_vout_create_video_devices()
2004 if (vout->vid_info.rotation_type == VOUT_ROT_VRFB) in omap_vout_create_video_devices()
2005 omap_vout_release_vrfb(vout); in omap_vout_create_video_devices()
2006 omap_vout_free_buffers(vout); in omap_vout_create_video_devices()
2010 kfree(vout); in omap_vout_create_video_devices()
2017 static void omap_vout_cleanup_device(struct omap_vout_device *vout) in omap_vout_cleanup_device() argument
2022 if (!vout) in omap_vout_cleanup_device()
2025 vfd = vout->vfd; in omap_vout_cleanup_device()
2026 ovid = &vout->vid_info; in omap_vout_cleanup_device()
2042 v4l2_ctrl_handler_free(&vout->ctrl_handler); in omap_vout_cleanup_device()
2044 omap_vout_release_vrfb(vout); in omap_vout_cleanup_device()
2048 if (vout->vrfb_static_allocation) in omap_vout_cleanup_device()
2049 omap_vout_free_vrfb_buffers(vout); in omap_vout_cleanup_device()
2051 omap_vout_free_buffers(vout); in omap_vout_cleanup_device()
2053 kfree(vout); in omap_vout_cleanup_device()