Lines Matching refs:dev

48 static inline void i2c_gate_ctrl(struct au0828_dev *dev, int val)  in i2c_gate_ctrl()  argument
50 if (dev->dvb.frontend && dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl) in i2c_gate_ctrl()
51 dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl(dev->dvb.frontend, val); in i2c_gate_ctrl()
54 static inline void print_err_status(struct au0828_dev *dev, in print_err_status() argument
93 static int check_dev(struct au0828_dev *dev) in check_dev() argument
95 if (test_bit(DEV_DISCONNECTED, &dev->dev_state)) { in check_dev()
100 if (test_bit(DEV_MISCONFIGURED, &dev->dev_state)) { in check_dev()
113 struct au0828_dev *dev = container_of(dma_q, struct au0828_dev, vidq); in au0828_irq_callback() local
132 spin_lock_irqsave(&dev->slock, flags); in au0828_irq_callback()
133 dev->isoc_ctl.isoc_copy(dev, urb); in au0828_irq_callback()
134 spin_unlock_irqrestore(&dev->slock, flags); in au0828_irq_callback()
148 dev->stream_state = STREAM_ON; in au0828_irq_callback()
154 static void au0828_uninit_isoc(struct au0828_dev *dev) in au0828_uninit_isoc() argument
161 dev->isoc_ctl.nfields = -1; in au0828_uninit_isoc()
162 for (i = 0; i < dev->isoc_ctl.num_bufs; i++) { in au0828_uninit_isoc()
163 urb = dev->isoc_ctl.urb[i]; in au0828_uninit_isoc()
170 if (dev->isoc_ctl.transfer_buffer[i]) { in au0828_uninit_isoc()
171 usb_free_coherent(dev->usbdev, in au0828_uninit_isoc()
173 dev->isoc_ctl.transfer_buffer[i], in au0828_uninit_isoc()
177 dev->isoc_ctl.urb[i] = NULL; in au0828_uninit_isoc()
179 dev->isoc_ctl.transfer_buffer[i] = NULL; in au0828_uninit_isoc()
182 kfree(dev->isoc_ctl.urb); in au0828_uninit_isoc()
183 kfree(dev->isoc_ctl.transfer_buffer); in au0828_uninit_isoc()
185 dev->isoc_ctl.urb = NULL; in au0828_uninit_isoc()
186 dev->isoc_ctl.transfer_buffer = NULL; in au0828_uninit_isoc()
187 dev->isoc_ctl.num_bufs = 0; in au0828_uninit_isoc()
189 dev->stream_state = STREAM_OFF; in au0828_uninit_isoc()
195 static int au0828_init_isoc(struct au0828_dev *dev, int max_packets, in au0828_init_isoc() argument
197 int (*isoc_copy) (struct au0828_dev *dev, struct urb *urb)) in au0828_init_isoc()
199 struct au0828_dmaqueue *dma_q = &dev->vidq; in au0828_init_isoc()
208 dev->isoc_ctl.isoc_copy = isoc_copy; in au0828_init_isoc()
209 dev->isoc_ctl.num_bufs = num_bufs; in au0828_init_isoc()
211 dev->isoc_ctl.urb = kcalloc(num_bufs, sizeof(void *), GFP_KERNEL); in au0828_init_isoc()
212 if (!dev->isoc_ctl.urb) { in au0828_init_isoc()
217 dev->isoc_ctl.transfer_buffer = kcalloc(num_bufs, sizeof(void *), in au0828_init_isoc()
219 if (!dev->isoc_ctl.transfer_buffer) { in au0828_init_isoc()
221 kfree(dev->isoc_ctl.urb); in au0828_init_isoc()
225 dev->isoc_ctl.max_pkt_size = max_pkt_size; in au0828_init_isoc()
226 dev->isoc_ctl.buf = NULL; in au0828_init_isoc()
228 sb_size = max_packets * dev->isoc_ctl.max_pkt_size; in au0828_init_isoc()
231 for (i = 0; i < dev->isoc_ctl.num_bufs; i++) { in au0828_init_isoc()
235 au0828_uninit_isoc(dev); in au0828_init_isoc()
238 dev->isoc_ctl.urb[i] = urb; in au0828_init_isoc()
240 dev->isoc_ctl.transfer_buffer[i] = usb_alloc_coherent(dev->usbdev, in au0828_init_isoc()
242 if (!dev->isoc_ctl.transfer_buffer[i]) { in au0828_init_isoc()
244 au0828_uninit_isoc(dev); in au0828_init_isoc()
247 memset(dev->isoc_ctl.transfer_buffer[i], 0, sb_size); in au0828_init_isoc()
249 pipe = usb_rcvisocpipe(dev->usbdev, in au0828_init_isoc()
250 dev->isoc_in_endpointaddr); in au0828_init_isoc()
252 usb_fill_int_urb(urb, dev->usbdev, pipe, in au0828_init_isoc()
253 dev->isoc_ctl.transfer_buffer[i], sb_size, in au0828_init_isoc()
263 dev->isoc_ctl.max_pkt_size; in au0828_init_isoc()
264 k += dev->isoc_ctl.max_pkt_size; in au0828_init_isoc()
269 for (i = 0; i < dev->isoc_ctl.num_bufs; i++) { in au0828_init_isoc()
270 rc = usb_submit_urb(dev->isoc_ctl.urb[i], GFP_ATOMIC); in au0828_init_isoc()
274 au0828_uninit_isoc(dev); in au0828_init_isoc()
285 static inline void buffer_filled(struct au0828_dev *dev, in buffer_filled() argument
296 vb->sequence = dev->frame_count++; in buffer_filled()
298 vb->sequence = dev->vbi_frame_count++; in buffer_filled()
308 static void au0828_copy_video(struct au0828_dev *dev, in au0828_copy_video() argument
316 int bytesperline = dev->width << 1; /* Assumes 16-bit depth @@@@ */ in au0828_copy_video()
380 dev->greenscreen_detected = 1; in au0828_copy_video()
392 struct au0828_dev *dev = container_of(dma_q, struct au0828_dev, vidq); in get_next_buf() local
396 dev->isoc_ctl.buf = NULL; in get_next_buf()
407 dev->isoc_ctl.buf = *buf; in get_next_buf()
412 static void au0828_copy_vbi(struct au0828_dev *dev, in au0828_copy_vbi() argument
422 if (dev == NULL) { in au0828_copy_vbi()
442 bytesperline = dev->vbi_width; in au0828_copy_vbi()
452 startwrite += bytesperline * dev->vbi_height; in au0828_copy_vbi()
467 struct au0828_dev *dev = container_of(dma_q, struct au0828_dev, vbiq); in vbi_get_next_buf() local
471 dev->isoc_ctl.vbi_buf = NULL; in vbi_get_next_buf()
482 dev->isoc_ctl.vbi_buf = *buf; in vbi_get_next_buf()
489 static inline int au0828_isoc_copy(struct au0828_dev *dev, struct urb *urb) in au0828_isoc_copy() argument
494 struct au0828_dmaqueue *vbi_dma_q = &dev->vbiq; in au0828_isoc_copy()
503 if (!dev) in au0828_isoc_copy()
506 if (test_bit(DEV_DISCONNECTED, &dev->dev_state) || in au0828_isoc_copy()
507 test_bit(DEV_MISCONFIGURED, &dev->dev_state)) in au0828_isoc_copy()
511 print_err_status(dev, -1, urb->status); in au0828_isoc_copy()
516 buf = dev->isoc_ctl.buf; in au0828_isoc_copy()
520 vbi_buf = dev->isoc_ctl.vbi_buf; in au0828_isoc_copy()
528 print_err_status(dev, i, status); in au0828_isoc_copy()
537 dev->max_pkt_size) { in au0828_isoc_copy()
555 buffer_filled(dev, vbi_dma_q, vbi_buf); in au0828_isoc_copy()
565 buffer_filled(dev, dma_q, buf); in au0828_isoc_copy()
575 if (dev->vid_timeout_running) in au0828_isoc_copy()
576 mod_timer(&dev->vid_timeout, in au0828_isoc_copy()
578 if (dev->vbi_timeout_running) in au0828_isoc_copy()
579 mod_timer(&dev->vbi_timeout, in au0828_isoc_copy()
597 dev->vbi_read = 0; in au0828_isoc_copy()
602 vbi_field_size = dev->vbi_width * dev->vbi_height * 2; in au0828_isoc_copy()
603 if (dev->vbi_read < vbi_field_size) { in au0828_isoc_copy()
604 remain = vbi_field_size - dev->vbi_read; in au0828_isoc_copy()
611 au0828_copy_vbi(dev, vbi_dma_q, vbi_buf, p, in au0828_isoc_copy()
616 dev->vbi_read += lencopy; in au0828_isoc_copy()
619 if (dev->vbi_read >= vbi_field_size && buf != NULL) in au0828_isoc_copy()
620 au0828_copy_video(dev, dma_q, buf, p, outp, len); in au0828_isoc_copy()
625 void au0828_usb_v4l2_media_release(struct au0828_dev *dev) in au0828_usb_v4l2_media_release() argument
633 media_device_unregister_entity(&dev->input_ent[i]); in au0828_usb_v4l2_media_release()
640 struct au0828_dev *dev = in au0828_usb_v4l2_release() local
643 v4l2_ctrl_handler_free(&dev->v4l2_ctrl_hdl); in au0828_usb_v4l2_release()
644 v4l2_device_unregister(&dev->v4l2_dev); in au0828_usb_v4l2_release()
645 au0828_usb_v4l2_media_release(dev); in au0828_usb_v4l2_release()
646 au0828_usb_release(dev); in au0828_usb_v4l2_release()
650 struct au0828_dev *dev) in au0828_v4l2_device_register() argument
659 dev->v4l2_dev.mdev = dev->media_dev; in au0828_v4l2_device_register()
661 retval = v4l2_device_register(&interface->dev, &dev->v4l2_dev); in au0828_v4l2_device_register()
668 dev->v4l2_dev.release = au0828_usb_v4l2_release; in au0828_v4l2_device_register()
671 retval = v4l2_ctrl_handler_init(&dev->v4l2_ctrl_hdl, 4); in au0828_v4l2_device_register()
677 dev->v4l2_dev.ctrl_handler = &dev->v4l2_ctrl_hdl; in au0828_v4l2_device_register()
686 struct au0828_dev *dev = vb2_get_drv_priv(vq); in queue_setup() local
687 unsigned long size = dev->height * dev->bytesperline; in queue_setup()
702 struct au0828_dev *dev = vb2_get_drv_priv(vb->vb2_queue); in buffer_prepare() local
704 buf->length = dev->height * dev->bytesperline; in buffer_prepare()
722 struct au0828_dev *dev = vb2_get_drv_priv(vb->vb2_queue); in buffer_queue() local
723 struct au0828_dmaqueue *vidq = &dev->vidq; in buffer_queue()
729 spin_lock_irqsave(&dev->slock, flags); in buffer_queue()
731 spin_unlock_irqrestore(&dev->slock, flags); in buffer_queue()
734 static int au0828_i2s_init(struct au0828_dev *dev) in au0828_i2s_init() argument
737 au0828_writereg(dev, AU0828_AUDIOCTRL_50C, 0x01); in au0828_i2s_init()
792 static void au0828_analog_stream_reset(struct au0828_dev *dev) in au0828_analog_stream_reset() argument
795 au0828_writereg(dev, AU0828_SENSORCTRL_100, 0x0); in au0828_analog_stream_reset()
797 au0828_writereg(dev, AU0828_SENSORCTRL_100, 0xb3); in au0828_analog_stream_reset()
803 static int au0828_stream_interrupt(struct au0828_dev *dev) in au0828_stream_interrupt() argument
805 dev->stream_state = STREAM_INTERRUPT; in au0828_stream_interrupt()
806 if (test_bit(DEV_DISCONNECTED, &dev->dev_state)) in au0828_stream_interrupt()
813 struct au0828_dev *dev = vb2_get_drv_priv(vq); in au0828_start_analog_streaming() local
817 dev->streaming_users); in au0828_start_analog_streaming()
820 dev->frame_count = 0; in au0828_start_analog_streaming()
822 dev->vbi_frame_count = 0; in au0828_start_analog_streaming()
824 if (dev->streaming_users == 0) { in au0828_start_analog_streaming()
826 au0828_i2s_init(dev); in au0828_start_analog_streaming()
827 rc = au0828_init_isoc(dev, AU0828_ISO_PACKETS_PER_URB, in au0828_start_analog_streaming()
828 AU0828_MAX_ISO_BUFS, dev->max_pkt_size, in au0828_start_analog_streaming()
835 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_stream, 1); in au0828_start_analog_streaming()
838 dev->vid_timeout_running = 1; in au0828_start_analog_streaming()
839 mod_timer(&dev->vid_timeout, jiffies + (HZ / 10)); in au0828_start_analog_streaming()
841 dev->vbi_timeout_running = 1; in au0828_start_analog_streaming()
842 mod_timer(&dev->vbi_timeout, jiffies + (HZ / 10)); in au0828_start_analog_streaming()
845 dev->streaming_users++; in au0828_start_analog_streaming()
851 struct au0828_dev *dev = vb2_get_drv_priv(vq); in au0828_stop_streaming() local
852 struct au0828_dmaqueue *vidq = &dev->vidq; in au0828_stop_streaming()
855 dprintk(1, "au0828_stop_streaming called %d\n", dev->streaming_users); in au0828_stop_streaming()
857 if (dev->streaming_users-- == 1) { in au0828_stop_streaming()
858 au0828_uninit_isoc(dev); in au0828_stop_streaming()
859 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_stream, 0); in au0828_stop_streaming()
862 dev->vid_timeout_running = 0; in au0828_stop_streaming()
863 del_timer_sync(&dev->vid_timeout); in au0828_stop_streaming()
865 spin_lock_irqsave(&dev->slock, flags); in au0828_stop_streaming()
866 if (dev->isoc_ctl.buf != NULL) { in au0828_stop_streaming()
867 vb2_buffer_done(&dev->isoc_ctl.buf->vb.vb2_buf, in au0828_stop_streaming()
869 dev->isoc_ctl.buf = NULL; in au0828_stop_streaming()
878 spin_unlock_irqrestore(&dev->slock, flags); in au0828_stop_streaming()
883 struct au0828_dev *dev = vb2_get_drv_priv(vq); in au0828_stop_vbi_streaming() local
884 struct au0828_dmaqueue *vbiq = &dev->vbiq; in au0828_stop_vbi_streaming()
888 dev->streaming_users); in au0828_stop_vbi_streaming()
890 if (dev->streaming_users-- == 1) { in au0828_stop_vbi_streaming()
891 au0828_uninit_isoc(dev); in au0828_stop_vbi_streaming()
892 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_stream, 0); in au0828_stop_vbi_streaming()
895 spin_lock_irqsave(&dev->slock, flags); in au0828_stop_vbi_streaming()
896 if (dev->isoc_ctl.vbi_buf != NULL) { in au0828_stop_vbi_streaming()
897 vb2_buffer_done(&dev->isoc_ctl.vbi_buf->vb.vb2_buf, in au0828_stop_vbi_streaming()
899 dev->isoc_ctl.vbi_buf = NULL; in au0828_stop_vbi_streaming()
908 spin_unlock_irqrestore(&dev->slock, flags); in au0828_stop_vbi_streaming()
910 dev->vbi_timeout_running = 0; in au0828_stop_vbi_streaming()
911 del_timer_sync(&dev->vbi_timeout); in au0828_stop_vbi_streaming()
932 int au0828_analog_unregister(struct au0828_dev *dev) in au0828_analog_unregister() argument
941 vb2_video_unregister_device(&dev->vdev); in au0828_analog_unregister()
942 vb2_video_unregister_device(&dev->vbi_dev); in au0828_analog_unregister()
945 v4l2_device_disconnect(&dev->v4l2_dev); in au0828_analog_unregister()
946 v4l2_device_put(&dev->v4l2_dev); in au0828_analog_unregister()
956 struct au0828_dev *dev = from_timer(dev, t, vid_timeout); in au0828_vid_buffer_timeout() local
957 struct au0828_dmaqueue *dma_q = &dev->vidq; in au0828_vid_buffer_timeout()
962 spin_lock_irqsave(&dev->slock, flags); in au0828_vid_buffer_timeout()
964 buf = dev->isoc_ctl.buf; in au0828_vid_buffer_timeout()
968 buffer_filled(dev, dma_q, buf); in au0828_vid_buffer_timeout()
972 if (dev->vid_timeout_running == 1) in au0828_vid_buffer_timeout()
973 mod_timer(&dev->vid_timeout, jiffies + (HZ / 10)); in au0828_vid_buffer_timeout()
975 spin_unlock_irqrestore(&dev->slock, flags); in au0828_vid_buffer_timeout()
980 struct au0828_dev *dev = from_timer(dev, t, vbi_timeout); in au0828_vbi_buffer_timeout() local
981 struct au0828_dmaqueue *dma_q = &dev->vbiq; in au0828_vbi_buffer_timeout()
986 spin_lock_irqsave(&dev->slock, flags); in au0828_vbi_buffer_timeout()
988 buf = dev->isoc_ctl.vbi_buf; in au0828_vbi_buffer_timeout()
992 buffer_filled(dev, dma_q, buf); in au0828_vbi_buffer_timeout()
996 if (dev->vbi_timeout_running == 1) in au0828_vbi_buffer_timeout()
997 mod_timer(&dev->vbi_timeout, jiffies + (HZ / 10)); in au0828_vbi_buffer_timeout()
998 spin_unlock_irqrestore(&dev->slock, flags); in au0828_vbi_buffer_timeout()
1003 struct au0828_dev *dev = video_drvdata(filp); in au0828_v4l2_open() local
1008 __func__, dev->std_set_in_tuner_core, dev->dev_state, in au0828_v4l2_open()
1009 dev->streaming_users, dev->users); in au0828_v4l2_open()
1011 if (mutex_lock_interruptible(&dev->lock)) in au0828_v4l2_open()
1018 mutex_unlock(&dev->lock); in au0828_v4l2_open()
1022 if (dev->users == 0) { in au0828_v4l2_open()
1023 au0828_analog_stream_enable(dev); in au0828_v4l2_open()
1024 au0828_analog_stream_reset(dev); in au0828_v4l2_open()
1025 dev->stream_state = STREAM_OFF; in au0828_v4l2_open()
1026 set_bit(DEV_INITIALIZED, &dev->dev_state); in au0828_v4l2_open()
1028 dev->users++; in au0828_v4l2_open()
1029 mutex_unlock(&dev->lock); in au0828_v4l2_open()
1036 struct au0828_dev *dev = video_drvdata(filp); in au0828_v4l2_close() local
1041 __func__, dev->std_set_in_tuner_core, dev->dev_state, in au0828_v4l2_close()
1042 dev->streaming_users, dev->users); in au0828_v4l2_close()
1044 mutex_lock(&dev->lock); in au0828_v4l2_close()
1045 if (vdev->vfl_type == VFL_TYPE_VIDEO && dev->vid_timeout_running) { in au0828_v4l2_close()
1047 dev->vid_timeout_running = 0; in au0828_v4l2_close()
1048 del_timer_sync(&dev->vid_timeout); in au0828_v4l2_close()
1050 dev->vbi_timeout_running) { in au0828_v4l2_close()
1052 dev->vbi_timeout_running = 0; in au0828_v4l2_close()
1053 del_timer_sync(&dev->vbi_timeout); in au0828_v4l2_close()
1056 if (test_bit(DEV_DISCONNECTED, &dev->dev_state)) in au0828_v4l2_close()
1059 if (dev->users == 1) { in au0828_v4l2_close()
1091 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, in au0828_v4l2_close()
1093 dev->std_set_in_tuner_core = 0; in au0828_v4l2_close()
1097 ret = usb_set_interface(dev->usbdev, 0, 0); in au0828_v4l2_close()
1103 dev->users--; in au0828_v4l2_close()
1104 mutex_unlock(&dev->lock); in au0828_v4l2_close()
1109 static void au0828_init_tuner(struct au0828_dev *dev) in au0828_init_tuner() argument
1112 .frequency = dev->ctrl_freq, in au0828_init_tuner()
1117 dev->std_set_in_tuner_core, dev->dev_state); in au0828_init_tuner()
1119 if (dev->std_set_in_tuner_core) in au0828_init_tuner()
1121 dev->std_set_in_tuner_core = 1; in au0828_init_tuner()
1122 i2c_gate_ctrl(dev, 1); in au0828_init_tuner()
1126 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std, dev->std); in au0828_init_tuner()
1127 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_frequency, &f); in au0828_init_tuner()
1128 i2c_gate_ctrl(dev, 0); in au0828_init_tuner()
1131 static int au0828_set_format(struct au0828_dev *dev, unsigned int cmd, in au0828_set_format() argument
1161 dev->width = width; in au0828_set_format()
1162 dev->height = height; in au0828_set_format()
1163 dev->frame_size = width * height * 2; in au0828_set_format()
1164 dev->field_size = width * height; in au0828_set_format()
1165 dev->bytesperline = width * 2; in au0828_set_format()
1167 if (dev->stream_state == STREAM_ON) { in au0828_set_format()
1169 ret = au0828_stream_interrupt(dev); in au0828_set_format()
1176 au0828_analog_stream_enable(dev); in au0828_set_format()
1184 struct au0828_dev *dev = video_drvdata(file); in vidioc_querycap() local
1187 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_querycap()
1190 strscpy(cap->card, dev->board.name, sizeof(cap->card)); in vidioc_querycap()
1191 usb_make_path(dev->usbdev, cap->bus_info, sizeof(cap->bus_info)); in vidioc_querycap()
1217 struct au0828_dev *dev = video_drvdata(file); in vidioc_g_fmt_vid_cap() local
1220 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_g_fmt_vid_cap()
1222 f->fmt.pix.width = dev->width; in vidioc_g_fmt_vid_cap()
1223 f->fmt.pix.height = dev->height; in vidioc_g_fmt_vid_cap()
1225 f->fmt.pix.bytesperline = dev->bytesperline; in vidioc_g_fmt_vid_cap()
1226 f->fmt.pix.sizeimage = dev->frame_size; in vidioc_g_fmt_vid_cap()
1235 struct au0828_dev *dev = video_drvdata(file); in vidioc_try_fmt_vid_cap() local
1238 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_try_fmt_vid_cap()
1240 return au0828_set_format(dev, VIDIOC_TRY_FMT, f); in vidioc_try_fmt_vid_cap()
1246 struct au0828_dev *dev = video_drvdata(file); in vidioc_s_fmt_vid_cap() local
1250 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_s_fmt_vid_cap()
1252 rc = check_dev(dev); in vidioc_s_fmt_vid_cap()
1256 if (vb2_is_busy(&dev->vb_vidq)) { in vidioc_s_fmt_vid_cap()
1262 rc = au0828_set_format(dev, VIDIOC_S_FMT, f); in vidioc_s_fmt_vid_cap()
1269 struct au0828_dev *dev = video_drvdata(file); in vidioc_s_std() local
1272 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_s_std()
1274 if (norm == dev->std) in vidioc_s_std()
1277 if (dev->streaming_users > 0) in vidioc_s_std()
1280 dev->std = norm; in vidioc_s_std()
1282 au0828_init_tuner(dev); in vidioc_s_std()
1284 i2c_gate_ctrl(dev, 1); in vidioc_s_std()
1292 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std, norm); in vidioc_s_std()
1294 i2c_gate_ctrl(dev, 0); in vidioc_s_std()
1301 struct au0828_dev *dev = video_drvdata(file); in vidioc_g_std() local
1304 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_g_std()
1306 *norm = dev->std; in vidioc_g_std()
1313 struct au0828_dev *dev = video_drvdata(file); in vidioc_enum_input() local
1326 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_enum_input()
1346 input->std = dev->vdev.tvnorms; in vidioc_enum_input()
1353 struct au0828_dev *dev = video_drvdata(file); in vidioc_g_input() local
1356 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_g_input()
1358 *i = dev->ctrl_input; in vidioc_g_input()
1362 static void au0828_s_input(struct au0828_dev *dev, int index) in au0828_s_input() argument
1367 dev->std_set_in_tuner_core, dev->dev_state); in au0828_s_input()
1371 dev->input_type = AU0828_VMUX_SVIDEO; in au0828_s_input()
1372 dev->ctrl_ainput = 1; in au0828_s_input()
1375 dev->input_type = AU0828_VMUX_COMPOSITE; in au0828_s_input()
1376 dev->ctrl_ainput = 1; in au0828_s_input()
1379 dev->input_type = AU0828_VMUX_TELEVISION; in au0828_s_input()
1380 dev->ctrl_ainput = 0; in au0828_s_input()
1388 dev->ctrl_input = index; in au0828_s_input()
1390 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_routing, in au0828_s_input()
1403 (AUVI_INPUT(i).audio_setup)(dev, enable); in au0828_s_input()
1409 (AUVI_INPUT(i).audio_setup)(dev, enable); in au0828_s_input()
1414 v4l2_device_call_all(&dev->v4l2_dev, 0, audio, s_routing, in au0828_s_input()
1420 struct au0828_dev *dev = video_drvdata(file); in vidioc_s_input() local
1430 if (dev->ctrl_input == index) in vidioc_s_input()
1433 au0828_s_input(dev, index); in vidioc_s_input()
1462 struct au0828_dev *dev = video_drvdata(file); in vidioc_g_audio() local
1465 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_g_audio()
1467 a->index = dev->ctrl_ainput; in vidioc_g_audio()
1479 struct au0828_dev *dev = video_drvdata(file); in vidioc_s_audio() local
1481 if (a->index != dev->ctrl_ainput) in vidioc_s_audio()
1485 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_s_audio()
1491 struct au0828_dev *dev = video_drvdata(file); in vidioc_g_tuner() local
1503 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_g_tuner()
1507 au0828_init_tuner(dev); in vidioc_g_tuner()
1508 i2c_gate_ctrl(dev, 1); in vidioc_g_tuner()
1509 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, g_tuner, t); in vidioc_g_tuner()
1510 i2c_gate_ctrl(dev, 0); in vidioc_g_tuner()
1517 struct au0828_dev *dev = video_drvdata(file); in vidioc_s_tuner() local
1523 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_s_tuner()
1525 au0828_init_tuner(dev); in vidioc_s_tuner()
1526 i2c_gate_ctrl(dev, 1); in vidioc_s_tuner()
1527 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_tuner, t); in vidioc_s_tuner()
1528 i2c_gate_ctrl(dev, 0); in vidioc_s_tuner()
1540 struct au0828_dev *dev = video_drvdata(file); in vidioc_g_frequency() local
1545 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_g_frequency()
1546 freq->frequency = dev->ctrl_freq; in vidioc_g_frequency()
1553 struct au0828_dev *dev = video_drvdata(file); in vidioc_s_frequency() local
1560 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_s_frequency()
1562 au0828_init_tuner(dev); in vidioc_s_frequency()
1563 i2c_gate_ctrl(dev, 1); in vidioc_s_frequency()
1565 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_frequency, freq); in vidioc_s_frequency()
1567 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, g_frequency, &new_freq); in vidioc_s_frequency()
1568 dev->ctrl_freq = new_freq.frequency; in vidioc_s_frequency()
1570 i2c_gate_ctrl(dev, 0); in vidioc_s_frequency()
1572 au0828_analog_stream_reset(dev); in vidioc_s_frequency()
1583 struct au0828_dev *dev = video_drvdata(file); in vidioc_g_fmt_vbi_cap() local
1586 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_g_fmt_vbi_cap()
1588 format->fmt.vbi.samples_per_line = dev->vbi_width; in vidioc_g_fmt_vbi_cap()
1594 format->fmt.vbi.count[0] = dev->vbi_height; in vidioc_g_fmt_vbi_cap()
1595 format->fmt.vbi.count[1] = dev->vbi_height; in vidioc_g_fmt_vbi_cap()
1606 struct au0828_dev *dev = video_drvdata(file); in vidioc_g_pixelaspect() local
1612 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_g_pixelaspect()
1623 struct au0828_dev *dev = video_drvdata(file); in vidioc_g_selection() local
1633 s->r.width = dev->width; in vidioc_g_selection()
1634 s->r.height = dev->height; in vidioc_g_selection()
1646 struct au0828_dev *dev = video_drvdata(file); in vidioc_g_register() local
1649 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_g_register()
1651 reg->val = au0828_read(dev, reg->reg); in vidioc_g_register()
1659 struct au0828_dev *dev = video_drvdata(file); in vidioc_s_register() local
1662 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_s_register()
1664 return au0828_writereg(dev, reg->reg, reg->val); in vidioc_s_register()
1679 void au0828_v4l2_suspend(struct au0828_dev *dev) in au0828_v4l2_suspend() argument
1686 if (dev->stream_state == STREAM_ON) { in au0828_v4l2_suspend()
1688 au0828_analog_stream_disable(dev); in au0828_v4l2_suspend()
1690 for (i = 0; i < dev->isoc_ctl.num_bufs; i++) { in au0828_v4l2_suspend()
1691 urb = dev->isoc_ctl.urb[i]; in au0828_v4l2_suspend()
1701 if (dev->vid_timeout_running) in au0828_v4l2_suspend()
1702 del_timer_sync(&dev->vid_timeout); in au0828_v4l2_suspend()
1703 if (dev->vbi_timeout_running) in au0828_v4l2_suspend()
1704 del_timer_sync(&dev->vbi_timeout); in au0828_v4l2_suspend()
1707 void au0828_v4l2_resume(struct au0828_dev *dev) in au0828_v4l2_resume() argument
1713 if (dev->stream_state == STREAM_ON) { in au0828_v4l2_resume()
1714 au0828_stream_interrupt(dev); in au0828_v4l2_resume()
1715 au0828_init_tuner(dev); in au0828_v4l2_resume()
1718 if (dev->vid_timeout_running) in au0828_v4l2_resume()
1719 mod_timer(&dev->vid_timeout, jiffies + (HZ / 10)); in au0828_v4l2_resume()
1720 if (dev->vbi_timeout_running) in au0828_v4l2_resume()
1721 mod_timer(&dev->vbi_timeout, jiffies + (HZ / 10)); in au0828_v4l2_resume()
1724 au0828_i2s_init(dev); in au0828_v4l2_resume()
1726 au0828_analog_stream_enable(dev); in au0828_v4l2_resume()
1728 if (!(dev->stream_state == STREAM_ON)) { in au0828_v4l2_resume()
1729 au0828_analog_stream_reset(dev); in au0828_v4l2_resume()
1731 for (i = 0; i < dev->isoc_ctl.num_bufs; i++) { in au0828_v4l2_resume()
1732 rc = usb_submit_urb(dev->isoc_ctl.urb[i], GFP_ATOMIC); in au0828_v4l2_resume()
1736 au0828_uninit_isoc(dev); in au0828_v4l2_resume()
1804 static int au0828_vb2_setup(struct au0828_dev *dev) in au0828_vb2_setup() argument
1810 q = &dev->vb_vidq; in au0828_vb2_setup()
1814 q->drv_priv = dev; in au0828_vb2_setup()
1824 q = &dev->vb_vbiq; in au0828_vb2_setup()
1828 q->drv_priv = dev; in au0828_vb2_setup()
1840 static void au0828_analog_create_entities(struct au0828_dev *dev) in au0828_analog_create_entities() argument
1853 dev->video_pad.flags = MEDIA_PAD_FL_SINK; in au0828_analog_create_entities()
1854 ret = media_entity_pads_init(&dev->vdev.entity, 1, &dev->video_pad); in au0828_analog_create_entities()
1858 dev->vbi_pad.flags = MEDIA_PAD_FL_SINK; in au0828_analog_create_entities()
1859 ret = media_entity_pads_init(&dev->vbi_dev.entity, 1, &dev->vbi_pad); in au0828_analog_create_entities()
1865 struct media_entity *ent = &dev->input_ent[i]; in au0828_analog_create_entities()
1872 dev->input_pad[i].flags = MEDIA_PAD_FL_SOURCE; in au0828_analog_create_entities()
1889 ret = media_entity_pads_init(ent, 1, &dev->input_pad[i]); in au0828_analog_create_entities()
1893 ret = media_device_register_entity(dev->media_dev, ent); in au0828_analog_create_entities()
1902 int au0828_analog_register(struct au0828_dev *dev, in au0828_analog_register() argument
1918 retval = usb_set_interface(dev->usbdev, in au0828_analog_register()
1936 dev->max_pkt_size = (tmp & 0x07ff) * in au0828_analog_register()
1938 dev->isoc_in_endpointaddr = endpoint->bEndpointAddress; in au0828_analog_register()
1941 dev->isoc_in_endpointaddr, dev->max_pkt_size); in au0828_analog_register()
1944 if (!(dev->isoc_in_endpointaddr)) { in au0828_analog_register()
1949 init_waitqueue_head(&dev->open); in au0828_analog_register()
1950 spin_lock_init(&dev->slock); in au0828_analog_register()
1953 INIT_LIST_HEAD(&dev->vidq.active); in au0828_analog_register()
1954 INIT_LIST_HEAD(&dev->vbiq.active); in au0828_analog_register()
1956 timer_setup(&dev->vid_timeout, au0828_vid_buffer_timeout, 0); in au0828_analog_register()
1957 timer_setup(&dev->vbi_timeout, au0828_vbi_buffer_timeout, 0); in au0828_analog_register()
1959 dev->width = NTSC_STD_W; in au0828_analog_register()
1960 dev->height = NTSC_STD_H; in au0828_analog_register()
1961 dev->field_size = dev->width * dev->height; in au0828_analog_register()
1962 dev->frame_size = dev->field_size << 1; in au0828_analog_register()
1963 dev->bytesperline = dev->width << 1; in au0828_analog_register()
1964 dev->vbi_width = 720; in au0828_analog_register()
1965 dev->vbi_height = 1; in au0828_analog_register()
1966 dev->ctrl_ainput = 0; in au0828_analog_register()
1967 dev->ctrl_freq = 960; in au0828_analog_register()
1968 dev->std = V4L2_STD_NTSC_M; in au0828_analog_register()
1970 au0828_s_input(dev, 0); in au0828_analog_register()
1972 mutex_init(&dev->vb_queue_lock); in au0828_analog_register()
1973 mutex_init(&dev->vb_vbi_queue_lock); in au0828_analog_register()
1976 dev->vdev = au0828_video_template; in au0828_analog_register()
1977 dev->vdev.v4l2_dev = &dev->v4l2_dev; in au0828_analog_register()
1978 dev->vdev.lock = &dev->lock; in au0828_analog_register()
1979 dev->vdev.queue = &dev->vb_vidq; in au0828_analog_register()
1980 dev->vdev.queue->lock = &dev->vb_queue_lock; in au0828_analog_register()
1981 dev->vdev.device_caps = in au0828_analog_register()
1984 strscpy(dev->vdev.name, "au0828a video", sizeof(dev->vdev.name)); in au0828_analog_register()
1987 dev->vbi_dev = au0828_video_template; in au0828_analog_register()
1988 dev->vbi_dev.v4l2_dev = &dev->v4l2_dev; in au0828_analog_register()
1989 dev->vbi_dev.lock = &dev->lock; in au0828_analog_register()
1990 dev->vbi_dev.queue = &dev->vb_vbiq; in au0828_analog_register()
1991 dev->vbi_dev.queue->lock = &dev->vb_vbi_queue_lock; in au0828_analog_register()
1992 dev->vbi_dev.device_caps = in au0828_analog_register()
1995 strscpy(dev->vbi_dev.name, "au0828a vbi", sizeof(dev->vbi_dev.name)); in au0828_analog_register()
1998 au0828_analog_create_entities(dev); in au0828_analog_register()
2001 retval = au0828_vb2_setup(dev); in au0828_analog_register()
2009 video_set_drvdata(&dev->vdev, dev); in au0828_analog_register()
2010 retval = video_register_device(&dev->vdev, VFL_TYPE_VIDEO, -1); in au0828_analog_register()
2018 video_set_drvdata(&dev->vbi_dev, dev); in au0828_analog_register()
2019 retval = video_register_device(&dev->vbi_dev, VFL_TYPE_VBI, -1); in au0828_analog_register()
2028 retval = v4l2_mc_create_media_graph(dev->media_dev); in au0828_analog_register()
2042 vb2_video_unregister_device(&dev->vdev); in au0828_analog_register()