1 /*
2  * Auvitek AU0828 USB Bridge (Analog video support)
3  *
4  * Copyright (C) 2009 Devin Heitmueller <dheitmueller@linuxtv.org>
5  * Copyright (C) 2005-2008 Auvitek International, Ltd.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * As published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
20  * 02110-1301, USA.
21  */
22 
23 /* Developer Notes:
24  *
25  * VBI support is not yet working
26  * The hardware scaler supported is unimplemented
27  * AC97 audio support is unimplemented (only i2s audio mode)
28  *
29  */
30 
31 #include <linux/module.h>
32 #include <linux/slab.h>
33 #include <linux/init.h>
34 #include <linux/device.h>
35 #include <linux/suspend.h>
36 #include <media/v4l2-common.h>
37 #include <media/v4l2-ioctl.h>
38 #include <media/v4l2-chip-ident.h>
39 #include <media/tuner.h>
40 #include "au0828.h"
41 #include "au0828-reg.h"
42 
43 static DEFINE_MUTEX(au0828_sysfs_lock);
44 
45 /* ------------------------------------------------------------------
46 	Videobuf operations
47    ------------------------------------------------------------------*/
48 
49 static unsigned int isoc_debug;
50 module_param(isoc_debug, int, 0644);
51 MODULE_PARM_DESC(isoc_debug, "enable debug messages [isoc transfers]");
52 
53 #define au0828_isocdbg(fmt, arg...) \
54 do {\
55 	if (isoc_debug) { \
56 		printk(KERN_INFO "au0828 %s :"fmt, \
57 		       __func__ , ##arg);	   \
58 	} \
59   } while (0)
60 
61 static inline void print_err_status(struct au0828_dev *dev,
62 				    int packet, int status)
63 {
64 	char *errmsg = "Unknown";
65 
66 	switch (status) {
67 	case -ENOENT:
68 		errmsg = "unlinked synchronuously";
69 		break;
70 	case -ECONNRESET:
71 		errmsg = "unlinked asynchronuously";
72 		break;
73 	case -ENOSR:
74 		errmsg = "Buffer error (overrun)";
75 		break;
76 	case -EPIPE:
77 		errmsg = "Stalled (device not responding)";
78 		break;
79 	case -EOVERFLOW:
80 		errmsg = "Babble (bad cable?)";
81 		break;
82 	case -EPROTO:
83 		errmsg = "Bit-stuff error (bad cable?)";
84 		break;
85 	case -EILSEQ:
86 		errmsg = "CRC/Timeout (could be anything)";
87 		break;
88 	case -ETIME:
89 		errmsg = "Device does not respond";
90 		break;
91 	}
92 	if (packet < 0) {
93 		au0828_isocdbg("URB status %d [%s].\n",	status, errmsg);
94 	} else {
95 		au0828_isocdbg("URB packet %d, status %d [%s].\n",
96 			       packet, status, errmsg);
97 	}
98 }
99 
100 static int check_dev(struct au0828_dev *dev)
101 {
102 	if (dev->dev_state & DEV_DISCONNECTED) {
103 		printk(KERN_INFO "v4l2 ioctl: device not present\n");
104 		return -ENODEV;
105 	}
106 
107 	if (dev->dev_state & DEV_MISCONFIGURED) {
108 		printk(KERN_INFO "v4l2 ioctl: device is misconfigured; "
109 		       "close and open it again\n");
110 		return -EIO;
111 	}
112 	return 0;
113 }
114 
115 /*
116  * IRQ callback, called by URB callback
117  */
118 static void au0828_irq_callback(struct urb *urb)
119 {
120 	struct au0828_dmaqueue  *dma_q = urb->context;
121 	struct au0828_dev *dev = container_of(dma_q, struct au0828_dev, vidq);
122 	unsigned long flags = 0;
123 	int i;
124 
125 	switch (urb->status) {
126 	case 0:             /* success */
127 	case -ETIMEDOUT:    /* NAK */
128 		break;
129 	case -ECONNRESET:   /* kill */
130 	case -ENOENT:
131 	case -ESHUTDOWN:
132 		au0828_isocdbg("au0828_irq_callback called: status kill\n");
133 		return;
134 	default:            /* unknown error */
135 		au0828_isocdbg("urb completition error %d.\n", urb->status);
136 		break;
137 	}
138 
139 	/* Copy data from URB */
140 	spin_lock_irqsave(&dev->slock, flags);
141 	dev->isoc_ctl.isoc_copy(dev, urb);
142 	spin_unlock_irqrestore(&dev->slock, flags);
143 
144 	/* Reset urb buffers */
145 	for (i = 0; i < urb->number_of_packets; i++) {
146 		urb->iso_frame_desc[i].status = 0;
147 		urb->iso_frame_desc[i].actual_length = 0;
148 	}
149 	urb->status = 0;
150 
151 	urb->status = usb_submit_urb(urb, GFP_ATOMIC);
152 	if (urb->status) {
153 		au0828_isocdbg("urb resubmit failed (error=%i)\n",
154 			       urb->status);
155 	}
156 }
157 
158 /*
159  * Stop and Deallocate URBs
160  */
161 static void au0828_uninit_isoc(struct au0828_dev *dev)
162 {
163 	struct urb *urb;
164 	int i;
165 
166 	au0828_isocdbg("au0828: called au0828_uninit_isoc\n");
167 
168 	dev->isoc_ctl.nfields = -1;
169 	for (i = 0; i < dev->isoc_ctl.num_bufs; i++) {
170 		urb = dev->isoc_ctl.urb[i];
171 		if (urb) {
172 			if (!irqs_disabled())
173 				usb_kill_urb(urb);
174 			else
175 				usb_unlink_urb(urb);
176 
177 			if (dev->isoc_ctl.transfer_buffer[i]) {
178 				usb_free_coherent(dev->usbdev,
179 					urb->transfer_buffer_length,
180 					dev->isoc_ctl.transfer_buffer[i],
181 					urb->transfer_dma);
182 			}
183 			usb_free_urb(urb);
184 			dev->isoc_ctl.urb[i] = NULL;
185 		}
186 		dev->isoc_ctl.transfer_buffer[i] = NULL;
187 	}
188 
189 	kfree(dev->isoc_ctl.urb);
190 	kfree(dev->isoc_ctl.transfer_buffer);
191 
192 	dev->isoc_ctl.urb = NULL;
193 	dev->isoc_ctl.transfer_buffer = NULL;
194 	dev->isoc_ctl.num_bufs = 0;
195 }
196 
197 /*
198  * Allocate URBs and start IRQ
199  */
200 static int au0828_init_isoc(struct au0828_dev *dev, int max_packets,
201 			    int num_bufs, int max_pkt_size,
202 			    int (*isoc_copy) (struct au0828_dev *dev, struct urb *urb))
203 {
204 	struct au0828_dmaqueue *dma_q = &dev->vidq;
205 	int i;
206 	int sb_size, pipe;
207 	struct urb *urb;
208 	int j, k;
209 	int rc;
210 
211 	au0828_isocdbg("au0828: called au0828_prepare_isoc\n");
212 
213 	/* De-allocates all pending stuff */
214 	au0828_uninit_isoc(dev);
215 
216 	dev->isoc_ctl.isoc_copy = isoc_copy;
217 	dev->isoc_ctl.num_bufs = num_bufs;
218 
219 	dev->isoc_ctl.urb = kzalloc(sizeof(void *)*num_bufs,  GFP_KERNEL);
220 	if (!dev->isoc_ctl.urb) {
221 		au0828_isocdbg("cannot alloc memory for usb buffers\n");
222 		return -ENOMEM;
223 	}
224 
225 	dev->isoc_ctl.transfer_buffer = kzalloc(sizeof(void *)*num_bufs,
226 					      GFP_KERNEL);
227 	if (!dev->isoc_ctl.transfer_buffer) {
228 		au0828_isocdbg("cannot allocate memory for usb transfer\n");
229 		kfree(dev->isoc_ctl.urb);
230 		return -ENOMEM;
231 	}
232 
233 	dev->isoc_ctl.max_pkt_size = max_pkt_size;
234 	dev->isoc_ctl.buf = NULL;
235 
236 	sb_size = max_packets * dev->isoc_ctl.max_pkt_size;
237 
238 	/* allocate urbs and transfer buffers */
239 	for (i = 0; i < dev->isoc_ctl.num_bufs; i++) {
240 		urb = usb_alloc_urb(max_packets, GFP_KERNEL);
241 		if (!urb) {
242 			au0828_isocdbg("cannot alloc isoc_ctl.urb %i\n", i);
243 			au0828_uninit_isoc(dev);
244 			return -ENOMEM;
245 		}
246 		dev->isoc_ctl.urb[i] = urb;
247 
248 		dev->isoc_ctl.transfer_buffer[i] = usb_alloc_coherent(dev->usbdev,
249 			sb_size, GFP_KERNEL, &urb->transfer_dma);
250 		if (!dev->isoc_ctl.transfer_buffer[i]) {
251 			printk("unable to allocate %i bytes for transfer"
252 					" buffer %i%s\n",
253 					sb_size, i,
254 					in_interrupt() ? " while in int" : "");
255 			au0828_uninit_isoc(dev);
256 			return -ENOMEM;
257 		}
258 		memset(dev->isoc_ctl.transfer_buffer[i], 0, sb_size);
259 
260 		pipe = usb_rcvisocpipe(dev->usbdev,
261 				       dev->isoc_in_endpointaddr),
262 
263 		usb_fill_int_urb(urb, dev->usbdev, pipe,
264 				 dev->isoc_ctl.transfer_buffer[i], sb_size,
265 				 au0828_irq_callback, dma_q, 1);
266 
267 		urb->number_of_packets = max_packets;
268 		urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP;
269 
270 		k = 0;
271 		for (j = 0; j < max_packets; j++) {
272 			urb->iso_frame_desc[j].offset = k;
273 			urb->iso_frame_desc[j].length =
274 						dev->isoc_ctl.max_pkt_size;
275 			k += dev->isoc_ctl.max_pkt_size;
276 		}
277 	}
278 
279 	init_waitqueue_head(&dma_q->wq);
280 
281 	/* submit urbs and enables IRQ */
282 	for (i = 0; i < dev->isoc_ctl.num_bufs; i++) {
283 		rc = usb_submit_urb(dev->isoc_ctl.urb[i], GFP_ATOMIC);
284 		if (rc) {
285 			au0828_isocdbg("submit of urb %i failed (error=%i)\n",
286 				       i, rc);
287 			au0828_uninit_isoc(dev);
288 			return rc;
289 		}
290 	}
291 
292 	return 0;
293 }
294 
295 /*
296  * Announces that a buffer were filled and request the next
297  */
298 static inline void buffer_filled(struct au0828_dev *dev,
299 				  struct au0828_dmaqueue *dma_q,
300 				  struct au0828_buffer *buf)
301 {
302 	/* Advice that buffer was filled */
303 	au0828_isocdbg("[%p/%d] wakeup\n", buf, buf->vb.i);
304 
305 	buf->vb.state = VIDEOBUF_DONE;
306 	buf->vb.field_count++;
307 	v4l2_get_timestamp(&buf->vb.ts);
308 
309 	dev->isoc_ctl.buf = NULL;
310 
311 	list_del(&buf->vb.queue);
312 	wake_up(&buf->vb.done);
313 }
314 
315 static inline void vbi_buffer_filled(struct au0828_dev *dev,
316 				     struct au0828_dmaqueue *dma_q,
317 				     struct au0828_buffer *buf)
318 {
319 	/* Advice that buffer was filled */
320 	au0828_isocdbg("[%p/%d] wakeup\n", buf, buf->vb.i);
321 
322 	buf->vb.state = VIDEOBUF_DONE;
323 	buf->vb.field_count++;
324 	v4l2_get_timestamp(&buf->vb.ts);
325 
326 	dev->isoc_ctl.vbi_buf = NULL;
327 
328 	list_del(&buf->vb.queue);
329 	wake_up(&buf->vb.done);
330 }
331 
332 /*
333  * Identify the buffer header type and properly handles
334  */
335 static void au0828_copy_video(struct au0828_dev *dev,
336 			      struct au0828_dmaqueue  *dma_q,
337 			      struct au0828_buffer *buf,
338 			      unsigned char *p,
339 			      unsigned char *outp, unsigned long len)
340 {
341 	void *fieldstart, *startwrite, *startread;
342 	int  linesdone, currlinedone, offset, lencopy, remain;
343 	int bytesperline = dev->width << 1; /* Assumes 16-bit depth @@@@ */
344 
345 	if (len == 0)
346 		return;
347 
348 	if (dma_q->pos + len > buf->vb.size)
349 		len = buf->vb.size - dma_q->pos;
350 
351 	startread = p;
352 	remain = len;
353 
354 	/* Interlaces frame */
355 	if (buf->top_field)
356 		fieldstart = outp;
357 	else
358 		fieldstart = outp + bytesperline;
359 
360 	linesdone = dma_q->pos / bytesperline;
361 	currlinedone = dma_q->pos % bytesperline;
362 	offset = linesdone * bytesperline * 2 + currlinedone;
363 	startwrite = fieldstart + offset;
364 	lencopy = bytesperline - currlinedone;
365 	lencopy = lencopy > remain ? remain : lencopy;
366 
367 	if ((char *)startwrite + lencopy > (char *)outp + buf->vb.size) {
368 		au0828_isocdbg("Overflow of %zi bytes past buffer end (1)\n",
369 			       ((char *)startwrite + lencopy) -
370 			       ((char *)outp + buf->vb.size));
371 		remain = (char *)outp + buf->vb.size - (char *)startwrite;
372 		lencopy = remain;
373 	}
374 	if (lencopy <= 0)
375 		return;
376 	memcpy(startwrite, startread, lencopy);
377 
378 	remain -= lencopy;
379 
380 	while (remain > 0) {
381 		startwrite += lencopy + bytesperline;
382 		startread += lencopy;
383 		if (bytesperline > remain)
384 			lencopy = remain;
385 		else
386 			lencopy = bytesperline;
387 
388 		if ((char *)startwrite + lencopy > (char *)outp +
389 		    buf->vb.size) {
390 			au0828_isocdbg("Overflow %zi bytes past buf end (2)\n",
391 				       ((char *)startwrite + lencopy) -
392 				       ((char *)outp + buf->vb.size));
393 			lencopy = remain = (char *)outp + buf->vb.size -
394 					   (char *)startwrite;
395 		}
396 		if (lencopy <= 0)
397 			break;
398 
399 		memcpy(startwrite, startread, lencopy);
400 
401 		remain -= lencopy;
402 	}
403 
404 	if (offset > 1440) {
405 		/* We have enough data to check for greenscreen */
406 		if (outp[0] < 0x60 && outp[1440] < 0x60)
407 			dev->greenscreen_detected = 1;
408 	}
409 
410 	dma_q->pos += len;
411 }
412 
413 /*
414  * video-buf generic routine to get the next available buffer
415  */
416 static inline void get_next_buf(struct au0828_dmaqueue *dma_q,
417 				struct au0828_buffer **buf)
418 {
419 	struct au0828_dev *dev = container_of(dma_q, struct au0828_dev, vidq);
420 
421 	if (list_empty(&dma_q->active)) {
422 		au0828_isocdbg("No active queue to serve\n");
423 		dev->isoc_ctl.buf = NULL;
424 		*buf = NULL;
425 		return;
426 	}
427 
428 	/* Get the next buffer */
429 	*buf = list_entry(dma_q->active.next, struct au0828_buffer, vb.queue);
430 	dev->isoc_ctl.buf = *buf;
431 
432 	return;
433 }
434 
435 static void au0828_copy_vbi(struct au0828_dev *dev,
436 			      struct au0828_dmaqueue  *dma_q,
437 			      struct au0828_buffer *buf,
438 			      unsigned char *p,
439 			      unsigned char *outp, unsigned long len)
440 {
441 	unsigned char *startwrite, *startread;
442 	int bytesperline;
443 	int i, j = 0;
444 
445 	if (dev == NULL) {
446 		au0828_isocdbg("dev is null\n");
447 		return;
448 	}
449 
450 	if (dma_q == NULL) {
451 		au0828_isocdbg("dma_q is null\n");
452 		return;
453 	}
454 	if (buf == NULL)
455 		return;
456 	if (p == NULL) {
457 		au0828_isocdbg("p is null\n");
458 		return;
459 	}
460 	if (outp == NULL) {
461 		au0828_isocdbg("outp is null\n");
462 		return;
463 	}
464 
465 	bytesperline = dev->vbi_width;
466 
467 	if (dma_q->pos + len > buf->vb.size)
468 		len = buf->vb.size - dma_q->pos;
469 
470 	startread = p;
471 	startwrite = outp + (dma_q->pos / 2);
472 
473 	/* Make sure the bottom field populates the second half of the frame */
474 	if (buf->top_field == 0)
475 		startwrite += bytesperline * dev->vbi_height;
476 
477 	for (i = 0; i < len; i += 2)
478 		startwrite[j++] = startread[i+1];
479 
480 	dma_q->pos += len;
481 }
482 
483 
484 /*
485  * video-buf generic routine to get the next available VBI buffer
486  */
487 static inline void vbi_get_next_buf(struct au0828_dmaqueue *dma_q,
488 				    struct au0828_buffer **buf)
489 {
490 	struct au0828_dev *dev = container_of(dma_q, struct au0828_dev, vbiq);
491 	char *outp;
492 
493 	if (list_empty(&dma_q->active)) {
494 		au0828_isocdbg("No active queue to serve\n");
495 		dev->isoc_ctl.vbi_buf = NULL;
496 		*buf = NULL;
497 		return;
498 	}
499 
500 	/* Get the next buffer */
501 	*buf = list_entry(dma_q->active.next, struct au0828_buffer, vb.queue);
502 	/* Cleans up buffer - Useful for testing for frame/URB loss */
503 	outp = videobuf_to_vmalloc(&(*buf)->vb);
504 	memset(outp, 0x00, (*buf)->vb.size);
505 
506 	dev->isoc_ctl.vbi_buf = *buf;
507 
508 	return;
509 }
510 
511 /*
512  * Controls the isoc copy of each urb packet
513  */
514 static inline int au0828_isoc_copy(struct au0828_dev *dev, struct urb *urb)
515 {
516 	struct au0828_buffer    *buf;
517 	struct au0828_buffer    *vbi_buf;
518 	struct au0828_dmaqueue  *dma_q = urb->context;
519 	struct au0828_dmaqueue  *vbi_dma_q = &dev->vbiq;
520 	unsigned char *outp = NULL;
521 	unsigned char *vbioutp = NULL;
522 	int i, len = 0, rc = 1;
523 	unsigned char *p;
524 	unsigned char fbyte;
525 	unsigned int vbi_field_size;
526 	unsigned int remain, lencopy;
527 
528 	if (!dev)
529 		return 0;
530 
531 	if ((dev->dev_state & DEV_DISCONNECTED) ||
532 	    (dev->dev_state & DEV_MISCONFIGURED))
533 		return 0;
534 
535 	if (urb->status < 0) {
536 		print_err_status(dev, -1, urb->status);
537 		if (urb->status == -ENOENT)
538 			return 0;
539 	}
540 
541 	buf = dev->isoc_ctl.buf;
542 	if (buf != NULL)
543 		outp = videobuf_to_vmalloc(&buf->vb);
544 
545 	vbi_buf = dev->isoc_ctl.vbi_buf;
546 	if (vbi_buf != NULL)
547 		vbioutp = videobuf_to_vmalloc(&vbi_buf->vb);
548 
549 	for (i = 0; i < urb->number_of_packets; i++) {
550 		int status = urb->iso_frame_desc[i].status;
551 
552 		if (status < 0) {
553 			print_err_status(dev, i, status);
554 			if (urb->iso_frame_desc[i].status != -EPROTO)
555 				continue;
556 		}
557 
558 		if (urb->iso_frame_desc[i].actual_length <= 0)
559 			continue;
560 
561 		if (urb->iso_frame_desc[i].actual_length >
562 						dev->max_pkt_size) {
563 			au0828_isocdbg("packet bigger than packet size");
564 			continue;
565 		}
566 
567 		p = urb->transfer_buffer + urb->iso_frame_desc[i].offset;
568 		fbyte = p[0];
569 		len = urb->iso_frame_desc[i].actual_length - 4;
570 		p += 4;
571 
572 		if (fbyte & 0x80) {
573 			len -= 4;
574 			p += 4;
575 			au0828_isocdbg("Video frame %s\n",
576 				       (fbyte & 0x40) ? "odd" : "even");
577 			if (fbyte & 0x40) {
578 				/* VBI */
579 				if (vbi_buf != NULL)
580 					vbi_buffer_filled(dev,
581 							  vbi_dma_q,
582 							  vbi_buf);
583 				vbi_get_next_buf(vbi_dma_q, &vbi_buf);
584 				if (vbi_buf == NULL)
585 					vbioutp = NULL;
586 				else
587 					vbioutp = videobuf_to_vmalloc(
588 						&vbi_buf->vb);
589 
590 				/* Video */
591 				if (buf != NULL)
592 					buffer_filled(dev, dma_q, buf);
593 				get_next_buf(dma_q, &buf);
594 				if (buf == NULL)
595 					outp = NULL;
596 				else
597 					outp = videobuf_to_vmalloc(&buf->vb);
598 
599 				/* As long as isoc traffic is arriving, keep
600 				   resetting the timer */
601 				if (dev->vid_timeout_running)
602 					mod_timer(&dev->vid_timeout,
603 						  jiffies + (HZ / 10));
604 				if (dev->vbi_timeout_running)
605 					mod_timer(&dev->vbi_timeout,
606 						  jiffies + (HZ / 10));
607 			}
608 
609 			if (buf != NULL) {
610 				if (fbyte & 0x40)
611 					buf->top_field = 1;
612 				else
613 					buf->top_field = 0;
614 			}
615 
616 			if (vbi_buf != NULL) {
617 				if (fbyte & 0x40)
618 					vbi_buf->top_field = 1;
619 				else
620 					vbi_buf->top_field = 0;
621 			}
622 
623 			dev->vbi_read = 0;
624 			vbi_dma_q->pos = 0;
625 			dma_q->pos = 0;
626 		}
627 
628 		vbi_field_size = dev->vbi_width * dev->vbi_height * 2;
629 		if (dev->vbi_read < vbi_field_size) {
630 			remain  = vbi_field_size - dev->vbi_read;
631 			if (len < remain)
632 				lencopy = len;
633 			else
634 				lencopy = remain;
635 
636 			if (vbi_buf != NULL)
637 				au0828_copy_vbi(dev, vbi_dma_q, vbi_buf, p,
638 						vbioutp, len);
639 
640 			len -= lencopy;
641 			p += lencopy;
642 			dev->vbi_read += lencopy;
643 		}
644 
645 		if (dev->vbi_read >= vbi_field_size && buf != NULL)
646 			au0828_copy_video(dev, dma_q, buf, p, outp, len);
647 	}
648 	return rc;
649 }
650 
651 static int
652 buffer_setup(struct videobuf_queue *vq, unsigned int *count,
653 	     unsigned int *size)
654 {
655 	struct au0828_fh *fh = vq->priv_data;
656 	*size = (fh->dev->width * fh->dev->height * 16 + 7) >> 3;
657 
658 	if (0 == *count)
659 		*count = AU0828_DEF_BUF;
660 
661 	if (*count < AU0828_MIN_BUF)
662 		*count = AU0828_MIN_BUF;
663 	return 0;
664 }
665 
666 /* This is called *without* dev->slock held; please keep it that way */
667 static void free_buffer(struct videobuf_queue *vq, struct au0828_buffer *buf)
668 {
669 	struct au0828_fh     *fh  = vq->priv_data;
670 	struct au0828_dev    *dev = fh->dev;
671 	unsigned long flags = 0;
672 	if (in_interrupt())
673 		BUG();
674 
675 	/* We used to wait for the buffer to finish here, but this didn't work
676 	   because, as we were keeping the state as VIDEOBUF_QUEUED,
677 	   videobuf_queue_cancel marked it as finished for us.
678 	   (Also, it could wedge forever if the hardware was misconfigured.)
679 
680 	   This should be safe; by the time we get here, the buffer isn't
681 	   queued anymore. If we ever start marking the buffers as
682 	   VIDEOBUF_ACTIVE, it won't be, though.
683 	*/
684 	spin_lock_irqsave(&dev->slock, flags);
685 	if (dev->isoc_ctl.buf == buf)
686 		dev->isoc_ctl.buf = NULL;
687 	spin_unlock_irqrestore(&dev->slock, flags);
688 
689 	videobuf_vmalloc_free(&buf->vb);
690 	buf->vb.state = VIDEOBUF_NEEDS_INIT;
691 }
692 
693 static int
694 buffer_prepare(struct videobuf_queue *vq, struct videobuf_buffer *vb,
695 						enum v4l2_field field)
696 {
697 	struct au0828_fh     *fh  = vq->priv_data;
698 	struct au0828_buffer *buf = container_of(vb, struct au0828_buffer, vb);
699 	struct au0828_dev    *dev = fh->dev;
700 	int                  rc = 0, urb_init = 0;
701 
702 	buf->vb.size = (fh->dev->width * fh->dev->height * 16 + 7) >> 3;
703 
704 	if (0 != buf->vb.baddr  &&  buf->vb.bsize < buf->vb.size)
705 		return -EINVAL;
706 
707 	buf->vb.width  = dev->width;
708 	buf->vb.height = dev->height;
709 	buf->vb.field  = field;
710 
711 	if (VIDEOBUF_NEEDS_INIT == buf->vb.state) {
712 		rc = videobuf_iolock(vq, &buf->vb, NULL);
713 		if (rc < 0) {
714 			printk(KERN_INFO "videobuf_iolock failed\n");
715 			goto fail;
716 		}
717 	}
718 
719 	if (!dev->isoc_ctl.num_bufs)
720 		urb_init = 1;
721 
722 	if (urb_init) {
723 		rc = au0828_init_isoc(dev, AU0828_ISO_PACKETS_PER_URB,
724 				      AU0828_MAX_ISO_BUFS, dev->max_pkt_size,
725 				      au0828_isoc_copy);
726 		if (rc < 0) {
727 			printk(KERN_INFO "au0828_init_isoc failed\n");
728 			goto fail;
729 		}
730 	}
731 
732 	buf->vb.state = VIDEOBUF_PREPARED;
733 	return 0;
734 
735 fail:
736 	free_buffer(vq, buf);
737 	return rc;
738 }
739 
740 static void
741 buffer_queue(struct videobuf_queue *vq, struct videobuf_buffer *vb)
742 {
743 	struct au0828_buffer    *buf     = container_of(vb,
744 							struct au0828_buffer,
745 							vb);
746 	struct au0828_fh        *fh      = vq->priv_data;
747 	struct au0828_dev       *dev     = fh->dev;
748 	struct au0828_dmaqueue  *vidq    = &dev->vidq;
749 
750 	buf->vb.state = VIDEOBUF_QUEUED;
751 	list_add_tail(&buf->vb.queue, &vidq->active);
752 }
753 
754 static void buffer_release(struct videobuf_queue *vq,
755 				struct videobuf_buffer *vb)
756 {
757 	struct au0828_buffer   *buf  = container_of(vb,
758 						    struct au0828_buffer,
759 						    vb);
760 
761 	free_buffer(vq, buf);
762 }
763 
764 static struct videobuf_queue_ops au0828_video_qops = {
765 	.buf_setup      = buffer_setup,
766 	.buf_prepare    = buffer_prepare,
767 	.buf_queue      = buffer_queue,
768 	.buf_release    = buffer_release,
769 };
770 
771 /* ------------------------------------------------------------------
772    V4L2 interface
773    ------------------------------------------------------------------*/
774 
775 static int au0828_i2s_init(struct au0828_dev *dev)
776 {
777 	/* Enable i2s mode */
778 	au0828_writereg(dev, AU0828_AUDIOCTRL_50C, 0x01);
779 	return 0;
780 }
781 
782 /*
783  * Auvitek au0828 analog stream enable
784  * Please set interface0 to AS5 before enable the stream
785  */
786 static int au0828_analog_stream_enable(struct au0828_dev *d)
787 {
788 	dprintk(1, "au0828_analog_stream_enable called\n");
789 	au0828_writereg(d, AU0828_SENSORCTRL_VBI_103, 0x00);
790 	au0828_writereg(d, 0x106, 0x00);
791 	/* set x position */
792 	au0828_writereg(d, 0x110, 0x00);
793 	au0828_writereg(d, 0x111, 0x00);
794 	au0828_writereg(d, 0x114, 0xa0);
795 	au0828_writereg(d, 0x115, 0x05);
796 	/* set y position */
797 	au0828_writereg(d, 0x112, 0x00);
798 	au0828_writereg(d, 0x113, 0x00);
799 	au0828_writereg(d, 0x116, 0xf2);
800 	au0828_writereg(d, 0x117, 0x00);
801 	au0828_writereg(d, AU0828_SENSORCTRL_100, 0xb3);
802 
803 	return 0;
804 }
805 
806 int au0828_analog_stream_disable(struct au0828_dev *d)
807 {
808 	dprintk(1, "au0828_analog_stream_disable called\n");
809 	au0828_writereg(d, AU0828_SENSORCTRL_100, 0x0);
810 	return 0;
811 }
812 
813 static void au0828_analog_stream_reset(struct au0828_dev *dev)
814 {
815 	dprintk(1, "au0828_analog_stream_reset called\n");
816 	au0828_writereg(dev, AU0828_SENSORCTRL_100, 0x0);
817 	mdelay(30);
818 	au0828_writereg(dev, AU0828_SENSORCTRL_100, 0xb3);
819 }
820 
821 /*
822  * Some operations needs to stop current streaming
823  */
824 static int au0828_stream_interrupt(struct au0828_dev *dev)
825 {
826 	int ret = 0;
827 
828 	dev->stream_state = STREAM_INTERRUPT;
829 	if (dev->dev_state == DEV_DISCONNECTED)
830 		return -ENODEV;
831 	else if (ret) {
832 		dev->dev_state = DEV_MISCONFIGURED;
833 		dprintk(1, "%s device is misconfigured!\n", __func__);
834 		return ret;
835 	}
836 	return 0;
837 }
838 
839 /*
840  * au0828_release_resources
841  * unregister v4l2 devices
842  */
843 void au0828_analog_unregister(struct au0828_dev *dev)
844 {
845 	dprintk(1, "au0828_release_resources called\n");
846 	mutex_lock(&au0828_sysfs_lock);
847 
848 	if (dev->vdev)
849 		video_unregister_device(dev->vdev);
850 	if (dev->vbi_dev)
851 		video_unregister_device(dev->vbi_dev);
852 
853 	mutex_unlock(&au0828_sysfs_lock);
854 }
855 
856 
857 /* Usage lock check functions */
858 static int res_get(struct au0828_fh *fh, unsigned int bit)
859 {
860 	struct au0828_dev    *dev = fh->dev;
861 
862 	if (fh->resources & bit)
863 		/* have it already allocated */
864 		return 1;
865 
866 	/* is it free? */
867 	if (dev->resources & bit) {
868 		/* no, someone else uses it */
869 		return 0;
870 	}
871 	/* it's free, grab it */
872 	fh->resources  |= bit;
873 	dev->resources |= bit;
874 	dprintk(1, "res: get %d\n", bit);
875 
876 	return 1;
877 }
878 
879 static int res_check(struct au0828_fh *fh, unsigned int bit)
880 {
881 	return fh->resources & bit;
882 }
883 
884 static int res_locked(struct au0828_dev *dev, unsigned int bit)
885 {
886 	return dev->resources & bit;
887 }
888 
889 static void res_free(struct au0828_fh *fh, unsigned int bits)
890 {
891 	struct au0828_dev    *dev = fh->dev;
892 
893 	BUG_ON((fh->resources & bits) != bits);
894 
895 	fh->resources  &= ~bits;
896 	dev->resources &= ~bits;
897 	dprintk(1, "res: put %d\n", bits);
898 }
899 
900 static int get_ressource(struct au0828_fh *fh)
901 {
902 	switch (fh->type) {
903 	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
904 		return AU0828_RESOURCE_VIDEO;
905 	case V4L2_BUF_TYPE_VBI_CAPTURE:
906 		return AU0828_RESOURCE_VBI;
907 	default:
908 		BUG();
909 		return 0;
910 	}
911 }
912 
913 /* This function ensures that video frames continue to be delivered even if
914    the ITU-656 input isn't receiving any data (thereby preventing applications
915    such as tvtime from hanging) */
916 static void au0828_vid_buffer_timeout(unsigned long data)
917 {
918 	struct au0828_dev *dev = (struct au0828_dev *) data;
919 	struct au0828_dmaqueue *dma_q = &dev->vidq;
920 	struct au0828_buffer *buf;
921 	unsigned char *vid_data;
922 	unsigned long flags = 0;
923 
924 	spin_lock_irqsave(&dev->slock, flags);
925 
926 	buf = dev->isoc_ctl.buf;
927 	if (buf != NULL) {
928 		vid_data = videobuf_to_vmalloc(&buf->vb);
929 		memset(vid_data, 0x00, buf->vb.size); /* Blank green frame */
930 		buffer_filled(dev, dma_q, buf);
931 	}
932 	get_next_buf(dma_q, &buf);
933 
934 	if (dev->vid_timeout_running == 1)
935 		mod_timer(&dev->vid_timeout, jiffies + (HZ / 10));
936 
937 	spin_unlock_irqrestore(&dev->slock, flags);
938 }
939 
940 static void au0828_vbi_buffer_timeout(unsigned long data)
941 {
942 	struct au0828_dev *dev = (struct au0828_dev *) data;
943 	struct au0828_dmaqueue *dma_q = &dev->vbiq;
944 	struct au0828_buffer *buf;
945 	unsigned char *vbi_data;
946 	unsigned long flags = 0;
947 
948 	spin_lock_irqsave(&dev->slock, flags);
949 
950 	buf = dev->isoc_ctl.vbi_buf;
951 	if (buf != NULL) {
952 		vbi_data = videobuf_to_vmalloc(&buf->vb);
953 		memset(vbi_data, 0x00, buf->vb.size);
954 		vbi_buffer_filled(dev, dma_q, buf);
955 	}
956 	vbi_get_next_buf(dma_q, &buf);
957 
958 	if (dev->vbi_timeout_running == 1)
959 		mod_timer(&dev->vbi_timeout, jiffies + (HZ / 10));
960 	spin_unlock_irqrestore(&dev->slock, flags);
961 }
962 
963 
964 static int au0828_v4l2_open(struct file *filp)
965 {
966 	int ret = 0;
967 	struct video_device *vdev = video_devdata(filp);
968 	struct au0828_dev *dev = video_drvdata(filp);
969 	struct au0828_fh *fh;
970 	int type;
971 
972 	switch (vdev->vfl_type) {
973 	case VFL_TYPE_GRABBER:
974 		type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
975 		break;
976 	case VFL_TYPE_VBI:
977 		type = V4L2_BUF_TYPE_VBI_CAPTURE;
978 		break;
979 	default:
980 		return -EINVAL;
981 	}
982 
983 	fh = kzalloc(sizeof(struct au0828_fh), GFP_KERNEL);
984 	if (NULL == fh) {
985 		dprintk(1, "Failed allocate au0828_fh struct!\n");
986 		return -ENOMEM;
987 	}
988 
989 	fh->type = type;
990 	fh->dev = dev;
991 	filp->private_data = fh;
992 
993 	if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE && dev->users == 0) {
994 		/* set au0828 interface0 to AS5 here again */
995 		ret = usb_set_interface(dev->usbdev, 0, 5);
996 		if (ret < 0) {
997 			printk(KERN_INFO "Au0828 can't set alternate to 5!\n");
998 			return -EBUSY;
999 		}
1000 		dev->width = NTSC_STD_W;
1001 		dev->height = NTSC_STD_H;
1002 		dev->frame_size = dev->width * dev->height * 2;
1003 		dev->field_size = dev->width * dev->height;
1004 		dev->bytesperline = dev->width * 2;
1005 
1006 		au0828_analog_stream_enable(dev);
1007 		au0828_analog_stream_reset(dev);
1008 
1009 		/* If we were doing ac97 instead of i2s, it would go here...*/
1010 		au0828_i2s_init(dev);
1011 
1012 		dev->stream_state = STREAM_OFF;
1013 		dev->dev_state |= DEV_INITIALIZED;
1014 	}
1015 
1016 	dev->users++;
1017 
1018 	videobuf_queue_vmalloc_init(&fh->vb_vidq, &au0828_video_qops,
1019 				    NULL, &dev->slock,
1020 				    V4L2_BUF_TYPE_VIDEO_CAPTURE,
1021 				    V4L2_FIELD_INTERLACED,
1022 				    sizeof(struct au0828_buffer), fh,
1023 				    &dev->lock);
1024 
1025 	/* VBI Setup */
1026 	dev->vbi_width = 720;
1027 	dev->vbi_height = 1;
1028 	videobuf_queue_vmalloc_init(&fh->vb_vbiq, &au0828_vbi_qops,
1029 				    NULL, &dev->slock,
1030 				    V4L2_BUF_TYPE_VBI_CAPTURE,
1031 				    V4L2_FIELD_SEQ_TB,
1032 				    sizeof(struct au0828_buffer), fh,
1033 				    &dev->lock);
1034 	return ret;
1035 }
1036 
1037 static int au0828_v4l2_close(struct file *filp)
1038 {
1039 	int ret;
1040 	struct au0828_fh *fh = filp->private_data;
1041 	struct au0828_dev *dev = fh->dev;
1042 
1043 	if (res_check(fh, AU0828_RESOURCE_VIDEO)) {
1044 		/* Cancel timeout thread in case they didn't call streamoff */
1045 		dev->vid_timeout_running = 0;
1046 		del_timer_sync(&dev->vid_timeout);
1047 
1048 		videobuf_stop(&fh->vb_vidq);
1049 		res_free(fh, AU0828_RESOURCE_VIDEO);
1050 	}
1051 
1052 	if (res_check(fh, AU0828_RESOURCE_VBI)) {
1053 		/* Cancel timeout thread in case they didn't call streamoff */
1054 		dev->vbi_timeout_running = 0;
1055 		del_timer_sync(&dev->vbi_timeout);
1056 
1057 		videobuf_stop(&fh->vb_vbiq);
1058 		res_free(fh, AU0828_RESOURCE_VBI);
1059 	}
1060 
1061 	if (dev->users == 1) {
1062 		if (dev->dev_state & DEV_DISCONNECTED) {
1063 			au0828_analog_unregister(dev);
1064 			kfree(dev);
1065 			return 0;
1066 		}
1067 
1068 		au0828_analog_stream_disable(dev);
1069 
1070 		au0828_uninit_isoc(dev);
1071 
1072 		/* Save some power by putting tuner to sleep */
1073 		v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_power, 0);
1074 
1075 		/* When close the device, set the usb intf0 into alt0 to free
1076 		   USB bandwidth */
1077 		ret = usb_set_interface(dev->usbdev, 0, 0);
1078 		if (ret < 0)
1079 			printk(KERN_INFO "Au0828 can't set alternate to 0!\n");
1080 	}
1081 
1082 	videobuf_mmap_free(&fh->vb_vidq);
1083 	videobuf_mmap_free(&fh->vb_vbiq);
1084 	kfree(fh);
1085 	dev->users--;
1086 	wake_up_interruptible_nr(&dev->open, 1);
1087 	return 0;
1088 }
1089 
1090 static ssize_t au0828_v4l2_read(struct file *filp, char __user *buf,
1091 				size_t count, loff_t *pos)
1092 {
1093 	struct au0828_fh *fh = filp->private_data;
1094 	struct au0828_dev *dev = fh->dev;
1095 	int rc;
1096 
1097 	rc = check_dev(dev);
1098 	if (rc < 0)
1099 		return rc;
1100 
1101 	if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
1102 		if (res_locked(dev, AU0828_RESOURCE_VIDEO))
1103 			return -EBUSY;
1104 
1105 		return videobuf_read_stream(&fh->vb_vidq, buf, count, pos, 0,
1106 					filp->f_flags & O_NONBLOCK);
1107 	}
1108 
1109 	if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE) {
1110 		if (!res_get(fh, AU0828_RESOURCE_VBI))
1111 			return -EBUSY;
1112 
1113 		if (dev->vbi_timeout_running == 0) {
1114 			/* Handle case where caller tries to read without
1115 			   calling streamon first */
1116 			dev->vbi_timeout_running = 1;
1117 			mod_timer(&dev->vbi_timeout, jiffies + (HZ / 10));
1118 		}
1119 
1120 		return videobuf_read_stream(&fh->vb_vbiq, buf, count, pos, 0,
1121 					    filp->f_flags & O_NONBLOCK);
1122 	}
1123 
1124 	return 0;
1125 }
1126 
1127 static unsigned int au0828_v4l2_poll(struct file *filp, poll_table *wait)
1128 {
1129 	struct au0828_fh *fh = filp->private_data;
1130 	struct au0828_dev *dev = fh->dev;
1131 	int rc;
1132 
1133 	rc = check_dev(dev);
1134 	if (rc < 0)
1135 		return rc;
1136 
1137 	if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
1138 		if (!res_get(fh, AU0828_RESOURCE_VIDEO))
1139 			return POLLERR;
1140 		return videobuf_poll_stream(filp, &fh->vb_vidq, wait);
1141 	} else if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE) {
1142 		if (!res_get(fh, AU0828_RESOURCE_VBI))
1143 			return POLLERR;
1144 		return videobuf_poll_stream(filp, &fh->vb_vbiq, wait);
1145 	} else {
1146 		return POLLERR;
1147 	}
1148 }
1149 
1150 static int au0828_v4l2_mmap(struct file *filp, struct vm_area_struct *vma)
1151 {
1152 	struct au0828_fh *fh    = filp->private_data;
1153 	struct au0828_dev *dev   = fh->dev;
1154 	int		 rc;
1155 
1156 	rc = check_dev(dev);
1157 	if (rc < 0)
1158 		return rc;
1159 
1160 	if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
1161 		rc = videobuf_mmap_mapper(&fh->vb_vidq, vma);
1162 	else if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE)
1163 		rc = videobuf_mmap_mapper(&fh->vb_vbiq, vma);
1164 
1165 	return rc;
1166 }
1167 
1168 static int au0828_set_format(struct au0828_dev *dev, unsigned int cmd,
1169 			     struct v4l2_format *format)
1170 {
1171 	int ret;
1172 	int width = format->fmt.pix.width;
1173 	int height = format->fmt.pix.height;
1174 
1175 	if (format->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
1176 		return -EINVAL;
1177 
1178 	/* If they are demanding a format other than the one we support,
1179 	   bail out (tvtime asks for UYVY and then retries with YUYV) */
1180 	if (format->fmt.pix.pixelformat != V4L2_PIX_FMT_UYVY)
1181 		return -EINVAL;
1182 
1183 	/* format->fmt.pix.width only support 720 and height 480 */
1184 	if (width != 720)
1185 		width = 720;
1186 	if (height != 480)
1187 		height = 480;
1188 
1189 	format->fmt.pix.width = width;
1190 	format->fmt.pix.height = height;
1191 	format->fmt.pix.pixelformat = V4L2_PIX_FMT_UYVY;
1192 	format->fmt.pix.bytesperline = width * 2;
1193 	format->fmt.pix.sizeimage = width * height * 2;
1194 	format->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
1195 	format->fmt.pix.field = V4L2_FIELD_INTERLACED;
1196 
1197 	if (cmd == VIDIOC_TRY_FMT)
1198 		return 0;
1199 
1200 	/* maybe set new image format, driver current only support 720*480 */
1201 	dev->width = width;
1202 	dev->height = height;
1203 	dev->frame_size = width * height * 2;
1204 	dev->field_size = width * height;
1205 	dev->bytesperline = width * 2;
1206 
1207 	if (dev->stream_state == STREAM_ON) {
1208 		dprintk(1, "VIDIOC_SET_FMT: interrupting stream!\n");
1209 		ret = au0828_stream_interrupt(dev);
1210 		if (ret != 0) {
1211 			dprintk(1, "error interrupting video stream!\n");
1212 			return ret;
1213 		}
1214 	}
1215 
1216 	/* set au0828 interface0 to AS5 here again */
1217 	ret = usb_set_interface(dev->usbdev, 0, 5);
1218 	if (ret < 0) {
1219 		printk(KERN_INFO "Au0828 can't set alt setting to 5!\n");
1220 		return -EBUSY;
1221 	}
1222 
1223 	au0828_analog_stream_enable(dev);
1224 
1225 	return 0;
1226 }
1227 
1228 
1229 static int vidioc_queryctrl(struct file *file, void *priv,
1230 			    struct v4l2_queryctrl *qc)
1231 {
1232 	struct au0828_fh *fh = priv;
1233 	struct au0828_dev *dev = fh->dev;
1234 	v4l2_device_call_all(&dev->v4l2_dev, 0, core, queryctrl, qc);
1235 	if (qc->type)
1236 		return 0;
1237 	else
1238 		return -EINVAL;
1239 }
1240 
1241 static int vidioc_querycap(struct file *file, void  *priv,
1242 			   struct v4l2_capability *cap)
1243 {
1244 	struct au0828_fh *fh  = priv;
1245 	struct au0828_dev *dev = fh->dev;
1246 
1247 	strlcpy(cap->driver, "au0828", sizeof(cap->driver));
1248 	strlcpy(cap->card, dev->board.name, sizeof(cap->card));
1249 	strlcpy(cap->bus_info, dev->v4l2_dev.name, sizeof(cap->bus_info));
1250 
1251 	/*set the device capabilities */
1252 	cap->capabilities = V4L2_CAP_VIDEO_CAPTURE |
1253 		V4L2_CAP_VBI_CAPTURE |
1254 		V4L2_CAP_AUDIO |
1255 		V4L2_CAP_READWRITE |
1256 		V4L2_CAP_STREAMING |
1257 		V4L2_CAP_TUNER;
1258 	return 0;
1259 }
1260 
1261 static int vidioc_enum_fmt_vid_cap(struct file *file, void  *priv,
1262 					struct v4l2_fmtdesc *f)
1263 {
1264 	if (f->index)
1265 		return -EINVAL;
1266 
1267 	f->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1268 	strcpy(f->description, "Packed YUV2");
1269 
1270 	f->flags = 0;
1271 	f->pixelformat = V4L2_PIX_FMT_UYVY;
1272 
1273 	return 0;
1274 }
1275 
1276 static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
1277 					struct v4l2_format *f)
1278 {
1279 	struct au0828_fh *fh  = priv;
1280 	struct au0828_dev *dev = fh->dev;
1281 
1282 	f->fmt.pix.width = dev->width;
1283 	f->fmt.pix.height = dev->height;
1284 	f->fmt.pix.pixelformat = V4L2_PIX_FMT_UYVY;
1285 	f->fmt.pix.bytesperline = dev->bytesperline;
1286 	f->fmt.pix.sizeimage = dev->frame_size;
1287 	f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M; /* NTSC/PAL */
1288 	f->fmt.pix.field = V4L2_FIELD_INTERLACED;
1289 	return 0;
1290 }
1291 
1292 static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
1293 				  struct v4l2_format *f)
1294 {
1295 	struct au0828_fh *fh  = priv;
1296 	struct au0828_dev *dev = fh->dev;
1297 
1298 	return au0828_set_format(dev, VIDIOC_TRY_FMT, f);
1299 }
1300 
1301 static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
1302 				struct v4l2_format *f)
1303 {
1304 	struct au0828_fh *fh  = priv;
1305 	struct au0828_dev *dev = fh->dev;
1306 	int rc;
1307 
1308 	rc = check_dev(dev);
1309 	if (rc < 0)
1310 		return rc;
1311 
1312 	if (videobuf_queue_is_busy(&fh->vb_vidq)) {
1313 		printk(KERN_INFO "%s queue busy\n", __func__);
1314 		rc = -EBUSY;
1315 		goto out;
1316 	}
1317 
1318 	rc = au0828_set_format(dev, VIDIOC_S_FMT, f);
1319 out:
1320 	return rc;
1321 }
1322 
1323 static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id * norm)
1324 {
1325 	struct au0828_fh *fh = priv;
1326 	struct au0828_dev *dev = fh->dev;
1327 
1328 	if (dev->dvb.frontend && dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl)
1329 		dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl(dev->dvb.frontend, 1);
1330 
1331 	/* FIXME: when we support something other than NTSC, we are going to
1332 	   have to make the au0828 bridge adjust the size of its capture
1333 	   buffer, which is currently hardcoded at 720x480 */
1334 
1335 	v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_std, *norm);
1336 	dev->std_set_in_tuner_core = 1;
1337 
1338 	if (dev->dvb.frontend && dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl)
1339 		dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl(dev->dvb.frontend, 0);
1340 
1341 	return 0;
1342 }
1343 
1344 static int vidioc_enum_input(struct file *file, void *priv,
1345 				struct v4l2_input *input)
1346 {
1347 	struct au0828_fh *fh = priv;
1348 	struct au0828_dev *dev = fh->dev;
1349 	unsigned int tmp;
1350 
1351 	static const char *inames[] = {
1352 		[AU0828_VMUX_UNDEFINED] = "Undefined",
1353 		[AU0828_VMUX_COMPOSITE] = "Composite",
1354 		[AU0828_VMUX_SVIDEO] = "S-Video",
1355 		[AU0828_VMUX_CABLE] = "Cable TV",
1356 		[AU0828_VMUX_TELEVISION] = "Television",
1357 		[AU0828_VMUX_DVB] = "DVB",
1358 		[AU0828_VMUX_DEBUG] = "tv debug"
1359 	};
1360 
1361 	tmp = input->index;
1362 
1363 	if (tmp >= AU0828_MAX_INPUT)
1364 		return -EINVAL;
1365 	if (AUVI_INPUT(tmp).type == 0)
1366 		return -EINVAL;
1367 
1368 	input->index = tmp;
1369 	strcpy(input->name, inames[AUVI_INPUT(tmp).type]);
1370 	if ((AUVI_INPUT(tmp).type == AU0828_VMUX_TELEVISION) ||
1371 	    (AUVI_INPUT(tmp).type == AU0828_VMUX_CABLE))
1372 		input->type |= V4L2_INPUT_TYPE_TUNER;
1373 	else
1374 		input->type |= V4L2_INPUT_TYPE_CAMERA;
1375 
1376 	input->std = dev->vdev->tvnorms;
1377 
1378 	return 0;
1379 }
1380 
1381 static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
1382 {
1383 	struct au0828_fh *fh = priv;
1384 	struct au0828_dev *dev = fh->dev;
1385 	*i = dev->ctrl_input;
1386 	return 0;
1387 }
1388 
1389 static int vidioc_s_input(struct file *file, void *priv, unsigned int index)
1390 {
1391 	struct au0828_fh *fh = priv;
1392 	struct au0828_dev *dev = fh->dev;
1393 	int i;
1394 
1395 	dprintk(1, "VIDIOC_S_INPUT in function %s, input=%d\n", __func__,
1396 		index);
1397 	if (index >= AU0828_MAX_INPUT)
1398 		return -EINVAL;
1399 	if (AUVI_INPUT(index).type == 0)
1400 		return -EINVAL;
1401 	dev->ctrl_input = index;
1402 
1403 	switch (AUVI_INPUT(index).type) {
1404 	case AU0828_VMUX_SVIDEO:
1405 		dev->input_type = AU0828_VMUX_SVIDEO;
1406 		break;
1407 	case AU0828_VMUX_COMPOSITE:
1408 		dev->input_type = AU0828_VMUX_COMPOSITE;
1409 		break;
1410 	case AU0828_VMUX_TELEVISION:
1411 		dev->input_type = AU0828_VMUX_TELEVISION;
1412 		break;
1413 	default:
1414 		dprintk(1, "VIDIOC_S_INPUT unknown input type set [%d]\n",
1415 			AUVI_INPUT(index).type);
1416 		break;
1417 	}
1418 
1419 	v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_routing,
1420 			AUVI_INPUT(index).vmux, 0, 0);
1421 
1422 	for (i = 0; i < AU0828_MAX_INPUT; i++) {
1423 		int enable = 0;
1424 		if (AUVI_INPUT(i).audio_setup == NULL)
1425 			continue;
1426 
1427 		if (i == index)
1428 			enable = 1;
1429 		else
1430 			enable = 0;
1431 		if (enable) {
1432 			(AUVI_INPUT(i).audio_setup)(dev, enable);
1433 		} else {
1434 			/* Make sure we leave it turned on if some
1435 			   other input is routed to this callback */
1436 			if ((AUVI_INPUT(i).audio_setup) !=
1437 			    ((AUVI_INPUT(index).audio_setup))) {
1438 				(AUVI_INPUT(i).audio_setup)(dev, enable);
1439 			}
1440 		}
1441 	}
1442 
1443 	v4l2_device_call_all(&dev->v4l2_dev, 0, audio, s_routing,
1444 			AUVI_INPUT(index).amux, 0, 0);
1445 	return 0;
1446 }
1447 
1448 static int vidioc_g_audio(struct file *file, void *priv, struct v4l2_audio *a)
1449 {
1450 	struct au0828_fh *fh = priv;
1451 	struct au0828_dev *dev = fh->dev;
1452 	unsigned int index = a->index;
1453 
1454 	if (a->index > 1)
1455 		return -EINVAL;
1456 
1457 	index = dev->ctrl_ainput;
1458 	if (index == 0)
1459 		strcpy(a->name, "Television");
1460 	else
1461 		strcpy(a->name, "Line in");
1462 
1463 	a->capability = V4L2_AUDCAP_STEREO;
1464 	a->index = index;
1465 	return 0;
1466 }
1467 
1468 static int vidioc_s_audio(struct file *file, void *priv, const struct v4l2_audio *a)
1469 {
1470 	struct au0828_fh *fh = priv;
1471 	struct au0828_dev *dev = fh->dev;
1472 	if (a->index != dev->ctrl_ainput)
1473 		return -EINVAL;
1474 	return 0;
1475 }
1476 
1477 static int vidioc_g_ctrl(struct file *file, void *priv,
1478 			 struct v4l2_control *ctrl)
1479 {
1480 	struct au0828_fh *fh = priv;
1481 	struct au0828_dev *dev = fh->dev;
1482 
1483 	v4l2_device_call_all(&dev->v4l2_dev, 0, core, g_ctrl, ctrl);
1484 	return 0;
1485 
1486 }
1487 
1488 static int vidioc_s_ctrl(struct file *file, void *priv,
1489 				struct v4l2_control *ctrl)
1490 {
1491 	struct au0828_fh *fh = priv;
1492 	struct au0828_dev *dev = fh->dev;
1493 	v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_ctrl, ctrl);
1494 	return 0;
1495 }
1496 
1497 static int vidioc_g_tuner(struct file *file, void *priv, struct v4l2_tuner *t)
1498 {
1499 	struct au0828_fh *fh = priv;
1500 	struct au0828_dev *dev = fh->dev;
1501 
1502 	if (t->index != 0)
1503 		return -EINVAL;
1504 
1505 	strcpy(t->name, "Auvitek tuner");
1506 	v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, g_tuner, t);
1507 	return 0;
1508 }
1509 
1510 static int vidioc_s_tuner(struct file *file, void *priv,
1511 				struct v4l2_tuner *t)
1512 {
1513 	struct au0828_fh *fh = priv;
1514 	struct au0828_dev *dev = fh->dev;
1515 
1516 	if (t->index != 0)
1517 		return -EINVAL;
1518 
1519 	t->type = V4L2_TUNER_ANALOG_TV;
1520 
1521 	if (dev->dvb.frontend && dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl)
1522 		dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl(dev->dvb.frontend, 1);
1523 
1524 	v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_tuner, t);
1525 
1526 	if (dev->dvb.frontend && dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl)
1527 		dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl(dev->dvb.frontend, 0);
1528 
1529 	dprintk(1, "VIDIOC_S_TUNER: signal = %x, afc = %x\n", t->signal,
1530 		t->afc);
1531 
1532 	return 0;
1533 
1534 }
1535 
1536 static int vidioc_g_frequency(struct file *file, void *priv,
1537 				struct v4l2_frequency *freq)
1538 {
1539 	struct au0828_fh *fh = priv;
1540 	struct au0828_dev *dev = fh->dev;
1541 
1542 	freq->type = V4L2_TUNER_ANALOG_TV;
1543 	freq->frequency = dev->ctrl_freq;
1544 	return 0;
1545 }
1546 
1547 static int vidioc_s_frequency(struct file *file, void *priv,
1548 				struct v4l2_frequency *freq)
1549 {
1550 	struct au0828_fh *fh = priv;
1551 	struct au0828_dev *dev = fh->dev;
1552 
1553 	if (freq->tuner != 0)
1554 		return -EINVAL;
1555 	if (freq->type != V4L2_TUNER_ANALOG_TV)
1556 		return -EINVAL;
1557 
1558 	dev->ctrl_freq = freq->frequency;
1559 
1560 	if (dev->dvb.frontend && dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl)
1561 		dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl(dev->dvb.frontend, 1);
1562 
1563 	if (dev->std_set_in_tuner_core == 0) {
1564 	  /* If we've never sent the standard in tuner core, do so now.  We
1565 	     don't do this at device probe because we don't want to incur
1566 	     the cost of a firmware load */
1567 	  v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_std,
1568 			       dev->vdev->tvnorms);
1569 	  dev->std_set_in_tuner_core = 1;
1570 	}
1571 
1572 	v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_frequency, freq);
1573 
1574 	if (dev->dvb.frontend && dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl)
1575 		dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl(dev->dvb.frontend, 0);
1576 
1577 	au0828_analog_stream_reset(dev);
1578 
1579 	return 0;
1580 }
1581 
1582 
1583 /* RAW VBI ioctls */
1584 
1585 static int vidioc_g_fmt_vbi_cap(struct file *file, void *priv,
1586 				struct v4l2_format *format)
1587 {
1588 	struct au0828_fh      *fh  = priv;
1589 	struct au0828_dev     *dev = fh->dev;
1590 
1591 	format->fmt.vbi.samples_per_line = dev->vbi_width;
1592 	format->fmt.vbi.sample_format = V4L2_PIX_FMT_GREY;
1593 	format->fmt.vbi.offset = 0;
1594 	format->fmt.vbi.flags = 0;
1595 	format->fmt.vbi.sampling_rate = 6750000 * 4 / 2;
1596 
1597 	format->fmt.vbi.count[0] = dev->vbi_height;
1598 	format->fmt.vbi.count[1] = dev->vbi_height;
1599 	format->fmt.vbi.start[0] = 21;
1600 	format->fmt.vbi.start[1] = 284;
1601 
1602 	return 0;
1603 }
1604 
1605 static int vidioc_g_chip_ident(struct file *file, void *priv,
1606 	       struct v4l2_dbg_chip_ident *chip)
1607 {
1608 	struct au0828_fh *fh = priv;
1609 	struct au0828_dev *dev = fh->dev;
1610 	chip->ident = V4L2_IDENT_NONE;
1611 	chip->revision = 0;
1612 
1613 	if (v4l2_chip_match_host(&chip->match)) {
1614 		chip->ident = V4L2_IDENT_AU0828;
1615 		return 0;
1616 	}
1617 
1618 	v4l2_device_call_all(&dev->v4l2_dev, 0, core, g_chip_ident, chip);
1619 	if (chip->ident == V4L2_IDENT_NONE)
1620 		return -EINVAL;
1621 
1622 	return 0;
1623 }
1624 
1625 static int vidioc_cropcap(struct file *file, void *priv,
1626 			  struct v4l2_cropcap *cc)
1627 {
1628 	struct au0828_fh *fh = priv;
1629 	struct au0828_dev *dev = fh->dev;
1630 
1631 	if (cc->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
1632 		return -EINVAL;
1633 
1634 	cc->bounds.left = 0;
1635 	cc->bounds.top = 0;
1636 	cc->bounds.width = dev->width;
1637 	cc->bounds.height = dev->height;
1638 
1639 	cc->defrect = cc->bounds;
1640 
1641 	cc->pixelaspect.numerator = 54;
1642 	cc->pixelaspect.denominator = 59;
1643 
1644 	return 0;
1645 }
1646 
1647 static int vidioc_streamon(struct file *file, void *priv,
1648 			   enum v4l2_buf_type type)
1649 {
1650 	struct au0828_fh      *fh  = priv;
1651 	struct au0828_dev     *dev = fh->dev;
1652 	int                   rc = -EINVAL;
1653 
1654 	rc = check_dev(dev);
1655 	if (rc < 0)
1656 		return rc;
1657 
1658 	if (unlikely(type != fh->type))
1659 		return -EINVAL;
1660 
1661 	dprintk(1, "vidioc_streamon fh=%p t=%d fh->res=%d dev->res=%d\n",
1662 		fh, type, fh->resources, dev->resources);
1663 
1664 	if (unlikely(!res_get(fh, get_ressource(fh))))
1665 		return -EBUSY;
1666 
1667 	if (type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
1668 		au0828_analog_stream_enable(dev);
1669 		v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_stream, 1);
1670 	}
1671 
1672 	if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
1673 		rc = videobuf_streamon(&fh->vb_vidq);
1674 		dev->vid_timeout_running = 1;
1675 		mod_timer(&dev->vid_timeout, jiffies + (HZ / 10));
1676 	} else if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE) {
1677 		rc = videobuf_streamon(&fh->vb_vbiq);
1678 		dev->vbi_timeout_running = 1;
1679 		mod_timer(&dev->vbi_timeout, jiffies + (HZ / 10));
1680 	}
1681 
1682 	return rc;
1683 }
1684 
1685 static int vidioc_streamoff(struct file *file, void *priv,
1686 			    enum v4l2_buf_type type)
1687 {
1688 	struct au0828_fh      *fh  = priv;
1689 	struct au0828_dev     *dev = fh->dev;
1690 	int                   rc;
1691 	int                   i;
1692 
1693 	rc = check_dev(dev);
1694 	if (rc < 0)
1695 		return rc;
1696 
1697 	if (fh->type != V4L2_BUF_TYPE_VIDEO_CAPTURE &&
1698 	    fh->type != V4L2_BUF_TYPE_VBI_CAPTURE)
1699 		return -EINVAL;
1700 	if (type != fh->type)
1701 		return -EINVAL;
1702 
1703 	dprintk(1, "vidioc_streamoff fh=%p t=%d fh->res=%d dev->res=%d\n",
1704 		fh, type, fh->resources, dev->resources);
1705 
1706 	if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
1707 		dev->vid_timeout_running = 0;
1708 		del_timer_sync(&dev->vid_timeout);
1709 
1710 		v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_stream, 0);
1711 		rc = au0828_stream_interrupt(dev);
1712 		if (rc != 0)
1713 			return rc;
1714 
1715 		for (i = 0; i < AU0828_MAX_INPUT; i++) {
1716 			if (AUVI_INPUT(i).audio_setup == NULL)
1717 				continue;
1718 			(AUVI_INPUT(i).audio_setup)(dev, 0);
1719 		}
1720 
1721 		if (res_check(fh, AU0828_RESOURCE_VIDEO)) {
1722 			videobuf_streamoff(&fh->vb_vidq);
1723 			res_free(fh, AU0828_RESOURCE_VIDEO);
1724 		}
1725 	} else if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE) {
1726 		dev->vbi_timeout_running = 0;
1727 		del_timer_sync(&dev->vbi_timeout);
1728 
1729 		if (res_check(fh, AU0828_RESOURCE_VBI)) {
1730 			videobuf_streamoff(&fh->vb_vbiq);
1731 			res_free(fh, AU0828_RESOURCE_VBI);
1732 		}
1733 	}
1734 
1735 	return 0;
1736 }
1737 
1738 #ifdef CONFIG_VIDEO_ADV_DEBUG
1739 static int vidioc_g_register(struct file *file, void *priv,
1740 			     struct v4l2_dbg_register *reg)
1741 {
1742 	struct au0828_fh *fh = priv;
1743 	struct au0828_dev *dev = fh->dev;
1744 
1745 	switch (reg->match.type) {
1746 	case V4L2_CHIP_MATCH_I2C_DRIVER:
1747 		v4l2_device_call_all(&dev->v4l2_dev, 0, core, g_register, reg);
1748 		return 0;
1749 	default:
1750 		if (!v4l2_chip_match_host(&reg->match))
1751 			return -EINVAL;
1752 	}
1753 
1754 	reg->val = au0828_read(dev, reg->reg);
1755 	return 0;
1756 }
1757 
1758 static int vidioc_s_register(struct file *file, void *priv,
1759 			     struct v4l2_dbg_register *reg)
1760 {
1761 	struct au0828_fh *fh = priv;
1762 	struct au0828_dev *dev = fh->dev;
1763 
1764 	switch (reg->match.type) {
1765 	case V4L2_CHIP_MATCH_I2C_DRIVER:
1766 		v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_register, reg);
1767 		return 0;
1768 	default:
1769 		if (!v4l2_chip_match_host(&reg->match))
1770 			return -EINVAL;
1771 	}
1772 	return au0828_writereg(dev, reg->reg, reg->val);
1773 }
1774 #endif
1775 
1776 static int vidioc_reqbufs(struct file *file, void *priv,
1777 			  struct v4l2_requestbuffers *rb)
1778 {
1779 	struct au0828_fh *fh = priv;
1780 	struct au0828_dev *dev = fh->dev;
1781 	int rc;
1782 
1783 	rc = check_dev(dev);
1784 	if (rc < 0)
1785 		return rc;
1786 
1787 	if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
1788 		rc = videobuf_reqbufs(&fh->vb_vidq, rb);
1789 	else if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE)
1790 		rc = videobuf_reqbufs(&fh->vb_vbiq, rb);
1791 
1792 	return rc;
1793 }
1794 
1795 static int vidioc_querybuf(struct file *file, void *priv,
1796 			   struct v4l2_buffer *b)
1797 {
1798 	struct au0828_fh *fh = priv;
1799 	struct au0828_dev *dev = fh->dev;
1800 	int rc;
1801 
1802 	rc = check_dev(dev);
1803 	if (rc < 0)
1804 		return rc;
1805 
1806 	if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
1807 		rc = videobuf_querybuf(&fh->vb_vidq, b);
1808 	else if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE)
1809 		rc = videobuf_querybuf(&fh->vb_vbiq, b);
1810 
1811 	return rc;
1812 }
1813 
1814 static int vidioc_qbuf(struct file *file, void *priv, struct v4l2_buffer *b)
1815 {
1816 	struct au0828_fh *fh = priv;
1817 	struct au0828_dev *dev = fh->dev;
1818 	int rc;
1819 
1820 	rc = check_dev(dev);
1821 	if (rc < 0)
1822 		return rc;
1823 
1824 	if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
1825 		rc = videobuf_qbuf(&fh->vb_vidq, b);
1826 	else if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE)
1827 		rc = videobuf_qbuf(&fh->vb_vbiq, b);
1828 
1829 	return rc;
1830 }
1831 
1832 static int vidioc_dqbuf(struct file *file, void *priv, struct v4l2_buffer *b)
1833 {
1834 	struct au0828_fh *fh = priv;
1835 	struct au0828_dev *dev = fh->dev;
1836 	int rc;
1837 
1838 	rc = check_dev(dev);
1839 	if (rc < 0)
1840 		return rc;
1841 
1842 	/* Workaround for a bug in the au0828 hardware design that sometimes
1843 	   results in the colorspace being inverted */
1844 	if (dev->greenscreen_detected == 1) {
1845 		dprintk(1, "Detected green frame.  Resetting stream...\n");
1846 		au0828_analog_stream_reset(dev);
1847 		dev->greenscreen_detected = 0;
1848 	}
1849 
1850 	if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
1851 		rc = videobuf_dqbuf(&fh->vb_vidq, b, file->f_flags & O_NONBLOCK);
1852 	else if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE)
1853 		rc = videobuf_dqbuf(&fh->vb_vbiq, b, file->f_flags & O_NONBLOCK);
1854 
1855 	return rc;
1856 }
1857 
1858 static struct v4l2_file_operations au0828_v4l_fops = {
1859 	.owner      = THIS_MODULE,
1860 	.open       = au0828_v4l2_open,
1861 	.release    = au0828_v4l2_close,
1862 	.read       = au0828_v4l2_read,
1863 	.poll       = au0828_v4l2_poll,
1864 	.mmap       = au0828_v4l2_mmap,
1865 	.unlocked_ioctl = video_ioctl2,
1866 };
1867 
1868 static const struct v4l2_ioctl_ops video_ioctl_ops = {
1869 	.vidioc_querycap            = vidioc_querycap,
1870 	.vidioc_enum_fmt_vid_cap    = vidioc_enum_fmt_vid_cap,
1871 	.vidioc_g_fmt_vid_cap       = vidioc_g_fmt_vid_cap,
1872 	.vidioc_try_fmt_vid_cap     = vidioc_try_fmt_vid_cap,
1873 	.vidioc_s_fmt_vid_cap       = vidioc_s_fmt_vid_cap,
1874 	.vidioc_g_fmt_vbi_cap       = vidioc_g_fmt_vbi_cap,
1875 	.vidioc_s_fmt_vbi_cap       = vidioc_g_fmt_vbi_cap,
1876 	.vidioc_g_audio             = vidioc_g_audio,
1877 	.vidioc_s_audio             = vidioc_s_audio,
1878 	.vidioc_cropcap             = vidioc_cropcap,
1879 	.vidioc_reqbufs             = vidioc_reqbufs,
1880 	.vidioc_querybuf            = vidioc_querybuf,
1881 	.vidioc_qbuf                = vidioc_qbuf,
1882 	.vidioc_dqbuf               = vidioc_dqbuf,
1883 	.vidioc_s_std               = vidioc_s_std,
1884 	.vidioc_enum_input          = vidioc_enum_input,
1885 	.vidioc_g_input             = vidioc_g_input,
1886 	.vidioc_s_input             = vidioc_s_input,
1887 	.vidioc_queryctrl           = vidioc_queryctrl,
1888 	.vidioc_g_ctrl              = vidioc_g_ctrl,
1889 	.vidioc_s_ctrl              = vidioc_s_ctrl,
1890 	.vidioc_streamon            = vidioc_streamon,
1891 	.vidioc_streamoff           = vidioc_streamoff,
1892 	.vidioc_g_tuner             = vidioc_g_tuner,
1893 	.vidioc_s_tuner             = vidioc_s_tuner,
1894 	.vidioc_g_frequency         = vidioc_g_frequency,
1895 	.vidioc_s_frequency         = vidioc_s_frequency,
1896 #ifdef CONFIG_VIDEO_ADV_DEBUG
1897 	.vidioc_g_register          = vidioc_g_register,
1898 	.vidioc_s_register          = vidioc_s_register,
1899 #endif
1900 	.vidioc_g_chip_ident        = vidioc_g_chip_ident,
1901 };
1902 
1903 static const struct video_device au0828_video_template = {
1904 	.fops                       = &au0828_v4l_fops,
1905 	.release                    = video_device_release,
1906 	.ioctl_ops 		    = &video_ioctl_ops,
1907 	.tvnorms                    = V4L2_STD_NTSC_M,
1908 	.current_norm               = V4L2_STD_NTSC_M,
1909 };
1910 
1911 /**************************************************************************/
1912 
1913 int au0828_analog_register(struct au0828_dev *dev,
1914 			   struct usb_interface *interface)
1915 {
1916 	int retval = -ENOMEM;
1917 	struct usb_host_interface *iface_desc;
1918 	struct usb_endpoint_descriptor *endpoint;
1919 	int i, ret;
1920 
1921 	dprintk(1, "au0828_analog_register called!\n");
1922 
1923 	/* set au0828 usb interface0 to as5 */
1924 	retval = usb_set_interface(dev->usbdev,
1925 			interface->cur_altsetting->desc.bInterfaceNumber, 5);
1926 	if (retval != 0) {
1927 		printk(KERN_INFO "Failure setting usb interface0 to as5\n");
1928 		return retval;
1929 	}
1930 
1931 	/* Figure out which endpoint has the isoc interface */
1932 	iface_desc = interface->cur_altsetting;
1933 	for (i = 0; i < iface_desc->desc.bNumEndpoints; i++) {
1934 		endpoint = &iface_desc->endpoint[i].desc;
1935 		if (((endpoint->bEndpointAddress & USB_ENDPOINT_DIR_MASK)
1936 		     == USB_DIR_IN) &&
1937 		    ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
1938 		     == USB_ENDPOINT_XFER_ISOC)) {
1939 
1940 			/* we find our isoc in endpoint */
1941 			u16 tmp = le16_to_cpu(endpoint->wMaxPacketSize);
1942 			dev->max_pkt_size = (tmp & 0x07ff) *
1943 				(((tmp & 0x1800) >> 11) + 1);
1944 			dev->isoc_in_endpointaddr = endpoint->bEndpointAddress;
1945 		}
1946 	}
1947 	if (!(dev->isoc_in_endpointaddr)) {
1948 		printk(KERN_INFO "Could not locate isoc endpoint\n");
1949 		kfree(dev);
1950 		return -ENODEV;
1951 	}
1952 
1953 	init_waitqueue_head(&dev->open);
1954 	spin_lock_init(&dev->slock);
1955 
1956 	/* init video dma queues */
1957 	INIT_LIST_HEAD(&dev->vidq.active);
1958 	INIT_LIST_HEAD(&dev->vidq.queued);
1959 	INIT_LIST_HEAD(&dev->vbiq.active);
1960 	INIT_LIST_HEAD(&dev->vbiq.queued);
1961 
1962 	dev->vid_timeout.function = au0828_vid_buffer_timeout;
1963 	dev->vid_timeout.data = (unsigned long) dev;
1964 	init_timer(&dev->vid_timeout);
1965 
1966 	dev->vbi_timeout.function = au0828_vbi_buffer_timeout;
1967 	dev->vbi_timeout.data = (unsigned long) dev;
1968 	init_timer(&dev->vbi_timeout);
1969 
1970 	dev->width = NTSC_STD_W;
1971 	dev->height = NTSC_STD_H;
1972 	dev->field_size = dev->width * dev->height;
1973 	dev->frame_size = dev->field_size << 1;
1974 	dev->bytesperline = dev->width << 1;
1975 	dev->ctrl_ainput = 0;
1976 
1977 	/* allocate and fill v4l2 video struct */
1978 	dev->vdev = video_device_alloc();
1979 	if (NULL == dev->vdev) {
1980 		dprintk(1, "Can't allocate video_device.\n");
1981 		return -ENOMEM;
1982 	}
1983 
1984 	/* allocate the VBI struct */
1985 	dev->vbi_dev = video_device_alloc();
1986 	if (NULL == dev->vbi_dev) {
1987 		dprintk(1, "Can't allocate vbi_device.\n");
1988 		ret = -ENOMEM;
1989 		goto err_vdev;
1990 	}
1991 
1992 	/* Fill the video capture device struct */
1993 	*dev->vdev = au0828_video_template;
1994 	dev->vdev->parent = &dev->usbdev->dev;
1995 	dev->vdev->lock = &dev->lock;
1996 	strcpy(dev->vdev->name, "au0828a video");
1997 
1998 	/* Setup the VBI device */
1999 	*dev->vbi_dev = au0828_video_template;
2000 	dev->vbi_dev->parent = &dev->usbdev->dev;
2001 	dev->vbi_dev->lock = &dev->lock;
2002 	strcpy(dev->vbi_dev->name, "au0828a vbi");
2003 
2004 	/* Register the v4l2 device */
2005 	video_set_drvdata(dev->vdev, dev);
2006 	retval = video_register_device(dev->vdev, VFL_TYPE_GRABBER, -1);
2007 	if (retval != 0) {
2008 		dprintk(1, "unable to register video device (error = %d).\n",
2009 			retval);
2010 		ret = -ENODEV;
2011 		goto err_vbi_dev;
2012 	}
2013 
2014 	/* Register the vbi device */
2015 	video_set_drvdata(dev->vbi_dev, dev);
2016 	retval = video_register_device(dev->vbi_dev, VFL_TYPE_VBI, -1);
2017 	if (retval != 0) {
2018 		dprintk(1, "unable to register vbi device (error = %d).\n",
2019 			retval);
2020 		ret = -ENODEV;
2021 		goto err_vbi_dev;
2022 	}
2023 
2024 	dprintk(1, "%s completed!\n", __func__);
2025 
2026 	return 0;
2027 
2028 err_vbi_dev:
2029 	video_device_release(dev->vbi_dev);
2030 err_vdev:
2031 	video_device_release(dev->vdev);
2032 	return ret;
2033 }
2034 
2035