em28xx-video.c 69.5 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/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
	v4l2_device_call_all(v4l2_dev, 0, video, s_stream, 0);
200 201
}

202
static int em28xx_colorlevels_set_default(struct em28xx *dev)
203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219
{
	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);
}

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

226
	fmt = v4l2->format->reg;
227 228 229 230 231 232 233 234 235 236 237 238 239 240 241
	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;

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

246
	vinctrl = v4l2->vinctl;
247 248 249
	if (em28xx_vbi_supported(dev) == 1) {
		vinctrl |= EM28XX_VINCTRL_VBI_RAW;
		em28xx_write_reg(dev, EM28XX_R34_VBI_START_H, 0x00);
250 251
		em28xx_write_reg(dev, EM28XX_R36_VBI_WIDTH, v4l2->vbi_width/4);
		em28xx_write_reg(dev, EM28XX_R37_VBI_HEIGHT, v4l2->vbi_height);
252
		if (v4l2->norm & V4L2_STD_525_60) {
253 254
			/* NTSC */
			em28xx_write_reg(dev, EM28XX_R35_VBI_START_V, 0x09);
255
		} else if (v4l2->norm & V4L2_STD_625_50) {
256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276
			/* 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,
277
				    u16 width, u16 height)
278 279 280 281 282 283 284
{
	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",
285
			hstart, vstart,
286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304
		       ((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)
{
305
	u8 mode = 0x00;
306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323
	/* 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;
	}
324
	return em28xx_write_reg(dev, EM28XX_R26_COMPR, mode);
325 326 327
}

/* FIXME: this only function read values from dev */
328
static int em28xx_resolution_set(struct em28xx *dev)
329
{
330 331 332
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
	int width = norm_maxw(dev);
	int height = norm_maxh(dev);
333 334

	/* Properly setup VBI */
335
	v4l2->vbi_width = 720;
336
	if (v4l2->norm & V4L2_STD_525_60)
337
		v4l2->vbi_height = 12;
338
	else
339
		v4l2->vbi_height = 18;
340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356

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

357
	return em28xx_scaler_set(dev, v4l2->hscale, v4l2->vscale);
358 359 360
}

/* Set USB alternate setting for analog video */
361
static int em28xx_set_alternate(struct em28xx *dev)
362
{
363
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
364 365
	int errCode;
	int i;
366
	unsigned int min_pkt_size = v4l2->width * 2 + 4;
367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382

	/* 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.
	 */
383
	if (v4l2->width * 2 * v4l2->height > 720 * 240 * 2)
384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407
		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",
408
				min_pkt_size, dev->alt);
409 410 411 412 413
		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",
414
			dev->alt, dev->max_pkt_size);
415
	errCode = usb_set_interface(dev->udev, dev->ifnum, dev->alt);
416 417 418 419 420 421 422 423
	if (errCode < 0) {
		em28xx_errdev("cannot change alternate number to %d (error=%i)\n",
			      dev->alt, errCode);
		return errCode;
	}
	return 0;
}

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

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

436
	buf->vb.v4l2_buf.sequence = dev->v4l2->field_count++;
437 438 439 440
	if (dev->v4l2->progressive)
		buf->vb.v4l2_buf.field = V4L2_FIELD_NONE;
	else
		buf->vb.v4l2_buf.field = V4L2_FIELD_INTERLACED;
441 442 443
	v4l2_get_timestamp(&buf->vb.v4l2_buf.timestamp);

	vb2_buffer_done(&buf->vb, VB2_BUF_STATE_DONE);
444 445 446
}

/*
447
 * Copy picture data from USB buffer to videobuf buffer
448 449 450
 */
static void em28xx_copy_video(struct em28xx *dev,
			      struct em28xx_buffer *buf,
451
			      unsigned char *usb_buf,
452
			      unsigned long len)
