em28xx-video.c 70.1 KB
Newer Older
1
/*
2 3
   em28xx-video.c - driver for Empia EM2800/EM2820/2840 USB
		    video capture devices
4

5 6
   Copyright (C) 2005 Ludovico Cavedon <cavedon@sssup.it>
		      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 12 13
	Some parts based on SN9C10x PC Camera Controllers GPL driver made
		by Luca Risolia <luca.risolia@studio.unibo.it>

14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#include <linux/init.h>
#include <linux/list.h>
#include <linux/module.h>
#include <linux/kernel.h>
33
#include <linux/bitmap.h>
34 35
#include <linux/usb.h>
#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 50
#define DRIVER_AUTHOR "Ludovico Cavedon <cavedon@sssup.it>, " \
		      "Markus Rechberger <mrechberger@gmail.com>, " \
51
		      "Mauro Carvalho Chehab <mchehab@infradead.org>, " \
52
		      "Sascha Sommer <saschasommer@freenet.de>"
53

54 55 56 57 58 59 60 61 62 63 64 65
static unsigned int isoc_debug;
module_param(isoc_debug, int, 0644);
MODULE_PARM_DESC(isoc_debug, "enable debug messages [isoc transfers]");

static unsigned int disable_vbi;
module_param(disable_vbi, int, 0644);
MODULE_PARM_DESC(disable_vbi, "disable vbi support");

static int alt;
module_param(alt, int, 0644);
MODULE_PARM_DESC(alt, "alternate setting to use for video endpoint");

66
#define em28xx_videodbg(fmt, arg...) do {\
67 68
	if (video_debug) \
		printk(KERN_INFO "%s %s :"fmt, \
69
			 dev->name, __func__ , ##arg); } while (0)
70

71 72 73
#define em28xx_isocdbg(fmt, arg...) \
do {\
	if (isoc_debug) { \
74
		printk(KERN_INFO "%s %s :"fmt, \
75 76 77
			 dev->name, __func__ , ##arg); \
	} \
  } 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 85 86 87 88 89 90 91
#define EM25XX_FRMDATAHDR_BYTE1			0x02
#define EM25XX_FRMDATAHDR_BYTE2_STILL_IMAGE	0x20
#define EM25XX_FRMDATAHDR_BYTE2_FRAME_END	0x02
#define EM25XX_FRMDATAHDR_BYTE2_FRAME_ID	0x01
#define EM25XX_FRMDATAHDR_BYTE2_MASK	(EM25XX_FRMDATAHDR_BYTE2_STILL_IMAGE | \
					 EM25XX_FRMDATAHDR_BYTE2_FRAME_END |   \
					 EM25XX_FRMDATAHDR_BYTE2_FRAME_ID)

92 93 94
static unsigned int video_nr[] = {[0 ... (EM28XX_MAXBOARDS - 1)] = -1U };
static unsigned int vbi_nr[]   = {[0 ... (EM28XX_MAXBOARDS - 1)] = -1U };
static unsigned int radio_nr[] = {[0 ... (EM28XX_MAXBOARDS - 1)] = -1U };
95

96 97
module_param_array(video_nr, int, NULL, 0444);
module_param_array(vbi_nr, int, NULL, 0444);
98 99 100 101
module_param_array(radio_nr, int, NULL, 0444);
MODULE_PARM_DESC(video_nr, "video device numbers");
MODULE_PARM_DESC(vbi_nr,   "vbi device numbers");
MODULE_PARM_DESC(radio_nr, "radio device numbers");
102

103
static unsigned int video_debug;
104 105
module_param(video_debug, int, 0644);
MODULE_PARM_DESC(video_debug, "enable debug messages [video]");
106

107 108 109
/* supported video standards */
static struct em28xx_fmt format[] = {
	{
110
		.name     = "16 bpp YUY2, 4:2:2, packed",
111 112
		.fourcc   = V4L2_PIX_FMT_YUYV,
		.depth    = 16,
113
		.reg	  = EM28XX_OUTFMT_YUV422_Y0UY1V,
114
	}, {
115
		.name     = "16 bpp RGB 565, LE",
116 117
		.fourcc   = V4L2_PIX_FMT_RGB565,
		.depth    = 16,
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
		.reg      = EM28XX_OUTFMT_RGB_16_656,
	}, {
		.name     = "8 bpp Bayer BGBG..GRGR",
		.fourcc   = V4L2_PIX_FMT_SBGGR8,
		.depth    = 8,
		.reg      = EM28XX_OUTFMT_RGB_8_BGBG,
	}, {
		.name     = "8 bpp Bayer GRGR..BGBG",
		.fourcc   = V4L2_PIX_FMT_SGRBG8,
		.depth    = 8,
		.reg      = EM28XX_OUTFMT_RGB_8_GRGR,
	}, {
		.name     = "8 bpp Bayer GBGB..RGRG",
		.fourcc   = V4L2_PIX_FMT_SGBRG8,
		.depth    = 8,
		.reg      = EM28XX_OUTFMT_RGB_8_GBGB,
	}, {
		.name     = "12 bpp YUV411",
		.fourcc   = V4L2_PIX_FMT_YUV411P,
		.depth    = 12,
		.reg      = EM28XX_OUTFMT_YUV411,
139 140 141
	},
};

142 143 144
/*FIXME: maxw should be dependent of alt mode */
static inline unsigned int norm_maxw(struct em28xx *dev)
{
145 146
	struct em28xx_v4l2 *v4l2 = dev->v4l2;

147
	if (dev->board.is_webcam)
148
		return v4l2->sensor_xres;
149 150 151 152 153 154 155 156 157

	if (dev->board.max_range_640_480)
		return 640;

	return 720;
}

static inline unsigned int norm_maxh(struct em28xx *dev)
{
158 159
	struct em28xx_v4l2 *v4l2 = dev->v4l2;

160
	if (dev->board.is_webcam)
161
		return v4l2->sensor_yres;
162 163 164 165

	if (dev->board.max_range_640_480)
		return 480;

166
	return (v4l2->norm & V4L2_STD_625_50) ? 576 : 480;
167 168
}

169
static int em28xx_vbi_supported(struct em28xx *dev)
170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
{
	/* Modprobe option to manually disable */
	if (disable_vbi == 1)
		return 0;

	if (dev->board.is_webcam)
		return 0;

	/* FIXME: check subdevices for VBI support */

	if (dev->chip_id == CHIP_ID_EM2860 ||
	    dev->chip_id == CHIP_ID_EM2883)
		return 1;

	/* Version of em28xx that does not support VBI */
	return 0;
}

/*
 * em28xx_wake_i2c()
 * configure i2c attached devices
 */
192
static void em28xx_wake_i2c(struct em28xx *dev)
193
{
194
	struct v4l2_device *v4l2_dev = &dev->v4l2->v4l2_dev;
195

196 197
	v4l2_device_call_all(v4l2_dev, 0, core,  reset, 0);
	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 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218
{
	em28xx_write_reg(dev, EM28XX_R20_YGAIN, CONTRAST_DEFAULT);
	em28xx_write_reg(dev, EM28XX_R21_YOFFSET, BRIGHTNESS_DEFAULT);
	em28xx_write_reg(dev, EM28XX_R22_UVGAIN, SATURATION_DEFAULT);
	em28xx_write_reg(dev, EM28XX_R23_UOFFSET, BLUE_BALANCE_DEFAULT);
	em28xx_write_reg(dev, EM28XX_R24_VOFFSET, RED_BALANCE_DEFAULT);
	em28xx_write_reg(dev, EM28XX_R25_SHARPNESS, SHARPNESS_DEFAULT);

	em28xx_write_reg(dev, EM28XX_R14_GAMMA, 0x20);
	em28xx_write_reg(dev, EM28XX_R15_RGAIN, 0x20);
	em28xx_write_reg(dev, EM28XX_R16_GGAIN, 0x20);
	em28xx_write_reg(dev, EM28XX_R17_BGAIN, 0x20);
	em28xx_write_reg(dev, EM28XX_R18_ROFFSET, 0x00);
	em28xx_write_reg(dev, EM28XX_R19_GOFFSET, 0x00);
	return em28xx_write_reg(dev, EM28XX_R1A_BOFFSET, 0x00);
}

219
static int em28xx_set_outfmt(struct em28xx *dev)
220 221 222
{
	int ret;
	u8 fmt, vinctrl;
223
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
224

225
	fmt = v4l2->format->reg;
226 227 228 229 230 231 232 233 234 235 236 237 238 239 240
	if (!dev->is_em25xx)
		fmt |= 0x20;
	/*
	 * NOTE: it's not clear if this is really needed !
	 * The datasheets say bit 5 is a reserved bit and devices seem to work
	 * fine without it. But the Windows driver sets it for em2710/50+em28xx
	 * devices and we've always been setting it, too.
	 *
	 * em2765 (em25xx, em276x/7x/8x) devices do NOT work with this bit set,
	 * it's likely used for an additional (compressed ?) format there.
	 */
	ret = em28xx_write_reg(dev, EM28XX_R27_OUTFMT, fmt);
	if (ret < 0)
		return ret;

241
	ret = em28xx_write_reg(dev, EM28XX_R10_VINMODE, v4l2->vinmode);
242 243 244
	if (ret < 0)
		return ret;

245
	vinctrl = v4l2->vinctl;
246 247 248
	if (em28xx_vbi_supported(dev) == 1) {
		vinctrl |= EM28XX_VINCTRL_VBI_RAW;
		em28xx_write_reg(dev, EM28XX_R34_VBI_START_H, 0x00);
249 250
		em28xx_write_reg(dev, EM28XX_R36_VBI_WIDTH, v4l2->vbi_width/4);
		em28xx_write_reg(dev, EM28XX_R37_VBI_HEIGHT, v4l2->vbi_height);
251
		if (v4l2->norm & V4L2_STD_525_60) {
252 253
			/* NTSC */
			em28xx_write_reg(dev, EM28XX_R35_VBI_START_V, 0x09);
254
		} else if (v4l2->norm & V4L2_STD_625_50) {
255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275
			/* PAL */
			em28xx_write_reg(dev, EM28XX_R35_VBI_START_V, 0x07);
		}
	}

	return em28xx_write_reg(dev, EM28XX_R11_VINCTRL, vinctrl);
}

static int em28xx_accumulator_set(struct em28xx *dev, u8 xmin, u8 xmax,
				  u8 ymin, u8 ymax)
{
	em28xx_videodbg("em28xx Scale: (%d,%d)-(%d,%d)\n",
			xmin, ymin, xmax, ymax);

	em28xx_write_regs(dev, EM28XX_R28_XMIN, &xmin, 1);
	em28xx_write_regs(dev, EM28XX_R29_XMAX, &xmax, 1);
	em28xx_write_regs(dev, EM28XX_R2A_YMIN, &ymin, 1);
	return em28xx_write_regs(dev, EM28XX_R2B_YMAX, &ymax, 1);
}

static void em28xx_capture_area_set(struct em28xx *dev, u8 hstart, u8 vstart,
276
				    u16 width, u16 height)
277 278 279 280 281 282 283
{
	u8 cwidth = width >> 2;
	u8 cheight = height >> 2;
	u8 overflow = (height >> 9 & 0x02) | (width >> 10 & 0x01);
	/* NOTE: size limit: 2047x1023 = 2MPix */

	em28xx_videodbg("capture area set to (%d,%d): %dx%d\n",
284
			hstart, vstart,
285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303
		       ((overflow & 2) << 9 | cwidth << 2),
		       ((overflow & 1) << 10 | cheight << 2));

	em28xx_write_regs(dev, EM28XX_R1C_HSTART, &hstart, 1);
	em28xx_write_regs(dev, EM28XX_R1D_VSTART, &vstart, 1);
	em28xx_write_regs(dev, EM28XX_R1E_CWIDTH, &cwidth, 1);
	em28xx_write_regs(dev, EM28XX_R1F_CHEIGHT, &cheight, 1);
	em28xx_write_regs(dev, EM28XX_R1B_OFLOW, &overflow, 1);

	/* FIXME: function/meaning of these registers ? */
	/* FIXME: align width+height to multiples of 4 ?! */
	if (dev->is_em25xx) {
		em28xx_write_reg(dev, 0x34, width >> 4);
		em28xx_write_reg(dev, 0x35, height >> 4);
	}
}

static int em28xx_scaler_set(struct em28xx *dev, u16 h, u16 v)
{
304
	u8 mode = 0x00;
305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322
	/* the em2800 scaler only supports scaling down to 50% */

	if (dev->board.is_em2800) {
		mode = (v ? 0x20 : 0x00) | (h ? 0x10 : 0x00);
	} else {
		u8 buf[2];

		buf[0] = h;
		buf[1] = h >> 8;
		em28xx_write_regs(dev, EM28XX_R30_HSCALELOW, (char *)buf, 2);

		buf[0] = v;
		buf[1] = v >> 8;
		em28xx_write_regs(dev, EM28XX_R32_VSCALELOW, (char *)buf, 2);
		/* it seems that both H and V scalers must be active
		   to work correctly */
		mode = (h || v) ? 0x30 : 0x00;
	}
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 330 331
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
	int width = norm_maxw(dev);
	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 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355

	em28xx_set_outfmt(dev);

	em28xx_accumulator_set(dev, 1, (width - 4) >> 2, 1, (height - 4) >> 2);

	/* If we don't set the start position to 2 in VBI mode, we end up
	   with line 20/21 being YUYV encoded instead of being in 8-bit
	   greyscale.  The core of the issue is that line 21 (and line 23 for
	   PAL WSS) are inside of active video region, and as a result they
	   get the pixelformatting associated with that area.  So by cropping
	   it out, we end up with the same format as the rest of the VBI
	   region */
	if (em28xx_vbi_supported(dev) == 1)
		em28xx_capture_area_set(dev, 0, 2, width, height);
	else
		em28xx_capture_area_set(dev, 0, 0, width, height);

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 364
	int errCode;
	int i;
365
	unsigned int min_pkt_size = v4l2->width * 2 + 4;
366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381

	/* NOTE: for isoc transfers, only alt settings > 0 are allowed
		 bulk transfers seem to work only with alt=0 ! */
	dev->alt = 0;
	if ((alt > 0) && (alt < dev->num_alt)) {
		em28xx_videodbg("alternate forced to %d\n", dev->alt);
		dev->alt = alt;
		goto set_alt;
	}
	if (dev->analog_xfer_bulk)
		goto set_alt;

	/* When image size is bigger than a certain value,
	   the frame size should be increased, otherwise, only
	   green screen will be received.
	 */
382
	if (v4l2->width * 2 * v4l2->height > 720 * 240 * 2)
383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406
		min_pkt_size *= 2;

	for (i = 0; i < dev->num_alt; i++) {
		/* stop when the selected alt setting offers enough bandwidth */
		if (dev->alt_max_pkt_size_isoc[i] >= min_pkt_size) {
			dev->alt = i;
			break;
		/* otherwise make sure that we end up with the maximum bandwidth
		   because the min_pkt_size equation might be wrong...
		*/
		} else if (dev->alt_max_pkt_size_isoc[i] >
			   dev->alt_max_pkt_size_isoc[dev->alt])
			dev->alt = i;
	}

set_alt:
	/* NOTE: for bulk transfers, we need to call usb_set_interface()
	 * even if the previous settings were the same. Otherwise streaming
	 * fails with all urbs having status = -EOVERFLOW ! */
	if (dev->analog_xfer_bulk) {
		dev->max_pkt_size = 512; /* USB 2.0 spec */
		dev->packet_multiplier = EM28XX_BULK_PACKET_MULTIPLIER;
	} else { /* isoc */
		em28xx_videodbg("minimum isoc packet size: %u (alt=%d)\n",
407
				min_pkt_size, dev->alt);
408 409 410 411 412
		dev->max_pkt_size =
				  dev->alt_max_pkt_size_isoc[dev->alt];
		dev->packet_multiplier = EM28XX_NUM_ISOC_PACKETS;
	}
	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 416 417 418 419 420 421 422
	if (errCode < 0) {
		em28xx_errdev("cannot change alternate number to %d (error=%i)\n",
			      dev->alt, errCode);
		return errCode;
	}
	return 0;
}

423 424 425 426 427
/* ------------------------------------------------------------------
	DMA and thread functions
   ------------------------------------------------------------------*/

/*
428
 * Finish the current buffer
429
 */
430 431
static inline void finish_buffer(struct em28xx *dev,
				 struct em28xx_buffer *buf)
432
{
433 434
	em28xx_isocdbg("[%p/%d] wakeup\n", buf, buf->top_field);

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 449
 */
static void em28xx_copy_video(struct em28xx *dev,
			      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 459
	if (buf->pos + len > buf->length)
		len = buf->length - buf->pos;
460

461
	startread = usb_buf;
462 463
	remain = len;

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 470
	linesdone = buf->pos / bytesperline;
	currlinedone = buf->pos % bytesperline;
471

472
	if (v4l2->progressive)
473 474 475 476
		offset = linesdone * bytesperline + currlinedone;
	else
		offset = linesdone * bytesperline * 2 + currlinedone;

477
	startwrite = fieldstart + offset;
478
	lencopy = bytesperline - currlinedone;
479 480
	lencopy = lencopy > remain ? remain : lencopy;

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 485
			      ((char *)buf->vb_buf + buf->length));
		remain = (char *)buf->vb_buf + buf->length -
486
			 (char *)startwrite;
487
		lencopy = remain;
488
	}
489 490
	if (lencopy <= 0)
		return;
491
	memcpy(startwrite, startread, lencopy);
492 493 494 495

	remain -= lencopy;

	while (remain > 0) {
496
		if (v4l2->progressive)
497 498 499
			startwrite += lencopy;
		else
			startwrite += lencopy + bytesperline;
500
		startread += lencopy;
501
		if (bytesperline > remain)
502 503
			lencopy = remain;
		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 512 513
				       ((char *)buf->vb_buf + buf->length));
			lencopy = remain = (char *)buf->vb_buf + buf->length -
				(char *)startwrite;
514
		}
