Lines Matching refs:vpfe_dev
291 static int vpfe_get_ccdc_image_format(struct vpfe_device *vpfe_dev, in vpfe_get_ccdc_image_format() argument
317 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf_type\n"); in vpfe_get_ccdc_image_format()
321 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid frm_fmt\n"); in vpfe_get_ccdc_image_format()
331 static int vpfe_config_ccdc_image_format(struct vpfe_device *vpfe_dev) in vpfe_config_ccdc_image_format() argument
337 vpfe_dev->fmt.fmt.pix.pixelformat) < 0) { in vpfe_config_ccdc_image_format()
338 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_config_ccdc_image_format()
343 ccdc_dev->hw_ops.set_image_window(&vpfe_dev->crop); in vpfe_config_ccdc_image_format()
345 switch (vpfe_dev->fmt.fmt.pix.field) { in vpfe_config_ccdc_image_format()
378 static int vpfe_config_image_format(struct vpfe_device *vpfe_dev, in vpfe_config_image_format() argument
381 struct vpfe_subdev_info *sdinfo = vpfe_dev->current_subdev; in vpfe_config_image_format()
383 struct v4l2_pix_format *pix = &vpfe_dev->fmt.fmt.pix; in vpfe_config_image_format()
388 vpfe_dev->std_info.active_pixels = in vpfe_config_image_format()
390 vpfe_dev->std_info.active_lines = in vpfe_config_image_format()
392 vpfe_dev->std_info.frame_format = in vpfe_config_image_format()
394 vpfe_dev->std_index = i; in vpfe_config_image_format()
400 v4l2_err(&vpfe_dev->v4l2_dev, "standard not supported\n"); in vpfe_config_image_format()
404 vpfe_dev->crop.top = 0; in vpfe_config_image_format()
405 vpfe_dev->crop.left = 0; in vpfe_config_image_format()
406 vpfe_dev->crop.width = vpfe_dev->std_info.active_pixels; in vpfe_config_image_format()
407 vpfe_dev->crop.height = vpfe_dev->std_info.active_lines; in vpfe_config_image_format()
408 pix->width = vpfe_dev->crop.width; in vpfe_config_image_format()
409 pix->height = vpfe_dev->crop.height; in vpfe_config_image_format()
412 if (vpfe_dev->std_info.frame_format) { in vpfe_config_image_format()
427 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, in vpfe_config_image_format()
431 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_config_image_format()
440 ret = vpfe_config_ccdc_image_format(vpfe_dev); in vpfe_config_image_format()
451 static int vpfe_initialize_device(struct vpfe_device *vpfe_dev) in vpfe_initialize_device() argument
456 vpfe_dev->current_input = 0; in vpfe_initialize_device()
459 vpfe_dev->std_index = 0; in vpfe_initialize_device()
462 ret = vpfe_config_image_format(vpfe_dev, in vpfe_initialize_device()
463 vpfe_standards[vpfe_dev->std_index].std_id); in vpfe_initialize_device()
470 v4l2_err(&vpfe_dev->v4l2_dev, "ccdc device not registered\n"); in vpfe_initialize_device()
476 v4l2_err(&vpfe_dev->v4l2_dev, "Couldn't lock ccdc module\n"); in vpfe_initialize_device()
480 ret = ccdc_dev->hw_ops.open(vpfe_dev->pdev); in vpfe_initialize_device()
482 vpfe_dev->initialized = 1; in vpfe_initialize_device()
485 if (vpfe_dev->cfg->clr_intr) in vpfe_initialize_device()
486 vpfe_dev->cfg->clr_intr(-1); in vpfe_initialize_device()
499 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_open() local
503 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_open\n"); in vpfe_open()
505 if (!vpfe_dev->cfg->num_subdevs) { in vpfe_open()
506 v4l2_err(&vpfe_dev->v4l2_dev, "No decoder registered\n"); in vpfe_open()
513 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_open()
519 fh->vpfe_dev = vpfe_dev; in vpfe_open()
521 mutex_lock(&vpfe_dev->lock); in vpfe_open()
523 if (!vpfe_dev->initialized) { in vpfe_open()
524 if (vpfe_initialize_device(vpfe_dev)) { in vpfe_open()
525 mutex_unlock(&vpfe_dev->lock); in vpfe_open()
530 vpfe_dev->usrs++; in vpfe_open()
534 mutex_unlock(&vpfe_dev->lock); in vpfe_open()
538 static void vpfe_schedule_next_buffer(struct vpfe_device *vpfe_dev) in vpfe_schedule_next_buffer() argument
542 vpfe_dev->next_frm = list_entry(vpfe_dev->dma_queue.next, in vpfe_schedule_next_buffer()
544 list_del(&vpfe_dev->next_frm->queue); in vpfe_schedule_next_buffer()
545 vpfe_dev->next_frm->state = VIDEOBUF_ACTIVE; in vpfe_schedule_next_buffer()
546 addr = videobuf_to_dma_contig(vpfe_dev->next_frm); in vpfe_schedule_next_buffer()
551 static void vpfe_schedule_bottom_field(struct vpfe_device *vpfe_dev) in vpfe_schedule_bottom_field() argument
555 addr = videobuf_to_dma_contig(vpfe_dev->cur_frm); in vpfe_schedule_bottom_field()
556 addr += vpfe_dev->field_off; in vpfe_schedule_bottom_field()
560 static void vpfe_process_buffer_complete(struct vpfe_device *vpfe_dev) in vpfe_process_buffer_complete() argument
562 v4l2_get_timestamp(&vpfe_dev->cur_frm->ts); in vpfe_process_buffer_complete()
563 vpfe_dev->cur_frm->state = VIDEOBUF_DONE; in vpfe_process_buffer_complete()
564 vpfe_dev->cur_frm->size = vpfe_dev->fmt.fmt.pix.sizeimage; in vpfe_process_buffer_complete()
565 wake_up_interruptible(&vpfe_dev->cur_frm->done); in vpfe_process_buffer_complete()
566 vpfe_dev->cur_frm = vpfe_dev->next_frm; in vpfe_process_buffer_complete()
572 struct vpfe_device *vpfe_dev = dev_id; in vpfe_isr() local
576 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "\nStarting vpfe_isr...\n"); in vpfe_isr()
577 field = vpfe_dev->fmt.fmt.pix.field; in vpfe_isr()
580 if (!vpfe_dev->started) in vpfe_isr()
589 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_isr()
591 if (vpfe_dev->cur_frm != vpfe_dev->next_frm) in vpfe_isr()
592 vpfe_process_buffer_complete(vpfe_dev); in vpfe_isr()
600 vpfe_dev->field_id ^= 1; in vpfe_isr()
601 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "field id = %x:%x.\n", in vpfe_isr()
602 fid, vpfe_dev->field_id); in vpfe_isr()
603 if (fid == vpfe_dev->field_id) { in vpfe_isr()
610 if (vpfe_dev->cur_frm != vpfe_dev->next_frm) in vpfe_isr()
611 vpfe_process_buffer_complete(vpfe_dev); in vpfe_isr()
618 vpfe_schedule_bottom_field(vpfe_dev); in vpfe_isr()
628 spin_lock(&vpfe_dev->dma_queue_lock); in vpfe_isr()
629 if (!list_empty(&vpfe_dev->dma_queue) && in vpfe_isr()
630 vpfe_dev->cur_frm == vpfe_dev->next_frm) in vpfe_isr()
631 vpfe_schedule_next_buffer(vpfe_dev); in vpfe_isr()
632 spin_unlock(&vpfe_dev->dma_queue_lock); in vpfe_isr()
638 vpfe_dev->field_id = fid; in vpfe_isr()
641 if (vpfe_dev->cfg->clr_intr) in vpfe_isr()
642 vpfe_dev->cfg->clr_intr(irq); in vpfe_isr()
650 struct vpfe_device *vpfe_dev = dev_id; in vdint1_isr() local
652 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "\nInside vdint1_isr...\n"); in vdint1_isr()
655 if (!vpfe_dev->started) { in vdint1_isr()
656 if (vpfe_dev->cfg->clr_intr) in vdint1_isr()
657 vpfe_dev->cfg->clr_intr(irq); in vdint1_isr()
661 spin_lock(&vpfe_dev->dma_queue_lock); in vdint1_isr()
662 if ((vpfe_dev->fmt.fmt.pix.field == V4L2_FIELD_NONE) && in vdint1_isr()
663 !list_empty(&vpfe_dev->dma_queue) && in vdint1_isr()
664 vpfe_dev->cur_frm == vpfe_dev->next_frm) in vdint1_isr()
665 vpfe_schedule_next_buffer(vpfe_dev); in vdint1_isr()
666 spin_unlock(&vpfe_dev->dma_queue_lock); in vdint1_isr()
668 if (vpfe_dev->cfg->clr_intr) in vdint1_isr()
669 vpfe_dev->cfg->clr_intr(irq); in vdint1_isr()
674 static void vpfe_detach_irq(struct vpfe_device *vpfe_dev) in vpfe_detach_irq() argument
680 free_irq(vpfe_dev->ccdc_irq1, vpfe_dev); in vpfe_detach_irq()
683 static int vpfe_attach_irq(struct vpfe_device *vpfe_dev) in vpfe_attach_irq() argument
689 return request_irq(vpfe_dev->ccdc_irq1, vdint1_isr, in vpfe_attach_irq()
691 vpfe_dev); in vpfe_attach_irq()
697 static void vpfe_stop_ccdc_capture(struct vpfe_device *vpfe_dev) in vpfe_stop_ccdc_capture() argument
699 vpfe_dev->started = 0; in vpfe_stop_ccdc_capture()
711 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_release() local
716 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_release\n"); in vpfe_release()
719 mutex_lock(&vpfe_dev->lock); in vpfe_release()
722 if (vpfe_dev->started) { in vpfe_release()
723 sdinfo = vpfe_dev->current_subdev; in vpfe_release()
724 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, in vpfe_release()
728 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_release()
730 vpfe_stop_ccdc_capture(vpfe_dev); in vpfe_release()
731 vpfe_detach_irq(vpfe_dev); in vpfe_release()
732 videobuf_streamoff(&vpfe_dev->buffer_queue); in vpfe_release()
734 vpfe_dev->io_usrs = 0; in vpfe_release()
735 vpfe_dev->numbuffers = config_params.numbuffers; in vpfe_release()
736 videobuf_stop(&vpfe_dev->buffer_queue); in vpfe_release()
737 videobuf_mmap_free(&vpfe_dev->buffer_queue); in vpfe_release()
741 vpfe_dev->usrs--; in vpfe_release()
745 if (!vpfe_dev->usrs) { in vpfe_release()
746 vpfe_dev->initialized = 0; in vpfe_release()
748 ccdc_dev->hw_ops.close(vpfe_dev->pdev); in vpfe_release()
751 mutex_unlock(&vpfe_dev->lock); in vpfe_release()
765 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_mmap() local
767 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_mmap\n"); in vpfe_mmap()
769 return videobuf_mmap_mapper(&vpfe_dev->buffer_queue, vma); in vpfe_mmap()
777 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_poll() local
779 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_poll\n"); in vpfe_poll()
781 if (vpfe_dev->started) in vpfe_poll()
783 &vpfe_dev->buffer_queue, wait); in vpfe_poll()
815 vpfe_check_format(struct vpfe_device *vpfe_dev, in vpfe_check_format() argument
829 pixfmt->pixelformat = vpfe_dev->fmt.fmt.pix.pixelformat; in vpfe_check_format()
846 pixfmt->pixelformat = vpfe_dev->fmt.fmt.pix.pixelformat; in vpfe_check_format()
857 pixfmt->field = vpfe_dev->fmt.fmt.pix.field; in vpfe_check_format()
864 if (vpfe_dev->fmt.fmt.pix.field != pixfmt->field) { in vpfe_check_format()
873 if (!vpfe_dev->std_info.frame_format) in vpfe_check_format()
877 if (vpfe_dev->std_info.frame_format) in vpfe_check_format()
883 pixfmt->field = vpfe_dev->fmt.fmt.pix.field; in vpfe_check_format()
893 max_width = vpfe_dev->std_info.active_pixels; in vpfe_check_format()
894 max_height = vpfe_dev->std_info.active_lines; in vpfe_check_format()
897 v4l2_info(&vpfe_dev->v4l2_dev, "width = %d, height = %d, bpp = %d\n", in vpfe_check_format()
919 v4l2_info(&vpfe_dev->v4l2_dev, "adjusted width = %d, height =" in vpfe_check_format()
929 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_querycap() local
931 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_querycap\n"); in vpfe_querycap()
937 strlcpy(cap->card, vpfe_dev->cfg->card_name, sizeof(cap->card)); in vpfe_querycap()
944 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_g_fmt_vid_cap() local
946 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_g_fmt_vid_cap\n"); in vpfe_g_fmt_vid_cap()
948 *fmt = vpfe_dev->fmt; in vpfe_g_fmt_vid_cap()
955 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_enum_fmt_vid_cap() local
960 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_enum_fmt_vid_cap\n"); in vpfe_enum_fmt_vid_cap()
979 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_s_fmt_vid_cap() local
983 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_fmt_vid_cap\n"); in vpfe_s_fmt_vid_cap()
986 if (vpfe_dev->started) { in vpfe_s_fmt_vid_cap()
987 v4l2_err(&vpfe_dev->v4l2_dev, "Streaming is started\n"); in vpfe_s_fmt_vid_cap()
992 pix_fmts = vpfe_check_format(vpfe_dev, &fmt->fmt.pix); in vpfe_s_fmt_vid_cap()
998 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_s_fmt_vid_cap()
1003 vpfe_detach_irq(vpfe_dev); in vpfe_s_fmt_vid_cap()
1004 vpfe_dev->fmt = *fmt; in vpfe_s_fmt_vid_cap()
1006 ret = vpfe_config_ccdc_image_format(vpfe_dev); in vpfe_s_fmt_vid_cap()
1007 mutex_unlock(&vpfe_dev->lock); in vpfe_s_fmt_vid_cap()
1014 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_try_fmt_vid_cap() local
1017 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_try_fmt_vid_cap\n"); in vpfe_try_fmt_vid_cap()
1019 pix_fmts = vpfe_check_format(vpfe_dev, &f->fmt.pix); in vpfe_try_fmt_vid_cap()
1029 static int vpfe_get_subdev_input_index(struct vpfe_device *vpfe_dev, in vpfe_get_subdev_input_index() argument
1034 struct vpfe_config *cfg = vpfe_dev->cfg; in vpfe_get_subdev_input_index()
1055 static int vpfe_get_app_input_index(struct vpfe_device *vpfe_dev, in vpfe_get_app_input_index() argument
1058 struct vpfe_config *cfg = vpfe_dev->cfg; in vpfe_get_app_input_index()
1064 if (!strcmp(sdinfo->name, vpfe_dev->current_subdev->name)) { in vpfe_get_app_input_index()
1065 if (vpfe_dev->current_input >= sdinfo->num_inputs) in vpfe_get_app_input_index()
1067 *app_input_index = j + vpfe_dev->current_input; in vpfe_get_app_input_index()
1078 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_enum_input() local
1082 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_enum_input\n"); in vpfe_enum_input()
1084 if (vpfe_get_subdev_input_index(vpfe_dev, in vpfe_enum_input()
1088 v4l2_err(&vpfe_dev->v4l2_dev, "input information not found" in vpfe_enum_input()
1092 sdinfo = &vpfe_dev->cfg->sub_devs[subdev]; in vpfe_enum_input()
1099 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_g_input() local
1101 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_g_input\n"); in vpfe_g_input()
1103 return vpfe_get_app_input_index(vpfe_dev, index); in vpfe_g_input()
1109 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_s_input() local
1117 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_input\n"); in vpfe_s_input()
1119 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_s_input()
1127 if (vpfe_dev->started) { in vpfe_s_input()
1128 v4l2_err(&vpfe_dev->v4l2_dev, "Streaming is on\n"); in vpfe_s_input()
1132 ret = vpfe_get_subdev_input_index(vpfe_dev, in vpfe_s_input()
1137 v4l2_err(&vpfe_dev->v4l2_dev, "invalid input index\n"); in vpfe_s_input()
1141 sdinfo = &vpfe_dev->cfg->sub_devs[subdev_index]; in vpfe_s_input()
1142 sd = vpfe_dev->sd[subdev_index]; in vpfe_s_input()
1153 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_s_input()
1158 vpfe_dev->current_subdev = sdinfo; in vpfe_s_input()
1160 vpfe_dev->v4l2_dev.ctrl_handler = sd->ctrl_handler; in vpfe_s_input()
1161 vpfe_dev->current_input = index; in vpfe_s_input()
1162 vpfe_dev->std_index = 0; in vpfe_s_input()
1170 ret = vpfe_config_image_format(vpfe_dev, in vpfe_s_input()
1171 vpfe_standards[vpfe_dev->std_index].std_id); in vpfe_s_input()
1173 mutex_unlock(&vpfe_dev->lock); in vpfe_s_input()
1179 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_querystd() local
1183 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_querystd\n"); in vpfe_querystd()
1185 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_querystd()
1186 sdinfo = vpfe_dev->current_subdev; in vpfe_querystd()
1190 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id, in vpfe_querystd()
1192 mutex_unlock(&vpfe_dev->lock); in vpfe_querystd()
1198 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_s_std() local
1202 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_std\n"); in vpfe_s_std()
1205 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_s_std()
1209 sdinfo = vpfe_dev->current_subdev; in vpfe_s_std()
1211 if (vpfe_dev->started) { in vpfe_s_std()
1212 v4l2_err(&vpfe_dev->v4l2_dev, "streaming is started\n"); in vpfe_s_std()
1217 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id, in vpfe_s_std()
1220 v4l2_err(&vpfe_dev->v4l2_dev, "Failed to set standard\n"); in vpfe_s_std()
1223 ret = vpfe_config_image_format(vpfe_dev, std_id); in vpfe_s_std()
1226 mutex_unlock(&vpfe_dev->lock); in vpfe_s_std()
1232 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_g_std() local
1234 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_g_std\n"); in vpfe_g_std()
1236 *std_id = vpfe_standards[vpfe_dev->std_index].std_id; in vpfe_g_std()
1247 struct vpfe_device *vpfe_dev = fh->vpfe_dev; in vpfe_videobuf_setup() local
1249 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_buffer_setup\n"); in vpfe_videobuf_setup()
1250 *size = vpfe_dev->fmt.fmt.pix.sizeimage; in vpfe_videobuf_setup()
1251 if (vpfe_dev->memory == V4L2_MEMORY_MMAP && in vpfe_videobuf_setup()
1252 vpfe_dev->fmt.fmt.pix.sizeimage > config_params.device_bufsize) in vpfe_videobuf_setup()
1257 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_videobuf_setup()
1267 struct vpfe_device *vpfe_dev = fh->vpfe_dev; in vpfe_videobuf_prepare() local
1271 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_buffer_prepare\n"); in vpfe_videobuf_prepare()
1275 vb->width = vpfe_dev->fmt.fmt.pix.width; in vpfe_videobuf_prepare()
1276 vb->height = vpfe_dev->fmt.fmt.pix.height; in vpfe_videobuf_prepare()
1277 vb->size = vpfe_dev->fmt.fmt.pix.sizeimage; in vpfe_videobuf_prepare()
1299 struct vpfe_device *vpfe_dev = fh->vpfe_dev; in vpfe_videobuf_queue() local
1302 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_buffer_queue\n"); in vpfe_videobuf_queue()
1305 spin_lock_irqsave(&vpfe_dev->dma_queue_lock, flags); in vpfe_videobuf_queue()
1306 list_add_tail(&vb->queue, &vpfe_dev->dma_queue); in vpfe_videobuf_queue()
1307 spin_unlock_irqrestore(&vpfe_dev->dma_queue_lock, flags); in vpfe_videobuf_queue()
1317 struct vpfe_device *vpfe_dev = fh->vpfe_dev; in vpfe_videobuf_release() local
1320 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_videobuf_release\n"); in vpfe_videobuf_release()
1326 spin_lock_irqsave(&vpfe_dev->dma_queue_lock, flags); in vpfe_videobuf_release()
1327 INIT_LIST_HEAD(&vpfe_dev->dma_queue); in vpfe_videobuf_release()
1328 spin_unlock_irqrestore(&vpfe_dev->dma_queue_lock, flags); in vpfe_videobuf_release()
1347 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_reqbufs() local
1351 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_reqbufs\n"); in vpfe_reqbufs()
1354 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buffer type\n"); in vpfe_reqbufs()
1358 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_reqbufs()
1362 if (vpfe_dev->io_usrs != 0) { in vpfe_reqbufs()
1363 v4l2_err(&vpfe_dev->v4l2_dev, "Only one IO user allowed\n"); in vpfe_reqbufs()
1368 vpfe_dev->memory = req_buf->memory; in vpfe_reqbufs()
1369 videobuf_queue_dma_contig_init(&vpfe_dev->buffer_queue, in vpfe_reqbufs()
1371 vpfe_dev->pdev, in vpfe_reqbufs()
1372 &vpfe_dev->irqlock, in vpfe_reqbufs()
1374 vpfe_dev->fmt.fmt.pix.field, in vpfe_reqbufs()
1379 vpfe_dev->io_usrs = 1; in vpfe_reqbufs()
1380 INIT_LIST_HEAD(&vpfe_dev->dma_queue); in vpfe_reqbufs()
1381 ret = videobuf_reqbufs(&vpfe_dev->buffer_queue, req_buf); in vpfe_reqbufs()
1383 mutex_unlock(&vpfe_dev->lock); in vpfe_reqbufs()
1390 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_querybuf() local
1392 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_querybuf\n"); in vpfe_querybuf()
1395 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf type\n"); in vpfe_querybuf()
1399 if (vpfe_dev->memory != V4L2_MEMORY_MMAP) { in vpfe_querybuf()
1400 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid memory\n"); in vpfe_querybuf()
1404 return videobuf_querybuf(&vpfe_dev->buffer_queue, buf); in vpfe_querybuf()
1410 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_qbuf() local
1413 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_qbuf\n"); in vpfe_qbuf()
1416 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf type\n"); in vpfe_qbuf()
1425 v4l2_err(&vpfe_dev->v4l2_dev, "fh->io_allowed\n"); in vpfe_qbuf()
1428 return videobuf_qbuf(&vpfe_dev->buffer_queue, p); in vpfe_qbuf()
1434 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_dqbuf() local
1436 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_dqbuf\n"); in vpfe_dqbuf()
1439 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf type\n"); in vpfe_dqbuf()
1442 return videobuf_dqbuf(&vpfe_dev->buffer_queue, in vpfe_dqbuf()
1450 static void vpfe_calculate_offsets(struct vpfe_device *vpfe_dev) in vpfe_calculate_offsets() argument
1454 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_calculate_offsets\n"); in vpfe_calculate_offsets()
1457 vpfe_dev->field_off = image_win.height * image_win.width; in vpfe_calculate_offsets()
1461 static void vpfe_start_ccdc_capture(struct vpfe_device *vpfe_dev) in vpfe_start_ccdc_capture() argument
1466 vpfe_dev->started = 1; in vpfe_start_ccdc_capture()
1477 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_streamon() local
1483 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_streamon\n"); in vpfe_streamon()
1486 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf type\n"); in vpfe_streamon()
1492 v4l2_err(&vpfe_dev->v4l2_dev, "fh->io_allowed\n"); in vpfe_streamon()
1496 sdinfo = vpfe_dev->current_subdev; in vpfe_streamon()
1497 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id, in vpfe_streamon()
1501 v4l2_err(&vpfe_dev->v4l2_dev, "stream on failed in subdev\n"); in vpfe_streamon()
1506 if (list_empty(&vpfe_dev->buffer_queue.stream)) { in vpfe_streamon()
1507 v4l2_err(&vpfe_dev->v4l2_dev, "buffer queue is empty\n"); in vpfe_streamon()
1512 ret = videobuf_streamon(&vpfe_dev->buffer_queue); in vpfe_streamon()
1517 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_streamon()
1521 vpfe_dev->next_frm = list_entry(vpfe_dev->dma_queue.next, in vpfe_streamon()
1523 vpfe_dev->cur_frm = vpfe_dev->next_frm; in vpfe_streamon()
1525 list_del(&vpfe_dev->cur_frm->queue); in vpfe_streamon()
1527 vpfe_dev->cur_frm->state = VIDEOBUF_ACTIVE; in vpfe_streamon()
1529 vpfe_dev->field_id = 0; in vpfe_streamon()
1530 addr = videobuf_to_dma_contig(vpfe_dev->cur_frm); in vpfe_streamon()
1533 vpfe_calculate_offsets(vpfe_dev); in vpfe_streamon()
1535 if (vpfe_attach_irq(vpfe_dev) < 0) { in vpfe_streamon()
1536 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_streamon()
1542 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_streamon()
1548 vpfe_start_ccdc_capture(vpfe_dev); in vpfe_streamon()
1549 mutex_unlock(&vpfe_dev->lock); in vpfe_streamon()
1552 mutex_unlock(&vpfe_dev->lock); in vpfe_streamon()
1554 ret = videobuf_streamoff(&vpfe_dev->buffer_queue); in vpfe_streamon()
1561 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_streamoff() local
1566 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_streamoff\n"); in vpfe_streamoff()
1569 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf type\n"); in vpfe_streamoff()
1575 v4l2_err(&vpfe_dev->v4l2_dev, "fh->io_allowed\n"); in vpfe_streamoff()
1580 if (!vpfe_dev->started) { in vpfe_streamoff()
1581 v4l2_err(&vpfe_dev->v4l2_dev, "device started\n"); in vpfe_streamoff()
1585 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_streamoff()
1589 vpfe_stop_ccdc_capture(vpfe_dev); in vpfe_streamoff()
1590 vpfe_detach_irq(vpfe_dev); in vpfe_streamoff()
1592 sdinfo = vpfe_dev->current_subdev; in vpfe_streamoff()
1593 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id, in vpfe_streamoff()
1597 v4l2_err(&vpfe_dev->v4l2_dev, "stream off failed in subdev\n"); in vpfe_streamoff()
1598 ret = videobuf_streamoff(&vpfe_dev->buffer_queue); in vpfe_streamoff()
1599 mutex_unlock(&vpfe_dev->lock); in vpfe_streamoff()
1606 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_cropcap() local
1608 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_cropcap\n"); in vpfe_cropcap()
1610 if (vpfe_dev->std_index >= ARRAY_SIZE(vpfe_standards)) in vpfe_cropcap()
1616 vpfe_standards[vpfe_dev->std_index].width; in vpfe_cropcap()
1618 vpfe_standards[vpfe_dev->std_index].height; in vpfe_cropcap()
1619 crop->pixelaspect = vpfe_standards[vpfe_dev->std_index].pixelaspect; in vpfe_cropcap()
1626 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_g_crop() local
1628 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_g_crop\n"); in vpfe_g_crop()
1630 crop->c = vpfe_dev->crop; in vpfe_g_crop()
1637 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_s_crop() local
1641 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_crop\n"); in vpfe_s_crop()
1643 if (vpfe_dev->started) { in vpfe_s_crop()
1645 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_s_crop()
1650 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_s_crop()
1655 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_s_crop()
1666 vpfe_dev->std_info.active_pixels) || in vpfe_s_crop()
1668 vpfe_dev->std_info.active_lines)) { in vpfe_s_crop()
1669 v4l2_err(&vpfe_dev->v4l2_dev, "Error in S_CROP params\n"); in vpfe_s_crop()
1674 vpfe_dev->fmt.fmt.pix.width = rect.width; in vpfe_s_crop()
1675 vpfe_dev->fmt.fmt.pix.height = rect.height; in vpfe_s_crop()
1676 vpfe_dev->fmt.fmt.pix.bytesperline = in vpfe_s_crop()
1678 vpfe_dev->fmt.fmt.pix.sizeimage = in vpfe_s_crop()
1679 vpfe_dev->fmt.fmt.pix.bytesperline * in vpfe_s_crop()
1680 vpfe_dev->fmt.fmt.pix.height; in vpfe_s_crop()
1681 vpfe_dev->crop = rect; in vpfe_s_crop()
1683 mutex_unlock(&vpfe_dev->lock); in vpfe_s_crop()
1691 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_param_handler() local
1694 v4l2_dbg(2, debug, &vpfe_dev->v4l2_dev, "vpfe_param_handler\n"); in vpfe_param_handler()
1696 if (vpfe_dev->started) { in vpfe_param_handler()
1698 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_param_handler()
1703 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_param_handler()
1709 v4l2_warn(&vpfe_dev->v4l2_dev, in vpfe_param_handler()
1714 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_param_handler()
1718 ret = vpfe_get_ccdc_image_format(vpfe_dev, in vpfe_param_handler()
1719 &vpfe_dev->fmt); in vpfe_param_handler()
1721 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_param_handler()
1727 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_param_handler()
1735 mutex_unlock(&vpfe_dev->lock); in vpfe_param_handler()
1767 struct vpfe_device *vpfe_dev; in vpfe_initialize() local
1787 vpfe_dev = kzalloc(sizeof(*vpfe_dev), GFP_KERNEL); in vpfe_initialize()
1789 return vpfe_dev; in vpfe_initialize()
1802 struct vpfe_device *vpfe_dev; in vpfe_probe() local
1809 vpfe_dev = vpfe_initialize(); in vpfe_probe()
1811 if (!vpfe_dev) { in vpfe_probe()
1817 vpfe_dev->pdev = &pdev->dev; in vpfe_probe()
1826 vpfe_dev->cfg = vpfe_cfg; in vpfe_probe()
1854 vpfe_dev->ccdc_irq0 = res1->start; in vpfe_probe()
1864 vpfe_dev->ccdc_irq1 = res1->start; in vpfe_probe()
1866 ret = request_irq(vpfe_dev->ccdc_irq0, vpfe_isr, 0, in vpfe_probe()
1867 "vpfe_capture0", vpfe_dev); in vpfe_probe()
1874 vfd = &vpfe_dev->video_dev; in vpfe_probe()
1880 vfd->v4l2_dev = &vpfe_dev->v4l2_dev; in vpfe_probe()
1888 ret = v4l2_device_register(&pdev->dev, &vpfe_dev->v4l2_dev); in vpfe_probe()
1894 v4l2_info(&vpfe_dev->v4l2_dev, "v4l2 device registered\n"); in vpfe_probe()
1895 spin_lock_init(&vpfe_dev->irqlock); in vpfe_probe()
1896 spin_lock_init(&vpfe_dev->dma_queue_lock); in vpfe_probe()
1897 mutex_init(&vpfe_dev->lock); in vpfe_probe()
1900 vpfe_dev->numbuffers = config_params.numbuffers; in vpfe_probe()
1903 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_probe()
1905 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_probe()
1906 "video_dev=%p\n", &vpfe_dev->video_dev); in vpfe_probe()
1907 vpfe_dev->fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; in vpfe_probe()
1908 ret = video_register_device(&vpfe_dev->video_dev, in vpfe_probe()
1917 v4l2_info(&vpfe_dev->v4l2_dev, "video device registered\n"); in vpfe_probe()
1919 platform_set_drvdata(pdev, vpfe_dev); in vpfe_probe()
1921 video_set_drvdata(&vpfe_dev->video_dev, vpfe_dev); in vpfe_probe()
1924 vpfe_dev->sd = kmalloc(sizeof(struct v4l2_subdev *) * num_subdevs, in vpfe_probe()
1926 if (NULL == vpfe_dev->sd) { in vpfe_probe()
1927 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_probe()
1939 vpfe_dev->sd[i] = in vpfe_probe()
1940 v4l2_i2c_new_subdev_board(&vpfe_dev->v4l2_dev, in vpfe_probe()
1944 if (vpfe_dev->sd[i]) { in vpfe_probe()
1945 v4l2_info(&vpfe_dev->v4l2_dev, in vpfe_probe()
1948 vpfe_dev->sd[i]->grp_id = sdinfo->grp_id; in vpfe_probe()
1955 v4l2_info(&vpfe_dev->v4l2_dev, in vpfe_probe()
1963 vpfe_dev->current_subdev = &vpfe_cfg->sub_devs[0]; in vpfe_probe()
1964 vpfe_dev->v4l2_dev.ctrl_handler = vpfe_dev->sd[0]->ctrl_handler; in vpfe_probe()
1971 kfree(vpfe_dev->sd); in vpfe_probe()
1973 video_unregister_device(&vpfe_dev->video_dev); in vpfe_probe()
1975 v4l2_device_unregister(&vpfe_dev->v4l2_dev); in vpfe_probe()
1977 free_irq(vpfe_dev->ccdc_irq0, vpfe_dev); in vpfe_probe()
1982 kfree(vpfe_dev); in vpfe_probe()
1991 struct vpfe_device *vpfe_dev = platform_get_drvdata(pdev); in vpfe_remove() local
1995 free_irq(vpfe_dev->ccdc_irq0, vpfe_dev); in vpfe_remove()
1996 kfree(vpfe_dev->sd); in vpfe_remove()
1997 v4l2_device_unregister(&vpfe_dev->v4l2_dev); in vpfe_remove()
1998 video_unregister_device(&vpfe_dev->video_dev); in vpfe_remove()
1999 kfree(vpfe_dev); in vpfe_remove()