Lines Matching refs:usbtv

48 #include "usbtv.h"
63 static int usbtv_configure_for_norm(struct usbtv *usbtv, v4l2_std_id norm)
76 usbtv->width = params->cap_width;
77 usbtv->height = params->cap_height;
78 usbtv->n_chunks = usbtv->width * usbtv->height
80 usbtv->norm = norm;
87 static int usbtv_select_input(struct usbtv *usbtv, int input)
109 ret = usbtv_set_regs(usbtv, composite, ARRAY_SIZE(composite));
112 ret = usbtv_set_regs(usbtv, svideo, ARRAY_SIZE(svideo));
119 usbtv->input = input;
145 static int usbtv_select_norm(struct usbtv *usbtv, v4l2_std_id norm)
239 ret = usbtv_configure_for_norm(usbtv, norm);
250 ret = usbtv_set_regs(usbtv, ntsc, ARRAY_SIZE(ntsc));
252 ret = usbtv_set_regs(usbtv, pal, ARRAY_SIZE(pal));
254 ret = usbtv_set_regs(usbtv, secam, ARRAY_SIZE(secam));
264 ret = usbtv_set_regs(usbtv, cfg, ARRAY_SIZE(cfg));
270 static int usbtv_setup_capture(struct usbtv *usbtv)
336 ret = usbtv_set_regs(usbtv, setup, ARRAY_SIZE(setup));
340 ret = usbtv_select_norm(usbtv, usbtv->norm);
344 ret = usbtv_select_input(usbtv, usbtv->input);
348 ret = v4l2_ctrl_handler_setup(&usbtv->ctrl);
394 static void usbtv_image_chunk(struct usbtv *usbtv, __be32 *chunk)
407 if (chunk_no >= usbtv->n_chunks)
412 usbtv->frame_id = frame_id;
413 usbtv->chunks_done = 0;
416 if (usbtv->frame_id != frame_id)
419 spin_lock_irqsave(&usbtv->buflock, flags);
420 if (list_empty(&usbtv->bufs)) {
422 spin_unlock_irqrestore(&usbtv->buflock, flags);
427 buf = list_first_entry(&usbtv->bufs, struct usbtv_buf, list);
432 usbtv->chunks_done++;
435 if (chunk_no == usbtv->n_chunks-1) {
437 if (odd && !usbtv->last_odd) {
439 enum vb2_buffer_state state = usbtv->chunks_done ==
440 usbtv->n_chunks ?
445 buf->vb.sequence = usbtv->sequence++;
451 usbtv->last_odd = odd;
454 spin_unlock_irqrestore(&usbtv->buflock, flags);
463 struct usbtv *usbtv = (struct usbtv *)ip->context;
477 dev_warn(usbtv->dev, "Bad response for ISO request.\n");
488 usbtv_image_chunk(usbtv,
495 dev_warn(usbtv->dev, "Could not resubmit ISO URB\n");
498 static struct urb *usbtv_setup_iso_transfer(struct usbtv *usbtv)
501 int size = usbtv->iso_size;
508 ip->dev = usbtv->udev;
509 ip->context = usbtv;
510 ip->pipe = usb_rcvisocpipe(usbtv->udev, USBTV_VIDEO_ENDP);
530 static void usbtv_stop(struct usbtv *usbtv)
537 struct urb *ip = usbtv->isoc_urbs[i];
544 usbtv->isoc_urbs[i] = NULL;
548 spin_lock_irqsave(&usbtv->buflock, flags);
549 while (!list_empty(&usbtv->bufs)) {
550 struct usbtv_buf *buf = list_first_entry(&usbtv->bufs,
555 spin_unlock_irqrestore(&usbtv->buflock, flags);
558 static int usbtv_start(struct usbtv *usbtv)
563 usbtv_audio_suspend(usbtv);
565 ret = usb_set_interface(usbtv->udev, 0, 0);
569 ret = usbtv_setup_capture(usbtv);
573 ret = usb_set_interface(usbtv->udev, 0, 1);
577 usbtv_audio_resume(usbtv);
582 ip = usbtv_setup_iso_transfer(usbtv);
587 usbtv->isoc_urbs[i] = ip;
597 usbtv_stop(usbtv);
604 struct usbtv *dev = video_drvdata(file);
606 strscpy(cap->driver, "usbtv", sizeof(cap->driver));
607 strscpy(cap->card, "usbtv", sizeof(cap->card));
615 struct usbtv *dev = video_drvdata(file);
646 struct usbtv *usbtv = video_drvdata(file);
648 f->fmt.pix.width = usbtv->width;
649 f->fmt.pix.height = usbtv->height;
652 f->fmt.pix.bytesperline = usbtv->width * 2;
661 struct usbtv *usbtv = video_drvdata(file);
662 *norm = usbtv->norm;
669 struct usbtv *usbtv = video_drvdata(file);
672 ret = usbtv_select_norm(usbtv, norm);
679 struct usbtv *usbtv = video_drvdata(file);
680 *i = usbtv->input;
686 struct usbtv *usbtv = video_drvdata(file);
688 return usbtv_select_input(usbtv, i);
727 struct usbtv *usbtv = vb2_get_drv_priv(vq);
728 unsigned size = USBTV_CHUNK * usbtv->n_chunks * 2 * sizeof(u32);
743 struct usbtv *usbtv = vb2_get_drv_priv(vb->vb2_queue);
747 if (usbtv->udev == NULL) {
752 spin_lock_irqsave(&usbtv->buflock, flags);
753 list_add_tail(&buf->list, &usbtv->bufs);
754 spin_unlock_irqrestore(&usbtv->buflock, flags);
759 struct usbtv *usbtv = vb2_get_drv_priv(vq);
761 if (usbtv->udev == NULL)
764 usbtv->last_odd = 1;
765 usbtv->sequence = 0;
766 return usbtv_start(usbtv);
771 struct usbtv *usbtv = vb2_get_drv_priv(vq);
773 if (usbtv->udev)
774 usbtv_stop(usbtv);
788 struct usbtv *usbtv = container_of(ctrl->handler, struct usbtv,
803 ret = usb_control_msg(usbtv->udev,
804 usb_rcvctrlpipe(usbtv->udev, 0), USBTV_CONTROL_REG,
855 ret = usb_control_msg(usbtv->udev, usb_sndctrlpipe(usbtv->udev, 0),
862 dev_warn(usbtv->dev, "Failed to submit a control request.\n");
874 struct usbtv *usbtv = container_of(v4l2_dev, struct usbtv, v4l2_dev);
876 v4l2_device_unregister(&usbtv->v4l2_dev);
877 v4l2_ctrl_handler_free(&usbtv->ctrl);
878 kfree(usbtv);
881 int usbtv_video_init(struct usbtv *usbtv)
885 (void)usbtv_configure_for_norm(usbtv, V4L2_STD_525_60);
887 spin_lock_init(&usbtv->buflock);
888 mutex_init(&usbtv->v4l2_lock);
889 mutex_init(&usbtv->vb2q_lock);
890 INIT_LIST_HEAD(&usbtv->bufs);
893 usbtv->vb2q.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
894 usbtv->vb2q.io_modes = VB2_MMAP | VB2_USERPTR | VB2_READ;
895 usbtv->vb2q.drv_priv = usbtv;
896 usbtv->vb2q.buf_struct_size = sizeof(struct usbtv_buf);
897 usbtv->vb2q.ops = &usbtv_vb2_ops;
898 usbtv->vb2q.mem_ops = &vb2_vmalloc_memops;
899 usbtv->vb2q.timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
900 usbtv->vb2q.lock = &usbtv->vb2q_lock;
901 ret = vb2_queue_init(&usbtv->vb2q);
903 dev_warn(usbtv->dev, "Could not initialize videobuf2 queue\n");
908 v4l2_ctrl_handler_init(&usbtv->ctrl, 4);
909 v4l2_ctrl_new_std(&usbtv->ctrl, &usbtv_ctrl_ops,
911 v4l2_ctrl_new_std(&usbtv->ctrl, &usbtv_ctrl_ops,
913 v4l2_ctrl_new_std(&usbtv->ctrl, &usbtv_ctrl_ops,
915 v4l2_ctrl_new_std(&usbtv->ctrl, &usbtv_ctrl_ops,
917 v4l2_ctrl_new_std(&usbtv->ctrl, &usbtv_ctrl_ops,
919 ret = usbtv->ctrl.error;
921 dev_warn(usbtv->dev, "Could not initialize controls\n");
926 usbtv->v4l2_dev.ctrl_handler = &usbtv->ctrl;
927 usbtv->v4l2_dev.release = usbtv_release;
928 ret = v4l2_device_register(usbtv->dev, &usbtv->v4l2_dev);
930 dev_warn(usbtv->dev, "Could not register v4l2 device\n");
935 strscpy(usbtv->vdev.name, "usbtv", sizeof(usbtv->vdev.name));
936 usbtv->vdev.v4l2_dev = &usbtv->v4l2_dev;
937 usbtv->vdev.release = video_device_release_empty;
938 usbtv->vdev.fops = &usbtv_fops;
939 usbtv->vdev.ioctl_ops = &usbtv_ioctl_ops;
940 usbtv->vdev.tvnorms = USBTV_TV_STD;
941 usbtv->vdev.queue = &usbtv->vb2q;
942 usbtv->vdev.lock = &usbtv->v4l2_lock;
943 usbtv->vdev.device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_READWRITE |
945 video_set_drvdata(&usbtv->vdev, usbtv);
946 ret = video_register_device(&usbtv->vdev, VFL_TYPE_VIDEO, -1);
948 dev_warn(usbtv->dev, "Could not register video device\n");
955 v4l2_device_unregister(&usbtv->v4l2_dev);
958 v4l2_ctrl_handler_free(&usbtv->ctrl);
963 void usbtv_video_free(struct usbtv *usbtv)
965 mutex_lock(&usbtv->vb2q_lock);
966 mutex_lock(&usbtv->v4l2_lock);
968 usbtv_stop(usbtv);
969 vb2_video_unregister_device(&usbtv->vdev);
970 v4l2_device_disconnect(&usbtv->v4l2_dev);
972 mutex_unlock(&usbtv->v4l2_lock);
973 mutex_unlock(&usbtv->vb2q_lock);
975 v4l2_device_put(&usbtv->v4l2_dev);