453
{
454
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
455
	void *fieldstart, *startwrite, *startread;
456
	int  linesdone, currlinedone, offset, lencopy, remain;
457
	int bytesperline = v4l2->width << 1;
458

459 460
	if (buf->pos + len > buf->length)
		len = buf->length - buf->pos;
461

462
	startread = usb_buf;
463 464
	remain = len;

465
	if (v4l2->progressive || buf->top_field)
466
		fieldstart = buf->vb_buf;
467
	else /* interlaced mode, even nr. of lines */
468
		fieldstart = buf->vb_buf + bytesperline;
469

470 471
	linesdone = buf->pos / bytesperline;
	currlinedone = buf->pos % bytesperline;
472

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

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

482
	if ((char *)startwrite + lencopy > (char *)buf->vb_buf + buf->length) {
483
		em28xx_isocdbg("Overflow of %zu bytes past buffer end (1)\n",
484
			       ((char *)startwrite + lencopy) -
485 486
			      ((char *)buf->vb_buf + buf->length));
		remain = (char *)buf->vb_buf + buf->length -
487
			 (char *)startwrite;
488
		lencopy = remain;
489
	}
490 491
	if (lencopy <= 0)
		return;
492
	memcpy(startwrite, startread, lencopy);
493 494 495 496

	remain -= lencopy;

	while (remain > 0) {
497
		if (v4l2->progressive)
498 499 500
			startwrite += lencopy;
		else
			startwrite += lencopy + bytesperline;
501
		startread += lencopy;
502
		if (bytesperline > remain)
503 504
			lencopy = remain;
		else
505
			lencopy = bytesperline;
506

507
		if ((char *)startwrite + lencopy > (char *)buf->vb_buf +
508
		    buf->length) {
509
			em28xx_isocdbg("Overflow of %zu bytes past buffer end"
510
				       "(2)\n",
511
				       ((char *)startwrite + lencopy) -
512 513 514
				       ((char *)buf->vb_buf + buf->length));
			lencopy = remain = (char *)buf->vb_buf + buf->length -
				(char *)startwrite;
515
		}
516 517
		if (lencopy <= 0)
			break;
518 519

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

		remain -= lencopy;
	}

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

527 528 529
/*
 * Copy VBI data from USB buffer to videobuf buffer
 */
530
static void em28xx_copy_vbi(struct em28xx *dev,
531
			    struct em28xx_buffer *buf,
532
			    unsigned char *usb_buf,
533
			    unsigned long len)
534
{
535
	unsigned int offset;
536

537 538
	if (buf->pos + len > buf->length)
		len = buf->length - buf->pos;
539

540
	offset = buf->pos;
541
	/* Make sure the bottom field populates the second half of the frame */
542
	if (buf->top_field == 0)
543
		offset += dev->v4l2->vbi_width * dev->v4l2->vbi_height;
544

545
	memcpy(buf->vb_buf + offset, usb_buf, len);
546
	buf->pos += len;
547 548
}

549
static inline void print_err_status(struct em28xx *dev,
550
				    int packet, int status)
551 552 553
{
	char *errmsg = "Unknown";

554
	switch (status) {
555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579
	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;
	}
580
	if (packet < 0) {
581 582 583 584 585 586 587 588
		em28xx_isocdbg("URB status %d [%s].\n",	status, errmsg);
	} else {
		em28xx_isocdbg("URB packet %d, status %d [%s].\n",
			       packet, status, errmsg);
	}
}

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

596 597
	if (list_empty(&dma_q->active)) {
		em28xx_isocdbg("No active queue to serve\n");
598
		return NULL;
599 600 601
	}

	/* Get the next buffer */
602
	buf = list_entry(dma_q->active.next, struct em28xx_buffer, list);
L
Lucas De Marchi 已提交
603
	/* Cleans up buffer - Useful for testing for frame/URB loss */
604
	list_del(&buf->list);
605
	buf->pos = 0;
606
	buf->vb_buf = buf->mem;
607

608
	return buf;
609 610
}

611 612 613 614 615 616 617 618
/*
 * 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)
{
619 620
	struct em28xx_v4l2 *v4l2 = dev->v4l2;

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

	return buf;
}

634 635 636 637 638 639
/*
 * 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)
640
{
641
	struct em28xx_v4l2      *v4l2 = dev->v4l2;
642 643
	struct em28xx_buffer    *buf = dev->usb_ctl.vid_buf;
	struct em28xx_buffer    *vbi_buf = dev->usb_ctl.vbi_buf;
644
	struct em28xx_dmaqueue  *dma_q = &dev->vidq;
645
	struct em28xx_dmaqueue  *vbi_dma_q = &dev->vbiq;
646 647 648 649 650 651 652 653 654 655 656 657 658 659 660

	/* 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) */
661 662
			v4l2->capture_type = 0;
			v4l2->vbi_read = 0;
663
			em28xx_isocdbg("VBI START HEADER !!!\n");
664
			v4l2->top_field = !(data_pkt[2] & 1);
665 666 667 668
			data_pkt += 4;
			data_len -= 4;
		} else if (data_pkt[0] == 0x22 && data_pkt[1] == 0x5a) {
			/* Field start (VBI disabled) */
669
			v4l2->capture_type = 2;
670
			em28xx_isocdbg("VIDEO START HEADER !!!\n");
671
			v4l2->top_field = !(data_pkt[2] & 1);
672 673 674 675 676 677 678
			data_pkt += 4;
			data_len -= 4;
		}
	}
	/* NOTE: With bulk transfers, intermediate data packets
	 * have no continuation header */