515 516
		if (lencopy <= 0)
			break;
517 518

		memcpy(startwrite, startread, lencopy);
519 520 521 522

		remain -= lencopy;
	}

523
	buf->pos += len;
524 525
}

526 527 528
/*
 * Copy VBI data from USB buffer to videobuf buffer
 */
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 537
	if (buf->pos + len > buf->length)
		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 552
{
	char *errmsg = "Unknown";

553
	switch (status) {
554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578
	case -ENOENT:
		errmsg = "unlinked synchronuously";
		break;
	case -ECONNRESET:
		errmsg = "unlinked asynchronuously";
		break;
	case -ENOSR:
		errmsg = "Buffer error (overrun)";
		break;
	case -EPIPE:
		errmsg = "Stalled (device not responding)";
		break;
	case -EOVERFLOW:
		errmsg = "Babble (bad cable?)";
		break;
	case -EPROTO:
		errmsg = "Bit-stuff error (bad cable?)";
		break;
	case -EILSEQ:
		errmsg = "CRC/Timeout (could be anything)";
		break;
	case -ETIME:
		errmsg = "Device does not respond";
		break;
	}
579
	if (packet < 0) {
580 581 582 583 584 585 586 587
		em28xx_isocdbg("URB status %d [%s].\n",	status, errmsg);
	} else {
		em28xx_isocdbg("URB packet %d, status %d [%s].\n",
			       packet, status, errmsg);
	}
}

/*
588
 * get the next available buffer from dma queue
589
 */
590 591
static inline struct em28xx_buffer *get_next_buf(struct em28xx *dev,
						 struct em28xx_dmaqueue *dma_q)
