Lines Matching refs:dev

60 static inline void i2c_gate_ctrl(struct au0828_dev *dev, int val)  in i2c_gate_ctrl()  argument
62 if (dev->dvb.frontend && dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl) in i2c_gate_ctrl()
63 dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl(dev->dvb.frontend, val); in i2c_gate_ctrl()
66 static inline void print_err_status(struct au0828_dev *dev, in print_err_status() argument
105 static int check_dev(struct au0828_dev *dev) in check_dev() argument
107 if (test_bit(DEV_DISCONNECTED, &dev->dev_state)) { in check_dev()
112 if (test_bit(DEV_MISCONFIGURED, &dev->dev_state)) { in check_dev()
125 struct au0828_dev *dev = container_of(dma_q, struct au0828_dev, vidq); in au0828_irq_callback() local
144 spin_lock_irqsave(&dev->slock, flags); in au0828_irq_callback()
145 dev->isoc_ctl.isoc_copy(dev, urb); in au0828_irq_callback()
146 spin_unlock_irqrestore(&dev->slock, flags); in au0828_irq_callback()
160 dev->stream_state = STREAM_ON; in au0828_irq_callback()
166 static void au0828_uninit_isoc(struct au0828_dev *dev) in au0828_uninit_isoc() argument
173 dev->isoc_ctl.nfields = -1; in au0828_uninit_isoc()
174 for (i = 0; i < dev->isoc_ctl.num_bufs; i++) { in au0828_uninit_isoc()
175 urb = dev->isoc_ctl.urb[i]; in au0828_uninit_isoc()
182 if (dev->isoc_ctl.transfer_buffer[i]) { in au0828_uninit_isoc()
183 usb_free_coherent(dev->usbdev, in au0828_uninit_isoc()
185 dev->isoc_ctl.transfer_buffer[i], in au0828_uninit_isoc()
189 dev->isoc_ctl.urb[i] = NULL; in au0828_uninit_isoc()
191 dev->isoc_ctl.transfer_buffer[i] = NULL; in au0828_uninit_isoc()
194 kfree(dev->isoc_ctl.urb); in au0828_uninit_isoc()
195 kfree(dev->isoc_ctl.transfer_buffer); in au0828_uninit_isoc()
197 dev->isoc_ctl.urb = NULL; in au0828_uninit_isoc()
198 dev->isoc_ctl.transfer_buffer = NULL; in au0828_uninit_isoc()
199 dev->isoc_ctl.num_bufs = 0; in au0828_uninit_isoc()
201 dev->stream_state = STREAM_OFF; in au0828_uninit_isoc()
207 static int au0828_init_isoc(struct au0828_dev *dev, int max_packets, in au0828_init_isoc() argument
209 int (*isoc_copy) (struct au0828_dev *dev, struct urb *urb)) in au0828_init_isoc()
211 struct au0828_dmaqueue *dma_q = &dev->vidq; in au0828_init_isoc()
220 dev->isoc_ctl.isoc_copy = isoc_copy; in au0828_init_isoc()
221 dev->isoc_ctl.num_bufs = num_bufs; in au0828_init_isoc()
223 dev->isoc_ctl.urb = kzalloc(sizeof(void *)*num_bufs, GFP_KERNEL); in au0828_init_isoc()
224 if (!dev->isoc_ctl.urb) { in au0828_init_isoc()
229 dev->isoc_ctl.transfer_buffer = kzalloc(sizeof(void *)*num_bufs, in au0828_init_isoc()
231 if (!dev->isoc_ctl.transfer_buffer) { in au0828_init_isoc()
233 kfree(dev->isoc_ctl.urb); in au0828_init_isoc()
237 dev->isoc_ctl.max_pkt_size = max_pkt_size; in au0828_init_isoc()
238 dev->isoc_ctl.buf = NULL; in au0828_init_isoc()
240 sb_size = max_packets * dev->isoc_ctl.max_pkt_size; in au0828_init_isoc()
243 for (i = 0; i < dev->isoc_ctl.num_bufs; i++) { in au0828_init_isoc()
247 au0828_uninit_isoc(dev); in au0828_init_isoc()
250 dev->isoc_ctl.urb[i] = urb; in au0828_init_isoc()
252 dev->isoc_ctl.transfer_buffer[i] = usb_alloc_coherent(dev->usbdev, in au0828_init_isoc()
254 if (!dev->isoc_ctl.transfer_buffer[i]) { in au0828_init_isoc()
259 au0828_uninit_isoc(dev); in au0828_init_isoc()
262 memset(dev->isoc_ctl.transfer_buffer[i], 0, sb_size); in au0828_init_isoc()
264 pipe = usb_rcvisocpipe(dev->usbdev, in au0828_init_isoc()
265 dev->isoc_in_endpointaddr), in au0828_init_isoc()
267 usb_fill_int_urb(urb, dev->usbdev, pipe, in au0828_init_isoc()
268 dev->isoc_ctl.transfer_buffer[i], sb_size, in au0828_init_isoc()
278 dev->isoc_ctl.max_pkt_size; in au0828_init_isoc()
279 k += dev->isoc_ctl.max_pkt_size; in au0828_init_isoc()
284 for (i = 0; i < dev->isoc_ctl.num_bufs; i++) { in au0828_init_isoc()
285 rc = usb_submit_urb(dev->isoc_ctl.urb[i], GFP_ATOMIC); in au0828_init_isoc()
289 au0828_uninit_isoc(dev); in au0828_init_isoc()
300 static inline void buffer_filled(struct au0828_dev *dev, in buffer_filled() argument
311 vb->sequence = dev->frame_count++; in buffer_filled()
313 vb->sequence = dev->vbi_frame_count++; in buffer_filled()
323 static void au0828_copy_video(struct au0828_dev *dev, in au0828_copy_video() argument
331 int bytesperline = dev->width << 1; /* Assumes 16-bit depth @@@@ */ in au0828_copy_video()
395 dev->greenscreen_detected = 1; in au0828_copy_video()
407 struct au0828_dev *dev = container_of(dma_q, struct au0828_dev, vidq); in get_next_buf() local
411 dev->isoc_ctl.buf = NULL; in get_next_buf()
422 dev->isoc_ctl.buf = *buf; in get_next_buf()
427 static void au0828_copy_vbi(struct au0828_dev *dev, in au0828_copy_vbi() argument
437 if (dev == NULL) { in au0828_copy_vbi()
457 bytesperline = dev->vbi_width; in au0828_copy_vbi()
467 startwrite += bytesperline * dev->vbi_height; in au0828_copy_vbi()
482 struct au0828_dev *dev = container_of(dma_q, struct au0828_dev, vbiq); in vbi_get_next_buf() local
486 dev->isoc_ctl.vbi_buf = NULL; in vbi_get_next_buf()
497 dev->isoc_ctl.vbi_buf = *buf; in vbi_get_next_buf()
504 static inline int au0828_isoc_copy(struct au0828_dev *dev, struct urb *urb) in au0828_isoc_copy() argument
509 struct au0828_dmaqueue *vbi_dma_q = &dev->vbiq; in au0828_isoc_copy()
518 if (!dev) in au0828_isoc_copy()
521 if (test_bit(DEV_DISCONNECTED, &dev->dev_state) || in au0828_isoc_copy()
522 test_bit(DEV_MISCONFIGURED, &dev->dev_state)) in au0828_isoc_copy()
526 print_err_status(dev, -1, urb->status); in au0828_isoc_copy()
531 buf = dev->isoc_ctl.buf; in au0828_isoc_copy()
535 vbi_buf = dev->isoc_ctl.vbi_buf; in au0828_isoc_copy()
543 print_err_status(dev, i, status); in au0828_isoc_copy()
552 dev->max_pkt_size) { in au0828_isoc_copy()
570 buffer_filled(dev, vbi_dma_q, vbi_buf); in au0828_isoc_copy()
580 buffer_filled(dev, dma_q, buf); in au0828_isoc_copy()
590 if (dev->vid_timeout_running) in au0828_isoc_copy()
591 mod_timer(&dev->vid_timeout, in au0828_isoc_copy()
593 if (dev->vbi_timeout_running) in au0828_isoc_copy()
594 mod_timer(&dev->vbi_timeout, in au0828_isoc_copy()
612 dev->vbi_read = 0; in au0828_isoc_copy()
617 vbi_field_size = dev->vbi_width * dev->vbi_height * 2; in au0828_isoc_copy()
618 if (dev->vbi_read < vbi_field_size) { in au0828_isoc_copy()
619 remain = vbi_field_size - dev->vbi_read; in au0828_isoc_copy()
626 au0828_copy_vbi(dev, vbi_dma_q, vbi_buf, p, in au0828_isoc_copy()
631 dev->vbi_read += lencopy; in au0828_isoc_copy()
634 if (dev->vbi_read >= vbi_field_size && buf != NULL) in au0828_isoc_copy()
635 au0828_copy_video(dev, dma_q, buf, p, outp, len); in au0828_isoc_copy()
645 struct au0828_dev *dev = vb2_get_drv_priv(vq); in queue_setup() local
646 unsigned long img_size = dev->height * dev->bytesperline; in queue_setup()
665 struct au0828_dev *dev = vb2_get_drv_priv(vb->vb2_queue); in buffer_prepare() local
667 buf->length = dev->height * dev->bytesperline; in buffer_prepare()
685 struct au0828_dev *dev = vb2_get_drv_priv(vb->vb2_queue); in buffer_queue() local
686 struct au0828_dmaqueue *vidq = &dev->vidq; in buffer_queue()
692 spin_lock_irqsave(&dev->slock, flags); in buffer_queue()
694 spin_unlock_irqrestore(&dev->slock, flags); in buffer_queue()
697 static int au0828_i2s_init(struct au0828_dev *dev) in au0828_i2s_init() argument
700 au0828_writereg(dev, AU0828_AUDIOCTRL_50C, 0x01); in au0828_i2s_init()
752 static void au0828_analog_stream_reset(struct au0828_dev *dev) in au0828_analog_stream_reset() argument
755 au0828_writereg(dev, AU0828_SENSORCTRL_100, 0x0); in au0828_analog_stream_reset()
757 au0828_writereg(dev, AU0828_SENSORCTRL_100, 0xb3); in au0828_analog_stream_reset()
763 static int au0828_stream_interrupt(struct au0828_dev *dev) in au0828_stream_interrupt() argument
767 dev->stream_state = STREAM_INTERRUPT; in au0828_stream_interrupt()
768 if (test_bit(DEV_DISCONNECTED, &dev->dev_state)) in au0828_stream_interrupt()
771 set_bit(DEV_MISCONFIGURED, &dev->dev_state); in au0828_stream_interrupt()
780 struct au0828_dev *dev = vb2_get_drv_priv(vq); in au0828_start_analog_streaming() local
784 dev->streaming_users); in au0828_start_analog_streaming()
787 dev->frame_count = 0; in au0828_start_analog_streaming()
789 dev->vbi_frame_count = 0; in au0828_start_analog_streaming()
791 if (dev->streaming_users == 0) { in au0828_start_analog_streaming()
793 au0828_i2s_init(dev); in au0828_start_analog_streaming()
794 rc = au0828_init_isoc(dev, AU0828_ISO_PACKETS_PER_URB, in au0828_start_analog_streaming()
795 AU0828_MAX_ISO_BUFS, dev->max_pkt_size, in au0828_start_analog_streaming()
803 v4l2_device_call_all(&dev->v4l2_dev, 0, video, in au0828_start_analog_streaming()
805 dev->vid_timeout_running = 1; in au0828_start_analog_streaming()
806 mod_timer(&dev->vid_timeout, jiffies + (HZ / 10)); in au0828_start_analog_streaming()
808 dev->vbi_timeout_running = 1; in au0828_start_analog_streaming()
809 mod_timer(&dev->vbi_timeout, jiffies + (HZ / 10)); in au0828_start_analog_streaming()
812 dev->streaming_users++; in au0828_start_analog_streaming()
818 struct au0828_dev *dev = vb2_get_drv_priv(vq); in au0828_stop_streaming() local
819 struct au0828_dmaqueue *vidq = &dev->vidq; in au0828_stop_streaming()
822 dprintk(1, "au0828_stop_streaming called %d\n", dev->streaming_users); in au0828_stop_streaming()
824 if (dev->streaming_users-- == 1) in au0828_stop_streaming()
825 au0828_uninit_isoc(dev); in au0828_stop_streaming()
827 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_stream, 0); in au0828_stop_streaming()
828 dev->vid_timeout_running = 0; in au0828_stop_streaming()
829 del_timer_sync(&dev->vid_timeout); in au0828_stop_streaming()
831 spin_lock_irqsave(&dev->slock, flags); in au0828_stop_streaming()
832 if (dev->isoc_ctl.buf != NULL) { in au0828_stop_streaming()
833 vb2_buffer_done(&dev->isoc_ctl.buf->vb.vb2_buf, in au0828_stop_streaming()
835 dev->isoc_ctl.buf = NULL; in au0828_stop_streaming()
844 spin_unlock_irqrestore(&dev->slock, flags); in au0828_stop_streaming()
849 struct au0828_dev *dev = vb2_get_drv_priv(vq); in au0828_stop_vbi_streaming() local
850 struct au0828_dmaqueue *vbiq = &dev->vbiq; in au0828_stop_vbi_streaming()
854 dev->streaming_users); in au0828_stop_vbi_streaming()
856 if (dev->streaming_users-- == 1) in au0828_stop_vbi_streaming()
857 au0828_uninit_isoc(dev); in au0828_stop_vbi_streaming()
859 spin_lock_irqsave(&dev->slock, flags); in au0828_stop_vbi_streaming()
860 if (dev->isoc_ctl.vbi_buf != NULL) { in au0828_stop_vbi_streaming()
861 vb2_buffer_done(&dev->isoc_ctl.vbi_buf->vb.vb2_buf, in au0828_stop_vbi_streaming()
863 dev->isoc_ctl.vbi_buf = NULL; in au0828_stop_vbi_streaming()
872 spin_unlock_irqrestore(&dev->slock, flags); in au0828_stop_vbi_streaming()
874 dev->vbi_timeout_running = 0; in au0828_stop_vbi_streaming()
875 del_timer_sync(&dev->vbi_timeout); in au0828_stop_vbi_streaming()
895 void au0828_analog_unregister(struct au0828_dev *dev) in au0828_analog_unregister() argument
899 video_unregister_device(&dev->vdev); in au0828_analog_unregister()
900 video_unregister_device(&dev->vbi_dev); in au0828_analog_unregister()
909 struct au0828_dev *dev = (struct au0828_dev *) data; in au0828_vid_buffer_timeout() local
910 struct au0828_dmaqueue *dma_q = &dev->vidq; in au0828_vid_buffer_timeout()
915 spin_lock_irqsave(&dev->slock, flags); in au0828_vid_buffer_timeout()
917 buf = dev->isoc_ctl.buf; in au0828_vid_buffer_timeout()
921 buffer_filled(dev, dma_q, buf); in au0828_vid_buffer_timeout()
925 if (dev->vid_timeout_running == 1) in au0828_vid_buffer_timeout()
926 mod_timer(&dev->vid_timeout, jiffies + (HZ / 10)); in au0828_vid_buffer_timeout()
928 spin_unlock_irqrestore(&dev->slock, flags); in au0828_vid_buffer_timeout()
933 struct au0828_dev *dev = (struct au0828_dev *) data; in au0828_vbi_buffer_timeout() local
934 struct au0828_dmaqueue *dma_q = &dev->vbiq; in au0828_vbi_buffer_timeout()
939 spin_lock_irqsave(&dev->slock, flags); in au0828_vbi_buffer_timeout()
941 buf = dev->isoc_ctl.vbi_buf; in au0828_vbi_buffer_timeout()
945 buffer_filled(dev, dma_q, buf); in au0828_vbi_buffer_timeout()
949 if (dev->vbi_timeout_running == 1) in au0828_vbi_buffer_timeout()
950 mod_timer(&dev->vbi_timeout, jiffies + (HZ / 10)); in au0828_vbi_buffer_timeout()
951 spin_unlock_irqrestore(&dev->slock, flags); in au0828_vbi_buffer_timeout()
956 struct au0828_dev *dev = video_drvdata(filp); in au0828_v4l2_open() local
961 __func__, dev->std_set_in_tuner_core, dev->dev_state, in au0828_v4l2_open()
962 dev->streaming_users, dev->users); in au0828_v4l2_open()
964 if (mutex_lock_interruptible(&dev->lock)) in au0828_v4l2_open()
971 mutex_unlock(&dev->lock); in au0828_v4l2_open()
975 if (dev->users == 0) { in au0828_v4l2_open()
976 au0828_analog_stream_enable(dev); in au0828_v4l2_open()
977 au0828_analog_stream_reset(dev); in au0828_v4l2_open()
978 dev->stream_state = STREAM_OFF; in au0828_v4l2_open()
979 set_bit(DEV_INITIALIZED, &dev->dev_state); in au0828_v4l2_open()
981 dev->users++; in au0828_v4l2_open()
982 mutex_unlock(&dev->lock); in au0828_v4l2_open()
989 struct au0828_dev *dev = video_drvdata(filp); in au0828_v4l2_close() local
994 __func__, dev->std_set_in_tuner_core, dev->dev_state, in au0828_v4l2_close()
995 dev->streaming_users, dev->users); in au0828_v4l2_close()
997 mutex_lock(&dev->lock); in au0828_v4l2_close()
998 if (vdev->vfl_type == VFL_TYPE_GRABBER && dev->vid_timeout_running) { in au0828_v4l2_close()
1000 dev->vid_timeout_running = 0; in au0828_v4l2_close()
1001 del_timer_sync(&dev->vid_timeout); in au0828_v4l2_close()
1003 dev->vbi_timeout_running) { in au0828_v4l2_close()
1005 dev->vbi_timeout_running = 0; in au0828_v4l2_close()
1006 del_timer_sync(&dev->vbi_timeout); in au0828_v4l2_close()
1009 if (test_bit(DEV_DISCONNECTED, &dev->dev_state)) in au0828_v4l2_close()
1012 if (dev->users == 1) { in au0828_v4l2_close()
1014 v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_power, 0); in au0828_v4l2_close()
1015 dev->std_set_in_tuner_core = 0; in au0828_v4l2_close()
1019 ret = usb_set_interface(dev->usbdev, 0, 0); in au0828_v4l2_close()
1025 dev->users--; in au0828_v4l2_close()
1026 mutex_unlock(&dev->lock); in au0828_v4l2_close()
1031 static void au0828_init_tuner(struct au0828_dev *dev) in au0828_init_tuner() argument
1034 .frequency = dev->ctrl_freq, in au0828_init_tuner()
1039 dev->std_set_in_tuner_core, dev->dev_state); in au0828_init_tuner()
1041 if (dev->std_set_in_tuner_core) in au0828_init_tuner()
1043 dev->std_set_in_tuner_core = 1; in au0828_init_tuner()
1044 i2c_gate_ctrl(dev, 1); in au0828_init_tuner()
1048 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std, dev->std); in au0828_init_tuner()
1049 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_frequency, &f); in au0828_init_tuner()
1050 i2c_gate_ctrl(dev, 0); in au0828_init_tuner()
1053 static int au0828_set_format(struct au0828_dev *dev, unsigned int cmd, in au0828_set_format() argument
1084 dev->width = width; in au0828_set_format()
1085 dev->height = height; in au0828_set_format()
1086 dev->frame_size = width * height * 2; in au0828_set_format()
1087 dev->field_size = width * height; in au0828_set_format()
1088 dev->bytesperline = width * 2; in au0828_set_format()
1090 if (dev->stream_state == STREAM_ON) { in au0828_set_format()
1092 ret = au0828_stream_interrupt(dev); in au0828_set_format()
1099 au0828_analog_stream_enable(dev); in au0828_set_format()
1108 struct au0828_dev *dev = video_drvdata(file); in vidioc_querycap() local
1111 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_querycap()
1114 strlcpy(cap->card, dev->board.name, sizeof(cap->card)); in vidioc_querycap()
1115 usb_make_path(dev->usbdev, cap->bus_info, sizeof(cap->bus_info)); in vidioc_querycap()
1151 struct au0828_dev *dev = video_drvdata(file); in vidioc_g_fmt_vid_cap() local
1154 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_g_fmt_vid_cap()
1156 f->fmt.pix.width = dev->width; in vidioc_g_fmt_vid_cap()
1157 f->fmt.pix.height = dev->height; in vidioc_g_fmt_vid_cap()
1159 f->fmt.pix.bytesperline = dev->bytesperline; in vidioc_g_fmt_vid_cap()
1160 f->fmt.pix.sizeimage = dev->frame_size; in vidioc_g_fmt_vid_cap()
1170 struct au0828_dev *dev = video_drvdata(file); in vidioc_try_fmt_vid_cap() local
1173 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_try_fmt_vid_cap()
1175 return au0828_set_format(dev, VIDIOC_TRY_FMT, f); in vidioc_try_fmt_vid_cap()
1181 struct au0828_dev *dev = video_drvdata(file); in vidioc_s_fmt_vid_cap() local
1185 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_s_fmt_vid_cap()
1187 rc = check_dev(dev); in vidioc_s_fmt_vid_cap()
1191 if (vb2_is_busy(&dev->vb_vidq)) { in vidioc_s_fmt_vid_cap()
1197 rc = au0828_set_format(dev, VIDIOC_S_FMT, f); in vidioc_s_fmt_vid_cap()
1204 struct au0828_dev *dev = video_drvdata(file); in vidioc_s_std() local
1207 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_s_std()
1209 if (norm == dev->std) in vidioc_s_std()
1212 if (dev->streaming_users > 0) in vidioc_s_std()
1215 dev->std = norm; in vidioc_s_std()
1217 au0828_init_tuner(dev); in vidioc_s_std()
1219 i2c_gate_ctrl(dev, 1); in vidioc_s_std()
1227 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std, norm); in vidioc_s_std()
1229 i2c_gate_ctrl(dev, 0); in vidioc_s_std()
1236 struct au0828_dev *dev = video_drvdata(file); in vidioc_g_std() local
1239 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_g_std()
1241 *norm = dev->std; in vidioc_g_std()
1248 struct au0828_dev *dev = video_drvdata(file); in vidioc_enum_input() local
1262 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_enum_input()
1282 input->std = dev->vdev.tvnorms; in vidioc_enum_input()
1289 struct au0828_dev *dev = video_drvdata(file); in vidioc_g_input() local
1292 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_g_input()
1294 *i = dev->ctrl_input; in vidioc_g_input()
1298 static void au0828_s_input(struct au0828_dev *dev, int index) in au0828_s_input() argument
1303 dev->std_set_in_tuner_core, dev->dev_state); in au0828_s_input()
1307 dev->input_type = AU0828_VMUX_SVIDEO; in au0828_s_input()
1308 dev->ctrl_ainput = 1; in au0828_s_input()
1311 dev->input_type = AU0828_VMUX_COMPOSITE; in au0828_s_input()
1312 dev->ctrl_ainput = 1; in au0828_s_input()
1315 dev->input_type = AU0828_VMUX_TELEVISION; in au0828_s_input()
1316 dev->ctrl_ainput = 0; in au0828_s_input()
1324 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_routing, in au0828_s_input()
1337 (AUVI_INPUT(i).audio_setup)(dev, enable); in au0828_s_input()
1343 (AUVI_INPUT(i).audio_setup)(dev, enable); in au0828_s_input()
1348 v4l2_device_call_all(&dev->v4l2_dev, 0, audio, s_routing, in au0828_s_input()
1354 struct au0828_dev *dev = video_drvdata(file); in vidioc_s_input() local
1362 dev->ctrl_input = index; in vidioc_s_input()
1363 au0828_s_input(dev, index); in vidioc_s_input()
1385 struct au0828_dev *dev = video_drvdata(file); in vidioc_g_audio() local
1388 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_g_audio()
1390 a->index = dev->ctrl_ainput; in vidioc_g_audio()
1402 struct au0828_dev *dev = video_drvdata(file); in vidioc_s_audio() local
1404 if (a->index != dev->ctrl_ainput) in vidioc_s_audio()
1408 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_s_audio()
1414 struct au0828_dev *dev = video_drvdata(file); in vidioc_g_tuner() local
1420 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_g_tuner()
1424 au0828_init_tuner(dev); in vidioc_g_tuner()
1425 i2c_gate_ctrl(dev, 1); in vidioc_g_tuner()
1426 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, g_tuner, t); in vidioc_g_tuner()
1427 i2c_gate_ctrl(dev, 0); in vidioc_g_tuner()
1434 struct au0828_dev *dev = video_drvdata(file); in vidioc_s_tuner() local
1440 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_s_tuner()
1442 au0828_init_tuner(dev); in vidioc_s_tuner()
1443 i2c_gate_ctrl(dev, 1); in vidioc_s_tuner()
1444 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_tuner, t); in vidioc_s_tuner()
1445 i2c_gate_ctrl(dev, 0); in vidioc_s_tuner()
1457 struct au0828_dev *dev = video_drvdata(file); in vidioc_g_frequency() local
1462 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_g_frequency()
1463 freq->frequency = dev->ctrl_freq; in vidioc_g_frequency()
1470 struct au0828_dev *dev = video_drvdata(file); in vidioc_s_frequency() local
1477 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_s_frequency()
1479 au0828_init_tuner(dev); in vidioc_s_frequency()
1480 i2c_gate_ctrl(dev, 1); in vidioc_s_frequency()
1482 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_frequency, freq); in vidioc_s_frequency()
1484 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, g_frequency, &new_freq); in vidioc_s_frequency()
1485 dev->ctrl_freq = new_freq.frequency; in vidioc_s_frequency()
1487 i2c_gate_ctrl(dev, 0); in vidioc_s_frequency()
1489 au0828_analog_stream_reset(dev); in vidioc_s_frequency()
1500 struct au0828_dev *dev = video_drvdata(file); in vidioc_g_fmt_vbi_cap() local
1503 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_g_fmt_vbi_cap()
1505 format->fmt.vbi.samples_per_line = dev->vbi_width; in vidioc_g_fmt_vbi_cap()
1511 format->fmt.vbi.count[0] = dev->vbi_height; in vidioc_g_fmt_vbi_cap()
1512 format->fmt.vbi.count[1] = dev->vbi_height; in vidioc_g_fmt_vbi_cap()
1523 struct au0828_dev *dev = video_drvdata(file); in vidioc_cropcap() local
1529 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_cropcap()
1533 cc->bounds.width = dev->width; in vidioc_cropcap()
1534 cc->bounds.height = dev->height; in vidioc_cropcap()
1548 struct au0828_dev *dev = video_drvdata(file); in vidioc_g_register() local
1551 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_g_register()
1553 reg->val = au0828_read(dev, reg->reg); in vidioc_g_register()
1561 struct au0828_dev *dev = video_drvdata(file); in vidioc_s_register() local
1564 dev->std_set_in_tuner_core, dev->dev_state); in vidioc_s_register()
1566 return au0828_writereg(dev, reg->reg, reg->val); in vidioc_s_register()
1581 void au0828_v4l2_suspend(struct au0828_dev *dev) in au0828_v4l2_suspend() argument
1588 if (dev->stream_state == STREAM_ON) { in au0828_v4l2_suspend()
1590 au0828_analog_stream_disable(dev); in au0828_v4l2_suspend()
1592 for (i = 0; i < dev->isoc_ctl.num_bufs; i++) { in au0828_v4l2_suspend()
1593 urb = dev->isoc_ctl.urb[i]; in au0828_v4l2_suspend()
1603 if (dev->vid_timeout_running) in au0828_v4l2_suspend()
1604 del_timer_sync(&dev->vid_timeout); in au0828_v4l2_suspend()
1605 if (dev->vbi_timeout_running) in au0828_v4l2_suspend()
1606 del_timer_sync(&dev->vbi_timeout); in au0828_v4l2_suspend()
1609 void au0828_v4l2_resume(struct au0828_dev *dev) in au0828_v4l2_resume() argument
1615 if (dev->stream_state == STREAM_ON) { in au0828_v4l2_resume()
1616 au0828_stream_interrupt(dev); in au0828_v4l2_resume()
1617 au0828_init_tuner(dev); in au0828_v4l2_resume()
1620 if (dev->vid_timeout_running) in au0828_v4l2_resume()
1621 mod_timer(&dev->vid_timeout, jiffies + (HZ / 10)); in au0828_v4l2_resume()
1622 if (dev->vbi_timeout_running) in au0828_v4l2_resume()
1623 mod_timer(&dev->vbi_timeout, jiffies + (HZ / 10)); in au0828_v4l2_resume()
1626 au0828_i2s_init(dev); in au0828_v4l2_resume()
1628 au0828_analog_stream_enable(dev); in au0828_v4l2_resume()
1630 if (!(dev->stream_state == STREAM_ON)) { in au0828_v4l2_resume()
1631 au0828_analog_stream_reset(dev); in au0828_v4l2_resume()
1633 for (i = 0; i < dev->isoc_ctl.num_bufs; i++) { in au0828_v4l2_resume()
1634 rc = usb_submit_urb(dev->isoc_ctl.urb[i], GFP_ATOMIC); in au0828_v4l2_resume()
1638 au0828_uninit_isoc(dev); in au0828_v4l2_resume()
1705 static int au0828_vb2_setup(struct au0828_dev *dev) in au0828_vb2_setup() argument
1711 q = &dev->vb_vidq; in au0828_vb2_setup()
1715 q->drv_priv = dev; in au0828_vb2_setup()
1725 q = &dev->vb_vbiq; in au0828_vb2_setup()
1729 q->drv_priv = dev; in au0828_vb2_setup()
1743 int au0828_analog_register(struct au0828_dev *dev, in au0828_analog_register() argument
1755 retval = usb_set_interface(dev->usbdev, in au0828_analog_register()
1773 dev->max_pkt_size = (tmp & 0x07ff) * in au0828_analog_register()
1775 dev->isoc_in_endpointaddr = endpoint->bEndpointAddress; in au0828_analog_register()
1778 dev->isoc_in_endpointaddr, dev->max_pkt_size); in au0828_analog_register()
1781 if (!(dev->isoc_in_endpointaddr)) { in au0828_analog_register()
1786 init_waitqueue_head(&dev->open); in au0828_analog_register()
1787 spin_lock_init(&dev->slock); in au0828_analog_register()
1790 INIT_LIST_HEAD(&dev->vidq.active); in au0828_analog_register()
1791 INIT_LIST_HEAD(&dev->vbiq.active); in au0828_analog_register()
1793 setup_timer(&dev->vid_timeout, au0828_vid_buffer_timeout, in au0828_analog_register()
1794 (unsigned long)dev); in au0828_analog_register()
1795 setup_timer(&dev->vbi_timeout, au0828_vbi_buffer_timeout, in au0828_analog_register()
1796 (unsigned long)dev); in au0828_analog_register()
1798 dev->width = NTSC_STD_W; in au0828_analog_register()
1799 dev->height = NTSC_STD_H; in au0828_analog_register()
1800 dev->field_size = dev->width * dev->height; in au0828_analog_register()
1801 dev->frame_size = dev->field_size << 1; in au0828_analog_register()
1802 dev->bytesperline = dev->width << 1; in au0828_analog_register()
1803 dev->vbi_width = 720; in au0828_analog_register()
1804 dev->vbi_height = 1; in au0828_analog_register()
1805 dev->ctrl_ainput = 0; in au0828_analog_register()
1806 dev->ctrl_freq = 960; in au0828_analog_register()
1807 dev->std = V4L2_STD_NTSC_M; in au0828_analog_register()
1808 au0828_s_input(dev, 0); in au0828_analog_register()
1810 mutex_init(&dev->vb_queue_lock); in au0828_analog_register()
1811 mutex_init(&dev->vb_vbi_queue_lock); in au0828_analog_register()
1814 dev->vdev = au0828_video_template; in au0828_analog_register()
1815 dev->vdev.v4l2_dev = &dev->v4l2_dev; in au0828_analog_register()
1816 dev->vdev.lock = &dev->lock; in au0828_analog_register()
1817 dev->vdev.queue = &dev->vb_vidq; in au0828_analog_register()
1818 dev->vdev.queue->lock = &dev->vb_queue_lock; in au0828_analog_register()
1819 strcpy(dev->vdev.name, "au0828a video"); in au0828_analog_register()
1822 dev->vbi_dev = au0828_video_template; in au0828_analog_register()
1823 dev->vbi_dev.v4l2_dev = &dev->v4l2_dev; in au0828_analog_register()
1824 dev->vbi_dev.lock = &dev->lock; in au0828_analog_register()
1825 dev->vbi_dev.queue = &dev->vb_vbiq; in au0828_analog_register()
1826 dev->vbi_dev.queue->lock = &dev->vb_vbi_queue_lock; in au0828_analog_register()
1827 strcpy(dev->vbi_dev.name, "au0828a vbi"); in au0828_analog_register()
1830 retval = au0828_vb2_setup(dev); in au0828_analog_register()
1838 video_set_drvdata(&dev->vdev, dev); in au0828_analog_register()
1839 retval = video_register_device(&dev->vdev, VFL_TYPE_GRABBER, -1); in au0828_analog_register()
1848 video_set_drvdata(&dev->vbi_dev, dev); in au0828_analog_register()
1849 retval = video_register_device(&dev->vbi_dev, VFL_TYPE_VBI, -1); in au0828_analog_register()
1862 video_unregister_device(&dev->vdev); in au0828_analog_register()
1864 vb2_queue_release(&dev->vb_vidq); in au0828_analog_register()
1865 vb2_queue_release(&dev->vb_vbiq); in au0828_analog_register()