]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/media/usb/em28xx/em28xx-video.c
Merge remote-tracking branch 'v4l-dvb/master'
[karo-tx-linux.git] / drivers / media / usb / em28xx / em28xx-video.c
1 /*
2    em28xx-video.c - driver for Empia EM2800/EM2820/2840 USB
3                     video capture devices
4
5    Copyright (C) 2005 Ludovico Cavedon <cavedon@sssup.it>
6                       Markus Rechberger <mrechberger@gmail.com>
7                       Mauro Carvalho Chehab <mchehab@infradead.org>
8                       Sascha Sommer <saschasommer@freenet.de>
9    Copyright (C) 2012 Frank Schäfer <fschaefer.oss@googlemail.com>
10
11         Some parts based on SN9C10x PC Camera Controllers GPL driver made
12                 by Luca Risolia <luca.risolia@studio.unibo.it>
13
14    This program is free software; you can redistribute it and/or modify
15    it under the terms of the GNU General Public License as published by
16    the Free Software Foundation; either version 2 of the License, or
17    (at your option) any later version.
18
19    This program is distributed in the hope that it will be useful,
20    but WITHOUT ANY WARRANTY; without even the implied warranty of
21    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22    GNU General Public License for more details.
23
24    You should have received a copy of the GNU General Public License
25    along with this program; if not, write to the Free Software
26    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
27  */
28
29 #include <linux/init.h>
30 #include <linux/list.h>
31 #include <linux/module.h>
32 #include <linux/kernel.h>
33 #include <linux/bitmap.h>
34 #include <linux/usb.h>
35 #include <linux/i2c.h>
36 #include <linux/mm.h>
37 #include <linux/mutex.h>
38 #include <linux/slab.h>
39
40 #include "em28xx.h"
41 #include "em28xx-v4l.h"
42 #include <media/v4l2-common.h>
43 #include <media/v4l2-ioctl.h>
44 #include <media/v4l2-event.h>
45 #include <media/v4l2-clk.h>
46 #include <media/msp3400.h>
47 #include <media/tuner.h>
48
49 #define DRIVER_AUTHOR "Ludovico Cavedon <cavedon@sssup.it>, " \
50                       "Markus Rechberger <mrechberger@gmail.com>, " \
51                       "Mauro Carvalho Chehab <mchehab@infradead.org>, " \
52                       "Sascha Sommer <saschasommer@freenet.de>"
53
54 static unsigned int isoc_debug;
55 module_param(isoc_debug, int, 0644);
56 MODULE_PARM_DESC(isoc_debug, "enable debug messages [isoc transfers]");
57
58 static unsigned int disable_vbi;
59 module_param(disable_vbi, int, 0644);
60 MODULE_PARM_DESC(disable_vbi, "disable vbi support");
61
62 static int alt;
63 module_param(alt, int, 0644);
64 MODULE_PARM_DESC(alt, "alternate setting to use for video endpoint");
65
66 #define em28xx_videodbg(fmt, arg...) do {\
67         if (video_debug) \
68                 printk(KERN_INFO "%s %s :"fmt, \
69                          dev->name, __func__ , ##arg); } while (0)
70
71 #define em28xx_isocdbg(fmt, arg...) \
72 do {\
73         if (isoc_debug) { \
74                 printk(KERN_INFO "%s %s :"fmt, \
75                          dev->name, __func__ , ##arg); \
76         } \
77   } while (0)
78
79 MODULE_AUTHOR(DRIVER_AUTHOR);
80 MODULE_DESCRIPTION(DRIVER_DESC " - v4l2 interface");
81 MODULE_LICENSE("GPL");
82 MODULE_VERSION(EM28XX_VERSION);
83
84 #define EM25XX_FRMDATAHDR_BYTE1                 0x02
85 #define EM25XX_FRMDATAHDR_BYTE2_STILL_IMAGE     0x20
86 #define EM25XX_FRMDATAHDR_BYTE2_FRAME_END       0x02
87 #define EM25XX_FRMDATAHDR_BYTE2_FRAME_ID        0x01
88 #define EM25XX_FRMDATAHDR_BYTE2_MASK    (EM25XX_FRMDATAHDR_BYTE2_STILL_IMAGE | \
89                                          EM25XX_FRMDATAHDR_BYTE2_FRAME_END |   \
90                                          EM25XX_FRMDATAHDR_BYTE2_FRAME_ID)
91
92 static unsigned int video_nr[] = {[0 ... (EM28XX_MAXBOARDS - 1)] = -1U };
93 static unsigned int vbi_nr[]   = {[0 ... (EM28XX_MAXBOARDS - 1)] = -1U };
94 static unsigned int radio_nr[] = {[0 ... (EM28XX_MAXBOARDS - 1)] = -1U };
95
96 module_param_array(video_nr, int, NULL, 0444);
97 module_param_array(vbi_nr, int, NULL, 0444);
98 module_param_array(radio_nr, int, NULL, 0444);
99 MODULE_PARM_DESC(video_nr, "video device numbers");
100 MODULE_PARM_DESC(vbi_nr,   "vbi device numbers");
101 MODULE_PARM_DESC(radio_nr, "radio device numbers");
102
103 static unsigned int video_debug;
104 module_param(video_debug, int, 0644);
105 MODULE_PARM_DESC(video_debug, "enable debug messages [video]");
106
107 /* supported video standards */
108 static struct em28xx_fmt format[] = {
109         {
110                 .name     = "16 bpp YUY2, 4:2:2, packed",
111                 .fourcc   = V4L2_PIX_FMT_YUYV,
112                 .depth    = 16,
113                 .reg      = EM28XX_OUTFMT_YUV422_Y0UY1V,
114         }, {
115                 .name     = "16 bpp RGB 565, LE",
116                 .fourcc   = V4L2_PIX_FMT_RGB565,
117                 .depth    = 16,
118                 .reg      = EM28XX_OUTFMT_RGB_16_656,
119         }, {
120                 .name     = "8 bpp Bayer BGBG..GRGR",
121                 .fourcc   = V4L2_PIX_FMT_SBGGR8,
122                 .depth    = 8,
123                 .reg      = EM28XX_OUTFMT_RGB_8_BGBG,
124         }, {
125                 .name     = "8 bpp Bayer GRGR..BGBG",
126                 .fourcc   = V4L2_PIX_FMT_SGRBG8,
127                 .depth    = 8,
128                 .reg      = EM28XX_OUTFMT_RGB_8_GRGR,
129         }, {
130                 .name     = "8 bpp Bayer GBGB..RGRG",
131                 .fourcc   = V4L2_PIX_FMT_SGBRG8,
132                 .depth    = 8,
133                 .reg      = EM28XX_OUTFMT_RGB_8_GBGB,
134         }, {
135                 .name     = "12 bpp YUV411",
136                 .fourcc   = V4L2_PIX_FMT_YUV411P,
137                 .depth    = 12,
138                 .reg      = EM28XX_OUTFMT_YUV411,
139         },
140 };
141
142 /*FIXME: maxw should be dependent of alt mode */
143 static inline unsigned int norm_maxw(struct em28xx *dev)
144 {
145         struct em28xx_v4l2 *v4l2 = dev->v4l2;
146
147         if (dev->board.is_webcam)
148                 return v4l2->sensor_xres;
149
150         if (dev->board.max_range_640_480)
151                 return 640;
152
153         return 720;
154 }
155
156 static inline unsigned int norm_maxh(struct em28xx *dev)
157 {
158         struct em28xx_v4l2 *v4l2 = dev->v4l2;
159
160         if (dev->board.is_webcam)
161                 return v4l2->sensor_yres;
162
163         if (dev->board.max_range_640_480)
164                 return 480;
165
166         return (v4l2->norm & V4L2_STD_625_50) ? 576 : 480;
167 }
168
169 static int em28xx_vbi_supported(struct em28xx *dev)
170 {
171         /* Modprobe option to manually disable */
172         if (disable_vbi == 1)
173                 return 0;
174
175         if (dev->board.is_webcam)
176                 return 0;
177
178         /* FIXME: check subdevices for VBI support */
179
180         if (dev->chip_id == CHIP_ID_EM2860 ||
181             dev->chip_id == CHIP_ID_EM2883)
182                 return 1;
183
184         /* Version of em28xx that does not support VBI */
185         return 0;
186 }
187
188 /*
189  * em28xx_wake_i2c()
190  * configure i2c attached devices
191  */
192 static void em28xx_wake_i2c(struct em28xx *dev)
193 {
194         struct v4l2_device *v4l2_dev = &dev->v4l2->v4l2_dev;
195
196         v4l2_device_call_all(v4l2_dev, 0, core,  reset, 0);
197         v4l2_device_call_all(v4l2_dev, 0, video, s_routing,
198                              INPUT(dev->ctl_input)->vmux, 0, 0);
199         v4l2_device_call_all(v4l2_dev, 0, video, s_stream, 0);
200 }
201
202 static int em28xx_colorlevels_set_default(struct em28xx *dev)
203 {
204         em28xx_write_reg(dev, EM28XX_R20_YGAIN, CONTRAST_DEFAULT);
205         em28xx_write_reg(dev, EM28XX_R21_YOFFSET, BRIGHTNESS_DEFAULT);
206         em28xx_write_reg(dev, EM28XX_R22_UVGAIN, SATURATION_DEFAULT);
207         em28xx_write_reg(dev, EM28XX_R23_UOFFSET, BLUE_BALANCE_DEFAULT);
208         em28xx_write_reg(dev, EM28XX_R24_VOFFSET, RED_BALANCE_DEFAULT);
209         em28xx_write_reg(dev, EM28XX_R25_SHARPNESS, SHARPNESS_DEFAULT);
210
211         em28xx_write_reg(dev, EM28XX_R14_GAMMA, 0x20);
212         em28xx_write_reg(dev, EM28XX_R15_RGAIN, 0x20);
213         em28xx_write_reg(dev, EM28XX_R16_GGAIN, 0x20);
214         em28xx_write_reg(dev, EM28XX_R17_BGAIN, 0x20);
215         em28xx_write_reg(dev, EM28XX_R18_ROFFSET, 0x00);
216         em28xx_write_reg(dev, EM28XX_R19_GOFFSET, 0x00);
217         return em28xx_write_reg(dev, EM28XX_R1A_BOFFSET, 0x00);
218 }
219
220 static int em28xx_set_outfmt(struct em28xx *dev)
221 {
222         int ret;
223         u8 fmt, vinctrl;
224         struct em28xx_v4l2 *v4l2 = dev->v4l2;
225
226         fmt = v4l2->format->reg;
227         if (!dev->is_em25xx)
228                 fmt |= 0x20;
229         /*
230          * NOTE: it's not clear if this is really needed !
231          * The datasheets say bit 5 is a reserved bit and devices seem to work
232          * fine without it. But the Windows driver sets it for em2710/50+em28xx
233          * devices and we've always been setting it, too.
234          *
235          * em2765 (em25xx, em276x/7x/8x) devices do NOT work with this bit set,
236          * it's likely used for an additional (compressed ?) format there.
237          */
238         ret = em28xx_write_reg(dev, EM28XX_R27_OUTFMT, fmt);
239         if (ret < 0)
240                 return ret;
241
242         ret = em28xx_write_reg(dev, EM28XX_R10_VINMODE, v4l2->vinmode);
243         if (ret < 0)
244                 return ret;
245
246         vinctrl = v4l2->vinctl;
247         if (em28xx_vbi_supported(dev) == 1) {
248                 vinctrl |= EM28XX_VINCTRL_VBI_RAW;
249                 em28xx_write_reg(dev, EM28XX_R34_VBI_START_H, 0x00);
250                 em28xx_write_reg(dev, EM28XX_R36_VBI_WIDTH, v4l2->vbi_width/4);
251                 em28xx_write_reg(dev, EM28XX_R37_VBI_HEIGHT, v4l2->vbi_height);
252                 if (v4l2->norm & V4L2_STD_525_60) {
253                         /* NTSC */
254                         em28xx_write_reg(dev, EM28XX_R35_VBI_START_V, 0x09);
255                 } else if (v4l2->norm & V4L2_STD_625_50) {
256                         /* PAL */
257                         em28xx_write_reg(dev, EM28XX_R35_VBI_START_V, 0x07);
258                 }
259         }
260
261         return em28xx_write_reg(dev, EM28XX_R11_VINCTRL, vinctrl);
262 }
263
264 static int em28xx_accumulator_set(struct em28xx *dev, u8 xmin, u8 xmax,
265                                   u8 ymin, u8 ymax)
266 {
267         em28xx_videodbg("em28xx Scale: (%d,%d)-(%d,%d)\n",
268                         xmin, ymin, xmax, ymax);
269
270         em28xx_write_regs(dev, EM28XX_R28_XMIN, &xmin, 1);
271         em28xx_write_regs(dev, EM28XX_R29_XMAX, &xmax, 1);
272         em28xx_write_regs(dev, EM28XX_R2A_YMIN, &ymin, 1);
273         return em28xx_write_regs(dev, EM28XX_R2B_YMAX, &ymax, 1);
274 }
275
276 static void em28xx_capture_area_set(struct em28xx *dev, u8 hstart, u8 vstart,
277                                     u16 width, u16 height)
278 {
279         u8 cwidth = width >> 2;
280         u8 cheight = height >> 2;
281         u8 overflow = (height >> 9 & 0x02) | (width >> 10 & 0x01);
282         /* NOTE: size limit: 2047x1023 = 2MPix */
283
284         em28xx_videodbg("capture area set to (%d,%d): %dx%d\n",
285                         hstart, vstart,
286                        ((overflow & 2) << 9 | cwidth << 2),
287                        ((overflow & 1) << 10 | cheight << 2));
288
289         em28xx_write_regs(dev, EM28XX_R1C_HSTART, &hstart, 1);
290         em28xx_write_regs(dev, EM28XX_R1D_VSTART, &vstart, 1);
291         em28xx_write_regs(dev, EM28XX_R1E_CWIDTH, &cwidth, 1);
292         em28xx_write_regs(dev, EM28XX_R1F_CHEIGHT, &cheight, 1);
293         em28xx_write_regs(dev, EM28XX_R1B_OFLOW, &overflow, 1);
294
295         /* FIXME: function/meaning of these registers ? */
296         /* FIXME: align width+height to multiples of 4 ?! */
297         if (dev->is_em25xx) {
298                 em28xx_write_reg(dev, 0x34, width >> 4);
299                 em28xx_write_reg(dev, 0x35, height >> 4);
300         }
301 }
302
303 static int em28xx_scaler_set(struct em28xx *dev, u16 h, u16 v)
304 {
305         u8 mode = 0x00;
306         /* the em2800 scaler only supports scaling down to 50% */
307
308         if (dev->board.is_em2800) {
309                 mode = (v ? 0x20 : 0x00) | (h ? 0x10 : 0x00);
310         } else {
311                 u8 buf[2];
312
313                 buf[0] = h;
314                 buf[1] = h >> 8;
315                 em28xx_write_regs(dev, EM28XX_R30_HSCALELOW, (char *)buf, 2);
316
317                 buf[0] = v;
318                 buf[1] = v >> 8;
319                 em28xx_write_regs(dev, EM28XX_R32_VSCALELOW, (char *)buf, 2);
320                 /* it seems that both H and V scalers must be active
321                    to work correctly */
322                 mode = (h || v) ? 0x30 : 0x00;
323         }
324         return em28xx_write_reg(dev, EM28XX_R26_COMPR, mode);
325 }
326
327 /* FIXME: this only function read values from dev */
328 static int em28xx_resolution_set(struct em28xx *dev)
329 {
330         struct em28xx_v4l2 *v4l2 = dev->v4l2;
331         int width = norm_maxw(dev);
332         int height = norm_maxh(dev);
333
334         /* Properly setup VBI */
335         v4l2->vbi_width = 720;
336         if (v4l2->norm & V4L2_STD_525_60)
337                 v4l2->vbi_height = 12;
338         else
339                 v4l2->vbi_height = 18;
340
341         em28xx_set_outfmt(dev);
342
343         em28xx_accumulator_set(dev, 1, (width - 4) >> 2, 1, (height - 4) >> 2);
344
345         /* If we don't set the start position to 2 in VBI mode, we end up
346            with line 20/21 being YUYV encoded instead of being in 8-bit
347            greyscale.  The core of the issue is that line 21 (and line 23 for
348            PAL WSS) are inside of active video region, and as a result they
349            get the pixelformatting associated with that area.  So by cropping
350            it out, we end up with the same format as the rest of the VBI
351            region */
352         if (em28xx_vbi_supported(dev) == 1)
353                 em28xx_capture_area_set(dev, 0, 2, width, height);
354         else
355                 em28xx_capture_area_set(dev, 0, 0, width, height);
356
357         return em28xx_scaler_set(dev, v4l2->hscale, v4l2->vscale);
358 }
359
360 /* Set USB alternate setting for analog video */
361 static int em28xx_set_alternate(struct em28xx *dev)
362 {
363         struct em28xx_v4l2 *v4l2 = dev->v4l2;
364         int errCode;
365         int i;
366         unsigned int min_pkt_size = v4l2->width * 2 + 4;
367
368         /* NOTE: for isoc transfers, only alt settings > 0 are allowed
369                  bulk transfers seem to work only with alt=0 ! */
370         dev->alt = 0;
371         if ((alt > 0) && (alt < dev->num_alt)) {
372                 em28xx_videodbg("alternate forced to %d\n", dev->alt);
373                 dev->alt = alt;
374                 goto set_alt;
375         }
376         if (dev->analog_xfer_bulk)
377                 goto set_alt;
378
379         /* When image size is bigger than a certain value,
380            the frame size should be increased, otherwise, only
381            green screen will be received.
382          */
383         if (v4l2->width * 2 * v4l2->height > 720 * 240 * 2)
384                 min_pkt_size *= 2;
385
386         for (i = 0; i < dev->num_alt; i++) {
387                 /* stop when the selected alt setting offers enough bandwidth */
388                 if (dev->alt_max_pkt_size_isoc[i] >= min_pkt_size) {
389                         dev->alt = i;
390                         break;
391                 /* otherwise make sure that we end up with the maximum bandwidth
392                    because the min_pkt_size equation might be wrong...
393                 */
394                 } else if (dev->alt_max_pkt_size_isoc[i] >
395                            dev->alt_max_pkt_size_isoc[dev->alt])
396                         dev->alt = i;
397         }
398
399 set_alt:
400         /* NOTE: for bulk transfers, we need to call usb_set_interface()
401          * even if the previous settings were the same. Otherwise streaming
402          * fails with all urbs having status = -EOVERFLOW ! */
403         if (dev->analog_xfer_bulk) {
404                 dev->max_pkt_size = 512; /* USB 2.0 spec */
405                 dev->packet_multiplier = EM28XX_BULK_PACKET_MULTIPLIER;
406         } else { /* isoc */
407                 em28xx_videodbg("minimum isoc packet size: %u (alt=%d)\n",
408                                 min_pkt_size, dev->alt);
409                 dev->max_pkt_size =
410                                   dev->alt_max_pkt_size_isoc[dev->alt];
411                 dev->packet_multiplier = EM28XX_NUM_ISOC_PACKETS;
412         }
413         em28xx_videodbg("setting alternate %d with wMaxPacketSize=%u\n",
414                         dev->alt, dev->max_pkt_size);
415         errCode = usb_set_interface(dev->udev, dev->ifnum, dev->alt);
416         if (errCode < 0) {
417                 em28xx_errdev("cannot change alternate number to %d (error=%i)\n",
418                               dev->alt, errCode);
419                 return errCode;
420         }
421         return 0;
422 }
423
424 /* ------------------------------------------------------------------
425         DMA and thread functions
426    ------------------------------------------------------------------*/
427
428 /*
429  * Finish the current buffer
430  */
431 static inline void finish_buffer(struct em28xx *dev,
432                                  struct em28xx_buffer *buf)
433 {
434         em28xx_isocdbg("[%p/%d] wakeup\n", buf, buf->top_field);
435
436         buf->vb.sequence = dev->v4l2->field_count++;
437         if (dev->v4l2->progressive)
438                 buf->vb.field = V4L2_FIELD_NONE;
439         else
440                 buf->vb.field = V4L2_FIELD_INTERLACED;
441         v4l2_get_timestamp(&buf->vb.timestamp);
442
443         vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
444 }
445
446 /*
447  * Copy picture data from USB buffer to videobuf buffer
448  */
449 static void em28xx_copy_video(struct em28xx *dev,
450                               struct em28xx_buffer *buf,
451                               unsigned char *usb_buf,
452                               unsigned long len)
453 {
454         struct em28xx_v4l2 *v4l2 = dev->v4l2;
455         void *fieldstart, *startwrite, *startread;
456         int  linesdone, currlinedone, offset, lencopy, remain;
457         int bytesperline = v4l2->width << 1;
458
459         if (buf->pos + len > buf->length)
460                 len = buf->length - buf->pos;
461
462         startread = usb_buf;
463         remain = len;
464
465         if (v4l2->progressive || buf->top_field)
466                 fieldstart = buf->vb_buf;
467         else /* interlaced mode, even nr. of lines */
468                 fieldstart = buf->vb_buf + bytesperline;
469
470         linesdone = buf->pos / bytesperline;
471         currlinedone = buf->pos % bytesperline;
472
473         if (v4l2->progressive)
474                 offset = linesdone * bytesperline + currlinedone;
475         else
476                 offset = linesdone * bytesperline * 2 + currlinedone;
477
478         startwrite = fieldstart + offset;
479         lencopy = bytesperline - currlinedone;
480         lencopy = lencopy > remain ? remain : lencopy;
481
482         if ((char *)startwrite + lencopy > (char *)buf->vb_buf + buf->length) {
483                 em28xx_isocdbg("Overflow of %zu bytes past buffer end (1)\n",
484                                ((char *)startwrite + lencopy) -
485                               ((char *)buf->vb_buf + buf->length));
486                 remain = (char *)buf->vb_buf + buf->length -
487                          (char *)startwrite;
488                 lencopy = remain;
489         }
490         if (lencopy <= 0)
491                 return;
492         memcpy(startwrite, startread, lencopy);
493
494         remain -= lencopy;
495
496         while (remain > 0) {
497                 if (v4l2->progressive)
498                         startwrite += lencopy;
499                 else
500                         startwrite += lencopy + bytesperline;
501                 startread += lencopy;
502                 if (bytesperline > remain)
503                         lencopy = remain;
504                 else
505                         lencopy = bytesperline;
506
507                 if ((char *)startwrite + lencopy > (char *)buf->vb_buf +
508                     buf->length) {
509                         em28xx_isocdbg("Overflow of %zu bytes past buffer end"
510                                        "(2)\n",
511                                        ((char *)startwrite + lencopy) -
512                                        ((char *)buf->vb_buf + buf->length));
513                         lencopy = remain = (char *)buf->vb_buf + buf->length -
514                                 (char *)startwrite;
515                 }
516                 if (lencopy <= 0)
517                         break;
518
519                 memcpy(startwrite, startread, lencopy);
520
521                 remain -= lencopy;
522         }
523
524         buf->pos += len;
525 }
526
527 /*
528  * Copy VBI data from USB buffer to videobuf buffer
529  */
530 static void em28xx_copy_vbi(struct em28xx *dev,
531                             struct em28xx_buffer *buf,
532                             unsigned char *usb_buf,
533                             unsigned long len)
534 {
535         unsigned int offset;
536
537         if (buf->pos + len > buf->length)
538                 len = buf->length - buf->pos;
539
540         offset = buf->pos;
541         /* Make sure the bottom field populates the second half of the frame */
542         if (buf->top_field == 0)
543                 offset += dev->v4l2->vbi_width * dev->v4l2->vbi_height;
544
545         memcpy(buf->vb_buf + offset, usb_buf, len);
546         buf->pos += len;
547 }
548
549 static inline void print_err_status(struct em28xx *dev,
550                                     int packet, int status)
551 {
552         char *errmsg = "Unknown";
553
554         switch (status) {
555         case -ENOENT:
556                 errmsg = "unlinked synchronuously";
557                 break;
558         case -ECONNRESET:
559                 errmsg = "unlinked asynchronuously";
560                 break;
561         case -ENOSR:
562                 errmsg = "Buffer error (overrun)";
563                 break;
564         case -EPIPE:
565                 errmsg = "Stalled (device not responding)";
566                 break;
567         case -EOVERFLOW:
568                 errmsg = "Babble (bad cable?)";
569                 break;
570         case -EPROTO:
571                 errmsg = "Bit-stuff error (bad cable?)";
572                 break;
573         case -EILSEQ:
574                 errmsg = "CRC/Timeout (could be anything)";
575                 break;
576         case -ETIME:
577                 errmsg = "Device does not respond";
578                 break;
579         }
580         if (packet < 0) {
581                 em28xx_isocdbg("URB status %d [%s].\n", status, errmsg);
582         } else {
583                 em28xx_isocdbg("URB packet %d, status %d [%s].\n",
584                                packet, status, errmsg);
585         }
586 }
587
588 /*
589  * get the next available buffer from dma queue
590  */
591 static inline struct em28xx_buffer *get_next_buf(struct em28xx *dev,
592                                                  struct em28xx_dmaqueue *dma_q)
593 {
594         struct em28xx_buffer *buf;
595
596         if (list_empty(&dma_q->active)) {
597                 em28xx_isocdbg("No active queue to serve\n");
598                 return NULL;
599         }
600
601         /* Get the next buffer */
602         buf = list_entry(dma_q->active.next, struct em28xx_buffer, list);
603         /* Cleans up buffer - Useful for testing for frame/URB loss */
604         list_del(&buf->list);
605         buf->pos = 0;
606         buf->vb_buf = buf->mem;
607
608         return buf;
609 }
610
611 /*
612  * Finish the current buffer if completed and prepare for the next field
613  */
614 static struct em28xx_buffer *
615 finish_field_prepare_next(struct em28xx *dev,
616                           struct em28xx_buffer *buf,
617                           struct em28xx_dmaqueue *dma_q)
618 {
619         struct em28xx_v4l2 *v4l2 = dev->v4l2;
620
621         if (v4l2->progressive || v4l2->top_field) { /* Brand new frame */
622                 if (buf != NULL)
623                         finish_buffer(dev, buf);
624                 buf = get_next_buf(dev, dma_q);
625         }
626         if (buf != NULL) {
627                 buf->top_field = v4l2->top_field;
628                 buf->pos = 0;
629         }
630
631         return buf;
632 }
633
634 /*
635  * Process data packet according to the em2710/em2750/em28xx frame data format
636  */
637 static inline void process_frame_data_em28xx(struct em28xx *dev,
638                                              unsigned char *data_pkt,
639                                              unsigned int  data_len)
640 {
641         struct em28xx_v4l2      *v4l2 = dev->v4l2;
642         struct em28xx_buffer    *buf = dev->usb_ctl.vid_buf;
643         struct em28xx_buffer    *vbi_buf = dev->usb_ctl.vbi_buf;
644         struct em28xx_dmaqueue  *dma_q = &dev->vidq;
645         struct em28xx_dmaqueue  *vbi_dma_q = &dev->vbiq;
646
647         /* capture type 0 = vbi start
648            capture type 1 = vbi in progress
649            capture type 2 = video start
650            capture type 3 = video in progress */
651         if (data_len >= 4) {
652                 /* NOTE: Headers are always 4 bytes and
653                  * never split across packets */
654                 if (data_pkt[0] == 0x88 && data_pkt[1] == 0x88 &&
655                     data_pkt[2] == 0x88 && data_pkt[3] == 0x88) {
656                         /* Continuation */
657                         data_pkt += 4;
658                         data_len -= 4;
659                 } else if (data_pkt[0] == 0x33 && data_pkt[1] == 0x95) {
660                         /* Field start (VBI mode) */
661                         v4l2->capture_type = 0;
662                         v4l2->vbi_read = 0;
663                         em28xx_isocdbg("VBI START HEADER !!!\n");
664                         v4l2->top_field = !(data_pkt[2] & 1);
665                         data_pkt += 4;
666                         data_len -= 4;
667                 } else if (data_pkt[0] == 0x22 && data_pkt[1] == 0x5a) {
668                         /* Field start (VBI disabled) */
669                         v4l2->capture_type = 2;
670                         em28xx_isocdbg("VIDEO START HEADER !!!\n");
671                         v4l2->top_field = !(data_pkt[2] & 1);
672                         data_pkt += 4;
673                         data_len -= 4;
674                 }
675         }
676         /* NOTE: With bulk transfers, intermediate data packets
677          * have no continuation header */
678
679         if (v4l2->capture_type == 0) {
680                 vbi_buf = finish_field_prepare_next(dev, vbi_buf, vbi_dma_q);
681                 dev->usb_ctl.vbi_buf = vbi_buf;
682                 v4l2->capture_type = 1;
683         }
684
685         if (v4l2->capture_type == 1) {
686                 int vbi_size = v4l2->vbi_width * v4l2->vbi_height;
687                 int vbi_data_len = ((v4l2->vbi_read + data_len) > vbi_size) ?
688                                    (vbi_size - v4l2->vbi_read) : data_len;
689
690                 /* Copy VBI data */
691                 if (vbi_buf != NULL)
692                         em28xx_copy_vbi(dev, vbi_buf, data_pkt, vbi_data_len);
693                 v4l2->vbi_read += vbi_data_len;
694
695                 if (vbi_data_len < data_len) {
696                         /* Continue with copying video data */
697                         v4l2->capture_type = 2;
698                         data_pkt += vbi_data_len;
699                         data_len -= vbi_data_len;
700                 }
701         }
702
703         if (v4l2->capture_type == 2) {
704                 buf = finish_field_prepare_next(dev, buf, dma_q);
705                 dev->usb_ctl.vid_buf = buf;
706                 v4l2->capture_type = 3;
707         }
708
709         if (v4l2->capture_type == 3 && buf != NULL && data_len > 0)
710                 em28xx_copy_video(dev, buf, data_pkt, data_len);
711 }
712
713 /*
714  * Process data packet according to the em25xx/em276x/7x/8x frame data format
715  */
716 static inline void process_frame_data_em25xx(struct em28xx *dev,
717                                              unsigned char *data_pkt,
718                                              unsigned int  data_len)
719 {
720         struct em28xx_buffer    *buf = dev->usb_ctl.vid_buf;
721         struct em28xx_dmaqueue  *dmaq = &dev->vidq;
722         struct em28xx_v4l2      *v4l2 = dev->v4l2;
723         bool frame_end = false;
724
725         /* Check for header */
726         /* NOTE: at least with bulk transfers, only the first packet
727          * has a header and has always set the FRAME_END bit         */
728         if (data_len >= 2) {    /* em25xx header is only 2 bytes long */
729                 if ((data_pkt[0] == EM25XX_FRMDATAHDR_BYTE1) &&
730                     ((data_pkt[1] & ~EM25XX_FRMDATAHDR_BYTE2_MASK) == 0x00)) {
731                         v4l2->top_field = !(data_pkt[1] &
732                                            EM25XX_FRMDATAHDR_BYTE2_FRAME_ID);
733                         frame_end = data_pkt[1] &
734                                     EM25XX_FRMDATAHDR_BYTE2_FRAME_END;
735                         data_pkt += 2;
736                         data_len -= 2;
737                 }
738
739                 /* Finish field and prepare next (BULK only) */
740                 if (dev->analog_xfer_bulk && frame_end) {
741                         buf = finish_field_prepare_next(dev, buf, dmaq);
742                         dev->usb_ctl.vid_buf = buf;
743                 }
744                 /* NOTE: in ISOC mode when a new frame starts and buf==NULL,
745                  * we COULD already prepare a buffer here to avoid skipping the
746                  * first frame.
747                  */
748         }
749
750         /* Copy data */
751         if (buf != NULL && data_len > 0)
752                 em28xx_copy_video(dev, buf, data_pkt, data_len);
753
754         /* Finish frame (ISOC only) => avoids lag of 1 frame */
755         if (!dev->analog_xfer_bulk && frame_end) {
756                 buf = finish_field_prepare_next(dev, buf, dmaq);
757                 dev->usb_ctl.vid_buf = buf;
758         }
759
760         /* NOTE: Tested with USB bulk transfers only !
761          * The wording in the datasheet suggests that isoc might work different.
762          * The current code assumes that with isoc transfers each packet has a
763          * header like with the other em28xx devices.
764          */
765         /* NOTE: Support for interlaced mode is pure theory. It has not been
766          * tested and it is unknown if these devices actually support it. */
767         /* NOTE: No VBI support yet (these chips likely do not support VBI). */
768 }
769
770 /* Processes and copies the URB data content (video and VBI data) */
771 static inline int em28xx_urb_data_copy(struct em28xx *dev, struct urb *urb)
772 {
773         int xfer_bulk, num_packets, i;
774         unsigned char *usb_data_pkt;
775         unsigned int usb_data_len;
776
777         if (!dev)
778                 return 0;
779
780         if (dev->disconnected)
781                 return 0;
782
783         if (urb->status < 0)
784                 print_err_status(dev, -1, urb->status);
785
786         xfer_bulk = usb_pipebulk(urb->pipe);
787
788         if (xfer_bulk) /* bulk */
789                 num_packets = 1;
790         else /* isoc */
791                 num_packets = urb->number_of_packets;
792
793         for (i = 0; i < num_packets; i++) {
794                 if (xfer_bulk) { /* bulk */
795                         usb_data_len = urb->actual_length;
796
797                         usb_data_pkt = urb->transfer_buffer;
798                 } else { /* isoc */
799                         if (urb->iso_frame_desc[i].status < 0) {
800                                 print_err_status(dev, i,
801                                                  urb->iso_frame_desc[i].status);
802                                 if (urb->iso_frame_desc[i].status != -EPROTO)
803                                         continue;
804                         }
805
806                         usb_data_len = urb->iso_frame_desc[i].actual_length;
807                         if (usb_data_len > dev->max_pkt_size) {
808                                 em28xx_isocdbg("packet bigger than packet size");
809                                 continue;
810                         }
811
812                         usb_data_pkt = urb->transfer_buffer +
813                                        urb->iso_frame_desc[i].offset;
814                 }
815
816                 if (usb_data_len == 0) {
817                         /* NOTE: happens very often with isoc transfers */
818                         /* em28xx_usbdbg("packet %d is empty",i); - spammy */
819                         continue;
820                 }
821
822                 if (dev->is_em25xx)
823                         process_frame_data_em25xx(dev,
824                                                   usb_data_pkt, usb_data_len);
825                 else
826                         process_frame_data_em28xx(dev,
827                                                   usb_data_pkt, usb_data_len);
828
829         }
830         return 1;
831 }
832
833 static int get_ressource(enum v4l2_buf_type f_type)
834 {
835         switch (f_type) {
836         case V4L2_BUF_TYPE_VIDEO_CAPTURE:
837                 return EM28XX_RESOURCE_VIDEO;
838         case V4L2_BUF_TYPE_VBI_CAPTURE:
839                 return EM28XX_RESOURCE_VBI;
840         default:
841                 BUG();
842         }
843 }
844
845 /* Usage lock check functions */
846 static int res_get(struct em28xx *dev, enum v4l2_buf_type f_type)
847 {
848         int res_type = get_ressource(f_type);
849
850         /* is it free? */
851         if (dev->resources & res_type) {
852                 /* no, someone else uses it */
853                 return -EBUSY;
854         }
855
856         /* it's free, grab it */
857         dev->resources |= res_type;
858         em28xx_videodbg("res: get %d\n", res_type);
859         return 0;
860 }
861
862 static void res_free(struct em28xx *dev, enum v4l2_buf_type f_type)
863 {
864         int res_type = get_ressource(f_type);
865
866         dev->resources &= ~res_type;
867         em28xx_videodbg("res: put %d\n", res_type);
868 }
869
870 /* ------------------------------------------------------------------
871         Videobuf2 operations
872    ------------------------------------------------------------------*/
873
874 static int queue_setup(struct vb2_queue *vq, const void *parg,
875                        unsigned int *nbuffers, unsigned int *nplanes,
876                        unsigned int sizes[], void *alloc_ctxs[])
877 {
878         const struct v4l2_format *fmt = parg;
879         struct em28xx *dev = vb2_get_drv_priv(vq);
880         struct em28xx_v4l2 *v4l2 = dev->v4l2;
881         unsigned long size;
882
883         if (fmt)
884                 size = fmt->fmt.pix.sizeimage;
885         else
886                 size =
887                     (v4l2->width * v4l2->height * v4l2->format->depth + 7) >> 3;
888
889         if (size == 0)
890                 return -EINVAL;
891
892         if (0 == *nbuffers)
893                 *nbuffers = 32;
894
895         *nplanes = 1;
896         sizes[0] = size;
897
898         return 0;
899 }
900
901 static int
902 buffer_prepare(struct vb2_buffer *vb)
903 {
904         struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
905         struct em28xx        *dev = vb2_get_drv_priv(vb->vb2_queue);
906         struct em28xx_v4l2   *v4l2 = dev->v4l2;
907         unsigned long size;
908
909         em28xx_videodbg("%s, field=%d\n", __func__, vbuf->field);
910
911         size = (v4l2->width * v4l2->height * v4l2->format->depth + 7) >> 3;
912
913         if (vb2_plane_size(vb, 0) < size) {
914                 em28xx_videodbg("%s data will not fit into plane (%lu < %lu)\n",
915                                 __func__, vb2_plane_size(vb, 0), size);
916                 return -EINVAL;
917         }
918         vb2_set_plane_payload(vb, 0, size);
919
920         return 0;
921 }
922
923 int em28xx_start_analog_streaming(struct vb2_queue *vq, unsigned int count)
924 {
925         struct em28xx *dev = vb2_get_drv_priv(vq);
926         struct em28xx_v4l2 *v4l2 = dev->v4l2;
927         struct v4l2_frequency f;
928         struct v4l2_fh *owner;
929         int rc = 0;
930
931         em28xx_videodbg("%s\n", __func__);
932
933         /* Make sure streaming is not already in progress for this type
934            of filehandle (e.g. video, vbi) */
935         rc = res_get(dev, vq->type);
936         if (rc)
937                 return rc;
938
939         if (v4l2->streaming_users == 0) {
940                 /* First active streaming user, so allocate all the URBs */
941
942                 /* Allocate the USB bandwidth */
943                 em28xx_set_alternate(dev);
944
945                 /* Needed, since GPIO might have disabled power of
946                    some i2c device
947                 */
948                 em28xx_wake_i2c(dev);
949
950                 v4l2->capture_type = -1;
951                 rc = em28xx_init_usb_xfer(dev, EM28XX_ANALOG_MODE,
952                                           dev->analog_xfer_bulk,
953                                           EM28XX_NUM_BUFS,
954                                           dev->max_pkt_size,
955                                           dev->packet_multiplier,
956                                           em28xx_urb_data_copy);
957                 if (rc < 0)
958                         return rc;
959
960                 /*
961                  * djh: it's not clear whether this code is still needed.  I'm
962                  * leaving it in here for now entirely out of concern for
963                  * backward compatibility (the old code did it)
964                  */
965
966                 /* Ask tuner to go to analog or radio mode */
967                 memset(&f, 0, sizeof(f));
968                 f.frequency = v4l2->frequency;
969                 owner = (struct v4l2_fh *)vq->owner;
970                 if (owner && owner->vdev->vfl_type == VFL_TYPE_RADIO)
971                         f.type = V4L2_TUNER_RADIO;
972                 else
973                         f.type = V4L2_TUNER_ANALOG_TV;
974                 v4l2_device_call_all(&v4l2->v4l2_dev,
975                                      0, tuner, s_frequency, &f);
976         }
977
978         v4l2->streaming_users++;
979
980         return rc;
981 }
982
983 static void em28xx_stop_streaming(struct vb2_queue *vq)
984 {
985         struct em28xx *dev = vb2_get_drv_priv(vq);
986         struct em28xx_v4l2 *v4l2 = dev->v4l2;
987         struct em28xx_dmaqueue *vidq = &dev->vidq;
988         unsigned long flags = 0;
989
990         em28xx_videodbg("%s\n", __func__);
991
992         res_free(dev, vq->type);
993
994         if (v4l2->streaming_users-- == 1) {
995                 /* Last active user, so shutdown all the URBS */
996                 em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);
997         }
998
999         spin_lock_irqsave(&dev->slock, flags);
1000         if (dev->usb_ctl.vid_buf != NULL) {
1001                 vb2_buffer_done(&dev->usb_ctl.vid_buf->vb.vb2_buf,
1002                                 VB2_BUF_STATE_ERROR);
1003                 dev->usb_ctl.vid_buf = NULL;
1004         }
1005         while (!list_empty(&vidq->active)) {
1006                 struct em28xx_buffer *buf;
1007
1008                 buf = list_entry(vidq->active.next, struct em28xx_buffer, list);
1009                 list_del(&buf->list);
1010                 vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
1011         }
1012         spin_unlock_irqrestore(&dev->slock, flags);
1013 }
1014
1015 void em28xx_stop_vbi_streaming(struct vb2_queue *vq)
1016 {
1017         struct em28xx *dev = vb2_get_drv_priv(vq);
1018         struct em28xx_v4l2 *v4l2 = dev->v4l2;
1019         struct em28xx_dmaqueue *vbiq = &dev->vbiq;
1020         unsigned long flags = 0;
1021
1022         em28xx_videodbg("%s\n", __func__);
1023
1024         res_free(dev, vq->type);
1025
1026         if (v4l2->streaming_users-- == 1) {
1027                 /* Last active user, so shutdown all the URBS */
1028                 em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);
1029         }
1030
1031         spin_lock_irqsave(&dev->slock, flags);
1032         if (dev->usb_ctl.vbi_buf != NULL) {
1033                 vb2_buffer_done(&dev->usb_ctl.vbi_buf->vb.vb2_buf,
1034                                 VB2_BUF_STATE_ERROR);
1035                 dev->usb_ctl.vbi_buf = NULL;
1036         }
1037         while (!list_empty(&vbiq->active)) {
1038                 struct em28xx_buffer *buf;
1039
1040                 buf = list_entry(vbiq->active.next, struct em28xx_buffer, list);
1041                 list_del(&buf->list);
1042                 vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
1043         }
1044         spin_unlock_irqrestore(&dev->slock, flags);
1045 }
1046
1047 static void
1048 buffer_queue(struct vb2_buffer *vb)
1049 {
1050         struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
1051         struct em28xx *dev = vb2_get_drv_priv(vb->vb2_queue);
1052         struct em28xx_buffer *buf =
1053                 container_of(vbuf, struct em28xx_buffer, vb);
1054         struct em28xx_dmaqueue *vidq = &dev->vidq;
1055         unsigned long flags = 0;
1056
1057         em28xx_videodbg("%s\n", __func__);
1058         buf->mem = vb2_plane_vaddr(vb, 0);
1059         buf->length = vb2_plane_size(vb, 0);
1060
1061         spin_lock_irqsave(&dev->slock, flags);
1062         list_add_tail(&buf->list, &vidq->active);
1063         spin_unlock_irqrestore(&dev->slock, flags);
1064 }
1065
1066 static struct vb2_ops em28xx_video_qops = {
1067         .queue_setup    = queue_setup,
1068         .buf_prepare    = buffer_prepare,
1069         .buf_queue      = buffer_queue,
1070         .start_streaming = em28xx_start_analog_streaming,
1071         .stop_streaming = em28xx_stop_streaming,
1072         .wait_prepare   = vb2_ops_wait_prepare,
1073         .wait_finish    = vb2_ops_wait_finish,
1074 };
1075
1076 static int em28xx_vb2_setup(struct em28xx *dev)
1077 {
1078         int rc;
1079         struct vb2_queue *q;
1080         struct em28xx_v4l2 *v4l2 = dev->v4l2;
1081
1082         /* Setup Videobuf2 for Video capture */
1083         q = &v4l2->vb_vidq;
1084         q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1085         q->io_modes = VB2_READ | VB2_MMAP | VB2_USERPTR | VB2_DMABUF;
1086         q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1087         q->drv_priv = dev;
1088         q->buf_struct_size = sizeof(struct em28xx_buffer);
1089         q->ops = &em28xx_video_qops;
1090         q->mem_ops = &vb2_vmalloc_memops;
1091
1092         rc = vb2_queue_init(q);
1093         if (rc < 0)
1094                 return rc;
1095
1096         /* Setup Videobuf2 for VBI capture */
1097         q = &v4l2->vb_vbiq;
1098         q->type = V4L2_BUF_TYPE_VBI_CAPTURE;
1099         q->io_modes = VB2_READ | VB2_MMAP | VB2_USERPTR;
1100         q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1101         q->drv_priv = dev;
1102         q->buf_struct_size = sizeof(struct em28xx_buffer);
1103         q->ops = &em28xx_vbi_qops;
1104         q->mem_ops = &vb2_vmalloc_memops;
1105
1106         rc = vb2_queue_init(q);
1107         if (rc < 0)
1108                 return rc;
1109
1110         return 0;
1111 }
1112
1113 /*********************  v4l2 interface  **************************************/
1114
1115 static void video_mux(struct em28xx *dev, int index)
1116 {
1117         struct v4l2_device *v4l2_dev = &dev->v4l2->v4l2_dev;
1118
1119         dev->ctl_input = index;
1120         dev->ctl_ainput = INPUT(index)->amux;
1121         dev->ctl_aoutput = INPUT(index)->aout;
1122
1123         if (!dev->ctl_aoutput)
1124                 dev->ctl_aoutput = EM28XX_AOUT_MASTER;
1125
1126         v4l2_device_call_all(v4l2_dev, 0, video, s_routing,
1127                              INPUT(index)->vmux, 0, 0);
1128
1129         if (dev->board.has_msp34xx) {
1130                 if (dev->i2s_speed) {
1131                         v4l2_device_call_all(v4l2_dev, 0, audio,
1132                                              s_i2s_clock_freq, dev->i2s_speed);
1133                 }
1134                 /* Note: this is msp3400 specific */
1135                 v4l2_device_call_all(v4l2_dev, 0, audio, s_routing,
1136                                      dev->ctl_ainput,
1137                                      MSP_OUTPUT(MSP_SC_IN_DSP_SCART1), 0);
1138         }
1139
1140         if (dev->board.adecoder != EM28XX_NOADECODER) {
1141                 v4l2_device_call_all(v4l2_dev, 0, audio, s_routing,
1142                                      dev->ctl_ainput, dev->ctl_aoutput, 0);
1143         }
1144
1145         em28xx_audio_analog_set(dev);
1146 }
1147
1148 static void em28xx_ctrl_notify(struct v4l2_ctrl *ctrl, void *priv)
1149 {
1150         struct em28xx *dev = priv;
1151
1152         /*
1153          * In the case of non-AC97 volume controls, we still need
1154          * to do some setups at em28xx, in order to mute/unmute
1155          * and to adjust audio volume. However, the value ranges
1156          * should be checked by the corresponding V4L subdriver.
1157          */
1158         switch (ctrl->id) {
1159         case V4L2_CID_AUDIO_MUTE:
1160                 dev->mute = ctrl->val;
1161                 em28xx_audio_analog_set(dev);
1162                 break;
1163         case V4L2_CID_AUDIO_VOLUME:
1164                 dev->volume = ctrl->val;
1165                 em28xx_audio_analog_set(dev);
1166                 break;
1167         }
1168 }
1169
1170 static int em28xx_s_ctrl(struct v4l2_ctrl *ctrl)
1171 {
1172         struct em28xx_v4l2 *v4l2 =
1173                   container_of(ctrl->handler, struct em28xx_v4l2, ctrl_handler);
1174         struct em28xx *dev = v4l2->dev;
1175         int ret = -EINVAL;
1176
1177         switch (ctrl->id) {
1178         case V4L2_CID_AUDIO_MUTE:
1179                 dev->mute = ctrl->val;
1180                 ret = em28xx_audio_analog_set(dev);
1181                 break;
1182         case V4L2_CID_AUDIO_VOLUME:
1183                 dev->volume = ctrl->val;
1184                 ret = em28xx_audio_analog_set(dev);
1185                 break;
1186         case V4L2_CID_CONTRAST:
1187                 ret = em28xx_write_reg(dev, EM28XX_R20_YGAIN, ctrl->val);
1188                 break;
1189         case V4L2_CID_BRIGHTNESS:
1190                 ret = em28xx_write_reg(dev, EM28XX_R21_YOFFSET, ctrl->val);
1191                 break;
1192         case V4L2_CID_SATURATION:
1193                 ret = em28xx_write_reg(dev, EM28XX_R22_UVGAIN, ctrl->val);
1194                 break;
1195         case V4L2_CID_BLUE_BALANCE:
1196                 ret = em28xx_write_reg(dev, EM28XX_R23_UOFFSET, ctrl->val);
1197                 break;
1198         case V4L2_CID_RED_BALANCE:
1199                 ret = em28xx_write_reg(dev, EM28XX_R24_VOFFSET, ctrl->val);
1200                 break;
1201         case V4L2_CID_SHARPNESS:
1202                 ret = em28xx_write_reg(dev, EM28XX_R25_SHARPNESS, ctrl->val);
1203                 break;
1204         }
1205
1206         return (ret < 0) ? ret : 0;
1207 }
1208
1209 static const struct v4l2_ctrl_ops em28xx_ctrl_ops = {
1210         .s_ctrl = em28xx_s_ctrl,
1211 };
1212
1213 static void size_to_scale(struct em28xx *dev,
1214                           unsigned int width, unsigned int height,
1215                         unsigned int *hscale, unsigned int *vscale)
1216 {
1217         unsigned int          maxw = norm_maxw(dev);
1218         unsigned int          maxh = norm_maxh(dev);
1219
1220         *hscale = (((unsigned long)maxw) << 12) / width - 4096L;
1221         if (*hscale > EM28XX_HVSCALE_MAX)
1222                 *hscale = EM28XX_HVSCALE_MAX;
1223
1224         *vscale = (((unsigned long)maxh) << 12) / height - 4096L;
1225         if (*vscale > EM28XX_HVSCALE_MAX)
1226                 *vscale = EM28XX_HVSCALE_MAX;
1227 }
1228
1229 static void scale_to_size(struct em28xx *dev,
1230                           unsigned int hscale, unsigned int vscale,
1231                           unsigned int *width, unsigned int *height)
1232 {
1233         unsigned int          maxw = norm_maxw(dev);
1234         unsigned int          maxh = norm_maxh(dev);
1235
1236         *width = (((unsigned long)maxw) << 12) / (hscale + 4096L);
1237         *height = (((unsigned long)maxh) << 12) / (vscale + 4096L);
1238 }
1239
1240 /* ------------------------------------------------------------------
1241         IOCTL vidioc handling
1242    ------------------------------------------------------------------*/
1243
1244 static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
1245                                 struct v4l2_format *f)
1246 {
1247         struct em28xx         *dev = video_drvdata(file);
1248         struct em28xx_v4l2    *v4l2 = dev->v4l2;
1249
1250         f->fmt.pix.width = v4l2->width;
1251         f->fmt.pix.height = v4l2->height;
1252         f->fmt.pix.pixelformat = v4l2->format->fourcc;
1253         f->fmt.pix.bytesperline = (v4l2->width * v4l2->format->depth + 7) >> 3;
1254         f->fmt.pix.sizeimage = f->fmt.pix.bytesperline * v4l2->height;
1255         f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
1256
1257         /* FIXME: TOP? NONE? BOTTOM? ALTENATE? */
1258         if (v4l2->progressive)
1259                 f->fmt.pix.field = V4L2_FIELD_NONE;
1260         else
1261                 f->fmt.pix.field = v4l2->interlaced_fieldmode ?
1262                            V4L2_FIELD_INTERLACED : V4L2_FIELD_TOP;
1263         return 0;
1264 }
1265
1266 static struct em28xx_fmt *format_by_fourcc(unsigned int fourcc)
1267 {
1268         unsigned int i;
1269
1270         for (i = 0; i < ARRAY_SIZE(format); i++)
1271                 if (format[i].fourcc == fourcc)
1272                         return &format[i];
1273
1274         return NULL;
1275 }
1276
1277 static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
1278                                   struct v4l2_format *f)
1279 {
1280         struct em28xx         *dev   = video_drvdata(file);
1281         struct em28xx_v4l2    *v4l2  = dev->v4l2;
1282         unsigned int          width  = f->fmt.pix.width;
1283         unsigned int          height = f->fmt.pix.height;
1284         unsigned int          maxw   = norm_maxw(dev);
1285         unsigned int          maxh   = norm_maxh(dev);
1286         unsigned int          hscale, vscale;
1287         struct em28xx_fmt     *fmt;
1288
1289         fmt = format_by_fourcc(f->fmt.pix.pixelformat);
1290         if (!fmt) {
1291                 em28xx_videodbg("Fourcc format (%08x) invalid.\n",
1292                                 f->fmt.pix.pixelformat);
1293                 return -EINVAL;
1294         }
1295
1296         if (dev->board.is_em2800) {
1297                 /* the em2800 can only scale down to 50% */
1298                 height = height > (3 * maxh / 4) ? maxh : maxh / 2;
1299                 width = width > (3 * maxw / 4) ? maxw : maxw / 2;
1300                 /*
1301                  * MaxPacketSize for em2800 is too small to capture at full
1302                  * resolution use half of maxw as the scaler can only scale
1303                  * to 50%
1304                  */
1305                 if (width == maxw && height == maxh)
1306                         width /= 2;
1307         } else {
1308                 /* width must even because of the YUYV format
1309                    height must be even because of interlacing */
1310                 v4l_bound_align_image(&width, 48, maxw, 1, &height, 32, maxh,
1311                                       1, 0);
1312         }
1313
1314         size_to_scale(dev, width, height, &hscale, &vscale);
1315         scale_to_size(dev, hscale, vscale, &width, &height);
1316
1317         f->fmt.pix.width = width;
1318         f->fmt.pix.height = height;
1319         f->fmt.pix.pixelformat = fmt->fourcc;
1320         f->fmt.pix.bytesperline = (width * fmt->depth + 7) >> 3;
1321         f->fmt.pix.sizeimage = f->fmt.pix.bytesperline * height;
1322         f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
1323         if (v4l2->progressive)
1324                 f->fmt.pix.field = V4L2_FIELD_NONE;
1325         else
1326                 f->fmt.pix.field = v4l2->interlaced_fieldmode ?
1327                            V4L2_FIELD_INTERLACED : V4L2_FIELD_TOP;
1328         f->fmt.pix.priv = 0;
1329
1330         return 0;
1331 }
1332
1333 static int em28xx_set_video_format(struct em28xx *dev, unsigned int fourcc,
1334                                    unsigned width, unsigned height)
1335 {
1336         struct em28xx_fmt     *fmt;
1337         struct em28xx_v4l2    *v4l2 = dev->v4l2;
1338
1339         fmt = format_by_fourcc(fourcc);
1340         if (!fmt)
1341                 return -EINVAL;
1342
1343         v4l2->format = fmt;
1344         v4l2->width  = width;
1345         v4l2->height = height;
1346
1347         /* set new image size */
1348         size_to_scale(dev, v4l2->width, v4l2->height,
1349                       &v4l2->hscale, &v4l2->vscale);
1350
1351         em28xx_resolution_set(dev);
1352
1353         return 0;
1354 }
1355
1356 static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
1357                                 struct v4l2_format *f)
1358 {
1359         struct em28xx *dev = video_drvdata(file);
1360         struct em28xx_v4l2 *v4l2 = dev->v4l2;
1361
1362         if (vb2_is_busy(&v4l2->vb_vidq))
1363                 return -EBUSY;
1364
1365         vidioc_try_fmt_vid_cap(file, priv, f);
1366
1367         return em28xx_set_video_format(dev, f->fmt.pix.pixelformat,
1368                                 f->fmt.pix.width, f->fmt.pix.height);
1369 }
1370
1371 static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *norm)
1372 {
1373         struct em28xx *dev = video_drvdata(file);
1374
1375         *norm = dev->v4l2->norm;
1376
1377         return 0;
1378 }
1379
1380 static int vidioc_querystd(struct file *file, void *priv, v4l2_std_id *norm)
1381 {
1382         struct em28xx *dev = video_drvdata(file);
1383
1384         v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, video, querystd, norm);
1385
1386         return 0;
1387 }
1388
1389 static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm)
1390 {
1391         struct em28xx      *dev  = video_drvdata(file);
1392         struct em28xx_v4l2 *v4l2 = dev->v4l2;
1393         struct v4l2_format f;
1394
1395         if (norm == v4l2->norm)
1396                 return 0;
1397
1398         if (v4l2->streaming_users > 0)
1399                 return -EBUSY;
1400
1401         v4l2->norm = norm;
1402
1403         /* Adjusts width/height, if needed */
1404         f.fmt.pix.width = 720;
1405         f.fmt.pix.height = (norm & V4L2_STD_525_60) ? 480 : 576;
1406         vidioc_try_fmt_vid_cap(file, priv, &f);
1407
1408         /* set new image size */
1409         v4l2->width = f.fmt.pix.width;
1410         v4l2->height = f.fmt.pix.height;
1411         size_to_scale(dev, v4l2->width, v4l2->height,
1412                       &v4l2->hscale, &v4l2->vscale);
1413
1414         em28xx_resolution_set(dev);
1415         v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_std, v4l2->norm);
1416
1417         return 0;
1418 }
1419
1420 static int vidioc_g_parm(struct file *file, void *priv,
1421                          struct v4l2_streamparm *p)
1422 {
1423         struct em28xx      *dev  = video_drvdata(file);
1424         struct em28xx_v4l2 *v4l2 = dev->v4l2;
1425         int rc = 0;
1426
1427         p->parm.capture.readbuffers = EM28XX_MIN_BUF;
1428         if (dev->board.is_webcam)
1429                 rc = v4l2_device_call_until_err(&v4l2->v4l2_dev, 0,
1430                                                 video, g_parm, p);
1431         else
1432                 v4l2_video_std_frame_period(v4l2->norm,
1433                                             &p->parm.capture.timeperframe);
1434
1435         return rc;
1436 }
1437
1438 static int vidioc_s_parm(struct file *file, void *priv,
1439                          struct v4l2_streamparm *p)
1440 {
1441         struct em28xx *dev = video_drvdata(file);
1442
1443         p->parm.capture.readbuffers = EM28XX_MIN_BUF;
1444         return v4l2_device_call_until_err(&dev->v4l2->v4l2_dev,
1445                                           0, video, s_parm, p);
1446 }
1447
1448 static const char *iname[] = {
1449         [EM28XX_VMUX_COMPOSITE1] = "Composite1",
1450         [EM28XX_VMUX_COMPOSITE2] = "Composite2",
1451         [EM28XX_VMUX_COMPOSITE3] = "Composite3",
1452         [EM28XX_VMUX_COMPOSITE4] = "Composite4",
1453         [EM28XX_VMUX_SVIDEO]     = "S-Video",
1454         [EM28XX_VMUX_TELEVISION] = "Television",
1455         [EM28XX_VMUX_CABLE]      = "Cable TV",
1456         [EM28XX_VMUX_DVB]        = "DVB",
1457         [EM28XX_VMUX_DEBUG]      = "for debug only",
1458 };
1459
1460 static int vidioc_enum_input(struct file *file, void *priv,
1461                              struct v4l2_input *i)
1462 {
1463         struct em28xx *dev = video_drvdata(file);
1464         unsigned int       n;
1465
1466         n = i->index;
1467         if (n >= MAX_EM28XX_INPUT)
1468                 return -EINVAL;
1469         if (0 == INPUT(n)->type)
1470                 return -EINVAL;
1471
1472         i->index = n;
1473         i->type = V4L2_INPUT_TYPE_CAMERA;
1474
1475         strcpy(i->name, iname[INPUT(n)->type]);
1476
1477         if ((EM28XX_VMUX_TELEVISION == INPUT(n)->type) ||
1478             (EM28XX_VMUX_CABLE == INPUT(n)->type))
1479                 i->type = V4L2_INPUT_TYPE_TUNER;
1480
1481         i->std = dev->v4l2->vdev.tvnorms;
1482         /* webcams do not have the STD API */
1483         if (dev->board.is_webcam)
1484                 i->capabilities = 0;
1485
1486         return 0;
1487 }
1488
1489 static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
1490 {
1491         struct em28xx *dev = video_drvdata(file);
1492
1493         *i = dev->ctl_input;
1494
1495         return 0;
1496 }
1497
1498 static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
1499 {
1500         struct em28xx *dev = video_drvdata(file);
1501
1502         if (i >= MAX_EM28XX_INPUT)
1503                 return -EINVAL;
1504         if (0 == INPUT(i)->type)
1505                 return -EINVAL;
1506
1507         video_mux(dev, i);
1508         return 0;
1509 }
1510
1511 static int vidioc_g_audio(struct file *file, void *priv, struct v4l2_audio *a)
1512 {
1513         struct em28xx *dev = video_drvdata(file);
1514
1515         switch (a->index) {
1516         case EM28XX_AMUX_VIDEO:
1517                 strcpy(a->name, "Television");
1518                 break;
1519         case EM28XX_AMUX_LINE_IN:
1520                 strcpy(a->name, "Line In");
1521                 break;
1522         case EM28XX_AMUX_VIDEO2:
1523                 strcpy(a->name, "Television alt");
1524                 break;
1525         case EM28XX_AMUX_PHONE:
1526                 strcpy(a->name, "Phone");
1527                 break;
1528         case EM28XX_AMUX_MIC:
1529                 strcpy(a->name, "Mic");
1530                 break;
1531         case EM28XX_AMUX_CD:
1532                 strcpy(a->name, "CD");
1533                 break;
1534         case EM28XX_AMUX_AUX:
1535                 strcpy(a->name, "Aux");
1536                 break;
1537         case EM28XX_AMUX_PCM_OUT:
1538                 strcpy(a->name, "PCM");
1539                 break;
1540         default:
1541                 return -EINVAL;
1542         }
1543
1544         a->index = dev->ctl_ainput;
1545         a->capability = V4L2_AUDCAP_STEREO;
1546
1547         return 0;
1548 }
1549
1550 static int vidioc_s_audio(struct file *file, void *priv, const struct v4l2_audio *a)
1551 {
1552         struct em28xx *dev = video_drvdata(file);
1553
1554         if (a->index >= MAX_EM28XX_INPUT)
1555                 return -EINVAL;
1556         if (0 == INPUT(a->index)->type)
1557                 return -EINVAL;
1558
1559         dev->ctl_ainput = INPUT(a->index)->amux;
1560         dev->ctl_aoutput = INPUT(a->index)->aout;
1561
1562         if (!dev->ctl_aoutput)
1563                 dev->ctl_aoutput = EM28XX_AOUT_MASTER;
1564
1565         return 0;
1566 }
1567
1568 static int vidioc_g_tuner(struct file *file, void *priv,
1569                           struct v4l2_tuner *t)
1570 {
1571         struct em28xx *dev = video_drvdata(file);
1572
1573         if (0 != t->index)
1574                 return -EINVAL;
1575
1576         strcpy(t->name, "Tuner");
1577
1578         v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, g_tuner, t);
1579         return 0;
1580 }
1581
1582 static int vidioc_s_tuner(struct file *file, void *priv,
1583                           const struct v4l2_tuner *t)
1584 {
1585         struct em28xx *dev = video_drvdata(file);
1586
1587         if (0 != t->index)
1588                 return -EINVAL;
1589
1590         v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, s_tuner, t);
1591         return 0;
1592 }
1593
1594 static int vidioc_g_frequency(struct file *file, void *priv,
1595                               struct v4l2_frequency *f)
1596 {
1597         struct em28xx         *dev = video_drvdata(file);
1598         struct em28xx_v4l2    *v4l2 = dev->v4l2;
1599
1600         if (0 != f->tuner)
1601                 return -EINVAL;
1602
1603         f->frequency = v4l2->frequency;
1604         return 0;
1605 }
1606
1607 static int vidioc_s_frequency(struct file *file, void *priv,
1608                               const struct v4l2_frequency *f)
1609 {
1610         struct v4l2_frequency  new_freq = *f;
1611         struct em28xx             *dev  = video_drvdata(file);
1612         struct em28xx_v4l2        *v4l2 = dev->v4l2;
1613
1614         if (0 != f->tuner)
1615                 return -EINVAL;
1616
1617         v4l2_device_call_all(&v4l2->v4l2_dev, 0, tuner, s_frequency, f);
1618         v4l2_device_call_all(&v4l2->v4l2_dev, 0, tuner, g_frequency, &new_freq);
1619         v4l2->frequency = new_freq.frequency;
1620
1621         return 0;
1622 }
1623
1624 #ifdef CONFIG_VIDEO_ADV_DEBUG
1625 static int vidioc_g_chip_info(struct file *file, void *priv,
1626                               struct v4l2_dbg_chip_info *chip)
1627 {
1628         struct em28xx *dev = video_drvdata(file);
1629
1630         if (chip->match.addr > 1)
1631                 return -EINVAL;
1632         if (chip->match.addr == 1)
1633                 strlcpy(chip->name, "ac97", sizeof(chip->name));
1634         else
1635                 strlcpy(chip->name,
1636                         dev->v4l2->v4l2_dev.name, sizeof(chip->name));
1637         return 0;
1638 }
1639
1640 static int em28xx_reg_len(int reg)
1641 {
1642         switch (reg) {
1643         case EM28XX_R40_AC97LSB:
1644         case EM28XX_R30_HSCALELOW:
1645         case EM28XX_R32_VSCALELOW:
1646                 return 2;
1647         default:
1648                 return 1;
1649         }
1650 }
1651
1652 static int vidioc_g_register(struct file *file, void *priv,
1653                              struct v4l2_dbg_register *reg)
1654 {
1655         struct em28xx *dev = video_drvdata(file);
1656         int ret;
1657
1658         if (reg->match.addr > 1)
1659                 return -EINVAL;
1660         if (reg->match.addr) {
1661                 ret = em28xx_read_ac97(dev, reg->reg);
1662                 if (ret < 0)
1663                         return ret;
1664
1665                 reg->val = ret;
1666                 reg->size = 1;
1667                 return 0;
1668         }
1669
1670         /* Match host */
1671         reg->size = em28xx_reg_len(reg->reg);
1672         if (reg->size == 1) {
1673                 ret = em28xx_read_reg(dev, reg->reg);
1674
1675                 if (ret < 0)
1676                         return ret;
1677
1678                 reg->val = ret;
1679         } else {
1680                 __le16 val = 0;
1681
1682                 ret = dev->em28xx_read_reg_req_len(dev, USB_REQ_GET_STATUS,
1683                                                    reg->reg, (char *)&val, 2);
1684                 if (ret < 0)
1685                         return ret;
1686
1687                 reg->val = le16_to_cpu(val);
1688         }
1689
1690         return 0;
1691 }
1692
1693 static int vidioc_s_register(struct file *file, void *priv,
1694                              const struct v4l2_dbg_register *reg)
1695 {
1696         struct em28xx *dev = video_drvdata(file);
1697         __le16 buf;
1698
1699         if (reg->match.addr > 1)
1700                 return -EINVAL;
1701         if (reg->match.addr)
1702                 return em28xx_write_ac97(dev, reg->reg, reg->val);
1703
1704         /* Match host */
1705         buf = cpu_to_le16(reg->val);
1706
1707         return em28xx_write_regs(dev, reg->reg, (char *)&buf,
1708                                em28xx_reg_len(reg->reg));
1709 }
1710 #endif
1711
1712 static int vidioc_querycap(struct file *file, void  *priv,
1713                            struct v4l2_capability *cap)
1714 {
1715         struct video_device   *vdev = video_devdata(file);
1716         struct em28xx         *dev  = video_drvdata(file);
1717         struct em28xx_v4l2    *v4l2 = dev->v4l2;
1718
1719         strlcpy(cap->driver, "em28xx", sizeof(cap->driver));
1720         strlcpy(cap->card, em28xx_boards[dev->model].name, sizeof(cap->card));
1721         usb_make_path(dev->udev, cap->bus_info, sizeof(cap->bus_info));
1722
1723         if (vdev->vfl_type == VFL_TYPE_GRABBER)
1724                 cap->device_caps = V4L2_CAP_READWRITE |
1725                         V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
1726         else if (vdev->vfl_type == VFL_TYPE_RADIO)
1727                 cap->device_caps = V4L2_CAP_RADIO;
1728         else
1729                 cap->device_caps = V4L2_CAP_READWRITE | V4L2_CAP_VBI_CAPTURE;
1730
1731         if (dev->int_audio_type != EM28XX_INT_AUDIO_NONE)
1732                 cap->device_caps |= V4L2_CAP_AUDIO;
1733
1734         if (dev->tuner_type != TUNER_ABSENT)
1735                 cap->device_caps |= V4L2_CAP_TUNER;
1736
1737         cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS |
1738                 V4L2_CAP_READWRITE | V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
1739         if (video_is_registered(&v4l2->vbi_dev))
1740                 cap->capabilities |= V4L2_CAP_VBI_CAPTURE;
1741         if (video_is_registered(&v4l2->radio_dev))
1742                 cap->capabilities |= V4L2_CAP_RADIO;
1743         return 0;
1744 }
1745
1746 static int vidioc_enum_fmt_vid_cap(struct file *file, void  *priv,
1747                                    struct v4l2_fmtdesc *f)
1748 {
1749         if (unlikely(f->index >= ARRAY_SIZE(format)))
1750                 return -EINVAL;
1751
1752         strlcpy(f->description, format[f->index].name, sizeof(f->description));
1753         f->pixelformat = format[f->index].fourcc;
1754
1755         return 0;
1756 }
1757
1758 static int vidioc_enum_framesizes(struct file *file, void *priv,
1759                                   struct v4l2_frmsizeenum *fsize)
1760 {
1761         struct em28xx         *dev = video_drvdata(file);
1762         struct em28xx_fmt     *fmt;
1763         unsigned int          maxw = norm_maxw(dev);
1764         unsigned int          maxh = norm_maxh(dev);
1765
1766         fmt = format_by_fourcc(fsize->pixel_format);
1767         if (!fmt) {
1768                 em28xx_videodbg("Fourcc format (%08x) invalid.\n",
1769                                 fsize->pixel_format);
1770                 return -EINVAL;
1771         }
1772
1773         if (dev->board.is_em2800) {
1774                 if (fsize->index > 1)
1775                         return -EINVAL;
1776                 fsize->type = V4L2_FRMSIZE_TYPE_DISCRETE;
1777                 fsize->discrete.width = maxw / (1 + fsize->index);
1778                 fsize->discrete.height = maxh / (1 + fsize->index);
1779                 return 0;
1780         }
1781
1782         if (fsize->index != 0)
1783                 return -EINVAL;
1784
1785         /* Report a continuous range */
1786         fsize->type = V4L2_FRMSIZE_TYPE_STEPWISE;
1787         scale_to_size(dev, EM28XX_HVSCALE_MAX, EM28XX_HVSCALE_MAX,
1788                       &fsize->stepwise.min_width, &fsize->stepwise.min_height);
1789         if (fsize->stepwise.min_width < 48)
1790                 fsize->stepwise.min_width = 48;
1791         if (fsize->stepwise.min_height < 38)
1792                 fsize->stepwise.min_height = 38;
1793         fsize->stepwise.max_width = maxw;
1794         fsize->stepwise.max_height = maxh;
1795         fsize->stepwise.step_width = 1;
1796         fsize->stepwise.step_height = 1;
1797         return 0;
1798 }
1799
1800 /* RAW VBI ioctls */
1801
1802 static int vidioc_g_fmt_vbi_cap(struct file *file, void *priv,
1803                                 struct v4l2_format *format)
1804 {
1805         struct em28xx         *dev  = video_drvdata(file);
1806         struct em28xx_v4l2    *v4l2 = dev->v4l2;
1807
1808         format->fmt.vbi.samples_per_line = v4l2->vbi_width;
1809         format->fmt.vbi.sample_format = V4L2_PIX_FMT_GREY;
1810         format->fmt.vbi.offset = 0;
1811         format->fmt.vbi.flags = 0;
1812         format->fmt.vbi.sampling_rate = 6750000 * 4 / 2;
1813         format->fmt.vbi.count[0] = v4l2->vbi_height;
1814         format->fmt.vbi.count[1] = v4l2->vbi_height;
1815         memset(format->fmt.vbi.reserved, 0, sizeof(format->fmt.vbi.reserved));
1816
1817         /* Varies by video standard (NTSC, PAL, etc.) */
1818         if (v4l2->norm & V4L2_STD_525_60) {
1819                 /* NTSC */
1820                 format->fmt.vbi.start[0] = 10;
1821                 format->fmt.vbi.start[1] = 273;
1822         } else if (v4l2->norm & V4L2_STD_625_50) {
1823                 /* PAL */
1824                 format->fmt.vbi.start[0] = 6;
1825                 format->fmt.vbi.start[1] = 318;
1826         }
1827
1828         return 0;
1829 }
1830
1831 /* ----------------------------------------------------------- */
1832 /* RADIO ESPECIFIC IOCTLS                                      */
1833 /* ----------------------------------------------------------- */
1834
1835 static int radio_g_tuner(struct file *file, void *priv,
1836                          struct v4l2_tuner *t)
1837 {
1838         struct em28xx *dev = video_drvdata(file);
1839
1840         if (unlikely(t->index > 0))
1841                 return -EINVAL;
1842
1843         strcpy(t->name, "Radio");
1844
1845         v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, g_tuner, t);
1846
1847         return 0;
1848 }
1849
1850 static int radio_s_tuner(struct file *file, void *priv,
1851                          const struct v4l2_tuner *t)
1852 {
1853         struct em28xx *dev = video_drvdata(file);
1854
1855         if (0 != t->index)
1856                 return -EINVAL;
1857
1858         v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, s_tuner, t);
1859
1860         return 0;
1861 }
1862
1863 /*
1864  * em28xx_free_v4l2() - Free struct em28xx_v4l2
1865  *
1866  * @ref: struct kref for struct em28xx_v4l2
1867  *
1868  * Called when all users of struct em28xx_v4l2 are gone
1869  */
1870 static void em28xx_free_v4l2(struct kref *ref)
1871 {
1872         struct em28xx_v4l2 *v4l2 = container_of(ref, struct em28xx_v4l2, ref);
1873
1874         v4l2->dev->v4l2 = NULL;
1875         kfree(v4l2);
1876 }
1877
1878 /*
1879  * em28xx_v4l2_open()
1880  * inits the device and starts isoc transfer
1881  */
1882 static int em28xx_v4l2_open(struct file *filp)
1883 {
1884         struct video_device *vdev = video_devdata(filp);
1885         struct em28xx *dev = video_drvdata(filp);
1886         struct em28xx_v4l2 *v4l2 = dev->v4l2;
1887         enum v4l2_buf_type fh_type = 0;
1888         int ret;
1889
1890         switch (vdev->vfl_type) {
1891         case VFL_TYPE_GRABBER:
1892                 fh_type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1893                 break;
1894         case VFL_TYPE_VBI:
1895                 fh_type = V4L2_BUF_TYPE_VBI_CAPTURE;
1896                 break;
1897         case VFL_TYPE_RADIO:
1898                 break;
1899         default:
1900                 return -EINVAL;
1901         }
1902
1903         em28xx_videodbg("open dev=%s type=%s users=%d\n",
1904                         video_device_node_name(vdev), v4l2_type_names[fh_type],
1905                         v4l2->users);
1906
1907         if (mutex_lock_interruptible(&dev->lock))
1908                 return -ERESTARTSYS;
1909
1910         ret = v4l2_fh_open(filp);
1911         if (ret) {
1912                 em28xx_errdev("%s: v4l2_fh_open() returned error %d\n",
1913                               __func__, ret);
1914                 mutex_unlock(&dev->lock);
1915                 return ret;
1916         }
1917
1918         if (v4l2->users == 0) {
1919                 em28xx_set_mode(dev, EM28XX_ANALOG_MODE);
1920
1921                 if (vdev->vfl_type != VFL_TYPE_RADIO)
1922                         em28xx_resolution_set(dev);
1923
1924                 /*
1925                  * Needed, since GPIO might have disabled power
1926                  * of some i2c devices
1927                  */
1928                 em28xx_wake_i2c(dev);
1929         }
1930
1931         if (vdev->vfl_type == VFL_TYPE_RADIO) {
1932                 em28xx_videodbg("video_open: setting radio device\n");
1933                 v4l2_device_call_all(&v4l2->v4l2_dev, 0, tuner, s_radio);
1934         }
1935
1936         kref_get(&dev->ref);
1937         kref_get(&v4l2->ref);
1938         v4l2->users++;
1939
1940         mutex_unlock(&dev->lock);
1941
1942         return 0;
1943 }
1944
1945 /*
1946  * em28xx_v4l2_fini()
1947  * unregisters the v4l2,i2c and usb devices
1948  * called when the device gets disconected or at module unload
1949 */
1950 static int em28xx_v4l2_fini(struct em28xx *dev)
1951 {
1952         struct em28xx_v4l2 *v4l2 = dev->v4l2;
1953
1954         if (dev->is_audio_only) {
1955                 /* Shouldn't initialize IR for this interface */
1956                 return 0;
1957         }
1958
1959         if (!dev->has_video) {
1960                 /* This device does not support the v4l2 extension */
1961                 return 0;
1962         }
1963
1964         if (v4l2 == NULL)
1965                 return 0;
1966
1967         em28xx_info("Closing video extension\n");
1968
1969         mutex_lock(&dev->lock);
1970
1971         v4l2_device_disconnect(&v4l2->v4l2_dev);
1972
1973         em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);
1974
1975         if (video_is_registered(&v4l2->radio_dev)) {
1976                 em28xx_info("V4L2 device %s deregistered\n",
1977                             video_device_node_name(&v4l2->radio_dev));
1978                 video_unregister_device(&v4l2->radio_dev);
1979         }
1980         if (video_is_registered(&v4l2->vbi_dev)) {
1981                 em28xx_info("V4L2 device %s deregistered\n",
1982                             video_device_node_name(&v4l2->vbi_dev));
1983                 video_unregister_device(&v4l2->vbi_dev);
1984         }
1985         if (video_is_registered(&v4l2->vdev)) {
1986                 em28xx_info("V4L2 device %s deregistered\n",
1987                             video_device_node_name(&v4l2->vdev));
1988                 video_unregister_device(&v4l2->vdev);
1989         }
1990
1991         v4l2_ctrl_handler_free(&v4l2->ctrl_handler);
1992         v4l2_device_unregister(&v4l2->v4l2_dev);
1993
1994         if (v4l2->clk) {
1995                 v4l2_clk_unregister_fixed(v4l2->clk);
1996                 v4l2->clk = NULL;
1997         }
1998
1999         kref_put(&v4l2->ref, em28xx_free_v4l2);
2000
2001         mutex_unlock(&dev->lock);
2002
2003         kref_put(&dev->ref, em28xx_free_device);
2004
2005         return 0;
2006 }
2007
2008 static int em28xx_v4l2_suspend(struct em28xx *dev)
2009 {
2010         if (dev->is_audio_only)
2011                 return 0;
2012
2013         if (!dev->has_video)
2014                 return 0;
2015
2016         em28xx_info("Suspending video extension\n");
2017         em28xx_stop_urbs(dev);
2018         return 0;
2019 }
2020
2021 static int em28xx_v4l2_resume(struct em28xx *dev)
2022 {
2023         if (dev->is_audio_only)
2024                 return 0;
2025
2026         if (!dev->has_video)
2027                 return 0;
2028
2029         em28xx_info("Resuming video extension\n");
2030         /* what do we do here */
2031         return 0;
2032 }
2033
2034 /*
2035  * em28xx_v4l2_close()
2036  * stops streaming and deallocates all resources allocated by the v4l2
2037  * calls and ioctls
2038  */
2039 static int em28xx_v4l2_close(struct file *filp)
2040 {
2041         struct em28xx         *dev  = video_drvdata(filp);
2042         struct em28xx_v4l2    *v4l2 = dev->v4l2;
2043         int              errCode;
2044
2045         em28xx_videodbg("users=%d\n", v4l2->users);
2046
2047         vb2_fop_release(filp);
2048         mutex_lock(&dev->lock);
2049
2050         if (v4l2->users == 1) {
2051                 /* No sense to try to write to the device */
2052                 if (dev->disconnected)
2053                         goto exit;
2054
2055                 /* Save some power by putting tuner to sleep */
2056                 v4l2_device_call_all(&v4l2->v4l2_dev, 0, core, s_power, 0);
2057
2058                 /* do this before setting alternate! */
2059                 em28xx_set_mode(dev, EM28XX_SUSPEND);
2060
2061                 /* set alternate 0 */
2062                 dev->alt = 0;
2063                 em28xx_videodbg("setting alternate 0\n");
2064                 errCode = usb_set_interface(dev->udev, 0, 0);
2065                 if (errCode < 0) {
2066                         em28xx_errdev("cannot change alternate number to "
2067                                         "0 (error=%i)\n", errCode);
2068                 }
2069         }
2070
2071 exit:
2072         v4l2->users--;
2073         kref_put(&v4l2->ref, em28xx_free_v4l2);
2074         mutex_unlock(&dev->lock);
2075         kref_put(&dev->ref, em28xx_free_device);
2076
2077         return 0;
2078 }
2079
2080 static const struct v4l2_file_operations em28xx_v4l_fops = {
2081         .owner         = THIS_MODULE,
2082         .open          = em28xx_v4l2_open,
2083         .release       = em28xx_v4l2_close,
2084         .read          = vb2_fop_read,
2085         .poll          = vb2_fop_poll,
2086         .mmap          = vb2_fop_mmap,
2087         .unlocked_ioctl = video_ioctl2,
2088 };
2089
2090 static const struct v4l2_ioctl_ops video_ioctl_ops = {
2091         .vidioc_querycap            = vidioc_querycap,
2092         .vidioc_enum_fmt_vid_cap    = vidioc_enum_fmt_vid_cap,
2093         .vidioc_g_fmt_vid_cap       = vidioc_g_fmt_vid_cap,
2094         .vidioc_try_fmt_vid_cap     = vidioc_try_fmt_vid_cap,
2095         .vidioc_s_fmt_vid_cap       = vidioc_s_fmt_vid_cap,
2096         .vidioc_g_fmt_vbi_cap       = vidioc_g_fmt_vbi_cap,
2097         .vidioc_try_fmt_vbi_cap     = vidioc_g_fmt_vbi_cap,
2098         .vidioc_s_fmt_vbi_cap       = vidioc_g_fmt_vbi_cap,
2099         .vidioc_enum_framesizes     = vidioc_enum_framesizes,
2100         .vidioc_g_audio             = vidioc_g_audio,
2101         .vidioc_s_audio             = vidioc_s_audio,
2102
2103         .vidioc_reqbufs             = vb2_ioctl_reqbufs,
2104         .vidioc_create_bufs         = vb2_ioctl_create_bufs,
2105         .vidioc_prepare_buf         = vb2_ioctl_prepare_buf,
2106         .vidioc_querybuf            = vb2_ioctl_querybuf,
2107         .vidioc_qbuf                = vb2_ioctl_qbuf,
2108         .vidioc_dqbuf               = vb2_ioctl_dqbuf,
2109
2110         .vidioc_g_std               = vidioc_g_std,
2111         .vidioc_querystd            = vidioc_querystd,
2112         .vidioc_s_std               = vidioc_s_std,
2113         .vidioc_g_parm              = vidioc_g_parm,
2114         .vidioc_s_parm              = vidioc_s_parm,
2115         .vidioc_enum_input          = vidioc_enum_input,
2116         .vidioc_g_input             = vidioc_g_input,
2117         .vidioc_s_input             = vidioc_s_input,
2118         .vidioc_streamon            = vb2_ioctl_streamon,
2119         .vidioc_streamoff           = vb2_ioctl_streamoff,
2120         .vidioc_g_tuner             = vidioc_g_tuner,
2121         .vidioc_s_tuner             = vidioc_s_tuner,
2122         .vidioc_g_frequency         = vidioc_g_frequency,
2123         .vidioc_s_frequency         = vidioc_s_frequency,
2124         .vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
2125         .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
2126 #ifdef CONFIG_VIDEO_ADV_DEBUG
2127         .vidioc_g_chip_info         = vidioc_g_chip_info,
2128         .vidioc_g_register          = vidioc_g_register,
2129         .vidioc_s_register          = vidioc_s_register,
2130 #endif
2131 };
2132
2133 static const struct video_device em28xx_video_template = {
2134         .fops           = &em28xx_v4l_fops,
2135         .ioctl_ops      = &video_ioctl_ops,
2136         .release        = video_device_release_empty,
2137         .tvnorms        = V4L2_STD_ALL,
2138 };
2139
2140 static const struct v4l2_file_operations radio_fops = {
2141         .owner         = THIS_MODULE,
2142         .open          = em28xx_v4l2_open,
2143         .release       = em28xx_v4l2_close,
2144         .unlocked_ioctl = video_ioctl2,
2145 };
2146
2147 static const struct v4l2_ioctl_ops radio_ioctl_ops = {
2148         .vidioc_querycap      = vidioc_querycap,
2149         .vidioc_g_tuner       = radio_g_tuner,
2150         .vidioc_s_tuner       = radio_s_tuner,
2151         .vidioc_g_frequency   = vidioc_g_frequency,
2152         .vidioc_s_frequency   = vidioc_s_frequency,
2153         .vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
2154         .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
2155 #ifdef CONFIG_VIDEO_ADV_DEBUG
2156         .vidioc_g_chip_info   = vidioc_g_chip_info,
2157         .vidioc_g_register    = vidioc_g_register,
2158         .vidioc_s_register    = vidioc_s_register,
2159 #endif
2160 };
2161
2162 static struct video_device em28xx_radio_template = {
2163         .fops           = &radio_fops,
2164         .ioctl_ops      = &radio_ioctl_ops,
2165         .release        = video_device_release_empty,
2166 };
2167
2168 /* I2C possible address to saa7115, tvp5150, msp3400, tvaudio */
2169 static unsigned short saa711x_addrs[] = {
2170         0x4a >> 1, 0x48 >> 1,   /* SAA7111, SAA7111A and SAA7113 */
2171         0x42 >> 1, 0x40 >> 1,   /* SAA7114, SAA7115 and SAA7118 */
2172         I2C_CLIENT_END };
2173
2174 static unsigned short tvp5150_addrs[] = {
2175         0xb8 >> 1,
2176         0xba >> 1,
2177         I2C_CLIENT_END
2178 };
2179
2180 static unsigned short msp3400_addrs[] = {
2181         0x80 >> 1,
2182         0x88 >> 1,
2183         I2C_CLIENT_END
2184 };
2185
2186 /******************************** usb interface ******************************/
2187
2188 static void em28xx_vdev_init(struct em28xx *dev,
2189                              struct video_device *vfd,
2190                              const struct video_device *template,
2191                              const char *type_name)
2192 {
2193         *vfd            = *template;
2194         vfd->v4l2_dev   = &dev->v4l2->v4l2_dev;
2195         vfd->lock       = &dev->lock;
2196         if (dev->board.is_webcam)
2197                 vfd->tvnorms = 0;
2198
2199         snprintf(vfd->name, sizeof(vfd->name), "%s %s",
2200                  dev->name, type_name);
2201
2202         video_set_drvdata(vfd, dev);
2203 }
2204
2205 static void em28xx_tuner_setup(struct em28xx *dev, unsigned short tuner_addr)
2206 {
2207         struct em28xx_v4l2      *v4l2 = dev->v4l2;
2208         struct v4l2_device      *v4l2_dev = &v4l2->v4l2_dev;
2209         struct tuner_setup      tun_setup;
2210         struct v4l2_frequency   f;
2211
2212         memset(&tun_setup, 0, sizeof(tun_setup));
2213
2214         tun_setup.mode_mask = T_ANALOG_TV | T_RADIO;
2215         tun_setup.tuner_callback = em28xx_tuner_callback;
2216
2217         if (dev->board.radio.type) {
2218                 tun_setup.type = dev->board.radio.type;
2219                 tun_setup.addr = dev->board.radio_addr;
2220
2221                 v4l2_device_call_all(v4l2_dev,
2222                                      0, tuner, s_type_addr, &tun_setup);
2223         }
2224
2225         if ((dev->tuner_type != TUNER_ABSENT) && (dev->tuner_type)) {
2226                 tun_setup.type   = dev->tuner_type;
2227                 tun_setup.addr   = tuner_addr;
2228
2229                 v4l2_device_call_all(v4l2_dev,
2230                                      0, tuner, s_type_addr, &tun_setup);
2231         }
2232
2233         if (dev->board.tda9887_conf) {
2234                 struct v4l2_priv_tun_config tda9887_cfg;
2235
2236                 tda9887_cfg.tuner = TUNER_TDA9887;
2237                 tda9887_cfg.priv = &dev->board.tda9887_conf;
2238
2239                 v4l2_device_call_all(v4l2_dev,
2240                                      0, tuner, s_config, &tda9887_cfg);
2241         }
2242
2243         if (dev->tuner_type == TUNER_XC2028) {
2244                 struct v4l2_priv_tun_config  xc2028_cfg;
2245                 struct xc2028_ctrl           ctl;
2246
2247                 memset(&xc2028_cfg, 0, sizeof(xc2028_cfg));
2248                 memset(&ctl, 0, sizeof(ctl));
2249
2250                 em28xx_setup_xc3028(dev, &ctl);
2251
2252                 xc2028_cfg.tuner = TUNER_XC2028;
2253                 xc2028_cfg.priv  = &ctl;
2254
2255                 v4l2_device_call_all(v4l2_dev, 0, tuner, s_config, &xc2028_cfg);
2256         }
2257
2258         /* configure tuner */
2259         f.tuner = 0;
2260         f.type = V4L2_TUNER_ANALOG_TV;
2261         f.frequency = 9076;     /* just a magic number */
2262         v4l2->frequency = f.frequency;
2263         v4l2_device_call_all(v4l2_dev, 0, tuner, s_frequency, &f);
2264 }
2265
2266 static int em28xx_v4l2_init(struct em28xx *dev)
2267 {
2268         u8 val;
2269         int ret;
2270         unsigned int maxw;
2271         struct v4l2_ctrl_handler *hdl;
2272         struct em28xx_v4l2 *v4l2;
2273
2274         if (dev->is_audio_only) {
2275                 /* Shouldn't initialize IR for this interface */
2276                 return 0;
2277         }
2278
2279         if (!dev->has_video) {
2280                 /* This device does not support the v4l2 extension */
2281                 return 0;
2282         }
2283
2284         em28xx_info("Registering V4L2 extension\n");
2285
2286         mutex_lock(&dev->lock);
2287
2288         v4l2 = kzalloc(sizeof(struct em28xx_v4l2), GFP_KERNEL);
2289         if (v4l2 == NULL) {
2290                 em28xx_info("em28xx_v4l: memory allocation failed\n");
2291                 mutex_unlock(&dev->lock);
2292                 return -ENOMEM;
2293         }
2294         kref_init(&v4l2->ref);
2295         v4l2->dev = dev;
2296         dev->v4l2 = v4l2;
2297
2298         ret = v4l2_device_register(&dev->udev->dev, &v4l2->v4l2_dev);
2299         if (ret < 0) {
2300                 em28xx_errdev("Call to v4l2_device_register() failed!\n");
2301                 goto err;
2302         }
2303
2304         hdl = &v4l2->ctrl_handler;
2305         v4l2_ctrl_handler_init(hdl, 8);
2306         v4l2->v4l2_dev.ctrl_handler = hdl;
2307
2308         if (dev->board.is_webcam)
2309                 v4l2->progressive = true;
2310
2311         /*
2312          * Default format, used for tvp5150 or saa711x output formats
2313          */
2314         v4l2->vinmode = 0x10;
2315         v4l2->vinctl  = EM28XX_VINCTRL_INTERLACED |
2316                         EM28XX_VINCTRL_CCIR656_ENABLE;
2317
2318         /* request some modules */
2319
2320         if (dev->board.has_msp34xx)
2321                 v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2322                                     &dev->i2c_adap[dev->def_i2c_bus],
2323                                     "msp3400", 0, msp3400_addrs);
2324
2325         if (dev->board.decoder == EM28XX_SAA711X)
2326                 v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2327                                     &dev->i2c_adap[dev->def_i2c_bus],
2328                                     "saa7115_auto", 0, saa711x_addrs);
2329
2330         if (dev->board.decoder == EM28XX_TVP5150)
2331                 v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2332                                     &dev->i2c_adap[dev->def_i2c_bus],
2333                                     "tvp5150", 0, tvp5150_addrs);
2334
2335         if (dev->board.adecoder == EM28XX_TVAUDIO)
2336                 v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2337                                     &dev->i2c_adap[dev->def_i2c_bus],
2338                                     "tvaudio", dev->board.tvaudio_addr, NULL);
2339
2340         /* Initialize tuner and camera */
2341
2342         if (dev->board.tuner_type != TUNER_ABSENT) {
2343                 unsigned short tuner_addr = dev->board.tuner_addr;
2344                 int has_demod = (dev->board.tda9887_conf & TDA9887_PRESENT);
2345
2346                 if (dev->board.radio.type)
2347                         v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2348                                             &dev->i2c_adap[dev->def_i2c_bus],
2349                                             "tuner", dev->board.radio_addr,
2350                                             NULL);
2351
2352                 if (has_demod)
2353                         v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2354                                             &dev->i2c_adap[dev->def_i2c_bus],
2355                                             "tuner", 0,
2356                                             v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
2357                 if (tuner_addr == 0) {
2358                         enum v4l2_i2c_tuner_type type =
2359                                 has_demod ? ADDRS_TV_WITH_DEMOD : ADDRS_TV;
2360                         struct v4l2_subdev *sd;
2361
2362                         sd = v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2363                                                  &dev->i2c_adap[dev->def_i2c_bus],
2364                                                  "tuner", 0,
2365                                                  v4l2_i2c_tuner_addrs(type));
2366
2367                         if (sd)
2368                                 tuner_addr = v4l2_i2c_subdev_addr(sd);
2369                 } else {
2370                         v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2371                                             &dev->i2c_adap[dev->def_i2c_bus],
2372                                             "tuner", tuner_addr, NULL);
2373                 }
2374
2375                 em28xx_tuner_setup(dev, tuner_addr);
2376         }
2377
2378         if (dev->em28xx_sensor != EM28XX_NOSENSOR)
2379                 em28xx_init_camera(dev);
2380
2381         /* Configure audio */
2382         ret = em28xx_audio_setup(dev);
2383         if (ret < 0) {
2384                 em28xx_errdev("%s: Error while setting audio - error [%d]!\n",
2385                               __func__, ret);
2386                 goto unregister_dev;
2387         }
2388         if (dev->audio_mode.ac97 != EM28XX_NO_AC97) {
2389                 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2390                                   V4L2_CID_AUDIO_MUTE, 0, 1, 1, 1);
2391                 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2392                                   V4L2_CID_AUDIO_VOLUME, 0, 0x1f, 1, 0x1f);
2393         } else {
2394                 /* install the em28xx notify callback */
2395                 v4l2_ctrl_notify(v4l2_ctrl_find(hdl, V4L2_CID_AUDIO_MUTE),
2396                                  em28xx_ctrl_notify, dev);
2397                 v4l2_ctrl_notify(v4l2_ctrl_find(hdl, V4L2_CID_AUDIO_VOLUME),
2398                                  em28xx_ctrl_notify, dev);
2399         }
2400
2401         /* wake i2c devices */
2402         em28xx_wake_i2c(dev);
2403
2404         /* init video dma queues */
2405         INIT_LIST_HEAD(&dev->vidq.active);
2406         INIT_LIST_HEAD(&dev->vbiq.active);
2407
2408         if (dev->board.has_msp34xx) {
2409                 /* Send a reset to other chips via gpio */
2410                 ret = em28xx_write_reg(dev, EM2820_R08_GPIO_CTRL, 0xf7);
2411                 if (ret < 0) {
2412                         em28xx_errdev("%s: em28xx_write_reg - msp34xx(1) failed! error [%d]\n",
2413                                       __func__, ret);
2414                         goto unregister_dev;
2415                 }
2416                 msleep(3);
2417
2418                 ret = em28xx_write_reg(dev, EM2820_R08_GPIO_CTRL, 0xff);
2419                 if (ret < 0) {
2420                         em28xx_errdev("%s: em28xx_write_reg - msp34xx(2) failed! error [%d]\n",
2421                                       __func__, ret);
2422                         goto unregister_dev;
2423                 }
2424                 msleep(3);
2425         }
2426
2427         /* set default norm */
2428         v4l2->norm = V4L2_STD_PAL;
2429         v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_std, v4l2->norm);
2430         v4l2->interlaced_fieldmode = EM28XX_INTERLACED_DEFAULT;
2431
2432         /* Analog specific initialization */
2433         v4l2->format = &format[0];
2434
2435         maxw = norm_maxw(dev);
2436         /* MaxPacketSize for em2800 is too small to capture at full resolution
2437          * use half of maxw as the scaler can only scale to 50% */
2438         if (dev->board.is_em2800)
2439                 maxw /= 2;
2440
2441         em28xx_set_video_format(dev, format[0].fourcc,
2442                                 maxw, norm_maxh(dev));
2443
2444         video_mux(dev, 0);
2445
2446         /* Audio defaults */
2447         dev->mute = 1;
2448         dev->volume = 0x1f;
2449
2450 /*      em28xx_write_reg(dev, EM28XX_R0E_AUDIOSRC, 0xc0); audio register */
2451         val = (u8)em28xx_read_reg(dev, EM28XX_R0F_XCLK);
2452         em28xx_write_reg(dev, EM28XX_R0F_XCLK,
2453                          (EM28XX_XCLK_AUDIO_UNMUTE | val));
2454
2455         em28xx_set_outfmt(dev);
2456
2457         /* Add image controls */
2458         /* NOTE: at this point, the subdevices are already registered, so bridge
2459          * controls are only added/enabled when no subdevice provides them */
2460         if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_CONTRAST))
2461                 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2462                                   V4L2_CID_CONTRAST,
2463                                   0, 0x1f, 1, CONTRAST_DEFAULT);
2464         if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_BRIGHTNESS))
2465                 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2466                                   V4L2_CID_BRIGHTNESS,
2467                                   -0x80, 0x7f, 1, BRIGHTNESS_DEFAULT);
2468         if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_SATURATION))
2469                 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2470                                   V4L2_CID_SATURATION,
2471                                   0, 0x1f, 1, SATURATION_DEFAULT);
2472         if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_BLUE_BALANCE))
2473                 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2474                                   V4L2_CID_BLUE_BALANCE,
2475                                   -0x30, 0x30, 1, BLUE_BALANCE_DEFAULT);
2476         if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_RED_BALANCE))
2477                 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2478                                   V4L2_CID_RED_BALANCE,
2479                                   -0x30, 0x30, 1, RED_BALANCE_DEFAULT);
2480         if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_SHARPNESS))
2481                 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2482                                   V4L2_CID_SHARPNESS,
2483                                   0, 0x0f, 1, SHARPNESS_DEFAULT);
2484
2485         /* Reset image controls */
2486         em28xx_colorlevels_set_default(dev);
2487         v4l2_ctrl_handler_setup(hdl);
2488         ret = hdl->error;
2489         if (ret)
2490                 goto unregister_dev;
2491
2492         /* allocate and fill video video_device struct */
2493         em28xx_vdev_init(dev, &v4l2->vdev, &em28xx_video_template, "video");
2494         mutex_init(&v4l2->vb_queue_lock);
2495         mutex_init(&v4l2->vb_vbi_queue_lock);
2496         v4l2->vdev.queue = &v4l2->vb_vidq;
2497         v4l2->vdev.queue->lock = &v4l2->vb_queue_lock;
2498
2499         /* disable inapplicable ioctls */
2500         if (dev->board.is_webcam) {
2501                 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_QUERYSTD);
2502                 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_STD);
2503                 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_STD);
2504         } else {
2505                 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_PARM);
2506         }
2507         if (dev->tuner_type == TUNER_ABSENT) {
2508                 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_TUNER);
2509                 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_TUNER);
2510                 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_FREQUENCY);
2511                 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_FREQUENCY);
2512         }
2513         if (dev->int_audio_type == EM28XX_INT_AUDIO_NONE) {
2514                 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_AUDIO);
2515                 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_AUDIO);
2516         }
2517
2518         /* register v4l2 video video_device */
2519         ret = video_register_device(&v4l2->vdev, VFL_TYPE_GRABBER,
2520                                     video_nr[dev->devno]);
2521         if (ret) {
2522                 em28xx_errdev("unable to register video device (error=%i).\n",
2523                               ret);
2524                 goto unregister_dev;
2525         }
2526
2527         /* Allocate and fill vbi video_device struct */
2528         if (em28xx_vbi_supported(dev) == 1) {
2529                 em28xx_vdev_init(dev, &v4l2->vbi_dev, &em28xx_video_template,
2530                                 "vbi");
2531
2532                 v4l2->vbi_dev.queue = &v4l2->vb_vbiq;
2533                 v4l2->vbi_dev.queue->lock = &v4l2->vb_vbi_queue_lock;
2534
2535                 /* disable inapplicable ioctls */
2536                 v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_PARM);
2537                 if (dev->tuner_type == TUNER_ABSENT) {
2538                         v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_G_TUNER);
2539                         v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_TUNER);
2540                         v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_G_FREQUENCY);
2541                         v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_FREQUENCY);
2542                 }
2543                 if (dev->int_audio_type == EM28XX_INT_AUDIO_NONE) {
2544                         v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_G_AUDIO);
2545                         v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_AUDIO);
2546                 }
2547
2548                 /* register v4l2 vbi video_device */
2549                 ret = video_register_device(&v4l2->vbi_dev, VFL_TYPE_VBI,
2550                                             vbi_nr[dev->devno]);
2551                 if (ret < 0) {
2552                         em28xx_errdev("unable to register vbi device\n");
2553                         goto unregister_dev;
2554                 }
2555         }
2556
2557         if (em28xx_boards[dev->model].radio.type == EM28XX_RADIO) {
2558                 em28xx_vdev_init(dev, &v4l2->radio_dev, &em28xx_radio_template,
2559                                    "radio");
2560                 ret = video_register_device(&v4l2->radio_dev, VFL_TYPE_RADIO,
2561                                             radio_nr[dev->devno]);
2562                 if (ret < 0) {
2563                         em28xx_errdev("can't register radio device\n");
2564                         goto unregister_dev;
2565                 }
2566                 em28xx_info("Registered radio device as %s\n",
2567                             video_device_node_name(&v4l2->radio_dev));
2568         }
2569
2570         em28xx_info("V4L2 video device registered as %s\n",
2571                     video_device_node_name(&v4l2->vdev));
2572
2573         if (video_is_registered(&v4l2->vbi_dev))
2574                 em28xx_info("V4L2 VBI device registered as %s\n",
2575                             video_device_node_name(&v4l2->vbi_dev));
2576
2577         /* Save some power by putting tuner to sleep */
2578         v4l2_device_call_all(&v4l2->v4l2_dev, 0, core, s_power, 0);
2579
2580         /* initialize videobuf2 stuff */
2581         em28xx_vb2_setup(dev);
2582
2583         em28xx_info("V4L2 extension successfully initialized\n");
2584
2585         kref_get(&dev->ref);
2586
2587         mutex_unlock(&dev->lock);
2588         return 0;
2589
2590 unregister_dev:
2591         v4l2_ctrl_handler_free(&v4l2->ctrl_handler);
2592         v4l2_device_unregister(&v4l2->v4l2_dev);
2593 err:
2594         dev->v4l2 = NULL;
2595         kref_put(&v4l2->ref, em28xx_free_v4l2);
2596         mutex_unlock(&dev->lock);
2597         return ret;
2598 }
2599
2600 static struct em28xx_ops v4l2_ops = {
2601         .id   = EM28XX_V4L2,
2602         .name = "Em28xx v4l2 Extension",
2603         .init = em28xx_v4l2_init,
2604         .fini = em28xx_v4l2_fini,
2605         .suspend = em28xx_v4l2_suspend,
2606         .resume = em28xx_v4l2_resume,
2607 };
2608
2609 static int __init em28xx_video_register(void)
2610 {
2611         return em28xx_register_extension(&v4l2_ops);
2612 }
2613
2614 static void __exit em28xx_video_unregister(void)
2615 {
2616         em28xx_unregister_extension(&v4l2_ops);
2617 }
2618
2619 module_init(em28xx_video_register);
2620 module_exit(em28xx_video_unregister);