592
{
593
	struct em28xx_buffer *buf;
594

595 596
	if (list_empty(&dma_q->active)) {
		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);
L
Lucas De Marchi 已提交
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 612 613 614 615 616 617
/*
 * Finish the current buffer if completed and prepare for the next field
 */
static struct em28xx_buffer *
finish_field_prepare_next(struct em28xx *dev,
			  struct em28xx_buffer *buf,
			  struct em28xx_dmaqueue *dma_q)
{
618 619
	struct em28xx_v4l2 *v4l2 = dev->v4l2;

620
	if (v4l2->progressive || v4l2->top_field) { /* Brand new frame */
621 622 623 624 625
		if (buf != NULL)
			finish_buffer(dev, buf);
		buf = get_next_buf(dev, dma_q);
	}
	if (buf != NULL) {
626
		buf->top_field = v4l2->top_field;
627 628 629 630 631 632
		buf->pos = 0;
	}

	return buf;
}

633 634 635 636 637 638
/*
 * Process data packet according to the em2710/em2750/em28xx frame data format
 */
static inline void process_frame_data_em28xx(struct em28xx *dev,
					     unsigned char *data_pkt,
					     unsigned int  data_len)
639
{
640
	struct em28xx_v4l2      *v4l2 = dev->v4l2;
641 642
	struct em28xx_buffer    *buf = dev->usb_ctl.vid_buf;
	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 647 648 649 650 651 652 653 654 655 656 657 658 659

	/* capture type 0 = vbi start
	   capture type 1 = vbi in progress
	   capture type 2 = video start
	   capture type 3 = video in progress */
	if (data_len >= 4) {
		/* NOTE: Headers are always 4 bytes and
		 * never split across packets */
		if (data_pkt[0] == 0x88 && data_pkt[1] == 0x88 &&
		    data_pkt[2] == 0x88 && data_pkt[3] == 0x88) {
			/* Continuation */
			data_pkt += 4;
			data_len -= 4;
		} else if (data_pkt[0] == 0x33 && data_pkt[1] == 0x95) {
			/* Field start (VBI mode) */
660 661
			v4l2->capture_type = 0;
			v4l2->vbi_read = 0;
662
			em28xx_isocdbg("VBI START HEADER !!!\n");
663
			v4l2->top_field = !(data_pkt[2] & 1);
664 665 666 667
			data_pkt += 4;
			data_len -= 4;
		} else if (data_pkt[0] == 0x22 && data_pkt[1] == 0x5a) {
			/* 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 672 673 674 675 676 677
			data_pkt += 4;
			data_len -= 4;
		}
	}
	/* NOTE: With bulk transfers, intermediate data packets
	 * have no continuation header */

678
	if (v4l2->capture_type == 0) {
679 680
		vbi_buf = finish_field_prepare_next(dev, vbi_buf, vbi_dma_q);
		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 687
		int vbi_data_len = ((v4l2->vbi_read + data_len) > vbi_size) ?
				   (vbi_size - v4l2->vbi_read) : data_len;
688 689 690 691

		/* Copy VBI data */
		if (vbi_buf != NULL)
			em28xx_copy_vbi(dev, vbi_buf, data_pkt, vbi_data_len);
692
		v4l2->vbi_read += vbi_data_len;
693 694 695

		if (vbi_data_len < data_len) {
			/* Continue with copying video data */
696
			v4l2->capture_type = 2;
697 698 699 700 701
			data_pkt += vbi_data_len;
			data_len -= vbi_data_len;
		}
	}

702
	if (v4l2->capture_type == 2) {
703 704
		buf = finish_field_prepare_next(dev, buf, dma_q);
		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 710 711
		em28xx_copy_video(dev, buf, data_pkt, data_len);
}

712 713 714 715 716 717 718 719 720
/*
 * Process data packet according to the em25xx/em276x/7x/8x frame data format
 */
static inline void process_frame_data_em25xx(struct em28xx *dev,
					     unsigned char *data_pkt,
					     unsigned int  data_len)
{
	struct em28xx_buffer    *buf = dev->usb_ctl.vid_buf;
	struct em28xx_dmaqueue  *dmaq = &dev->vidq;
721
	struct em28xx_v4l2      *v4l2 = dev->v4l2;
722
	bool frame_end = false;
723 724 725 726 727 728 729

	/* Check for header */
	/* NOTE: at least with bulk transfers, only the first packet
	 * has a header and has always set the FRAME_END bit         */
	if (data_len >= 2) {	/* em25xx header is only 2 bytes long */
		if ((data_pkt[0] == EM25XX_FRMDATAHDR_BYTE1) &&
		    ((data_pkt[1] & ~EM25XX_FRMDATAHDR_BYTE2_MASK) == 0x00)) {
730
			v4l2->top_field = !(data_pkt[1] &
731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768
					   EM25XX_FRMDATAHDR_BYTE2_FRAME_ID);
			frame_end = data_pkt[1] &
				    EM25XX_FRMDATAHDR_BYTE2_FRAME_END;
			data_pkt += 2;
			data_len -= 2;
		}

		/* Finish field and prepare next (BULK only) */
		if (dev->analog_xfer_bulk && frame_end) {
			buf = finish_field_prepare_next(dev, buf, dmaq);
			dev->usb_ctl.vid_buf = buf;
		}
		/* NOTE: in ISOC mode when a new frame starts and buf==NULL,
		 * we COULD already prepare a buffer here to avoid skipping the
		 * first frame.
		 */
	}

	/* Copy data */
	if (buf != NULL && data_len > 0)
		em28xx_copy_video(dev, buf, data_pkt, data_len);

	/* Finish frame (ISOC only) => avoids lag of 1 frame */
	if (!dev->analog_xfer_bulk && frame_end) {
		buf = finish_field_prepare_next(dev, buf, dmaq);
		dev->usb_ctl.vid_buf = buf;
	}

	/* NOTE: Tested with USB bulk transfers only !
	 * The wording in the datasheet suggests that isoc might work different.
	 * The current code assumes that with isoc transfers each packet has a
	 * header like with the other em28xx devices.
	 */
	/* NOTE: Support for interlaced mode is pure theory. It has not been
	 * tested and it is unknown if these devices actually support it. */
	/* NOTE: No VBI support yet (these chips likely do not support VBI). */
}

769 770 771 772 773 774
/* Processes and copies the URB data content (video and VBI data) */
static inline int em28xx_urb_data_copy(struct em28xx *dev, struct urb *urb)
{
	int xfer_bulk, num_packets, i;
	unsigned char *usb_data_pkt;
	unsigned int usb_data_len;
775 776 777 778

	if (!dev)
		return 0;

779
	if (dev->disconnected)
780 781
		return 0;

782
	if (urb->status < 0)
783 784
		print_err_status(dev, -1, urb->status);

785 786 787 788 789 790
	xfer_bulk = usb_pipebulk(urb->pipe);

	if (xfer_bulk) /* bulk */
		num_packets = 1;
	else /* isoc */
		num_packets = urb->number_of_packets;
791

792 793
	for (i = 0; i < num_packets; i++) {
		if (xfer_bulk) { /* bulk */
794
			usb_data_len = urb->actual_length;
795

796
			usb_data_pkt = urb->transfer_buffer;
797 798 799 800 801 802 803 804
		} else { /* isoc */
			if (urb->iso_frame_desc[i].status < 0) {
				print_err_status(dev, i,
						 urb->iso_frame_desc[i].status);
				if (urb->iso_frame_desc[i].status != -EPROTO)
					continue;
			}

805 806
			usb_data_len = urb->iso_frame_desc[i].actual_length;
			if (usb_data_len > dev->max_pkt_size) {
807
				em28xx_isocdbg("packet bigger than packet size");
808
				continue;
809
			}
810

811 812
			usb_data_pkt = urb->transfer_buffer +
				       urb->iso_frame_desc[i].offset;
813
		}
814

815
		if (usb_data_len == 0) {
816 817
			/* NOTE: happens very often with isoc transfers */
			/* em28xx_usbdbg("packet %d is empty",i); - spammy */
818 819 820
			continue;
		}

821 822 823 824 825 826 827
		if (dev->is_em25xx)
			process_frame_data_em25xx(dev,
						  usb_data_pkt, usb_data_len);
		else
			process_frame_data_em28xx(dev,
						  usb_data_pkt, usb_data_len);

828
	}
829
	return 1;
830 831
}

832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868
static int get_ressource(enum v4l2_buf_type f_type)
{
	switch (f_type) {
	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
		return EM28XX_RESOURCE_VIDEO;
	case V4L2_BUF_TYPE_VBI_CAPTURE:
		return EM28XX_RESOURCE_VBI;
	default:
		BUG();
	}
}

/* Usage lock check functions */
static int res_get(struct em28xx *dev, enum v4l2_buf_type f_type)
{
	int res_type = get_ressource(f_type);

	/* is it free? */
	if (dev->resources & res_type) {
		/* no, someone else uses it */
		return -EBUSY;
	}

	/* it's free, grab it */
	dev->resources |= res_type;
	em28xx_videodbg("res: get %d\n", res_type);
	return 0;
}

static void res_free(struct em28xx *dev, enum v4l2_buf_type f_type)
{
	int res_type = get_ressource(f_type);

	dev->resources &= ~res_type;
	em28xx_videodbg("res: put %d\n", res_type);
}

869
/* ------------------------------------------------------------------
870
	Videobuf2 operations
871 872
   ------------------------------------------------------------------*/

873
static int queue_setup(struct vb2_queue *vq,
874 875
		       unsigned int *nbuffers, unsigned int *nplanes,
		       unsigned int sizes[], void *alloc_ctxs[])
876
{
877
	struct em28xx *dev = vb2_get_drv_priv(vq);
878
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
879
	unsigned long size =
880
		    (v4l2->width * v4l2->height * v4l2->format->depth + 7) >> 3;
881

882 883
	if (*nplanes)
		return sizes[0] < size ? -EINVAL : 0;
884 885
	*nplanes = 1;
	sizes[0] = size;
886 887 888
	return 0;
}

889 890
static int
buffer_prepare(struct vb2_buffer *vb)
891
{
892
	struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
893
	struct em28xx        *dev = vb2_get_drv_priv(vb->vb2_queue);
894
	struct em28xx_v4l2   *v4l2 = dev->v4l2;
895
	unsigned long size;
896

897
	em28xx_videodbg("%s, field=%d\n", __func__, vbuf->field);
898

899
	size = (v4l2->width * v4l2->height * v4l2->format->depth + 7) >> 3;
900

901 902 903 904 905
	if (vb2_plane_size(vb, 0) < size) {
		em28xx_videodbg("%s data will not fit into plane (%lu < %lu)\n",
				__func__, vb2_plane_size(vb, 0), size);
		return -EINVAL;
	}
906
	vb2_set_plane_payload(vb, 0, size);
907 908

	return 0;
909 910
}

911
int em28xx_start_analog_streaming(struct vb2_queue *vq, unsigned int count)
912
{
913
	struct em28xx *dev = vb2_get_drv_priv(vq);
914
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
915
	struct v4l2_frequency f;
916
	struct v4l2_fh *owner;
917
	int rc = 0;
918

919
	em28xx_videodbg("%s\n", __func__);
920

921 922 923 924 925
	/* Make sure streaming is not already in progress for this type
	   of filehandle (e.g. video, vbi) */
	rc = res_get(dev, vq->type);
	if (rc)
		return rc;
926

927
	if (v4l2->streaming_users == 0) {
928
		/* First active streaming user, so allocate all the URBs */
929

930 931
		/* Allocate the USB bandwidth */
		em28xx_set_alternate(dev);
932

933 934 935 936
		/* Needed, since GPIO might have disabled power of
		   some i2c device
		*/
		em28xx_wake_i2c(dev);
937

938
		v4l2->capture_type = -1;
939 940 941 942 943 944
		rc = em28xx_init_usb_xfer(dev, EM28XX_ANALOG_MODE,
					  dev->analog_xfer_bulk,
					  EM28XX_NUM_BUFS,
					  dev->max_pkt_size,
					  dev->packet_multiplier,
					  em28xx_urb_data_copy);
945
		if (rc < 0)
946
			return rc;
947

948 949 950 951 952 953 954 955
		/*
		 * djh: it's not clear whether this code is still needed.  I'm
		 * leaving it in here for now entirely out of concern for
		 * backward compatibility (the old code did it)
		 */

		/* Ask tuner to go to analog or radio mode */
		memset(&f, 0, sizeof(f));
956
		f.frequency = v4l2->frequency;
957 958
		owner = (struct v4l2_fh *)vq->owner;
		if (owner && owner->vdev->vfl_type == VFL_TYPE_RADIO)
959 960 961
			f.type = V4L2_TUNER_RADIO;
		else
			f.type = V4L2_TUNER_ANALOG_TV;
962
		v4l2_device_call_all(&v4l2->v4l2_dev,
963
				     0, tuner, s_frequency, &f);
964 965 966

		/* Enable video stream at TV decoder */
		v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_stream, 1);
967
	}
968

969
	v4l2->streaming_users++;
970

971 972 973
	return rc;
}

974
static void em28xx_stop_streaming(struct vb2_queue *vq)
975 976
{
	struct em28xx *dev = vb2_get_drv_priv(vq);
977
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
978 979 980 981 982 983 984
	struct em28xx_dmaqueue *vidq = &dev->vidq;
	unsigned long flags = 0;

	em28xx_videodbg("%s\n", __func__);

	res_free(dev, vq->type);

985
	if (v4l2->streaming_users-- == 1) {
986 987 988
		/* Disable video stream at TV decoder */
		v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_stream, 0);

989 990 991 992 993
		/* Last active user, so shutdown all the URBS */
		em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);
	}

	spin_lock_irqsave(&dev->slock, flags);
994
	if (dev->usb_ctl.vid_buf != NULL) {
995 996
		vb2_buffer_done(&dev->usb_ctl.vid_buf->vb.vb2_buf,
				VB2_BUF_STATE_ERROR);
997 998
		dev->usb_ctl.vid_buf = NULL;
	}
999 1000
	while (!list_empty(&vidq->active)) {
		struct em28xx_buffer *buf;
1001

1002 1003
		buf = list_entry(vidq->active.next, struct em28xx_buffer, list);
		list_del(&buf->list);
1004
		vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
1005 1006 1007 1008
	}
	spin_unlock_irqrestore(&dev->slock, flags);
}

1009
void em28xx_stop_vbi_streaming(struct vb2_queue *vq)
1010
{
1011
	struct em28xx *dev = vb2_get_drv_priv(vq);
1012
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
1013 1014 1015 1016 1017 1018
	struct em28xx_dmaqueue *vbiq = &dev->vbiq;
	unsigned long flags = 0;

	em28xx_videodbg("%s\n", __func__);

	res_free(dev, vq->type);
1019

1020
	if (v4l2->streaming_users-- == 1) {
1021 1022 1023
		/* Disable video stream at TV decoder */
		v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_stream, 0);

1024 1025 1026 1027 1028
		/* Last active user, so shutdown all the URBS */
		em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);
	}

	spin_lock_irqsave(&dev->slock, flags);
1029
	if (dev->usb_ctl.vbi_buf != NULL) {
1030 1031
		vb2_buffer_done(&dev->usb_ctl.vbi_buf->vb.vb2_buf,
				VB2_BUF_STATE_ERROR);
1032 1033
		dev->usb_ctl.vbi_buf = NULL;
	}
1034 1035
	while (!list_empty(&vbiq->active)) {
		struct em28xx_buffer *buf;
1036

1037 1038
		buf = list_entry(vbiq->active.next, struct em28xx_buffer, list);
		list_del(&buf->list);
1039
		vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
1040 1041
	}
	spin_unlock_irqrestore(&dev->slock, flags);
1042 1043
}

1044 1045
static void
buffer_queue(struct vb2_buffer *vb)
1046
{
1047
	struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
1048
	struct em28xx *dev = vb2_get_drv_priv(vb->vb2_queue);
1049 1050
	struct em28xx_buffer *buf =
		container_of(vbuf, struct em28xx_buffer, vb);
1051 1052
	struct em28xx_dmaqueue *vidq = &dev->vidq;
	unsigned long flags = 0;
1053

1054 1055 1056
	em28xx_videodbg("%s\n", __func__);
	buf->mem = vb2_plane_vaddr(vb, 0);
	buf->length = vb2_plane_size(vb, 0);
1057

1058 1059 1060
	spin_lock_irqsave(&dev->slock, flags);
	list_add_tail(&buf->list, &vidq->active);
	spin_unlock_irqrestore(&dev->slock, flags);
1061 1062
}

1063 1064
static struct vb2_ops em28xx_video_qops = {
	.queue_setup    = queue_setup,
1065 1066
	.buf_prepare    = buffer_prepare,
	.buf_queue      = buffer_queue,
1067 1068 1069 1070
	.start_streaming = em28xx_start_analog_streaming,
	.stop_streaming = em28xx_stop_streaming,
	.wait_prepare   = vb2_ops_wait_prepare,
	.wait_finish    = vb2_ops_wait_finish,
1071
};
1072

1073
static int em28xx_vb2_setup(struct em28xx *dev)
1074 1075 1076
{
	int rc;
	struct vb2_queue *q;
1077
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
1078 1079

	/* Setup Videobuf2 for Video capture */
1080
	q = &v4l2->vb_vidq;
1081
	q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1082
	q->io_modes = VB2_READ | VB2_MMAP | VB2_USERPTR | VB2_DMABUF;
1083
	q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1084 1085 1086 1087 1088 1089 1090 1091 1092 1093
	q->drv_priv = dev;
	q->buf_struct_size = sizeof(struct em28xx_buffer);
	q->ops = &em28xx_video_qops;
	q->mem_ops = &vb2_vmalloc_memops;

	rc = vb2_queue_init(q);
	if (rc < 0)
		return rc;

	/* Setup Videobuf2 for VBI capture */
1094
	q = &v4l2->vb_vbiq;
1095 1096
	q->type = V4L2_BUF_TYPE_VBI_CAPTURE;
	q->io_modes = VB2_READ | VB2_MMAP | VB2_USERPTR;
1097
	q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109
	q->drv_priv = dev;
	q->buf_struct_size = sizeof(struct em28xx_buffer);
	q->ops = &em28xx_vbi_qops;
	q->mem_ops = &vb2_vmalloc_memops;

	rc = vb2_queue_init(q);
	if (rc < 0)
		return rc;

	return 0;
}

