em28xx-video.c 69.6 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 1235 1236
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);
}

1237 1238 1239 1240
/* ------------------------------------------------------------------
	IOCTL vidioc handling
   ------------------------------------------------------------------*/

1241
static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
1242
				struct v4l2_format *f)
1243
{
1244
	struct em28xx         *dev = video_drvdata(file);
1245
	struct em28xx_v4l2    *v4l2 = dev->v4l2;
1246

1247 1248
	f->fmt.pix.width = v4l2->width;
	f->fmt.pix.height = v4l2->height;
1249 1250
	f->fmt.pix.pixelformat = v4l2->format->fourcc;
	f->fmt.pix.bytesperline = (v4l2->width * v4l2->format->depth + 7) >> 3;
1251
	f->fmt.pix.sizeimage = f->fmt.pix.bytesperline * v4l2->height;
1252
	f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
1253

1254
	/* FIXME: TOP? NONE? BOTTOM? ALTENATE? */
1255
	if (v4l2->progressive)
1256 1257
		f->fmt.pix.field = V4L2_FIELD_NONE;
	else
1258
		f->fmt.pix.field = v4l2->interlaced_fieldmode ?
1259 1260
			   V4L2_FIELD_INTERLACED : V4L2_FIELD_TOP;
	return 0;
1261 1262
}

1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273
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;
}

1274
static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
1275
				  struct v4l2_format *f)
1276
{
1277
	struct em28xx         *dev   = video_drvdata(file);
1278
	struct em28xx_v4l2    *v4l2  = dev->v4l2;
1279 1280
	unsigned int          width  = f->fmt.pix.width;
	unsigned int          height = f->fmt.pix.height;
1281 1282 1283
	unsigned int          maxw   = norm_maxw(dev);
	unsigned int          maxh   = norm_maxh(dev);
	unsigned int          hscale, vscale;
1284 1285 1286 1287 1288 1289 1290 1291
	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;
	}
1292

1293
	if (dev->board.is_em2800) {
1294
		/* the em2800 can only scale down to 50% */
1295 1296
		height = height > (3 * maxh / 4) ? maxh : maxh / 2;
		width = width > (3 * maxw / 4) ? maxw : maxw / 2;
1297 1298 1299 1300 1301
		/*
		 * MaxPacketSize for em2800 is too small to capture at full
		 * resolution use half of maxw as the scaler can only scale
		 * to 50%
		 */
1302 1303
		if (width == maxw && height == maxh)
			width /= 2;
1304 1305 1306
	} else {
		/* width must even because of the YUYV format
		   height must be even because of interlacing */
1307 1308
		v4l_bound_align_image(&width, 48, maxw, 1, &height, 32, maxh,
				      1, 0);
1309
	}
1310

1311
	size_to_scale(dev, width, height, &hscale, &vscale);
1312
	scale_to_size(dev, hscale, vscale, &width, &height);
1313

1314 1315
	f->fmt.pix.width = width;
	f->fmt.pix.height = height;
1316
	f->fmt.pix.pixelformat = fmt->fourcc;
1317
	f->fmt.pix.bytesperline = (width * fmt->depth + 7) >> 3;
1318
	f->fmt.pix.sizeimage = f->fmt.pix.bytesperline * height;
1319
	f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
1320
	if (v4l2->progressive)
1321 1322
		f->fmt.pix.field = V4L2_FIELD_NONE;
	else
1323
		f->fmt.pix.field = v4l2->interlaced_fieldmode ?
1324
			   V4L2_FIELD_INTERLACED : V4L2_FIELD_TOP;
1325
	f->fmt.pix.priv = 0;
1326 1327 1328 1329

	return 0;
}

1330 1331 1332 1333
static int em28xx_set_video_format(struct em28xx *dev, unsigned int fourcc,
				   unsigned width, unsigned height)
{
	struct em28xx_fmt     *fmt;
1334
	struct em28xx_v4l2    *v4l2 = dev->v4l2;
1335 1336 1337 1338 1339

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

1340
	v4l2->format = fmt;
1341 1342
	v4l2->width  = width;
	v4l2->height = height;
1343 1344

	/* set new image size */
1345
	size_to_scale(dev, v4l2->width, v4l2->height,
1346
		      &v4l2->hscale, &v4l2->vscale);
1347 1348 1349 1350 1351 1352

	em28xx_resolution_set(dev);

	return 0;
}

1353
static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
1354
				struct v4l2_format *f)
1355
{
1356
	struct em28xx *dev = video_drvdata(file);
1357
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
1358

1359
	if (vb2_is_busy(&v4l2->vb_vidq))
1360
		return -EBUSY;
1361

1362 1363
	vidioc_try_fmt_vid_cap(file, priv, f);

H
Hans Verkuil 已提交
1364
	return em28xx_set_video_format(dev, f->fmt.pix.pixelformat,
1365
				f->fmt.pix.width, f->fmt.pix.height);
1366 1367
}

