Lines Matching refs:vpfe_dev

248 static int vpfe_config_ccdc_image_format(struct vpfe_device *vpfe_dev)  in vpfe_config_ccdc_image_format()  argument
254 vpfe_dev->fmt.fmt.pix.pixelformat) < 0) { in vpfe_config_ccdc_image_format()
255 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_config_ccdc_image_format()
260 ccdc_dev->hw_ops.set_image_window(&vpfe_dev->crop); in vpfe_config_ccdc_image_format()
262 switch (vpfe_dev->fmt.fmt.pix.field) { in vpfe_config_ccdc_image_format()
295 static int vpfe_config_image_format(struct vpfe_device *vpfe_dev, in vpfe_config_image_format() argument
298 struct vpfe_subdev_info *sdinfo = vpfe_dev->current_subdev; in vpfe_config_image_format()
303 struct v4l2_pix_format *pix = &vpfe_dev->fmt.fmt.pix; in vpfe_config_image_format()
308 vpfe_dev->std_info.active_pixels = in vpfe_config_image_format()
310 vpfe_dev->std_info.active_lines = in vpfe_config_image_format()
312 vpfe_dev->std_info.frame_format = in vpfe_config_image_format()
314 vpfe_dev->std_index = i; in vpfe_config_image_format()
320 v4l2_err(&vpfe_dev->v4l2_dev, "standard not supported\n"); in vpfe_config_image_format()
324 vpfe_dev->crop.top = 0; in vpfe_config_image_format()
325 vpfe_dev->crop.left = 0; in vpfe_config_image_format()
326 vpfe_dev->crop.width = vpfe_dev->std_info.active_pixels; in vpfe_config_image_format()
327 vpfe_dev->crop.height = vpfe_dev->std_info.active_lines; in vpfe_config_image_format()
328 pix->width = vpfe_dev->crop.width; in vpfe_config_image_format()
329 pix->height = vpfe_dev->crop.height; in vpfe_config_image_format()
332 if (vpfe_dev->std_info.frame_format) { in vpfe_config_image_format()
347 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, in vpfe_config_image_format()
351 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_config_image_format()
360 ret = vpfe_config_ccdc_image_format(vpfe_dev); in vpfe_config_image_format()
371 static int vpfe_initialize_device(struct vpfe_device *vpfe_dev) in vpfe_initialize_device() argument
376 vpfe_dev->current_input = 0; in vpfe_initialize_device()
379 vpfe_dev->std_index = 0; in vpfe_initialize_device()
382 ret = vpfe_config_image_format(vpfe_dev, in vpfe_initialize_device()
383 vpfe_standards[vpfe_dev->std_index].std_id); in vpfe_initialize_device()
390 v4l2_err(&vpfe_dev->v4l2_dev, "ccdc device not registered\n"); in vpfe_initialize_device()
396 v4l2_err(&vpfe_dev->v4l2_dev, "Couldn't lock ccdc module\n"); in vpfe_initialize_device()
400 ret = ccdc_dev->hw_ops.open(vpfe_dev->pdev); in vpfe_initialize_device()
402 vpfe_dev->initialized = 1; in vpfe_initialize_device()
405 if (vpfe_dev->cfg->clr_intr) in vpfe_initialize_device()
406 vpfe_dev->cfg->clr_intr(-1); in vpfe_initialize_device()
419 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_open() local
423 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_open\n"); in vpfe_open()
425 if (!vpfe_dev->cfg->num_subdevs) { in vpfe_open()
426 v4l2_err(&vpfe_dev->v4l2_dev, "No decoder registered\n"); in vpfe_open()
437 fh->vpfe_dev = vpfe_dev; in vpfe_open()
439 mutex_lock(&vpfe_dev->lock); in vpfe_open()
441 if (!vpfe_dev->initialized) { in vpfe_open()
442 if (vpfe_initialize_device(vpfe_dev)) { in vpfe_open()
443 mutex_unlock(&vpfe_dev->lock); in vpfe_open()
450 vpfe_dev->usrs++; in vpfe_open()
454 mutex_unlock(&vpfe_dev->lock); in vpfe_open()
458 static void vpfe_schedule_next_buffer(struct vpfe_device *vpfe_dev) in vpfe_schedule_next_buffer() argument
462 vpfe_dev->next_frm = list_entry(vpfe_dev->dma_queue.next, in vpfe_schedule_next_buffer()
464 list_del(&vpfe_dev->next_frm->queue); in vpfe_schedule_next_buffer()
465 vpfe_dev->next_frm->state = VIDEOBUF_ACTIVE; in vpfe_schedule_next_buffer()
466 addr = videobuf_to_dma_contig(vpfe_dev->next_frm); in vpfe_schedule_next_buffer()
471 static void vpfe_schedule_bottom_field(struct vpfe_device *vpfe_dev) in vpfe_schedule_bottom_field() argument
475 addr = videobuf_to_dma_contig(vpfe_dev->cur_frm); in vpfe_schedule_bottom_field()
476 addr += vpfe_dev->field_off; in vpfe_schedule_bottom_field()
480 static void vpfe_process_buffer_complete(struct vpfe_device *vpfe_dev) in vpfe_process_buffer_complete() argument
482 vpfe_dev->cur_frm->ts = ktime_get_ns(); in vpfe_process_buffer_complete()
483 vpfe_dev->cur_frm->state = VIDEOBUF_DONE; in vpfe_process_buffer_complete()
484 vpfe_dev->cur_frm->size = vpfe_dev->fmt.fmt.pix.sizeimage; in vpfe_process_buffer_complete()
485 wake_up_interruptible(&vpfe_dev->cur_frm->done); in vpfe_process_buffer_complete()
486 vpfe_dev->cur_frm = vpfe_dev->next_frm; in vpfe_process_buffer_complete()
492 struct vpfe_device *vpfe_dev = dev_id; in vpfe_isr() local
496 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "\nStarting vpfe_isr...\n"); in vpfe_isr()
497 field = vpfe_dev->fmt.fmt.pix.field; in vpfe_isr()
500 if (!vpfe_dev->started) in vpfe_isr()
509 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_isr()
511 if (vpfe_dev->cur_frm != vpfe_dev->next_frm) in vpfe_isr()
512 vpfe_process_buffer_complete(vpfe_dev); in vpfe_isr()
520 vpfe_dev->field_id ^= 1; in vpfe_isr()
521 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "field id = %x:%x.\n", in vpfe_isr()
522 fid, vpfe_dev->field_id); in vpfe_isr()
523 if (fid == vpfe_dev->field_id) { in vpfe_isr()
530 if (vpfe_dev->cur_frm != vpfe_dev->next_frm) in vpfe_isr()
531 vpfe_process_buffer_complete(vpfe_dev); in vpfe_isr()
538 vpfe_schedule_bottom_field(vpfe_dev); in vpfe_isr()
547 spin_lock(&vpfe_dev->dma_queue_lock); in vpfe_isr()
548 if (!list_empty(&vpfe_dev->dma_queue) && in vpfe_isr()
549 vpfe_dev->cur_frm == vpfe_dev->next_frm) in vpfe_isr()
550 vpfe_schedule_next_buffer(vpfe_dev); in vpfe_isr()
551 spin_unlock(&vpfe_dev->dma_queue_lock); in vpfe_isr()
557 vpfe_dev->field_id = fid; in vpfe_isr()
560 if (vpfe_dev->cfg->clr_intr) in vpfe_isr()
561 vpfe_dev->cfg->clr_intr(irq); in vpfe_isr()
569 struct vpfe_device *vpfe_dev = dev_id; in vdint1_isr() local
571 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "\nInside vdint1_isr...\n"); in vdint1_isr()
574 if (!vpfe_dev->started) { in vdint1_isr()
575 if (vpfe_dev->cfg->clr_intr) in vdint1_isr()
576 vpfe_dev->cfg->clr_intr(irq); in vdint1_isr()
580 spin_lock(&vpfe_dev->dma_queue_lock); in vdint1_isr()
581 if ((vpfe_dev->fmt.fmt.pix.field == V4L2_FIELD_NONE) && in vdint1_isr()
582 !list_empty(&vpfe_dev->dma_queue) && in vdint1_isr()
583 vpfe_dev->cur_frm == vpfe_dev->next_frm) in vdint1_isr()
584 vpfe_schedule_next_buffer(vpfe_dev); in vdint1_isr()
585 spin_unlock(&vpfe_dev->dma_queue_lock); in vdint1_isr()
587 if (vpfe_dev->cfg->clr_intr) in vdint1_isr()
588 vpfe_dev->cfg->clr_intr(irq); in vdint1_isr()
593 static void vpfe_detach_irq(struct vpfe_device *vpfe_dev) in vpfe_detach_irq() argument
599 free_irq(vpfe_dev->ccdc_irq1, vpfe_dev); in vpfe_detach_irq()
602 static int vpfe_attach_irq(struct vpfe_device *vpfe_dev) in vpfe_attach_irq() argument
608 return request_irq(vpfe_dev->ccdc_irq1, vdint1_isr, in vpfe_attach_irq()
610 vpfe_dev); in vpfe_attach_irq()
616 static void vpfe_stop_ccdc_capture(struct vpfe_device *vpfe_dev) in vpfe_stop_ccdc_capture() argument
618 vpfe_dev->started = 0; in vpfe_stop_ccdc_capture()
630 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_release() local
635 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_release\n"); in vpfe_release()
638 mutex_lock(&vpfe_dev->lock); in vpfe_release()
641 if (vpfe_dev->started) { in vpfe_release()
642 sdinfo = vpfe_dev->current_subdev; in vpfe_release()
643 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, in vpfe_release()
647 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_release()
649 vpfe_stop_ccdc_capture(vpfe_dev); in vpfe_release()
650 vpfe_detach_irq(vpfe_dev); in vpfe_release()
651 videobuf_streamoff(&vpfe_dev->buffer_queue); in vpfe_release()
653 vpfe_dev->io_usrs = 0; in vpfe_release()
654 vpfe_dev->numbuffers = config_params.numbuffers; in vpfe_release()
655 videobuf_stop(&vpfe_dev->buffer_queue); in vpfe_release()
656 videobuf_mmap_free(&vpfe_dev->buffer_queue); in vpfe_release()
660 vpfe_dev->usrs--; in vpfe_release()
664 if (!vpfe_dev->usrs) { in vpfe_release()
665 vpfe_dev->initialized = 0; in vpfe_release()
667 ccdc_dev->hw_ops.close(vpfe_dev->pdev); in vpfe_release()
670 mutex_unlock(&vpfe_dev->lock); in vpfe_release()
684 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_mmap() local
686 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_mmap\n"); in vpfe_mmap()
688 return videobuf_mmap_mapper(&vpfe_dev->buffer_queue, vma); in vpfe_mmap()
696 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_poll() local
698 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_poll\n"); in vpfe_poll()
700 if (vpfe_dev->started) in vpfe_poll()
702 &vpfe_dev->buffer_queue, wait); in vpfe_poll()
734 vpfe_check_format(struct vpfe_device *vpfe_dev, in vpfe_check_format() argument
748 pixfmt->pixelformat = vpfe_dev->fmt.fmt.pix.pixelformat; in vpfe_check_format()
765 pixfmt->pixelformat = vpfe_dev->fmt.fmt.pix.pixelformat; in vpfe_check_format()
776 pixfmt->field = vpfe_dev->fmt.fmt.pix.field; in vpfe_check_format()
783 if (vpfe_dev->fmt.fmt.pix.field != pixfmt->field) { in vpfe_check_format()
792 if (!vpfe_dev->std_info.frame_format) in vpfe_check_format()
796 if (vpfe_dev->std_info.frame_format) in vpfe_check_format()
802 pixfmt->field = vpfe_dev->fmt.fmt.pix.field; in vpfe_check_format()
812 max_width = vpfe_dev->std_info.active_pixels; in vpfe_check_format()
813 max_height = vpfe_dev->std_info.active_lines; in vpfe_check_format()
816 v4l2_info(&vpfe_dev->v4l2_dev, "width = %d, height = %d, bpp = %d\n", in vpfe_check_format()
838 …v4l2_info(&vpfe_dev->v4l2_dev, "adjusted width = %d, height = %d, bpp = %d, bytesperline = %d, siz… in vpfe_check_format()
847 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_querycap() local
849 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_querycap\n"); in vpfe_querycap()
853 strscpy(cap->card, vpfe_dev->cfg->card_name, sizeof(cap->card)); in vpfe_querycap()
860 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_g_fmt_vid_cap() local
862 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_g_fmt_vid_cap\n"); in vpfe_g_fmt_vid_cap()
864 *fmt = vpfe_dev->fmt; in vpfe_g_fmt_vid_cap()
871 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_enum_fmt_vid_cap() local
875 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_enum_fmt_vid_cap\n"); in vpfe_enum_fmt_vid_cap()
892 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_s_fmt_vid_cap() local
896 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_fmt_vid_cap\n"); in vpfe_s_fmt_vid_cap()
899 if (vpfe_dev->started) { in vpfe_s_fmt_vid_cap()
900 v4l2_err(&vpfe_dev->v4l2_dev, "Streaming is started\n"); in vpfe_s_fmt_vid_cap()
905 pix_fmts = vpfe_check_format(vpfe_dev, &fmt->fmt.pix); in vpfe_s_fmt_vid_cap()
910 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_s_fmt_vid_cap()
915 vpfe_detach_irq(vpfe_dev); in vpfe_s_fmt_vid_cap()
916 vpfe_dev->fmt = *fmt; in vpfe_s_fmt_vid_cap()
918 ret = vpfe_config_ccdc_image_format(vpfe_dev); in vpfe_s_fmt_vid_cap()
919 mutex_unlock(&vpfe_dev->lock); in vpfe_s_fmt_vid_cap()
926 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_try_fmt_vid_cap() local
929 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_try_fmt_vid_cap\n"); in vpfe_try_fmt_vid_cap()
931 pix_fmts = vpfe_check_format(vpfe_dev, &f->fmt.pix); in vpfe_try_fmt_vid_cap()
941 static int vpfe_get_subdev_input_index(struct vpfe_device *vpfe_dev, in vpfe_get_subdev_input_index() argument
946 struct vpfe_config *cfg = vpfe_dev->cfg; in vpfe_get_subdev_input_index()
967 static int vpfe_get_app_input_index(struct vpfe_device *vpfe_dev, in vpfe_get_app_input_index() argument
970 struct vpfe_config *cfg = vpfe_dev->cfg; in vpfe_get_app_input_index()
976 if (!strcmp(sdinfo->name, vpfe_dev->current_subdev->name)) { in vpfe_get_app_input_index()
977 if (vpfe_dev->current_input >= sdinfo->num_inputs) in vpfe_get_app_input_index()
979 *app_input_index = j + vpfe_dev->current_input; in vpfe_get_app_input_index()
990 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_enum_input() local
994 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_enum_input\n"); in vpfe_enum_input()
996 if (vpfe_get_subdev_input_index(vpfe_dev, in vpfe_enum_input()
1000 v4l2_err(&vpfe_dev->v4l2_dev, "input information not found for the subdev\n"); in vpfe_enum_input()
1003 sdinfo = &vpfe_dev->cfg->sub_devs[subdev]; in vpfe_enum_input()
1010 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_g_input() local
1012 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_g_input\n"); in vpfe_g_input()
1014 return vpfe_get_app_input_index(vpfe_dev, index); in vpfe_g_input()
1020 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_s_input() local
1028 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_input\n"); in vpfe_s_input()
1030 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_s_input()
1038 if (vpfe_dev->started) { in vpfe_s_input()
1039 v4l2_err(&vpfe_dev->v4l2_dev, "Streaming is on\n"); in vpfe_s_input()
1043 ret = vpfe_get_subdev_input_index(vpfe_dev, in vpfe_s_input()
1048 v4l2_err(&vpfe_dev->v4l2_dev, "invalid input index\n"); in vpfe_s_input()
1052 sdinfo = &vpfe_dev->cfg->sub_devs[subdev_index]; in vpfe_s_input()
1053 sd = vpfe_dev->sd[subdev_index]; in vpfe_s_input()
1067 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_s_input()
1072 vpfe_dev->current_subdev = sdinfo; in vpfe_s_input()
1074 vpfe_dev->v4l2_dev.ctrl_handler = sd->ctrl_handler; in vpfe_s_input()
1075 vpfe_dev->current_input = index; in vpfe_s_input()
1076 vpfe_dev->std_index = 0; in vpfe_s_input()
1084 ret = vpfe_config_image_format(vpfe_dev, in vpfe_s_input()
1085 vpfe_standards[vpfe_dev->std_index].std_id); in vpfe_s_input()
1087 mutex_unlock(&vpfe_dev->lock); in vpfe_s_input()
1093 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_querystd() local
1097 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_querystd\n"); in vpfe_querystd()
1099 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_querystd()
1100 sdinfo = vpfe_dev->current_subdev; in vpfe_querystd()
1104 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id, in vpfe_querystd()
1106 mutex_unlock(&vpfe_dev->lock); in vpfe_querystd()
1112 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_s_std() local
1116 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_std\n"); in vpfe_s_std()
1119 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_s_std()
1123 sdinfo = vpfe_dev->current_subdev; in vpfe_s_std()
1125 if (vpfe_dev->started) { in vpfe_s_std()
1126 v4l2_err(&vpfe_dev->v4l2_dev, "streaming is started\n"); in vpfe_s_std()
1131 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id, in vpfe_s_std()
1134 v4l2_err(&vpfe_dev->v4l2_dev, "Failed to set standard\n"); in vpfe_s_std()
1137 ret = vpfe_config_image_format(vpfe_dev, std_id); in vpfe_s_std()
1140 mutex_unlock(&vpfe_dev->lock); in vpfe_s_std()
1146 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_g_std() local
1148 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_g_std\n"); in vpfe_g_std()
1150 *std_id = vpfe_standards[vpfe_dev->std_index].std_id; in vpfe_g_std()
1161 struct vpfe_device *vpfe_dev = fh->vpfe_dev; in vpfe_videobuf_setup() local
1163 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_buffer_setup\n"); in vpfe_videobuf_setup()
1164 *size = vpfe_dev->fmt.fmt.pix.sizeimage; in vpfe_videobuf_setup()
1165 if (vpfe_dev->memory == V4L2_MEMORY_MMAP && in vpfe_videobuf_setup()
1166 vpfe_dev->fmt.fmt.pix.sizeimage > config_params.device_bufsize) in vpfe_videobuf_setup()
1171 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_videobuf_setup()
1181 struct vpfe_device *vpfe_dev = fh->vpfe_dev; in vpfe_videobuf_prepare() local
1185 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_buffer_prepare\n"); in vpfe_videobuf_prepare()
1189 vb->width = vpfe_dev->fmt.fmt.pix.width; in vpfe_videobuf_prepare()
1190 vb->height = vpfe_dev->fmt.fmt.pix.height; in vpfe_videobuf_prepare()
1191 vb->size = vpfe_dev->fmt.fmt.pix.sizeimage; in vpfe_videobuf_prepare()
1213 struct vpfe_device *vpfe_dev = fh->vpfe_dev; in vpfe_videobuf_queue() local
1216 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_buffer_queue\n"); in vpfe_videobuf_queue()
1219 spin_lock_irqsave(&vpfe_dev->dma_queue_lock, flags); in vpfe_videobuf_queue()
1220 list_add_tail(&vb->queue, &vpfe_dev->dma_queue); in vpfe_videobuf_queue()
1221 spin_unlock_irqrestore(&vpfe_dev->dma_queue_lock, flags); in vpfe_videobuf_queue()
1231 struct vpfe_device *vpfe_dev = fh->vpfe_dev; in vpfe_videobuf_release() local
1234 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_videobuf_release\n"); in vpfe_videobuf_release()
1240 spin_lock_irqsave(&vpfe_dev->dma_queue_lock, flags); in vpfe_videobuf_release()
1241 INIT_LIST_HEAD(&vpfe_dev->dma_queue); in vpfe_videobuf_release()
1242 spin_unlock_irqrestore(&vpfe_dev->dma_queue_lock, flags); in vpfe_videobuf_release()
1261 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_reqbufs() local
1265 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_reqbufs\n"); in vpfe_reqbufs()
1268 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buffer type\n"); in vpfe_reqbufs()
1272 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_reqbufs()
1276 if (vpfe_dev->io_usrs != 0) { in vpfe_reqbufs()
1277 v4l2_err(&vpfe_dev->v4l2_dev, "Only one IO user allowed\n"); in vpfe_reqbufs()
1282 vpfe_dev->memory = req_buf->memory; in vpfe_reqbufs()
1283 videobuf_queue_dma_contig_init(&vpfe_dev->buffer_queue, in vpfe_reqbufs()
1285 vpfe_dev->pdev, in vpfe_reqbufs()
1286 &vpfe_dev->irqlock, in vpfe_reqbufs()
1288 vpfe_dev->fmt.fmt.pix.field, in vpfe_reqbufs()
1293 vpfe_dev->io_usrs = 1; in vpfe_reqbufs()
1294 INIT_LIST_HEAD(&vpfe_dev->dma_queue); in vpfe_reqbufs()
1295 ret = videobuf_reqbufs(&vpfe_dev->buffer_queue, req_buf); in vpfe_reqbufs()
1297 mutex_unlock(&vpfe_dev->lock); in vpfe_reqbufs()
1304 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_querybuf() local
1306 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_querybuf\n"); in vpfe_querybuf()
1309 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf type\n"); in vpfe_querybuf()
1313 if (vpfe_dev->memory != V4L2_MEMORY_MMAP) { in vpfe_querybuf()
1314 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid memory\n"); in vpfe_querybuf()
1318 return videobuf_querybuf(&vpfe_dev->buffer_queue, buf); in vpfe_querybuf()
1324 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_qbuf() local
1327 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_qbuf\n"); in vpfe_qbuf()
1330 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf type\n"); in vpfe_qbuf()
1339 v4l2_err(&vpfe_dev->v4l2_dev, "fh->io_allowed\n"); in vpfe_qbuf()
1342 return videobuf_qbuf(&vpfe_dev->buffer_queue, p); in vpfe_qbuf()
1348 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_dqbuf() local
1350 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_dqbuf\n"); in vpfe_dqbuf()
1353 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf type\n"); in vpfe_dqbuf()
1356 return videobuf_dqbuf(&vpfe_dev->buffer_queue, in vpfe_dqbuf()
1364 static void vpfe_calculate_offsets(struct vpfe_device *vpfe_dev) in vpfe_calculate_offsets() argument
1368 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_calculate_offsets\n"); in vpfe_calculate_offsets()
1371 vpfe_dev->field_off = image_win.height * image_win.width; in vpfe_calculate_offsets()
1375 static void vpfe_start_ccdc_capture(struct vpfe_device *vpfe_dev) in vpfe_start_ccdc_capture() argument
1380 vpfe_dev->started = 1; in vpfe_start_ccdc_capture()
1391 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_streamon() local
1397 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_streamon\n"); in vpfe_streamon()
1400 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf type\n"); in vpfe_streamon()
1406 v4l2_err(&vpfe_dev->v4l2_dev, "fh->io_allowed\n"); in vpfe_streamon()
1410 sdinfo = vpfe_dev->current_subdev; in vpfe_streamon()
1411 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id, in vpfe_streamon()
1415 v4l2_err(&vpfe_dev->v4l2_dev, "stream on failed in subdev\n"); in vpfe_streamon()
1420 if (list_empty(&vpfe_dev->buffer_queue.stream)) { in vpfe_streamon()
1421 v4l2_err(&vpfe_dev->v4l2_dev, "buffer queue is empty\n"); in vpfe_streamon()
1426 ret = videobuf_streamon(&vpfe_dev->buffer_queue); in vpfe_streamon()
1431 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_streamon()
1435 vpfe_dev->next_frm = list_entry(vpfe_dev->dma_queue.next, in vpfe_streamon()
1437 vpfe_dev->cur_frm = vpfe_dev->next_frm; in vpfe_streamon()
1439 list_del(&vpfe_dev->cur_frm->queue); in vpfe_streamon()
1441 vpfe_dev->cur_frm->state = VIDEOBUF_ACTIVE; in vpfe_streamon()
1443 vpfe_dev->field_id = 0; in vpfe_streamon()
1444 addr = videobuf_to_dma_contig(vpfe_dev->cur_frm); in vpfe_streamon()
1447 vpfe_calculate_offsets(vpfe_dev); in vpfe_streamon()
1449 if (vpfe_attach_irq(vpfe_dev) < 0) { in vpfe_streamon()
1450 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_streamon()
1456 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_streamon()
1462 vpfe_start_ccdc_capture(vpfe_dev); in vpfe_streamon()
1463 mutex_unlock(&vpfe_dev->lock); in vpfe_streamon()
1466 mutex_unlock(&vpfe_dev->lock); in vpfe_streamon()
1468 videobuf_streamoff(&vpfe_dev->buffer_queue); in vpfe_streamon()
1475 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_streamoff() local
1480 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_streamoff\n"); in vpfe_streamoff()
1483 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf type\n"); in vpfe_streamoff()
1489 v4l2_err(&vpfe_dev->v4l2_dev, "fh->io_allowed\n"); in vpfe_streamoff()
1494 if (!vpfe_dev->started) { in vpfe_streamoff()
1495 v4l2_err(&vpfe_dev->v4l2_dev, "device started\n"); in vpfe_streamoff()
1499 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_streamoff()
1503 vpfe_stop_ccdc_capture(vpfe_dev); in vpfe_streamoff()
1504 vpfe_detach_irq(vpfe_dev); in vpfe_streamoff()
1506 sdinfo = vpfe_dev->current_subdev; in vpfe_streamoff()
1507 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id, in vpfe_streamoff()
1511 v4l2_err(&vpfe_dev->v4l2_dev, "stream off failed in subdev\n"); in vpfe_streamoff()
1512 ret = videobuf_streamoff(&vpfe_dev->buffer_queue); in vpfe_streamoff()
1513 mutex_unlock(&vpfe_dev->lock); in vpfe_streamoff()
1520 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_g_pixelaspect() local
1522 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_g_pixelaspect\n"); in vpfe_g_pixelaspect()
1527 if (vpfe_dev->std_index >= ARRAY_SIZE(vpfe_standards)) in vpfe_g_pixelaspect()
1530 *f = vpfe_standards[vpfe_dev->std_index].pixelaspect; in vpfe_g_pixelaspect()
1537 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_g_selection() local
1539 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_g_selection\n"); in vpfe_g_selection()
1546 sel->r = vpfe_dev->crop; in vpfe_g_selection()
1550 sel->r.width = vpfe_standards[vpfe_dev->std_index].width; in vpfe_g_selection()
1551 sel->r.height = vpfe_standards[vpfe_dev->std_index].height; in vpfe_g_selection()
1562 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_s_selection() local
1566 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_selection\n"); in vpfe_s_selection()
1572 if (vpfe_dev->started) { in vpfe_s_selection()
1574 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_s_selection()
1579 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_s_selection()
1584 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_s_selection()
1595 vpfe_dev->std_info.active_pixels) || in vpfe_s_selection()
1597 vpfe_dev->std_info.active_lines)) { in vpfe_s_selection()
1598 v4l2_err(&vpfe_dev->v4l2_dev, "Error in S_SELECTION params\n"); in vpfe_s_selection()
1603 vpfe_dev->fmt.fmt.pix.width = rect.width; in vpfe_s_selection()
1604 vpfe_dev->fmt.fmt.pix.height = rect.height; in vpfe_s_selection()
1605 vpfe_dev->fmt.fmt.pix.bytesperline = in vpfe_s_selection()
1607 vpfe_dev->fmt.fmt.pix.sizeimage = in vpfe_s_selection()
1608 vpfe_dev->fmt.fmt.pix.bytesperline * in vpfe_s_selection()
1609 vpfe_dev->fmt.fmt.pix.height; in vpfe_s_selection()
1610 vpfe_dev->crop = rect; in vpfe_s_selection()
1613 mutex_unlock(&vpfe_dev->lock); in vpfe_s_selection()
1643 struct vpfe_device *vpfe_dev; in vpfe_initialize() local
1663 vpfe_dev = kzalloc(sizeof(*vpfe_dev), GFP_KERNEL); in vpfe_initialize()
1665 return vpfe_dev; in vpfe_initialize()
1678 struct vpfe_device *vpfe_dev; in vpfe_probe() local
1685 vpfe_dev = vpfe_initialize(); in vpfe_probe()
1687 if (!vpfe_dev) { in vpfe_probe()
1693 vpfe_dev->pdev = &pdev->dev; in vpfe_probe()
1702 vpfe_dev->cfg = vpfe_cfg; in vpfe_probe()
1727 vpfe_dev->ccdc_irq0 = res1->start; in vpfe_probe()
1737 vpfe_dev->ccdc_irq1 = res1->start; in vpfe_probe()
1739 ret = request_irq(vpfe_dev->ccdc_irq0, vpfe_isr, 0, in vpfe_probe()
1740 "vpfe_capture0", vpfe_dev); in vpfe_probe()
1747 vfd = &vpfe_dev->video_dev; in vpfe_probe()
1753 vfd->v4l2_dev = &vpfe_dev->v4l2_dev; in vpfe_probe()
1762 ret = v4l2_device_register(&pdev->dev, &vpfe_dev->v4l2_dev); in vpfe_probe()
1768 v4l2_info(&vpfe_dev->v4l2_dev, "v4l2 device registered\n"); in vpfe_probe()
1769 spin_lock_init(&vpfe_dev->irqlock); in vpfe_probe()
1770 spin_lock_init(&vpfe_dev->dma_queue_lock); in vpfe_probe()
1771 mutex_init(&vpfe_dev->lock); in vpfe_probe()
1774 vpfe_dev->numbuffers = config_params.numbuffers; in vpfe_probe()
1777 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_probe()
1779 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_probe()
1780 "video_dev=%p\n", &vpfe_dev->video_dev); in vpfe_probe()
1781 vpfe_dev->fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; in vpfe_probe()
1782 ret = video_register_device(&vpfe_dev->video_dev, in vpfe_probe()
1791 v4l2_info(&vpfe_dev->v4l2_dev, "video device registered\n"); in vpfe_probe()
1793 platform_set_drvdata(pdev, vpfe_dev); in vpfe_probe()
1795 video_set_drvdata(&vpfe_dev->video_dev, vpfe_dev); in vpfe_probe()
1798 vpfe_dev->sd = kmalloc_array(num_subdevs, in vpfe_probe()
1799 sizeof(*vpfe_dev->sd), in vpfe_probe()
1801 if (!vpfe_dev->sd) { in vpfe_probe()
1812 vpfe_dev->sd[i] = in vpfe_probe()
1813 v4l2_i2c_new_subdev_board(&vpfe_dev->v4l2_dev, in vpfe_probe()
1817 if (vpfe_dev->sd[i]) { in vpfe_probe()
1818 v4l2_info(&vpfe_dev->v4l2_dev, in vpfe_probe()
1821 vpfe_dev->sd[i]->grp_id = sdinfo->grp_id; in vpfe_probe()
1828 v4l2_info(&vpfe_dev->v4l2_dev, in vpfe_probe()
1837 vpfe_dev->current_subdev = &vpfe_cfg->sub_devs[0]; in vpfe_probe()
1838 vpfe_dev->v4l2_dev.ctrl_handler = vpfe_dev->sd[0]->ctrl_handler; in vpfe_probe()
1845 kfree(vpfe_dev->sd); in vpfe_probe()
1847 video_unregister_device(&vpfe_dev->video_dev); in vpfe_probe()
1849 v4l2_device_unregister(&vpfe_dev->v4l2_dev); in vpfe_probe()
1851 free_irq(vpfe_dev->ccdc_irq0, vpfe_dev); in vpfe_probe()
1856 kfree(vpfe_dev); in vpfe_probe()
1865 struct vpfe_device *vpfe_dev = platform_get_drvdata(pdev); in vpfe_remove() local
1869 free_irq(vpfe_dev->ccdc_irq0, vpfe_dev); in vpfe_remove()
1870 kfree(vpfe_dev->sd); in vpfe_remove()
1871 v4l2_device_unregister(&vpfe_dev->v4l2_dev); in vpfe_remove()
1872 video_unregister_device(&vpfe_dev->video_dev); in vpfe_remove()
1873 kfree(vpfe_dev); in vpfe_remove()