679
	if (v4l2->capture_type == 0) {
680 681
		vbi_buf = finish_field_prepare_next(dev, vbi_buf, vbi_dma_q);
		dev->usb_ctl.vbi_buf = vbi_buf;
682
		v4l2->capture_type = 1;
683 684
	}

685
	if (v4l2->capture_type == 1) {
686
		int vbi_size = v4l2->vbi_width * v4l2->vbi_height;
687 688
		int vbi_data_len = ((v4l2->vbi_read + data_len) > vbi_size) ?
				   (vbi_size - v4l2->vbi_read) : data_len;
689 690 691 692

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

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

703
	if (v4l2->capture_type == 2) {
704 705
		buf = finish_field_prepare_next(dev, buf, dma_q);
		dev->usb_ctl.vid_buf = buf;
706
		v4l2->capture_type = 3;
707 708
	}

709
	if (v4l2->capture_type == 3 && buf != NULL && data_len > 0)
710 711 712
		em28xx_copy_video(dev, buf, data_pkt, data_len);
}

713 714 715 716 717 718 719 720 721
/*
 * 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;
722
	struct em28xx_v4l2      *v4l2 = dev->v4l2;
723
	bool frame_end = false;
724 725 726 727 728 729 730

	/* 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)) {
731
			v4l2->top_field = !(data_pkt[1] &
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 769
					   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). */
}

770 771 772 773 774 775
/* 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;
776 777 778 779

	if (!dev)
		return 0;

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

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

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

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

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

797
			usb_data_pkt = urb->transfer_buffer;
798 799 800 801 802 803 804 805
		} 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;
			}

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

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

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

822 823 824 825 826 827 828
		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);

829
	}
830
	return 1;
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 869 870
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();
		return 0;
	}
}

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

871
/* ------------------------------------------------------------------
872
	Videobuf2 operations
873 874
   ------------------------------------------------------------------*/

875 876 877
static int queue_setup(struct vb2_queue *vq, const struct v4l2_format *fmt,
		       unsigned int *nbuffers, unsigned int *nplanes,
		       unsigned int sizes[], void *alloc_ctxs[])
878
{
879
	struct em28xx *dev = vb2_get_drv_priv(vq);
880
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
881
	unsigned long size;
882

883 884 885
	if (fmt)
		size = fmt->fmt.pix.sizeimage;
	else
886
		size =
887
		    (v4l2->width * v4l2->height * v4l2->format->depth + 7) >> 3;
888

889 890
	if (size == 0)
		return -EINVAL;
891

892 893
	if (0 == *nbuffers)
		*nbuffers = 32;
894

895 896
	*nplanes = 1;
	sizes[0] = size;
897

898 899 900
	return 0;
}

901 902
static int
buffer_prepare(struct vb2_buffer *vb)
903
{
904
	struct em28xx        *dev = vb2_get_drv_priv(vb->vb2_queue);
905
	struct em28xx_v4l2   *v4l2 = dev->v4l2;
906 907
	struct em28xx_buffer *buf = container_of(vb, struct em28xx_buffer, vb);
	unsigned long size;
908

909
	em28xx_videodbg("%s, field=%d\n", __func__, vb->v4l2_buf.field);
910

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

913 914 915 916 917 918 919 920
	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;
	}
	vb2_set_plane_payload(&buf->vb, 0, size);

	return 0;
921 922
}

923
int em28xx_start_analog_streaming(struct vb2_queue *vq, unsigned int count)
924
{
925
	struct em28xx *dev = vb2_get_drv_priv(vq);
926
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
927 928
	struct v4l2_frequency f;
	int rc = 0;
929

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

932 933 934 935 936
	/* 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;
937

938
	if (v4l2->streaming_users == 0) {
939
		/* First active streaming user, so allocate all the URBs */
940

941 942
		/* Allocate the USB bandwidth */
		em28xx_set_alternate(dev);
943

944 945 946 947
		/* Needed, since GPIO might have disabled power of
		   some i2c device
		*/
		em28xx_wake_i2c(dev);
948

949
		v4l2->capture_type = -1;
950 951 952 953 954 955
		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);
956
		if (rc < 0)
957
			return rc;
958