1368 1369
static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *norm)
{
1370
	struct em28xx *dev = video_drvdata(file);
1371

1372
	*norm = dev->v4l2->norm;
1373 1374 1375 1376

	return 0;
}

1377 1378
static int vidioc_querystd(struct file *file, void *priv, v4l2_std_id *norm)
{
1379
	struct em28xx *dev = video_drvdata(file);
1380

1381
	v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, video, querystd, norm);
1382 1383 1384 1385

	return 0;
}

1386
static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm)
1387
{
1388
	struct em28xx      *dev  = video_drvdata(file);
1389
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
1390 1391
	struct v4l2_format f;

1392
	if (norm == v4l2->norm)
1393
		return 0;
1394

1395
	if (v4l2->streaming_users > 0)
1396 1397
		return -EBUSY;

1398
	v4l2->norm = norm;
1399

1400
	/* Adjusts width/height, if needed */
1401
	f.fmt.pix.width = 720;
1402
	f.fmt.pix.height = (norm & V4L2_STD_525_60) ? 480 : 576;
1403
	vidioc_try_fmt_vid_cap(file, priv, &f);
1404

1405
	/* set new image size */
1406 1407 1408
	v4l2->width = f.fmt.pix.width;
	v4l2->height = f.fmt.pix.height;
	size_to_scale(dev, v4l2->width, v4l2->height,
1409
		      &v4l2->hscale, &v4l2->vscale);
1410

1411
	em28xx_resolution_set(dev);
1412
	v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_std, v4l2->norm);
1413

1414 1415
	return 0;
}
1416

1417 1418 1419
static int vidioc_g_parm(struct file *file, void *priv,
			 struct v4l2_streamparm *p)
{
1420
	struct em28xx      *dev  = video_drvdata(file);
1421
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
1422 1423
	int rc = 0;

1424
	p->parm.capture.readbuffers = EM28XX_MIN_BUF;
1425
	if (dev->board.is_webcam)
1426
		rc = v4l2_device_call_until_err(&v4l2->v4l2_dev, 0,
1427 1428
						video, g_parm, p);
	else
1429
		v4l2_video_std_frame_period(v4l2->norm,
1430
					    &p->parm.capture.timeperframe);
1431 1432 1433 1434 1435 1436 1437

	return rc;
}

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

1440
	p->parm.capture.readbuffers = EM28XX_MIN_BUF;
1441 1442
	return v4l2_device_call_until_err(&dev->v4l2->v4l2_dev,
					  0, video, s_parm, p);
1443 1444
}

1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455
static const char *iname[] = {
	[EM28XX_VMUX_COMPOSITE1] = "Composite1",
	[EM28XX_VMUX_COMPOSITE2] = "Composite2",
	[EM28XX_VMUX_COMPOSITE3] = "Composite3",
	[EM28XX_VMUX_COMPOSITE4] = "Composite4",
	[EM28XX_VMUX_SVIDEO]     = "S-Video",
	[EM28XX_VMUX_TELEVISION] = "Television",
	[EM28XX_VMUX_CABLE]      = "Cable TV",
	[EM28XX_VMUX_DVB]        = "DVB",
	[EM28XX_VMUX_DEBUG]      = "for debug only",
};
1456

1457
static int vidioc_enum_input(struct file *file, void *priv,
1458
			     struct v4l2_input *i)
1459
{
1460
	struct em28xx *dev = video_drvdata(file);
1461
	unsigned int       n;
1462

1463 1464 1465 1466 1467
	n = i->index;
	if (n >= MAX_EM28XX_INPUT)
		return -EINVAL;
	if (0 == INPUT(n)->type)
		return -EINVAL;
1468

1469 1470
	i->index = n;
	i->type = V4L2_INPUT_TYPE_CAMERA;
1471

1472
	strcpy(i->name, iname[INPUT(n)->type]);
1473

1474
	if ((EM28XX_VMUX_TELEVISION == INPUT(n)->type) ||
1475
	    (EM28XX_VMUX_CABLE == INPUT(n)->type))
1476 1477
		i->type = V4L2_INPUT_TYPE_TUNER;

1478
	i->std = dev->v4l2->vdev.tvnorms;
1479 1480 1481
	/* webcams do not have the STD API */
	if (dev->board.is_webcam)
		i->capabilities = 0;
1482 1483

	return 0;
1484 1485
}

1486
static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
1487
{
1488
	struct em28xx *dev = video_drvdata(file);
1489

1490 1491 1492 1493 1494 1495 1496
	*i = dev->ctl_input;

	return 0;
}

static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
{
1497
	struct em28xx *dev = video_drvdata(file);
1498 1499 1500 1501 1502

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

1504
	video_mux(dev, i);
1505 1506 1507 1508 1509
	return 0;
}

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

