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