• Home
  • Raw
  • Download

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()
367 static int omapvid_setup_overlay(struct omap_vout_device *vout, in omapvid_setup_overlay() argument
376 (outw != vout->pix.width || outh != vout->pix.height)) { in omapvid_setup_overlay()
381 vout->dss_mode = video_mode_to_dss_mode(vout); in omapvid_setup_overlay()
382 if (vout->dss_mode == -EINVAL) { in omapvid_setup_overlay()
390 if (is_rotation_90_or_270(vout)) { in omapvid_setup_overlay()
391 cropheight = vout->crop.width; in omapvid_setup_overlay()
392 cropwidth = vout->crop.height; in omapvid_setup_overlay()
393 pixheight = vout->pix.width; in omapvid_setup_overlay()
394 pixwidth = vout->pix.height; in omapvid_setup_overlay()
396 cropheight = vout->crop.height; in omapvid_setup_overlay()
397 cropwidth = vout->crop.width; in omapvid_setup_overlay()
398 pixheight = vout->pix.height; in omapvid_setup_overlay()
399 pixwidth = vout->pix.width; in omapvid_setup_overlay()
406 info.color_mode = vout->dss_mode; in omapvid_setup_overlay()
407 info.mirror = vout->mirror; in omapvid_setup_overlay()
412 info.global_alpha = vout->win.global_alpha; in omapvid_setup_overlay()
413 if (!is_rotation_enabled(vout)) { in omapvid_setup_overlay()
418 info.rotation = vout->rotation; in omapvid_setup_overlay()
423 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, in omapvid_setup_overlay()
439 v4l2_warn(&vout->vid_dev->v4l2_dev, "setup_overlay failed\n"); in omapvid_setup_overlay()
446 static int omapvid_init(struct omap_vout_device *vout, u32 addr) in omapvid_init() argument
453 struct omapvideo_info *ovid = &vout->vid_info; in omapvid_init()
455 win = &vout->win; in omapvid_init()
465 switch (vout->rotation) { in omapvid_init()
496 ret = omapvid_setup_overlay(vout, ovl, posx, posy, in omapvid_init()
504 v4l2_warn(&vout->vid_dev->v4l2_dev, "apply_changes failed\n"); in omapvid_init()
511 static int omapvid_apply_changes(struct omap_vout_device *vout) in omapvid_apply_changes() argument
515 struct omapvideo_info *ovid = &vout->vid_info; in omapvid_apply_changes()
527 static int omapvid_handle_interlace_display(struct omap_vout_device *vout, in omapvid_handle_interlace_display() argument
532 if (vout->first_int) { in omapvid_handle_interlace_display()
533 vout->first_int = 0; in omapvid_handle_interlace_display()
544 vout->field_id ^= 1; in omapvid_handle_interlace_display()
545 if (fid != vout->field_id) { in omapvid_handle_interlace_display()
547 vout->field_id = fid; in omapvid_handle_interlace_display()
549 if (vout->cur_frm == vout->next_frm) in omapvid_handle_interlace_display()
552 vout->cur_frm->ts = timevalue; in omapvid_handle_interlace_display()
553 vout->cur_frm->state = VIDEOBUF_DONE; in omapvid_handle_interlace_display()
554 wake_up_interruptible(&vout->cur_frm->done); in omapvid_handle_interlace_display()
555 vout->cur_frm = vout->next_frm; in omapvid_handle_interlace_display()
557 if (list_empty(&vout->dma_queue) || in omapvid_handle_interlace_display()
558 (vout->cur_frm != vout->next_frm)) in omapvid_handle_interlace_display()
562 return vout->field_id; in omapvid_handle_interlace_display()
575 struct omap_vout_device *vout = (struct omap_vout_device *)arg; in omap_vout_isr() local
577 if (!vout->streaming) in omap_vout_isr()
580 ovid = &vout->vid_info; in omap_vout_isr()
589 spin_lock(&vout->vbq_lock); in omap_vout_isr()
606 fid = omapvid_handle_interlace_display(vout, irqstatus, in omap_vout_isr()
619 if (!vout->first_int && (vout->cur_frm != vout->next_frm)) { in omap_vout_isr()
620 vout->cur_frm->ts = timevalue; in omap_vout_isr()
621 vout->cur_frm->state = VIDEOBUF_DONE; in omap_vout_isr()
622 wake_up_interruptible(&vout->cur_frm->done); in omap_vout_isr()
623 vout->cur_frm = vout->next_frm; in omap_vout_isr()
626 vout->first_int = 0; in omap_vout_isr()
627 if (list_empty(&vout->dma_queue)) in omap_vout_isr()
630 vout->next_frm = list_entry(vout->dma_queue.next, in omap_vout_isr()
632 list_del(&vout->next_frm->queue); in omap_vout_isr()
634 vout->next_frm->state = VIDEOBUF_ACTIVE; in omap_vout_isr()
636 addr = (unsigned long) vout->queued_buf_addr[vout->next_frm->i] in omap_vout_isr()
637 + vout->cropped_offset; in omap_vout_isr()
640 ret = omapvid_init(vout, addr); in omap_vout_isr()
645 ret = omapvid_apply_changes(vout); in omap_vout_isr()
650 spin_unlock(&vout->vbq_lock); in omap_vout_isr()
666 struct omap_vout_device *vout = q->priv_data; in omap_vout_buffer_setup() local
667 struct omapvideo_info *ovid = &vout->vid_info; in omap_vout_buffer_setup()
670 if (!vout) in omap_vout_buffer_setup()
673 vid_max_buf_size = vout->vid == OMAP_VIDEO1 ? video1_bufsize : in omap_vout_buffer_setup()
679 startindex = (vout->vid == OMAP_VIDEO1) ? in omap_vout_buffer_setup()
681 if (V4L2_MEMORY_MMAP == vout->memory && *count < startindex) in omap_vout_buffer_setup()
685 if (omap_vout_vrfb_buffer_setup(vout, count, startindex)) in omap_vout_buffer_setup()
689 if (V4L2_MEMORY_MMAP != vout->memory) in omap_vout_buffer_setup()
693 *size = PAGE_ALIGN(vout->pix.width * vout->pix.height * vout->bpp); in omap_vout_buffer_setup()
694 startindex = (vout->vid == OMAP_VIDEO1) ? in omap_vout_buffer_setup()
699 v4l2_err(&vout->vid_dev->v4l2_dev, in omap_vout_buffer_setup()
701 *size, vout->buffer_size); in omap_vout_buffer_setup()
706 vout->buffer_size = *size; in omap_vout_buffer_setup()
708 virt_addr = omap_vout_alloc_buffer(vout->buffer_size, in omap_vout_buffer_setup()
714 if (!is_rotation_enabled(vout)) in omap_vout_buffer_setup()
719 vout->smsshado_virt_addr[j], in omap_vout_buffer_setup()
720 vout->smsshado_size); in omap_vout_buffer_setup()
721 vout->smsshado_virt_addr[j] = 0; in omap_vout_buffer_setup()
722 vout->smsshado_phy_addr[j] = 0; in omap_vout_buffer_setup()
726 vout->buf_virt_addr[i] = virt_addr; in omap_vout_buffer_setup()
727 vout->buf_phy_addr[i] = phy_addr; in omap_vout_buffer_setup()
729 *count = vout->buffer_allocated = i; in omap_vout_buffer_setup()
738 static void omap_vout_free_extra_buffers(struct omap_vout_device *vout) in omap_vout_free_extra_buffers() argument
742 num_buffers = (vout->vid == OMAP_VIDEO1) ? in omap_vout_free_extra_buffers()
745 for (i = num_buffers; i < vout->buffer_allocated; i++) { in omap_vout_free_extra_buffers()
746 if (vout->buf_virt_addr[i]) in omap_vout_free_extra_buffers()
747 omap_vout_free_buffer(vout->buf_virt_addr[i], in omap_vout_free_extra_buffers()
748 vout->buffer_size); in omap_vout_free_extra_buffers()
750 vout->buf_virt_addr[i] = 0; in omap_vout_free_extra_buffers()
751 vout->buf_phy_addr[i] = 0; in omap_vout_free_extra_buffers()
753 vout->buffer_allocated = num_buffers; in omap_vout_free_extra_buffers()
767 struct omap_vout_device *vout = q->priv_data; in omap_vout_buffer_prepare() local
768 struct omapvideo_info *ovid = &vout->vid_info; in omap_vout_buffer_prepare()
771 vb->width = vout->pix.width; in omap_vout_buffer_prepare()
772 vb->height = vout->pix.height; in omap_vout_buffer_prepare()
773 vb->size = vb->width * vb->height * vout->bpp; in omap_vout_buffer_prepare()
784 vout->queued_buf_addr[vb->i] = (u8 *) in omap_vout_buffer_prepare()
790 addr = (unsigned long) vout->buf_virt_addr[vb->i]; in omap_vout_buffer_prepare()
793 dma_addr = dma_map_single(vout->vid_dev->v4l2_dev.dev, (void *) addr, in omap_vout_buffer_prepare()
795 if (dma_mapping_error(vout->vid_dev->v4l2_dev.dev, dma_addr)) in omap_vout_buffer_prepare()
796 v4l2_err(&vout->vid_dev->v4l2_dev, "dma_map_single failed\n"); in omap_vout_buffer_prepare()
798 vout->queued_buf_addr[vb->i] = (u8 *)vout->buf_phy_addr[vb->i]; in omap_vout_buffer_prepare()
802 return omap_vout_prepare_vrfb(vout, vb); in omap_vout_buffer_prepare()
815 struct omap_vout_device *vout = q->priv_data; in omap_vout_buffer_queue() local
819 list_add_tail(&vb->queue, &vout->dma_queue); in omap_vout_buffer_queue()
831 struct omap_vout_device *vout = q->priv_data; in omap_vout_buffer_release() local
835 if (V4L2_MEMORY_MMAP != vout->memory) in omap_vout_buffer_release()
845 struct omap_vout_device *vout = file->private_data; in omap_vout_poll() local
846 struct videobuf_queue *q = &vout->vbq; in omap_vout_poll()
853 struct omap_vout_device *vout = vma->vm_private_data; in omap_vout_vm_open() local
855 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, in omap_vout_vm_open()
857 vout->mmap_count++; in omap_vout_vm_open()
862 struct omap_vout_device *vout = vma->vm_private_data; in omap_vout_vm_close() local
864 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, in omap_vout_vm_close()
866 vout->mmap_count--; in omap_vout_vm_close()
880 struct omap_vout_device *vout = file->private_data; in omap_vout_mmap() local
881 struct videobuf_queue *q = &vout->vbq; in omap_vout_mmap()
883 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, in omap_vout_mmap()
898 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, in omap_vout_mmap()
904 if (size > vout->buffer_size) { in omap_vout_mmap()
905 v4l2_err(&vout->vid_dev->v4l2_dev, in omap_vout_mmap()
907 size, vout->buffer_size); in omap_vout_mmap()
916 vma->vm_private_data = (void *) vout; in omap_vout_mmap()
917 pos = (void *)vout->buf_virt_addr[i]; in omap_vout_mmap()
928 vout->mmap_count++; in omap_vout_mmap()
929 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, "Exiting %s\n", __func__); in omap_vout_mmap()
939 struct omap_vout_device *vout = file->private_data; in omap_vout_release() local
941 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, "Entering %s\n", __func__); in omap_vout_release()
942 ovid = &vout->vid_info; in omap_vout_release()
944 if (!vout) in omap_vout_release()
947 q = &vout->vbq; in omap_vout_release()
955 ret = omapvid_apply_changes(vout); in omap_vout_release()
957 v4l2_warn(&vout->vid_dev->v4l2_dev, in omap_vout_release()
961 omap_vout_free_extra_buffers(vout); in omap_vout_release()
967 if (!vout->vrfb_static_allocation) in omap_vout_release()
968 omap_vout_free_vrfb_buffers(vout); in omap_vout_release()
974 if (vout->streaming) { in omap_vout_release()
979 omap_dispc_unregister_isr(omap_vout_isr, vout, mask); in omap_vout_release()
980 vout->streaming = 0; in omap_vout_release()
986 if (vout->mmap_count != 0) in omap_vout_release()
987 vout->mmap_count = 0; in omap_vout_release()
989 vout->opened -= 1; in omap_vout_release()
992 if (vout->buffer_allocated) in omap_vout_release()
995 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, "Exiting %s\n", __func__); in omap_vout_release()
1002 struct omap_vout_device *vout = NULL; in omap_vout_open() local
1004 vout = video_drvdata(file); in omap_vout_open()
1005 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, "Entering %s\n", __func__); in omap_vout_open()
1007 if (vout == NULL) in omap_vout_open()
1011 if (vout->opened) in omap_vout_open()
1014 vout->opened += 1; in omap_vout_open()
1016 file->private_data = vout; in omap_vout_open()
1017 vout->type = V4L2_BUF_TYPE_VIDEO_OUTPUT; in omap_vout_open()
1019 q = &vout->vbq; in omap_vout_open()
1024 spin_lock_init(&vout->vbq_lock); in omap_vout_open()
1027 &vout->vbq_lock, vout->type, V4L2_FIELD_NONE, in omap_vout_open()
1028 sizeof(struct videobuf_buffer), vout, NULL); in omap_vout_open()
1030 v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, "Exiting %s\n", __func__); in omap_vout_open()
1040 struct omap_vout_device *vout = fh; in vidioc_querycap() local
1043 strlcpy(cap->card, vout->vfd->name, sizeof(cap->card)); in vidioc_querycap()
1070 struct omap_vout_device *vout = fh; in vidioc_g_fmt_vid_out() local
1072 f->fmt.pix = vout->pix; in vidioc_g_fmt_vid_out()
1083 struct omap_vout_device *vout = fh; in vidioc_try_fmt_vid_out() local
1085 ovid = &vout->vid_info; in vidioc_try_fmt_vid_out()
1093 vout->fbuf.fmt.height = timing->y_res; in vidioc_try_fmt_vid_out()
1094 vout->fbuf.fmt.width = timing->x_res; in vidioc_try_fmt_vid_out()
1107 struct omap_vout_device *vout = fh; in vidioc_s_fmt_vid_out() local
1109 if (vout->streaming) in vidioc_s_fmt_vid_out()
1112 mutex_lock(&vout->lock); in vidioc_s_fmt_vid_out()
1114 ovid = &vout->vid_info; in vidioc_s_fmt_vid_out()
1126 if ((is_rotation_enabled(vout)) && in vidioc_s_fmt_vid_out()
1134 if (is_rotation_90_or_270(vout)) { in vidioc_s_fmt_vid_out()
1135 vout->fbuf.fmt.height = timing->x_res; in vidioc_s_fmt_vid_out()
1136 vout->fbuf.fmt.width = timing->y_res; in vidioc_s_fmt_vid_out()
1138 vout->fbuf.fmt.height = timing->y_res; in vidioc_s_fmt_vid_out()
1139 vout->fbuf.fmt.width = timing->x_res; in vidioc_s_fmt_vid_out()
1148 vout->bpp = bpp; in vidioc_s_fmt_vid_out()
1149 vout->pix = f->fmt.pix; in vidioc_s_fmt_vid_out()
1150 vout->vrfb_bpp = 1; in vidioc_s_fmt_vid_out()
1153 if (V4L2_PIX_FMT_YUYV == vout->pix.pixelformat || in vidioc_s_fmt_vid_out()
1154 V4L2_PIX_FMT_UYVY == vout->pix.pixelformat) in vidioc_s_fmt_vid_out()
1155 vout->vrfb_bpp = 2; in vidioc_s_fmt_vid_out()
1158 omap_vout_new_format(&vout->pix, &vout->fbuf, &vout->crop, &vout->win); in vidioc_s_fmt_vid_out()
1161 ret = omapvid_init(vout, 0); in vidioc_s_fmt_vid_out()
1163 v4l2_err(&vout->vid_dev->v4l2_dev, "failed to change mode\n"); in vidioc_s_fmt_vid_out()
1170 mutex_unlock(&vout->lock); in vidioc_s_fmt_vid_out()
1178 struct omap_vout_device *vout = fh; in vidioc_try_fmt_vid_overlay() local
1183 ovid = &vout->vid_info; in vidioc_try_fmt_vid_overlay()
1186 ret = omap_vout_try_window(&vout->fbuf, win); in vidioc_try_fmt_vid_overlay()
1204 struct omap_vout_device *vout = fh; in vidioc_s_fmt_vid_overlay() local
1207 mutex_lock(&vout->lock); in vidioc_s_fmt_vid_overlay()
1208 ovid = &vout->vid_info; in vidioc_s_fmt_vid_overlay()
1211 ret = omap_vout_new_window(&vout->crop, &vout->win, &vout->fbuf, win); in vidioc_s_fmt_vid_overlay()
1215 vout->win.global_alpha = 255; in vidioc_s_fmt_vid_overlay()
1217 vout->win.global_alpha = f->fmt.win.global_alpha; in vidioc_s_fmt_vid_overlay()
1219 vout->win.chromakey = f->fmt.win.chromakey; in vidioc_s_fmt_vid_overlay()
1221 mutex_unlock(&vout->lock); in vidioc_s_fmt_vid_overlay()
1246 struct omap_vout_device *vout = fh; in vidioc_g_fmt_vid_overlay() local
1250 ovid = &vout->vid_info; in vidioc_g_fmt_vid_overlay()
1253 win->w = vout->win.w; in vidioc_g_fmt_vid_overlay()
1254 win->field = vout->win.field; in vidioc_g_fmt_vid_overlay()
1255 win->global_alpha = vout->win.global_alpha; in vidioc_g_fmt_vid_overlay()
1268 struct omap_vout_device *vout = fh; in vidioc_cropcap() local
1269 struct v4l2_pix_format *pix = &vout->pix; in vidioc_cropcap()
1278 omap_vout_default_crop(&vout->pix, &vout->fbuf, &cropcap->defrect); in vidioc_cropcap()
1286 struct omap_vout_device *vout = fh; in vidioc_g_crop() local
1290 crop->c = vout->crop; in vidioc_g_crop()
1297 struct omap_vout_device *vout = fh; in vidioc_s_crop() local
1302 if (vout->streaming) in vidioc_s_crop()
1305 mutex_lock(&vout->lock); in vidioc_s_crop()
1306 ovid = &vout->vid_info; in vidioc_s_crop()
1316 if (is_rotation_90_or_270(vout)) { in vidioc_s_crop()
1317 vout->fbuf.fmt.height = timing->x_res; in vidioc_s_crop()
1318 vout->fbuf.fmt.width = timing->y_res; in vidioc_s_crop()
1320 vout->fbuf.fmt.height = timing->y_res; in vidioc_s_crop()
1321 vout->fbuf.fmt.width = timing->x_res; in vidioc_s_crop()
1325 ret = omap_vout_new_crop(&vout->pix, &vout->crop, &vout->win, in vidioc_s_crop()
1326 &vout->fbuf, &crop->c); in vidioc_s_crop()
1329 mutex_unlock(&vout->lock); in vidioc_s_crop()
1358 struct omap_vout_device *vout = fh; in vidioc_g_ctrl() local
1362 ctrl->value = vout->control[0].value; in vidioc_g_ctrl()
1369 ovl = vout->vid_info.overlays[0]; in vidioc_g_ctrl()
1380 ctrl->value = vout->control[2].value; in vidioc_g_ctrl()
1391 struct omap_vout_device *vout = fh; in vidioc_s_ctrl() local
1399 ovid = &vout->vid_info; in vidioc_s_ctrl()
1401 mutex_lock(&vout->lock); in vidioc_s_ctrl()
1403 mutex_unlock(&vout->lock); in vidioc_s_ctrl()
1408 if (rotation && vout->pix.pixelformat == V4L2_PIX_FMT_RGB24) { in vidioc_s_ctrl()
1409 mutex_unlock(&vout->lock); in vidioc_s_ctrl()
1414 if (v4l2_rot_to_dss_rot(rotation, &vout->rotation, in vidioc_s_ctrl()
1415 vout->mirror)) { in vidioc_s_ctrl()
1416 mutex_unlock(&vout->lock); in vidioc_s_ctrl()
1421 vout->control[0].value = rotation; in vidioc_s_ctrl()
1422 mutex_unlock(&vout->lock); in vidioc_s_ctrl()
1431 ovl = vout->vid_info.overlays[0]; in vidioc_s_ctrl()
1433 mutex_lock(&vout->lock); in vidioc_s_ctrl()
1435 mutex_unlock(&vout->lock); in vidioc_s_ctrl()
1443 mutex_unlock(&vout->lock); in vidioc_s_ctrl()
1448 vout->control[1].value = color; in vidioc_s_ctrl()
1449 mutex_unlock(&vout->lock); in vidioc_s_ctrl()
1458 ovid = &vout->vid_info; in vidioc_s_ctrl()
1461 mutex_lock(&vout->lock); in vidioc_s_ctrl()
1463 mutex_unlock(&vout->lock); in vidioc_s_ctrl()
1468 if (mirror && vout->pix.pixelformat == V4L2_PIX_FMT_RGB24) { in vidioc_s_ctrl()
1469 mutex_unlock(&vout->lock); in vidioc_s_ctrl()
1473 vout->mirror = mirror; in vidioc_s_ctrl()
1474 vout->control[2].value = mirror; in vidioc_s_ctrl()
1475 mutex_unlock(&vout->lock); in vidioc_s_ctrl()
1489 struct omap_vout_device *vout = fh; in vidioc_reqbufs() local
1490 struct videobuf_queue *q = &vout->vbq; in vidioc_reqbufs()
1500 mutex_lock(&vout->lock); in vidioc_reqbufs()
1502 if (vout->streaming) { in vidioc_reqbufs()
1509 if (vout->mmap_count) { in vidioc_reqbufs()
1513 num_buffers = (vout->vid == OMAP_VIDEO1) ? in vidioc_reqbufs()
1515 for (i = num_buffers; i < vout->buffer_allocated; i++) { in vidioc_reqbufs()
1516 omap_vout_free_buffer(vout->buf_virt_addr[i], in vidioc_reqbufs()
1517 vout->buffer_size); in vidioc_reqbufs()
1518 vout->buf_virt_addr[i] = 0; in vidioc_reqbufs()
1519 vout->buf_phy_addr[i] = 0; in vidioc_reqbufs()
1521 vout->buffer_allocated = num_buffers; in vidioc_reqbufs()
1524 if (vout->buffer_allocated) { in vidioc_reqbufs()
1526 for (i = 0; i < vout->buffer_allocated; i++) { in vidioc_reqbufs()
1530 vout->buffer_allocated = 0; in vidioc_reqbufs()
1535 vout->memory = req->memory; in vidioc_reqbufs()
1537 INIT_LIST_HEAD(&vout->dma_queue); in vidioc_reqbufs()
1544 vout->buffer_allocated = req->count; in vidioc_reqbufs()
1547 mutex_unlock(&vout->lock); in vidioc_reqbufs()
1554 struct omap_vout_device *vout = fh; in vidioc_querybuf() local
1556 return videobuf_querybuf(&vout->vbq, b); in vidioc_querybuf()
1562 struct omap_vout_device *vout = fh; in vidioc_qbuf() local
1563 struct videobuf_queue *q = &vout->vbq; in vidioc_qbuf()
1566 (buffer->index >= vout->buffer_allocated) || in vidioc_qbuf()
1571 if ((buffer->length < vout->pix.sizeimage) || in vidioc_qbuf()
1577 if ((is_rotation_enabled(vout)) && in vidioc_qbuf()
1578 vout->vrfb_dma_tx.req_status == DMA_CHAN_NOT_ALLOTED) { in vidioc_qbuf()
1579 v4l2_warn(&vout->vid_dev->v4l2_dev, in vidioc_qbuf()
1589 struct omap_vout_device *vout = fh; in vidioc_dqbuf() local
1590 struct videobuf_queue *q = &vout->vbq; in vidioc_dqbuf()
1599 if (!vout->streaming) in vidioc_dqbuf()
1609 addr = (unsigned long) vout->buf_phy_addr[vb->i]; in vidioc_dqbuf()
1611 dma_unmap_single(vout->vid_dev->v4l2_dev.dev, addr, in vidioc_dqbuf()
1620 struct omap_vout_device *vout = fh; in vidioc_streamon() local
1621 struct videobuf_queue *q = &vout->vbq; in vidioc_streamon()
1622 struct omapvideo_info *ovid = &vout->vid_info; in vidioc_streamon()
1624 mutex_lock(&vout->lock); in vidioc_streamon()
1626 if (vout->streaming) { in vidioc_streamon()
1635 if (list_empty(&vout->dma_queue)) { in vidioc_streamon()
1641 vout->next_frm = vout->cur_frm = list_entry(vout->dma_queue.next, in vidioc_streamon()
1644 list_del(&vout->cur_frm->queue); in vidioc_streamon()
1646 vout->cur_frm->state = VIDEOBUF_ACTIVE; in vidioc_streamon()
1648 vout->field_id = 0; in vidioc_streamon()
1651 vout->streaming = 1; in vidioc_streamon()
1653 vout->first_int = 1; in vidioc_streamon()
1655 if (omap_vout_calculate_offset(vout)) { in vidioc_streamon()
1659 addr = (unsigned long) vout->queued_buf_addr[vout->cur_frm->i] in vidioc_streamon()
1660 + vout->cropped_offset; in vidioc_streamon()
1665 omap_dispc_register_isr(omap_vout_isr, vout, mask); in vidioc_streamon()
1682 ret = omapvid_init(vout, addr); in vidioc_streamon()
1684 v4l2_err(&vout->vid_dev->v4l2_dev, in vidioc_streamon()
1687 ret = omapvid_apply_changes(vout); in vidioc_streamon()
1689 v4l2_err(&vout->vid_dev->v4l2_dev, "failed to change mode\n"); in vidioc_streamon()
1707 mutex_unlock(&vout->lock); in vidioc_streamon()
1715 struct omap_vout_device *vout = fh; in vidioc_streamoff() local
1716 struct omapvideo_info *ovid = &vout->vid_info; in vidioc_streamoff()
1718 if (!vout->streaming) in vidioc_streamoff()
1721 vout->streaming = 0; in vidioc_streamoff()
1725 omap_dispc_unregister_isr(omap_vout_isr, vout, mask); in vidioc_streamoff()
1735 ret = omapvid_apply_changes(vout); in vidioc_streamoff()
1737 v4l2_err(&vout->vid_dev->v4l2_dev, "failed to change mode in" in vidioc_streamoff()
1740 INIT_LIST_HEAD(&vout->dma_queue); in vidioc_streamoff()
1741 ret = videobuf_streamoff(&vout->vbq); in vidioc_streamoff()
1752 struct omap_vout_device *vout = fh; in vidioc_s_fbuf() local
1756 ovid = &vout->vid_info; in vidioc_s_fbuf()
1771 vout->fbuf.flags |= V4L2_FBUF_FLAG_SRC_CHROMAKEY; in vidioc_s_fbuf()
1774 vout->fbuf.flags &= ~V4L2_FBUF_FLAG_SRC_CHROMAKEY; in vidioc_s_fbuf()
1777 vout->fbuf.flags |= V4L2_FBUF_FLAG_CHROMAKEY; in vidioc_s_fbuf()
1780 vout->fbuf.flags &= ~V4L2_FBUF_FLAG_CHROMAKEY; in vidioc_s_fbuf()
1793 info.trans_key = vout->win.chromakey; in vidioc_s_fbuf()
1799 vout->fbuf.flags |= V4L2_FBUF_FLAG_LOCAL_ALPHA; in vidioc_s_fbuf()
1802 vout->fbuf.flags &= ~V4L2_FBUF_FLAG_LOCAL_ALPHA; in vidioc_s_fbuf()
1823 struct omap_vout_device *vout = fh; in vidioc_g_fbuf() local
1826 ovid = &vout->vid_info; in vidioc_g_fbuf()
1888 static int __init omap_vout_setup_video_data(struct omap_vout_device *vout) in omap_vout_setup_video_data() argument
1894 vout->vid_info.overlays[0]->manager->device; in omap_vout_setup_video_data()
1897 pix = &vout->pix; in omap_vout_setup_video_data()
1911 vout->bpp = RGB565_BPP; in omap_vout_setup_video_data()
1912 vout->fbuf.fmt.width = display->panel.timings.x_res; in omap_vout_setup_video_data()
1913 vout->fbuf.fmt.height = display->panel.timings.y_res; in omap_vout_setup_video_data()
1916 vout->win.global_alpha = 255; in omap_vout_setup_video_data()
1917 vout->fbuf.flags = 0; in omap_vout_setup_video_data()
1918 vout->fbuf.capability = V4L2_FBUF_CAP_LOCAL_ALPHA | in omap_vout_setup_video_data()
1920 vout->win.chromakey = 0; in omap_vout_setup_video_data()
1922 omap_vout_new_format(pix, &vout->fbuf, &vout->crop, &vout->win); in omap_vout_setup_video_data()
1926 control = vout->control; in omap_vout_setup_video_data()
1929 vout->rotation = 0; in omap_vout_setup_video_data()
1930 vout->mirror = 0; in omap_vout_setup_video_data()
1931 vout->control[2].id = V4L2_CID_HFLIP; in omap_vout_setup_video_data()
1932 vout->control[2].value = 0; in omap_vout_setup_video_data()
1933 if (vout->vid_info.rotation_type == VOUT_ROT_VRFB) in omap_vout_setup_video_data()
1934 vout->vrfb_bpp = 2; in omap_vout_setup_video_data()
1940 vfd = vout->vfd = video_device_alloc(); in omap_vout_setup_video_data()
1953 vfd->v4l2_dev = &vout->vid_dev->v4l2_dev; in omap_vout_setup_video_data()
1954 mutex_init(&vout->lock); in omap_vout_setup_video_data()
1968 struct omap_vout_device *vout; in omap_vout_setup_video_bufs() local
1973 vout = vid_dev->vouts[vid_num]; in omap_vout_setup_video_bufs()
1974 ovid = &vout->vid_info; in omap_vout_setup_video_bufs()
1977 vout->buffer_size = (vid_num == 0) ? video1_bufsize : video2_bufsize; in omap_vout_setup_video_bufs()
1978 dev_info(&pdev->dev, "Buffer Size = %d\n", vout->buffer_size); in omap_vout_setup_video_bufs()
1981 vout->buf_virt_addr[i] = in omap_vout_setup_video_bufs()
1982 omap_vout_alloc_buffer(vout->buffer_size, in omap_vout_setup_video_bufs()
1983 (u32 *) &vout->buf_phy_addr[i]); in omap_vout_setup_video_bufs()
1984 if (!vout->buf_virt_addr[i]) { in omap_vout_setup_video_bufs()
1991 vout->cropped_offset = 0; in omap_vout_setup_video_bufs()
2004 omap_vout_free_buffer(vout->buf_virt_addr[i], in omap_vout_setup_video_bufs()
2005 vout->buffer_size); in omap_vout_setup_video_bufs()
2006 vout->buf_virt_addr[i] = 0; in omap_vout_setup_video_bufs()
2007 vout->buf_phy_addr[i] = 0; in omap_vout_setup_video_bufs()
2017 struct omap_vout_device *vout; in omap_vout_create_video_devices() local
2025 vout = kzalloc(sizeof(struct omap_vout_device), GFP_KERNEL); in omap_vout_create_video_devices()
2026 if (!vout) { in omap_vout_create_video_devices()
2031 vout->vid = k; in omap_vout_create_video_devices()
2032 vid_dev->vouts[k] = vout; in omap_vout_create_video_devices()
2033 vout->vid_dev = vid_dev; in omap_vout_create_video_devices()
2036 vout->vid_info.overlays[0] = vid_dev->overlays[k + 2]; in omap_vout_create_video_devices()
2039 vout->vid_info.overlays[0] = vid_dev->overlays[k + 1]; in omap_vout_create_video_devices()
2040 vout->vid_info.num_overlays = 1; in omap_vout_create_video_devices()
2041 vout->vid_info.id = k + 1; in omap_vout_create_video_devices()
2045 vout->vid_info.rotation_type = VOUT_ROT_VRFB; in omap_vout_create_video_devices()
2049 if (omap_vout_setup_video_data(vout) != 0) { in omap_vout_create_video_devices()
2064 vfd = vout->vfd; in omap_vout_create_video_devices()
2072 video_set_drvdata(vfd, vout); in omap_vout_create_video_devices()
2080 if (vout->vid_info.rotation_type == VOUT_ROT_VRFB) in omap_vout_create_video_devices()
2081 omap_vout_release_vrfb(vout); in omap_vout_create_video_devices()
2082 omap_vout_free_buffers(vout); in omap_vout_create_video_devices()
2086 kfree(vout); in omap_vout_create_video_devices()
2099 static void omap_vout_cleanup_device(struct omap_vout_device *vout) in omap_vout_cleanup_device() argument
2104 if (!vout) in omap_vout_cleanup_device()
2107 vfd = vout->vfd; in omap_vout_cleanup_device()
2108 ovid = &vout->vid_info; in omap_vout_cleanup_device()
2125 omap_vout_release_vrfb(vout); in omap_vout_cleanup_device()
2129 if (vout->vrfb_static_allocation) in omap_vout_cleanup_device()
2130 omap_vout_free_vrfb_buffers(vout); in omap_vout_cleanup_device()
2132 omap_vout_free_buffers(vout); in omap_vout_cleanup_device()
2134 kfree(vout); in omap_vout_cleanup_device()