1512 1513
	switch (a->index) {
	case EM28XX_AMUX_VIDEO:
1514
		strcpy(a->name, "Television");
1515 1516
		break;
	case EM28XX_AMUX_LINE_IN:
1517
		strcpy(a->name, "Line In");
1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539
		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;
	}
1540

1541
	a->index = dev->ctl_ainput;
1542 1543 1544 1545 1546
	a->capability = V4L2_AUDCAP_STEREO;

	return 0;
}

1547
static int vidioc_s_audio(struct file *file, void *priv, const struct v4l2_audio *a)
1548
{
1549
	struct em28xx *dev = video_drvdata(file);
1550

1551 1552 1553 1554 1555
	if (a->index >= MAX_EM28XX_INPUT)
		return -EINVAL;
	if (0 == INPUT(a->index)->type)
		return -EINVAL;

1556 1557
	dev->ctl_ainput = INPUT(a->index)->amux;
	dev->ctl_aoutput = INPUT(a->index)->aout;
1558 1559 1560

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

1562 1563 1564 1565
	return 0;
}

static int vidioc_g_tuner(struct file *file, void *priv,
1566
			  struct v4l2_tuner *t)
1567
{
1568
	struct em28xx *dev = video_drvdata(file);
1569 1570 1571 1572 1573 1574

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

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

1575
	v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, g_tuner, t);
1576
	return 0;
1577 1578
}

1579
static int vidioc_s_tuner(struct file *file, void *priv,
1580
			  const struct v4l2_tuner *t)
1581
{
1582
	struct em28xx *dev = video_drvdata(file);
1583 1584 1585 1586

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

1587
	v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, s_tuner, t);
1588
	return 0;
1589 1590
}

1591
static int vidioc_g_frequency(struct file *file, void *priv,
1592
			      struct v4l2_frequency *f)
1593
{
1594
	struct em28xx         *dev = video_drvdata(file);
1595
	struct em28xx_v4l2    *v4l2 = dev->v4l2;
1596

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

1600
	f->frequency = v4l2->frequency;
1601 1602 1603 1604
	return 0;
}

static int vidioc_s_frequency(struct file *file, void *priv,
1605
			      const struct v4l2_frequency *f)
1606
{
1607
	struct v4l2_frequency  new_freq = *f;
1608
	struct em28xx             *dev  = video_drvdata(file);
1609
	struct em28xx_v4l2        *v4l2 = dev->v4l2;
1610 1611 1612 1613

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

1614 1615
	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);
1616
	v4l2->frequency = new_freq.frequency;
1617

1618 1619
	return 0;
}
1620

1621
#ifdef CONFIG_VIDEO_ADV_DEBUG
1622
static int vidioc_g_chip_info(struct file *file, void *priv,
1623
			      struct v4l2_dbg_chip_info *chip)
1624
{
1625
	struct em28xx *dev = video_drvdata(file);
1626 1627 1628 1629 1630 1631

	if (chip->match.addr > 1)
		return -EINVAL;
	if (chip->match.addr == 1)
		strlcpy(chip->name, "ac97", sizeof(chip->name));
	else
1632 1633
		strlcpy(chip->name,
			dev->v4l2->v4l2_dev.name, sizeof(chip->name));
1634 1635 1636
	return 0;
}

1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647
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;
	}
}
1648

1649
static int vidioc_g_register(struct file *file, void *priv,
1650
			     struct v4l2_dbg_register *reg)
1651
{
1652
	struct em28xx *dev = video_drvdata(file);
1653 1654
	int ret;

1655 1656 1657
	if (reg->match.addr > 1)
		return -EINVAL;
	if (reg->match.addr) {
1658 1659 1660 1661 1662
		ret = em28xx_read_ac97(dev, reg->reg);
		if (ret < 0)
			return ret;

		reg->val = ret;
1663
		reg->size = 1;
1664
		return 0;
1665
	}
1666

1667
	/* Match host */
1668 1669
	reg->size = em28xx_reg_len(reg->reg);
	if (reg->size == 1) {
1670
		ret = em28xx_read_reg(dev, reg->reg);
1671

1672 1673 1674 1675 1676
		if (ret < 0)
			return ret;

		reg->val = ret;
	} else {
1677
		__le16 val = 0;
1678

1679
		ret = dev->em28xx_read_reg_req_len(dev, USB_REQ_GET_STATUS,
1680 1681 1682 1683
						   reg->reg, (char *)&val, 2);
		if (ret < 0)
			return ret;

1684
		reg->val = le16_to_cpu(val);
1685 1686 1687 1688 1689 1690
	}

	return 0;
}

static int vidioc_s_register(struct file *file, void *priv,
1691
			     const struct v4l2_dbg_register *reg)