1110
/*********************  v4l2 interface  **************************************/
1111

1112 1113
static void video_mux(struct em28xx *dev, int index)
{
1114
	struct v4l2_device *v4l2_dev = &dev->v4l2->v4l2_dev;
1115

1116 1117
	dev->ctl_input = index;
	dev->ctl_ainput = INPUT(index)->amux;
1118
	dev->ctl_aoutput = INPUT(index)->aout;
1119

1120 1121 1122
	if (!dev->ctl_aoutput)
		dev->ctl_aoutput = EM28XX_AOUT_MASTER;

1123
	v4l2_device_call_all(v4l2_dev, 0, video, s_routing,
1124
			     INPUT(index)->vmux, 0, 0);
1125

1126
	if (dev->board.has_msp34xx) {
1127
		if (dev->i2s_speed) {
1128
			v4l2_device_call_all(v4l2_dev, 0, audio,
1129
					     s_i2s_clock_freq, dev->i2s_speed);
1130
		}
1131
		/* Note: this is msp3400 specific */
1132
		v4l2_device_call_all(v4l2_dev, 0, audio, s_routing,
1133 1134
				     dev->ctl_ainput,
				     MSP_OUTPUT(MSP_SC_IN_DSP_SCART1), 0);
1135
	}
1136

1137
	if (dev->board.adecoder != EM28XX_NOADECODER) {
1138
		v4l2_device_call_all(v4l2_dev, 0, audio, s_routing,
1139
				     dev->ctl_ainput, dev->ctl_aoutput, 0);
1140 1141
	}

1142
	em28xx_audio_analog_set(dev);
1143 1144
}

1145
static void em28xx_ctrl_notify(struct v4l2_ctrl *ctrl, void *priv)
1146
{
1147
	struct em28xx *dev = priv;
1148

1149 1150 1151 1152 1153 1154
	/*
	 * In the case of non-AC97 volume controls, we still need
	 * to do some setups at em28xx, in order to mute/unmute
	 * and to adjust audio volume. However, the value ranges
	 * should be checked by the corresponding V4L subdriver.
	 */
1155 1156
	switch (ctrl->id) {
	case V4L2_CID_AUDIO_MUTE:
1157 1158 1159
		dev->mute = ctrl->val;
		em28xx_audio_analog_set(dev);
		break;
1160
	case V4L2_CID_AUDIO_VOLUME:
1161 1162 1163
		dev->volume = ctrl->val;
		em28xx_audio_analog_set(dev);
		break;
1164
	}
1165
}
1166

1167
static int em28xx_s_ctrl(struct v4l2_ctrl *ctrl)
1168
{
1169 1170 1171
	struct em28xx_v4l2 *v4l2 =
		  container_of(ctrl->handler, struct em28xx_v4l2, ctrl_handler);
	struct em28xx *dev = v4l2->dev;
1172
	int ret = -EINVAL;
1173

1174 1175
	switch (ctrl->id) {
	case V4L2_CID_AUDIO_MUTE:
1176
		dev->mute = ctrl->val;
1177
		ret = em28xx_audio_analog_set(dev);
1178
		break;
1179
	case V4L2_CID_AUDIO_VOLUME:
1180
		dev->volume = ctrl->val;
1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199
		ret = em28xx_audio_analog_set(dev);
		break;
	case V4L2_CID_CONTRAST:
		ret = em28xx_write_reg(dev, EM28XX_R20_YGAIN, ctrl->val);
		break;
	case V4L2_CID_BRIGHTNESS:
		ret = em28xx_write_reg(dev, EM28XX_R21_YOFFSET, ctrl->val);
		break;
	case V4L2_CID_SATURATION:
		ret = em28xx_write_reg(dev, EM28XX_R22_UVGAIN, ctrl->val);
		break;
	case V4L2_CID_BLUE_BALANCE:
		ret = em28xx_write_reg(dev, EM28XX_R23_UOFFSET, ctrl->val);
		break;
	case V4L2_CID_RED_BALANCE:
		ret = em28xx_write_reg(dev, EM28XX_R24_VOFFSET, ctrl->val);
		break;
	case V4L2_CID_SHARPNESS:
		ret = em28xx_write_reg(dev, EM28XX_R25_SHARPNESS, ctrl->val);
1200
		break;
1201
	}
1202

1203
	return (ret < 0) ? ret : 0;
1204
}
1205

1206
static const struct v4l2_ctrl_ops em28xx_ctrl_ops = {
1207 1208 1209
	.s_ctrl = em28xx_s_ctrl,
};

1210
static void size_to_scale(struct em28xx *dev,
1211
			  unsigned int width, unsigned int height,
1212 1213
			unsigned int *hscale, unsigned int *vscale)
{
1214 1215
	unsigned int          maxw = norm_maxw(dev);
	unsigned int          maxh = norm_maxh(dev);
1216 1217

	*hscale = (((unsigned long)maxw) << 12) / width - 4096L;
1218 1219
	if (*hscale > EM28XX_HVSCALE_MAX)
		*hscale = EM28XX_HVSCALE_MAX;
1220 1221

	*vscale = (((unsigned long)maxh) << 12) / height - 4096L;
1222 1223
	if (*vscale > EM28XX_HVSCALE_MAX)
		*vscale = EM28XX_HVSCALE_MAX;
1224 1225
}

1226 1227 1228 1229 1230 1231 1232 1233 1234
static void scale_to_size(struct em28xx *dev,
			  unsigned int hscale, unsigned int vscale,
			  unsigned int *width, unsigned int *height)
{
	unsigned int          maxw = norm_maxw(dev);
	unsigned int          maxh = norm_maxh(dev);

	*width = (((unsigned long)maxw) << 12) / (hscale + 4096L);
	*height = (((unsigned long)maxh) << 12) / (vscale + 4096L);
1235 1236 1237 1238 1239 1240

	/* Don't let width or height to be zero */
	if (*width < 1)
		*width = 1;
	if (*height < 1)
		*height = 1;
1241 1242
}

1243 1244 1245 1246
/* ------------------------------------------------------------------
	IOCTL vidioc handling
   ------------------------------------------------------------------*/

1247
static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
1248
				struct v4l2_format *f)
1249
{
1250
	struct em28xx         *dev = video_drvdata(file);
1251
	struct em28xx_v4l2    *v4l2 = dev->v4l2;
1252

1253 1254
	f->fmt.pix.width = v4l2->width;
	f->fmt.pix.height = v4l2->height;
1255 1256
	f->fmt.pix.pixelformat = v4l2->format->fourcc;
	f->fmt.pix.bytesperline = (v4l2->width * v4l2->format->depth + 7) >> 3;
1257
	f->fmt.pix.sizeimage = f->fmt.pix.bytesperline * v4l2->height;
1258
	f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
1259

1260
	/* FIXME: TOP? NONE? BOTTOM? ALTENATE? */
1261
	if (v4l2->progressive)
1262 1263
		f->fmt.pix.field = V4L2_FIELD_NONE;
	else
1264
		f->fmt.pix.field = v4l2->interlaced_fieldmode ?
1265 1266
			   V4L2_FIELD_INTERLACED : V4L2_FIELD_TOP;
	return 0;
1267 1268
}

1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279
static struct em28xx_fmt *format_by_fourcc(unsigned int fourcc)
{
	unsigned int i;

	for (i = 0; i < ARRAY_SIZE(format); i++)
		if (format[i].fourcc == fourcc)
			return &format[i];

	return NULL;
}

1280
static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
1281
				  struct v4l2_format *f)
1282
{
1283
	struct em28xx         *dev   = video_drvdata(file);
1284
	struct em28xx_v4l2    *v4l2  = dev->v4l2;
1285 1286
	unsigned int          width  = f->fmt.pix.width;
	unsigned int          height = f->fmt.pix.height;
1287 1288 1289
	unsigned int          maxw   = norm_maxw(dev);
	unsigned int          maxh   = norm_maxh(dev);
	unsigned int          hscale, vscale;
1290 1291 1292 1293 1294 1295 1296 1297
	struct em28xx_fmt     *fmt;

	fmt = format_by_fourcc(f->fmt.pix.pixelformat);
	if (!fmt) {
		em28xx_videodbg("Fourcc format (%08x) invalid.\n",
				f->fmt.pix.pixelformat);
		return -EINVAL;
	}
1298

1299
	if (dev->board.is_em2800) {
1300
		/* the em2800 can only scale down to 50% */
1301 1302
		height = height > (3 * maxh / 4) ? maxh : maxh / 2;
		width = width > (3 * maxw / 4) ? maxw : maxw / 2;
1303 1304 1305 1306 1307
		/*
		 * MaxPacketSize for em2800 is too small to capture at full
		 * resolution use half of maxw as the scaler can only scale
		 * to 50%
		 */
1308 1309
		if (width == maxw && height == maxh)
			width /= 2;
1310 1311 1312
	} else {
		/* width must even because of the YUYV format
		   height must be even because of interlacing */
1313 1314
		v4l_bound_align_image(&width, 48, maxw, 1, &height, 32, maxh,
				      1, 0);
1315
	}
1316 1317 1318 1319 1320
	/* Avoid division by zero at size_to_scale */
	if (width < 1)
		width = 1;
	if (height < 1)
		height = 1;
1321

1322
	size_to_scale(dev, width, height, &hscale, &vscale);
1323
	scale_to_size(dev, hscale, vscale, &width, &height);
1324

1325 1326
	f->fmt.pix.width = width;
	f->fmt.pix.height = height;
1327
	f->fmt.pix.pixelformat = fmt->fourcc;
1328
	f->fmt.pix.bytesperline = (width * fmt->depth + 7) >> 3;
1329
	f->fmt.pix.sizeimage = f->fmt.pix.bytesperline * height;
1330
	f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
1331
	if (v4l2->progressive)
1332 1333
		f->fmt.pix.field = V4L2_FIELD_NONE;
	else
1334
		f->fmt.pix.field = v4l2->interlaced_fieldmode ?
1335
			   V4L2_FIELD_INTERLACED : V4L2_FIELD_TOP;
1336
	f->fmt.pix.priv = 0;
1337 1338 1339 1340

	return 0;
}

1341 1342 1343 1344
static int em28xx_set_video_format(struct em28xx *dev, unsigned int fourcc,
				   unsigned width, unsigned height)
{
	struct em28xx_fmt     *fmt;
1345
	struct em28xx_v4l2    *v4l2 = dev->v4l2;
1346 1347 1348 1349 1350

	fmt = format_by_fourcc(fourcc);
	if (!fmt)
		return -EINVAL;

1351
	v4l2->format = fmt;
1352 1353
	v4l2->width  = width;
	v4l2->height = height;
1354 1355

	/* set new image size */
1356
	size_to_scale(dev, v4l2->width, v4l2->height,
1357
		      &v4l2->hscale, &v4l2->vscale);
1358 1359 1360 1361 1362 1363

	em28xx_resolution_set(dev);

	return 0;
}

1364
static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
1365
				struct v4l2_format *f)
1366
{
1367
	struct em28xx *dev = video_drvdata(file);
1368
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
1369

1370
	if (vb2_is_busy(&v4l2->vb_vidq))
1371
		return -EBUSY;
1372

1373 1374
	vidioc_try_fmt_vid_cap(file, priv, f);

H
Hans Verkuil 已提交
1375
	return em28xx_set_video_format(dev, f->fmt.pix.pixelformat,
1376
				f->fmt.pix.width, f->fmt.pix.height);
1377 1378
}

1379 1380
static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *norm)
{
1381
	struct em28xx *dev = video_drvdata(file);
1382

1383
	*norm = dev->v4l2->norm;
1384 1385 1386 1387

	return 0;
}

1388 1389
static int vidioc_querystd(struct file *file, void *priv, v4l2_std_id *norm)
{
1390
	struct em28xx *dev = video_drvdata(file);
1391

1392
	v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, video, querystd, norm);