959 960 961 962 963 964 965 966
		/*
		 * 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));
967
		f.frequency = v4l2->frequency;
968 969 970 971
		if (vq->owner && vq->owner->vdev->vfl_type == VFL_TYPE_RADIO)
			f.type = V4L2_TUNER_RADIO;
		else
			f.type = V4L2_TUNER_ANALOG_TV;
972
		v4l2_device_call_all(&v4l2->v4l2_dev,
973
				     0, tuner, s_frequency, &f);
974
	}
975

976
	v4l2->streaming_users++;
977

978 979 980
	return rc;
}

981
static void em28xx_stop_streaming(struct vb2_queue *vq)
982 983
{
	struct em28xx *dev = vb2_get_drv_priv(vq);
984
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
985 986 987 988 989 990 991
	struct em28xx_dmaqueue *vidq = &dev->vidq;
	unsigned long flags = 0;

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

	res_free(dev, vq->type);

992
	if (v4l2->streaming_users-- == 1) {
993 994 995 996 997
		/* Last active user, so shutdown all the URBS */
		em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);
	}

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

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

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

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

	res_free(dev, vq->type);
1022

1023
	if (v4l2->streaming_users-- == 1) {
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 1030 1031 1032
	if (dev->usb_ctl.vbi_buf != NULL) {
		vb2_buffer_done(&dev->usb_ctl.vbi_buf->vb, VB2_BUF_STATE_ERROR);
		dev->usb_ctl.vbi_buf = NULL;
	}
1033 1034
	while (!list_empty(&vbiq->active)) {
		struct em28xx_buffer *buf;
1035

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

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

1051 1052 1053
	em28xx_videodbg("%s\n", __func__);
	buf->mem = vb2_plane_vaddr(vb, 0);
	buf->length = vb2_plane_size(vb, 0);
1054

1055 1056 1057
	spin_lock_irqsave(&dev->slock, flags);
	list_add_tail(&buf->list, &vidq->active);
	spin_unlock_irqrestore(&dev->slock, flags);
1058 1059
}

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

1070
static int em28xx_vb2_setup(struct em28xx *dev)
1071 1072 1073
{
	int rc;
	struct vb2_queue *q;
1074
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
1075 1076

	/* Setup Videobuf2 for Video capture */
1077
	q = &v4l2->vb_vidq;
1078
	q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1079
	q->io_modes = VB2_READ | VB2_MMAP | VB2_USERPTR | VB2_DMABUF;
1080
	q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1081 1082 1083 1084 1085 1086 1087 1088 1089 1090
	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 */
1091
	q = &v4l2->vb_vbiq;
1092 1093
	q->type = V4L2_BUF_TYPE_VBI_CAPTURE;
	q->io_modes = VB2_READ | VB2_MMAP | VB2_USERPTR;
1094
	q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106
	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;
}

1107
/*********************  v4l2 interface  **************************************/
1108

1109 1110
static void video_mux(struct em28xx *dev, int index)
{
1111
	struct v4l2_device *v4l2_dev = &dev->v4l2->v4l2_dev;
1112

1113 1114
	dev->ctl_input = index;
	dev->ctl_ainput = INPUT(index)->amux;
1115
	dev->ctl_aoutput = INPUT(index)->aout;
1116

1117 1118 1119
	if (!dev->ctl_aoutput)
		dev->ctl_aoutput = EM28XX_AOUT_MASTER;

1120
	v4l2_device_call_all(v4l2_dev, 0, video, s_routing,
1121
			     INPUT(index)->vmux, 0, 0);
1122

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

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

1139
	em28xx_audio_analog_set(dev);
1140 1141
}

1142
static void em28xx_ctrl_notify(struct v4l2_ctrl *ctrl, void *priv)
1143
{
1144
	struct em28xx *dev = priv;
1145

1146 1147 1148 1149 1150 1151
	/*
	 * 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.
	 */
1152 1153
	switch (ctrl->id) {
	case V4L2_CID_AUDIO_MUTE:
1154 1155 1156
		dev->mute = ctrl->val;
		em28xx_audio_analog_set(dev);
		break;
1157
	case V4L2_CID_AUDIO_VOLUME:
1158 1159 1160
		dev->volume = ctrl->val;
		em28xx_audio_analog_set(dev);
		break;
1161
	}
1162
}
1163

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

1171 1172
	switch (ctrl->id) {
	case V4L2_CID_AUDIO_MUTE:
1173
		dev->mute = ctrl->val;
1174
		ret = em28xx_audio_analog_set(dev);
1175
		break;
1176
	case V4L2_CID_AUDIO_VOLUME:
1177
		dev->volume = ctrl->val;
1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196
		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);
1197
		break;
1198
	}
