Lines Matching refs:dev

67 static void stk1160_set_std(struct stk1160 *dev)  in stk1160_set_std()  argument
110 if (dev->norm & V4L2_STD_525_60) { in stk1160_set_std()
113 stk1160_write_reg(dev, std525[i].reg, std525[i].val); in stk1160_set_std()
117 stk1160_write_reg(dev, std625[i].reg, std625[i].val); in stk1160_set_std()
122 static void stk1160_set_fmt(struct stk1160 *dev, in stk1160_set_fmt() argument
145 stk1160_write_reg(dev, STK1160_DMCTRL_H_UNITS, ctrl->col_n); in stk1160_set_fmt()
147 stk1160_write_reg(dev, STK1160_DMCTRL_V_UNITS, ctrl->row_n); in stk1160_set_fmt()
154 stk1160_write_reg(dev, STK1160_DMCTRL, val); in stk1160_set_fmt()
161 static bool stk1160_set_alternate(struct stk1160 *dev) in stk1160_set_alternate() argument
163 int i, prev_alt = dev->alt; in stk1160_set_alternate()
173 for (i = 0; i < dev->num_alt; i++) { in stk1160_set_alternate()
175 if (dev->alt_max_pkt_size[i] >= min_pkt_size) { in stk1160_set_alternate()
176 dev->alt = i; in stk1160_set_alternate()
182 } else if (dev->alt_max_pkt_size[i] > in stk1160_set_alternate()
183 dev->alt_max_pkt_size[dev->alt]) in stk1160_set_alternate()
184 dev->alt = i; in stk1160_set_alternate()
187 stk1160_dbg("setting alternate %d\n", dev->alt); in stk1160_set_alternate()
189 if (dev->alt != prev_alt) { in stk1160_set_alternate()
191 min_pkt_size, dev->alt); in stk1160_set_alternate()
193 dev->alt, dev->alt_max_pkt_size[dev->alt]); in stk1160_set_alternate()
194 usb_set_interface(dev->udev, 0, dev->alt); in stk1160_set_alternate()
197 new_pkt_size = dev->max_pkt_size != dev->alt_max_pkt_size[dev->alt]; in stk1160_set_alternate()
198 dev->max_pkt_size = dev->alt_max_pkt_size[dev->alt]; in stk1160_set_alternate()
203 static int stk1160_start_streaming(struct stk1160 *dev) in stk1160_start_streaming() argument
210 if (!dev->udev) in stk1160_start_streaming()
213 if (mutex_lock_interruptible(&dev->v4l_lock)) in stk1160_start_streaming()
220 new_pkt_size = stk1160_set_alternate(dev); in stk1160_start_streaming()
227 if (!dev->isoc_ctl.num_bufs || new_pkt_size) { in stk1160_start_streaming()
228 rc = stk1160_alloc_isoc(dev); in stk1160_start_streaming()
234 for (i = 0; i < dev->isoc_ctl.num_bufs; i++) { in stk1160_start_streaming()
235 struct stk1160_urb *stk_urb = &dev->isoc_ctl.urb_ctl[i]; in stk1160_start_streaming()
237 dma_sync_sgtable_for_device(stk1160_get_dmadev(dev), stk_urb->sgt, in stk1160_start_streaming()
239 rc = usb_submit_urb(dev->isoc_ctl.urb_ctl[i].urb, GFP_KERNEL); in stk1160_start_streaming()
247 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_stream, 1); in stk1160_start_streaming()
249 dev->sequence = 0; in stk1160_start_streaming()
252 stk1160_write_reg(dev, STK1160_DCTRL, 0xb3); in stk1160_start_streaming()
253 stk1160_write_reg(dev, STK1160_DCTRL+3, 0x00); in stk1160_start_streaming()
257 mutex_unlock(&dev->v4l_lock); in stk1160_start_streaming()
262 stk1160_uninit_isoc(dev); in stk1160_start_streaming()
264 usb_set_interface(dev->udev, 0, 0); in stk1160_start_streaming()
265 stk1160_clear_queue(dev, VB2_BUF_STATE_QUEUED); in stk1160_start_streaming()
267 mutex_unlock(&dev->v4l_lock); in stk1160_start_streaming()
273 static void stk1160_stop_hw(struct stk1160 *dev) in stk1160_stop_hw() argument
276 if (!dev->udev) in stk1160_stop_hw()
280 dev->alt = 0; in stk1160_stop_hw()
281 stk1160_dbg("setting alternate %d\n", dev->alt); in stk1160_stop_hw()
282 usb_set_interface(dev->udev, 0, 0); in stk1160_stop_hw()
285 stk1160_write_reg(dev, STK1160_DCTRL, 0x00); in stk1160_stop_hw()
286 stk1160_write_reg(dev, STK1160_DCTRL+3, 0x00); in stk1160_stop_hw()
289 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_stream, 0); in stk1160_stop_hw()
292 static int stk1160_stop_streaming(struct stk1160 *dev) in stk1160_stop_streaming() argument
294 if (mutex_lock_interruptible(&dev->v4l_lock)) in stk1160_stop_streaming()
302 stk1160_cancel_isoc(dev); in stk1160_stop_streaming()
309 stk1160_free_isoc(dev); in stk1160_stop_streaming()
311 stk1160_stop_hw(dev); in stk1160_stop_streaming()
313 stk1160_clear_queue(dev, VB2_BUF_STATE_ERROR); in stk1160_stop_streaming()
317 mutex_unlock(&dev->v4l_lock); in stk1160_stop_streaming()
338 struct stk1160 *dev = video_drvdata(file); in vidioc_querycap() local
342 usb_make_path(dev->udev, cap->bus_info, sizeof(cap->bus_info)); in vidioc_querycap()
359 struct stk1160 *dev = video_drvdata(file); in vidioc_g_fmt_vid_cap() local
361 f->fmt.pix.width = dev->width; in vidioc_g_fmt_vid_cap()
362 f->fmt.pix.height = dev->height; in vidioc_g_fmt_vid_cap()
364 f->fmt.pix.pixelformat = dev->fmt->fourcc; in vidioc_g_fmt_vid_cap()
365 f->fmt.pix.bytesperline = dev->width * 2; in vidioc_g_fmt_vid_cap()
366 f->fmt.pix.sizeimage = dev->height * f->fmt.pix.bytesperline; in vidioc_g_fmt_vid_cap()
372 static int stk1160_try_fmt(struct stk1160 *dev, struct v4l2_format *f, in stk1160_try_fmt() argument
382 base_height = (dev->norm & V4L2_STD_525_60) ? 480 : 576; in stk1160_try_fmt()
455 f->fmt.pix.pixelformat = dev->fmt->fourcc; in stk1160_try_fmt()
478 struct stk1160 *dev = video_drvdata(file); in vidioc_try_fmt_vid_cap() local
480 return stk1160_try_fmt(dev, f, NULL); in vidioc_try_fmt_vid_cap()
486 struct stk1160 *dev = video_drvdata(file); in vidioc_s_fmt_vid_cap() local
487 struct vb2_queue *q = &dev->vb_vidq; in vidioc_s_fmt_vid_cap()
494 rc = stk1160_try_fmt(dev, f, &ctrl); in vidioc_s_fmt_vid_cap()
497 dev->width = f->fmt.pix.width; in vidioc_s_fmt_vid_cap()
498 dev->height = f->fmt.pix.height; in vidioc_s_fmt_vid_cap()
499 stk1160_set_fmt(dev, &ctrl); in vidioc_s_fmt_vid_cap()
506 struct stk1160 *dev = video_drvdata(file); in vidioc_querystd() local
507 v4l2_device_call_all(&dev->v4l2_dev, 0, video, querystd, norm); in vidioc_querystd()
513 struct stk1160 *dev = video_drvdata(file); in vidioc_g_std() local
515 *norm = dev->norm; in vidioc_g_std()
521 struct stk1160 *dev = video_drvdata(file); in vidioc_s_std() local
522 struct vb2_queue *q = &dev->vb_vidq; in vidioc_s_std()
524 if (dev->norm == norm) in vidioc_s_std()
531 if (!dev->udev) in vidioc_s_std()
535 dev->width = 720; in vidioc_s_std()
536 dev->height = (norm & V4L2_STD_525_60) ? 480 : 576; in vidioc_s_std()
537 dev->norm = norm; in vidioc_s_std()
539 stk1160_set_std(dev); in vidioc_s_std()
542 stk1160_set_fmt(dev, NULL); in vidioc_s_std()
544 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std, in vidioc_s_std()
545 dev->norm); in vidioc_s_std()
554 struct stk1160 *dev = video_drvdata(file); in vidioc_enum_input() local
566 i->std = dev->vdev.tvnorms; in vidioc_enum_input()
572 struct stk1160 *dev = video_drvdata(file); in vidioc_g_input() local
573 *i = dev->ctl_input; in vidioc_g_input()
579 struct stk1160 *dev = video_drvdata(file); in vidioc_s_input() local
584 dev->ctl_input = i; in vidioc_s_input()
586 stk1160_select_input(dev); in vidioc_s_input()
595 struct stk1160 *dev = video_drvdata(file); in vidioc_g_register() local
600 rc = stk1160_read_reg(dev, reg->reg, &val); in vidioc_g_register()
610 struct stk1160 *dev = video_drvdata(file); in vidioc_s_register() local
613 return stk1160_write_reg(dev, reg->reg, reg->val); in vidioc_s_register()
658 struct stk1160 *dev = vb2_get_drv_priv(vq); in queue_setup() local
661 size = dev->width * dev->height * 2; in queue_setup()
687 struct stk1160 *dev = vb2_get_drv_priv(vb->vb2_queue); in buffer_queue() local
692 spin_lock_irqsave(&dev->buf_lock, flags); in buffer_queue()
693 if (!dev->udev) { in buffer_queue()
710 if (buf->length < dev->width * dev->height * 2) in buffer_queue()
713 list_add_tail(&buf->list, &dev->avail_bufs); in buffer_queue()
716 spin_unlock_irqrestore(&dev->buf_lock, flags); in buffer_queue()
721 struct stk1160 *dev = vb2_get_drv_priv(vq); in start_streaming() local
722 return stk1160_start_streaming(dev); in start_streaming()
728 struct stk1160 *dev = vb2_get_drv_priv(vq); in stop_streaming() local
729 stk1160_stop_streaming(dev); in stop_streaming()
752 void stk1160_clear_queue(struct stk1160 *dev, enum vb2_buffer_state vb2_state) in stk1160_clear_queue() argument
758 spin_lock_irqsave(&dev->buf_lock, flags); in stk1160_clear_queue()
759 while (!list_empty(&dev->avail_bufs)) { in stk1160_clear_queue()
760 buf = list_first_entry(&dev->avail_bufs, in stk1160_clear_queue()
769 if (dev->isoc_ctl.buf) { in stk1160_clear_queue()
770 buf = dev->isoc_ctl.buf; in stk1160_clear_queue()
771 dev->isoc_ctl.buf = NULL; in stk1160_clear_queue()
777 spin_unlock_irqrestore(&dev->buf_lock, flags); in stk1160_clear_queue()
780 int stk1160_vb2_setup(struct stk1160 *dev) in stk1160_vb2_setup() argument
785 q = &dev->vb_vidq; in stk1160_vb2_setup()
788 q->drv_priv = dev; in stk1160_vb2_setup()
792 q->lock = &dev->vb_queue_lock; in stk1160_vb2_setup()
800 INIT_LIST_HEAD(&dev->avail_bufs); in stk1160_vb2_setup()
805 int stk1160_video_register(struct stk1160 *dev) in stk1160_video_register() argument
810 dev->vdev = v4l_template; in stk1160_video_register()
811 dev->vdev.queue = &dev->vb_vidq; in stk1160_video_register()
817 dev->vdev.lock = &dev->v4l_lock; in stk1160_video_register()
820 dev->vdev.v4l2_dev = &dev->v4l2_dev; in stk1160_video_register()
821 dev->vdev.device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING | in stk1160_video_register()
825 dev->norm = V4L2_STD_NTSC_M; in stk1160_video_register()
826 dev->width = 720; in stk1160_video_register()
827 dev->height = 480; in stk1160_video_register()
830 dev->fmt = &format[0]; in stk1160_video_register()
831 stk1160_set_std(dev); in stk1160_video_register()
833 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std, in stk1160_video_register()
834 dev->norm); in stk1160_video_register()
836 video_set_drvdata(&dev->vdev, dev); in stk1160_video_register()
837 rc = video_register_device(&dev->vdev, VFL_TYPE_VIDEO, -1); in stk1160_video_register()
843 v4l2_info(&dev->v4l2_dev, "V4L2 device registered as %s\n", in stk1160_video_register()
844 video_device_node_name(&dev->vdev)); in stk1160_video_register()