]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/media/usb/em28xx/em28xx-video.c
drivers: usb: removed assignment of 0 to static variables
[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/drv-intf/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         buf->vb.vb2_buf.timestamp = ktime_get_ns();
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,
875                        unsigned int *nbuffers, unsigned int *nplanes,
876                        unsigned int sizes[], void *alloc_ctxs[])
877 {
878         struct em28xx *dev = vb2_get_drv_priv(vq);
879         struct em28xx_v4l2 *v4l2 = dev->v4l2;
880         unsigned long size =
881                     (v4l2->width * v4l2->height * v4l2->format->depth + 7) >> 3;
882
883         if (*nplanes)
884                 return sizes[0] < size ? -EINVAL : 0;
885         *nplanes = 1;
886         sizes[0] = size;
887         return 0;
888 }
889
890 static int
891 buffer_prepare(struct vb2_buffer *vb)
892 {
893         struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
894         struct em28xx        *dev = vb2_get_drv_priv(vb->vb2_queue);
895         struct em28xx_v4l2   *v4l2 = dev->v4l2;
896         unsigned long size;
897
898         em28xx_videodbg("%s, field=%d\n", __func__, vbuf->field);
899
900         size = (v4l2->width * v4l2->height * v4l2->format->depth + 7) >> 3;
901
902         if (vb2_plane_size(vb, 0) < size) {
903                 em28xx_videodbg("%s data will not fit into plane (%lu < %lu)\n",
904                                 __func__, vb2_plane_size(vb, 0), size);
905                 return -EINVAL;
906         }
907         vb2_set_plane_payload(vb, 0, size);
908
909         return 0;
910 }
911
912 int em28xx_start_analog_streaming(struct vb2_queue *vq, unsigned int count)
913 {
914         struct em28xx *dev = vb2_get_drv_priv(vq);
915         struct em28xx_v4l2 *v4l2 = dev->v4l2;
916         struct v4l2_frequency f;
917         struct v4l2_fh *owner;
918         int rc = 0;
919
920         em28xx_videodbg("%s\n", __func__);
921
922         /* Make sure streaming is not already in progress for this type
923            of filehandle (e.g. video, vbi) */
924         rc = res_get(dev, vq->type);
925         if (rc)
926                 return rc;
927
928         if (v4l2->streaming_users == 0) {
929                 /* First active streaming user, so allocate all the URBs */
930
931                 /* Allocate the USB bandwidth */
932                 em28xx_set_alternate(dev);
933
934                 /* Needed, since GPIO might have disabled power of
935                    some i2c device
936                 */
937                 em28xx_wake_i2c(dev);
938
939                 v4l2->capture_type = -1;
940                 rc = em28xx_init_usb_xfer(dev, EM28XX_ANALOG_MODE,
941                                           dev->analog_xfer_bulk,
942                                           EM28XX_NUM_BUFS,
943                                           dev->max_pkt_size,
944                                           dev->packet_multiplier,
945                                           em28xx_urb_data_copy);
946                 if (rc < 0)
947                         return rc;
948
949                 /*
950                  * djh: it's not clear whether this code is still needed.  I'm
951                  * leaving it in here for now entirely out of concern for
952                  * backward compatibility (the old code did it)
953                  */
954
955                 /* Ask tuner to go to analog or radio mode */
956                 memset(&f, 0, sizeof(f));
957                 f.frequency = v4l2->frequency;
958                 owner = (struct v4l2_fh *)vq->owner;
959                 if (owner && owner->vdev->vfl_type == VFL_TYPE_RADIO)
960                         f.type = V4L2_TUNER_RADIO;
961                 else
962                         f.type = V4L2_TUNER_ANALOG_TV;
963                 v4l2_device_call_all(&v4l2->v4l2_dev,
964                                      0, tuner, s_frequency, &f);
965         }
966
967         v4l2->streaming_users++;
968
969         return rc;
970 }
971
972 static void em28xx_stop_streaming(struct vb2_queue *vq)
973 {
974         struct em28xx *dev = vb2_get_drv_priv(vq);
975         struct em28xx_v4l2 *v4l2 = dev->v4l2;
976         struct em28xx_dmaqueue *vidq = &dev->vidq;
977         unsigned long flags = 0;
978
979         em28xx_videodbg("%s\n", __func__);
980
981         res_free(dev, vq->type);
982
983         if (v4l2->streaming_users-- == 1) {
984                 /* Last active user, so shutdown all the URBS */
985                 em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);
986         }
987
988         spin_lock_irqsave(&dev->slock, flags);
989         if (dev->usb_ctl.vid_buf != NULL) {
990                 vb2_buffer_done(&dev->usb_ctl.vid_buf->vb.vb2_buf,
991                                 VB2_BUF_STATE_ERROR);
992                 dev->usb_ctl.vid_buf = NULL;
993         }
994         while (!list_empty(&vidq->active)) {
995                 struct em28xx_buffer *buf;
996
997                 buf = list_entry(vidq->active.next, struct em28xx_buffer, list);
998                 list_del(&buf->list);
999                 vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
1000         }
1001         spin_unlock_irqrestore(&dev->slock, flags);
1002 }
1003
1004 void em28xx_stop_vbi_streaming(struct vb2_queue *vq)
1005 {
1006         struct em28xx *dev = vb2_get_drv_priv(vq);
1007         struct em28xx_v4l2 *v4l2 = dev->v4l2;
1008         struct em28xx_dmaqueue *vbiq = &dev->vbiq;
1009         unsigned long flags = 0;
1010
1011         em28xx_videodbg("%s\n", __func__);
1012
1013         res_free(dev, vq->type);
1014
1015         if (v4l2->streaming_users-- == 1) {
1016                 /* Last active user, so shutdown all the URBS */
1017                 em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);
1018         }
1019
1020         spin_lock_irqsave(&dev->slock, flags);
1021         if (dev->usb_ctl.vbi_buf != NULL) {
1022                 vb2_buffer_done(&dev->usb_ctl.vbi_buf->vb.vb2_buf,
1023                                 VB2_BUF_STATE_ERROR);
1024                 dev->usb_ctl.vbi_buf = NULL;
1025         }
1026         while (!list_empty(&vbiq->active)) {
1027                 struct em28xx_buffer *buf;
1028
1029                 buf = list_entry(vbiq->active.next, struct em28xx_buffer, list);
1030                 list_del(&buf->list);
1031                 vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
1032         }
1033         spin_unlock_irqrestore(&dev->slock, flags);
1034 }
1035
1036 static void
1037 buffer_queue(struct vb2_buffer *vb)
1038 {
1039         struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
1040         struct em28xx *dev = vb2_get_drv_priv(vb->vb2_queue);
1041         struct em28xx_buffer *buf =
1042                 container_of(vbuf, struct em28xx_buffer, vb);
1043         struct em28xx_dmaqueue *vidq = &dev->vidq;
1044         unsigned long flags = 0;
1045
1046         em28xx_videodbg("%s\n", __func__);
1047         buf->mem = vb2_plane_vaddr(vb, 0);
1048         buf->length = vb2_plane_size(vb, 0);
1049
1050         spin_lock_irqsave(&dev->slock, flags);
1051         list_add_tail(&buf->list, &vidq->active);
1052         spin_unlock_irqrestore(&dev->slock, flags);
1053 }
1054
1055 static struct vb2_ops em28xx_video_qops = {
1056         .queue_setup    = queue_setup,
1057         .buf_prepare    = buffer_prepare,
1058         .buf_queue      = buffer_queue,
1059         .start_streaming = em28xx_start_analog_streaming,
1060         .stop_streaming = em28xx_stop_streaming,
1061         .wait_prepare   = vb2_ops_wait_prepare,
1062         .wait_finish    = vb2_ops_wait_finish,
1063 };
1064
1065 static int em28xx_vb2_setup(struct em28xx *dev)
1066 {
1067         int rc;
1068         struct vb2_queue *q;
1069         struct em28xx_v4l2 *v4l2 = dev->v4l2;
1070
1071         /* Setup Videobuf2 for Video capture */
1072         q = &v4l2->vb_vidq;
1073         q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1074         q->io_modes = VB2_READ | VB2_MMAP | VB2_USERPTR | VB2_DMABUF;
1075         q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1076         q->drv_priv = dev;
1077         q->buf_struct_size = sizeof(struct em28xx_buffer);
1078         q->ops = &em28xx_video_qops;
1079         q->mem_ops = &vb2_vmalloc_memops;
1080
1081         rc = vb2_queue_init(q);
1082         if (rc < 0)
1083                 return rc;
1084
1085         /* Setup Videobuf2 for VBI capture */
1086         q = &v4l2->vb_vbiq;
1087         q->type = V4L2_BUF_TYPE_VBI_CAPTURE;
1088         q->io_modes = VB2_READ | VB2_MMAP | VB2_USERPTR;
1089         q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1090         q->drv_priv = dev;
1091         q->buf_struct_size = sizeof(struct em28xx_buffer);
1092         q->ops = &em28xx_vbi_qops;
1093         q->mem_ops = &vb2_vmalloc_memops;
1094
1095         rc = vb2_queue_init(q);
1096         if (rc < 0)
1097                 return rc;
1098
1099         return 0;
1100 }
1101
1102 /*********************  v4l2 interface  **************************************/
1103
1104 static void video_mux(struct em28xx *dev, int index)
1105 {
1106         struct v4l2_device *v4l2_dev = &dev->v4l2->v4l2_dev;
1107
1108         dev->ctl_input = index;
1109         dev->ctl_ainput = INPUT(index)->amux;
1110         dev->ctl_aoutput = INPUT(index)->aout;
1111
1112         if (!dev->ctl_aoutput)
1113                 dev->ctl_aoutput = EM28XX_AOUT_MASTER;
1114
1115         v4l2_device_call_all(v4l2_dev, 0, video, s_routing,
1116                              INPUT(index)->vmux, 0, 0);
1117
1118         if (dev->board.has_msp34xx) {
1119                 if (dev->i2s_speed) {
1120                         v4l2_device_call_all(v4l2_dev, 0, audio,
1121                                              s_i2s_clock_freq, dev->i2s_speed);
1122                 }
1123                 /* Note: this is msp3400 specific */
1124                 v4l2_device_call_all(v4l2_dev, 0, audio, s_routing,
1125                                      dev->ctl_ainput,
1126                                      MSP_OUTPUT(MSP_SC_IN_DSP_SCART1), 0);
1127         }
1128
1129         if (dev->board.adecoder != EM28XX_NOADECODER) {
1130                 v4l2_device_call_all(v4l2_dev, 0, audio, s_routing,
1131                                      dev->ctl_ainput, dev->ctl_aoutput, 0);
1132         }
1133
1134         em28xx_audio_analog_set(dev);
1135 }
1136
1137 static void em28xx_ctrl_notify(struct v4l2_ctrl *ctrl, void *priv)
1138 {
1139         struct em28xx *dev = priv;
1140
1141         /*
1142          * In the case of non-AC97 volume controls, we still need
1143          * to do some setups at em28xx, in order to mute/unmute
1144          * and to adjust audio volume. However, the value ranges
1145          * should be checked by the corresponding V4L subdriver.
1146          */
1147         switch (ctrl->id) {
1148         case V4L2_CID_AUDIO_MUTE:
1149                 dev->mute = ctrl->val;
1150                 em28xx_audio_analog_set(dev);
1151                 break;
1152         case V4L2_CID_AUDIO_VOLUME:
1153                 dev->volume = ctrl->val;
1154                 em28xx_audio_analog_set(dev);
1155                 break;
1156         }
1157 }
1158
1159 static int em28xx_s_ctrl(struct v4l2_ctrl *ctrl)
1160 {
1161         struct em28xx_v4l2 *v4l2 =
1162                   container_of(ctrl->handler, struct em28xx_v4l2, ctrl_handler);
1163         struct em28xx *dev = v4l2->dev;
1164         int ret = -EINVAL;
1165
1166         switch (ctrl->id) {
1167         case V4L2_CID_AUDIO_MUTE:
1168                 dev->mute = ctrl->val;
1169                 ret = em28xx_audio_analog_set(dev);
1170                 break;
1171         case V4L2_CID_AUDIO_VOLUME:
1172                 dev->volume = ctrl->val;
1173                 ret = em28xx_audio_analog_set(dev);
1174                 break;
1175         case V4L2_CID_CONTRAST:
1176                 ret = em28xx_write_reg(dev, EM28XX_R20_YGAIN, ctrl->val);
1177                 break;
1178         case V4L2_CID_BRIGHTNESS:
1179                 ret = em28xx_write_reg(dev, EM28XX_R21_YOFFSET, ctrl->val);
1180                 break;
1181         case V4L2_CID_SATURATION:
1182                 ret = em28xx_write_reg(dev, EM28XX_R22_UVGAIN, ctrl->val);
1183                 break;
1184         case V4L2_CID_BLUE_BALANCE:
1185                 ret = em28xx_write_reg(dev, EM28XX_R23_UOFFSET, ctrl->val);
1186                 break;
1187         case V4L2_CID_RED_BALANCE:
1188                 ret = em28xx_write_reg(dev, EM28XX_R24_VOFFSET, ctrl->val);
1189                 break;
1190         case V4L2_CID_SHARPNESS:
1191                 ret = em28xx_write_reg(dev, EM28XX_R25_SHARPNESS, ctrl->val);
1192                 break;
1193         }
1194
1195         return (ret < 0) ? ret : 0;
1196 }
1197
1198 static const struct v4l2_ctrl_ops em28xx_ctrl_ops = {
1199         .s_ctrl = em28xx_s_ctrl,
1200 };
1201
1202 static void size_to_scale(struct em28xx *dev,
1203                           unsigned int width, unsigned int height,
1204                         unsigned int *hscale, unsigned int *vscale)
1205 {
1206         unsigned int          maxw = norm_maxw(dev);
1207         unsigned int          maxh = norm_maxh(dev);
1208
1209         *hscale = (((unsigned long)maxw) << 12) / width - 4096L;
1210         if (*hscale > EM28XX_HVSCALE_MAX)
1211                 *hscale = EM28XX_HVSCALE_MAX;
1212
1213         *vscale = (((unsigned long)maxh) << 12) / height - 4096L;
1214         if (*vscale > EM28XX_HVSCALE_MAX)
1215                 *vscale = EM28XX_HVSCALE_MAX;
1216 }
1217
1218 static void scale_to_size(struct em28xx *dev,
1219                           unsigned int hscale, unsigned int vscale,
1220                           unsigned int *width, unsigned int *height)
1221 {
1222         unsigned int          maxw = norm_maxw(dev);
1223         unsigned int          maxh = norm_maxh(dev);
1224
1225         *width = (((unsigned long)maxw) << 12) / (hscale + 4096L);
1226         *height = (((unsigned long)maxh) << 12) / (vscale + 4096L);
1227 }
1228
1229 /* ------------------------------------------------------------------
1230         IOCTL vidioc handling
1231    ------------------------------------------------------------------*/
1232
1233 static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
1234                                 struct v4l2_format *f)
1235 {
1236         struct em28xx         *dev = video_drvdata(file);
1237         struct em28xx_v4l2    *v4l2 = dev->v4l2;
1238
1239         f->fmt.pix.width = v4l2->width;
1240         f->fmt.pix.height = v4l2->height;
1241         f->fmt.pix.pixelformat = v4l2->format->fourcc;
1242         f->fmt.pix.bytesperline = (v4l2->width * v4l2->format->depth + 7) >> 3;
1243         f->fmt.pix.sizeimage = f->fmt.pix.bytesperline * v4l2->height;
1244         f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
1245
1246         /* FIXME: TOP? NONE? BOTTOM? ALTENATE? */
1247         if (v4l2->progressive)
1248                 f->fmt.pix.field = V4L2_FIELD_NONE;
1249         else
1250                 f->fmt.pix.field = v4l2->interlaced_fieldmode ?
1251                            V4L2_FIELD_INTERLACED : V4L2_FIELD_TOP;
1252         return 0;
1253 }
1254
1255 static struct em28xx_fmt *format_by_fourcc(unsigned int fourcc)
1256 {
1257         unsigned int i;
1258
1259         for (i = 0; i < ARRAY_SIZE(format); i++)
1260                 if (format[i].fourcc == fourcc)
1261                         return &format[i];
1262
1263         return NULL;
1264 }
1265
1266 static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
1267                                   struct v4l2_format *f)
1268 {
1269         struct em28xx         *dev   = video_drvdata(file);
1270         struct em28xx_v4l2    *v4l2  = dev->v4l2;
1271         unsigned int          width  = f->fmt.pix.width;
1272         unsigned int          height = f->fmt.pix.height;
1273         unsigned int          maxw   = norm_maxw(dev);
1274         unsigned int          maxh   = norm_maxh(dev);
1275         unsigned int          hscale, vscale;
1276         struct em28xx_fmt     *fmt;
1277
1278         fmt = format_by_fourcc(f->fmt.pix.pixelformat);
1279         if (!fmt) {
1280                 em28xx_videodbg("Fourcc format (%08x) invalid.\n",
1281                                 f->fmt.pix.pixelformat);
1282                 return -EINVAL;
1283         }
1284
1285         if (dev->board.is_em2800) {
1286                 /* the em2800 can only scale down to 50% */
1287                 height = height > (3 * maxh / 4) ? maxh : maxh / 2;
1288                 width = width > (3 * maxw / 4) ? maxw : maxw / 2;
1289                 /*
1290                  * MaxPacketSize for em2800 is too small to capture at full
1291                  * resolution use half of maxw as the scaler can only scale
1292                  * to 50%
1293                  */
1294                 if (width == maxw && height == maxh)
1295                         width /= 2;
1296         } else {
1297                 /* width must even because of the YUYV format
1298                    height must be even because of interlacing */
1299                 v4l_bound_align_image(&width, 48, maxw, 1, &height, 32, maxh,
1300                                       1, 0);
1301         }
1302
1303         size_to_scale(dev, width, height, &hscale, &vscale);
1304         scale_to_size(dev, hscale, vscale, &width, &height);
1305
1306         f->fmt.pix.width = width;
1307         f->fmt.pix.height = height;
1308         f->fmt.pix.pixelformat = fmt->fourcc;
1309         f->fmt.pix.bytesperline = (width * fmt->depth + 7) >> 3;
1310         f->fmt.pix.sizeimage = f->fmt.pix.bytesperline * height;
1311         f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
1312         if (v4l2->progressive)
1313                 f->fmt.pix.field = V4L2_FIELD_NONE;
1314         else
1315                 f->fmt.pix.field = v4l2->interlaced_fieldmode ?
1316                            V4L2_FIELD_INTERLACED : V4L2_FIELD_TOP;
1317         f->fmt.pix.priv = 0;
1318
1319         return 0;
1320 }
1321
1322 static int em28xx_set_video_format(struct em28xx *dev, unsigned int fourcc,
1323                                    unsigned width, unsigned height)
1324 {
1325         struct em28xx_fmt     *fmt;
1326         struct em28xx_v4l2    *v4l2 = dev->v4l2;
1327
1328         fmt = format_by_fourcc(fourcc);
1329         if (!fmt)
1330                 return -EINVAL;
1331
1332         v4l2->format = fmt;
1333         v4l2->width  = width;
1334         v4l2->height = height;
1335
1336         /* set new image size */
1337         size_to_scale(dev, v4l2->width, v4l2->height,
1338                       &v4l2->hscale, &v4l2->vscale);
1339
1340         em28xx_resolution_set(dev);
1341
1342         return 0;
1343 }
1344
1345 static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
1346                                 struct v4l2_format *f)
1347 {
1348         struct em28xx *dev = video_drvdata(file);
1349         struct em28xx_v4l2 *v4l2 = dev->v4l2;
1350
1351         if (vb2_is_busy(&v4l2->vb_vidq))
1352                 return -EBUSY;
1353
1354         vidioc_try_fmt_vid_cap(file, priv, f);
1355
1356         return em28xx_set_video_format(dev, f->fmt.pix.pixelformat,
1357                                 f->fmt.pix.width, f->fmt.pix.height);
1358 }
1359
1360 static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *norm)
1361 {
1362         struct em28xx *dev = video_drvdata(file);
1363
1364         *norm = dev->v4l2->norm;
1365
1366         return 0;
1367 }
1368
1369 static int vidioc_querystd(struct file *file, void *priv, v4l2_std_id *norm)
1370 {
1371         struct em28xx *dev = video_drvdata(file);
1372
1373         v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, video, querystd, norm);
1374
1375         return 0;
1376 }
1377
1378 static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm)
1379 {
1380         struct em28xx      *dev  = video_drvdata(file);
1381         struct em28xx_v4l2 *v4l2 = dev->v4l2;
1382         struct v4l2_format f;
1383
1384         if (norm == v4l2->norm)
1385                 return 0;
1386
1387         if (v4l2->streaming_users > 0)
1388                 return -EBUSY;
1389
1390         v4l2->norm = norm;
1391
1392         /* Adjusts width/height, if needed */
1393         f.fmt.pix.width = 720;
1394         f.fmt.pix.height = (norm & V4L2_STD_525_60) ? 480 : 576;
1395         vidioc_try_fmt_vid_cap(file, priv, &f);
1396
1397         /* set new image size */
1398         v4l2->width = f.fmt.pix.width;
1399         v4l2->height = f.fmt.pix.height;
1400         size_to_scale(dev, v4l2->width, v4l2->height,
1401                       &v4l2->hscale, &v4l2->vscale);
1402
1403         em28xx_resolution_set(dev);
1404         v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_std, v4l2->norm);
1405
1406         return 0;
1407 }
1408
1409 static int vidioc_g_parm(struct file *file, void *priv,
1410                          struct v4l2_streamparm *p)
1411 {
1412         struct em28xx      *dev  = video_drvdata(file);
1413         struct em28xx_v4l2 *v4l2 = dev->v4l2;
1414         int rc = 0;
1415
1416         p->parm.capture.readbuffers = EM28XX_MIN_BUF;
1417         if (dev->board.is_webcam)
1418                 rc = v4l2_device_call_until_err(&v4l2->v4l2_dev, 0,
1419                                                 video, g_parm, p);
1420         else
1421                 v4l2_video_std_frame_period(v4l2->norm,
1422                                             &p->parm.capture.timeperframe);
1423
1424         return rc;
1425 }
1426
1427 static int vidioc_s_parm(struct file *file, void *priv,
1428                          struct v4l2_streamparm *p)
1429 {
1430         struct em28xx *dev = video_drvdata(file);
1431
1432         p->parm.capture.readbuffers = EM28XX_MIN_BUF;
1433         return v4l2_device_call_until_err(&dev->v4l2->v4l2_dev,
1434                                           0, video, s_parm, p);
1435 }
1436
1437 static const char *iname[] = {
1438         [EM28XX_VMUX_COMPOSITE1] = "Composite1",
1439         [EM28XX_VMUX_COMPOSITE2] = "Composite2",
1440         [EM28XX_VMUX_COMPOSITE3] = "Composite3",
1441         [EM28XX_VMUX_COMPOSITE4] = "Composite4",
1442         [EM28XX_VMUX_SVIDEO]     = "S-Video",
1443         [EM28XX_VMUX_TELEVISION] = "Television",
1444         [EM28XX_VMUX_CABLE]      = "Cable TV",
1445         [EM28XX_VMUX_DVB]        = "DVB",
1446         [EM28XX_VMUX_DEBUG]      = "for debug only",
1447 };
1448
1449 static int vidioc_enum_input(struct file *file, void *priv,
1450                              struct v4l2_input *i)
1451 {
1452         struct em28xx *dev = video_drvdata(file);
1453         unsigned int       n;
1454
1455         n = i->index;
1456         if (n >= MAX_EM28XX_INPUT)
1457                 return -EINVAL;
1458         if (0 == INPUT(n)->type)
1459                 return -EINVAL;
1460
1461         i->index = n;
1462         i->type = V4L2_INPUT_TYPE_CAMERA;
1463
1464         strcpy(i->name, iname[INPUT(n)->type]);
1465
1466         if ((EM28XX_VMUX_TELEVISION == INPUT(n)->type) ||
1467             (EM28XX_VMUX_CABLE == INPUT(n)->type))
1468                 i->type = V4L2_INPUT_TYPE_TUNER;
1469
1470         i->std = dev->v4l2->vdev.tvnorms;
1471         /* webcams do not have the STD API */
1472         if (dev->board.is_webcam)
1473                 i->capabilities = 0;
1474
1475         return 0;
1476 }
1477
1478 static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
1479 {
1480         struct em28xx *dev = video_drvdata(file);
1481
1482         *i = dev->ctl_input;
1483
1484         return 0;
1485 }
1486
1487 static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
1488 {
1489         struct em28xx *dev = video_drvdata(file);
1490
1491         if (i >= MAX_EM28XX_INPUT)
1492                 return -EINVAL;
1493         if (0 == INPUT(i)->type)
1494                 return -EINVAL;
1495
1496         video_mux(dev, i);
1497         return 0;
1498 }
1499
1500 static int vidioc_g_audio(struct file *file, void *priv, struct v4l2_audio *a)
1501 {
1502         struct em28xx *dev = video_drvdata(file);
1503
1504         switch (a->index) {
1505         case EM28XX_AMUX_VIDEO:
1506                 strcpy(a->name, "Television");
1507                 break;
1508         case EM28XX_AMUX_LINE_IN:
1509                 strcpy(a->name, "Line In");
1510                 break;
1511         case EM28XX_AMUX_VIDEO2:
1512                 strcpy(a->name, "Television alt");
1513                 break;
1514         case EM28XX_AMUX_PHONE:
1515                 strcpy(a->name, "Phone");
1516                 break;
1517         case EM28XX_AMUX_MIC:
1518                 strcpy(a->name, "Mic");
1519                 break;
1520         case EM28XX_AMUX_CD:
1521                 strcpy(a->name, "CD");
1522                 break;
1523         case EM28XX_AMUX_AUX:
1524                 strcpy(a->name, "Aux");
1525                 break;
1526         case EM28XX_AMUX_PCM_OUT:
1527                 strcpy(a->name, "PCM");
1528                 break;
1529         default:
1530                 return -EINVAL;
1531         }
1532
1533         a->index = dev->ctl_ainput;
1534         a->capability = V4L2_AUDCAP_STEREO;
1535
1536         return 0;
1537 }
1538
1539 static int vidioc_s_audio(struct file *file, void *priv, const struct v4l2_audio *a)
1540 {
1541         struct em28xx *dev = video_drvdata(file);
1542
1543         if (a->index >= MAX_EM28XX_INPUT)
1544                 return -EINVAL;
1545         if (0 == INPUT(a->index)->type)
1546                 return -EINVAL;
1547
1548         dev->ctl_ainput = INPUT(a->index)->amux;
1549         dev->ctl_aoutput = INPUT(a->index)->aout;
1550
1551         if (!dev->ctl_aoutput)
1552                 dev->ctl_aoutput = EM28XX_AOUT_MASTER;
1553
1554         return 0;
1555 }
1556
1557 static int vidioc_g_tuner(struct file *file, void *priv,
1558                           struct v4l2_tuner *t)
1559 {
1560         struct em28xx *dev = video_drvdata(file);
1561
1562         if (0 != t->index)
1563                 return -EINVAL;
1564
1565         strcpy(t->name, "Tuner");
1566
1567         v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, g_tuner, t);
1568         return 0;
1569 }
1570
1571 static int vidioc_s_tuner(struct file *file, void *priv,
1572                           const struct v4l2_tuner *t)
1573 {
1574         struct em28xx *dev = video_drvdata(file);
1575
1576         if (0 != t->index)
1577                 return -EINVAL;
1578
1579         v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, s_tuner, t);
1580         return 0;
1581 }
1582
1583 static int vidioc_g_frequency(struct file *file, void *priv,
1584                               struct v4l2_frequency *f)
1585 {
1586         struct em28xx         *dev = video_drvdata(file);
1587         struct em28xx_v4l2    *v4l2 = dev->v4l2;
1588
1589         if (0 != f->tuner)
1590                 return -EINVAL;
1591
1592         f->frequency = v4l2->frequency;
1593         return 0;
1594 }
1595
1596 static int vidioc_s_frequency(struct file *file, void *priv,
1597                               const struct v4l2_frequency *f)
1598 {
1599         struct v4l2_frequency  new_freq = *f;
1600         struct em28xx             *dev  = video_drvdata(file);
1601         struct em28xx_v4l2        *v4l2 = dev->v4l2;
1602
1603         if (0 != f->tuner)
1604                 return -EINVAL;
1605
1606         v4l2_device_call_all(&v4l2->v4l2_dev, 0, tuner, s_frequency, f);
1607         v4l2_device_call_all(&v4l2->v4l2_dev, 0, tuner, g_frequency, &new_freq);
1608         v4l2->frequency = new_freq.frequency;
1609
1610         return 0;
1611 }
1612
1613 #ifdef CONFIG_VIDEO_ADV_DEBUG
1614 static int vidioc_g_chip_info(struct file *file, void *priv,
1615                               struct v4l2_dbg_chip_info *chip)
1616 {
1617         struct em28xx *dev = video_drvdata(file);
1618
1619         if (chip->match.addr > 1)
1620                 return -EINVAL;
1621         if (chip->match.addr == 1)
1622                 strlcpy(chip->name, "ac97", sizeof(chip->name));
1623         else
1624                 strlcpy(chip->name,
1625                         dev->v4l2->v4l2_dev.name, sizeof(chip->name));
1626         return 0;
1627 }
1628
1629 static int em28xx_reg_len(int reg)
1630 {
1631         switch (reg) {
1632         case EM28XX_R40_AC97LSB:
1633         case EM28XX_R30_HSCALELOW:
1634         case EM28XX_R32_VSCALELOW:
1635                 return 2;
1636         default:
1637                 return 1;
1638         }
1639 }
1640
1641 static int vidioc_g_register(struct file *file, void *priv,
1642                              struct v4l2_dbg_register *reg)
1643 {
1644         struct em28xx *dev = video_drvdata(file);
1645         int ret;
1646
1647         if (reg->match.addr > 1)
1648                 return -EINVAL;
1649         if (reg->match.addr) {
1650                 ret = em28xx_read_ac97(dev, reg->reg);
1651                 if (ret < 0)
1652                         return ret;
1653
1654                 reg->val = ret;
1655                 reg->size = 1;
1656                 return 0;
1657         }
1658
1659         /* Match host */
1660         reg->size = em28xx_reg_len(reg->reg);
1661         if (reg->size == 1) {
1662                 ret = em28xx_read_reg(dev, reg->reg);
1663
1664                 if (ret < 0)
1665                         return ret;
1666
1667                 reg->val = ret;
1668         } else {
1669                 __le16 val = 0;
1670
1671                 ret = dev->em28xx_read_reg_req_len(dev, USB_REQ_GET_STATUS,
1672                                                    reg->reg, (char *)&val, 2);
1673                 if (ret < 0)
1674                         return ret;
1675
1676                 reg->val = le16_to_cpu(val);
1677         }
1678
1679         return 0;
1680 }
1681
1682 static int vidioc_s_register(struct file *file, void *priv,
1683                              const struct v4l2_dbg_register *reg)
1684 {
1685         struct em28xx *dev = video_drvdata(file);
1686         __le16 buf;
1687
1688         if (reg->match.addr > 1)
1689                 return -EINVAL;
1690         if (reg->match.addr)
1691                 return em28xx_write_ac97(dev, reg->reg, reg->val);
1692
1693         /* Match host */
1694         buf = cpu_to_le16(reg->val);
1695
1696         return em28xx_write_regs(dev, reg->reg, (char *)&buf,
1697                                em28xx_reg_len(reg->reg));
1698 }
1699 #endif
1700
1701 static int vidioc_querycap(struct file *file, void  *priv,
1702                            struct v4l2_capability *cap)
1703 {
1704         struct video_device   *vdev = video_devdata(file);
1705         struct em28xx         *dev  = video_drvdata(file);
1706         struct em28xx_v4l2    *v4l2 = dev->v4l2;
1707
1708         strlcpy(cap->driver, "em28xx", sizeof(cap->driver));
1709         strlcpy(cap->card, em28xx_boards[dev->model].name, sizeof(cap->card));
1710         usb_make_path(dev->udev, cap->bus_info, sizeof(cap->bus_info));
1711
1712         if (vdev->vfl_type == VFL_TYPE_GRABBER)
1713                 cap->device_caps = V4L2_CAP_READWRITE |
1714                         V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
1715         else if (vdev->vfl_type == VFL_TYPE_RADIO)
1716                 cap->device_caps = V4L2_CAP_RADIO;
1717         else
1718                 cap->device_caps = V4L2_CAP_READWRITE | V4L2_CAP_VBI_CAPTURE;
1719
1720         if (dev->int_audio_type != EM28XX_INT_AUDIO_NONE)
1721                 cap->device_caps |= V4L2_CAP_AUDIO;
1722
1723         if (dev->tuner_type != TUNER_ABSENT)
1724                 cap->device_caps |= V4L2_CAP_TUNER;
1725
1726         cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS |
1727                 V4L2_CAP_READWRITE | V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
1728         if (video_is_registered(&v4l2->vbi_dev))
1729                 cap->capabilities |= V4L2_CAP_VBI_CAPTURE;
1730         if (video_is_registered(&v4l2->radio_dev))
1731                 cap->capabilities |= V4L2_CAP_RADIO;
1732         return 0;
1733 }
1734
1735 static int vidioc_enum_fmt_vid_cap(struct file *file, void  *priv,
1736                                    struct v4l2_fmtdesc *f)
1737 {
1738         if (unlikely(f->index >= ARRAY_SIZE(format)))
1739                 return -EINVAL;
1740
1741         strlcpy(f->description, format[f->index].name, sizeof(f->description));
1742         f->pixelformat = format[f->index].fourcc;
1743
1744         return 0;
1745 }
1746
1747 static int vidioc_enum_framesizes(struct file *file, void *priv,
1748                                   struct v4l2_frmsizeenum *fsize)
1749 {
1750         struct em28xx         *dev = video_drvdata(file);
1751         struct em28xx_fmt     *fmt;
1752         unsigned int          maxw = norm_maxw(dev);
1753         unsigned int          maxh = norm_maxh(dev);
1754
1755         fmt = format_by_fourcc(fsize->pixel_format);
1756         if (!fmt) {
1757                 em28xx_videodbg("Fourcc format (%08x) invalid.\n",
1758                                 fsize->pixel_format);
1759                 return -EINVAL;
1760         }
1761
1762         if (dev->board.is_em2800) {
1763                 if (fsize->index > 1)
1764                         return -EINVAL;
1765                 fsize->type = V4L2_FRMSIZE_TYPE_DISCRETE;
1766                 fsize->discrete.width = maxw / (1 + fsize->index);
1767                 fsize->discrete.height = maxh / (1 + fsize->index);
1768                 return 0;
1769         }
1770
1771         if (fsize->index != 0)
1772                 return -EINVAL;
1773
1774         /* Report a continuous range */
1775         fsize->type = V4L2_FRMSIZE_TYPE_STEPWISE;
1776         scale_to_size(dev, EM28XX_HVSCALE_MAX, EM28XX_HVSCALE_MAX,
1777                       &fsize->stepwise.min_width, &fsize->stepwise.min_height);
1778         if (fsize->stepwise.min_width < 48)
1779                 fsize->stepwise.min_width = 48;
1780         if (fsize->stepwise.min_height < 38)
1781                 fsize->stepwise.min_height = 38;
1782         fsize->stepwise.max_width = maxw;
1783         fsize->stepwise.max_height = maxh;
1784         fsize->stepwise.step_width = 1;
1785         fsize->stepwise.step_height = 1;
1786         return 0;
1787 }
1788
1789 /* RAW VBI ioctls */
1790
1791 static int vidioc_g_fmt_vbi_cap(struct file *file, void *priv,
1792                                 struct v4l2_format *format)
1793 {
1794         struct em28xx         *dev  = video_drvdata(file);
1795         struct em28xx_v4l2    *v4l2 = dev->v4l2;
1796
1797         format->fmt.vbi.samples_per_line = v4l2->vbi_width;
1798         format->fmt.vbi.sample_format = V4L2_PIX_FMT_GREY;
1799         format->fmt.vbi.offset = 0;
1800         format->fmt.vbi.flags = 0;
1801         format->fmt.vbi.sampling_rate = 6750000 * 4 / 2;
1802         format->fmt.vbi.count[0] = v4l2->vbi_height;
1803         format->fmt.vbi.count[1] = v4l2->vbi_height;
1804         memset(format->fmt.vbi.reserved, 0, sizeof(format->fmt.vbi.reserved));
1805
1806         /* Varies by video standard (NTSC, PAL, etc.) */
1807         if (v4l2->norm & V4L2_STD_525_60) {
1808                 /* NTSC */
1809                 format->fmt.vbi.start[0] = 10;
1810                 format->fmt.vbi.start[1] = 273;
1811         } else if (v4l2->norm & V4L2_STD_625_50) {
1812                 /* PAL */
1813                 format->fmt.vbi.start[0] = 6;
1814                 format->fmt.vbi.start[1] = 318;
1815         }
1816
1817         return 0;
1818 }
1819
1820 /* ----------------------------------------------------------- */
1821 /* RADIO ESPECIFIC IOCTLS                                      */
1822 /* ----------------------------------------------------------- */
1823
1824 static int radio_g_tuner(struct file *file, void *priv,
1825                          struct v4l2_tuner *t)
1826 {
1827         struct em28xx *dev = video_drvdata(file);
1828
1829         if (unlikely(t->index > 0))
1830                 return -EINVAL;
1831
1832         strcpy(t->name, "Radio");
1833
1834         v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, g_tuner, t);
1835
1836         return 0;
1837 }
1838
1839 static int radio_s_tuner(struct file *file, void *priv,
1840                          const struct v4l2_tuner *t)
1841 {
1842         struct em28xx *dev = video_drvdata(file);
1843
1844         if (0 != t->index)
1845                 return -EINVAL;
1846
1847         v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, s_tuner, t);
1848
1849         return 0;
1850 }
1851
1852 /*
1853  * em28xx_free_v4l2() - Free struct em28xx_v4l2
1854  *
1855  * @ref: struct kref for struct em28xx_v4l2
1856  *
1857  * Called when all users of struct em28xx_v4l2 are gone
1858  */
1859 static void em28xx_free_v4l2(struct kref *ref)
1860 {
1861         struct em28xx_v4l2 *v4l2 = container_of(ref, struct em28xx_v4l2, ref);
1862
1863         v4l2->dev->v4l2 = NULL;
1864         kfree(v4l2);
1865 }
1866
1867 /*
1868  * em28xx_v4l2_open()
1869  * inits the device and starts isoc transfer
1870  */
1871 static int em28xx_v4l2_open(struct file *filp)
1872 {
1873         struct video_device *vdev = video_devdata(filp);
1874         struct em28xx *dev = video_drvdata(filp);
1875         struct em28xx_v4l2 *v4l2 = dev->v4l2;
1876         enum v4l2_buf_type fh_type = 0;
1877         int ret;
1878
1879         switch (vdev->vfl_type) {
1880         case VFL_TYPE_GRABBER:
1881                 fh_type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1882                 break;
1883         case VFL_TYPE_VBI:
1884                 fh_type = V4L2_BUF_TYPE_VBI_CAPTURE;
1885                 break;
1886         case VFL_TYPE_RADIO:
1887                 break;
1888         default:
1889                 return -EINVAL;
1890         }
1891
1892         em28xx_videodbg("open dev=%s type=%s users=%d\n",
1893                         video_device_node_name(vdev), v4l2_type_names[fh_type],
1894                         v4l2->users);
1895
1896         if (mutex_lock_interruptible(&dev->lock))
1897                 return -ERESTARTSYS;
1898
1899         ret = v4l2_fh_open(filp);
1900         if (ret) {
1901                 em28xx_errdev("%s: v4l2_fh_open() returned error %d\n",
1902                               __func__, ret);
1903                 mutex_unlock(&dev->lock);
1904                 return ret;
1905         }
1906
1907         if (v4l2->users == 0) {
1908                 em28xx_set_mode(dev, EM28XX_ANALOG_MODE);
1909
1910                 if (vdev->vfl_type != VFL_TYPE_RADIO)
1911                         em28xx_resolution_set(dev);
1912
1913                 /*
1914                  * Needed, since GPIO might have disabled power
1915                  * of some i2c devices
1916                  */
1917                 em28xx_wake_i2c(dev);
1918         }
1919
1920         if (vdev->vfl_type == VFL_TYPE_RADIO) {
1921                 em28xx_videodbg("video_open: setting radio device\n");
1922                 v4l2_device_call_all(&v4l2->v4l2_dev, 0, tuner, s_radio);
1923         }
1924
1925         kref_get(&dev->ref);
1926         kref_get(&v4l2->ref);
1927         v4l2->users++;
1928
1929         mutex_unlock(&dev->lock);
1930
1931         return 0;
1932 }
1933
1934 /*
1935  * em28xx_v4l2_fini()
1936  * unregisters the v4l2,i2c and usb devices
1937  * called when the device gets disconected or at module unload
1938 */
1939 static int em28xx_v4l2_fini(struct em28xx *dev)
1940 {
1941         struct em28xx_v4l2 *v4l2 = dev->v4l2;
1942
1943         if (dev->is_audio_only) {
1944                 /* Shouldn't initialize IR for this interface */
1945                 return 0;
1946         }
1947
1948         if (!dev->has_video) {
1949                 /* This device does not support the v4l2 extension */
1950                 return 0;
1951         }
1952
1953         if (v4l2 == NULL)
1954                 return 0;
1955
1956         em28xx_info("Closing video extension\n");
1957
1958         mutex_lock(&dev->lock);
1959
1960         v4l2_device_disconnect(&v4l2->v4l2_dev);
1961
1962         em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);
1963
1964         if (video_is_registered(&v4l2->radio_dev)) {
1965                 em28xx_info("V4L2 device %s deregistered\n",
1966                             video_device_node_name(&v4l2->radio_dev));
1967                 video_unregister_device(&v4l2->radio_dev);
1968         }
1969         if (video_is_registered(&v4l2->vbi_dev)) {
1970                 em28xx_info("V4L2 device %s deregistered\n",
1971                             video_device_node_name(&v4l2->vbi_dev));
1972                 video_unregister_device(&v4l2->vbi_dev);
1973         }
1974         if (video_is_registered(&v4l2->vdev)) {
1975                 em28xx_info("V4L2 device %s deregistered\n",
1976                             video_device_node_name(&v4l2->vdev));
1977                 video_unregister_device(&v4l2->vdev);
1978         }
1979
1980         v4l2_ctrl_handler_free(&v4l2->ctrl_handler);
1981         v4l2_device_unregister(&v4l2->v4l2_dev);
1982
1983         if (v4l2->clk) {
1984                 v4l2_clk_unregister_fixed(v4l2->clk);
1985                 v4l2->clk = NULL;
1986         }
1987
1988         kref_put(&v4l2->ref, em28xx_free_v4l2);
1989
1990         mutex_unlock(&dev->lock);
1991
1992         kref_put(&dev->ref, em28xx_free_device);
1993
1994         return 0;
1995 }
1996
1997 static int em28xx_v4l2_suspend(struct em28xx *dev)
1998 {
1999         if (dev->is_audio_only)
2000                 return 0;
2001
2002         if (!dev->has_video)
2003                 return 0;
2004
2005         em28xx_info("Suspending video extension\n");
2006         em28xx_stop_urbs(dev);
2007         return 0;
2008 }
2009
2010 static int em28xx_v4l2_resume(struct em28xx *dev)
2011 {
2012         if (dev->is_audio_only)
2013                 return 0;
2014
2015         if (!dev->has_video)
2016                 return 0;
2017
2018         em28xx_info("Resuming video extension\n");
2019         /* what do we do here */
2020         return 0;
2021 }
2022
2023 /*
2024  * em28xx_v4l2_close()
2025  * stops streaming and deallocates all resources allocated by the v4l2
2026  * calls and ioctls
2027  */
2028 static int em28xx_v4l2_close(struct file *filp)
2029 {
2030         struct em28xx         *dev  = video_drvdata(filp);
2031         struct em28xx_v4l2    *v4l2 = dev->v4l2;
2032         int              errCode;
2033
2034         em28xx_videodbg("users=%d\n", v4l2->users);
2035
2036         vb2_fop_release(filp);
2037         mutex_lock(&dev->lock);
2038
2039         if (v4l2->users == 1) {
2040                 /* No sense to try to write to the device */
2041                 if (dev->disconnected)
2042                         goto exit;
2043
2044                 /* Save some power by putting tuner to sleep */
2045                 v4l2_device_call_all(&v4l2->v4l2_dev, 0, core, s_power, 0);
2046
2047                 /* do this before setting alternate! */
2048                 em28xx_set_mode(dev, EM28XX_SUSPEND);
2049
2050                 /* set alternate 0 */
2051                 dev->alt = 0;
2052                 em28xx_videodbg("setting alternate 0\n");
2053                 errCode = usb_set_interface(dev->udev, 0, 0);
2054                 if (errCode < 0) {
2055                         em28xx_errdev("cannot change alternate number to "
2056                                         "0 (error=%i)\n", errCode);
2057                 }
2058         }
2059
2060 exit:
2061         v4l2->users--;
2062         kref_put(&v4l2->ref, em28xx_free_v4l2);
2063         mutex_unlock(&dev->lock);
2064         kref_put(&dev->ref, em28xx_free_device);
2065
2066         return 0;
2067 }
2068
2069 static const struct v4l2_file_operations em28xx_v4l_fops = {
2070         .owner         = THIS_MODULE,
2071         .open          = em28xx_v4l2_open,
2072         .release       = em28xx_v4l2_close,
2073         .read          = vb2_fop_read,
2074         .poll          = vb2_fop_poll,
2075         .mmap          = vb2_fop_mmap,
2076         .unlocked_ioctl = video_ioctl2,
2077 };
2078
2079 static const struct v4l2_ioctl_ops video_ioctl_ops = {
2080         .vidioc_querycap            = vidioc_querycap,
2081         .vidioc_enum_fmt_vid_cap    = vidioc_enum_fmt_vid_cap,
2082         .vidioc_g_fmt_vid_cap       = vidioc_g_fmt_vid_cap,
2083         .vidioc_try_fmt_vid_cap     = vidioc_try_fmt_vid_cap,
2084         .vidioc_s_fmt_vid_cap       = vidioc_s_fmt_vid_cap,
2085         .vidioc_g_fmt_vbi_cap       = vidioc_g_fmt_vbi_cap,
2086         .vidioc_try_fmt_vbi_cap     = vidioc_g_fmt_vbi_cap,
2087         .vidioc_s_fmt_vbi_cap       = vidioc_g_fmt_vbi_cap,
2088         .vidioc_enum_framesizes     = vidioc_enum_framesizes,
2089         .vidioc_g_audio             = vidioc_g_audio,
2090         .vidioc_s_audio             = vidioc_s_audio,
2091
2092         .vidioc_reqbufs             = vb2_ioctl_reqbufs,
2093         .vidioc_create_bufs         = vb2_ioctl_create_bufs,
2094         .vidioc_prepare_buf         = vb2_ioctl_prepare_buf,
2095         .vidioc_querybuf            = vb2_ioctl_querybuf,
2096         .vidioc_qbuf                = vb2_ioctl_qbuf,
2097         .vidioc_dqbuf               = vb2_ioctl_dqbuf,
2098
2099         .vidioc_g_std               = vidioc_g_std,
2100         .vidioc_querystd            = vidioc_querystd,
2101         .vidioc_s_std               = vidioc_s_std,
2102         .vidioc_g_parm              = vidioc_g_parm,
2103         .vidioc_s_parm              = vidioc_s_parm,
2104         .vidioc_enum_input          = vidioc_enum_input,
2105         .vidioc_g_input             = vidioc_g_input,
2106         .vidioc_s_input             = vidioc_s_input,
2107         .vidioc_streamon            = vb2_ioctl_streamon,
2108         .vidioc_streamoff           = vb2_ioctl_streamoff,
2109         .vidioc_g_tuner             = vidioc_g_tuner,
2110         .vidioc_s_tuner             = vidioc_s_tuner,
2111         .vidioc_g_frequency         = vidioc_g_frequency,
2112         .vidioc_s_frequency         = vidioc_s_frequency,
2113         .vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
2114         .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
2115 #ifdef CONFIG_VIDEO_ADV_DEBUG
2116         .vidioc_g_chip_info         = vidioc_g_chip_info,
2117         .vidioc_g_register          = vidioc_g_register,
2118         .vidioc_s_register          = vidioc_s_register,
2119 #endif
2120 };
2121
2122 static const struct video_device em28xx_video_template = {
2123         .fops           = &em28xx_v4l_fops,
2124         .ioctl_ops      = &video_ioctl_ops,
2125         .release        = video_device_release_empty,
2126         .tvnorms        = V4L2_STD_ALL,
2127 };
2128
2129 static const struct v4l2_file_operations radio_fops = {
2130         .owner         = THIS_MODULE,
2131         .open          = em28xx_v4l2_open,
2132         .release       = em28xx_v4l2_close,
2133         .unlocked_ioctl = video_ioctl2,
2134 };
2135
2136 static const struct v4l2_ioctl_ops radio_ioctl_ops = {
2137         .vidioc_querycap      = vidioc_querycap,
2138         .vidioc_g_tuner       = radio_g_tuner,
2139         .vidioc_s_tuner       = radio_s_tuner,
2140         .vidioc_g_frequency   = vidioc_g_frequency,
2141         .vidioc_s_frequency   = vidioc_s_frequency,
2142         .vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
2143         .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
2144 #ifdef CONFIG_VIDEO_ADV_DEBUG
2145         .vidioc_g_chip_info   = vidioc_g_chip_info,
2146         .vidioc_g_register    = vidioc_g_register,
2147         .vidioc_s_register    = vidioc_s_register,
2148 #endif
2149 };
2150
2151 static struct video_device em28xx_radio_template = {
2152         .fops           = &radio_fops,
2153         .ioctl_ops      = &radio_ioctl_ops,
2154         .release        = video_device_release_empty,
2155 };
2156
2157 /* I2C possible address to saa7115, tvp5150, msp3400, tvaudio */
2158 static unsigned short saa711x_addrs[] = {
2159         0x4a >> 1, 0x48 >> 1,   /* SAA7111, SAA7111A and SAA7113 */
2160         0x42 >> 1, 0x40 >> 1,   /* SAA7114, SAA7115 and SAA7118 */
2161         I2C_CLIENT_END };
2162
2163 static unsigned short tvp5150_addrs[] = {
2164         0xb8 >> 1,
2165         0xba >> 1,
2166         I2C_CLIENT_END
2167 };
2168
2169 static unsigned short msp3400_addrs[] = {
2170         0x80 >> 1,
2171         0x88 >> 1,
2172         I2C_CLIENT_END
2173 };
2174
2175 /******************************** usb interface ******************************/
2176
2177 static void em28xx_vdev_init(struct em28xx *dev,
2178                              struct video_device *vfd,
2179                              const struct video_device *template,
2180                              const char *type_name)
2181 {
2182         *vfd            = *template;
2183         vfd->v4l2_dev   = &dev->v4l2->v4l2_dev;
2184         vfd->lock       = &dev->lock;
2185         if (dev->board.is_webcam)
2186                 vfd->tvnorms = 0;
2187
2188         snprintf(vfd->name, sizeof(vfd->name), "%s %s",
2189                  dev->name, type_name);
2190
2191         video_set_drvdata(vfd, dev);
2192 }
2193
2194 static void em28xx_tuner_setup(struct em28xx *dev, unsigned short tuner_addr)
2195 {
2196         struct em28xx_v4l2      *v4l2 = dev->v4l2;
2197         struct v4l2_device      *v4l2_dev = &v4l2->v4l2_dev;
2198         struct tuner_setup      tun_setup;
2199         struct v4l2_frequency   f;
2200
2201         memset(&tun_setup, 0, sizeof(tun_setup));
2202
2203         tun_setup.mode_mask = T_ANALOG_TV | T_RADIO;
2204         tun_setup.tuner_callback = em28xx_tuner_callback;
2205
2206         if (dev->board.radio.type) {
2207                 tun_setup.type = dev->board.radio.type;
2208                 tun_setup.addr = dev->board.radio_addr;
2209
2210                 v4l2_device_call_all(v4l2_dev,
2211                                      0, tuner, s_type_addr, &tun_setup);
2212         }
2213
2214         if ((dev->tuner_type != TUNER_ABSENT) && (dev->tuner_type)) {
2215                 tun_setup.type   = dev->tuner_type;
2216                 tun_setup.addr   = tuner_addr;
2217
2218                 v4l2_device_call_all(v4l2_dev,
2219                                      0, tuner, s_type_addr, &tun_setup);
2220         }
2221
2222         if (dev->board.tda9887_conf) {
2223                 struct v4l2_priv_tun_config tda9887_cfg;
2224
2225                 tda9887_cfg.tuner = TUNER_TDA9887;
2226                 tda9887_cfg.priv = &dev->board.tda9887_conf;
2227
2228                 v4l2_device_call_all(v4l2_dev,
2229                                      0, tuner, s_config, &tda9887_cfg);
2230         }
2231
2232         if (dev->tuner_type == TUNER_XC2028) {
2233                 struct v4l2_priv_tun_config  xc2028_cfg;
2234                 struct xc2028_ctrl           ctl;
2235
2236                 memset(&xc2028_cfg, 0, sizeof(xc2028_cfg));
2237                 memset(&ctl, 0, sizeof(ctl));
2238
2239                 em28xx_setup_xc3028(dev, &ctl);
2240
2241                 xc2028_cfg.tuner = TUNER_XC2028;
2242                 xc2028_cfg.priv  = &ctl;
2243
2244                 v4l2_device_call_all(v4l2_dev, 0, tuner, s_config, &xc2028_cfg);
2245         }
2246
2247         /* configure tuner */
2248         f.tuner = 0;
2249         f.type = V4L2_TUNER_ANALOG_TV;
2250         f.frequency = 9076;     /* just a magic number */
2251         v4l2->frequency = f.frequency;
2252         v4l2_device_call_all(v4l2_dev, 0, tuner, s_frequency, &f);
2253 }
2254
2255 static int em28xx_v4l2_init(struct em28xx *dev)
2256 {
2257         u8 val;
2258         int ret;
2259         unsigned int maxw;
2260         struct v4l2_ctrl_handler *hdl;
2261         struct em28xx_v4l2 *v4l2;
2262
2263         if (dev->is_audio_only) {
2264                 /* Shouldn't initialize IR for this interface */
2265                 return 0;
2266         }
2267
2268         if (!dev->has_video) {
2269                 /* This device does not support the v4l2 extension */
2270                 return 0;
2271         }
2272
2273         em28xx_info("Registering V4L2 extension\n");
2274
2275         mutex_lock(&dev->lock);
2276
2277         v4l2 = kzalloc(sizeof(struct em28xx_v4l2), GFP_KERNEL);
2278         if (v4l2 == NULL) {
2279                 em28xx_info("em28xx_v4l: memory allocation failed\n");
2280                 mutex_unlock(&dev->lock);
2281                 return -ENOMEM;
2282         }
2283         kref_init(&v4l2->ref);
2284         v4l2->dev = dev;
2285         dev->v4l2 = v4l2;
2286
2287         ret = v4l2_device_register(&dev->udev->dev, &v4l2->v4l2_dev);
2288         if (ret < 0) {
2289                 em28xx_errdev("Call to v4l2_device_register() failed!\n");
2290                 goto err;
2291         }
2292
2293         hdl = &v4l2->ctrl_handler;
2294         v4l2_ctrl_handler_init(hdl, 8);
2295         v4l2->v4l2_dev.ctrl_handler = hdl;
2296
2297         if (dev->board.is_webcam)
2298                 v4l2->progressive = true;
2299
2300         /*
2301          * Default format, used for tvp5150 or saa711x output formats
2302          */
2303         v4l2->vinmode = 0x10;
2304         v4l2->vinctl  = EM28XX_VINCTRL_INTERLACED |
2305                         EM28XX_VINCTRL_CCIR656_ENABLE;
2306
2307         /* request some modules */
2308
2309         if (dev->board.has_msp34xx)
2310                 v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2311                                     &dev->i2c_adap[dev->def_i2c_bus],
2312                                     "msp3400", 0, msp3400_addrs);
2313
2314         if (dev->board.decoder == EM28XX_SAA711X)
2315                 v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2316                                     &dev->i2c_adap[dev->def_i2c_bus],
2317                                     "saa7115_auto", 0, saa711x_addrs);
2318
2319         if (dev->board.decoder == EM28XX_TVP5150)
2320                 v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2321                                     &dev->i2c_adap[dev->def_i2c_bus],
2322                                     "tvp5150", 0, tvp5150_addrs);
2323
2324         if (dev->board.adecoder == EM28XX_TVAUDIO)
2325                 v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2326                                     &dev->i2c_adap[dev->def_i2c_bus],
2327                                     "tvaudio", dev->board.tvaudio_addr, NULL);
2328
2329         /* Initialize tuner and camera */
2330
2331         if (dev->board.tuner_type != TUNER_ABSENT) {
2332                 unsigned short tuner_addr = dev->board.tuner_addr;
2333                 int has_demod = (dev->board.tda9887_conf & TDA9887_PRESENT);
2334
2335                 if (dev->board.radio.type)
2336                         v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2337                                             &dev->i2c_adap[dev->def_i2c_bus],
2338                                             "tuner", dev->board.radio_addr,
2339                                             NULL);
2340
2341                 if (has_demod)
2342                         v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2343                                             &dev->i2c_adap[dev->def_i2c_bus],
2344                                             "tuner", 0,
2345                                             v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
2346                 if (tuner_addr == 0) {
2347                         enum v4l2_i2c_tuner_type type =
2348                                 has_demod ? ADDRS_TV_WITH_DEMOD : ADDRS_TV;
2349                         struct v4l2_subdev *sd;
2350
2351                         sd = v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2352                                                  &dev->i2c_adap[dev->def_i2c_bus],
2353                                                  "tuner", 0,
2354                                                  v4l2_i2c_tuner_addrs(type));
2355
2356                         if (sd)
2357                                 tuner_addr = v4l2_i2c_subdev_addr(sd);
2358                 } else {
2359                         v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2360                                             &dev->i2c_adap[dev->def_i2c_bus],
2361                                             "tuner", tuner_addr, NULL);
2362                 }
2363
2364                 em28xx_tuner_setup(dev, tuner_addr);
2365         }
2366
2367         if (dev->em28xx_sensor != EM28XX_NOSENSOR)
2368                 em28xx_init_camera(dev);
2369
2370         /* Configure audio */
2371         ret = em28xx_audio_setup(dev);
2372         if (ret < 0) {
2373                 em28xx_errdev("%s: Error while setting audio - error [%d]!\n",
2374                               __func__, ret);
2375                 goto unregister_dev;
2376         }
2377         if (dev->audio_mode.ac97 != EM28XX_NO_AC97) {
2378                 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2379                                   V4L2_CID_AUDIO_MUTE, 0, 1, 1, 1);
2380                 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2381                                   V4L2_CID_AUDIO_VOLUME, 0, 0x1f, 1, 0x1f);
2382         } else {
2383                 /* install the em28xx notify callback */
2384                 v4l2_ctrl_notify(v4l2_ctrl_find(hdl, V4L2_CID_AUDIO_MUTE),
2385                                  em28xx_ctrl_notify, dev);
2386                 v4l2_ctrl_notify(v4l2_ctrl_find(hdl, V4L2_CID_AUDIO_VOLUME),
2387                                  em28xx_ctrl_notify, dev);
2388         }
2389
2390         /* wake i2c devices */
2391         em28xx_wake_i2c(dev);
2392
2393         /* init video dma queues */
2394         INIT_LIST_HEAD(&dev->vidq.active);
2395         INIT_LIST_HEAD(&dev->vbiq.active);
2396
2397         if (dev->board.has_msp34xx) {
2398                 /* Send a reset to other chips via gpio */
2399                 ret = em28xx_write_reg(dev, EM2820_R08_GPIO_CTRL, 0xf7);
2400                 if (ret < 0) {
2401                         em28xx_errdev("%s: em28xx_write_reg - msp34xx(1) failed! error [%d]\n",
2402                                       __func__, ret);
2403                         goto unregister_dev;
2404                 }
2405                 msleep(3);
2406
2407                 ret = em28xx_write_reg(dev, EM2820_R08_GPIO_CTRL, 0xff);
2408                 if (ret < 0) {
2409                         em28xx_errdev("%s: em28xx_write_reg - msp34xx(2) failed! error [%d]\n",
2410                                       __func__, ret);
2411                         goto unregister_dev;
2412                 }
2413                 msleep(3);
2414         }
2415
2416         /* set default norm */
2417         v4l2->norm = V4L2_STD_PAL;
2418         v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_std, v4l2->norm);
2419         v4l2->interlaced_fieldmode = EM28XX_INTERLACED_DEFAULT;
2420
2421         /* Analog specific initialization */
2422         v4l2->format = &format[0];
2423
2424         maxw = norm_maxw(dev);
2425         /* MaxPacketSize for em2800 is too small to capture at full resolution
2426          * use half of maxw as the scaler can only scale to 50% */
2427         if (dev->board.is_em2800)
2428                 maxw /= 2;
2429
2430         em28xx_set_video_format(dev, format[0].fourcc,
2431                                 maxw, norm_maxh(dev));
2432
2433         video_mux(dev, 0);
2434
2435         /* Audio defaults */
2436         dev->mute = 1;
2437         dev->volume = 0x1f;
2438
2439 /*      em28xx_write_reg(dev, EM28XX_R0E_AUDIOSRC, 0xc0); audio register */
2440         val = (u8)em28xx_read_reg(dev, EM28XX_R0F_XCLK);
2441         em28xx_write_reg(dev, EM28XX_R0F_XCLK,
2442                          (EM28XX_XCLK_AUDIO_UNMUTE | val));
2443
2444         em28xx_set_outfmt(dev);
2445
2446         /* Add image controls */
2447         /* NOTE: at this point, the subdevices are already registered, so bridge
2448          * controls are only added/enabled when no subdevice provides them */
2449         if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_CONTRAST))
2450                 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2451                                   V4L2_CID_CONTRAST,
2452                                   0, 0x1f, 1, CONTRAST_DEFAULT);
2453         if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_BRIGHTNESS))
2454                 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2455                                   V4L2_CID_BRIGHTNESS,
2456                                   -0x80, 0x7f, 1, BRIGHTNESS_DEFAULT);
2457         if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_SATURATION))
2458                 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2459                                   V4L2_CID_SATURATION,
2460                                   0, 0x1f, 1, SATURATION_DEFAULT);
2461         if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_BLUE_BALANCE))
2462                 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2463                                   V4L2_CID_BLUE_BALANCE,
2464                                   -0x30, 0x30, 1, BLUE_BALANCE_DEFAULT);
2465         if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_RED_BALANCE))
2466                 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2467                                   V4L2_CID_RED_BALANCE,
2468                                   -0x30, 0x30, 1, RED_BALANCE_DEFAULT);
2469         if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_SHARPNESS))
2470                 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2471                                   V4L2_CID_SHARPNESS,
2472                                   0, 0x0f, 1, SHARPNESS_DEFAULT);
2473
2474         /* Reset image controls */
2475         em28xx_colorlevels_set_default(dev);
2476         v4l2_ctrl_handler_setup(hdl);
2477         ret = hdl->error;
2478         if (ret)
2479                 goto unregister_dev;
2480
2481         /* allocate and fill video video_device struct */
2482         em28xx_vdev_init(dev, &v4l2->vdev, &em28xx_video_template, "video");
2483         mutex_init(&v4l2->vb_queue_lock);
2484         mutex_init(&v4l2->vb_vbi_queue_lock);
2485         v4l2->vdev.queue = &v4l2->vb_vidq;
2486         v4l2->vdev.queue->lock = &v4l2->vb_queue_lock;
2487
2488         /* disable inapplicable ioctls */
2489         if (dev->board.is_webcam) {
2490                 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_QUERYSTD);
2491                 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_STD);
2492                 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_STD);
2493         } else {
2494                 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_PARM);
2495         }
2496         if (dev->tuner_type == TUNER_ABSENT) {
2497                 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_TUNER);
2498                 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_TUNER);
2499                 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_FREQUENCY);
2500                 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_FREQUENCY);
2501         }
2502         if (dev->int_audio_type == EM28XX_INT_AUDIO_NONE) {
2503                 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_AUDIO);
2504                 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_AUDIO);
2505         }
2506
2507         /* register v4l2 video video_device */
2508         ret = video_register_device(&v4l2->vdev, VFL_TYPE_GRABBER,
2509                                     video_nr[dev->devno]);
2510         if (ret) {
2511                 em28xx_errdev("unable to register video device (error=%i).\n",
2512                               ret);
2513                 goto unregister_dev;
2514         }
2515
2516         /* Allocate and fill vbi video_device struct */
2517         if (em28xx_vbi_supported(dev) == 1) {
2518                 em28xx_vdev_init(dev, &v4l2->vbi_dev, &em28xx_video_template,
2519                                 "vbi");
2520
2521                 v4l2->vbi_dev.queue = &v4l2->vb_vbiq;
2522                 v4l2->vbi_dev.queue->lock = &v4l2->vb_vbi_queue_lock;
2523
2524                 /* disable inapplicable ioctls */
2525                 v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_PARM);
2526                 if (dev->tuner_type == TUNER_ABSENT) {
2527                         v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_G_TUNER);
2528                         v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_TUNER);
2529                         v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_G_FREQUENCY);
2530                         v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_FREQUENCY);
2531                 }
2532                 if (dev->int_audio_type == EM28XX_INT_AUDIO_NONE) {
2533                         v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_G_AUDIO);
2534                         v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_AUDIO);
2535                 }
2536
2537                 /* register v4l2 vbi video_device */
2538                 ret = video_register_device(&v4l2->vbi_dev, VFL_TYPE_VBI,
2539                                             vbi_nr[dev->devno]);
2540                 if (ret < 0) {
2541                         em28xx_errdev("unable to register vbi device\n");
2542                         goto unregister_dev;
2543                 }
2544         }
2545
2546         if (em28xx_boards[dev->model].radio.type == EM28XX_RADIO) {
2547                 em28xx_vdev_init(dev, &v4l2->radio_dev, &em28xx_radio_template,
2548                                    "radio");
2549                 ret = video_register_device(&v4l2->radio_dev, VFL_TYPE_RADIO,
2550                                             radio_nr[dev->devno]);
2551                 if (ret < 0) {
2552                         em28xx_errdev("can't register radio device\n");
2553                         goto unregister_dev;
2554                 }
2555                 em28xx_info("Registered radio device as %s\n",
2556                             video_device_node_name(&v4l2->radio_dev));
2557         }
2558
2559         em28xx_info("V4L2 video device registered as %s\n",
2560                     video_device_node_name(&v4l2->vdev));
2561
2562         if (video_is_registered(&v4l2->vbi_dev))
2563                 em28xx_info("V4L2 VBI device registered as %s\n",
2564                             video_device_node_name(&v4l2->vbi_dev));
2565
2566         /* Save some power by putting tuner to sleep */
2567         v4l2_device_call_all(&v4l2->v4l2_dev, 0, core, s_power, 0);
2568
2569         /* initialize videobuf2 stuff */
2570         em28xx_vb2_setup(dev);
2571
2572         em28xx_info("V4L2 extension successfully initialized\n");
2573
2574         kref_get(&dev->ref);
2575
2576         mutex_unlock(&dev->lock);
2577         return 0;
2578
2579 unregister_dev:
2580         v4l2_ctrl_handler_free(&v4l2->ctrl_handler);
2581         v4l2_device_unregister(&v4l2->v4l2_dev);
2582 err:
2583         dev->v4l2 = NULL;
2584         kref_put(&v4l2->ref, em28xx_free_v4l2);
2585         mutex_unlock(&dev->lock);
2586         return ret;
2587 }
2588
2589 static struct em28xx_ops v4l2_ops = {
2590         .id   = EM28XX_V4L2,
2591         .name = "Em28xx v4l2 Extension",
2592         .init = em28xx_v4l2_init,
2593         .fini = em28xx_v4l2_fini,
2594         .suspend = em28xx_v4l2_suspend,
2595         .resume = em28xx_v4l2_resume,
2596 };
2597
2598 static int __init em28xx_video_register(void)
2599 {
2600         return em28xx_register_extension(&v4l2_ops);
2601 }
2602
2603 static void __exit em28xx_video_unregister(void)
2604 {
2605         em28xx_unregister_extension(&v4l2_ops);
2606 }
2607
2608 module_init(em28xx_video_register);
2609 module_exit(em28xx_video_unregister);