1393 1394 1395 1396

	return 0;
}

1397
static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm)
1398
{
1399
	struct em28xx      *dev  = video_drvdata(file);
1400
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
1401 1402
	struct v4l2_format f;

1403
	if (norm == v4l2->norm)
1404
		return 0;
1405

1406
	if (v4l2->streaming_users > 0)
1407 1408
		return -EBUSY;

1409
	v4l2->norm = norm;
1410

1411
	/* Adjusts width/height, if needed */
1412
	f.fmt.pix.width = 720;
1413
	f.fmt.pix.height = (norm & V4L2_STD_525_60) ? 480 : 576;
1414
	vidioc_try_fmt_vid_cap(file, priv, &f);
1415

1416
	/* set new image size */
1417 1418 1419
	v4l2->width = f.fmt.pix.width;
	v4l2->height = f.fmt.pix.height;
	size_to_scale(dev, v4l2->width, v4l2->height,
1420
		      &v4l2->hscale, &v4l2->vscale);
1421

1422
	em28xx_resolution_set(dev);
1423
	v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_std, v4l2->norm);
1424

1425 1426
	return 0;
}
1427

1428 1429 1430
static int vidioc_g_parm(struct file *file, void *priv,
			 struct v4l2_streamparm *p)
{
1431
	struct em28xx      *dev  = video_drvdata(file);
1432
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
1433 1434
	int rc = 0;

1435
	p->parm.capture.readbuffers = EM28XX_MIN_BUF;
1436
	if (dev->board.is_webcam)
1437
		rc = v4l2_device_call_until_err(&v4l2->v4l2_dev, 0,
1438 1439
						video, g_parm, p);
	else
1440
		v4l2_video_std_frame_period(v4l2->norm,
1441
					    &p->parm.capture.timeperframe);
1442 1443 1444 1445 1446 1447 1448

	return rc;
}

static int vidioc_s_parm(struct file *file, void *priv,
			 struct v4l2_streamparm *p)
{
1449
	struct em28xx *dev = video_drvdata(file);
1450

1451
	p->parm.capture.readbuffers = EM28XX_MIN_BUF;
1452 1453
	return v4l2_device_call_until_err(&dev->v4l2->v4l2_dev,
					  0, video, s_parm, p);
1454 1455
}

1456 1457 1458
static const char * const iname[] = {
	[EM28XX_VMUX_COMPOSITE]	 = "Composite",
	[EM28XX_VMUX_SVIDEO]	 = "S-Video",
1459
	[EM28XX_VMUX_TELEVISION] = "Television",
1460
	[EM28XX_RADIO]		 = "Radio",
1461
};
1462

1463
static int vidioc_enum_input(struct file *file, void *priv,
1464
			     struct v4l2_input *i)
1465
{
1466
	struct em28xx *dev = video_drvdata(file);
1467
	unsigned int       n;
1468

1469 1470 1471 1472 1473
	n = i->index;
	if (n >= MAX_EM28XX_INPUT)
		return -EINVAL;
	if (0 == INPUT(n)->type)
		return -EINVAL;
1474

1475 1476
	i->index = n;
	i->type = V4L2_INPUT_TYPE_CAMERA;
1477

1478
	strcpy(i->name, iname[INPUT(n)->type]);
1479

1480
	if ((EM28XX_VMUX_TELEVISION == INPUT(n)->type))
1481 1482
		i->type = V4L2_INPUT_TYPE_TUNER;

1483
	i->std = dev->v4l2->vdev.tvnorms;
1484 1485 1486
	/* webcams do not have the STD API */
	if (dev->board.is_webcam)
		i->capabilities = 0;
1487 1488

	return 0;
1489 1490
}

1491
static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
1492
{
1493
	struct em28xx *dev = video_drvdata(file);
1494

1495 1496 1497 1498 1499 1500 1501
	*i = dev->ctl_input;

	return 0;
}

static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
{
1502
	struct em28xx *dev = video_drvdata(file);
1503 1504 1505 1506 1507

	if (i >= MAX_EM28XX_INPUT)
		return -EINVAL;
	if (0 == INPUT(i)->type)
		return -EINVAL;
1508

1509
	video_mux(dev, i);
1510 1511 1512 1513 1514
	return 0;
}

static int vidioc_g_audio(struct file *file, void *priv, struct v4l2_audio *a)
{
1515
	struct em28xx *dev = video_drvdata(file);
1516

1517 1518
	switch (a->index) {
	case EM28XX_AMUX_VIDEO:
1519
		strcpy(a->name, "Television");
1520 1521
		break;
	case EM28XX_AMUX_LINE_IN:
1522
		strcpy(a->name, "Line In");
1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544
		break;
	case EM28XX_AMUX_VIDEO2:
		strcpy(a->name, "Television alt");
		break;
	case EM28XX_AMUX_PHONE:
		strcpy(a->name, "Phone");
		break;
	case EM28XX_AMUX_MIC:
		strcpy(a->name, "Mic");
		break;
	case EM28XX_AMUX_CD:
		strcpy(a->name, "CD");
		break;
	case EM28XX_AMUX_AUX:
		strcpy(a->name, "Aux");
		break;
	case EM28XX_AMUX_PCM_OUT:
		strcpy(a->name, "PCM");
		break;
	default:
		return -EINVAL;
	}
1545

1546
	a->index = dev->ctl_ainput;
1547 1548 1549 1550 1551
	a->capability = V4L2_AUDCAP_STEREO;

	return 0;
}

1552
static int vidioc_s_audio(struct file *file, void *priv, const struct v4l2_audio *a)
1553
{
1554
	struct em28xx *dev = video_drvdata(file);
1555

1556 1557 1558 1559 1560
	if (a->index >= MAX_EM28XX_INPUT)
		return -EINVAL;
	if (0 == INPUT(a->index)->type)
		return -EINVAL;

1561 1562
	dev->ctl_ainput = INPUT(a->index)->amux;
	dev->ctl_aoutput = INPUT(a->index)->aout;
1563 1564 1565

	if (!dev->ctl_aoutput)
		dev->ctl_aoutput = EM28XX_AOUT_MASTER;
1566

1567 1568 1569 1570
	return 0;
}

static int vidioc_g_tuner(struct file *file, void *priv,
1571
			  struct v4l2_tuner *t)
1572
{
1573
	struct em28xx *dev = video_drvdata(file);
1574 1575 1576 1577 1578 1579

	if (0 != t->index)
		return -EINVAL;

	strcpy(t->name, "Tuner");

1580
	v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, g_tuner, t);
1581
	return 0;
1582 1583
}

1584
static int vidioc_s_tuner(struct file *file, void *priv,
1585
			  const struct v4l2_tuner *t)
1586
{
1587
	struct em28xx *dev = video_drvdata(file);
1588 1589 1590 1591

	if (0 != t->index)
		return -EINVAL;

1592
	v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, s_tuner, t);
1593
	return 0;
1594 1595
}

1596
static int vidioc_g_frequency(struct file *file, void *priv,
1597
			      struct v4l2_frequency *f)
1598
{
1599
	struct em28xx         *dev = video_drvdata(file);
1600
	struct em28xx_v4l2    *v4l2 = dev->v4l2;
1601

1602 1603 1604
	if (0 != f->tuner)
		return -EINVAL;

1605
	f->frequency = v4l2->frequency;
1606 1607 1608 1609
	return 0;
}

static int vidioc_s_frequency(struct file *file, void *priv,
1610
			      const struct v4l2_frequency *f)
1611
{
1612
	struct v4l2_frequency  new_freq = *f;
1613
	struct em28xx             *dev  = video_drvdata(file);
1614
	struct em28xx_v4l2        *v4l2 = dev->v4l2;
1615 1616 1617 1618

	if (0 != f->tuner)
		return -EINVAL;

1619 1620
	v4l2_device_call_all(&v4l2->v4l2_dev, 0, tuner, s_frequency, f);
	v4l2_device_call_all(&v4l2->v4l2_dev, 0, tuner, g_frequency, &new_freq);
1621
	v4l2->frequency = new_freq.frequency;
1622

1623 1624
	return 0;
}
1625

1626
#ifdef CONFIG_VIDEO_ADV_DEBUG
1627
static int vidioc_g_chip_info(struct file *file, void *priv,
1628
			      struct v4l2_dbg_chip_info *chip)
1629
{
1630
	struct em28xx *dev = video_drvdata(file);
1631 1632 1633 1634 1635 1636

	if (chip->match.addr > 1)
		return -EINVAL;
	if (chip->match.addr == 1)
		strlcpy(chip->name, "ac97", sizeof(chip->name));
	else
1637 1638
		strlcpy(chip->name,
			dev->v4l2->v4l2_dev.name, sizeof(chip->name));
1639 1640 1641
	return 0;
}

1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652
static int em28xx_reg_len(int reg)
{
	switch (reg) {
	case EM28XX_R40_AC97LSB:
	case EM28XX_R30_HSCALELOW:
	case EM28XX_R32_VSCALELOW:
		return 2;
	default:
		return 1;
	}
}
1653

1654
static int vidioc_g_register(struct file *file, void *priv,
1655
			     struct v4l2_dbg_register *reg)
1656
{
1657
	struct em28xx *dev = video_drvdata(file);
1658 1659
	int ret;

1660 1661 1662
	if (reg->match.addr > 1)
		return -EINVAL;
	if (reg->match.addr) {
1663 1664 1665 1666 1667
		ret = em28xx_read_ac97(dev, reg->reg);
		if (ret < 0)
			return ret;

		reg->val = ret;
1668
		reg->size = 1;
1669
		return 0;
1670
	}
1671

1672
	/* Match host */
1673 1674
	reg->size = em28xx_reg_len(reg->reg);
	if (reg->size == 1) {
1675
		ret = em28xx_read_reg(dev, reg->reg);
1676

1677 1678 1679 1680 1681
		if (ret < 0)
			return ret;

		reg->val = ret;
	} else {
1682
		__le16 val = 0;
1683

1684
		ret = dev->em28xx_read_reg_req_len(dev, USB_REQ_GET_STATUS,
1685 1686 1687 1688
						   reg->reg, (char *)&val, 2);
		if (ret < 0)
			return ret;

1689
		reg->val = le16_to_cpu(val);
1690 1691 1692 1693 1694 1695
	}

	return 0;
}

static int vidioc_s_register(struct file *file, void *priv,
1696
			     const struct v4l2_dbg_register *reg)
1697
{
1698
	struct em28xx *dev = video_drvdata(file);
1699
	__le16 buf;
1700

1701
	if (reg->match.addr > 1)
1702
		return -EINVAL;
1703 1704
	if (reg->match.addr)
		return em28xx_write_ac97(dev, reg->reg, reg->val);
1705

1706
	/* Match host */
1707
	buf = cpu_to_le16(reg->val);
1708

H
Hans Verkuil 已提交
1709
	return em28xx_write_regs(dev, reg->reg, (char *)&buf,
1710
			       em28xx_reg_len(reg->reg));
1711 1712 1713
}
#endif

1714
static int vidioc_querycap(struct file *file, void  *priv,
1715
			   struct v4l2_capability *cap)
1716
{
1717
	struct video_device   *vdev = video_devdata(file);
1718
	struct em28xx         *dev  = video_drvdata(file);
1719
	struct em28xx_v4l2    *v4l2 = dev->v4l2;
1720 1721 1722

	strlcpy(cap->driver, "em28xx", sizeof(cap->driver));
	strlcpy(cap->card, em28xx_boards[dev->model].name, sizeof(cap->card));
1723
	usb_make_path(dev->udev, cap->bus_info, sizeof(cap->bus_info));
1724

H
Hans Verkuil 已提交
1725 1726 1727 1728 1729 1730
	if (vdev->vfl_type == VFL_TYPE_GRABBER)
		cap->device_caps = V4L2_CAP_READWRITE |
			V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
	else if (vdev->vfl_type == VFL_TYPE_RADIO)
		cap->device_caps = V4L2_CAP_RADIO;
	else
1731
		cap->device_caps = V4L2_CAP_READWRITE | V4L2_CAP_VBI_CAPTURE;
1732

1733
	if (dev->int_audio_type != EM28XX_INT_AUDIO_NONE)
H
Hans Verkuil 已提交
1734
		cap->device_caps |= V4L2_CAP_AUDIO;
1735

1736
	if (dev->tuner_type != TUNER_ABSENT)
H
Hans Verkuil 已提交
1737
		cap->device_caps |= V4L2_CAP_TUNER;
1738

H
Hans Verkuil 已提交
1739 1740
	cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS |
		V4L2_CAP_READWRITE | V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
1741
	if (video_is_registered(&v4l2->vbi_dev))
1742
		cap->capabilities |= V4L2_CAP_VBI_CAPTURE;
1743
	if (video_is_registered(&v4l2->radio_dev))
H
Hans Verkuil 已提交
1744
		cap->capabilities |= V4L2_CAP_RADIO;
1745
	return 0;
1746 1747
}

