Lines Matching refs:bcap_dev

157 static int bcap_init_sensor_formats(struct bcap_device *bcap_dev)  in bcap_init_sensor_formats()  argument
166 while (!v4l2_subdev_call(bcap_dev->sd, pad, in bcap_init_sensor_formats()
180 v4l2_subdev_call(bcap_dev->sd, pad, in bcap_init_sensor_formats()
192 bcap_dev->sensor_formats = sf; in bcap_init_sensor_formats()
193 bcap_dev->num_sensor_formats = num_formats; in bcap_init_sensor_formats()
197 static void bcap_free_sensor_formats(struct bcap_device *bcap_dev) in bcap_free_sensor_formats() argument
199 bcap_dev->num_sensor_formats = 0; in bcap_free_sensor_formats()
200 kfree(bcap_dev->sensor_formats); in bcap_free_sensor_formats()
201 bcap_dev->sensor_formats = NULL; in bcap_free_sensor_formats()
210 struct bcap_device *bcap_dev = vb2_get_drv_priv(vq); in bcap_queue_setup() local
212 if (fmt && fmt->fmt.pix.sizeimage < bcap_dev->fmt.sizeimage) in bcap_queue_setup()
219 sizes[0] = fmt ? fmt->fmt.pix.sizeimage : bcap_dev->fmt.sizeimage; in bcap_queue_setup()
220 alloc_ctxs[0] = bcap_dev->alloc_ctx; in bcap_queue_setup()
228 struct bcap_device *bcap_dev = vb2_get_drv_priv(vb->vb2_queue); in bcap_buffer_prepare() local
229 unsigned long size = bcap_dev->fmt.sizeimage; in bcap_buffer_prepare()
232 v4l2_err(&bcap_dev->v4l2_dev, "buffer too small (%lu < %lu)\n", in bcap_buffer_prepare()
238 vbuf->field = bcap_dev->fmt.field; in bcap_buffer_prepare()
246 struct bcap_device *bcap_dev = vb2_get_drv_priv(vb->vb2_queue); in bcap_buffer_queue() local
250 spin_lock_irqsave(&bcap_dev->lock, flags); in bcap_buffer_queue()
251 list_add_tail(&buf->list, &bcap_dev->dma_queue); in bcap_buffer_queue()
252 spin_unlock_irqrestore(&bcap_dev->lock, flags); in bcap_buffer_queue()
258 struct bcap_device *bcap_dev = vb2_get_drv_priv(vb->vb2_queue); in bcap_buffer_cleanup() local
262 spin_lock_irqsave(&bcap_dev->lock, flags); in bcap_buffer_cleanup()
264 spin_unlock_irqrestore(&bcap_dev->lock, flags); in bcap_buffer_cleanup()
269 struct bcap_device *bcap_dev = vb2_get_drv_priv(vq); in bcap_start_streaming() local
270 struct ppi_if *ppi = bcap_dev->ppi; in bcap_start_streaming()
277 ret = v4l2_subdev_call(bcap_dev->sd, video, s_stream, 1); in bcap_start_streaming()
279 v4l2_err(&bcap_dev->v4l2_dev, "stream on failed in subdev\n"); in bcap_start_streaming()
284 params.width = bcap_dev->fmt.width; in bcap_start_streaming()
285 params.height = bcap_dev->fmt.height; in bcap_start_streaming()
286 params.bpp = bcap_dev->bpp; in bcap_start_streaming()
287 params.dlen = bcap_dev->dlen; in bcap_start_streaming()
288 params.ppi_control = bcap_dev->cfg->ppi_control; in bcap_start_streaming()
289 params.int_mask = bcap_dev->cfg->int_mask; in bcap_start_streaming()
290 if (bcap_dev->cfg->inputs[bcap_dev->cur_input].capabilities in bcap_start_streaming()
292 struct v4l2_bt_timings *bt = &bcap_dev->dv_timings.bt; in bcap_start_streaming()
298 } else if (bcap_dev->cfg->inputs[bcap_dev->cur_input].capabilities in bcap_start_streaming()
302 if (bcap_dev->std & V4L2_STD_525_60) { in bcap_start_streaming()
312 params.line = params.width + bcap_dev->cfg->blank_pixels; in bcap_start_streaming()
317 v4l2_err(&bcap_dev->v4l2_dev, in bcap_start_streaming()
325 v4l2_err(&bcap_dev->v4l2_dev, in bcap_start_streaming()
330 bcap_dev->sequence = 0; in bcap_start_streaming()
332 reinit_completion(&bcap_dev->comp); in bcap_start_streaming()
333 bcap_dev->stop = false; in bcap_start_streaming()
336 bcap_dev->cur_frm = list_entry(bcap_dev->dma_queue.next, in bcap_start_streaming()
339 list_del_init(&bcap_dev->cur_frm->list); in bcap_start_streaming()
340 addr = vb2_dma_contig_plane_dma_addr(&bcap_dev->cur_frm->vb.vb2_buf, in bcap_start_streaming()
350 list_for_each_entry_safe(buf, tmp, &bcap_dev->dma_queue, list) { in bcap_start_streaming()
360 struct bcap_device *bcap_dev = vb2_get_drv_priv(vq); in bcap_stop_streaming() local
361 struct ppi_if *ppi = bcap_dev->ppi; in bcap_stop_streaming()
364 bcap_dev->stop = true; in bcap_stop_streaming()
365 wait_for_completion(&bcap_dev->comp); in bcap_stop_streaming()
368 ret = v4l2_subdev_call(bcap_dev->sd, video, s_stream, 0); in bcap_stop_streaming()
370 v4l2_err(&bcap_dev->v4l2_dev, in bcap_stop_streaming()
374 if (bcap_dev->cur_frm) in bcap_stop_streaming()
375 vb2_buffer_done(&bcap_dev->cur_frm->vb.vb2_buf, in bcap_stop_streaming()
378 while (!list_empty(&bcap_dev->dma_queue)) { in bcap_stop_streaming()
379 bcap_dev->cur_frm = list_entry(bcap_dev->dma_queue.next, in bcap_stop_streaming()
381 list_del_init(&bcap_dev->cur_frm->list); in bcap_stop_streaming()
382 vb2_buffer_done(&bcap_dev->cur_frm->vb.vb2_buf, in bcap_stop_streaming()
401 struct bcap_device *bcap_dev = ppi->priv; in bcap_isr() local
402 struct vb2_v4l2_buffer *vbuf = &bcap_dev->cur_frm->vb; in bcap_isr()
406 spin_lock(&bcap_dev->lock); in bcap_isr()
408 if (!list_empty(&bcap_dev->dma_queue)) { in bcap_isr()
414 vbuf->sequence = bcap_dev->sequence++; in bcap_isr()
417 bcap_dev->cur_frm = list_entry(bcap_dev->dma_queue.next, in bcap_isr()
419 list_del_init(&bcap_dev->cur_frm->list); in bcap_isr()
428 if (bcap_dev->stop) { in bcap_isr()
429 complete(&bcap_dev->comp); in bcap_isr()
432 &bcap_dev->cur_frm->vb.vb2_buf, 0); in bcap_isr()
437 spin_unlock(&bcap_dev->lock); in bcap_isr()
444 struct bcap_device *bcap_dev = video_drvdata(file); in bcap_querystd() local
447 input = bcap_dev->cfg->inputs[bcap_dev->cur_input]; in bcap_querystd()
451 return v4l2_subdev_call(bcap_dev->sd, video, querystd, std); in bcap_querystd()
456 struct bcap_device *bcap_dev = video_drvdata(file); in bcap_g_std() local
459 input = bcap_dev->cfg->inputs[bcap_dev->cur_input]; in bcap_g_std()
463 *std = bcap_dev->std; in bcap_g_std()
469 struct bcap_device *bcap_dev = video_drvdata(file); in bcap_s_std() local
473 input = bcap_dev->cfg->inputs[bcap_dev->cur_input]; in bcap_s_std()
477 if (vb2_is_busy(&bcap_dev->buffer_queue)) in bcap_s_std()
480 ret = v4l2_subdev_call(bcap_dev->sd, video, s_std, std); in bcap_s_std()
484 bcap_dev->std = std; in bcap_s_std()
491 struct bcap_device *bcap_dev = video_drvdata(file); in bcap_enum_dv_timings() local
494 input = bcap_dev->cfg->inputs[bcap_dev->cur_input]; in bcap_enum_dv_timings()
500 return v4l2_subdev_call(bcap_dev->sd, pad, in bcap_enum_dv_timings()
507 struct bcap_device *bcap_dev = video_drvdata(file); in bcap_query_dv_timings() local
510 input = bcap_dev->cfg->inputs[bcap_dev->cur_input]; in bcap_query_dv_timings()
514 return v4l2_subdev_call(bcap_dev->sd, video, in bcap_query_dv_timings()
521 struct bcap_device *bcap_dev = video_drvdata(file); in bcap_g_dv_timings() local
524 input = bcap_dev->cfg->inputs[bcap_dev->cur_input]; in bcap_g_dv_timings()
528 *timings = bcap_dev->dv_timings; in bcap_g_dv_timings()
535 struct bcap_device *bcap_dev = video_drvdata(file); in bcap_s_dv_timings() local
539 input = bcap_dev->cfg->inputs[bcap_dev->cur_input]; in bcap_s_dv_timings()
543 if (vb2_is_busy(&bcap_dev->buffer_queue)) in bcap_s_dv_timings()
546 ret = v4l2_subdev_call(bcap_dev->sd, video, s_dv_timings, timings); in bcap_s_dv_timings()
550 bcap_dev->dv_timings = *timings; in bcap_s_dv_timings()
557 struct bcap_device *bcap_dev = video_drvdata(file); in bcap_enum_input() local
558 struct bfin_capture_config *config = bcap_dev->cfg; in bcap_enum_input()
567 ret = v4l2_subdev_call(bcap_dev->sd, video, g_input_status, &status); in bcap_enum_input()
575 struct bcap_device *bcap_dev = video_drvdata(file); in bcap_g_input() local
577 *index = bcap_dev->cur_input; in bcap_g_input()
583 struct bcap_device *bcap_dev = video_drvdata(file); in bcap_s_input() local
584 struct bfin_capture_config *config = bcap_dev->cfg; in bcap_s_input()
588 if (vb2_is_busy(&bcap_dev->buffer_queue)) in bcap_s_input()
595 ret = v4l2_subdev_call(bcap_dev->sd, video, s_routing, in bcap_s_input()
598 v4l2_err(&bcap_dev->v4l2_dev, "Failed to set input\n"); in bcap_s_input()
601 bcap_dev->cur_input = index; in bcap_s_input()
650 struct bcap_device *bcap_dev = video_drvdata(file); in bcap_enum_fmt_vid_cap() local
651 struct bcap_format *sf = bcap_dev->sensor_formats; in bcap_enum_fmt_vid_cap()
653 if (fmt->index >= bcap_dev->num_sensor_formats) in bcap_enum_fmt_vid_cap()
667 struct bcap_device *bcap_dev = video_drvdata(file); in bcap_try_fmt_vid_cap() local
670 return bcap_try_format(bcap_dev, pixfmt, NULL); in bcap_try_fmt_vid_cap()
676 struct bcap_device *bcap_dev = video_drvdata(file); in bcap_g_fmt_vid_cap() local
678 fmt->fmt.pix = bcap_dev->fmt; in bcap_g_fmt_vid_cap()
685 struct bcap_device *bcap_dev = video_drvdata(file); in bcap_s_fmt_vid_cap() local
693 if (vb2_is_busy(&bcap_dev->buffer_queue)) in bcap_s_fmt_vid_cap()
697 ret = bcap_try_format(bcap_dev, pixfmt, &bcap_fmt); in bcap_s_fmt_vid_cap()
702 ret = v4l2_subdev_call(bcap_dev->sd, pad, set_fmt, NULL, &format); in bcap_s_fmt_vid_cap()
705 bcap_dev->fmt = *pixfmt; in bcap_s_fmt_vid_cap()
706 bcap_dev->bpp = bcap_fmt.bpp; in bcap_s_fmt_vid_cap()
707 bcap_dev->dlen = bcap_fmt.dlen; in bcap_s_fmt_vid_cap()
714 struct bcap_device *bcap_dev = video_drvdata(file); in bcap_querycap() local
720 strlcpy(cap->card, bcap_dev->cfg->card_name, sizeof(cap->card)); in bcap_querycap()
727 struct bcap_device *bcap_dev = video_drvdata(file); in bcap_g_parm() local
731 return v4l2_subdev_call(bcap_dev->sd, video, g_parm, a); in bcap_g_parm()
737 struct bcap_device *bcap_dev = video_drvdata(file); in bcap_s_parm() local
741 return v4l2_subdev_call(bcap_dev->sd, video, s_parm, a); in bcap_s_parm()
746 struct bcap_device *bcap_dev = video_drvdata(file); in bcap_log_status() local
748 v4l2_device_call_all(&bcap_dev->v4l2_dev, 0, core, log_status); in bcap_log_status()
795 struct bcap_device *bcap_dev; in bcap_probe() local
809 bcap_dev = kzalloc(sizeof(*bcap_dev), GFP_KERNEL); in bcap_probe()
810 if (!bcap_dev) { in bcap_probe()
815 bcap_dev->cfg = config; in bcap_probe()
817 bcap_dev->ppi = ppi_create_instance(pdev, config->ppi_info); in bcap_probe()
818 if (!bcap_dev->ppi) { in bcap_probe()
823 bcap_dev->ppi->priv = bcap_dev; in bcap_probe()
825 bcap_dev->alloc_ctx = vb2_dma_contig_init_ctx(&pdev->dev); in bcap_probe()
826 if (IS_ERR(bcap_dev->alloc_ctx)) { in bcap_probe()
827 ret = PTR_ERR(bcap_dev->alloc_ctx); in bcap_probe()
831 vfd = &bcap_dev->video_dev; in bcap_probe()
837 vfd->v4l2_dev = &bcap_dev->v4l2_dev; in bcap_probe()
840 ret = v4l2_device_register(&pdev->dev, &bcap_dev->v4l2_dev); in bcap_probe()
846 v4l2_info(&bcap_dev->v4l2_dev, "v4l2 device registered\n"); in bcap_probe()
848 bcap_dev->v4l2_dev.ctrl_handler = &bcap_dev->ctrl_handler; in bcap_probe()
849 ret = v4l2_ctrl_handler_init(&bcap_dev->ctrl_handler, 0); in bcap_probe()
851 v4l2_err(&bcap_dev->v4l2_dev, in bcap_probe()
856 spin_lock_init(&bcap_dev->lock); in bcap_probe()
858 q = &bcap_dev->buffer_queue; in bcap_probe()
861 q->drv_priv = bcap_dev; in bcap_probe()
866 q->lock = &bcap_dev->mutex; in bcap_probe()
873 mutex_init(&bcap_dev->mutex); in bcap_probe()
874 init_completion(&bcap_dev->comp); in bcap_probe()
877 INIT_LIST_HEAD(&bcap_dev->dma_queue); in bcap_probe()
879 vfd->lock = &bcap_dev->mutex; in bcap_probe()
883 ret = video_register_device(&bcap_dev->video_dev, VFL_TYPE_GRABBER, -1); in bcap_probe()
885 v4l2_err(&bcap_dev->v4l2_dev, in bcap_probe()
889 video_set_drvdata(&bcap_dev->video_dev, bcap_dev); in bcap_probe()
890 v4l2_info(&bcap_dev->v4l2_dev, "video device registered as: %s\n", in bcap_probe()
896 v4l2_err(&bcap_dev->v4l2_dev, in bcap_probe()
902 bcap_dev->sd = v4l2_i2c_new_subdev_board(&bcap_dev->v4l2_dev, in bcap_probe()
906 if (bcap_dev->sd) { in bcap_probe()
913 v4l2_err(&bcap_dev->v4l2_dev, in bcap_probe()
919 v4l2_info(&bcap_dev->v4l2_dev, "v4l2 sub device registered\n"); in bcap_probe()
926 ret = v4l2_subdev_call(bcap_dev->sd, video, s_routing, in bcap_probe()
929 v4l2_err(&bcap_dev->v4l2_dev, "Failed to set input\n"); in bcap_probe()
932 bcap_dev->cur_input = 0; in bcap_probe()
940 ret = v4l2_subdev_call(bcap_dev->sd, video, g_std, &std); in bcap_probe()
942 v4l2_err(&bcap_dev->v4l2_dev, in bcap_probe()
946 bcap_dev->std = std; in bcap_probe()
950 ret = v4l2_subdev_call(bcap_dev->sd, video, in bcap_probe()
953 v4l2_err(&bcap_dev->v4l2_dev, in bcap_probe()
957 bcap_dev->dv_timings = dv_timings; in bcap_probe()
959 ret = bcap_init_sensor_formats(bcap_dev); in bcap_probe()
961 v4l2_err(&bcap_dev->v4l2_dev, in bcap_probe()
967 video_unregister_device(&bcap_dev->video_dev); in bcap_probe()
969 v4l2_ctrl_handler_free(&bcap_dev->ctrl_handler); in bcap_probe()
971 v4l2_device_unregister(&bcap_dev->v4l2_dev); in bcap_probe()
973 vb2_dma_contig_cleanup_ctx(bcap_dev->alloc_ctx); in bcap_probe()
975 ppi_delete_instance(bcap_dev->ppi); in bcap_probe()
977 kfree(bcap_dev); in bcap_probe()
984 struct bcap_device *bcap_dev = container_of(v4l2_dev, in bcap_remove() local
987 bcap_free_sensor_formats(bcap_dev); in bcap_remove()
988 video_unregister_device(&bcap_dev->video_dev); in bcap_remove()
989 v4l2_ctrl_handler_free(&bcap_dev->ctrl_handler); in bcap_remove()
991 vb2_dma_contig_cleanup_ctx(bcap_dev->alloc_ctx); in bcap_remove()
992 ppi_delete_instance(bcap_dev->ppi); in bcap_remove()
993 kfree(bcap_dev); in bcap_remove()