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;
143 static int usbtv_select_norm(struct usbtv *usbtv, v4l2_std_id norm)
237 ret = usbtv_configure_for_norm(usbtv, norm);
247 ret = usbtv_set_regs(usbtv, ntsc, ARRAY_SIZE(ntsc));
249 ret = usbtv_set_regs(usbtv, pal, ARRAY_SIZE(pal));
251 ret = usbtv_set_regs(usbtv, secam, ARRAY_SIZE(secam));
261 ret = usbtv_set_regs(usbtv, cfg, ARRAY_SIZE(cfg));
267 static int usbtv_setup_capture(struct usbtv *usbtv)
333 ret = usbtv_set_regs(usbtv, setup, ARRAY_SIZE(setup));
337 ret = usbtv_select_norm(usbtv, usbtv->norm);
341 ret = usbtv_select_input(usbtv, usbtv->input);
345 ret = v4l2_ctrl_handler_setup(&usbtv->ctrl);
391 static void usbtv_image_chunk(struct usbtv *usbtv, __be32 *chunk)
404 if (chunk_no >= usbtv->n_chunks)
409 usbtv->frame_id = frame_id;
410 usbtv->chunks_done = 0;
413 if (usbtv->frame_id != frame_id)
416 spin_lock_irqsave(&usbtv->buflock, flags);
417 if (list_empty(&usbtv->bufs)) {
419 spin_unlock_irqrestore(&usbtv->buflock, flags);
424 buf = list_first_entry(&usbtv->bufs, struct usbtv_buf, list);
429 usbtv->chunks_done++;
432 if (chunk_no == usbtv->n_chunks-1) {
434 if (odd && !usbtv->last_odd) {
436 enum vb2_buffer_state state = usbtv->chunks_done ==
437 usbtv->n_chunks ?
442 buf->vb.sequence = usbtv->sequence++;
448 usbtv->last_odd = odd;
451 spin_unlock_irqrestore(&usbtv->buflock, flags);
460 struct usbtv *usbtv = (struct usbtv *)ip->context;
474 dev_warn(usbtv->dev, "Bad response for ISO request.\n");
485 usbtv_image_chunk(usbtv,
492 dev_warn(usbtv->dev, "Could not resubmit ISO URB\n");
495 static struct urb *usbtv_setup_iso_transfer(struct usbtv *usbtv)
498 int size = usbtv->iso_size;
505 ip->dev = usbtv->udev;
506 ip->context = usbtv;
507 ip->pipe = usb_rcvisocpipe(usbtv->udev, USBTV_VIDEO_ENDP);
527 static void usbtv_stop(struct usbtv *usbtv)
534 struct urb *ip = usbtv->isoc_urbs[i];
541 usbtv->isoc_urbs[i] = NULL;
545 spin_lock_irqsave(&usbtv->buflock, flags);
546 while (!list_empty(&usbtv->bufs)) {
547 struct usbtv_buf *buf = list_first_entry(&usbtv->bufs,
552 spin_unlock_irqrestore(&usbtv->buflock, flags);
555 static int usbtv_start(struct usbtv *usbtv)
560 usbtv_audio_suspend(usbtv);
562 ret = usb_set_interface(usbtv->udev, 0, 0);
566 ret = usbtv_setup_capture(usbtv);
570 ret = usb_set_interface(usbtv->udev, 0, 1);
574 usbtv_audio_resume(usbtv);
579 ip = usbtv_setup_iso_transfer(usbtv);
584 usbtv->isoc_urbs[i] = ip;
594 usbtv_stop(usbtv);
601 struct usbtv *dev = video_drvdata(file);
603 strscpy(cap->driver, "usbtv", sizeof(cap->driver));
604 strscpy(cap->card, "usbtv", sizeof(cap->card));
612 struct usbtv *dev = video_drvdata(file);
643 struct usbtv *usbtv = video_drvdata(file);
645 f->fmt.pix.width = usbtv->width;
646 f->fmt.pix.height = usbtv->height;
649 f->fmt.pix.bytesperline = usbtv->width * 2;
658 struct usbtv *usbtv = video_drvdata(file);
659 *norm = usbtv->norm;
666 struct usbtv *usbtv = video_drvdata(file);
669 ret = usbtv_select_norm(usbtv, norm);
676 struct usbtv *usbtv = video_drvdata(file);
677 *i = usbtv->input;
683 struct usbtv *usbtv = video_drvdata(file);
685 return usbtv_select_input(usbtv, i);
724 struct usbtv *usbtv = vb2_get_drv_priv(vq);
725 unsigned size = USBTV_CHUNK * usbtv->n_chunks * 2 * sizeof(u32);
740 struct usbtv *usbtv = vb2_get_drv_priv(vb->vb2_queue);
744 if (usbtv->udev == NULL) {
749 spin_lock_irqsave(&usbtv->buflock, flags);
750 list_add_tail(&buf->list, &usbtv->bufs);
751 spin_unlock_irqrestore(&usbtv->buflock, flags);
756 struct usbtv *usbtv = vb2_get_drv_priv(vq);
758 if (usbtv->udev == NULL)
761 usbtv->last_odd = 1;
762 usbtv->sequence = 0;
763 return usbtv_start(usbtv);
768 struct usbtv *usbtv = vb2_get_drv_priv(vq);
770 if (usbtv->udev)
771 usbtv_stop(usbtv);
785 struct usbtv *usbtv = container_of(ctrl->handler, struct usbtv,
800 ret = usb_control_msg(usbtv->udev,
801 usb_rcvctrlpipe(usbtv->udev, 0), USBTV_CONTROL_REG,
852 ret = usb_control_msg(usbtv->udev, usb_sndctrlpipe(usbtv->udev, 0),
859 dev_warn(usbtv->dev, "Failed to submit a control request.\n");
871 struct usbtv *usbtv = container_of(v4l2_dev, struct usbtv, v4l2_dev);
873 v4l2_device_unregister(&usbtv->v4l2_dev);
874 v4l2_ctrl_handler_free(&usbtv->ctrl);
875 kfree(usbtv);
878 int usbtv_video_init(struct usbtv *usbtv)
882 (void)usbtv_configure_for_norm(usbtv, V4L2_STD_525_60);
884 spin_lock_init(&usbtv->buflock);
885 mutex_init(&usbtv->v4l2_lock);
886 mutex_init(&usbtv->vb2q_lock);
887 INIT_LIST_HEAD(&usbtv->bufs);
890 usbtv->vb2q.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
891 usbtv->vb2q.io_modes = VB2_MMAP | VB2_USERPTR | VB2_READ;
892 usbtv->vb2q.drv_priv = usbtv;
893 usbtv->vb2q.buf_struct_size = sizeof(struct usbtv_buf);
894 usbtv->vb2q.ops = &usbtv_vb2_ops;
895 usbtv->vb2q.mem_ops = &vb2_vmalloc_memops;
896 usbtv->vb2q.timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
897 usbtv->vb2q.lock = &usbtv->vb2q_lock;
898 ret = vb2_queue_init(&usbtv->vb2q);
900 dev_warn(usbtv->dev, "Could not initialize videobuf2 queue\n");
905 v4l2_ctrl_handler_init(&usbtv->ctrl, 4);
906 v4l2_ctrl_new_std(&usbtv->ctrl, &usbtv_ctrl_ops,
908 v4l2_ctrl_new_std(&usbtv->ctrl, &usbtv_ctrl_ops,
910 v4l2_ctrl_new_std(&usbtv->ctrl, &usbtv_ctrl_ops,
912 v4l2_ctrl_new_std(&usbtv->ctrl, &usbtv_ctrl_ops,
914 v4l2_ctrl_new_std(&usbtv->ctrl, &usbtv_ctrl_ops,
916 ret = usbtv->ctrl.error;
918 dev_warn(usbtv->dev, "Could not initialize controls\n");
923 usbtv->v4l2_dev.ctrl_handler = &usbtv->ctrl;
924 usbtv->v4l2_dev.release = usbtv_release;
925 ret = v4l2_device_register(usbtv->dev, &usbtv->v4l2_dev);
927 dev_warn(usbtv->dev, "Could not register v4l2 device\n");
932 strscpy(usbtv->vdev.name, "usbtv", sizeof(usbtv->vdev.name));
933 usbtv->vdev.v4l2_dev = &usbtv->v4l2_dev;
934 usbtv->vdev.release = video_device_release_empty;
935 usbtv->vdev.fops = &usbtv_fops;
936 usbtv->vdev.ioctl_ops = &usbtv_ioctl_ops;
937 usbtv->vdev.tvnorms = USBTV_TV_STD;
938 usbtv->vdev.queue = &usbtv->vb2q;
939 usbtv->vdev.lock = &usbtv->v4l2_lock;
940 usbtv->vdev.device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_READWRITE |
942 video_set_drvdata(&usbtv->vdev, usbtv);
943 ret = video_register_device(&usbtv->vdev, VFL_TYPE_VIDEO, -1);
945 dev_warn(usbtv->dev, "Could not register video device\n");
952 v4l2_device_unregister(&usbtv->v4l2_dev);
955 v4l2_ctrl_handler_free(&usbtv->ctrl);
960 void usbtv_video_free(struct usbtv *usbtv)
962 mutex_lock(&usbtv->vb2q_lock);
963 mutex_lock(&usbtv->v4l2_lock);
965 usbtv_stop(usbtv);
966 vb2_video_unregister_device(&usbtv->vdev);
967 v4l2_device_disconnect(&usbtv->v4l2_dev);
969 mutex_unlock(&usbtv->v4l2_lock);
970 mutex_unlock(&usbtv->vb2q_lock);
972 v4l2_device_put(&usbtv->v4l2_dev);