1199

1200
	return (ret < 0) ? ret : 0;
1201
}
1202

1203
static const struct v4l2_ctrl_ops em28xx_ctrl_ops = {
1204 1205 1206
	.s_ctrl = em28xx_s_ctrl,
};

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

	*hscale = (((unsigned long)maxw) << 12) / width - 4096L;
1215 1216
	if (*hscale > EM28XX_HVSCALE_MAX)
		*hscale = EM28XX_HVSCALE_MAX;
1217 1218

	*vscale = (((unsigned long)maxh) << 12) / height - 4096L;
1219 1220
	if (*vscale > EM28XX_HVSCALE_MAX)
		*vscale = EM28XX_HVSCALE_MAX;
1221 1222
}

1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233
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);
}

1234 1235 1236 1237
/* ------------------------------------------------------------------
	IOCTL vidioc handling
   ------------------------------------------------------------------*/

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

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

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

1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270
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;
}

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

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

1308
	size_to_scale(dev, width, height, &hscale, &vscale);
1309
	scale_to_size(dev, hscale, vscale, &width, &height);
1310

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

	return 0;
}

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

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

1337
	v4l2->format = fmt;
1338 1339
	v4l2->width  = width;
	v4l2->height = height;
1340 1341

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

	em28xx_resolution_set(dev);

	return 0;
}

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

1356
	if (vb2_is_busy(&v4l2->vb_vidq))
1357
		return -EBUSY;
1358

1359 1360
	vidioc_try_fmt_vid_cap(file, priv, f);

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

1365 1366
static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *norm)
{
1367
	struct em28xx *dev = video_drvdata(file);
1368

1369
	*norm = dev->v4l2->norm;
1370 1371 1372 1373

	return 0;
}

1374 1375
static int vidioc_querystd(struct file *file, void *priv, v4l2_std_id *norm)
{
1376
	struct em28xx *dev = video_drvdata(file);
1377

1378
	v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, video, querystd, norm);
1379 1380 1381 1382

	return 0;
}

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

1389
	if (norm == v4l2->norm)
1390
		return 0;
1391

1392
	if (v4l2->streaming_users > 0)
1393 1394
		return -EBUSY;

1395
	v4l2->norm = norm;
1396

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

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

1408
	em28xx_resolution_set(dev);
1409
	v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_std, v4l2->norm);
1410

1411 1412
	return 0;
}
1413

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

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

	return rc;
}

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

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

1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452
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",
};
1453

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

1460 1461 1462 1463 1464
	n = i->index;
	if (n >= MAX_EM28XX_INPUT)
		return -EINVAL;
	if (0 == INPUT(n)->type)
		return -EINVAL;
1465

1466 1467
	i->index = n;
	i->type = V4L2_INPUT_TYPE_CAMERA;
1468

1469
	strcpy(i->name, iname[INPUT(n)->type]);
1470

1471
	if ((EM28XX_VMUX_TELEVISION == INPUT(n)->type) ||
1472
	    (EM28XX_VMUX_CABLE == INPUT(n)->type))
1473 1474
		i->type = V4L2_INPUT_TYPE_TUNER;

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

	return 0;
1481 1482
}

1483
static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
1484
{
1485
	struct em28xx *dev = video_drvdata(file);
1486

1487 1488 1489 1490 1491 1492 1493
	*i = dev->ctl_input;

	return 0;
}

static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
{
1494
	struct em28xx *dev = video_drvdata(file);
1495 1496 1497 1498 1499

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

1501
	video_mux(dev, i);
1502 1503 1504 1505 1506
	return 0;
}

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

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

1538
	a->index = dev->ctl_ainput;
1539 1540 1541 1542 1543
	a->capability = V4L2_AUDCAP_STEREO;

	return 0;
}

1544
static int vidioc_s_audio(struct file *file, void *priv, const struct v4l2_audio *a)
1545
{
1546
	struct em28xx *dev = video_drvdata(file);
1547

1548 1549 1550 1551 1552
	if (a->index >= MAX_EM28XX_INPUT)
		return -EINVAL;
	if (0 == INPUT(a->index)->type)
		return -EINVAL;

1553 1554
	dev->ctl_ainput = INPUT(a->index)->amux;
	dev->ctl_aoutput = INPUT(a->index)->aout;
1555 1556 1557

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

1559 1560 1561 1562
	return 0;
}

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

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

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

1572
	v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, g_tuner, t);
1573
	return 0;
1574 1575
}

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

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

1584
	v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, s_tuner, t);
1585
	return 0;
1586 1587
}

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

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