1692
{
1693
	struct em28xx *dev = video_drvdata(file);
1694
	__le16 buf;
1695

1696
	if (reg->match.addr > 1)
1697
		return -EINVAL;
1698 1699
	if (reg->match.addr)
		return em28xx_write_ac97(dev, reg->reg, reg->val);
1700

1701
	/* Match host */
1702
	buf = cpu_to_le16(reg->val);
1703

H
Hans Verkuil 已提交
1704
	return em28xx_write_regs(dev, reg->reg, (char *)&buf,
1705
			       em28xx_reg_len(reg->reg));
1706 1707 1708
}
#endif

1709
static int vidioc_querycap(struct file *file, void  *priv,
1710
			   struct v4l2_capability *cap)
1711
{
1712
	struct video_device   *vdev = video_devdata(file);
1713
	struct em28xx         *dev  = video_drvdata(file);
1714
	struct em28xx_v4l2    *v4l2 = dev->v4l2;
1715 1716 1717

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

H
Hans Verkuil 已提交
1720 1721 1722 1723 1724 1725
	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
1726
		cap->device_caps = V4L2_CAP_READWRITE | V4L2_CAP_VBI_CAPTURE;
1727

1728
	if (dev->int_audio_type != EM28XX_INT_AUDIO_NONE)
H
Hans Verkuil 已提交
1729
		cap->device_caps |= V4L2_CAP_AUDIO;
1730

1731
	if (dev->tuner_type != TUNER_ABSENT)
H
Hans Verkuil 已提交
1732
		cap->device_caps |= V4L2_CAP_TUNER;
1733

H
Hans Verkuil 已提交
1734 1735
	cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS |
		V4L2_CAP_READWRITE | V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
1736
	if (video_is_registered(&v4l2->vbi_dev))
1737
		cap->capabilities |= V4L2_CAP_VBI_CAPTURE;
1738
	if (video_is_registered(&v4l2->radio_dev))
H
Hans Verkuil 已提交
1739
		cap->capabilities |= V4L2_CAP_RADIO;
1740
	return 0;
1741 1742
}

1743
static int vidioc_enum_fmt_vid_cap(struct file *file, void  *priv,
1744
				   struct v4l2_fmtdesc *f)
1745
{
1746
	if (unlikely(f->index >= ARRAY_SIZE(format)))
1747
		return -EINVAL;
1748

1749 1750
	strlcpy(f->description, format[f->index].name, sizeof(f->description));
	f->pixelformat = format[f->index].fourcc;
1751 1752

	return 0;
1753 1754
}

1755 1756 1757
static int vidioc_enum_framesizes(struct file *file, void *priv,
				  struct v4l2_frmsizeenum *fsize)
{
1758
	struct em28xx         *dev = video_drvdata(file);
1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783
	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;
1784 1785 1786 1787 1788 1789
	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;
1790 1791 1792 1793 1794 1795 1796
	fsize->stepwise.max_width = maxw;
	fsize->stepwise.max_height = maxh;
	fsize->stepwise.step_width = 1;
	fsize->stepwise.step_height = 1;
	return 0;
}

1797 1798 1799 1800 1801
/* RAW VBI ioctls */

static int vidioc_g_fmt_vbi_cap(struct file *file, void *priv,
				struct v4l2_format *format)
{
1802
	struct em28xx         *dev  = video_drvdata(file);
1803
	struct em28xx_v4l2    *v4l2 = dev->v4l2;
1804

1805
	format->fmt.vbi.samples_per_line = v4l2->vbi_width;
1806 1807 1808
	format->fmt.vbi.sample_format = V4L2_PIX_FMT_GREY;
	format->fmt.vbi.offset = 0;
	format->fmt.vbi.flags = 0;
1809
	format->fmt.vbi.sampling_rate = 6750000 * 4 / 2;
1810 1811
	format->fmt.vbi.count[0] = v4l2->vbi_height;
	format->fmt.vbi.count[1] = v4l2->vbi_height;
1812
	memset(format->fmt.vbi.reserved, 0, sizeof(format->fmt.vbi.reserved));
1813 1814

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

	return 0;
}

1828 1829 1830 1831 1832 1833 1834
/* ----------------------------------------------------------- */
/* RADIO ESPECIFIC IOCTLS                                      */
/* ----------------------------------------------------------- */

static int radio_g_tuner(struct file *file, void *priv,
			 struct v4l2_tuner *t)
{
1835
	struct em28xx *dev = video_drvdata(file);
1836 1837 1838 1839 1840 1841

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

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

1842
	v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, g_tuner, t);
1843

1844 1845 1846 1847
	return 0;
}

static int radio_s_tuner(struct file *file, void *priv,
1848
			 const struct v4l2_tuner *t)
1849
{
1850
	struct em28xx *dev = video_drvdata(file);
1851 1852 1853 1854

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

1855
	v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, s_tuner, t);
1856 1857 1858 1859

	return 0;
}

