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()
386 struct v4l2_pix_format *pix = &vpfe_dev->fmt.fmt.pix; in vpfe_config_image_format()
391 vpfe_dev->std_info.active_pixels = in vpfe_config_image_format()
393 vpfe_dev->std_info.active_lines = in vpfe_config_image_format()
395 vpfe_dev->std_info.frame_format = in vpfe_config_image_format()
397 vpfe_dev->std_index = i; in vpfe_config_image_format()
403 v4l2_err(&vpfe_dev->v4l2_dev, "standard not supported\n"); in vpfe_config_image_format()
407 vpfe_dev->crop.top = 0; in vpfe_config_image_format()
408 vpfe_dev->crop.left = 0; in vpfe_config_image_format()
409 vpfe_dev->crop.width = vpfe_dev->std_info.active_pixels; in vpfe_config_image_format()
410 vpfe_dev->crop.height = vpfe_dev->std_info.active_lines; in vpfe_config_image_format()
411 pix->width = vpfe_dev->crop.width; in vpfe_config_image_format()
412 pix->height = vpfe_dev->crop.height; in vpfe_config_image_format()
415 if (vpfe_dev->std_info.frame_format) { in vpfe_config_image_format()
430 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, in vpfe_config_image_format()
434 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_config_image_format()
443 ret = vpfe_config_ccdc_image_format(vpfe_dev); in vpfe_config_image_format()
454 static int vpfe_initialize_device(struct vpfe_device *vpfe_dev) in vpfe_initialize_device() argument
459 vpfe_dev->current_input = 0; in vpfe_initialize_device()
462 vpfe_dev->std_index = 0; in vpfe_initialize_device()
465 ret = vpfe_config_image_format(vpfe_dev, in vpfe_initialize_device()
466 vpfe_standards[vpfe_dev->std_index].std_id); in vpfe_initialize_device()
473 v4l2_err(&vpfe_dev->v4l2_dev, "ccdc device not registered\n"); in vpfe_initialize_device()
479 v4l2_err(&vpfe_dev->v4l2_dev, "Couldn't lock ccdc module\n"); in vpfe_initialize_device()
483 ret = ccdc_dev->hw_ops.open(vpfe_dev->pdev); in vpfe_initialize_device()
485 vpfe_dev->initialized = 1; in vpfe_initialize_device()
488 if (vpfe_dev->cfg->clr_intr) in vpfe_initialize_device()
489 vpfe_dev->cfg->clr_intr(-1); in vpfe_initialize_device()
502 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_open() local
506 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_open\n"); in vpfe_open()
508 if (!vpfe_dev->cfg->num_subdevs) { in vpfe_open()
509 v4l2_err(&vpfe_dev->v4l2_dev, "No decoder registered\n"); in vpfe_open()
516 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_open()
522 fh->vpfe_dev = vpfe_dev; in vpfe_open()
524 mutex_lock(&vpfe_dev->lock); in vpfe_open()
526 if (!vpfe_dev->initialized) { in vpfe_open()
527 if (vpfe_initialize_device(vpfe_dev)) { in vpfe_open()
528 mutex_unlock(&vpfe_dev->lock); in vpfe_open()
533 vpfe_dev->usrs++; in vpfe_open()
537 mutex_unlock(&vpfe_dev->lock); in vpfe_open()
541 static void vpfe_schedule_next_buffer(struct vpfe_device *vpfe_dev) in vpfe_schedule_next_buffer() argument
545 vpfe_dev->next_frm = list_entry(vpfe_dev->dma_queue.next, in vpfe_schedule_next_buffer()
547 list_del(&vpfe_dev->next_frm->queue); in vpfe_schedule_next_buffer()
548 vpfe_dev->next_frm->state = VIDEOBUF_ACTIVE; in vpfe_schedule_next_buffer()
549 addr = videobuf_to_dma_contig(vpfe_dev->next_frm); in vpfe_schedule_next_buffer()
554 static void vpfe_schedule_bottom_field(struct vpfe_device *vpfe_dev) in vpfe_schedule_bottom_field() argument
558 addr = videobuf_to_dma_contig(vpfe_dev->cur_frm); in vpfe_schedule_bottom_field()
559 addr += vpfe_dev->field_off; in vpfe_schedule_bottom_field()
563 static void vpfe_process_buffer_complete(struct vpfe_device *vpfe_dev) in vpfe_process_buffer_complete() argument
565 v4l2_get_timestamp(&vpfe_dev->cur_frm->ts); in vpfe_process_buffer_complete()
566 vpfe_dev->cur_frm->state = VIDEOBUF_DONE; in vpfe_process_buffer_complete()
567 vpfe_dev->cur_frm->size = vpfe_dev->fmt.fmt.pix.sizeimage; in vpfe_process_buffer_complete()
568 wake_up_interruptible(&vpfe_dev->cur_frm->done); in vpfe_process_buffer_complete()
569 vpfe_dev->cur_frm = vpfe_dev->next_frm; in vpfe_process_buffer_complete()
575 struct vpfe_device *vpfe_dev = dev_id; in vpfe_isr() local
579 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "\nStarting vpfe_isr...\n"); in vpfe_isr()
580 field = vpfe_dev->fmt.fmt.pix.field; in vpfe_isr()
583 if (!vpfe_dev->started) in vpfe_isr()
592 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_isr()
594 if (vpfe_dev->cur_frm != vpfe_dev->next_frm) in vpfe_isr()
595 vpfe_process_buffer_complete(vpfe_dev); in vpfe_isr()
603 vpfe_dev->field_id ^= 1; in vpfe_isr()
604 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "field id = %x:%x.\n", in vpfe_isr()
605 fid, vpfe_dev->field_id); in vpfe_isr()
606 if (fid == vpfe_dev->field_id) { in vpfe_isr()
613 if (vpfe_dev->cur_frm != vpfe_dev->next_frm) in vpfe_isr()
614 vpfe_process_buffer_complete(vpfe_dev); in vpfe_isr()
621 vpfe_schedule_bottom_field(vpfe_dev); in vpfe_isr()
631 spin_lock(&vpfe_dev->dma_queue_lock); in vpfe_isr()
632 if (!list_empty(&vpfe_dev->dma_queue) && in vpfe_isr()
633 vpfe_dev->cur_frm == vpfe_dev->next_frm) in vpfe_isr()
634 vpfe_schedule_next_buffer(vpfe_dev); in vpfe_isr()
635 spin_unlock(&vpfe_dev->dma_queue_lock); in vpfe_isr()
641 vpfe_dev->field_id = fid; in vpfe_isr()
644 if (vpfe_dev->cfg->clr_intr) in vpfe_isr()
645 vpfe_dev->cfg->clr_intr(irq); in vpfe_isr()
653 struct vpfe_device *vpfe_dev = dev_id; in vdint1_isr() local
655 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "\nInside vdint1_isr...\n"); in vdint1_isr()
658 if (!vpfe_dev->started) { in vdint1_isr()
659 if (vpfe_dev->cfg->clr_intr) in vdint1_isr()
660 vpfe_dev->cfg->clr_intr(irq); in vdint1_isr()
664 spin_lock(&vpfe_dev->dma_queue_lock); in vdint1_isr()
665 if ((vpfe_dev->fmt.fmt.pix.field == V4L2_FIELD_NONE) && in vdint1_isr()
666 !list_empty(&vpfe_dev->dma_queue) && in vdint1_isr()
667 vpfe_dev->cur_frm == vpfe_dev->next_frm) in vdint1_isr()
668 vpfe_schedule_next_buffer(vpfe_dev); in vdint1_isr()
669 spin_unlock(&vpfe_dev->dma_queue_lock); in vdint1_isr()
671 if (vpfe_dev->cfg->clr_intr) in vdint1_isr()
672 vpfe_dev->cfg->clr_intr(irq); in vdint1_isr()
677 static void vpfe_detach_irq(struct vpfe_device *vpfe_dev) in vpfe_detach_irq() argument
683 free_irq(vpfe_dev->ccdc_irq1, vpfe_dev); in vpfe_detach_irq()
686 static int vpfe_attach_irq(struct vpfe_device *vpfe_dev) in vpfe_attach_irq() argument
692 return request_irq(vpfe_dev->ccdc_irq1, vdint1_isr, in vpfe_attach_irq()
694 vpfe_dev); in vpfe_attach_irq()
700 static void vpfe_stop_ccdc_capture(struct vpfe_device *vpfe_dev) in vpfe_stop_ccdc_capture() argument
702 vpfe_dev->started = 0; in vpfe_stop_ccdc_capture()
714 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_release() local
719 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_release\n"); in vpfe_release()
722 mutex_lock(&vpfe_dev->lock); in vpfe_release()
725 if (vpfe_dev->started) { in vpfe_release()
726 sdinfo = vpfe_dev->current_subdev; in vpfe_release()
727 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, in vpfe_release()
731 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_release()
733 vpfe_stop_ccdc_capture(vpfe_dev); in vpfe_release()
734 vpfe_detach_irq(vpfe_dev); in vpfe_release()
735 videobuf_streamoff(&vpfe_dev->buffer_queue); in vpfe_release()
737 vpfe_dev->io_usrs = 0; in vpfe_release()
738 vpfe_dev->numbuffers = config_params.numbuffers; in vpfe_release()
739 videobuf_stop(&vpfe_dev->buffer_queue); in vpfe_release()
740 videobuf_mmap_free(&vpfe_dev->buffer_queue); in vpfe_release()
744 vpfe_dev->usrs--; in vpfe_release()
748 if (!vpfe_dev->usrs) { in vpfe_release()
749 vpfe_dev->initialized = 0; in vpfe_release()
751 ccdc_dev->hw_ops.close(vpfe_dev->pdev); in vpfe_release()
754 mutex_unlock(&vpfe_dev->lock); in vpfe_release()
768 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_mmap() local
770 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_mmap\n"); in vpfe_mmap()
772 return videobuf_mmap_mapper(&vpfe_dev->buffer_queue, vma); in vpfe_mmap()
780 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_poll() local
782 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_poll\n"); in vpfe_poll()
784 if (vpfe_dev->started) in vpfe_poll()
786 &vpfe_dev->buffer_queue, wait); in vpfe_poll()
818 vpfe_check_format(struct vpfe_device *vpfe_dev, in vpfe_check_format() argument
832 pixfmt->pixelformat = vpfe_dev->fmt.fmt.pix.pixelformat; in vpfe_check_format()
849 pixfmt->pixelformat = vpfe_dev->fmt.fmt.pix.pixelformat; in vpfe_check_format()
860 pixfmt->field = vpfe_dev->fmt.fmt.pix.field; in vpfe_check_format()
867 if (vpfe_dev->fmt.fmt.pix.field != pixfmt->field) { in vpfe_check_format()
876 if (!vpfe_dev->std_info.frame_format) in vpfe_check_format()
880 if (vpfe_dev->std_info.frame_format) in vpfe_check_format()
886 pixfmt->field = vpfe_dev->fmt.fmt.pix.field; in vpfe_check_format()
896 max_width = vpfe_dev->std_info.active_pixels; in vpfe_check_format()
897 max_height = vpfe_dev->std_info.active_lines; in vpfe_check_format()
900 v4l2_info(&vpfe_dev->v4l2_dev, "width = %d, height = %d, bpp = %d\n", in vpfe_check_format()
922 v4l2_info(&vpfe_dev->v4l2_dev, "adjusted width = %d, height =" in vpfe_check_format()
932 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_querycap() local
934 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_querycap\n"); in vpfe_querycap()
940 strlcpy(cap->card, vpfe_dev->cfg->card_name, sizeof(cap->card)); in vpfe_querycap()
947 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_g_fmt_vid_cap() local
949 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_g_fmt_vid_cap\n"); in vpfe_g_fmt_vid_cap()
951 *fmt = vpfe_dev->fmt; in vpfe_g_fmt_vid_cap()
958 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_enum_fmt_vid_cap() local
963 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_enum_fmt_vid_cap\n"); in vpfe_enum_fmt_vid_cap()
982 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_s_fmt_vid_cap() local
986 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_fmt_vid_cap\n"); in vpfe_s_fmt_vid_cap()
989 if (vpfe_dev->started) { in vpfe_s_fmt_vid_cap()
990 v4l2_err(&vpfe_dev->v4l2_dev, "Streaming is started\n"); in vpfe_s_fmt_vid_cap()
995 pix_fmts = vpfe_check_format(vpfe_dev, &fmt->fmt.pix); in vpfe_s_fmt_vid_cap()
1001 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_s_fmt_vid_cap()
1006 vpfe_detach_irq(vpfe_dev); in vpfe_s_fmt_vid_cap()
1007 vpfe_dev->fmt = *fmt; in vpfe_s_fmt_vid_cap()
1009 ret = vpfe_config_ccdc_image_format(vpfe_dev); in vpfe_s_fmt_vid_cap()
1010 mutex_unlock(&vpfe_dev->lock); in vpfe_s_fmt_vid_cap()
1017 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_try_fmt_vid_cap() local
1020 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_try_fmt_vid_cap\n"); in vpfe_try_fmt_vid_cap()
1022 pix_fmts = vpfe_check_format(vpfe_dev, &f->fmt.pix); in vpfe_try_fmt_vid_cap()
1032 static int vpfe_get_subdev_input_index(struct vpfe_device *vpfe_dev, in vpfe_get_subdev_input_index() argument
1037 struct vpfe_config *cfg = vpfe_dev->cfg; in vpfe_get_subdev_input_index()
1058 static int vpfe_get_app_input_index(struct vpfe_device *vpfe_dev, in vpfe_get_app_input_index() argument
1061 struct vpfe_config *cfg = vpfe_dev->cfg; in vpfe_get_app_input_index()
1067 if (!strcmp(sdinfo->name, vpfe_dev->current_subdev->name)) { in vpfe_get_app_input_index()
1068 if (vpfe_dev->current_input >= sdinfo->num_inputs) in vpfe_get_app_input_index()
1070 *app_input_index = j + vpfe_dev->current_input; in vpfe_get_app_input_index()
1081 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_enum_input() local
1085 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_enum_input\n"); in vpfe_enum_input()
1087 if (vpfe_get_subdev_input_index(vpfe_dev, in vpfe_enum_input()
1091 v4l2_err(&vpfe_dev->v4l2_dev, "input information not found" in vpfe_enum_input()
1095 sdinfo = &vpfe_dev->cfg->sub_devs[subdev]; in vpfe_enum_input()
1102 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_g_input() local
1104 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_g_input\n"); in vpfe_g_input()
1106 return vpfe_get_app_input_index(vpfe_dev, index); in vpfe_g_input()
1112 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_s_input() local
1120 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_input\n"); in vpfe_s_input()
1122 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_s_input()
1130 if (vpfe_dev->started) { in vpfe_s_input()
1131 v4l2_err(&vpfe_dev->v4l2_dev, "Streaming is on\n"); in vpfe_s_input()
1135 ret = vpfe_get_subdev_input_index(vpfe_dev, in vpfe_s_input()
1140 v4l2_err(&vpfe_dev->v4l2_dev, "invalid input index\n"); in vpfe_s_input()
1144 sdinfo = &vpfe_dev->cfg->sub_devs[subdev_index]; in vpfe_s_input()
1145 sd = vpfe_dev->sd[subdev_index]; in vpfe_s_input()
1156 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_s_input()
1161 vpfe_dev->current_subdev = sdinfo; in vpfe_s_input()
1163 vpfe_dev->v4l2_dev.ctrl_handler = sd->ctrl_handler; in vpfe_s_input()
1164 vpfe_dev->current_input = index; in vpfe_s_input()
1165 vpfe_dev->std_index = 0; in vpfe_s_input()
1173 ret = vpfe_config_image_format(vpfe_dev, in vpfe_s_input()
1174 vpfe_standards[vpfe_dev->std_index].std_id); in vpfe_s_input()
1176 mutex_unlock(&vpfe_dev->lock); in vpfe_s_input()
1182 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_querystd() local
1186 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_querystd\n"); in vpfe_querystd()
1188 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_querystd()
1189 sdinfo = vpfe_dev->current_subdev; in vpfe_querystd()
1193 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id, in vpfe_querystd()
1195 mutex_unlock(&vpfe_dev->lock); in vpfe_querystd()
1201 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_s_std() local
1205 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_std\n"); in vpfe_s_std()
1208 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_s_std()
1212 sdinfo = vpfe_dev->current_subdev; in vpfe_s_std()
1214 if (vpfe_dev->started) { in vpfe_s_std()
1215 v4l2_err(&vpfe_dev->v4l2_dev, "streaming is started\n"); in vpfe_s_std()
1220 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id, in vpfe_s_std()
1223 v4l2_err(&vpfe_dev->v4l2_dev, "Failed to set standard\n"); in vpfe_s_std()
1226 ret = vpfe_config_image_format(vpfe_dev, std_id); in vpfe_s_std()
1229 mutex_unlock(&vpfe_dev->lock); in vpfe_s_std()
1235 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_g_std() local
1237 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_g_std\n"); in vpfe_g_std()
1239 *std_id = vpfe_standards[vpfe_dev->std_index].std_id; in vpfe_g_std()
1250 struct vpfe_device *vpfe_dev = fh->vpfe_dev; in vpfe_videobuf_setup() local
1252 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_buffer_setup\n"); in vpfe_videobuf_setup()
1253 *size = vpfe_dev->fmt.fmt.pix.sizeimage; in vpfe_videobuf_setup()
1254 if (vpfe_dev->memory == V4L2_MEMORY_MMAP && in vpfe_videobuf_setup()
1255 vpfe_dev->fmt.fmt.pix.sizeimage > config_params.device_bufsize) in vpfe_videobuf_setup()
1260 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_videobuf_setup()
1270 struct vpfe_device *vpfe_dev = fh->vpfe_dev; in vpfe_videobuf_prepare() local
1274 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_buffer_prepare\n"); in vpfe_videobuf_prepare()
1278 vb->width = vpfe_dev->fmt.fmt.pix.width; in vpfe_videobuf_prepare()
1279 vb->height = vpfe_dev->fmt.fmt.pix.height; in vpfe_videobuf_prepare()
1280 vb->size = vpfe_dev->fmt.fmt.pix.sizeimage; in vpfe_videobuf_prepare()
1302 struct vpfe_device *vpfe_dev = fh->vpfe_dev; in vpfe_videobuf_queue() local
1305 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_buffer_queue\n"); in vpfe_videobuf_queue()
1308 spin_lock_irqsave(&vpfe_dev->dma_queue_lock, flags); in vpfe_videobuf_queue()
1309 list_add_tail(&vb->queue, &vpfe_dev->dma_queue); in vpfe_videobuf_queue()
1310 spin_unlock_irqrestore(&vpfe_dev->dma_queue_lock, flags); in vpfe_videobuf_queue()
1320 struct vpfe_device *vpfe_dev = fh->vpfe_dev; in vpfe_videobuf_release() local
1323 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_videobuf_release\n"); in vpfe_videobuf_release()
1329 spin_lock_irqsave(&vpfe_dev->dma_queue_lock, flags); in vpfe_videobuf_release()
1330 INIT_LIST_HEAD(&vpfe_dev->dma_queue); in vpfe_videobuf_release()
1331 spin_unlock_irqrestore(&vpfe_dev->dma_queue_lock, flags); in vpfe_videobuf_release()
1350 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_reqbufs() local
1354 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_reqbufs\n"); in vpfe_reqbufs()
1357 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buffer type\n"); in vpfe_reqbufs()
1361 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_reqbufs()
1365 if (vpfe_dev->io_usrs != 0) { in vpfe_reqbufs()
1366 v4l2_err(&vpfe_dev->v4l2_dev, "Only one IO user allowed\n"); in vpfe_reqbufs()
1371 vpfe_dev->memory = req_buf->memory; in vpfe_reqbufs()
1372 videobuf_queue_dma_contig_init(&vpfe_dev->buffer_queue, in vpfe_reqbufs()
1374 vpfe_dev->pdev, in vpfe_reqbufs()
1375 &vpfe_dev->irqlock, in vpfe_reqbufs()
1377 vpfe_dev->fmt.fmt.pix.field, in vpfe_reqbufs()
1382 vpfe_dev->io_usrs = 1; in vpfe_reqbufs()
1383 INIT_LIST_HEAD(&vpfe_dev->dma_queue); in vpfe_reqbufs()
1384 ret = videobuf_reqbufs(&vpfe_dev->buffer_queue, req_buf); in vpfe_reqbufs()
1386 mutex_unlock(&vpfe_dev->lock); in vpfe_reqbufs()
1393 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_querybuf() local
1395 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_querybuf\n"); in vpfe_querybuf()
1398 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf type\n"); in vpfe_querybuf()
1402 if (vpfe_dev->memory != V4L2_MEMORY_MMAP) { in vpfe_querybuf()
1403 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid memory\n"); in vpfe_querybuf()
1407 return videobuf_querybuf(&vpfe_dev->buffer_queue, buf); in vpfe_querybuf()
1413 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_qbuf() local
1416 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_qbuf\n"); in vpfe_qbuf()
1419 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf type\n"); in vpfe_qbuf()
1428 v4l2_err(&vpfe_dev->v4l2_dev, "fh->io_allowed\n"); in vpfe_qbuf()
1431 return videobuf_qbuf(&vpfe_dev->buffer_queue, p); in vpfe_qbuf()
1437 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_dqbuf() local
1439 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_dqbuf\n"); in vpfe_dqbuf()
1442 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf type\n"); in vpfe_dqbuf()
1445 return videobuf_dqbuf(&vpfe_dev->buffer_queue, in vpfe_dqbuf()
1453 static void vpfe_calculate_offsets(struct vpfe_device *vpfe_dev) in vpfe_calculate_offsets() argument
1457 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_calculate_offsets\n"); in vpfe_calculate_offsets()
1460 vpfe_dev->field_off = image_win.height * image_win.width; in vpfe_calculate_offsets()
1464 static void vpfe_start_ccdc_capture(struct vpfe_device *vpfe_dev) in vpfe_start_ccdc_capture() argument
1469 vpfe_dev->started = 1; in vpfe_start_ccdc_capture()
1480 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_streamon() local
1486 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_streamon\n"); in vpfe_streamon()
1489 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf type\n"); in vpfe_streamon()
1495 v4l2_err(&vpfe_dev->v4l2_dev, "fh->io_allowed\n"); in vpfe_streamon()
1499 sdinfo = vpfe_dev->current_subdev; in vpfe_streamon()
1500 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id, in vpfe_streamon()
1504 v4l2_err(&vpfe_dev->v4l2_dev, "stream on failed in subdev\n"); in vpfe_streamon()
1509 if (list_empty(&vpfe_dev->buffer_queue.stream)) { in vpfe_streamon()
1510 v4l2_err(&vpfe_dev->v4l2_dev, "buffer queue is empty\n"); in vpfe_streamon()
1515 ret = videobuf_streamon(&vpfe_dev->buffer_queue); in vpfe_streamon()
1520 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_streamon()
1524 vpfe_dev->next_frm = list_entry(vpfe_dev->dma_queue.next, in vpfe_streamon()
1526 vpfe_dev->cur_frm = vpfe_dev->next_frm; in vpfe_streamon()
1528 list_del(&vpfe_dev->cur_frm->queue); in vpfe_streamon()
1530 vpfe_dev->cur_frm->state = VIDEOBUF_ACTIVE; in vpfe_streamon()
1532 vpfe_dev->field_id = 0; in vpfe_streamon()
1533 addr = videobuf_to_dma_contig(vpfe_dev->cur_frm); in vpfe_streamon()
1536 vpfe_calculate_offsets(vpfe_dev); in vpfe_streamon()
1538 if (vpfe_attach_irq(vpfe_dev) < 0) { in vpfe_streamon()
1539 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_streamon()
1545 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_streamon()
1551 vpfe_start_ccdc_capture(vpfe_dev); in vpfe_streamon()
1552 mutex_unlock(&vpfe_dev->lock); in vpfe_streamon()
1555 mutex_unlock(&vpfe_dev->lock); in vpfe_streamon()
1557 ret = videobuf_streamoff(&vpfe_dev->buffer_queue); in vpfe_streamon()
1564 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_streamoff() local
1569 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_streamoff\n"); in vpfe_streamoff()
1572 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf type\n"); in vpfe_streamoff()
1578 v4l2_err(&vpfe_dev->v4l2_dev, "fh->io_allowed\n"); in vpfe_streamoff()
1583 if (!vpfe_dev->started) { in vpfe_streamoff()
1584 v4l2_err(&vpfe_dev->v4l2_dev, "device started\n"); in vpfe_streamoff()
1588 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_streamoff()
1592 vpfe_stop_ccdc_capture(vpfe_dev); in vpfe_streamoff()
1593 vpfe_detach_irq(vpfe_dev); in vpfe_streamoff()
1595 sdinfo = vpfe_dev->current_subdev; in vpfe_streamoff()
1596 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id, in vpfe_streamoff()
1600 v4l2_err(&vpfe_dev->v4l2_dev, "stream off failed in subdev\n"); in vpfe_streamoff()
1601 ret = videobuf_streamoff(&vpfe_dev->buffer_queue); in vpfe_streamoff()
1602 mutex_unlock(&vpfe_dev->lock); in vpfe_streamoff()
1609 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_cropcap() local
1611 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_cropcap\n"); in vpfe_cropcap()
1613 if (vpfe_dev->std_index >= ARRAY_SIZE(vpfe_standards)) in vpfe_cropcap()
1619 vpfe_standards[vpfe_dev->std_index].width; in vpfe_cropcap()
1621 vpfe_standards[vpfe_dev->std_index].height; in vpfe_cropcap()
1622 crop->pixelaspect = vpfe_standards[vpfe_dev->std_index].pixelaspect; in vpfe_cropcap()
1629 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_g_crop() local
1631 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_g_crop\n"); in vpfe_g_crop()
1633 crop->c = vpfe_dev->crop; in vpfe_g_crop()
1640 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_s_crop() local
1644 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_crop\n"); in vpfe_s_crop()
1646 if (vpfe_dev->started) { in vpfe_s_crop()
1648 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_s_crop()
1653 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_s_crop()
1658 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_s_crop()
1669 vpfe_dev->std_info.active_pixels) || in vpfe_s_crop()
1671 vpfe_dev->std_info.active_lines)) { in vpfe_s_crop()
1672 v4l2_err(&vpfe_dev->v4l2_dev, "Error in S_CROP params\n"); in vpfe_s_crop()
1677 vpfe_dev->fmt.fmt.pix.width = rect.width; in vpfe_s_crop()
1678 vpfe_dev->fmt.fmt.pix.height = rect.height; in vpfe_s_crop()
1679 vpfe_dev->fmt.fmt.pix.bytesperline = in vpfe_s_crop()
1681 vpfe_dev->fmt.fmt.pix.sizeimage = in vpfe_s_crop()
1682 vpfe_dev->fmt.fmt.pix.bytesperline * in vpfe_s_crop()
1683 vpfe_dev->fmt.fmt.pix.height; in vpfe_s_crop()
1684 vpfe_dev->crop = rect; in vpfe_s_crop()
1686 mutex_unlock(&vpfe_dev->lock); in vpfe_s_crop()
1694 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_param_handler() local
1697 v4l2_dbg(2, debug, &vpfe_dev->v4l2_dev, "vpfe_param_handler\n"); in vpfe_param_handler()
1699 if (vpfe_dev->started) { in vpfe_param_handler()
1701 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_param_handler()
1706 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_param_handler()
1712 v4l2_warn(&vpfe_dev->v4l2_dev, in vpfe_param_handler()
1717 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_param_handler()
1721 ret = vpfe_get_ccdc_image_format(vpfe_dev, in vpfe_param_handler()
1722 &vpfe_dev->fmt); in vpfe_param_handler()
1724 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_param_handler()
1730 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_param_handler()
1738 mutex_unlock(&vpfe_dev->lock); in vpfe_param_handler()
1770 struct vpfe_device *vpfe_dev; in vpfe_initialize() local
1790 vpfe_dev = kzalloc(sizeof(*vpfe_dev), GFP_KERNEL); in vpfe_initialize()
1792 return vpfe_dev; in vpfe_initialize()
1805 struct vpfe_device *vpfe_dev; in vpfe_probe() local
1812 vpfe_dev = vpfe_initialize(); in vpfe_probe()
1814 if (!vpfe_dev) { in vpfe_probe()
1820 vpfe_dev->pdev = &pdev->dev; in vpfe_probe()
1829 vpfe_dev->cfg = vpfe_cfg; in vpfe_probe()
1857 vpfe_dev->ccdc_irq0 = res1->start; in vpfe_probe()
1867 vpfe_dev->ccdc_irq1 = res1->start; in vpfe_probe()
1869 ret = request_irq(vpfe_dev->ccdc_irq0, vpfe_isr, 0, in vpfe_probe()
1870 "vpfe_capture0", vpfe_dev); in vpfe_probe()
1877 vfd = &vpfe_dev->video_dev; in vpfe_probe()
1883 vfd->v4l2_dev = &vpfe_dev->v4l2_dev; in vpfe_probe()
1891 ret = v4l2_device_register(&pdev->dev, &vpfe_dev->v4l2_dev); in vpfe_probe()
1897 v4l2_info(&vpfe_dev->v4l2_dev, "v4l2 device registered\n"); in vpfe_probe()
1898 spin_lock_init(&vpfe_dev->irqlock); in vpfe_probe()
1899 spin_lock_init(&vpfe_dev->dma_queue_lock); in vpfe_probe()
1900 mutex_init(&vpfe_dev->lock); in vpfe_probe()
1903 vpfe_dev->numbuffers = config_params.numbuffers; in vpfe_probe()
1906 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_probe()
1908 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_probe()
1909 "video_dev=%p\n", &vpfe_dev->video_dev); in vpfe_probe()
1910 vpfe_dev->fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; in vpfe_probe()
1911 ret = video_register_device(&vpfe_dev->video_dev, in vpfe_probe()
1920 v4l2_info(&vpfe_dev->v4l2_dev, "video device registered\n"); in vpfe_probe()
1922 platform_set_drvdata(pdev, vpfe_dev); in vpfe_probe()
1924 video_set_drvdata(&vpfe_dev->video_dev, vpfe_dev); in vpfe_probe()
1927 vpfe_dev->sd = kmalloc(sizeof(struct v4l2_subdev *) * num_subdevs, in vpfe_probe()
1929 if (NULL == vpfe_dev->sd) { in vpfe_probe()
1930 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_probe()
1942 vpfe_dev->sd[i] = in vpfe_probe()
1943 v4l2_i2c_new_subdev_board(&vpfe_dev->v4l2_dev, in vpfe_probe()
1947 if (vpfe_dev->sd[i]) { in vpfe_probe()
1948 v4l2_info(&vpfe_dev->v4l2_dev, in vpfe_probe()
1951 vpfe_dev->sd[i]->grp_id = sdinfo->grp_id; in vpfe_probe()
1958 v4l2_info(&vpfe_dev->v4l2_dev, in vpfe_probe()
1966 vpfe_dev->current_subdev = &vpfe_cfg->sub_devs[0]; in vpfe_probe()
1967 vpfe_dev->v4l2_dev.ctrl_handler = vpfe_dev->sd[0]->ctrl_handler; in vpfe_probe()
1974 kfree(vpfe_dev->sd); in vpfe_probe()
1976 video_unregister_device(&vpfe_dev->video_dev); in vpfe_probe()
1978 v4l2_device_unregister(&vpfe_dev->v4l2_dev); in vpfe_probe()
1980 free_irq(vpfe_dev->ccdc_irq0, vpfe_dev); in vpfe_probe()
1985 kfree(vpfe_dev); in vpfe_probe()
1994 struct vpfe_device *vpfe_dev = platform_get_drvdata(pdev); in vpfe_remove() local
1998 free_irq(vpfe_dev->ccdc_irq0, vpfe_dev); in vpfe_remove()
1999 kfree(vpfe_dev->sd); in vpfe_remove()
2000 v4l2_device_unregister(&vpfe_dev->v4l2_dev); in vpfe_remove()
2001 video_unregister_device(&vpfe_dev->video_dev); in vpfe_remove()
2002 kfree(vpfe_dev); in vpfe_remove()