Lines Matching refs:usbtv

49 static int usbtv_configure_for_norm(struct usbtv *usbtv, v4l2_std_id norm)  in usbtv_configure_for_norm()  argument
62 usbtv->width = params->cap_width; in usbtv_configure_for_norm()
63 usbtv->height = params->cap_height; in usbtv_configure_for_norm()
64 usbtv->n_chunks = usbtv->width * usbtv->height in usbtv_configure_for_norm()
66 usbtv->norm = params->norm; in usbtv_configure_for_norm()
73 static int usbtv_select_input(struct usbtv *usbtv, int input) in usbtv_select_input() argument
95 ret = usbtv_set_regs(usbtv, composite, ARRAY_SIZE(composite)); in usbtv_select_input()
98 ret = usbtv_set_regs(usbtv, svideo, ARRAY_SIZE(svideo)); in usbtv_select_input()
105 usbtv->input = input; in usbtv_select_input()
110 static int usbtv_select_norm(struct usbtv *usbtv, v4l2_std_id norm) in usbtv_select_norm() argument
149 ret = usbtv_configure_for_norm(usbtv, norm); in usbtv_select_norm()
153 ret = usbtv_set_regs(usbtv, ntsc, ARRAY_SIZE(ntsc)); in usbtv_select_norm()
155 ret = usbtv_set_regs(usbtv, pal, ARRAY_SIZE(pal)); in usbtv_select_norm()
161 static int usbtv_setup_capture(struct usbtv *usbtv) in usbtv_setup_capture() argument
236 ret = usbtv_set_regs(usbtv, setup, ARRAY_SIZE(setup)); in usbtv_setup_capture()
240 ret = usbtv_select_norm(usbtv, usbtv->norm); in usbtv_setup_capture()
244 ret = usbtv_select_input(usbtv, usbtv->input); in usbtv_setup_capture()
275 static void usbtv_image_chunk(struct usbtv *usbtv, __be32 *chunk) in usbtv_image_chunk() argument
288 if (chunk_no >= usbtv->n_chunks) in usbtv_image_chunk()
293 usbtv->frame_id = frame_id; in usbtv_image_chunk()
294 usbtv->chunks_done = 0; in usbtv_image_chunk()
297 if (usbtv->frame_id != frame_id) in usbtv_image_chunk()
300 spin_lock_irqsave(&usbtv->buflock, flags); in usbtv_image_chunk()
301 if (list_empty(&usbtv->bufs)) { in usbtv_image_chunk()
303 spin_unlock_irqrestore(&usbtv->buflock, flags); in usbtv_image_chunk()
308 buf = list_first_entry(&usbtv->bufs, struct usbtv_buf, list); in usbtv_image_chunk()
313 usbtv->chunks_done++; in usbtv_image_chunk()
316 if (odd && chunk_no == usbtv->n_chunks-1) { in usbtv_image_chunk()
318 enum vb2_buffer_state state = usbtv->chunks_done == in usbtv_image_chunk()
319 usbtv->n_chunks ? in usbtv_image_chunk()
324 buf->vb.sequence = usbtv->sequence++; in usbtv_image_chunk()
331 spin_unlock_irqrestore(&usbtv->buflock, flags); in usbtv_image_chunk()
340 struct usbtv *usbtv = (struct usbtv *)ip->context; in usbtv_iso_cb() local
354 dev_warn(usbtv->dev, "Bad response for ISO request.\n"); in usbtv_iso_cb()
365 usbtv_image_chunk(usbtv, in usbtv_iso_cb()
372 dev_warn(usbtv->dev, "Could not resubmit ISO URB\n"); in usbtv_iso_cb()
375 static struct urb *usbtv_setup_iso_transfer(struct usbtv *usbtv) in usbtv_setup_iso_transfer() argument
378 int size = usbtv->iso_size; in usbtv_setup_iso_transfer()
385 ip->dev = usbtv->udev; in usbtv_setup_iso_transfer()
386 ip->context = usbtv; in usbtv_setup_iso_transfer()
387 ip->pipe = usb_rcvisocpipe(usbtv->udev, USBTV_VIDEO_ENDP); in usbtv_setup_iso_transfer()
403 static void usbtv_stop(struct usbtv *usbtv) in usbtv_stop() argument
410 struct urb *ip = usbtv->isoc_urbs[i]; in usbtv_stop()
417 usbtv->isoc_urbs[i] = NULL; in usbtv_stop()
421 spin_lock_irqsave(&usbtv->buflock, flags); in usbtv_stop()
422 while (!list_empty(&usbtv->bufs)) { in usbtv_stop()
423 struct usbtv_buf *buf = list_first_entry(&usbtv->bufs, in usbtv_stop()
428 spin_unlock_irqrestore(&usbtv->buflock, flags); in usbtv_stop()
431 static int usbtv_start(struct usbtv *usbtv) in usbtv_start() argument
436 usbtv_audio_suspend(usbtv); in usbtv_start()
438 ret = usb_set_interface(usbtv->udev, 0, 0); in usbtv_start()
442 ret = usbtv_setup_capture(usbtv); in usbtv_start()
446 ret = usb_set_interface(usbtv->udev, 0, 1); in usbtv_start()
450 usbtv_audio_resume(usbtv); in usbtv_start()
455 ip = usbtv_setup_iso_transfer(usbtv); in usbtv_start()
460 usbtv->isoc_urbs[i] = ip; in usbtv_start()
470 usbtv_stop(usbtv); in usbtv_start()
477 struct usbtv *dev = video_drvdata(file); in usbtv_querycap()
491 struct usbtv *dev = video_drvdata(file); in usbtv_enum_input()
524 struct usbtv *usbtv = video_drvdata(file); in usbtv_fmt_vid_cap() local
526 f->fmt.pix.width = usbtv->width; in usbtv_fmt_vid_cap()
527 f->fmt.pix.height = usbtv->height; in usbtv_fmt_vid_cap()
530 f->fmt.pix.bytesperline = usbtv->width * 2; in usbtv_fmt_vid_cap()
539 struct usbtv *usbtv = video_drvdata(file); in usbtv_g_std() local
540 *norm = usbtv->norm; in usbtv_g_std()
547 struct usbtv *usbtv = video_drvdata(file); in usbtv_s_std() local
550 ret = usbtv_select_norm(usbtv, norm); in usbtv_s_std()
557 struct usbtv *usbtv = video_drvdata(file); in usbtv_g_input() local
558 *i = usbtv->input; in usbtv_g_input()
564 struct usbtv *usbtv = video_drvdata(file); in usbtv_s_input() local
566 return usbtv_select_input(usbtv, i); in usbtv_s_input()
606 struct usbtv *usbtv = vb2_get_drv_priv(vq); in usbtv_queue_setup() local
607 unsigned size = USBTV_CHUNK * usbtv->n_chunks * 2 * sizeof(u32); in usbtv_queue_setup()
622 struct usbtv *usbtv = vb2_get_drv_priv(vb->vb2_queue); in usbtv_buf_queue() local
626 if (usbtv->udev == NULL) { in usbtv_buf_queue()
631 spin_lock_irqsave(&usbtv->buflock, flags); in usbtv_buf_queue()
632 list_add_tail(&buf->list, &usbtv->bufs); in usbtv_buf_queue()
633 spin_unlock_irqrestore(&usbtv->buflock, flags); in usbtv_buf_queue()
638 struct usbtv *usbtv = vb2_get_drv_priv(vq); in usbtv_start_streaming() local
640 if (usbtv->udev == NULL) in usbtv_start_streaming()
643 usbtv->sequence = 0; in usbtv_start_streaming()
644 return usbtv_start(usbtv); in usbtv_start_streaming()
649 struct usbtv *usbtv = vb2_get_drv_priv(vq); in usbtv_stop_streaming() local
651 if (usbtv->udev) in usbtv_stop_streaming()
652 usbtv_stop(usbtv); in usbtv_stop_streaming()
664 struct usbtv *usbtv = container_of(v4l2_dev, struct usbtv, v4l2_dev); in usbtv_release() local
666 v4l2_device_unregister(&usbtv->v4l2_dev); in usbtv_release()
667 vb2_queue_release(&usbtv->vb2q); in usbtv_release()
668 kfree(usbtv); in usbtv_release()
671 int usbtv_video_init(struct usbtv *usbtv) in usbtv_video_init() argument
675 (void)usbtv_configure_for_norm(usbtv, V4L2_STD_525_60); in usbtv_video_init()
677 spin_lock_init(&usbtv->buflock); in usbtv_video_init()
678 mutex_init(&usbtv->v4l2_lock); in usbtv_video_init()
679 mutex_init(&usbtv->vb2q_lock); in usbtv_video_init()
680 INIT_LIST_HEAD(&usbtv->bufs); in usbtv_video_init()
683 usbtv->vb2q.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; in usbtv_video_init()
684 usbtv->vb2q.io_modes = VB2_MMAP | VB2_USERPTR | VB2_READ; in usbtv_video_init()
685 usbtv->vb2q.drv_priv = usbtv; in usbtv_video_init()
686 usbtv->vb2q.buf_struct_size = sizeof(struct usbtv_buf); in usbtv_video_init()
687 usbtv->vb2q.ops = &usbtv_vb2_ops; in usbtv_video_init()
688 usbtv->vb2q.mem_ops = &vb2_vmalloc_memops; in usbtv_video_init()
689 usbtv->vb2q.timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; in usbtv_video_init()
690 usbtv->vb2q.lock = &usbtv->vb2q_lock; in usbtv_video_init()
691 ret = vb2_queue_init(&usbtv->vb2q); in usbtv_video_init()
693 dev_warn(usbtv->dev, "Could not initialize videobuf2 queue\n"); in usbtv_video_init()
698 usbtv->v4l2_dev.release = usbtv_release; in usbtv_video_init()
699 ret = v4l2_device_register(usbtv->dev, &usbtv->v4l2_dev); in usbtv_video_init()
701 dev_warn(usbtv->dev, "Could not register v4l2 device\n"); in usbtv_video_init()
706 strlcpy(usbtv->vdev.name, "usbtv", sizeof(usbtv->vdev.name)); in usbtv_video_init()
707 usbtv->vdev.v4l2_dev = &usbtv->v4l2_dev; in usbtv_video_init()
708 usbtv->vdev.release = video_device_release_empty; in usbtv_video_init()
709 usbtv->vdev.fops = &usbtv_fops; in usbtv_video_init()
710 usbtv->vdev.ioctl_ops = &usbtv_ioctl_ops; in usbtv_video_init()
711 usbtv->vdev.tvnorms = USBTV_TV_STD; in usbtv_video_init()
712 usbtv->vdev.queue = &usbtv->vb2q; in usbtv_video_init()
713 usbtv->vdev.lock = &usbtv->v4l2_lock; in usbtv_video_init()
714 video_set_drvdata(&usbtv->vdev, usbtv); in usbtv_video_init()
715 ret = video_register_device(&usbtv->vdev, VFL_TYPE_GRABBER, -1); in usbtv_video_init()
717 dev_warn(usbtv->dev, "Could not register video device\n"); in usbtv_video_init()
724 v4l2_device_unregister(&usbtv->v4l2_dev); in usbtv_video_init()
726 vb2_queue_release(&usbtv->vb2q); in usbtv_video_init()
731 void usbtv_video_free(struct usbtv *usbtv) in usbtv_video_free() argument
733 mutex_lock(&usbtv->vb2q_lock); in usbtv_video_free()
734 mutex_lock(&usbtv->v4l2_lock); in usbtv_video_free()
736 usbtv_stop(usbtv); in usbtv_video_free()
737 video_unregister_device(&usbtv->vdev); in usbtv_video_free()
738 v4l2_device_disconnect(&usbtv->v4l2_dev); in usbtv_video_free()
740 mutex_unlock(&usbtv->v4l2_lock); in usbtv_video_free()
741 mutex_unlock(&usbtv->vb2q_lock); in usbtv_video_free()
743 v4l2_device_put(&usbtv->v4l2_dev); in usbtv_video_free()