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