Merge branch 'slab/next' into slab/for-linus
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / media / usb / au0828 / au0828-video.c
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