1597
	f->frequency = v4l2->frequency;
1598 1599 1600 1601
	return 0;
}

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

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

1611 1612
	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);
1613
	v4l2->frequency = new_freq.frequency;
1614

1615 1616
	return 0;
}
1617

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

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

1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644
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;
	}
}
1645

1646
static int vidioc_g_register(struct file *file, void *priv,
1647
			     struct v4l2_dbg_register *reg)
1648
{
1649
	struct em28xx *dev = video_drvdata(file);
1650 1651
	int ret;

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

		reg->val = ret;
1660
		reg->size = 1;
1661
		return 0;
1662
	}
1663

1664
	/* Match host */
1665 1666
	reg->size = em28xx_reg_len(reg->reg);
	if (reg->size == 1) {
1667
		ret = em28xx_read_reg(dev, reg->reg);
1668

1669 1670 1671 1672 1673
		if (ret < 0)
			return ret;

		reg->val = ret;
	} else {
1674
		__le16 val = 0;
1675

1676
		ret = dev->em28xx_read_reg_req_len(dev, USB_REQ_GET_STATUS,
1677 1678 1679 1680
						   reg->reg, (char *)&val, 2);
		if (ret < 0)
			return ret;

1681
		reg->val = le16_to_cpu(val);
1682 1683 1684 1685 1686 1687
	}

	return 0;
}

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

1693
	if (reg->match.addr > 1)
1694
		return -EINVAL;
1695 1696
	if (reg->match.addr)
		return em28xx_write_ac97(dev, reg->reg, reg->val);
1697

1698
	/* Match host */
1699
	buf = cpu_to_le16(reg->val);
1700

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

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

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

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

1725
	if (dev->int_audio_type != EM28XX_INT_AUDIO_NONE)
H
Hans Verkuil 已提交
1726
		cap->device_caps |= V4L2_CAP_AUDIO;
1727

1728
	if (dev->tuner_type != TUNER_ABSENT)
H
Hans Verkuil 已提交
1729
		cap->device_caps |= V4L2_CAP_TUNER;
1730

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

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

1746 1747
	strlcpy(f->description, format[f->index].name, sizeof(f->description));
	f->pixelformat = format[f->index].fourcc;
1748 1749

	return 0;
1750 1751
}

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

1794 1795 1796 1797 1798
/* RAW VBI ioctls */

static int vidioc_g_fmt_vbi_cap(struct file *file, void *priv,
				struct v4l2_format *format)
{
1799
	struct em28xx         *dev  = video_drvdata(file);
1800
	struct em28xx_v4l2    *v4l2 = dev->v4l2;
1801

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

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

	return 0;
}

1825 1826 1827 1828 1829 1830 1831
/* ----------------------------------------------------------- */
/* RADIO ESPECIFIC IOCTLS                                      */
/* ----------------------------------------------------------- */

static int radio_g_tuner(struct file *file, void *priv,
			 struct v4l2_tuner *t)
{
1832
	struct em28xx *dev = video_drvdata(file);
1833 1834 1835 1836 1837 1838

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

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

1839
	v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, g_tuner, t);
1840

1841 1842 1843 1844
	return 0;
}

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

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

1852
	v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, s_tuner, t);
1853 1854 1855 1856

	return 0;
}

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

1868
	v4l2->dev->v4l2 = NULL;
1869 1870 1871
	kfree(v4l2);
}

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

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

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

1901 1902
	if (mutex_lock_interruptible(&dev->lock))
		return -ERESTARTSYS;
1903 1904 1905 1906 1907

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

1912
	if (v4l2->users == 0) {
1913
		em28xx_set_mode(dev, EM28XX_ANALOG_MODE);
1914

1915 1916 1917 1918 1919 1920
		if (vdev->vfl_type != VFL_TYPE_RADIO)
			em28xx_resolution_set(dev);

		/*
		 * Needed, since GPIO might have disabled power
		 * of some i2c devices
1921
		 */
1922
		em28xx_wake_i2c(dev);
1923
	}
1924 1925

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

1930
	kref_get(&dev->ref);
1931
	kref_get(&v4l2->ref);
1932
	v4l2->users++;
1933

1934
	mutex_unlock(&dev->lock);
1935

1936
	return 0;
1937
}
1938

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

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

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

1958 1959 1960
	if (v4l2 == NULL)
		return 0;

1961 1962
	em28xx_info("Closing video extension");

1963 1964
	mutex_lock(&dev->lock);

1965
	v4l2_device_disconnect(&v4l2->v4l2_dev);
1966

1967 1968
	em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);

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