1860 1861 1862 1863 1864 1865 1866
/*
 * em28xx_free_v4l2() - Free struct em28xx_v4l2
 *
 * @ref: struct kref for struct em28xx_v4l2
 *
 * Called when all users of struct em28xx_v4l2 are gone
 */
1867
static void em28xx_free_v4l2(struct kref *ref)
1868 1869 1870
{
	struct em28xx_v4l2 *v4l2 = container_of(ref, struct em28xx_v4l2, ref);

1871
	v4l2->dev->v4l2 = NULL;
1872 1873 1874
	kfree(v4l2);
}

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

1887 1888 1889 1890 1891 1892 1893
	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;
1894 1895 1896 1897
	case VFL_TYPE_RADIO:
		break;
	default:
		return -EINVAL;
1898
	}
1899

1900 1901 1902
	em28xx_videodbg("open dev=%s type=%s users=%d\n",
			video_device_node_name(vdev), v4l2_type_names[fh_type],
			v4l2->users);
1903

1904 1905
	if (mutex_lock_interruptible(&dev->lock))
		return -ERESTARTSYS;
1906 1907 1908 1909 1910

	ret = v4l2_fh_open(filp);
	if (ret) {
		em28xx_errdev("%s: v4l2_fh_open() returned error %d\n",
			      __func__, ret);
1911
		mutex_unlock(&dev->lock);
1912
		return ret;
1913
	}
1914

1915
	if (v4l2->users == 0) {
1916
		em28xx_set_mode(dev, EM28XX_ANALOG_MODE);
1917

1918 1919 1920 1921 1922 1923
		if (vdev->vfl_type != VFL_TYPE_RADIO)
			em28xx_resolution_set(dev);

		/*
		 * Needed, since GPIO might have disabled power
		 * of some i2c devices
1924
		 */
1925
		em28xx_wake_i2c(dev);
1926
	}
1927 1928

	if (vdev->vfl_type == VFL_TYPE_RADIO) {
1929
		em28xx_videodbg("video_open: setting radio device\n");
1930
		v4l2_device_call_all(&v4l2->v4l2_dev, 0, tuner, s_radio);
1931
	}
1932

1933
	kref_get(&dev->ref);
1934
	kref_get(&v4l2->ref);
1935
	v4l2->users++;
1936

1937
	mutex_unlock(&dev->lock);
1938

1939
	return 0;
1940
}
1941

1942
/*
1943
 * em28xx_v4l2_fini()
1944 1945 1946
 * unregisters the v4l2,i2c and usb devices
 * called when the device gets disconected or at module unload
*/
1947
static int em28xx_v4l2_fini(struct em28xx *dev)
1948
{
1949 1950
	struct em28xx_v4l2 *v4l2 = dev->v4l2;

1951 1952 1953 1954 1955
	if (dev->is_audio_only) {
		/* Shouldn't initialize IR for this interface */
		return 0;
	}

1956 1957 1958 1959
	if (!dev->has_video) {
		/* This device does not support the v4l2 extension */
		return 0;
	}
1960

1961 1962 1963
	if (v4l2 == NULL)
		return 0;

1964
	em28xx_info("Closing video extension\n");
1965

1966 1967
	mutex_lock(&dev->lock);

1968
	v4l2_device_disconnect(&v4l2->v4l2_dev);
1969

1970 1971
	em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);

1972
	if (video_is_registered(&v4l2->radio_dev)) {
1973
		em28xx_info("V4L2 device %s deregistered\n",
1974 1975
			    video_device_node_name(&v4l2->radio_dev));
		video_unregister_device(&v4l2->radio_dev);
1976
	}
1977
	if (video_is_registered(&v4l2->vbi_dev)) {
1978
		em28xx_info("V4L2 device %s deregistered\n",
1979 1980
			    video_device_node_name(&v4l2->vbi_dev));
		video_unregister_device(&v4l2->vbi_dev);
1981
	}
1982
	if (video_is_registered(&v4l2->vdev)) {
1983
		em28xx_info("V4L2 device %s deregistered\n",
1984 1985
			    video_device_node_name(&v4l2->vdev));
		video_unregister_device(&v4l2->vdev);
1986
	}
1987

1988
	v4l2_ctrl_handler_free(&v4l2->ctrl_handler);
1989
	v4l2_device_unregister(&v4l2->v4l2_dev);
1990

1991 1992 1993
	if (v4l2->clk) {
		v4l2_clk_unregister_fixed(v4l2->clk);
		v4l2->clk = NULL;
1994 1995
	}

1996 1997
	kref_put(&v4l2->ref, em28xx_free_v4l2);

1998
	mutex_unlock(&dev->lock);
1999

2000
	kref_put(&dev->ref, em28xx_free_device);
2001

2002
	return 0;
2003
}
2004