1748
static int vidioc_enum_fmt_vid_cap(struct file *file, void  *priv,
1749
				   struct v4l2_fmtdesc *f)
1750
{
1751
	if (unlikely(f->index >= ARRAY_SIZE(format)))
1752
		return -EINVAL;
1753

1754 1755
	strlcpy(f->description, format[f->index].name, sizeof(f->description));
	f->pixelformat = format[f->index].fourcc;
1756 1757

	return 0;
1758 1759
}

1760 1761 1762
static int vidioc_enum_framesizes(struct file *file, void *priv,
				  struct v4l2_frmsizeenum *fsize)
{
1763
	struct em28xx         *dev = video_drvdata(file);
1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788
	struct em28xx_fmt     *fmt;
	unsigned int	      maxw = norm_maxw(dev);
	unsigned int	      maxh = norm_maxh(dev);

	fmt = format_by_fourcc(fsize->pixel_format);
	if (!fmt) {
		em28xx_videodbg("Fourcc format (%08x) invalid.\n",
				fsize->pixel_format);
		return -EINVAL;
	}

	if (dev->board.is_em2800) {
		if (fsize->index > 1)
			return -EINVAL;
		fsize->type = V4L2_FRMSIZE_TYPE_DISCRETE;
		fsize->discrete.width = maxw / (1 + fsize->index);
		fsize->discrete.height = maxh / (1 + fsize->index);
		return 0;
	}

	if (fsize->index != 0)
		return -EINVAL;

	/* Report a continuous range */
	fsize->type = V4L2_FRMSIZE_TYPE_STEPWISE;
1789 1790 1791 1792 1793 1794
	scale_to_size(dev, EM28XX_HVSCALE_MAX, EM28XX_HVSCALE_MAX,
		      &fsize->stepwise.min_width, &fsize->stepwise.min_height);
	if (fsize->stepwise.min_width < 48)
		fsize->stepwise.min_width = 48;
	if (fsize->stepwise.min_height < 38)
		fsize->stepwise.min_height = 38;
1795 1796 1797 1798 1799 1800 1801
	fsize->stepwise.max_width = maxw;
	fsize->stepwise.max_height = maxh;
	fsize->stepwise.step_width = 1;
	fsize->stepwise.step_height = 1;
	return 0;
}

1802 1803 1804 1805 1806
/* RAW VBI ioctls */

static int vidioc_g_fmt_vbi_cap(struct file *file, void *priv,
				struct v4l2_format *format)
{
1807
	struct em28xx         *dev  = video_drvdata(file);
1808
	struct em28xx_v4l2    *v4l2 = dev->v4l2;
1809

1810
	format->fmt.vbi.samples_per_line = v4l2->vbi_width;
1811 1812 1813
	format->fmt.vbi.sample_format = V4L2_PIX_FMT_GREY;
	format->fmt.vbi.offset = 0;
	format->fmt.vbi.flags = 0;
1814
	format->fmt.vbi.sampling_rate = 6750000 * 4 / 2;
1815 1816
	format->fmt.vbi.count[0] = v4l2->vbi_height;
	format->fmt.vbi.count[1] = v4l2->vbi_height;
1817
	memset(format->fmt.vbi.reserved, 0, sizeof(format->fmt.vbi.reserved));
1818 1819

	/* Varies by video standard (NTSC, PAL, etc.) */
1820
	if (v4l2->norm & V4L2_STD_525_60) {
1821 1822 1823
		/* NTSC */
		format->fmt.vbi.start[0] = 10;
		format->fmt.vbi.start[1] = 273;
1824
	} else if (v4l2->norm & V4L2_STD_625_50) {
1825 1826 1827 1828
		/* PAL */
		format->fmt.vbi.start[0] = 6;
		format->fmt.vbi.start[1] = 318;
	}
1829 1830 1831 1832

	return 0;
}

1833 1834 1835 1836 1837 1838 1839
/* ----------------------------------------------------------- */
/* RADIO ESPECIFIC IOCTLS                                      */
/* ----------------------------------------------------------- */

static int radio_g_tuner(struct file *file, void *priv,
			 struct v4l2_tuner *t)
{
1840
	struct em28xx *dev = video_drvdata(file);
1841 1842 1843 1844 1845 1846

	if (unlikely(t->index > 0))
		return -EINVAL;

	strcpy(t->name, "Radio");

1847
	v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, g_tuner, t);
1848

1849 1850 1851 1852
	return 0;
}

static int radio_s_tuner(struct file *file, void *priv,
1853
			 const struct v4l2_tuner *t)
1854
{
1855
	struct em28xx *dev = video_drvdata(file);
1856 1857 1858 1859

	if (0 != t->index)
		return -EINVAL;

1860
	v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, s_tuner, t);
1861 1862 1863 1864

	return 0;
}

1865 1866 1867 1868 1869 1870 1871
/*
 * em28xx_free_v4l2() - Free struct em28xx_v4l2
 *
 * @ref: struct kref for struct em28xx_v4l2
 *
 * Called when all users of struct em28xx_v4l2 are gone
 */
1872
static void em28xx_free_v4l2(struct kref *ref)
1873 1874 1875
{
	struct em28xx_v4l2 *v4l2 = container_of(ref, struct em28xx_v4l2, ref);

1876
	v4l2->dev->v4l2 = NULL;
1877 1878 1879
	kfree(v4l2);
}

1880 1881 1882 1883
/*
 * em28xx_v4l2_open()
 * inits the device and starts isoc transfer
 */
1884
static int em28xx_v4l2_open(struct file *filp)
1885
{
1886 1887
	struct video_device *vdev = video_devdata(filp);
	struct em28xx *dev = video_drvdata(filp);
1888
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
1889
	enum v4l2_buf_type fh_type = 0;
1890
	int ret;
1891

1892 1893 1894 1895 1896 1897 1898
	switch (vdev->vfl_type) {
	case VFL_TYPE_GRABBER:
		fh_type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
		break;
	case VFL_TYPE_VBI:
		fh_type = V4L2_BUF_TYPE_VBI_CAPTURE;
		break;
1899 1900 1901 1902
	case VFL_TYPE_RADIO:
		break;
	default:
		return -EINVAL;
1903
	}
1904

1905 1906 1907
	em28xx_videodbg("open dev=%s type=%s users=%d\n",
			video_device_node_name(vdev), v4l2_type_names[fh_type],
			v4l2->users);
1908

1909 1910
	if (mutex_lock_interruptible(&dev->lock))
		return -ERESTARTSYS;
1911 1912 1913 1914 1915

	ret = v4l2_fh_open(filp);
	if (ret) {
		em28xx_errdev("%s: v4l2_fh_open() returned error %d\n",
			      __func__, ret);
1916
		mutex_unlock(&dev->lock);
1917
		return ret;
1918
	}
1919

1920
	if (v4l2->users == 0) {
1921
		em28xx_set_mode(dev, EM28XX_ANALOG_MODE);
1922

1923 1924 1925 1926 1927 1928
		if (vdev->vfl_type != VFL_TYPE_RADIO)
			em28xx_resolution_set(dev);

		/*
		 * Needed, since GPIO might have disabled power
		 * of some i2c devices
1929
		 */
1930
		em28xx_wake_i2c(dev);
1931
	}
1932 1933

	if (vdev->vfl_type == VFL_TYPE_RADIO) {
1934
		em28xx_videodbg("video_open: setting radio device\n");
1935
		v4l2_device_call_all(&v4l2->v4l2_dev, 0, tuner, s_radio);
1936
	}
1937

1938
	kref_get(&dev->ref);
1939
	kref_get(&v4l2->ref);
1940
	v4l2->users++;
1941

1942
	mutex_unlock(&dev->lock);
1943

1944
	return 0;
1945
}
1946

1947
/*
1948
 * em28xx_v4l2_fini()
1949 1950 1951
 * unregisters the v4l2,i2c and usb devices
 * called when the device gets disconected or at module unload
*/
1952
static int em28xx_v4l2_fini(struct em28xx *dev)
1953
{
1954 1955
	struct em28xx_v4l2 *v4l2 = dev->v4l2;

1956 1957 1958 1959 1960
	if (dev->is_audio_only) {
		/* Shouldn't initialize IR for this interface */
		return 0;
	}

1961 1962 1963 1964
	if (!dev->has_video) {
		/* This device does not support the v4l2 extension */
		return 0;
	}
1965

1966 1967 1968
	if (v4l2 == NULL)
		return 0;

1969
	em28xx_info("Closing video extension\n");
1970

1971 1972
	mutex_lock(&dev->lock);

1973
	v4l2_device_disconnect(&v4l2->v4l2_dev);
1974

1975 1976
	em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);

1977
	if (video_is_registered(&v4l2->radio_dev)) {
1978
		em28xx_info("V4L2 device %s deregistered\n",
1979 1980
			    video_device_node_name(&v4l2->radio_dev));
		video_unregister_device(&v4l2->radio_dev);
1981
	}
1982
	if (video_is_registered(&v4l2->vbi_dev)) {
1983
		em28xx_info("V4L2 device %s deregistered\n",
1984 1985
			    video_device_node_name(&v4l2->vbi_dev));
		video_unregister_device(&v4l2->vbi_dev);
1986
	}
1987
	if (video_is_registered(&v4l2->vdev)) {
1988
		em28xx_info("V4L2 device %s deregistered\n",
1989 1990
			    video_device_node_name(&v4l2->vdev));
		video_unregister_device(&v4l2->vdev);
1991
	}
1992

1993
	v4l2_ctrl_handler_free(&v4l2->ctrl_handler);
1994
	v4l2_device_unregister(&v4l2->v4l2_dev);
1995

1996 1997 1998
	if (v4l2->clk) {
		v4l2_clk_unregister_fixed(v4l2->clk);
		v4l2->clk = NULL;
1999 2000
	}

2001 2002
	kref_put(&v4l2->ref, em28xx_free_v4l2);

2003
	mutex_unlock(&dev->lock);
2004

2005
	kref_put(&dev->ref, em28xx_free_device);
2006

2007
	return 0;
2008
}
2009

2010 2011 2012 2013 2014 2015 2016 2017
static int em28xx_v4l2_suspend(struct em28xx *dev)
{
	if (dev->is_audio_only)
		return 0;

	if (!dev->has_video)
		return 0;

2018
	em28xx_info("Suspending video extension\n");
2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030
	em28xx_stop_urbs(dev);
	return 0;
}

static int em28xx_v4l2_resume(struct em28xx *dev)
{
	if (dev->is_audio_only)
		return 0;

	if (!dev->has_video)
		return 0;

2031
	em28xx_info("Resuming video extension\n");
2032 2033 2034 2035
	/* what do we do here */
	return 0;
}

2036 2037
/*
 * em28xx_v4l2_close()
2038 2039
 * stops streaming and deallocates all resources allocated by the v4l2
 * calls and ioctls
2040
 */
2041
static int em28xx_v4l2_close(struct file *filp)
2042
{
2043
	struct em28xx         *dev  = video_drvdata(filp);
2044
	struct em28xx_v4l2    *v4l2 = dev->v4l2;
2045
	int              errCode;
2046

2047
	em28xx_videodbg("users=%d\n", v4l2->users);
2048

2049 2050
	vb2_fop_release(filp);
	mutex_lock(&dev->lock);
2051

2052
	if (v4l2->users == 1) {
2053 2054
		/* No sense to try to write to the device */
		if (dev->disconnected)
2055
			goto exit;
2056

2057
		/* Save some power by putting tuner to sleep */
2058
		v4l2_device_call_all(&v4l2->v4l2_dev, 0, core, s_power, 0);
2059

2060
		/* do this before setting alternate! */
2061
		em28xx_set_mode(dev, EM28XX_SUSPEND);
2062

2063 2064 2065 2066 2067 2068 2069 2070
		/* set alternate 0 */
		dev->alt = 0;
		em28xx_videodbg("setting alternate 0\n");
		errCode = usb_set_interface(dev->udev, 0, 0);
		if (errCode < 0) {
			em28xx_errdev("cannot change alternate number to "
					"0 (error=%i)\n", errCode);
		}
2071
	}
2072

2073
exit:
2074
	v4l2->users--;
2075
	kref_put(&v4l2->ref, em28xx_free_v4l2);
2076
	mutex_unlock(&dev->lock);
2077 2078
	kref_put(&dev->ref, em28xx_free_device);

2079 2080
	return 0;
}
2081

