Lines Matching refs:vpfe_dev

287 static int vpfe_config_ccdc_image_format(struct vpfe_device *vpfe_dev)  in vpfe_config_ccdc_image_format()  argument
293 vpfe_dev->fmt.fmt.pix.pixelformat) < 0) { in vpfe_config_ccdc_image_format()
294 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_config_ccdc_image_format()
299 ccdc_dev->hw_ops.set_image_window(&vpfe_dev->crop); in vpfe_config_ccdc_image_format()
301 switch (vpfe_dev->fmt.fmt.pix.field) { in vpfe_config_ccdc_image_format()
334 static int vpfe_config_image_format(struct vpfe_device *vpfe_dev, in vpfe_config_image_format() argument
337 struct vpfe_subdev_info *sdinfo = vpfe_dev->current_subdev; in vpfe_config_image_format()
342 struct v4l2_pix_format *pix = &vpfe_dev->fmt.fmt.pix; in vpfe_config_image_format()
347 vpfe_dev->std_info.active_pixels = in vpfe_config_image_format()
349 vpfe_dev->std_info.active_lines = in vpfe_config_image_format()
351 vpfe_dev->std_info.frame_format = in vpfe_config_image_format()
353 vpfe_dev->std_index = i; in vpfe_config_image_format()
359 v4l2_err(&vpfe_dev->v4l2_dev, "standard not supported\n"); in vpfe_config_image_format()
363 vpfe_dev->crop.top = 0; in vpfe_config_image_format()
364 vpfe_dev->crop.left = 0; in vpfe_config_image_format()
365 vpfe_dev->crop.width = vpfe_dev->std_info.active_pixels; in vpfe_config_image_format()
366 vpfe_dev->crop.height = vpfe_dev->std_info.active_lines; in vpfe_config_image_format()
367 pix->width = vpfe_dev->crop.width; in vpfe_config_image_format()
368 pix->height = vpfe_dev->crop.height; in vpfe_config_image_format()
371 if (vpfe_dev->std_info.frame_format) { in vpfe_config_image_format()
386 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, in vpfe_config_image_format()
390 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_config_image_format()
399 ret = vpfe_config_ccdc_image_format(vpfe_dev); in vpfe_config_image_format()
410 static int vpfe_initialize_device(struct vpfe_device *vpfe_dev) in vpfe_initialize_device() argument
415 vpfe_dev->current_input = 0; in vpfe_initialize_device()
418 vpfe_dev->std_index = 0; in vpfe_initialize_device()
421 ret = vpfe_config_image_format(vpfe_dev, in vpfe_initialize_device()
422 vpfe_standards[vpfe_dev->std_index].std_id); in vpfe_initialize_device()
429 v4l2_err(&vpfe_dev->v4l2_dev, "ccdc device not registered\n"); in vpfe_initialize_device()
435 v4l2_err(&vpfe_dev->v4l2_dev, "Couldn't lock ccdc module\n"); in vpfe_initialize_device()
439 ret = ccdc_dev->hw_ops.open(vpfe_dev->pdev); in vpfe_initialize_device()
441 vpfe_dev->initialized = 1; in vpfe_initialize_device()
444 if (vpfe_dev->cfg->clr_intr) in vpfe_initialize_device()
445 vpfe_dev->cfg->clr_intr(-1); in vpfe_initialize_device()
458 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_open() local
462 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_open\n"); in vpfe_open()
464 if (!vpfe_dev->cfg->num_subdevs) { in vpfe_open()
465 v4l2_err(&vpfe_dev->v4l2_dev, "No decoder registered\n"); in vpfe_open()
476 fh->vpfe_dev = vpfe_dev; in vpfe_open()
478 mutex_lock(&vpfe_dev->lock); in vpfe_open()
480 if (!vpfe_dev->initialized) { in vpfe_open()
481 if (vpfe_initialize_device(vpfe_dev)) { in vpfe_open()
482 mutex_unlock(&vpfe_dev->lock); in vpfe_open()
489 vpfe_dev->usrs++; in vpfe_open()
493 mutex_unlock(&vpfe_dev->lock); in vpfe_open()
497 static void vpfe_schedule_next_buffer(struct vpfe_device *vpfe_dev) in vpfe_schedule_next_buffer() argument
501 vpfe_dev->next_frm = list_entry(vpfe_dev->dma_queue.next, in vpfe_schedule_next_buffer()
503 list_del(&vpfe_dev->next_frm->queue); in vpfe_schedule_next_buffer()
504 vpfe_dev->next_frm->state = VIDEOBUF_ACTIVE; in vpfe_schedule_next_buffer()
505 addr = videobuf_to_dma_contig(vpfe_dev->next_frm); in vpfe_schedule_next_buffer()
510 static void vpfe_schedule_bottom_field(struct vpfe_device *vpfe_dev) in vpfe_schedule_bottom_field() argument
514 addr = videobuf_to_dma_contig(vpfe_dev->cur_frm); in vpfe_schedule_bottom_field()
515 addr += vpfe_dev->field_off; in vpfe_schedule_bottom_field()
519 static void vpfe_process_buffer_complete(struct vpfe_device *vpfe_dev) in vpfe_process_buffer_complete() argument
521 v4l2_get_timestamp(&vpfe_dev->cur_frm->ts); in vpfe_process_buffer_complete()
522 vpfe_dev->cur_frm->state = VIDEOBUF_DONE; in vpfe_process_buffer_complete()
523 vpfe_dev->cur_frm->size = vpfe_dev->fmt.fmt.pix.sizeimage; in vpfe_process_buffer_complete()
524 wake_up_interruptible(&vpfe_dev->cur_frm->done); in vpfe_process_buffer_complete()
525 vpfe_dev->cur_frm = vpfe_dev->next_frm; in vpfe_process_buffer_complete()
531 struct vpfe_device *vpfe_dev = dev_id; in vpfe_isr() local
535 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "\nStarting vpfe_isr...\n"); in vpfe_isr()
536 field = vpfe_dev->fmt.fmt.pix.field; in vpfe_isr()
539 if (!vpfe_dev->started) in vpfe_isr()
548 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_isr()
550 if (vpfe_dev->cur_frm != vpfe_dev->next_frm) in vpfe_isr()
551 vpfe_process_buffer_complete(vpfe_dev); in vpfe_isr()
559 vpfe_dev->field_id ^= 1; in vpfe_isr()
560 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "field id = %x:%x.\n", in vpfe_isr()
561 fid, vpfe_dev->field_id); in vpfe_isr()
562 if (fid == vpfe_dev->field_id) { in vpfe_isr()
569 if (vpfe_dev->cur_frm != vpfe_dev->next_frm) in vpfe_isr()
570 vpfe_process_buffer_complete(vpfe_dev); in vpfe_isr()
577 vpfe_schedule_bottom_field(vpfe_dev); in vpfe_isr()
586 spin_lock(&vpfe_dev->dma_queue_lock); in vpfe_isr()
587 if (!list_empty(&vpfe_dev->dma_queue) && in vpfe_isr()
588 vpfe_dev->cur_frm == vpfe_dev->next_frm) in vpfe_isr()
589 vpfe_schedule_next_buffer(vpfe_dev); in vpfe_isr()
590 spin_unlock(&vpfe_dev->dma_queue_lock); in vpfe_isr()
596 vpfe_dev->field_id = fid; in vpfe_isr()
599 if (vpfe_dev->cfg->clr_intr) in vpfe_isr()
600 vpfe_dev->cfg->clr_intr(irq); in vpfe_isr()
608 struct vpfe_device *vpfe_dev = dev_id; in vdint1_isr() local
610 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "\nInside vdint1_isr...\n"); in vdint1_isr()
613 if (!vpfe_dev->started) { in vdint1_isr()
614 if (vpfe_dev->cfg->clr_intr) in vdint1_isr()
615 vpfe_dev->cfg->clr_intr(irq); in vdint1_isr()
619 spin_lock(&vpfe_dev->dma_queue_lock); in vdint1_isr()
620 if ((vpfe_dev->fmt.fmt.pix.field == V4L2_FIELD_NONE) && in vdint1_isr()
621 !list_empty(&vpfe_dev->dma_queue) && in vdint1_isr()
622 vpfe_dev->cur_frm == vpfe_dev->next_frm) in vdint1_isr()
623 vpfe_schedule_next_buffer(vpfe_dev); in vdint1_isr()
624 spin_unlock(&vpfe_dev->dma_queue_lock); in vdint1_isr()
626 if (vpfe_dev->cfg->clr_intr) in vdint1_isr()
627 vpfe_dev->cfg->clr_intr(irq); in vdint1_isr()
632 static void vpfe_detach_irq(struct vpfe_device *vpfe_dev) in vpfe_detach_irq() argument
638 free_irq(vpfe_dev->ccdc_irq1, vpfe_dev); in vpfe_detach_irq()
641 static int vpfe_attach_irq(struct vpfe_device *vpfe_dev) in vpfe_attach_irq() argument
647 return request_irq(vpfe_dev->ccdc_irq1, vdint1_isr, in vpfe_attach_irq()
649 vpfe_dev); in vpfe_attach_irq()
655 static void vpfe_stop_ccdc_capture(struct vpfe_device *vpfe_dev) in vpfe_stop_ccdc_capture() argument
657 vpfe_dev->started = 0; in vpfe_stop_ccdc_capture()
669 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_release() local
674 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_release\n"); in vpfe_release()
677 mutex_lock(&vpfe_dev->lock); in vpfe_release()
680 if (vpfe_dev->started) { in vpfe_release()
681 sdinfo = vpfe_dev->current_subdev; in vpfe_release()
682 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, in vpfe_release()
686 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_release()
688 vpfe_stop_ccdc_capture(vpfe_dev); in vpfe_release()
689 vpfe_detach_irq(vpfe_dev); in vpfe_release()
690 videobuf_streamoff(&vpfe_dev->buffer_queue); in vpfe_release()
692 vpfe_dev->io_usrs = 0; in vpfe_release()
693 vpfe_dev->numbuffers = config_params.numbuffers; in vpfe_release()
694 videobuf_stop(&vpfe_dev->buffer_queue); in vpfe_release()
695 videobuf_mmap_free(&vpfe_dev->buffer_queue); in vpfe_release()
699 vpfe_dev->usrs--; in vpfe_release()
703 if (!vpfe_dev->usrs) { in vpfe_release()
704 vpfe_dev->initialized = 0; in vpfe_release()
706 ccdc_dev->hw_ops.close(vpfe_dev->pdev); in vpfe_release()
709 mutex_unlock(&vpfe_dev->lock); in vpfe_release()
723 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_mmap() local
725 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_mmap\n"); in vpfe_mmap()
727 return videobuf_mmap_mapper(&vpfe_dev->buffer_queue, vma); in vpfe_mmap()
735 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_poll() local
737 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_poll\n"); in vpfe_poll()
739 if (vpfe_dev->started) in vpfe_poll()
741 &vpfe_dev->buffer_queue, wait); in vpfe_poll()
773 vpfe_check_format(struct vpfe_device *vpfe_dev, in vpfe_check_format() argument
787 pixfmt->pixelformat = vpfe_dev->fmt.fmt.pix.pixelformat; in vpfe_check_format()
804 pixfmt->pixelformat = vpfe_dev->fmt.fmt.pix.pixelformat; in vpfe_check_format()
815 pixfmt->field = vpfe_dev->fmt.fmt.pix.field; in vpfe_check_format()
822 if (vpfe_dev->fmt.fmt.pix.field != pixfmt->field) { in vpfe_check_format()
831 if (!vpfe_dev->std_info.frame_format) in vpfe_check_format()
835 if (vpfe_dev->std_info.frame_format) in vpfe_check_format()
841 pixfmt->field = vpfe_dev->fmt.fmt.pix.field; in vpfe_check_format()
851 max_width = vpfe_dev->std_info.active_pixels; in vpfe_check_format()
852 max_height = vpfe_dev->std_info.active_lines; in vpfe_check_format()
855 v4l2_info(&vpfe_dev->v4l2_dev, "width = %d, height = %d, bpp = %d\n", in vpfe_check_format()
877 …v4l2_info(&vpfe_dev->v4l2_dev, "adjusted width = %d, height = %d, bpp = %d, bytesperline = %d, siz… in vpfe_check_format()
886 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_querycap() local
888 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_querycap\n"); in vpfe_querycap()
894 strlcpy(cap->card, vpfe_dev->cfg->card_name, sizeof(cap->card)); in vpfe_querycap()
901 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_g_fmt_vid_cap() local
903 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_g_fmt_vid_cap\n"); in vpfe_g_fmt_vid_cap()
905 *fmt = vpfe_dev->fmt; in vpfe_g_fmt_vid_cap()
912 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_enum_fmt_vid_cap() local
917 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_enum_fmt_vid_cap\n"); in vpfe_enum_fmt_vid_cap()
936 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_s_fmt_vid_cap() local
940 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_fmt_vid_cap\n"); in vpfe_s_fmt_vid_cap()
943 if (vpfe_dev->started) { in vpfe_s_fmt_vid_cap()
944 v4l2_err(&vpfe_dev->v4l2_dev, "Streaming is started\n"); in vpfe_s_fmt_vid_cap()
949 pix_fmts = vpfe_check_format(vpfe_dev, &fmt->fmt.pix); in vpfe_s_fmt_vid_cap()
954 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_s_fmt_vid_cap()
959 vpfe_detach_irq(vpfe_dev); in vpfe_s_fmt_vid_cap()
960 vpfe_dev->fmt = *fmt; in vpfe_s_fmt_vid_cap()
962 ret = vpfe_config_ccdc_image_format(vpfe_dev); in vpfe_s_fmt_vid_cap()
963 mutex_unlock(&vpfe_dev->lock); in vpfe_s_fmt_vid_cap()
970 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_try_fmt_vid_cap() local
973 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_try_fmt_vid_cap\n"); in vpfe_try_fmt_vid_cap()
975 pix_fmts = vpfe_check_format(vpfe_dev, &f->fmt.pix); in vpfe_try_fmt_vid_cap()
985 static int vpfe_get_subdev_input_index(struct vpfe_device *vpfe_dev, in vpfe_get_subdev_input_index() argument
990 struct vpfe_config *cfg = vpfe_dev->cfg; in vpfe_get_subdev_input_index()
1011 static int vpfe_get_app_input_index(struct vpfe_device *vpfe_dev, in vpfe_get_app_input_index() argument
1014 struct vpfe_config *cfg = vpfe_dev->cfg; in vpfe_get_app_input_index()
1020 if (!strcmp(sdinfo->name, vpfe_dev->current_subdev->name)) { in vpfe_get_app_input_index()
1021 if (vpfe_dev->current_input >= sdinfo->num_inputs) in vpfe_get_app_input_index()
1023 *app_input_index = j + vpfe_dev->current_input; in vpfe_get_app_input_index()
1034 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_enum_input() local
1038 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_enum_input\n"); in vpfe_enum_input()
1040 if (vpfe_get_subdev_input_index(vpfe_dev, in vpfe_enum_input()
1044 v4l2_err(&vpfe_dev->v4l2_dev, "input information not found for the subdev\n"); in vpfe_enum_input()
1047 sdinfo = &vpfe_dev->cfg->sub_devs[subdev]; in vpfe_enum_input()
1054 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_g_input() local
1056 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_g_input\n"); in vpfe_g_input()
1058 return vpfe_get_app_input_index(vpfe_dev, index); in vpfe_g_input()
1064 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_s_input() local
1072 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_input\n"); in vpfe_s_input()
1074 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_s_input()
1082 if (vpfe_dev->started) { in vpfe_s_input()
1083 v4l2_err(&vpfe_dev->v4l2_dev, "Streaming is on\n"); in vpfe_s_input()
1087 ret = vpfe_get_subdev_input_index(vpfe_dev, in vpfe_s_input()
1092 v4l2_err(&vpfe_dev->v4l2_dev, "invalid input index\n"); in vpfe_s_input()
1096 sdinfo = &vpfe_dev->cfg->sub_devs[subdev_index]; in vpfe_s_input()
1097 sd = vpfe_dev->sd[subdev_index]; in vpfe_s_input()
1111 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_s_input()
1116 vpfe_dev->current_subdev = sdinfo; in vpfe_s_input()
1118 vpfe_dev->v4l2_dev.ctrl_handler = sd->ctrl_handler; in vpfe_s_input()
1119 vpfe_dev->current_input = index; in vpfe_s_input()
1120 vpfe_dev->std_index = 0; in vpfe_s_input()
1128 ret = vpfe_config_image_format(vpfe_dev, in vpfe_s_input()
1129 vpfe_standards[vpfe_dev->std_index].std_id); in vpfe_s_input()
1131 mutex_unlock(&vpfe_dev->lock); in vpfe_s_input()
1137 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_querystd() local
1141 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_querystd\n"); in vpfe_querystd()
1143 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_querystd()
1144 sdinfo = vpfe_dev->current_subdev; in vpfe_querystd()
1148 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id, in vpfe_querystd()
1150 mutex_unlock(&vpfe_dev->lock); in vpfe_querystd()
1156 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_s_std() local
1160 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_std\n"); in vpfe_s_std()
1163 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_s_std()
1167 sdinfo = vpfe_dev->current_subdev; in vpfe_s_std()
1169 if (vpfe_dev->started) { in vpfe_s_std()
1170 v4l2_err(&vpfe_dev->v4l2_dev, "streaming is started\n"); in vpfe_s_std()
1175 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id, in vpfe_s_std()
1178 v4l2_err(&vpfe_dev->v4l2_dev, "Failed to set standard\n"); in vpfe_s_std()
1181 ret = vpfe_config_image_format(vpfe_dev, std_id); in vpfe_s_std()
1184 mutex_unlock(&vpfe_dev->lock); in vpfe_s_std()
1190 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_g_std() local
1192 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_g_std\n"); in vpfe_g_std()
1194 *std_id = vpfe_standards[vpfe_dev->std_index].std_id; in vpfe_g_std()
1205 struct vpfe_device *vpfe_dev = fh->vpfe_dev; in vpfe_videobuf_setup() local
1207 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_buffer_setup\n"); in vpfe_videobuf_setup()
1208 *size = vpfe_dev->fmt.fmt.pix.sizeimage; in vpfe_videobuf_setup()
1209 if (vpfe_dev->memory == V4L2_MEMORY_MMAP && in vpfe_videobuf_setup()
1210 vpfe_dev->fmt.fmt.pix.sizeimage > config_params.device_bufsize) in vpfe_videobuf_setup()
1215 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_videobuf_setup()
1225 struct vpfe_device *vpfe_dev = fh->vpfe_dev; in vpfe_videobuf_prepare() local
1229 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_buffer_prepare\n"); in vpfe_videobuf_prepare()
1233 vb->width = vpfe_dev->fmt.fmt.pix.width; in vpfe_videobuf_prepare()
1234 vb->height = vpfe_dev->fmt.fmt.pix.height; in vpfe_videobuf_prepare()
1235 vb->size = vpfe_dev->fmt.fmt.pix.sizeimage; in vpfe_videobuf_prepare()
1257 struct vpfe_device *vpfe_dev = fh->vpfe_dev; in vpfe_videobuf_queue() local
1260 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_buffer_queue\n"); in vpfe_videobuf_queue()
1263 spin_lock_irqsave(&vpfe_dev->dma_queue_lock, flags); in vpfe_videobuf_queue()
1264 list_add_tail(&vb->queue, &vpfe_dev->dma_queue); in vpfe_videobuf_queue()
1265 spin_unlock_irqrestore(&vpfe_dev->dma_queue_lock, flags); in vpfe_videobuf_queue()
1275 struct vpfe_device *vpfe_dev = fh->vpfe_dev; in vpfe_videobuf_release() local
1278 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_videobuf_release\n"); in vpfe_videobuf_release()
1284 spin_lock_irqsave(&vpfe_dev->dma_queue_lock, flags); in vpfe_videobuf_release()
1285 INIT_LIST_HEAD(&vpfe_dev->dma_queue); in vpfe_videobuf_release()
1286 spin_unlock_irqrestore(&vpfe_dev->dma_queue_lock, flags); in vpfe_videobuf_release()
1305 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_reqbufs() local
1309 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_reqbufs\n"); in vpfe_reqbufs()
1312 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buffer type\n"); in vpfe_reqbufs()
1316 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_reqbufs()
1320 if (vpfe_dev->io_usrs != 0) { in vpfe_reqbufs()
1321 v4l2_err(&vpfe_dev->v4l2_dev, "Only one IO user allowed\n"); in vpfe_reqbufs()
1326 vpfe_dev->memory = req_buf->memory; in vpfe_reqbufs()
1327 videobuf_queue_dma_contig_init(&vpfe_dev->buffer_queue, in vpfe_reqbufs()
1329 vpfe_dev->pdev, in vpfe_reqbufs()
1330 &vpfe_dev->irqlock, in vpfe_reqbufs()
1332 vpfe_dev->fmt.fmt.pix.field, in vpfe_reqbufs()
1337 vpfe_dev->io_usrs = 1; in vpfe_reqbufs()
1338 INIT_LIST_HEAD(&vpfe_dev->dma_queue); in vpfe_reqbufs()
1339 ret = videobuf_reqbufs(&vpfe_dev->buffer_queue, req_buf); in vpfe_reqbufs()
1341 mutex_unlock(&vpfe_dev->lock); in vpfe_reqbufs()
1348 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_querybuf() local
1350 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_querybuf\n"); in vpfe_querybuf()
1353 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf type\n"); in vpfe_querybuf()
1357 if (vpfe_dev->memory != V4L2_MEMORY_MMAP) { in vpfe_querybuf()
1358 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid memory\n"); in vpfe_querybuf()
1362 return videobuf_querybuf(&vpfe_dev->buffer_queue, buf); in vpfe_querybuf()
1368 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_qbuf() local
1371 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_qbuf\n"); in vpfe_qbuf()
1374 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf type\n"); in vpfe_qbuf()
1383 v4l2_err(&vpfe_dev->v4l2_dev, "fh->io_allowed\n"); in vpfe_qbuf()
1386 return videobuf_qbuf(&vpfe_dev->buffer_queue, p); in vpfe_qbuf()
1392 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_dqbuf() local
1394 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_dqbuf\n"); in vpfe_dqbuf()
1397 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf type\n"); in vpfe_dqbuf()
1400 return videobuf_dqbuf(&vpfe_dev->buffer_queue, in vpfe_dqbuf()
1408 static void vpfe_calculate_offsets(struct vpfe_device *vpfe_dev) in vpfe_calculate_offsets() argument
1412 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_calculate_offsets\n"); in vpfe_calculate_offsets()
1415 vpfe_dev->field_off = image_win.height * image_win.width; in vpfe_calculate_offsets()
1419 static void vpfe_start_ccdc_capture(struct vpfe_device *vpfe_dev) in vpfe_start_ccdc_capture() argument
1424 vpfe_dev->started = 1; in vpfe_start_ccdc_capture()
1435 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_streamon() local
1441 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_streamon\n"); in vpfe_streamon()
1444 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf type\n"); in vpfe_streamon()
1450 v4l2_err(&vpfe_dev->v4l2_dev, "fh->io_allowed\n"); in vpfe_streamon()
1454 sdinfo = vpfe_dev->current_subdev; in vpfe_streamon()
1455 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id, in vpfe_streamon()
1459 v4l2_err(&vpfe_dev->v4l2_dev, "stream on failed in subdev\n"); in vpfe_streamon()
1464 if (list_empty(&vpfe_dev->buffer_queue.stream)) { in vpfe_streamon()
1465 v4l2_err(&vpfe_dev->v4l2_dev, "buffer queue is empty\n"); in vpfe_streamon()
1470 ret = videobuf_streamon(&vpfe_dev->buffer_queue); in vpfe_streamon()
1475 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_streamon()
1479 vpfe_dev->next_frm = list_entry(vpfe_dev->dma_queue.next, in vpfe_streamon()
1481 vpfe_dev->cur_frm = vpfe_dev->next_frm; in vpfe_streamon()
1483 list_del(&vpfe_dev->cur_frm->queue); in vpfe_streamon()
1485 vpfe_dev->cur_frm->state = VIDEOBUF_ACTIVE; in vpfe_streamon()
1487 vpfe_dev->field_id = 0; in vpfe_streamon()
1488 addr = videobuf_to_dma_contig(vpfe_dev->cur_frm); in vpfe_streamon()
1491 vpfe_calculate_offsets(vpfe_dev); in vpfe_streamon()
1493 if (vpfe_attach_irq(vpfe_dev) < 0) { in vpfe_streamon()
1494 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_streamon()
1500 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_streamon()
1506 vpfe_start_ccdc_capture(vpfe_dev); in vpfe_streamon()
1507 mutex_unlock(&vpfe_dev->lock); in vpfe_streamon()
1510 mutex_unlock(&vpfe_dev->lock); in vpfe_streamon()
1512 videobuf_streamoff(&vpfe_dev->buffer_queue); in vpfe_streamon()
1519 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_streamoff() local
1524 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_streamoff\n"); in vpfe_streamoff()
1527 v4l2_err(&vpfe_dev->v4l2_dev, "Invalid buf type\n"); in vpfe_streamoff()
1533 v4l2_err(&vpfe_dev->v4l2_dev, "fh->io_allowed\n"); in vpfe_streamoff()
1538 if (!vpfe_dev->started) { in vpfe_streamoff()
1539 v4l2_err(&vpfe_dev->v4l2_dev, "device started\n"); in vpfe_streamoff()
1543 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_streamoff()
1547 vpfe_stop_ccdc_capture(vpfe_dev); in vpfe_streamoff()
1548 vpfe_detach_irq(vpfe_dev); in vpfe_streamoff()
1550 sdinfo = vpfe_dev->current_subdev; in vpfe_streamoff()
1551 ret = v4l2_device_call_until_err(&vpfe_dev->v4l2_dev, sdinfo->grp_id, in vpfe_streamoff()
1555 v4l2_err(&vpfe_dev->v4l2_dev, "stream off failed in subdev\n"); in vpfe_streamoff()
1556 ret = videobuf_streamoff(&vpfe_dev->buffer_queue); in vpfe_streamoff()
1557 mutex_unlock(&vpfe_dev->lock); in vpfe_streamoff()
1564 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_cropcap() local
1566 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_cropcap\n"); in vpfe_cropcap()
1571 if (vpfe_dev->std_index >= ARRAY_SIZE(vpfe_standards)) in vpfe_cropcap()
1574 crop->pixelaspect = vpfe_standards[vpfe_dev->std_index].pixelaspect; in vpfe_cropcap()
1581 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_g_selection() local
1583 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_g_selection\n"); in vpfe_g_selection()
1590 sel->r = vpfe_dev->crop; in vpfe_g_selection()
1594 sel->r.width = vpfe_standards[vpfe_dev->std_index].width; in vpfe_g_selection()
1595 sel->r.height = vpfe_standards[vpfe_dev->std_index].height; in vpfe_g_selection()
1606 struct vpfe_device *vpfe_dev = video_drvdata(file); in vpfe_s_selection() local
1610 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_s_selection\n"); in vpfe_s_selection()
1616 if (vpfe_dev->started) { in vpfe_s_selection()
1618 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_s_selection()
1623 ret = mutex_lock_interruptible(&vpfe_dev->lock); in vpfe_s_selection()
1628 v4l2_err(&vpfe_dev->v4l2_dev, in vpfe_s_selection()
1639 vpfe_dev->std_info.active_pixels) || in vpfe_s_selection()
1641 vpfe_dev->std_info.active_lines)) { in vpfe_s_selection()
1642 v4l2_err(&vpfe_dev->v4l2_dev, "Error in S_SELECTION params\n"); in vpfe_s_selection()
1647 vpfe_dev->fmt.fmt.pix.width = rect.width; in vpfe_s_selection()
1648 vpfe_dev->fmt.fmt.pix.height = rect.height; in vpfe_s_selection()
1649 vpfe_dev->fmt.fmt.pix.bytesperline = in vpfe_s_selection()
1651 vpfe_dev->fmt.fmt.pix.sizeimage = in vpfe_s_selection()
1652 vpfe_dev->fmt.fmt.pix.bytesperline * in vpfe_s_selection()
1653 vpfe_dev->fmt.fmt.pix.height; in vpfe_s_selection()
1654 vpfe_dev->crop = rect; in vpfe_s_selection()
1657 mutex_unlock(&vpfe_dev->lock); in vpfe_s_selection()
1687 struct vpfe_device *vpfe_dev; in vpfe_initialize() local
1707 vpfe_dev = kzalloc(sizeof(*vpfe_dev), GFP_KERNEL); in vpfe_initialize()
1709 return vpfe_dev; in vpfe_initialize()
1722 struct vpfe_device *vpfe_dev; in vpfe_probe() local
1729 vpfe_dev = vpfe_initialize(); in vpfe_probe()
1731 if (!vpfe_dev) { in vpfe_probe()
1737 vpfe_dev->pdev = &pdev->dev; in vpfe_probe()
1746 vpfe_dev->cfg = vpfe_cfg; in vpfe_probe()
1771 vpfe_dev->ccdc_irq0 = res1->start; in vpfe_probe()
1781 vpfe_dev->ccdc_irq1 = res1->start; in vpfe_probe()
1783 ret = request_irq(vpfe_dev->ccdc_irq0, vpfe_isr, 0, in vpfe_probe()
1784 "vpfe_capture0", vpfe_dev); in vpfe_probe()
1791 vfd = &vpfe_dev->video_dev; in vpfe_probe()
1797 vfd->v4l2_dev = &vpfe_dev->v4l2_dev; in vpfe_probe()
1805 ret = v4l2_device_register(&pdev->dev, &vpfe_dev->v4l2_dev); in vpfe_probe()
1811 v4l2_info(&vpfe_dev->v4l2_dev, "v4l2 device registered\n"); in vpfe_probe()
1812 spin_lock_init(&vpfe_dev->irqlock); in vpfe_probe()
1813 spin_lock_init(&vpfe_dev->dma_queue_lock); in vpfe_probe()
1814 mutex_init(&vpfe_dev->lock); in vpfe_probe()
1817 vpfe_dev->numbuffers = config_params.numbuffers; in vpfe_probe()
1820 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_probe()
1822 v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, in vpfe_probe()
1823 "video_dev=%p\n", &vpfe_dev->video_dev); in vpfe_probe()
1824 vpfe_dev->fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; in vpfe_probe()
1825 ret = video_register_device(&vpfe_dev->video_dev, in vpfe_probe()
1834 v4l2_info(&vpfe_dev->v4l2_dev, "video device registered\n"); in vpfe_probe()
1836 platform_set_drvdata(pdev, vpfe_dev); in vpfe_probe()
1838 video_set_drvdata(&vpfe_dev->video_dev, vpfe_dev); in vpfe_probe()
1841 vpfe_dev->sd = kmalloc_array(num_subdevs, in vpfe_probe()
1842 sizeof(*vpfe_dev->sd), in vpfe_probe()
1844 if (!vpfe_dev->sd) { in vpfe_probe()
1855 vpfe_dev->sd[i] = in vpfe_probe()
1856 v4l2_i2c_new_subdev_board(&vpfe_dev->v4l2_dev, in vpfe_probe()
1860 if (vpfe_dev->sd[i]) { in vpfe_probe()
1861 v4l2_info(&vpfe_dev->v4l2_dev, in vpfe_probe()
1864 vpfe_dev->sd[i]->grp_id = sdinfo->grp_id; in vpfe_probe()
1871 v4l2_info(&vpfe_dev->v4l2_dev, in vpfe_probe()
1880 vpfe_dev->current_subdev = &vpfe_cfg->sub_devs[0]; in vpfe_probe()
1881 vpfe_dev->v4l2_dev.ctrl_handler = vpfe_dev->sd[0]->ctrl_handler; in vpfe_probe()
1888 kfree(vpfe_dev->sd); in vpfe_probe()
1890 video_unregister_device(&vpfe_dev->video_dev); in vpfe_probe()
1892 v4l2_device_unregister(&vpfe_dev->v4l2_dev); in vpfe_probe()
1894 free_irq(vpfe_dev->ccdc_irq0, vpfe_dev); in vpfe_probe()
1899 kfree(vpfe_dev); in vpfe_probe()
1908 struct vpfe_device *vpfe_dev = platform_get_drvdata(pdev); in vpfe_remove() local
1912 free_irq(vpfe_dev->ccdc_irq0, vpfe_dev); in vpfe_remove()
1913 kfree(vpfe_dev->sd); in vpfe_remove()
1914 v4l2_device_unregister(&vpfe_dev->v4l2_dev); in vpfe_remove()
1915 video_unregister_device(&vpfe_dev->video_dev); in vpfe_remove()
1916 kfree(vpfe_dev); in vpfe_remove()