2005 2006 2007 2008 2009 2010 2011 2012
static int em28xx_v4l2_suspend(struct em28xx *dev)
{
	if (dev->is_audio_only)
		return 0;

	if (!dev->has_video)
		return 0;

2013
	em28xx_info("Suspending video extension\n");
2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025
	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;

2026
	em28xx_info("Resuming video extension\n");
2027 2028 2029 2030
	/* what do we do here */
	return 0;
}

2031 2032
/*
 * em28xx_v4l2_close()
2033 2034
 * stops streaming and deallocates all resources allocated by the v4l2
 * calls and ioctls
2035
 */
2036
static int em28xx_v4l2_close(struct file *filp)
2037
{
2038
	struct em28xx         *dev  = video_drvdata(filp);
2039
	struct em28xx_v4l2    *v4l2 = dev->v4l2;
2040
	int              errCode;
2041

2042
	em28xx_videodbg("users=%d\n", v4l2->users);
2043

2044 2045
	vb2_fop_release(filp);
	mutex_lock(&dev->lock);
2046

2047
	if (v4l2->users == 1) {
2048 2049
		/* No sense to try to write to the device */
		if (dev->disconnected)
2050
			goto exit;
2051

2052
		/* Save some power by putting tuner to sleep */
2053
		v4l2_device_call_all(&v4l2->v4l2_dev, 0, core, s_power, 0);
2054

2055
		/* do this before setting alternate! */
2056
		em28xx_set_mode(dev, EM28XX_SUSPEND);
2057

2058 2059 2060 2061 2062 2063 2064 2065
		/* 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);
		}
2066
	}
2067

2068
exit:
2069
	v4l2->users--;
2070
	kref_put(&v4l2->ref, em28xx_free_v4l2);
2071
	mutex_unlock(&dev->lock);
2072 2073
	kref_put(&dev->ref, em28xx_free_device);

2074 2075
	return 0;
}
2076

2077
static const struct v4l2_file_operations em28xx_v4l_fops = {
2078 2079 2080
	.owner         = THIS_MODULE,
	.open          = em28xx_v4l2_open,
	.release       = em28xx_v4l2_close,
2081 2082 2083
	.read          = vb2_fop_read,
	.poll          = vb2_fop_poll,
	.mmap          = vb2_fop_mmap,
H
Hans Verkuil 已提交
2084
	.unlocked_ioctl = video_ioctl2,
2085
};
2086

2087
static const struct v4l2_ioctl_ops video_ioctl_ops = {
2088
	.vidioc_querycap            = vidioc_querycap,
2089 2090 2091 2092
	.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,
2093
	.vidioc_g_fmt_vbi_cap       = vidioc_g_fmt_vbi_cap,
2094
	.vidioc_try_fmt_vbi_cap     = vidioc_g_fmt_vbi_cap,
2095
	.vidioc_s_fmt_vbi_cap       = vidioc_g_fmt_vbi_cap,
2096
	.vidioc_enum_framesizes     = vidioc_enum_framesizes,
2097 2098 2099
	.vidioc_g_audio             = vidioc_g_audio,
	.vidioc_s_audio             = vidioc_s_audio,

2100 2101 2102 2103 2104 2105 2106
	.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,

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

static const struct video_device em28xx_video_template = {
2131 2132
	.fops		= &em28xx_v4l_fops,
	.ioctl_ops	= &video_ioctl_ops,
2133
	.release	= video_device_release_empty,
2134
	.tvnorms	= V4L2_STD_ALL,
2135 2136
};

2137
static const struct v4l2_file_operations radio_fops = {
2138 2139 2140
	.owner         = THIS_MODULE,
	.open          = em28xx_v4l2_open,
	.release       = em28xx_v4l2_close,
2141
	.unlocked_ioctl = video_ioctl2,
2142 2143 2144
};

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

2159
static struct video_device em28xx_radio_template = {
2160 2161
	.fops		= &radio_fops,
	.ioctl_ops	= &radio_ioctl_ops,
2162
	.release	= video_device_release_empty,
2163 2164
};

2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182
/* 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
};

2183
/******************************** usb interface ******************************/
2184

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

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

2199
	video_set_drvdata(vfd, dev);
2200 2201
}

2202
static void em28xx_tuner_setup(struct em28xx *dev, unsigned short tuner_addr)
2203
{
2204 2205 2206 2207
	struct em28xx_v4l2      *v4l2 = dev->v4l2;
	struct v4l2_device      *v4l2_dev = &v4l2->v4l2_dev;
	struct tuner_setup      tun_setup;
	struct v4l2_frequency   f;
2208 2209 2210 2211 2212 2213 2214 2215 2216 2217

	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;

2218 2219
		v4l2_device_call_all(v4l2_dev,
				     0, tuner, s_type_addr, &tun_setup);
2220 2221 2222 2223
	}

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

2226 2227
		v4l2_device_call_all(v4l2_dev,
				     0, tuner, s_type_addr, &tun_setup);
2228 2229
	}