2082
static const struct v4l2_file_operations em28xx_v4l_fops = {
2083 2084 2085
	.owner         = THIS_MODULE,
	.open          = em28xx_v4l2_open,
	.release       = em28xx_v4l2_close,
2086 2087 2088
	.read          = vb2_fop_read,
	.poll          = vb2_fop_poll,
	.mmap          = vb2_fop_mmap,
H
Hans Verkuil 已提交
2089
	.unlocked_ioctl = video_ioctl2,
2090
};
2091

2092
static const struct v4l2_ioctl_ops video_ioctl_ops = {
2093
	.vidioc_querycap            = vidioc_querycap,
2094 2095 2096 2097
	.vidioc_enum_fmt_vid_cap    = vidioc_enum_fmt_vid_cap,
	.vidioc_g_fmt_vid_cap       = vidioc_g_fmt_vid_cap,
	.vidioc_try_fmt_vid_cap     = vidioc_try_fmt_vid_cap,
	.vidioc_s_fmt_vid_cap       = vidioc_s_fmt_vid_cap,
2098
	.vidioc_g_fmt_vbi_cap       = vidioc_g_fmt_vbi_cap,
2099
	.vidioc_try_fmt_vbi_cap     = vidioc_g_fmt_vbi_cap,
2100
	.vidioc_s_fmt_vbi_cap       = vidioc_g_fmt_vbi_cap,
2101
	.vidioc_enum_framesizes     = vidioc_enum_framesizes,
2102 2103 2104
	.vidioc_g_audio             = vidioc_g_audio,
	.vidioc_s_audio             = vidioc_s_audio,

2105 2106 2107 2108 2109 2110 2111
	.vidioc_reqbufs             = vb2_ioctl_reqbufs,
	.vidioc_create_bufs         = vb2_ioctl_create_bufs,
	.vidioc_prepare_buf         = vb2_ioctl_prepare_buf,
	.vidioc_querybuf            = vb2_ioctl_querybuf,
	.vidioc_qbuf                = vb2_ioctl_qbuf,
	.vidioc_dqbuf               = vb2_ioctl_dqbuf,

2112
	.vidioc_g_std               = vidioc_g_std,
2113
	.vidioc_querystd            = vidioc_querystd,
2114
	.vidioc_s_std               = vidioc_s_std,
2115 2116
	.vidioc_g_parm		    = vidioc_g_parm,
	.vidioc_s_parm		    = vidioc_s_parm,
2117 2118 2119
	.vidioc_enum_input          = vidioc_enum_input,
	.vidioc_g_input             = vidioc_g_input,
	.vidioc_s_input             = vidioc_s_input,
2120 2121
	.vidioc_streamon            = vb2_ioctl_streamon,
	.vidioc_streamoff           = vb2_ioctl_streamoff,
2122 2123 2124 2125
	.vidioc_g_tuner             = vidioc_g_tuner,
	.vidioc_s_tuner             = vidioc_s_tuner,
	.vidioc_g_frequency         = vidioc_g_frequency,
	.vidioc_s_frequency         = vidioc_s_frequency,
2126 2127
	.vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
	.vidioc_unsubscribe_event = v4l2_event_unsubscribe,
2128
#ifdef CONFIG_VIDEO_ADV_DEBUG
2129
	.vidioc_g_chip_info         = vidioc_g_chip_info,
2130 2131 2132
	.vidioc_g_register          = vidioc_g_register,
	.vidioc_s_register          = vidioc_s_register,
#endif
2133 2134 2135
};

static const struct video_device em28xx_video_template = {
2136 2137
	.fops		= &em28xx_v4l_fops,
	.ioctl_ops	= &video_ioctl_ops,
2138
	.release	= video_device_release_empty,
2139
	.tvnorms	= V4L2_STD_ALL,
2140 2141
};

2142
static const struct v4l2_file_operations radio_fops = {
2143 2144 2145
	.owner         = THIS_MODULE,
	.open          = em28xx_v4l2_open,
	.release       = em28xx_v4l2_close,
2146
	.unlocked_ioctl = video_ioctl2,
2147 2148 2149
};

static const struct v4l2_ioctl_ops radio_ioctl_ops = {
H
Hans Verkuil 已提交
2150
	.vidioc_querycap      = vidioc_querycap,
2151 2152 2153 2154
	.vidioc_g_tuner       = radio_g_tuner,
	.vidioc_s_tuner       = radio_s_tuner,
	.vidioc_g_frequency   = vidioc_g_frequency,
	.vidioc_s_frequency   = vidioc_s_frequency,
2155 2156
	.vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
	.vidioc_unsubscribe_event = v4l2_event_unsubscribe,
2157
#ifdef CONFIG_VIDEO_ADV_DEBUG
2158
	.vidioc_g_chip_info   = vidioc_g_chip_info,
2159 2160 2161
	.vidioc_g_register    = vidioc_g_register,
	.vidioc_s_register    = vidioc_s_register,
#endif
2162 2163
};

2164
static struct video_device em28xx_radio_template = {
2165 2166
	.fops		= &radio_fops,
	.ioctl_ops	= &radio_ioctl_ops,
2167
	.release	= video_device_release_empty,
2168 2169
};

2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187
/* I2C possible address to saa7115, tvp5150, msp3400, tvaudio */
static unsigned short saa711x_addrs[] = {
	0x4a >> 1, 0x48 >> 1,   /* SAA7111, SAA7111A and SAA7113 */
	0x42 >> 1, 0x40 >> 1,   /* SAA7114, SAA7115 and SAA7118 */
	I2C_CLIENT_END };

static unsigned short tvp5150_addrs[] = {
	0xb8 >> 1,
	0xba >> 1,
	I2C_CLIENT_END
};

static unsigned short msp3400_addrs[] = {
	0x80 >> 1,
	0x88 >> 1,
	I2C_CLIENT_END
};

2188
/******************************** usb interface ******************************/
2189

2190 2191 2192 2193
static void em28xx_vdev_init(struct em28xx *dev,
			     struct video_device *vfd,
			     const struct video_device *template,
			     const char *type_name)
2194
{
2195
	*vfd		= *template;
2196
	vfd->v4l2_dev	= &dev->v4l2->v4l2_dev;
H
Hans Verkuil 已提交
2197
	vfd->lock	= &dev->lock;
2198 2199
	if (dev->board.is_webcam)
		vfd->tvnorms = 0;
2200 2201 2202 2203

	snprintf(vfd->name, sizeof(vfd->name), "%s %s",
		 dev->name, type_name);

2204
	video_set_drvdata(vfd, dev);
2205 2206
}

2207
static void em28xx_tuner_setup(struct em28xx *dev, unsigned short tuner_addr)
2208
{
2209 2210 2211 2212
	struct em28xx_v4l2      *v4l2 = dev->v4l2;
	struct v4l2_device      *v4l2_dev = &v4l2->v4l2_dev;
	struct tuner_setup      tun_setup;
	struct v4l2_frequency   f;
2213 2214 2215 2216 2217 2218 2219 2220 2221 2222

	memset(&tun_setup, 0, sizeof(tun_setup));

	tun_setup.mode_mask = T_ANALOG_TV | T_RADIO;
	tun_setup.tuner_callback = em28xx_tuner_callback;

	if (dev->board.radio.type) {
		tun_setup.type = dev->board.radio.type;
		tun_setup.addr = dev->board.radio_addr;

2223 2224
		v4l2_device_call_all(v4l2_dev,
				     0, tuner, s_type_addr, &tun_setup);
2225 2226 2227 2228
	}

	if ((dev->tuner_type != TUNER_ABSENT) && (dev->tuner_type)) {
		tun_setup.type   = dev->tuner_type;
2229
		tun_setup.addr   = tuner_addr;
2230

2231 2232
		v4l2_device_call_all(v4l2_dev,
				     0, tuner, s_type_addr, &tun_setup);
2233 2234
	}

2235
	if (dev->board.tda9887_conf) {
2236 2237 2238
		struct v4l2_priv_tun_config tda9887_cfg;

		tda9887_cfg.tuner = TUNER_TDA9887;
2239
		tda9887_cfg.priv = &dev->board.tda9887_conf;
2240

2241 2242
		v4l2_device_call_all(v4l2_dev,
				     0, tuner, s_config, &tda9887_cfg);
2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256
	}

	if (dev->tuner_type == TUNER_XC2028) {
		struct v4l2_priv_tun_config  xc2028_cfg;
		struct xc2028_ctrl           ctl;

		memset(&xc2028_cfg, 0, sizeof(xc2028_cfg));
		memset(&ctl, 0, sizeof(ctl));

		em28xx_setup_xc3028(dev, &ctl);

		xc2028_cfg.tuner = TUNER_XC2028;
		xc2028_cfg.priv  = &ctl;

2257
		v4l2_device_call_all(v4l2_dev, 0, tuner, s_config, &xc2028_cfg);
2258 2259 2260 2261 2262 2263
	}

	/* configure tuner */
	f.tuner = 0;
	f.type = V4L2_TUNER_ANALOG_TV;
	f.frequency = 9076;     /* just a magic number */
2264
	v4l2->frequency = f.frequency;
2265
	v4l2_device_call_all(v4l2_dev, 0, tuner, s_frequency, &f);
2266 2267
}

2268
static int em28xx_v4l2_init(struct em28xx *dev)
2269
{
2270
	u8 val;
2271
	int ret;
2272
	unsigned int maxw;
2273
	struct v4l2_ctrl_handler *hdl;
2274
	struct em28xx_v4l2 *v4l2;
2275

2276 2277 2278 2279 2280
	if (dev->is_audio_only) {
		/* Shouldn't initialize IR for this interface */
		return 0;
	}

2281
	if (!dev->has_video) {
2282 2283 2284
		/* This device does not support the v4l2 extension */
		return 0;
	}
2285

2286
	em28xx_info("Registering V4L2 extension\n");
2287

2288 2289
	mutex_lock(&dev->lock);

2290 2291 2292 2293 2294 2295 2296
	v4l2 = kzalloc(sizeof(struct em28xx_v4l2), GFP_KERNEL);
	if (v4l2 == NULL) {
		em28xx_info("em28xx_v4l: memory allocation failed\n");
		mutex_unlock(&dev->lock);
		return -ENOMEM;
	}
	kref_init(&v4l2->ref);
2297
	v4l2->dev = dev;
2298 2299 2300
	dev->v4l2 = v4l2;

	ret = v4l2_device_register(&dev->udev->dev, &v4l2->v4l2_dev);
2301 2302 2303 2304 2305
	if (ret < 0) {
		em28xx_errdev("Call to v4l2_device_register() failed!\n");
		goto err;
	}

2306
	hdl = &v4l2->ctrl_handler;
2307
	v4l2_ctrl_handler_init(hdl, 8);
2308
	v4l2->v4l2_dev.ctrl_handler = hdl;
2309

2310
	if (dev->board.is_webcam)
2311
		v4l2->progressive = true;
2312

2313 2314 2315
	/*
	 * Default format, used for tvp5150 or saa711x output formats
	 */
2316 2317 2318
	v4l2->vinmode = 0x10;
	v4l2->vinctl  = EM28XX_VINCTRL_INTERLACED |
			EM28XX_VINCTRL_CCIR656_ENABLE;
2319 2320 2321 2322

	/* request some modules */

	if (dev->board.has_msp34xx)
2323 2324 2325
		v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
				    &dev->i2c_adap[dev->def_i2c_bus],
				    "msp3400", 0, msp3400_addrs);
2326 2327

	if (dev->board.decoder == EM28XX_SAA711X)
2328 2329 2330
		v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
				    &dev->i2c_adap[dev->def_i2c_bus],
				    "saa7115_auto", 0, saa711x_addrs);
2331 2332

	if (dev->board.decoder == EM28XX_TVP5150)
2333 2334 2335
		v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
				    &dev->i2c_adap[dev->def_i2c_bus],
				    "tvp5150", 0, tvp5150_addrs);
2336 2337

	if (dev->board.adecoder == EM28XX_TVAUDIO)
2338 2339 2340
		v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
				    &dev->i2c_adap[dev->def_i2c_bus],
				    "tvaudio", dev->board.tvaudio_addr, NULL);
