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