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.v4l2_buf.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()
605 struct usbtv *usbtv = vb2_get_drv_priv(vq); in usbtv_queue_setup() local
610 sizes[0] = USBTV_CHUNK * usbtv->n_chunks * 2 * sizeof(u32); in usbtv_queue_setup()
617 struct usbtv *usbtv = vb2_get_drv_priv(vb->vb2_queue); in usbtv_buf_queue() local
621 if (usbtv->udev == NULL) { in usbtv_buf_queue()
626 spin_lock_irqsave(&usbtv->buflock, flags); in usbtv_buf_queue()
627 list_add_tail(&buf->list, &usbtv->bufs); in usbtv_buf_queue()
628 spin_unlock_irqrestore(&usbtv->buflock, flags); in usbtv_buf_queue()
633 struct usbtv *usbtv = vb2_get_drv_priv(vq); in usbtv_start_streaming() local
635 if (usbtv->udev == NULL) in usbtv_start_streaming()
638 return usbtv_start(usbtv); in usbtv_start_streaming()
643 struct usbtv *usbtv = vb2_get_drv_priv(vq); in usbtv_stop_streaming() local
645 if (usbtv->udev) in usbtv_stop_streaming()
646 usbtv_stop(usbtv); in usbtv_stop_streaming()
658 struct usbtv *usbtv = container_of(v4l2_dev, struct usbtv, v4l2_dev); in usbtv_release() local
660 v4l2_device_unregister(&usbtv->v4l2_dev); in usbtv_release()
661 vb2_queue_release(&usbtv->vb2q); in usbtv_release()
662 kfree(usbtv); in usbtv_release()
665 int usbtv_video_init(struct usbtv *usbtv) in usbtv_video_init() argument
669 (void)usbtv_configure_for_norm(usbtv, V4L2_STD_525_60); in usbtv_video_init()
671 spin_lock_init(&usbtv->buflock); in usbtv_video_init()
672 mutex_init(&usbtv->v4l2_lock); in usbtv_video_init()
673 mutex_init(&usbtv->vb2q_lock); in usbtv_video_init()
674 INIT_LIST_HEAD(&usbtv->bufs); in usbtv_video_init()
677 usbtv->vb2q.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; in usbtv_video_init()
678 usbtv->vb2q.io_modes = VB2_MMAP | VB2_USERPTR | VB2_READ; in usbtv_video_init()
679 usbtv->vb2q.drv_priv = usbtv; in usbtv_video_init()
680 usbtv->vb2q.buf_struct_size = sizeof(struct usbtv_buf); in usbtv_video_init()
681 usbtv->vb2q.ops = &usbtv_vb2_ops; in usbtv_video_init()
682 usbtv->vb2q.mem_ops = &vb2_vmalloc_memops; in usbtv_video_init()
683 usbtv->vb2q.timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; in usbtv_video_init()
684 usbtv->vb2q.lock = &usbtv->vb2q_lock; in usbtv_video_init()
685 ret = vb2_queue_init(&usbtv->vb2q); in usbtv_video_init()
687 dev_warn(usbtv->dev, "Could not initialize videobuf2 queue\n"); in usbtv_video_init()
692 usbtv->v4l2_dev.release = usbtv_release; in usbtv_video_init()
693 ret = v4l2_device_register(usbtv->dev, &usbtv->v4l2_dev); in usbtv_video_init()
695 dev_warn(usbtv->dev, "Could not register v4l2 device\n"); in usbtv_video_init()
700 strlcpy(usbtv->vdev.name, "usbtv", sizeof(usbtv->vdev.name)); in usbtv_video_init()
701 usbtv->vdev.v4l2_dev = &usbtv->v4l2_dev; in usbtv_video_init()
702 usbtv->vdev.release = video_device_release_empty; in usbtv_video_init()
703 usbtv->vdev.fops = &usbtv_fops; in usbtv_video_init()
704 usbtv->vdev.ioctl_ops = &usbtv_ioctl_ops; in usbtv_video_init()
705 usbtv->vdev.tvnorms = USBTV_TV_STD; in usbtv_video_init()
706 usbtv->vdev.queue = &usbtv->vb2q; in usbtv_video_init()
707 usbtv->vdev.lock = &usbtv->v4l2_lock; in usbtv_video_init()
708 video_set_drvdata(&usbtv->vdev, usbtv); in usbtv_video_init()
709 ret = video_register_device(&usbtv->vdev, VFL_TYPE_GRABBER, -1); in usbtv_video_init()
711 dev_warn(usbtv->dev, "Could not register video device\n"); in usbtv_video_init()
718 v4l2_device_unregister(&usbtv->v4l2_dev); in usbtv_video_init()
720 vb2_queue_release(&usbtv->vb2q); in usbtv_video_init()
725 void usbtv_video_free(struct usbtv *usbtv) in usbtv_video_free() argument
727 mutex_lock(&usbtv->vb2q_lock); in usbtv_video_free()
728 mutex_lock(&usbtv->v4l2_lock); in usbtv_video_free()
730 usbtv_stop(usbtv); in usbtv_video_free()
731 video_unregister_device(&usbtv->vdev); in usbtv_video_free()
732 v4l2_device_disconnect(&usbtv->v4l2_dev); in usbtv_video_free()
734 mutex_unlock(&usbtv->v4l2_lock); in usbtv_video_free()
735 mutex_unlock(&usbtv->vb2q_lock); in usbtv_video_free()
737 v4l2_device_put(&usbtv->v4l2_dev); in usbtv_video_free()