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