2341 2342 2343 2344

	/* Initialize tuner and camera */

	if (dev->board.tuner_type != TUNER_ABSENT) {
2345
		unsigned short tuner_addr = dev->board.tuner_addr;
2346
		int has_demod = (dev->board.tda9887_conf & TDA9887_PRESENT);
2347 2348

		if (dev->board.radio.type)
2349
			v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2350 2351 2352
					    &dev->i2c_adap[dev->def_i2c_bus],
					    "tuner", dev->board.radio_addr,
					    NULL);
2353 2354

		if (has_demod)
2355
			v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2356 2357 2358
					    &dev->i2c_adap[dev->def_i2c_bus],
					    "tuner", 0,
					    v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
2359
		if (tuner_addr == 0) {
2360 2361 2362 2363
			enum v4l2_i2c_tuner_type type =
				has_demod ? ADDRS_TV_WITH_DEMOD : ADDRS_TV;
			struct v4l2_subdev *sd;

2364
			sd = v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2365 2366 2367
						 &dev->i2c_adap[dev->def_i2c_bus],
						 "tuner", 0,
						 v4l2_i2c_tuner_addrs(type));
2368 2369

			if (sd)
2370
				tuner_addr = v4l2_i2c_subdev_addr(sd);
2371
		} else {
2372 2373
			v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
					    &dev->i2c_adap[dev->def_i2c_bus],
2374
					    "tuner", tuner_addr, NULL);
2375
		}
2376 2377

		em28xx_tuner_setup(dev, tuner_addr);
2378 2379
	}

2380 2381
	if (dev->em28xx_sensor != EM28XX_NOSENSOR)
		em28xx_init_camera(dev);
2382 2383 2384 2385 2386

	/* Configure audio */
	ret = em28xx_audio_setup(dev);
	if (ret < 0) {
		em28xx_errdev("%s: Error while setting audio - error [%d]!\n",
2387
			      __func__, ret);
2388 2389 2390 2391
		goto unregister_dev;
	}
	if (dev->audio_mode.ac97 != EM28XX_NO_AC97) {
		v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2392
				  V4L2_CID_AUDIO_MUTE, 0, 1, 1, 1);
2393
		v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2394
				  V4L2_CID_AUDIO_VOLUME, 0, 0x1f, 1, 0x1f);
2395 2396 2397
	} else {
		/* install the em28xx notify callback */
		v4l2_ctrl_notify(v4l2_ctrl_find(hdl, V4L2_CID_AUDIO_MUTE),
2398
				 em28xx_ctrl_notify, dev);
2399
		v4l2_ctrl_notify(v4l2_ctrl_find(hdl, V4L2_CID_AUDIO_VOLUME),
2400
				 em28xx_ctrl_notify, dev);
2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428
	}

	/* wake i2c devices */
	em28xx_wake_i2c(dev);

	/* init video dma queues */
	INIT_LIST_HEAD(&dev->vidq.active);
	INIT_LIST_HEAD(&dev->vbiq.active);

	if (dev->board.has_msp34xx) {
		/* Send a reset to other chips via gpio */
		ret = em28xx_write_reg(dev, EM2820_R08_GPIO_CTRL, 0xf7);
		if (ret < 0) {
			em28xx_errdev("%s: em28xx_write_reg - msp34xx(1) failed! error [%d]\n",
				      __func__, ret);
			goto unregister_dev;
		}
		msleep(3);

		ret = em28xx_write_reg(dev, EM2820_R08_GPIO_CTRL, 0xff);
		if (ret < 0) {
			em28xx_errdev("%s: em28xx_write_reg - msp34xx(2) failed! error [%d]\n",
				      __func__, ret);
			goto unregister_dev;
		}
		msleep(3);
	}

2429
	/* set default norm */
2430
	v4l2->norm = V4L2_STD_PAL;
2431
	v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_std, v4l2->norm);
2432
	v4l2->interlaced_fieldmode = EM28XX_INTERLACED_DEFAULT;
2433

2434
	/* Analog specific initialization */
2435
	v4l2->format = &format[0];
2436 2437

	maxw = norm_maxw(dev);
2438 2439 2440 2441
	/* MaxPacketSize for em2800 is too small to capture at full resolution
	 * use half of maxw as the scaler can only scale to 50% */
	if (dev->board.is_em2800)
		maxw /= 2;
2442

2443
	em28xx_set_video_format(dev, format[0].fourcc,
2444
				maxw, norm_maxh(dev));
2445

2446
	video_mux(dev, 0);
2447 2448 2449 2450

	/* Audio defaults */
	dev->mute = 1;
	dev->volume = 0x1f;
2451 2452

/*	em28xx_write_reg(dev, EM28XX_R0E_AUDIOSRC, 0xc0); audio register */
2453 2454 2455
	val = (u8)em28xx_read_reg(dev, EM28XX_R0F_XCLK);
	em28xx_write_reg(dev, EM28XX_R0F_XCLK,
			 (EM28XX_XCLK_AUDIO_UNMUTE | val));
2456 2457 2458

	em28xx_set_outfmt(dev);

2459 2460 2461
	/* Add image controls */
	/* NOTE: at this point, the subdevices are already registered, so bridge
	 * controls are only added/enabled when no subdevice provides them */
2462 2463
	if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_CONTRAST))
		v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2464 2465
				  V4L2_CID_CONTRAST,
				  0, 0x1f, 1, CONTRAST_DEFAULT);
2466 2467
	if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_BRIGHTNESS))
		v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2468 2469
				  V4L2_CID_BRIGHTNESS,
				  -0x80, 0x7f, 1, BRIGHTNESS_DEFAULT);
2470 2471
	if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_SATURATION))
		v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2472 2473
				  V4L2_CID_SATURATION,
				  0, 0x1f, 1, SATURATION_DEFAULT);
2474 2475
	if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_BLUE_BALANCE))
		v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2476 2477
				  V4L2_CID_BLUE_BALANCE,
				  -0x30, 0x30, 1, BLUE_BALANCE_DEFAULT);
2478 2479
	if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_RED_BALANCE))
		v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2480 2481
				  V4L2_CID_RED_BALANCE,
				  -0x30, 0x30, 1, RED_BALANCE_DEFAULT);
2482 2483
	if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_SHARPNESS))
		v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2484 2485 2486 2487 2488
				  V4L2_CID_SHARPNESS,
				  0, 0x0f, 1, SHARPNESS_DEFAULT);

	/* Reset image controls */
	em28xx_colorlevels_set_default(dev);
2489 2490
	v4l2_ctrl_handler_setup(hdl);
	ret = hdl->error;
2491 2492
	if (ret)
		goto unregister_dev;
2493

2494
	/* allocate and fill video video_device struct */
2495
	em28xx_vdev_init(dev, &v4l2->vdev, &em28xx_video_template, "video");
2496 2497
	mutex_init(&v4l2->vb_queue_lock);
	mutex_init(&v4l2->vb_vbi_queue_lock);
2498 2499
	v4l2->vdev.queue = &v4l2->vb_vidq;
	v4l2->vdev.queue->lock = &v4l2->vb_queue_lock;
2500

2501 2502
	/* disable inapplicable ioctls */
	if (dev->board.is_webcam) {
2503 2504 2505
		v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_QUERYSTD);
		v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_STD);
		v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_STD);
2506
	} else {
2507
		v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_PARM);
2508
	}
2509
	if (dev->tuner_type == TUNER_ABSENT) {
2510 2511 2512 2513
		v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_TUNER);
		v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_TUNER);
		v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_FREQUENCY);
		v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_FREQUENCY);
2514
	}
2515
	if (dev->int_audio_type == EM28XX_INT_AUDIO_NONE) {
2516 2517
		v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_AUDIO);
		v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_AUDIO);
2518
	}
2519

2520
	/* register v4l2 video video_device */
2521
	ret = video_register_device(&v4l2->vdev, VFL_TYPE_GRABBER,
2522
				    video_nr[dev->devno]);
2523 2524 2525
	if (ret) {
		em28xx_errdev("unable to register video device (error=%i).\n",
			      ret);
2526
		goto unregister_dev;
2527 2528 2529
	}

	/* Allocate and fill vbi video_device struct */
2530
	if (em28xx_vbi_supported(dev) == 1) {
2531 2532
		em28xx_vdev_init(dev, &v4l2->vbi_dev, &em28xx_video_template,
				"vbi");
2533

2534 2535
		v4l2->vbi_dev.queue = &v4l2->vb_vbiq;
		v4l2->vbi_dev.queue->lock = &v4l2->vb_vbi_queue_lock;
2536

2537
		/* disable inapplicable ioctls */
2538
		v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_PARM);
2539
		if (dev->tuner_type == TUNER_ABSENT) {
2540 2541 2542 2543
			v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_G_TUNER);
			v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_TUNER);
			v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_G_FREQUENCY);
			v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_FREQUENCY);
2544
		}
2545
		if (dev->int_audio_type == EM28XX_INT_AUDIO_NONE) {
2546 2547
			v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_G_AUDIO);
			v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_AUDIO);
2548
		}
2549

2550
		/* register v4l2 vbi video_device */
2551
		ret = video_register_device(&v4l2->vbi_dev, VFL_TYPE_VBI,
2552 2553 2554
					    vbi_nr[dev->devno]);
		if (ret < 0) {
			em28xx_errdev("unable to register vbi device\n");
2555
			goto unregister_dev;
2556
		}
2557 2558 2559
	}

	if (em28xx_boards[dev->model].radio.type == EM28XX_RADIO) {
2560 2561 2562
		em28xx_vdev_init(dev, &v4l2->radio_dev, &em28xx_radio_template,
				   "radio");
		ret = video_register_device(&v4l2->radio_dev, VFL_TYPE_RADIO,
2563 2564 2565
					    radio_nr[dev->devno]);
		if (ret < 0) {
			em28xx_errdev("can't register radio device\n");
2566
			goto unregister_dev;
2567
		}
2568
		em28xx_info("Registered radio device as %s\n",
2569
			    video_device_node_name(&v4l2->radio_dev));
2570 2571
	}

2572
	em28xx_info("V4L2 video device registered as %s\n",
2573
		    video_device_node_name(&v4l2->vdev));
2574

2575
	if (video_is_registered(&v4l2->vbi_dev))
2576
		em28xx_info("V4L2 VBI device registered as %s\n",
2577
			    video_device_node_name(&v4l2->vbi_dev));
2578

2579
	/* Save some power by putting tuner to sleep */
2580
	v4l2_device_call_all(&v4l2->v4l2_dev, 0, core, s_power, 0);
2581 2582 2583 2584

	/* initialize videobuf2 stuff */
	em28xx_vb2_setup(dev);

2585 2586
	em28xx_info("V4L2 extension successfully initialized\n");

2587 2588
	kref_get(&dev->ref);

2589
	mutex_unlock(&dev->lock);
2590
	return 0;
2591 2592

unregister_dev:
2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608
	if (video_is_registered(&v4l2->radio_dev)) {
		em28xx_info("V4L2 device %s deregistered\n",
			    video_device_node_name(&v4l2->radio_dev));
		video_unregister_device(&v4l2->radio_dev);
	}
	if (video_is_registered(&v4l2->vbi_dev)) {
		em28xx_info("V4L2 device %s deregistered\n",
			    video_device_node_name(&v4l2->vbi_dev));
		video_unregister_device(&v4l2->vbi_dev);
	}
	if (video_is_registered(&v4l2->vdev)) {
		em28xx_info("V4L2 device %s deregistered\n",
			    video_device_node_name(&v4l2->vdev));
		video_unregister_device(&v4l2->vdev);
	}

2609
	v4l2_ctrl_handler_free(&v4l2->ctrl_handler);
2610
	v4l2_device_unregister(&v4l2->v4l2_dev);
2611
err:
2612 2613
	dev->v4l2 = NULL;
	kref_put(&v4l2->ref, em28xx_free_v4l2);
2614
	mutex_unlock(&dev->lock);
2615
	return ret;
2616
}
2617 2618 2619 2620 2621 2622

static struct em28xx_ops v4l2_ops = {
	.id   = EM28XX_V4L2,
	.name = "Em28xx v4l2 Extension",
	.init = em28xx_v4l2_init,
	.fini = em28xx_v4l2_fini,
2623 2624
	.suspend = em28xx_v4l2_suspend,
	.resume = em28xx_v4l2_resume,
2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638
};

static int __init em28xx_video_register(void)
{
	return em28xx_register_extension(&v4l2_ops);
}

static void __exit em28xx_video_unregister(void)
{
	em28xx_unregister_extension(&v4l2_ops);
}

module_init(em28xx_video_register);
module_exit(em28xx_video_unregister);