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