Lines Matching refs:vpfe_dev

247 static int vpfe_config_ccdc_image_format(struct vpfe_device *vpfe_dev)  in vpfe_config_ccdc_image_format()  argument
253 vpfe_dev->fmt.fmt.pix.pixelformat) < 0) { in vpfe_config_ccdc_image_format()
254 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_config_ccdc_image_format()
259 ccdc_dev->hw_ops.set_image_window(&vpfe_dev->crop); in vpfe_config_ccdc_image_format()
261 switch (vpfe_dev->fmt.fmt.pix.field) { in vpfe_config_ccdc_image_format()
294 static int vpfe_config_image_format(struct vpfe_device *vpfe_dev, in vpfe_config_image_format() argument
297 struct vpfe_subdev_info *sdinfo = vpfe_dev->current_subdev; in vpfe_config_image_format()
302 struct v4l2_pix_format *pix = &vpfe_dev->fmt.fmt.pix; in vpfe_config_image_format()
307 vpfe_dev->std_info.active_pixels = in vpfe_config_image_format()
309 vpfe_dev->std_info.active_lines = in vpfe_config_image_format()
311 vpfe_dev->std_info.frame_format = in vpfe_config_image_format()
313 vpfe_dev->std_index = i; in vpfe_config_image_format()
319 v4l2_err(&vpfe_dev->v4l2_dev, "standard not supported\n"); in vpfe_config_image_format()
323 vpfe_dev->crop.top = 0; in vpfe_config_image_format()
324 vpfe_dev->crop.left = 0; in vpfe_config_image_format()
325 vpfe_dev->crop.width = vpfe_dev->std_info.active_pixels; in vpfe_config_image_format()
326 vpfe_dev->crop.height = vpfe_dev->std_info.active_lines; in vpfe_config_image_format()
327 pix->width = vpfe_dev->crop.width; in vpfe_config_image_format()
328 pix->height = vpfe_dev->crop.height; in vpfe_config_image_format()
331 if (vpfe_dev->std_info.frame_format) { in vpfe_config_image_format()
346 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, in vpfe_config_image_format()
350 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_config_image_format()
359 ret = vpfe_config_ccdc_image_format(vpfe_dev); in vpfe_config_image_format()
370 static int vpfe_initialize_device(struct vpfe_device *vpfe_dev) in vpfe_initialize_device() argument
375 vpfe_dev->current_input = 0; in vpfe_initialize_device()
378 vpfe_dev->std_index = 0; in vpfe_initialize_device()
381 ret = vpfe_config_image_format(vpfe_dev, in vpfe_initialize_device()
382 vpfe_standards[vpfe_dev->std_index].std_id); in vpfe_initialize_device()
389 v4l2_err(&vpfe_dev->v4l2_dev, "ccdc device not registered\n"); in vpfe_initialize_device()
395 v4l2_err(&vpfe_dev->v4l2_dev, "Couldn't lock ccdc module\n"); in vpfe_initialize_device()
399 ret = ccdc_dev->hw_ops.open(vpfe_dev->pdev); in vpfe_initialize_device()
401 vpfe_dev->initialized = 1; in vpfe_initialize_device()
404 if (vpfe_dev->cfg->clr_intr) in vpfe_initialize_device()
405 vpfe_dev->cfg->clr_intr(-1); in vpfe_initialize_device()
418 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_open() local
422 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_open\n"); in vpfe_open()
424 if (!vpfe_dev->cfg->num_subdevs) { in vpfe_open()
425 v4l2_err(&vpfe_dev->v4l2_dev, "No decoder registered\n"); in vpfe_open()
436 fh->vpfe_dev = vpfe_dev; in vpfe_open()
438 mutex_lock(&vpfe_dev->lock); in vpfe_open()
440 if (!vpfe_dev->initialized) { in vpfe_open()
441 if (vpfe_initialize_device(vpfe_dev)) { in vpfe_open()
442 mutex_unlock(&vpfe_dev->lock); in vpfe_open()
449 vpfe_dev->usrs++; in vpfe_open()
453 mutex_unlock(&vpfe_dev->lock); in vpfe_open()
457 static void vpfe_schedule_next_buffer(struct vpfe_device *vpfe_dev) in vpfe_schedule_next_buffer() argument
461 vpfe_dev->next_frm = list_entry(vpfe_dev->dma_queue.next, in vpfe_schedule_next_buffer()
463 list_del(&vpfe_dev->next_frm->queue); in vpfe_schedule_next_buffer()
464 vpfe_dev->next_frm->state = VIDEOBUF_ACTIVE; in vpfe_schedule_next_buffer()
465 addr = videobuf_to_dma_contig(vpfe_dev->next_frm); in vpfe_schedule_next_buffer()
470 static void vpfe_schedule_bottom_field(struct vpfe_device *vpfe_dev) in vpfe_schedule_bottom_field() argument
474 addr = videobuf_to_dma_contig(vpfe_dev->cur_frm); in vpfe_schedule_bottom_field()
475 addr += vpfe_dev->field_off; in vpfe_schedule_bottom_field()
479 static void vpfe_process_buffer_complete(struct vpfe_device *vpfe_dev) in vpfe_process_buffer_complete() argument
481 vpfe_dev->cur_frm->ts = ktime_get_ns(); in vpfe_process_buffer_complete()
482 vpfe_dev->cur_frm->state = VIDEOBUF_DONE; in vpfe_process_buffer_complete()
483 vpfe_dev->cur_frm->size = vpfe_dev->fmt.fmt.pix.sizeimage; in vpfe_process_buffer_complete()
484 wake_up_interruptible(&vpfe_dev->cur_frm->done); in vpfe_process_buffer_complete()
485 vpfe_dev->cur_frm = vpfe_dev->next_frm; in vpfe_process_buffer_complete()
491 struct vpfe_device *vpfe_dev = dev_id; in vpfe_isr() local
495 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "\nStarting vpfe_isr...\n"); in vpfe_isr()
496 field = vpfe_dev->fmt.fmt.pix.field; in vpfe_isr()
499 if (!vpfe_dev->started) in vpfe_isr()
508 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_isr()
510 if (vpfe_dev->cur_frm != vpfe_dev->next_frm) in vpfe_isr()
511 vpfe_process_buffer_complete(vpfe_dev); in vpfe_isr()
519 vpfe_dev->field_id ^= 1; in vpfe_isr()
520 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "field id = %x:%x.\n", in vpfe_isr()
521 fid, vpfe_dev->field_id); in vpfe_isr()
522 if (fid == vpfe_dev->field_id) { in vpfe_isr()
529 if (vpfe_dev->cur_frm != vpfe_dev->next_frm) in vpfe_isr()
530 vpfe_process_buffer_complete(vpfe_dev); in vpfe_isr()
537 vpfe_schedule_bottom_field(vpfe_dev); in vpfe_isr()
546 spin_lock(&vpfe_dev->dma_queue_lock); in vpfe_isr()
547 if (!list_empty(&vpfe_dev->dma_queue) && in vpfe_isr()
548 vpfe_dev->cur_frm == vpfe_dev->next_frm) in vpfe_isr()
549 vpfe_schedule_next_buffer(vpfe_dev); in vpfe_isr()
550 spin_unlock(&vpfe_dev->dma_queue_lock); in vpfe_isr()
556 vpfe_dev->field_id = fid; in vpfe_isr()
559 if (vpfe_dev->cfg->clr_intr) in vpfe_isr()
560 vpfe_dev->cfg->clr_intr(irq); in vpfe_isr()
568 struct vpfe_device *vpfe_dev = dev_id; in vdint1_isr() local
570 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "\nInside vdint1_isr...\n"); in vdint1_isr()
573 if (!vpfe_dev->started) { in vdint1_isr()
574 if (vpfe_dev->cfg->clr_intr) in vdint1_isr()
575 vpfe_dev->cfg->clr_intr(irq); in vdint1_isr()
579 spin_lock(&vpfe_dev->dma_queue_lock); in vdint1_isr()
580 if ((vpfe_dev->fmt.fmt.pix.field == V4L2_FIELD_NONE) && in vdint1_isr()
581 !list_empty(&vpfe_dev->dma_queue) && in vdint1_isr()
582 vpfe_dev->cur_frm == vpfe_dev->next_frm) in vdint1_isr()
583 vpfe_schedule_next_buffer(vpfe_dev); in vdint1_isr()
584 spin_unlock(&vpfe_dev->dma_queue_lock); in vdint1_isr()
586 if (vpfe_dev->cfg->clr_intr) in vdint1_isr()
587 vpfe_dev->cfg->clr_intr(irq); in vdint1_isr()
592 static void vpfe_detach_irq(struct vpfe_device *vpfe_dev) in vpfe_detach_irq() argument
598 free_irq(vpfe_dev->ccdc_irq1, vpfe_dev); in vpfe_detach_irq()
601 static int vpfe_attach_irq(struct vpfe_device *vpfe_dev) in vpfe_attach_irq() argument
607 return request_irq(vpfe_dev->ccdc_irq1, vdint1_isr, in vpfe_attach_irq()
609 vpfe_dev); in vpfe_attach_irq()
615 static void vpfe_stop_ccdc_capture(struct vpfe_device *vpfe_dev) in vpfe_stop_ccdc_capture() argument
617 vpfe_dev->started = 0; in vpfe_stop_ccdc_capture()
629 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_release() local
634 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_release\n"); in vpfe_release()
637 mutex_lock(&vpfe_dev->lock); in vpfe_release()
640 if (vpfe_dev->started) { in vpfe_release()
641 sdinfo = vpfe_dev->current_subdev; in vpfe_release()
642 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, in vpfe_release()
646 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_release()
648 vpfe_stop_ccdc_capture(vpfe_dev); in vpfe_release()
649 vpfe_detach_irq(vpfe_dev); in vpfe_release()
650 videobuf_streamoff(&vpfe_dev->buffer_queue); in vpfe_release()
652 vpfe_dev->io_usrs = 0; in vpfe_release()
653 vpfe_dev->numbuffers = config_params.numbuffers; in vpfe_release()
654 videobuf_stop(&vpfe_dev->buffer_queue); in vpfe_release()
655 videobuf_mmap_free(&vpfe_dev->buffer_queue); in vpfe_release()
659 vpfe_dev->usrs--; in vpfe_release()
663 if (!vpfe_dev->usrs) { in vpfe_release()
664 vpfe_dev->initialized = 0; in vpfe_release()
666 ccdc_dev->hw_ops.close(vpfe_dev->pdev); in vpfe_release()
669 mutex_unlock(&vpfe_dev->lock); in vpfe_release()
683 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_mmap() local
685 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_mmap\n"); in vpfe_mmap()
687 return videobuf_mmap_mapper(&vpfe_dev->buffer_queue, vma); in vpfe_mmap()
695 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_poll() local
697 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_poll\n"); in vpfe_poll()
699 if (vpfe_dev->started) in vpfe_poll()
701 &vpfe_dev->buffer_queue, wait); in vpfe_poll()
733 vpfe_check_format(struct vpfe_device *vpfe_dev, in vpfe_check_format() argument
747 pixfmt->pixelformat = vpfe_dev->fmt.fmt.pix.pixelformat; in vpfe_check_format()
764 pixfmt->pixelformat = vpfe_dev->fmt.fmt.pix.pixelformat; in vpfe_check_format()
775 pixfmt->field = vpfe_dev->fmt.fmt.pix.field; in vpfe_check_format()
782 if (vpfe_dev->fmt.fmt.pix.field != pixfmt->field) { in vpfe_check_format()
791 if (!vpfe_dev->std_info.frame_format) in vpfe_check_format()
795 if (vpfe_dev->std_info.frame_format) in vpfe_check_format()
801 pixfmt->field = vpfe_dev->fmt.fmt.pix.field; in vpfe_check_format()
811 max_width = vpfe_dev->std_info.active_pixels; in vpfe_check_format()
812 max_height = vpfe_dev->std_info.active_lines; in vpfe_check_format()
815 v4l2_info(&vpfe_dev->v4l2_dev, "width = %d, height = %d, bpp = %d\n", in vpfe_check_format()
837 …v4l2_info(&vpfe_dev->v4l2_dev, "adjusted width = %d, height = %d, bpp = %d, bytesperline = %d, siz… in vpfe_check_format()
846 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_querycap() local
848 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_querycap\n"); in vpfe_querycap()
852 strscpy(cap->card, vpfe_dev->cfg->card_name, sizeof(cap->card)); in vpfe_querycap()
859 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_g_fmt_vid_cap() local
861 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_g_fmt_vid_cap\n"); in vpfe_g_fmt_vid_cap()
863 *fmt = vpfe_dev->fmt; in vpfe_g_fmt_vid_cap()
870 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_enum_fmt_vid_cap() local
874 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_enum_fmt_vid_cap\n"); in vpfe_enum_fmt_vid_cap()
891 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_s_fmt_vid_cap() local
895 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_fmt_vid_cap\n"); in vpfe_s_fmt_vid_cap()
898 if (vpfe_dev->started) { in vpfe_s_fmt_vid_cap()
899 v4l2_err(&vpfe_dev->v4l2_dev, "Streaming is started\n"); in vpfe_s_fmt_vid_cap()
904 pix_fmts = vpfe_check_format(vpfe_dev, &fmt->fmt.pix); in vpfe_s_fmt_vid_cap()
909 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_s_fmt_vid_cap()
914 vpfe_detach_irq(vpfe_dev); in vpfe_s_fmt_vid_cap()
915 vpfe_dev->fmt = *fmt; in vpfe_s_fmt_vid_cap()
917 ret = vpfe_config_ccdc_image_format(vpfe_dev); in vpfe_s_fmt_vid_cap()
918 mutex_unlock(&vpfe_dev->lock); in vpfe_s_fmt_vid_cap()
925 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_try_fmt_vid_cap() local
928 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_try_fmt_vid_cap\n"); in vpfe_try_fmt_vid_cap()
930 pix_fmts = vpfe_check_format(vpfe_dev, &f->fmt.pix); in vpfe_try_fmt_vid_cap()
940 static int vpfe_get_subdev_input_index(struct vpfe_device *vpfe_dev, in vpfe_get_subdev_input_index() argument
945 struct vpfe_config *cfg = vpfe_dev->cfg; in vpfe_get_subdev_input_index()
966 static int vpfe_get_app_input_index(struct vpfe_device *vpfe_dev, in vpfe_get_app_input_index() argument
969 struct vpfe_config *cfg = vpfe_dev->cfg; in vpfe_get_app_input_index()
975 if (!strcmp(sdinfo->name, vpfe_dev->current_subdev->name)) { in vpfe_get_app_input_index()
976 if (vpfe_dev->current_input >= sdinfo->num_inputs) in vpfe_get_app_input_index()
978 *app_input_index = j + vpfe_dev->current_input; in vpfe_get_app_input_index()
989 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_enum_input() local
993 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_enum_input\n"); in vpfe_enum_input()
995 if (vpfe_get_subdev_input_index(vpfe_dev, in vpfe_enum_input()
999 v4l2_err(&vpfe_dev->v4l2_dev, "input information not found for the subdev\n"); in vpfe_enum_input()
1002 sdinfo = &vpfe_dev->cfg->sub_devs[subdev]; in vpfe_enum_input()
1009 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_g_input() local
1011 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_g_input\n"); in vpfe_g_input()
1013 return vpfe_get_app_input_index(vpfe_dev, index); in vpfe_g_input()
1019 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_s_input() local
1027 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_input\n"); in vpfe_s_input()
1029 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_s_input()
1037 if (vpfe_dev->started) { in vpfe_s_input()
1038 v4l2_err(&vpfe_dev->v4l2_dev, "Streaming is on\n"); in vpfe_s_input()
1042 ret = vpfe_get_subdev_input_index(vpfe_dev, in vpfe_s_input()
1047 v4l2_err(&vpfe_dev->v4l2_dev, "invalid input index\n"); in vpfe_s_input()
1051 sdinfo = &vpfe_dev->cfg->sub_devs[subdev_index]; in vpfe_s_input()
1052 sd = vpfe_dev->sd[subdev_index]; in vpfe_s_input()
1066 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_s_input()
1071 vpfe_dev->current_subdev = sdinfo; in vpfe_s_input()
1073 vpfe_dev->v4l2_dev.ctrl_handler = sd->ctrl_handler; in vpfe_s_input()
1074 vpfe_dev->current_input = index; in vpfe_s_input()
1075 vpfe_dev->std_index = 0; in vpfe_s_input()
1083 ret = vpfe_config_image_format(vpfe_dev, in vpfe_s_input()
1084 vpfe_standards[vpfe_dev->std_index].std_id); in vpfe_s_input()
1086 mutex_unlock(&vpfe_dev->lock); in vpfe_s_input()
1092 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_querystd() local
1096 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_querystd\n"); in vpfe_querystd()
1098 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_querystd()
1099 sdinfo = vpfe_dev->current_subdev; in vpfe_querystd()
1103 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id, in vpfe_querystd()
1105 mutex_unlock(&vpfe_dev->lock); in vpfe_querystd()
1111 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_s_std() local
1115 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_std\n"); in vpfe_s_std()
1118 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_s_std()
1122 sdinfo = vpfe_dev->current_subdev; in vpfe_s_std()
1124 if (vpfe_dev->started) { in vpfe_s_std()
1125 v4l2_err(&vpfe_dev->v4l2_dev, "streaming is started\n"); in vpfe_s_std()
1130 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id, in vpfe_s_std()
1133 v4l2_err(&vpfe_dev->v4l2_dev, "Failed to set standard\n"); in vpfe_s_std()
1136 ret = vpfe_config_image_format(vpfe_dev, std_id); in vpfe_s_std()
1139 mutex_unlock(&vpfe_dev->lock); in vpfe_s_std()
1145 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_g_std() local
1147 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_g_std\n"); in vpfe_g_std()
1149 *std_id = vpfe_standards[vpfe_dev->std_index].std_id; in vpfe_g_std()
1160 struct vpfe_device *vpfe_dev = fh->vpfe_dev; in vpfe_videobuf_setup() local
1162 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_buffer_setup\n"); in vpfe_videobuf_setup()
1163 *size = vpfe_dev->fmt.fmt.pix.sizeimage; in vpfe_videobuf_setup()
1164 if (vpfe_dev->memory == V4L2_MEMORY_MMAP && in vpfe_videobuf_setup()
1165 vpfe_dev->fmt.fmt.pix.sizeimage > config_params.device_bufsize) in vpfe_videobuf_setup()
1170 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_videobuf_setup()
1180 struct vpfe_device *vpfe_dev = fh->vpfe_dev; in vpfe_videobuf_prepare() local
1184 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_buffer_prepare\n"); in vpfe_videobuf_prepare()
1188 vb->width = vpfe_dev->fmt.fmt.pix.width; in vpfe_videobuf_prepare()
1189 vb->height = vpfe_dev->fmt.fmt.pix.height; in vpfe_videobuf_prepare()
1190 vb->size = vpfe_dev->fmt.fmt.pix.sizeimage; in vpfe_videobuf_prepare()
1212 struct vpfe_device *vpfe_dev = fh->vpfe_dev; in vpfe_videobuf_queue() local
1215 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_buffer_queue\n"); in vpfe_videobuf_queue()
1218 spin_lock_irqsave(&vpfe_dev->dma_queue_lock, flags); in vpfe_videobuf_queue()
1219 list_add_tail(&vb->queue, &vpfe_dev->dma_queue); in vpfe_videobuf_queue()
1220 spin_unlock_irqrestore(&vpfe_dev->dma_queue_lock, flags); in vpfe_videobuf_queue()
1230 struct vpfe_device *vpfe_dev = fh->vpfe_dev; in vpfe_videobuf_release() local
1233 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_videobuf_release\n"); in vpfe_videobuf_release()
1239 spin_lock_irqsave(&vpfe_dev->dma_queue_lock, flags); in vpfe_videobuf_release()
1240 INIT_LIST_HEAD(&vpfe_dev->dma_queue); in vpfe_videobuf_release()
1241 spin_unlock_irqrestore(&vpfe_dev->dma_queue_lock, flags); in vpfe_videobuf_release()
1260 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_reqbufs() local
1264 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_reqbufs\n"); in vpfe_reqbufs()
1267 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buffer type\n"); in vpfe_reqbufs()
1271 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_reqbufs()
1275 if (vpfe_dev->io_usrs != 0) { in vpfe_reqbufs()
1276 v4l2_err(&vpfe_dev->v4l2_dev, "Only one IO user allowed\n"); in vpfe_reqbufs()
1281 vpfe_dev->memory = req_buf->memory; in vpfe_reqbufs()
1282 videobuf_queue_dma_contig_init(&vpfe_dev->buffer_queue, in vpfe_reqbufs()
1284 vpfe_dev->pdev, in vpfe_reqbufs()
1285 &vpfe_dev->irqlock, in vpfe_reqbufs()
1287 vpfe_dev->fmt.fmt.pix.field, in vpfe_reqbufs()
1292 vpfe_dev->io_usrs = 1; in vpfe_reqbufs()
1293 INIT_LIST_HEAD(&vpfe_dev->dma_queue); in vpfe_reqbufs()
1294 ret = videobuf_reqbufs(&vpfe_dev->buffer_queue, req_buf); in vpfe_reqbufs()
1296 mutex_unlock(&vpfe_dev->lock); in vpfe_reqbufs()
1303 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_querybuf() local
1305 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_querybuf\n"); in vpfe_querybuf()
1308 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf type\n"); in vpfe_querybuf()
1312 if (vpfe_dev->memory != V4L2_MEMORY_MMAP) { in vpfe_querybuf()
1313 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid memory\n"); in vpfe_querybuf()
1317 return videobuf_querybuf(&vpfe_dev->buffer_queue, buf); in vpfe_querybuf()
1323 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_qbuf() local
1326 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_qbuf\n"); in vpfe_qbuf()
1329 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf type\n"); in vpfe_qbuf()
1338 v4l2_err(&vpfe_dev->v4l2_dev, "fh->io_allowed\n"); in vpfe_qbuf()
1341 return videobuf_qbuf(&vpfe_dev->buffer_queue, p); in vpfe_qbuf()
1347 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_dqbuf() local
1349 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_dqbuf\n"); in vpfe_dqbuf()
1352 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf type\n"); in vpfe_dqbuf()
1355 return videobuf_dqbuf(&vpfe_dev->buffer_queue, in vpfe_dqbuf()
1363 static void vpfe_calculate_offsets(struct vpfe_device *vpfe_dev) in vpfe_calculate_offsets() argument
1367 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_calculate_offsets\n"); in vpfe_calculate_offsets()
1370 vpfe_dev->field_off = image_win.height * image_win.width; in vpfe_calculate_offsets()
1374 static void vpfe_start_ccdc_capture(struct vpfe_device *vpfe_dev) in vpfe_start_ccdc_capture() argument
1379 vpfe_dev->started = 1; in vpfe_start_ccdc_capture()
1390 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_streamon() local
1396 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_streamon\n"); in vpfe_streamon()
1399 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf type\n"); in vpfe_streamon()
1405 v4l2_err(&vpfe_dev->v4l2_dev, "fh->io_allowed\n"); in vpfe_streamon()
1409 sdinfo = vpfe_dev->current_subdev; in vpfe_streamon()
1410 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id, in vpfe_streamon()
1414 v4l2_err(&vpfe_dev->v4l2_dev, "stream on failed in subdev\n"); in vpfe_streamon()
1419 if (list_empty(&vpfe_dev->buffer_queue.stream)) { in vpfe_streamon()
1420 v4l2_err(&vpfe_dev->v4l2_dev, "buffer queue is empty\n"); in vpfe_streamon()
1425 ret = videobuf_streamon(&vpfe_dev->buffer_queue); in vpfe_streamon()
1430 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_streamon()
1434 vpfe_dev->next_frm = list_entry(vpfe_dev->dma_queue.next, in vpfe_streamon()
1436 vpfe_dev->cur_frm = vpfe_dev->next_frm; in vpfe_streamon()
1438 list_del(&vpfe_dev->cur_frm->queue); in vpfe_streamon()
1440 vpfe_dev->cur_frm->state = VIDEOBUF_ACTIVE; in vpfe_streamon()
1442 vpfe_dev->field_id = 0; in vpfe_streamon()
1443 addr = videobuf_to_dma_contig(vpfe_dev->cur_frm); in vpfe_streamon()
1446 vpfe_calculate_offsets(vpfe_dev); in vpfe_streamon()
1448 if (vpfe_attach_irq(vpfe_dev) < 0) { in vpfe_streamon()
1449 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_streamon()
1455 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_streamon()
1461 vpfe_start_ccdc_capture(vpfe_dev); in vpfe_streamon()
1462 mutex_unlock(&vpfe_dev->lock); in vpfe_streamon()
1465 mutex_unlock(&vpfe_dev->lock); in vpfe_streamon()
1467 videobuf_streamoff(&vpfe_dev->buffer_queue); in vpfe_streamon()
1474 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_streamoff() local
1479 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_streamoff\n"); in vpfe_streamoff()
1482 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf type\n"); in vpfe_streamoff()
1488 v4l2_err(&vpfe_dev->v4l2_dev, "fh->io_allowed\n"); in vpfe_streamoff()
1493 if (!vpfe_dev->started) { in vpfe_streamoff()
1494 v4l2_err(&vpfe_dev->v4l2_dev, "device started\n"); in vpfe_streamoff()
1498 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_streamoff()
1502 vpfe_stop_ccdc_capture(vpfe_dev); in vpfe_streamoff()
1503 vpfe_detach_irq(vpfe_dev); in vpfe_streamoff()
1505 sdinfo = vpfe_dev->current_subdev; in vpfe_streamoff()
1506 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id, in vpfe_streamoff()
1510 v4l2_err(&vpfe_dev->v4l2_dev, "stream off failed in subdev\n"); in vpfe_streamoff()
1511 ret = videobuf_streamoff(&vpfe_dev->buffer_queue); in vpfe_streamoff()
1512 mutex_unlock(&vpfe_dev->lock); in vpfe_streamoff()
1519 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_g_pixelaspect() local
1521 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_g_pixelaspect\n"); in vpfe_g_pixelaspect()
1526 if (vpfe_dev->std_index >= ARRAY_SIZE(vpfe_standards)) in vpfe_g_pixelaspect()
1529 *f = vpfe_standards[vpfe_dev->std_index].pixelaspect; in vpfe_g_pixelaspect()
1536 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_g_selection() local
1538 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_g_selection\n"); in vpfe_g_selection()
1545 sel->r = vpfe_dev->crop; in vpfe_g_selection()
1549 sel->r.width = vpfe_standards[vpfe_dev->std_index].width; in vpfe_g_selection()
1550 sel->r.height = vpfe_standards[vpfe_dev->std_index].height; in vpfe_g_selection()
1561 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_s_selection() local
1565 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_selection\n"); in vpfe_s_selection()
1571 if (vpfe_dev->started) { in vpfe_s_selection()
1573 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_s_selection()
1578 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_s_selection()
1583 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_s_selection()
1594 vpfe_dev->std_info.active_pixels) || in vpfe_s_selection()
1596 vpfe_dev->std_info.active_lines)) { in vpfe_s_selection()
1597 v4l2_err(&vpfe_dev->v4l2_dev, "Error in S_SELECTION params\n"); in vpfe_s_selection()
1602 vpfe_dev->fmt.fmt.pix.width = rect.width; in vpfe_s_selection()
1603 vpfe_dev->fmt.fmt.pix.height = rect.height; in vpfe_s_selection()
1604 vpfe_dev->fmt.fmt.pix.bytesperline = in vpfe_s_selection()
1606 vpfe_dev->fmt.fmt.pix.sizeimage = in vpfe_s_selection()
1607 vpfe_dev->fmt.fmt.pix.bytesperline * in vpfe_s_selection()
1608 vpfe_dev->fmt.fmt.pix.height; in vpfe_s_selection()
1609 vpfe_dev->crop = rect; in vpfe_s_selection()
1612 mutex_unlock(&vpfe_dev->lock); in vpfe_s_selection()
1642 struct vpfe_device *vpfe_dev; in vpfe_initialize() local
1662 vpfe_dev = kzalloc(sizeof(*vpfe_dev), GFP_KERNEL); in vpfe_initialize()
1664 return vpfe_dev; in vpfe_initialize()
1677 struct vpfe_device *vpfe_dev; in vpfe_probe() local
1684 vpfe_dev = vpfe_initialize(); in vpfe_probe()
1686 if (!vpfe_dev) { in vpfe_probe()
1692 vpfe_dev->pdev = &pdev->dev; in vpfe_probe()
1701 vpfe_dev->cfg = vpfe_cfg; in vpfe_probe()
1726 vpfe_dev->ccdc_irq0 = res1->start; in vpfe_probe()
1736 vpfe_dev->ccdc_irq1 = res1->start; in vpfe_probe()
1738 ret = request_irq(vpfe_dev->ccdc_irq0, vpfe_isr, 0, in vpfe_probe()
1739 "vpfe_capture0", vpfe_dev); in vpfe_probe()
1746 vfd = &vpfe_dev->video_dev; in vpfe_probe()
1752 vfd->v4l2_dev = &vpfe_dev->v4l2_dev; in vpfe_probe()
1761 ret = v4l2_device_register(&pdev->dev, &vpfe_dev->v4l2_dev); in vpfe_probe()
1767 v4l2_info(&vpfe_dev->v4l2_dev, "v4l2 device registered\n"); in vpfe_probe()
1768 spin_lock_init(&vpfe_dev->irqlock); in vpfe_probe()
1769 spin_lock_init(&vpfe_dev->dma_queue_lock); in vpfe_probe()
1770 mutex_init(&vpfe_dev->lock); in vpfe_probe()
1773 vpfe_dev->numbuffers = config_params.numbuffers; in vpfe_probe()
1776 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_probe()
1778 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_probe()
1779 "video_dev=%p\n", &vpfe_dev->video_dev); in vpfe_probe()
1780 vpfe_dev->fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; in vpfe_probe()
1781 ret = video_register_device(&vpfe_dev->video_dev, in vpfe_probe()
1790 v4l2_info(&vpfe_dev->v4l2_dev, "video device registered\n"); in vpfe_probe()
1792 platform_set_drvdata(pdev, vpfe_dev); in vpfe_probe()
1794 video_set_drvdata(&vpfe_dev->video_dev, vpfe_dev); in vpfe_probe()
1797 vpfe_dev->sd = kmalloc_array(num_subdevs, in vpfe_probe()
1798 sizeof(*vpfe_dev->sd), in vpfe_probe()
1800 if (!vpfe_dev->sd) { in vpfe_probe()
1811 vpfe_dev->sd[i] = in vpfe_probe()
1812 v4l2_i2c_new_subdev_board(&vpfe_dev->v4l2_dev, in vpfe_probe()
1816 if (vpfe_dev->sd[i]) { in vpfe_probe()
1817 v4l2_info(&vpfe_dev->v4l2_dev, in vpfe_probe()
1820 vpfe_dev->sd[i]->grp_id = sdinfo->grp_id; in vpfe_probe()
1827 v4l2_info(&vpfe_dev->v4l2_dev, in vpfe_probe()
1836 vpfe_dev->current_subdev = &vpfe_cfg->sub_devs[0]; in vpfe_probe()
1837 vpfe_dev->v4l2_dev.ctrl_handler = vpfe_dev->sd[0]->ctrl_handler; in vpfe_probe()
1844 kfree(vpfe_dev->sd); in vpfe_probe()
1846 video_unregister_device(&vpfe_dev->video_dev); in vpfe_probe()
1848 v4l2_device_unregister(&vpfe_dev->v4l2_dev); in vpfe_probe()
1850 free_irq(vpfe_dev->ccdc_irq0, vpfe_dev); in vpfe_probe()
1855 kfree(vpfe_dev); in vpfe_probe()
1864 struct vpfe_device *vpfe_dev = platform_get_drvdata(pdev); in vpfe_remove() local
1868 free_irq(vpfe_dev->ccdc_irq0, vpfe_dev); in vpfe_remove()
1869 kfree(vpfe_dev->sd); in vpfe_remove()
1870 v4l2_device_unregister(&vpfe_dev->v4l2_dev); in vpfe_remove()
1871 video_unregister_device(&vpfe_dev->video_dev); in vpfe_remove()
1872 kfree(vpfe_dev); in vpfe_remove()