1985
	v4l2_ctrl_handler_free(&v4l2->ctrl_handler);
1986
	v4l2_device_unregister(&v4l2->v4l2_dev);
1987

1988 1989 1990
	if (v4l2->clk) {
		v4l2_clk_unregister_fixed(v4l2->clk);
		v4l2->clk = NULL;
1991 1992
	}

1993 1994
	kref_put(&v4l2->ref, em28xx_free_v4l2);

1995
	mutex_unlock(&dev->lock);
1996

1997
	kref_put(&dev->ref, em28xx_free_device);
1998

1999
	return 0;
2000
}
2001

2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027
static int em28xx_v4l2_suspend(struct em28xx *dev)
{
	if (dev->is_audio_only)
		return 0;

	if (!dev->has_video)
		return 0;

	em28xx_info("Suspending video extension");
	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;

	em28xx_info("Resuming video extension");
	/* what do we do here */
	return 0;
}

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

2039
	em28xx_videodbg("users=%d\n", v4l2->users);
2040

2041 2042
	vb2_fop_release(filp);
	mutex_lock(&dev->lock);
2043

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

2049
		/* Save some power by putting tuner to sleep */
2050
		v4l2_device_call_all(&v4l2->v4l2_dev, 0, core, s_power, 0);
2051

2052
		/* do this before setting alternate! */
2053
		em28xx_set_mode(dev, EM28XX_SUSPEND);
2054

2055 2056 2057 2058 2059 2060 2061 2062
		/* 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);
		}
2063
	}
2064

2065
exit:
2066
	v4l2->users--;
2067
	kref_put(&v4l2->ref, em28xx_free_v4l2);
2068
	mutex_unlock(&dev->lock);
2069 2070
	kref_put(&dev->ref, em28xx_free_device);

2071 2072
	return 0;
}
2073

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

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

2097 2098 2099 2100 2101 2102 2103
	.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,

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

static const struct video_device em28xx_video_template = {
2128 2129
	.fops		= &em28xx_v4l_fops,
	.ioctl_ops	= &video_ioctl_ops,
2130
	.release	= video_device_release,
2131
	.tvnorms	= V4L2_STD_ALL,
2132 2133
};

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

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

2156
static struct video_device em28xx_radio_template = {
2157 2158
	.fops		= &radio_fops,
	.ioctl_ops	= &radio_ioctl_ops,
2159
	.release	= video_device_release,
2160 2161
};

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

2180
/******************************** usb interface ******************************/
2181

2182 2183 2184 2185
static struct video_device
*em28xx_vdev_init(struct em28xx *dev,
		  const struct video_device *template,
		  const char *type_name)
2186 2187 2188 2189 2190 2191
{
	struct video_device *vfd;

	vfd = video_device_alloc();
	if (NULL == vfd)
		return NULL;
2192 2193

	*vfd		= *template;
2194
	vfd->v4l2_dev	= &dev->v4l2->v4l2_dev;
2195
	vfd->debug	= video_debug;
H
Hans Verkuil 已提交
2196
	vfd->lock	= &dev->lock;
2197 2198
	if (dev->board.is_webcam)
		vfd->tvnorms = 0;
2199 2200 2201 2202

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

2203
	video_set_drvdata(vfd, dev);
2204 2205 2206
	return vfd;
}

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 2496
	v4l2->vdev = em28xx_vdev_init(dev, &em28xx_video_template, "video");
	if (!v4l2->vdev) {
2497
		em28xx_errdev("cannot allocate video_device.\n");
2498 2499
		ret = -ENODEV;
		goto unregister_dev;
2500
	}
2501 2502 2503 2504
	mutex_init(&v4l2->vb_queue_lock);
	mutex_init(&v4l2->vb_vbi_queue_lock);
	v4l2->vdev->queue = &v4l2->vb_vidq;
	v4l2->vdev->queue->lock = &v4l2->vb_queue_lock;
2505

2506 2507
	/* disable inapplicable ioctls */
	if (dev->board.is_webcam) {
2508 2509 2510
		v4l2_disable_ioctl(v4l2->vdev, VIDIOC_QUERYSTD);
		v4l2_disable_ioctl(v4l2->vdev, VIDIOC_G_STD);
		v4l2_disable_ioctl(v4l2->vdev, VIDIOC_S_STD);
2511
	} else {
2512
		v4l2_disable_ioctl(v4l2->vdev, VIDIOC_S_PARM);
2513
	}
2514
	if (dev->tuner_type == TUNER_ABSENT) {
2515 2516 2517 2518
		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);
2519
	}