2230
	if (dev->board.tda9887_conf) {
2231 2232 2233
		struct v4l2_priv_tun_config tda9887_cfg;

		tda9887_cfg.tuner = TUNER_TDA9887;
2234
		tda9887_cfg.priv = &dev->board.tda9887_conf;
2235

2236 2237
		v4l2_device_call_all(v4l2_dev,
				     0, tuner, s_config, &tda9887_cfg);
2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251
	}

	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;

2252
		v4l2_device_call_all(v4l2_dev, 0, tuner, s_config, &xc2028_cfg);
2253 2254 2255 2256 2257 2258
	}

	/* configure tuner */
	f.tuner = 0;
	f.type = V4L2_TUNER_ANALOG_TV;
	f.frequency = 9076;     /* just a magic number */
2259
	v4l2->frequency = f.frequency;
2260
	v4l2_device_call_all(v4l2_dev, 0, tuner, s_frequency, &f);
2261 2262
}

2263
static int em28xx_v4l2_init(struct em28xx *dev)
2264
{
2265
	u8 val;
2266
	int ret;
2267
	unsigned int maxw;
2268
	struct v4l2_ctrl_handler *hdl;
2269
	struct em28xx_v4l2 *v4l2;
2270

2271 2272 2273 2274 2275
	if (dev->is_audio_only) {
		/* Shouldn't initialize IR for this interface */
		return 0;
	}

2276
	if (!dev->has_video) {
2277 2278 2279
		/* This device does not support the v4l2 extension */
		return 0;
	}
2280

2281
	em28xx_info("Registering V4L2 extension\n");
2282

2283 2284
	mutex_lock(&dev->lock);

2285 2286 2287 2288 2289 2290 2291
	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);
2292
	v4l2->dev = dev;
2293 2294 2295
	dev->v4l2 = v4l2;

	ret = v4l2_device_register(&dev->udev->dev, &v4l2->v4l2_dev);
2296 2297 2298 2299 2300
	if (ret < 0) {
		em28xx_errdev("Call to v4l2_device_register() failed!\n");
		goto err;
	}

2301
	hdl = &v4l2->ctrl_handler;
2302
	v4l2_ctrl_handler_init(hdl, 8);
2303
	v4l2->v4l2_dev.ctrl_handler = hdl;
2304

2305
	if (dev->board.is_webcam)
2306
		v4l2->progressive = true;
2307

2308 2309 2310
	/*
	 * Default format, used for tvp5150 or saa711x output formats
	 */
2311 2312 2313
	v4l2->vinmode = 0x10;
	v4l2->vinctl  = EM28XX_VINCTRL_INTERLACED |
			EM28XX_VINCTRL_CCIR656_ENABLE;
2314 2315 2316 2317

	/* request some modules */

	if (dev->board.has_msp34xx)
2318 2319 2320
		v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
				    &dev->i2c_adap[dev->def_i2c_bus],
				    "msp3400", 0, msp3400_addrs);
2321 2322

	if (dev->board.decoder == EM28XX_SAA711X)
2323 2324 2325
		v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
				    &dev->i2c_adap[dev->def_i2c_bus],
				    "saa7115_auto", 0, saa711x_addrs);
2326 2327

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

	if (dev->board.adecoder == EM28XX_TVAUDIO)
2333 2334 2335
		v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
				    &dev->i2c_adap[dev->def_i2c_bus],
				    "tvaudio", dev->board.tvaudio_addr, NULL);
2336 2337 2338 2339

	/* Initialize tuner and camera */

	if (dev->board.tuner_type != TUNER_ABSENT) {
2340
		unsigned short tuner_addr = dev->board.tuner_addr;
2341
		int has_demod = (dev->board.tda9887_conf & TDA9887_PRESENT);
2342 2343

		if (dev->board.radio.type)
2344
			v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2345 2346 2347
					    &dev->i2c_adap[dev->def_i2c_bus],
					    "tuner", dev->board.radio_addr,
					    NULL);
2348 2349

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

2359
			sd = v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2360 2361 2362
						 &dev->i2c_adap[dev->def_i2c_bus],
						 "tuner", 0,
						 v4l2_i2c_tuner_addrs(type));
2363 2364

			if (sd)
2365
				tuner_addr = v4l2_i2c_subdev_addr(sd);
2366
		} else {
2367 2368
			v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
					    &dev->i2c_adap[dev->def_i2c_bus],
2369
					    "tuner", tuner_addr, NULL);
2370
		}
2371 2372

		em28xx_tuner_setup(dev, tuner_addr);
2373 2374
	}

2375 2376
	if (dev->em28xx_sensor != EM28XX_NOSENSOR)
		em28xx_init_camera(dev);
2377 2378 2379 2380 2381

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

	/* 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);
	}

2424
	/* set default norm */
2425
	v4l2->norm = V4L2_STD_PAL;
