Lines Matching refs:dev
54 static void stk1160_set_std(struct stk1160 *dev) in stk1160_set_std() argument
97 if (dev->norm & V4L2_STD_525_60) { in stk1160_set_std()
100 stk1160_write_reg(dev, std525[i].reg, std525[i].val); in stk1160_set_std()
104 stk1160_write_reg(dev, std625[i].reg, std625[i].val); in stk1160_set_std()
113 static bool stk1160_set_alternate(struct stk1160 *dev) in stk1160_set_alternate() argument
115 int i, prev_alt = dev->alt; in stk1160_set_alternate()
125 for (i = 0; i < dev->num_alt; i++) { in stk1160_set_alternate()
127 if (dev->alt_max_pkt_size[i] >= min_pkt_size) { in stk1160_set_alternate()
128 dev->alt = i; in stk1160_set_alternate()
134 } else if (dev->alt_max_pkt_size[i] > in stk1160_set_alternate()
135 dev->alt_max_pkt_size[dev->alt]) in stk1160_set_alternate()
136 dev->alt = i; in stk1160_set_alternate()
139 stk1160_info("setting alternate %d\n", dev->alt); in stk1160_set_alternate()
141 if (dev->alt != prev_alt) { in stk1160_set_alternate()
143 min_pkt_size, dev->alt); in stk1160_set_alternate()
145 dev->alt, dev->alt_max_pkt_size[dev->alt]); in stk1160_set_alternate()
146 usb_set_interface(dev->udev, 0, dev->alt); in stk1160_set_alternate()
149 new_pkt_size = dev->max_pkt_size != dev->alt_max_pkt_size[dev->alt]; in stk1160_set_alternate()
150 dev->max_pkt_size = dev->alt_max_pkt_size[dev->alt]; in stk1160_set_alternate()
155 static int stk1160_start_streaming(struct stk1160 *dev) in stk1160_start_streaming() argument
162 if (!dev->udev) in stk1160_start_streaming()
165 if (mutex_lock_interruptible(&dev->v4l_lock)) in stk1160_start_streaming()
172 new_pkt_size = stk1160_set_alternate(dev); in stk1160_start_streaming()
179 if (!dev->isoc_ctl.num_bufs || new_pkt_size) { in stk1160_start_streaming()
180 rc = stk1160_alloc_isoc(dev); in stk1160_start_streaming()
186 for (i = 0; i < dev->isoc_ctl.num_bufs; i++) { in stk1160_start_streaming()
187 rc = usb_submit_urb(dev->isoc_ctl.urb[i], GFP_KERNEL); in stk1160_start_streaming()
195 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_stream, 1); in stk1160_start_streaming()
198 stk1160_write_reg(dev, STK1160_DCTRL, 0xb3); in stk1160_start_streaming()
199 stk1160_write_reg(dev, STK1160_DCTRL+3, 0x00); in stk1160_start_streaming()
203 mutex_unlock(&dev->v4l_lock); in stk1160_start_streaming()
208 stk1160_uninit_isoc(dev); in stk1160_start_streaming()
210 usb_set_interface(dev->udev, 0, 0); in stk1160_start_streaming()
211 stk1160_clear_queue(dev); in stk1160_start_streaming()
213 mutex_unlock(&dev->v4l_lock); in stk1160_start_streaming()
219 static void stk1160_stop_hw(struct stk1160 *dev) in stk1160_stop_hw() argument
222 if (!dev->udev) in stk1160_stop_hw()
226 dev->alt = 0; in stk1160_stop_hw()
227 stk1160_info("setting alternate %d\n", dev->alt); in stk1160_stop_hw()
228 usb_set_interface(dev->udev, 0, 0); in stk1160_stop_hw()
231 stk1160_write_reg(dev, STK1160_DCTRL, 0x00); in stk1160_stop_hw()
232 stk1160_write_reg(dev, STK1160_DCTRL+3, 0x00); in stk1160_stop_hw()
235 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_stream, 0); in stk1160_stop_hw()
238 static int stk1160_stop_streaming(struct stk1160 *dev) in stk1160_stop_streaming() argument
240 if (mutex_lock_interruptible(&dev->v4l_lock)) in stk1160_stop_streaming()
248 stk1160_cancel_isoc(dev); in stk1160_stop_streaming()
255 stk1160_free_isoc(dev); in stk1160_stop_streaming()
257 stk1160_stop_hw(dev); in stk1160_stop_streaming()
259 stk1160_clear_queue(dev); in stk1160_stop_streaming()
263 mutex_unlock(&dev->v4l_lock); in stk1160_stop_streaming()
284 struct stk1160 *dev = video_drvdata(file); in vidioc_querycap() local
288 usb_make_path(dev->udev, cap->bus_info, sizeof(cap->bus_info)); in vidioc_querycap()
311 struct stk1160 *dev = video_drvdata(file); in vidioc_g_fmt_vid_cap() local
313 f->fmt.pix.width = dev->width; in vidioc_g_fmt_vid_cap()
314 f->fmt.pix.height = dev->height; in vidioc_g_fmt_vid_cap()
316 f->fmt.pix.pixelformat = dev->fmt->fourcc; in vidioc_g_fmt_vid_cap()
317 f->fmt.pix.bytesperline = dev->width * 2; in vidioc_g_fmt_vid_cap()
318 f->fmt.pix.sizeimage = dev->height * f->fmt.pix.bytesperline; in vidioc_g_fmt_vid_cap()
327 struct stk1160 *dev = video_drvdata(file); in vidioc_try_fmt_vid_cap() local
336 f->fmt.pix.pixelformat = dev->fmt->fourcc; in vidioc_try_fmt_vid_cap()
337 f->fmt.pix.width = dev->width; in vidioc_try_fmt_vid_cap()
338 f->fmt.pix.height = dev->height; in vidioc_try_fmt_vid_cap()
340 f->fmt.pix.bytesperline = dev->width * 2; in vidioc_try_fmt_vid_cap()
341 f->fmt.pix.sizeimage = dev->height * f->fmt.pix.bytesperline; in vidioc_try_fmt_vid_cap()
350 struct stk1160 *dev = video_drvdata(file); in vidioc_s_fmt_vid_cap() local
351 struct vb2_queue *q = &dev->vb_vidq; in vidioc_s_fmt_vid_cap()
365 struct stk1160 *dev = video_drvdata(file); in vidioc_querystd() local
366 v4l2_device_call_all(&dev->v4l2_dev, 0, video, querystd, norm); in vidioc_querystd()
372 struct stk1160 *dev = video_drvdata(file); in vidioc_g_std() local
374 *norm = dev->norm; in vidioc_g_std()
380 struct stk1160 *dev = video_drvdata(file); in vidioc_s_std() local
381 struct vb2_queue *q = &dev->vb_vidq; in vidioc_s_std()
383 if (dev->norm == norm) in vidioc_s_std()
390 if (!dev->udev) in vidioc_s_std()
394 dev->norm = norm; in vidioc_s_std()
397 if (dev->norm & V4L2_STD_525_60) { in vidioc_s_std()
398 dev->width = 720; in vidioc_s_std()
399 dev->height = 480; in vidioc_s_std()
400 } else if (dev->norm & V4L2_STD_625_50) { in vidioc_s_std()
401 dev->width = 720; in vidioc_s_std()
402 dev->height = 576; in vidioc_s_std()
408 stk1160_set_std(dev); in vidioc_s_std()
410 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std, in vidioc_s_std()
411 dev->norm); in vidioc_s_std()
420 struct stk1160 *dev = video_drvdata(file); in vidioc_enum_input() local
432 i->std = dev->vdev.tvnorms; in vidioc_enum_input()
438 struct stk1160 *dev = video_drvdata(file); in vidioc_g_input() local
439 *i = dev->ctl_input; in vidioc_g_input()
445 struct stk1160 *dev = video_drvdata(file); in vidioc_s_input() local
450 dev->ctl_input = i; in vidioc_s_input()
452 stk1160_select_input(dev); in vidioc_s_input()
461 struct stk1160 *dev = video_drvdata(file); in vidioc_g_register() local
466 rc = stk1160_read_reg(dev, reg->reg, &val); in vidioc_g_register()
476 struct stk1160 *dev = video_drvdata(file); in vidioc_s_register() local
479 return stk1160_write_reg(dev, reg->reg, reg->val); in vidioc_s_register()
523 struct stk1160 *dev = vb2_get_drv_priv(vq); in queue_setup() local
526 size = dev->width * dev->height * 2; in queue_setup()
549 struct stk1160 *dev = vb2_get_drv_priv(vb->vb2_queue); in buffer_queue() local
553 spin_lock_irqsave(&dev->buf_lock, flags); in buffer_queue()
554 if (!dev->udev) { in buffer_queue()
571 if (buf->length < dev->width * dev->height * 2) in buffer_queue()
574 list_add_tail(&buf->list, &dev->avail_bufs); in buffer_queue()
577 spin_unlock_irqrestore(&dev->buf_lock, flags); in buffer_queue()
582 struct stk1160 *dev = vb2_get_drv_priv(vq); in start_streaming() local
583 return stk1160_start_streaming(dev); in start_streaming()
589 struct stk1160 *dev = vb2_get_drv_priv(vq); in stop_streaming() local
590 stk1160_stop_streaming(dev); in stop_streaming()
613 void stk1160_clear_queue(struct stk1160 *dev) in stk1160_clear_queue() argument
619 spin_lock_irqsave(&dev->buf_lock, flags); in stk1160_clear_queue()
620 while (!list_empty(&dev->avail_bufs)) { in stk1160_clear_queue()
621 buf = list_first_entry(&dev->avail_bufs, in stk1160_clear_queue()
630 if (dev->isoc_ctl.buf) { in stk1160_clear_queue()
631 buf = dev->isoc_ctl.buf; in stk1160_clear_queue()
632 dev->isoc_ctl.buf = NULL; in stk1160_clear_queue()
638 spin_unlock_irqrestore(&dev->buf_lock, flags); in stk1160_clear_queue()
641 int stk1160_vb2_setup(struct stk1160 *dev) in stk1160_vb2_setup() argument
646 q = &dev->vb_vidq; in stk1160_vb2_setup()
649 q->drv_priv = dev; in stk1160_vb2_setup()
660 INIT_LIST_HEAD(&dev->avail_bufs); in stk1160_vb2_setup()
665 int stk1160_video_register(struct stk1160 *dev) in stk1160_video_register() argument
670 dev->vdev = v4l_template; in stk1160_video_register()
671 dev->vdev.queue = &dev->vb_vidq; in stk1160_video_register()
677 dev->vdev.lock = &dev->v4l_lock; in stk1160_video_register()
678 dev->vdev.queue->lock = &dev->vb_queue_lock; in stk1160_video_register()
681 dev->vdev.v4l2_dev = &dev->v4l2_dev; in stk1160_video_register()
684 dev->norm = V4L2_STD_NTSC_M; in stk1160_video_register()
685 dev->width = 720; in stk1160_video_register()
686 dev->height = 480; in stk1160_video_register()
689 dev->fmt = &format[0]; in stk1160_video_register()
690 stk1160_set_std(dev); in stk1160_video_register()
692 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std, in stk1160_video_register()
693 dev->norm); in stk1160_video_register()
695 video_set_drvdata(&dev->vdev, dev); in stk1160_video_register()
696 rc = video_register_device(&dev->vdev, VFL_TYPE_GRABBER, -1); in stk1160_video_register()
702 v4l2_info(&dev->v4l2_dev, "V4L2 device registered as %s\n", in stk1160_video_register()
703 video_device_node_name(&dev->vdev)); in stk1160_video_register()