2520
	if (dev->int_audio_type == EM28XX_INT_AUDIO_NONE) {
2521 2522
		v4l2_disable_ioctl(v4l2->vdev, VIDIOC_G_AUDIO);
		v4l2_disable_ioctl(v4l2->vdev, VIDIOC_S_AUDIO);
2523
	}
2524

2525
	/* register v4l2 video video_device */
2526
	ret = video_register_device(v4l2->vdev, VFL_TYPE_GRABBER,
2527
				    video_nr[dev->devno]);
2528 2529 2530
	if (ret) {
		em28xx_errdev("unable to register video device (error=%i).\n",
			      ret);
2531
		goto unregister_dev;
2532 2533 2534
	}

	/* Allocate and fill vbi video_device struct */
2535
	if (em28xx_vbi_supported(dev) == 1) {
2536
		v4l2->vbi_dev = em28xx_vdev_init(dev, &em28xx_video_template,
2537
						"vbi");
2538

2539 2540
		v4l2->vbi_dev->queue = &v4l2->vb_vbiq;
		v4l2->vbi_dev->queue->lock = &v4l2->vb_vbi_queue_lock;
2541

2542
		/* disable inapplicable ioctls */
2543
		v4l2_disable_ioctl(v4l2->vbi_dev, VIDIOC_S_PARM);
2544
		if (dev->tuner_type == TUNER_ABSENT) {
2545 2546 2547 2548
			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);
2549
		}
2550
		if (dev->int_audio_type == EM28XX_INT_AUDIO_NONE) {
2551 2552
			v4l2_disable_ioctl(v4l2->vbi_dev, VIDIOC_G_AUDIO);
			v4l2_disable_ioctl(v4l2->vbi_dev, VIDIOC_S_AUDIO);
2553
		}
2554

2555
		/* register v4l2 vbi video_device */
2556
		ret = video_register_device(v4l2->vbi_dev, VFL_TYPE_VBI,
2557 2558 2559
					    vbi_nr[dev->devno]);
		if (ret < 0) {
			em28xx_errdev("unable to register vbi device\n");
2560
			goto unregister_dev;
2561
		}
2562 2563 2564
	}

	if (em28xx_boards[dev->model].radio.type == EM28XX_RADIO) {
2565 2566 2567
		v4l2->radio_dev = em28xx_vdev_init(dev, &em28xx_radio_template,
						   "radio");
		if (!v4l2->radio_dev) {
2568
			em28xx_errdev("cannot allocate video_device.\n");
2569 2570
			ret = -ENODEV;
			goto unregister_dev;
2571
		}
2572
		ret = video_register_device(v4l2->radio_dev, VFL_TYPE_RADIO,
2573 2574 2575
					    radio_nr[dev->devno]);
		if (ret < 0) {
			em28xx_errdev("can't register radio device\n");
2576
			goto unregister_dev;
2577
		}
2578
		em28xx_info("Registered radio device as %s\n",
2579
			    video_device_node_name(v4l2->radio_dev));
2580 2581
	}

2582
	em28xx_info("V4L2 video device registered as %s\n",
2583
		    video_device_node_name(v4l2->vdev));
2584

2585
	if (v4l2->vbi_dev)
2586
		em28xx_info("V4L2 VBI device registered as %s\n",
2587
			    video_device_node_name(v4l2->vbi_dev));
2588

2589
	/* Save some power by putting tuner to sleep */
2590
	v4l2_device_call_all(&v4l2->v4l2_dev, 0, core, s_power, 0);
2591 2592 2593 2594

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

2595 2596
	em28xx_info("V4L2 extension successfully initialized\n");

2597 2598
	kref_get(&dev->ref);

2599
	mutex_unlock(&dev->lock);
2600
	return 0;
2601 2602

unregister_dev:
2603
	v4l2_ctrl_handler_free(&v4l2->ctrl_handler);
2604
	v4l2_device_unregister(&v4l2->v4l2_dev);
2605
err:
2606 2607
	dev->v4l2 = NULL;
	kref_put(&v4l2->ref, em28xx_free_v4l2);
2608
	mutex_unlock(&dev->lock);
2609
	return ret;
2610
}
2611 2612 2613 2614 2615 2616

static struct em28xx_ops v4l2_ops = {
	.id   = EM28XX_V4L2,
	.name = "Em28xx v4l2 Extension",
	.init = em28xx_v4l2_init,
	.fini = em28xx_v4l2_fini,
2617 2618
	.suspend = em28xx_v4l2_suspend,
	.resume = em28xx_v4l2_resume,
2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632
};

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