2426
	v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_std, v4l2->norm);
2427
	v4l2->interlaced_fieldmode = EM28XX_INTERLACED_DEFAULT;
2428

2429
	/* Analog specific initialization */
2430
	v4l2->format = &format[0];
2431 2432

	maxw = norm_maxw(dev);
2433 2434 2435 2436
	/* 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;
2437

2438
	em28xx_set_video_format(dev, format[0].fourcc,
2439
				maxw, norm_maxh(dev));
2440

2441
	video_mux(dev, 0);
2442 2443 2444 2445

	/* Audio defaults */
	dev->mute = 1;
	dev->volume = 0x1f;
2446 2447

/*	em28xx_write_reg(dev, EM28XX_R0E_AUDIOSRC, 0xc0); audio register */
2448 2449 2450
	val = (u8)em28xx_read_reg(dev, EM28XX_R0F_XCLK);
	em28xx_write_reg(dev, EM28XX_R0F_XCLK,
			 (EM28XX_XCLK_AUDIO_UNMUTE | val));
2451 2452 2453

	em28xx_set_outfmt(dev);

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

	/* Reset image controls */
	em28xx_colorlevels_set_default(dev);
2484 2485
	v4l2_ctrl_handler_setup(hdl);
	ret = hdl->error;
2486 2487
	if (ret)
		goto unregister_dev;
2488

2489
	/* allocate and fill video video_device struct */
2490
	em28xx_vdev_init(dev, &v4l2->vdev, &em28xx_video_template, "video");
2491 2492
	mutex_init(&v4l2->vb_queue_lock);
	mutex_init(&v4l2->vb_vbi_queue_lock);
2493 2494
	v4l2->vdev.queue = &v4l2->vb_vidq;
	v4l2->vdev.queue->lock = &v4l2->vb_queue_lock;
2495

2496 2497
	/* disable inapplicable ioctls */
	if (dev->board.is_webcam) {
2498 2499 2500
		v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_QUERYSTD);
		v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_STD);
		v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_STD);
2501
	} else {
2502
		v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_PARM);
2503
	}
2504
	if (dev->tuner_type == TUNER_ABSENT) {
2505 2506 2507 2508
		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);
2509
	}
2510
	if (dev->int_audio_type == EM28XX_INT_AUDIO_NONE) {
2511 2512
		v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_AUDIO);
		v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_AUDIO);
2513
	}
2514

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

	/* Allocate and fill vbi video_device struct */
2525
	if (em28xx_vbi_supported(dev) == 1) {
2526 2527
		em28xx_vdev_init(dev, &v4l2->vbi_dev, &em28xx_video_template,
				"vbi");
2528

2529 2530
		v4l2->vbi_dev.queue = &v4l2->vb_vbiq;
		v4l2->vbi_dev.queue->lock = &v4l2->vb_vbi_queue_lock;
2531

2532
		/* disable inapplicable ioctls */
2533
		v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_PARM);
2534
		if (dev->tuner_type == TUNER_ABSENT) {
2535 2536 2537 2538
			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);
2539
		}
2540
		if (dev->int_audio_type == EM28XX_INT_AUDIO_NONE) {
2541 2542
			v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_G_AUDIO);
			v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_AUDIO);
2543
		}
2544

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

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

2567
	em28xx_info("V4L2 video device registered as %s\n",
2568
		    video_device_node_name(&v4l2->vdev));
2569

2570
	if (video_is_registered(&v4l2->vbi_dev))
2571
		em28xx_info("V4L2 VBI device registered as %s\n",
2572
			    video_device_node_name(&v4l2->vbi_dev));
2573

2574
	/* Save some power by putting tuner to sleep */
2575
	v4l2_device_call_all(&v4l2->v4l2_dev, 0, core, s_power, 0);
2576 2577 2578 2579

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

2580 2581
	em28xx_info("V4L2 extension successfully initialized\n");

2582 2583
	kref_get(&dev->ref);

2584
	mutex_unlock(&dev->lock);
2585
	return 0;
2586 2587

unregister_dev:
2588
	v4l2_ctrl_handler_free(&v4l2->ctrl_handler);
2589
	v4l2_device_unregister(&v4l2->v4l2_dev);
2590
err:
2591 2592
	dev->v4l2 = NULL;
	kref_put(&v4l2->ref, em28xx_free_v4l2);
2593
	mutex_unlock(&dev->lock);
2594
	return ret;
2595
}
2596 2597 2598 2599 2600 2601

static struct em28xx_ops v4l2_ops = {
	.id   = EM28XX_V4L2,
	.name = "Em28xx v4l2 Extension",
	.init = em28xx_v4l2_init,
	.fini = em28xx_v4l2_fini,
2602 2603
	.suspend = em28xx_v4l2_suspend,
	.resume = em28xx_v4l2_resume,
2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617
};

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);