em28xx-video.c 76.4 KB
Newer Older
1 2 3 4 5 6 7
// SPDX-License-Identifier: GPL-2.0+
//
// em28xx-video.c - driver for Empia EM2800/EM2820/2840 USB
//		    video capture devices
//
// Copyright (C) 2005 Ludovico Cavedon <cavedon@sssup.it>
//		      Markus Rechberger <mrechberger@gmail.com>
8
//		      Mauro Carvalho Chehab <mchehab@kernel.org>
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
//		      Sascha Sommer <saschasommer@freenet.de>
// Copyright (C) 2012 Frank Schäfer <fschaefer.oss@googlemail.com>
//
//	Some parts based on SN9C10x PC Camera Controllers GPL driver made
//		by Luca Risolia <luca.risolia@studio.unibo.it>
//
// 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.
24

25 26
#include "em28xx.h"

27 28 29 30
#include <linux/init.h>
#include <linux/list.h>
#include <linux/module.h>
#include <linux/kernel.h>
31
#include <linux/bitmap.h>
32 33
#include <linux/usb.h>
#include <linux/i2c.h>
34
#include <linux/mm.h>
35
#include <linux/mutex.h>
36
#include <linux/slab.h>
37

38
#include "em28xx-v4l.h"
39
#include <media/v4l2-common.h>
40
#include <media/v4l2-ioctl.h>
41
#include <media/v4l2-event.h>
42
#include <media/drv-intf/msp3400.h>
43
#include <media/tuner.h>
44

45 46
#define DRIVER_AUTHOR "Ludovico Cavedon <cavedon@sssup.it>, " \
		      "Markus Rechberger <mrechberger@gmail.com>, " \
47
		      "Mauro Carvalho Chehab <mchehab@kernel.org>, " \
48
		      "Sascha Sommer <saschasommer@freenet.de>"
49

50 51 52 53 54 55 56 57 58 59 60 61
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");

62 63
#define em28xx_videodbg(fmt, arg...) do {				\
	if (video_debug)						\
64
		dev_printk(KERN_DEBUG, &dev->intf->dev,			\
65 66
			   "video: %s: " fmt, __func__, ## arg);	\
} while (0)
67

68 69
#define em28xx_isocdbg(fmt, arg...) do {\
	if (isoc_debug) \
70
		dev_printk(KERN_DEBUG, &dev->intf->dev,			\
71 72
			   "isoc: %s: " fmt, __func__, ## arg);		\
} while (0)
73

74
MODULE_AUTHOR(DRIVER_AUTHOR);
75
MODULE_DESCRIPTION(DRIVER_DESC " - v4l2 interface");
76
MODULE_LICENSE("GPL v2");
77
MODULE_VERSION(EM28XX_VERSION);
78

79 80 81 82 83 84 85 86
#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)

87 88 89
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 };
90

91 92
module_param_array(video_nr, int, NULL, 0444);
module_param_array(vbi_nr, int, NULL, 0444);
93 94 95 96
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");
97

98
static unsigned int video_debug;
99 100
module_param(video_debug, int, 0644);
MODULE_PARM_DESC(video_debug, "enable debug messages [video]");
101

102 103 104
/* supported video standards */
static struct em28xx_fmt format[] = {
	{
105
		.name     = "16 bpp YUY2, 4:2:2, packed",
106 107
		.fourcc   = V4L2_PIX_FMT_YUYV,
		.depth    = 16,
108
		.reg	  = EM28XX_OUTFMT_YUV422_Y0UY1V,
109
	}, {
110
		.name     = "16 bpp RGB 565, LE",
111 112
		.fourcc   = V4L2_PIX_FMT_RGB565,
		.depth    = 16,
113
		.reg      = EM28XX_OUTFMT_RGB_16_656,
114 115 116 117 118
	}, {
		.name     = "8 bpp Bayer RGRG..GBGB",
		.fourcc   = V4L2_PIX_FMT_SRGGB8,
		.depth    = 8,
		.reg      = EM28XX_OUTFMT_RGB_8_RGRG,
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
	}, {
		.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->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->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
{
	/* Modprobe option to manually disable */
	if (disable_vbi == 1)
		return 0;

175
	if (dev->is_webcam)
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
		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);
251
		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
	/* 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);
320 321 322 323
		/*
		 * it seems that both H and V scalers must be active
		 * to work correctly
		 */
324 325
		mode = (h || v) ? 0x30 : 0x00;
	}
326
	return em28xx_write_reg(dev, EM28XX_R26_COMPR, mode);
327 328 329
}

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

	/* Properly setup VBI */
337
	v4l2->vbi_width = 720;
338
	if (v4l2->norm & V4L2_STD_525_60)
339
		v4l2->vbi_height = 12;
340
	else
341
		v4l2->vbi_height = 18;
342 343 344 345 346

	em28xx_set_outfmt(dev);

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

347 348 349 350 351 352 353 354 355
	/*
	 * 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
	 */
356 357 358 359 360
	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);

361
	return em28xx_scaler_set(dev, v4l2->hscale, v4l2->vscale);
362 363 364
}

/* Set USB alternate setting for analog video */
365
static int em28xx_set_alternate(struct em28xx *dev)
366
{
367
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
368
	struct usb_device *udev = interface_to_usbdev(dev->intf);
369
	int err;
370
	int i;
371
	unsigned int min_pkt_size = v4l2->width * 2 + 4;
372

373 374 375 376
	/*
	 * NOTE: for isoc transfers, only alt settings > 0 are allowed
	 * bulk transfers seem to work only with alt=0 !
	 */
377
	dev->alt = 0;
378
	if (alt > 0 && alt < dev->num_alt) {
379 380 381 382 383 384 385
		em28xx_videodbg("alternate forced to %d\n", dev->alt);
		dev->alt = alt;
		goto set_alt;
	}
	if (dev->analog_xfer_bulk)
		goto set_alt;

386 387 388 389
	/*
	 * When image size is bigger than a certain value,
	 * the frame size should be increased, otherwise, only
	 * green screen will be received.
390
	 */
391
	if (v4l2->width * 2 * v4l2->height > 720 * 240 * 2)
392 393 394 395 396 397 398
		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;
399 400 401 402 403
		/*
		 * otherwise make sure that we end up with the maximum
		 * bandwidth because the min_pkt_size equation might be wrong.
		 *
		 */
404 405 406 407 408 409
		} else if (dev->alt_max_pkt_size_isoc[i] >
			   dev->alt_max_pkt_size_isoc[dev->alt])
			dev->alt = i;
	}

set_alt:
410 411
	/*
	 * NOTE: for bulk transfers, we need to call usb_set_interface()
412
	 * even if the previous settings were the same. Otherwise streaming
413 414
	 * fails with all urbs having status = -EOVERFLOW !
	 */
415 416 417 418 419
	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",
420
				min_pkt_size, dev->alt);
421 422 423 424 425
		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",
426
			dev->alt, dev->max_pkt_size);
427 428
	err = usb_set_interface(udev, dev->ifnum, dev->alt);
	if (err < 0) {
429
		dev_err(&dev->intf->dev,
430
			"cannot change alternate number to %d (error=%i)\n",
431 432
			dev->alt, err);
		return err;
433 434 435 436
	}
	return 0;
}

437 438 439
/*
 * DMA and thread functions
 */
440 441

/*
442
 * Finish the current buffer
443
 */
444 445
static inline void finish_buffer(struct em28xx *dev,
				 struct em28xx_buffer *buf)
446
{
447 448
	em28xx_isocdbg("[%p/%d] wakeup\n", buf, buf->top_field);

449
	buf->vb.sequence = dev->v4l2->field_count++;
450
	if (dev->v4l2->progressive)
451
		buf->vb.field = V4L2_FIELD_NONE;
452
	else
453
		buf->vb.field = V4L2_FIELD_INTERLACED;
454
	buf->vb.vb2_buf.timestamp = ktime_get_ns();
455

456
	vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
457 458 459
}

/*
460
 * Copy picture data from USB buffer to videobuf buffer
461 462 463
 */
static void em28xx_copy_video(struct em28xx *dev,
			      struct em28xx_buffer *buf,
464
			      unsigned char *usb_buf,
465
			      unsigned long len)
466
{
467
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
468
	void *fieldstart, *startwrite, *startread;
469
	int  linesdone, currlinedone, offset, lencopy, remain;
470
	int bytesperline = v4l2->width << 1;
471

472 473
	if (buf->pos + len > buf->length)
		len = buf->length - buf->pos;
474

475
	startread = usb_buf;
476 477
	remain = len;

478
	if (v4l2->progressive || buf->top_field)
479
		fieldstart = buf->vb_buf;
480
	else /* interlaced mode, even nr. of lines */
481
		fieldstart = buf->vb_buf + bytesperline;
482

483 484
	linesdone = buf->pos / bytesperline;
	currlinedone = buf->pos % bytesperline;
485

486
	if (v4l2->progressive)
487 488 489 490
		offset = linesdone * bytesperline + currlinedone;
	else
		offset = linesdone * bytesperline * 2 + currlinedone;

491
	startwrite = fieldstart + offset;
492
	lencopy = bytesperline - currlinedone;
493 494
	lencopy = lencopy > remain ? remain : lencopy;

495
	if ((char *)startwrite + lencopy > (char *)buf->vb_buf + buf->length) {
496
		em28xx_isocdbg("Overflow of %zu bytes past buffer end (1)\n",
497
			       ((char *)startwrite + lencopy) -
498 499
			      ((char *)buf->vb_buf + buf->length));
		remain = (char *)buf->vb_buf + buf->length -
500
			 (char *)startwrite;
501
		lencopy = remain;
502
	}
503 504
	if (lencopy <= 0)
		return;
505
	memcpy(startwrite, startread, lencopy);
506 507 508 509

	remain -= lencopy;

	while (remain > 0) {
510
		if (v4l2->progressive)
511 512 513
			startwrite += lencopy;
		else
			startwrite += lencopy + bytesperline;
514
		startread += lencopy;
515
		if (bytesperline > remain)
516 517
			lencopy = remain;
		else
518
			lencopy = bytesperline;
519

520
		if ((char *)startwrite + lencopy > (char *)buf->vb_buf +
521
		    buf->length) {
522
			em28xx_isocdbg("Overflow of %zu bytes past buffer end(2)\n",
523
				       ((char *)startwrite + lencopy) -
524
				       ((char *)buf->vb_buf + buf->length));
525 526 527
			remain = (char *)buf->vb_buf + buf->length -
				 (char *)startwrite;
			lencopy = remain;
528
		}
529 530
		if (lencopy <= 0)
			break;
531 532

		memcpy(startwrite, startread, lencopy);
533 534 535 536

		remain -= lencopy;
	}

537
	buf->pos += len;
538 539
}

540 541 542
/*
 * Copy VBI data from USB buffer to videobuf buffer
 */
543
static void em28xx_copy_vbi(struct em28xx *dev,
544
			    struct em28xx_buffer *buf,
545
			    unsigned char *usb_buf,
546
			    unsigned long len)
547
{
548
	unsigned int offset;
549

550 551
	if (buf->pos + len > buf->length)
		len = buf->length - buf->pos;
552

553
	offset = buf->pos;
554
	/* Make sure the bottom field populates the second half of the frame */
555
	if (buf->top_field == 0)
556
		offset += dev->v4l2->vbi_width * dev->v4l2->vbi_height;
557

558
	memcpy(buf->vb_buf + offset, usb_buf, len);
559
	buf->pos += len;
560 561
}

562
static inline void print_err_status(struct em28xx *dev,
563
				    int packet, int status)
564 565 566
{
	char *errmsg = "Unknown";

567
	switch (status) {
568
	case -ENOENT:
569
		errmsg = "unlinked synchronously";
570 571
		break;
	case -ECONNRESET:
572
		errmsg = "unlinked asynchronously";
573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592
		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;
	}
593
	if (packet < 0) {
594 595 596 597 598 599 600 601
		em28xx_isocdbg("URB status %d [%s].\n",	status, errmsg);
	} else {
		em28xx_isocdbg("URB packet %d, status %d [%s].\n",
			       packet, status, errmsg);
	}
}

/*
602
 * get the next available buffer from dma queue
603
 */
604 605
static inline struct em28xx_buffer *get_next_buf(struct em28xx *dev,
						 struct em28xx_dmaqueue *dma_q)
606
{
607
	struct em28xx_buffer *buf;
608

609 610
	if (list_empty(&dma_q->active)) {
		em28xx_isocdbg("No active queue to serve\n");
611
		return NULL;
612 613 614
	}

	/* Get the next buffer */
615
	buf = list_entry(dma_q->active.next, struct em28xx_buffer, list);
L
Lucas De Marchi 已提交
616
	/* Cleans up buffer - Useful for testing for frame/URB loss */
617
	list_del(&buf->list);
618
	buf->pos = 0;
619
	buf->vb_buf = buf->mem;
620

621
	return buf;
622 623
}

624 625 626 627 628 629 630 631
/*
 * 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)
{
632 633
	struct em28xx_v4l2 *v4l2 = dev->v4l2;

634
	if (v4l2->progressive || v4l2->top_field) { /* Brand new frame */
635
		if (buf)
636 637 638
			finish_buffer(dev, buf);
		buf = get_next_buf(dev, dma_q);
	}
639
	if (buf) {
640
		buf->top_field = v4l2->top_field;
641 642 643 644 645 646
		buf->pos = 0;
	}

	return buf;
}

647 648 649 650 651 652
/*
 * 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)
653
{
654
	struct em28xx_v4l2      *v4l2 = dev->v4l2;
655 656
	struct em28xx_buffer    *buf = dev->usb_ctl.vid_buf;
	struct em28xx_buffer    *vbi_buf = dev->usb_ctl.vbi_buf;
657
	struct em28xx_dmaqueue  *dma_q = &dev->vidq;
658
	struct em28xx_dmaqueue  *vbi_dma_q = &dev->vbiq;
659

660 661 662 663 664 665
	/*
	 * capture type 0 = vbi start
	 * capture type 1 = vbi in progress
	 * capture type 2 = video start
	 * capture type 3 = video in progress
	 */
666
	if (data_len >= 4) {
667 668 669 670
		/*
		 * NOTE: Headers are always 4 bytes and
		 * never split across packets
		 */
671 672 673 674 675 676 677
		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) */
678 679
			v4l2->capture_type = 0;
			v4l2->vbi_read = 0;
680
			em28xx_isocdbg("VBI START HEADER !!!\n");
681
			v4l2->top_field = !(data_pkt[2] & 1);
682 683 684 685
			data_pkt += 4;
			data_len -= 4;
		} else if (data_pkt[0] == 0x22 && data_pkt[1] == 0x5a) {
			/* Field start (VBI disabled) */
686
			v4l2->capture_type = 2;
687
			em28xx_isocdbg("VIDEO START HEADER !!!\n");
688
			v4l2->top_field = !(data_pkt[2] & 1);
689 690 691 692
			data_pkt += 4;
			data_len -= 4;
		}
	}
693 694 695 696
	/*
	 * NOTE: With bulk transfers, intermediate data packets
	 * have no continuation header
	 */
697

698
	if (v4l2->capture_type == 0) {
699 700
		vbi_buf = finish_field_prepare_next(dev, vbi_buf, vbi_dma_q);
		dev->usb_ctl.vbi_buf = vbi_buf;
701
		v4l2->capture_type = 1;
702 703
	}

704
	if (v4l2->capture_type == 1) {
705
		int vbi_size = v4l2->vbi_width * v4l2->vbi_height;
706 707
		int vbi_data_len = ((v4l2->vbi_read + data_len) > vbi_size) ?
				   (vbi_size - v4l2->vbi_read) : data_len;
708 709

		/* Copy VBI data */
710
		if (vbi_buf)
711
			em28xx_copy_vbi(dev, vbi_buf, data_pkt, vbi_data_len);
712
		v4l2->vbi_read += vbi_data_len;
713 714 715

		if (vbi_data_len < data_len) {
			/* Continue with copying video data */
716
			v4l2->capture_type = 2;
717 718 719 720 721
			data_pkt += vbi_data_len;
			data_len -= vbi_data_len;
		}
	}

722
	if (v4l2->capture_type == 2) {
723 724
		buf = finish_field_prepare_next(dev, buf, dma_q);
		dev->usb_ctl.vid_buf = buf;
725
		v4l2->capture_type = 3;
726 727
	}

728
	if (v4l2->capture_type == 3 && buf && data_len > 0)
729 730 731
		em28xx_copy_video(dev, buf, data_pkt, data_len);
}

732 733 734 735 736 737 738 739 740
/*
 * 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;
741
	struct em28xx_v4l2      *v4l2 = dev->v4l2;
742
	bool frame_end = false;
743 744

	/* Check for header */
745 746 747 748
	/*
	 * NOTE: at least with bulk transfers, only the first packet
	 * has a header and has always set the FRAME_END bit
	 */
749 750 751
	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)) {
752
			v4l2->top_field = !(data_pkt[1] &
753 754 755 756 757 758 759 760 761 762 763 764
					   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;
		}
765 766
		/*
		 * NOTE: in ISOC mode when a new frame starts and buf==NULL,
767 768 769 770 771 772
		 * we COULD already prepare a buffer here to avoid skipping the
		 * first frame.
		 */
	}

	/* Copy data */
773
	if (buf && data_len > 0)
774 775 776 777 778 779 780 781
		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;
	}

782 783 784 785
	/*
	 * NOTES:
	 *
	 * 1) Tested with USB bulk transfers only !
786 787 788
	 * 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.
789 790 791
	 *
	 * 2) Support for interlaced mode is pure theory. It has not been
	 * tested and it is unknown if these devices actually support it.
792 793 794
	 */
}

795 796 797 798 799 800
/* 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;
801 802 803 804

	if (!dev)
		return 0;

805
	if (dev->disconnected)
806 807
		return 0;

808
	if (urb->status < 0)
809 810
		print_err_status(dev, -1, urb->status);

811 812 813 814 815 816
	xfer_bulk = usb_pipebulk(urb->pipe);

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

818 819
	for (i = 0; i < num_packets; i++) {
		if (xfer_bulk) { /* bulk */
820
			usb_data_len = urb->actual_length;
821

822
			usb_data_pkt = urb->transfer_buffer;
823 824 825 826 827 828 829 830
		} 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;
			}

831 832
			usb_data_len = urb->iso_frame_desc[i].actual_length;
			if (usb_data_len > dev->max_pkt_size) {
833
				em28xx_isocdbg("packet bigger than packet size");
834
				continue;
835
			}
836

837 838
			usb_data_pkt = urb->transfer_buffer +
				       urb->iso_frame_desc[i].offset;
839
		}
840

841
		if (usb_data_len == 0) {
842 843
			/* NOTE: happens very often with isoc transfers */
			/* em28xx_usbdbg("packet %d is empty",i); - spammy */
844 845 846
			continue;
		}

847 848 849 850 851 852
		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);
853
	}
854
	return 1;
855 856
}

857
static int get_resource(enum v4l2_buf_type f_type)
858 859 860 861 862 863 864
{
	switch (f_type) {
	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
		return EM28XX_RESOURCE_VIDEO;
	case V4L2_BUF_TYPE_VBI_CAPTURE:
		return EM28XX_RESOURCE_VBI;
	default:
865 866
		WARN_ON(1);
		return -1; /* Indicate that device is busy */
867 868 869 870 871 872
	}
}

/* Usage lock check functions */
static int res_get(struct em28xx *dev, enum v4l2_buf_type f_type)
{
873
	int res_type = get_resource(f_type);
874 875 876 877 878 879 880 881 882 883 884 885 886 887 888

	/* 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)
{
889
	int res_type = get_resource(f_type);
890 891 892 893 894

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

895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954
static void em28xx_v4l2_media_release(struct em28xx *dev)
{
#ifdef CONFIG_MEDIA_CONTROLLER
	int i;

	for (i = 0; i < MAX_EM28XX_INPUT; i++) {
		if (!INPUT(i)->type)
			return;
		media_device_unregister_entity(&dev->input_ent[i]);
	}
#endif
}

/*
 * Media Controller helper functions
 */

static int em28xx_enable_analog_tuner(struct em28xx *dev)
{
#ifdef CONFIG_MEDIA_CONTROLLER
	struct media_device *mdev = dev->media_dev;
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
	struct media_entity *source;
	struct media_link *link, *found_link = NULL;
	int ret, active_links = 0;

	if (!mdev || !v4l2->decoder)
		return 0;

	/*
	 * This will find the tuner that is connected into the decoder.
	 * Technically, this is not 100% correct, as the device may be
	 * using an analog input instead of the tuner. However, as we can't
	 * do DVB streaming while the DMA engine is being used for V4L2,
	 * this should be enough for the actual needs.
	 */
	list_for_each_entry(link, &v4l2->decoder->links, list) {
		if (link->sink->entity == v4l2->decoder) {
			found_link = link;
			if (link->flags & MEDIA_LNK_FL_ENABLED)
				active_links++;
			break;
		}
	}

	if (active_links == 1 || !found_link)
		return 0;

	source = found_link->source->entity;
	list_for_each_entry(link, &source->links, list) {
		struct media_entity *sink;
		int flags = 0;

		sink = link->sink->entity;

		if (sink == v4l2->decoder)
			flags = MEDIA_LNK_FL_ENABLED;

		ret = media_entity_setup_link(link, flags);
		if (ret) {
955
			dev_err(&dev->intf->dev,
956 957 958 959
				"Couldn't change link %s->%s to %s. Error %d\n",
				source->name, sink->name,
				flags ? "enabled" : "disabled",
				ret);
960
			return ret;
961 962 963 964 965
		}

		em28xx_videodbg("link %s->%s was %s\n",
				source->name, sink->name,
				flags ? "ENABLED" : "disabled");
966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987
	}
#endif
	return 0;
}

static const char * const iname[] = {
	[EM28XX_VMUX_COMPOSITE]  = "Composite",
	[EM28XX_VMUX_SVIDEO]     = "S-Video",
	[EM28XX_VMUX_TELEVISION] = "Television",
	[EM28XX_RADIO]           = "Radio",
};

static void em28xx_v4l2_create_entities(struct em28xx *dev)
{
#if defined(CONFIG_MEDIA_CONTROLLER)
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
	int ret, i;

	/* Initialize Video, VBI and Radio pads */
	v4l2->video_pad.flags = MEDIA_PAD_FL_SINK;
	ret = media_entity_pads_init(&v4l2->vdev.entity, 1, &v4l2->video_pad);
	if (ret < 0)
988
		dev_err(&dev->intf->dev,
989
			"failed to initialize video media entity!\n");
990 991 992 993 994 995

	if (em28xx_vbi_supported(dev)) {
		v4l2->vbi_pad.flags = MEDIA_PAD_FL_SINK;
		ret = media_entity_pads_init(&v4l2->vbi_dev.entity, 1,
					     &v4l2->vbi_pad);
		if (ret < 0)
996
			dev_err(&dev->intf->dev,
997
				"failed to initialize vbi media entity!\n");
998 999 1000
	}

	/* Webcams don't have input connectors */
1001
	if (dev->is_webcam)
1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022
		return;

	/* Create entities for each input connector */
	for (i = 0; i < MAX_EM28XX_INPUT; i++) {
		struct media_entity *ent = &dev->input_ent[i];

		if (!INPUT(i)->type)
			break;

		ent->name = iname[INPUT(i)->type];
		ent->flags = MEDIA_ENT_FL_CONNECTOR;
		dev->input_pad[i].flags = MEDIA_PAD_FL_SOURCE;

		switch (INPUT(i)->type) {
		case EM28XX_VMUX_COMPOSITE:
			ent->function = MEDIA_ENT_F_CONN_COMPOSITE;
			break;
		case EM28XX_VMUX_SVIDEO:
			ent->function = MEDIA_ENT_F_CONN_SVIDEO;
			break;
		default: /* EM28XX_VMUX_TELEVISION or EM28XX_RADIO */
1023 1024
			if (dev->tuner_type != TUNER_ABSENT)
				ent->function = MEDIA_ENT_F_CONN_RF;
1025 1026 1027 1028 1029
			break;
		}

		ret = media_entity_pads_init(ent, 1, &dev->input_pad[i]);
		if (ret < 0)
1030
			dev_err(&dev->intf->dev,
1031
				"failed to initialize input pad[%d]!\n", i);
1032 1033 1034

		ret = media_device_register_entity(dev->media_dev, ent);
		if (ret < 0)
1035
			dev_err(&dev->intf->dev,
1036
				"failed to register input entity %d!\n", i);
1037 1038 1039 1040
	}
#endif
}

1041 1042 1043
/*
 * Videobuf2 operations
 */
1044

1045
static int queue_setup(struct vb2_queue *vq,
1046
		       unsigned int *nbuffers, unsigned int *nplanes,
1047
		       unsigned int sizes[], struct device *alloc_devs[])
1048
{
1049
	struct em28xx *dev = vb2_get_drv_priv(vq);
1050
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
1051
	unsigned long size =
1052
		    (v4l2->width * v4l2->height * v4l2->format->depth + 7) >> 3;
1053

1054 1055
	if (*nplanes)
		return sizes[0] < size ? -EINVAL : 0;
1056 1057
	*nplanes = 1;
	sizes[0] = size;
1058 1059 1060

	em28xx_enable_analog_tuner(dev);

1061 1062 1063
	return 0;
}

1064 1065
static int
buffer_prepare(struct vb2_buffer *vb)
1066
{
1067
	struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
1068
	struct em28xx        *dev = vb2_get_drv_priv(vb->vb2_queue);
1069
	struct em28xx_v4l2   *v4l2 = dev->v4l2;
1070
	unsigned long size;
1071

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

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

1076 1077 1078 1079 1080
	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;
	}
1081
	vb2_set_plane_payload(vb, 0, size);
1082 1083

	return 0;
1084 1085
}

1086
int em28xx_start_analog_streaming(struct vb2_queue *vq, unsigned int count)
1087
{
1088
	struct em28xx *dev = vb2_get_drv_priv(vq);
1089
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
1090
	struct v4l2_frequency f;
1091
	struct v4l2_fh *owner;
1092
	int rc = 0;
1093

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

1096 1097
	dev->v4l2->field_count = 0;

1098 1099 1100 1101
	/*
	 * Make sure streaming is not already in progress for this type
	 * of filehandle (e.g. video, vbi)
	 */
1102 1103 1104
	rc = res_get(dev, vq->type);
	if (rc)
		return rc;
1105

1106
	if (v4l2->streaming_users == 0) {
1107
		/* First active streaming user, so allocate all the URBs */
1108

1109 1110
		/* Allocate the USB bandwidth */
		em28xx_set_alternate(dev);
1111

1112 1113 1114 1115
		/*
		 * Needed, since GPIO might have disabled power of
		 * some i2c device
		 */
1116
		em28xx_wake_i2c(dev);
1117

1118
		v4l2->capture_type = -1;
1119 1120 1121 1122 1123 1124
		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);
1125
		if (rc < 0)
1126
			return rc;
1127

1128 1129 1130 1131 1132 1133 1134 1135
		/*
		 * 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));
1136
		f.frequency = v4l2->frequency;
1137 1138
		owner = (struct v4l2_fh *)vq->owner;
		if (owner && owner->vdev->vfl_type == VFL_TYPE_RADIO)
1139 1140 1141
			f.type = V4L2_TUNER_RADIO;
		else
			f.type = V4L2_TUNER_ANALOG_TV;
1142
		v4l2_device_call_all(&v4l2->v4l2_dev,
1143
				     0, tuner, s_frequency, &f);
1144 1145 1146

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

1149
	v4l2->streaming_users++;
1150

1151 1152 1153
	return rc;
}

1154
static void em28xx_stop_streaming(struct vb2_queue *vq)
1155 1156
{
	struct em28xx *dev = vb2_get_drv_priv(vq);
1157
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
1158 1159 1160 1161 1162 1163 1164
	struct em28xx_dmaqueue *vidq = &dev->vidq;
	unsigned long flags = 0;

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

	res_free(dev, vq->type);

1165
	if (v4l2->streaming_users-- == 1) {
1166 1167 1168
		/* Disable video stream at TV decoder */
		v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_stream, 0);

1169 1170 1171 1172 1173
		/* Last active user, so shutdown all the URBS */
		em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);
	}

	spin_lock_irqsave(&dev->slock, flags);
1174
	if (dev->usb_ctl.vid_buf) {
1175 1176
		vb2_buffer_done(&dev->usb_ctl.vid_buf->vb.vb2_buf,
				VB2_BUF_STATE_ERROR);
1177 1178
		dev->usb_ctl.vid_buf = NULL;
	}
1179 1180
	while (!list_empty(&vidq->active)) {
		struct em28xx_buffer *buf;
1181

1182 1183
		buf = list_entry(vidq->active.next, struct em28xx_buffer, list);
		list_del(&buf->list);
1184
		vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
1185 1186 1187 1188
	}
	spin_unlock_irqrestore(&dev->slock, flags);
}

1189
void em28xx_stop_vbi_streaming(struct vb2_queue *vq)
1190
{
1191
	struct em28xx *dev = vb2_get_drv_priv(vq);
1192
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
1193 1194 1195 1196 1197 1198
	struct em28xx_dmaqueue *vbiq = &dev->vbiq;
	unsigned long flags = 0;

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

	res_free(dev, vq->type);
1199

1200
	if (v4l2->streaming_users-- == 1) {
1201 1202 1203
		/* Disable video stream at TV decoder */
		v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_stream, 0);

1204 1205 1206 1207 1208
		/* Last active user, so shutdown all the URBS */
		em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);
	}

	spin_lock_irqsave(&dev->slock, flags);
1209
	if (dev->usb_ctl.vbi_buf) {
1210 1211
		vb2_buffer_done(&dev->usb_ctl.vbi_buf->vb.vb2_buf,
				VB2_BUF_STATE_ERROR);
1212 1213
		dev->usb_ctl.vbi_buf = NULL;
	}
1214 1215
	while (!list_empty(&vbiq->active)) {
		struct em28xx_buffer *buf;
1216

1217 1218
		buf = list_entry(vbiq->active.next, struct em28xx_buffer, list);
		list_del(&buf->list);
1219
		vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
1220 1221
	}
	spin_unlock_irqrestore(&dev->slock, flags);
1222 1223
}

1224 1225
static void
buffer_queue(struct vb2_buffer *vb)
1226
{
1227
	struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
1228
	struct em28xx *dev = vb2_get_drv_priv(vb->vb2_queue);
1229 1230
	struct em28xx_buffer *buf =
		container_of(vbuf, struct em28xx_buffer, vb);
1231 1232
	struct em28xx_dmaqueue *vidq = &dev->vidq;
	unsigned long flags = 0;
1233

1234 1235 1236
	em28xx_videodbg("%s\n", __func__);
	buf->mem = vb2_plane_vaddr(vb, 0);
	buf->length = vb2_plane_size(vb, 0);
1237

1238 1239 1240
	spin_lock_irqsave(&dev->slock, flags);
	list_add_tail(&buf->list, &vidq->active);
	spin_unlock_irqrestore(&dev->slock, flags);
1241 1242
}

1243
static const struct vb2_ops em28xx_video_qops = {
1244
	.queue_setup    = queue_setup,
1245 1246
	.buf_prepare    = buffer_prepare,
	.buf_queue      = buffer_queue,
1247 1248 1249 1250
	.start_streaming = em28xx_start_analog_streaming,
	.stop_streaming = em28xx_stop_streaming,
	.wait_prepare   = vb2_ops_wait_prepare,
	.wait_finish    = vb2_ops_wait_finish,
1251
};
1252

1253
static int em28xx_vb2_setup(struct em28xx *dev)
1254 1255 1256
{
	int rc;
	struct vb2_queue *q;
1257
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
1258 1259

	/* Setup Videobuf2 for Video capture */
1260
	q = &v4l2->vb_vidq;
1261
	q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1262
	q->io_modes = VB2_READ | VB2_MMAP | VB2_USERPTR | VB2_DMABUF;
1263
	q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1264 1265 1266 1267 1268 1269 1270 1271 1272 1273
	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 */
1274
	q = &v4l2->vb_vbiq;
1275 1276
	q->type = V4L2_BUF_TYPE_VBI_CAPTURE;
	q->io_modes = VB2_READ | VB2_MMAP | VB2_USERPTR;
1277
	q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289
	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;
}

1290 1291 1292
/*
 * v4l2 interface
 */
1293

1294 1295
static void video_mux(struct em28xx *dev, int index)
{
1296
	struct v4l2_device *v4l2_dev = &dev->v4l2->v4l2_dev;
1297

1298 1299
	dev->ctl_input = index;
	dev->ctl_ainput = INPUT(index)->amux;
1300
	dev->ctl_aoutput = INPUT(index)->aout;
1301

1302 1303 1304
	if (!dev->ctl_aoutput)
		dev->ctl_aoutput = EM28XX_AOUT_MASTER;

1305
	v4l2_device_call_all(v4l2_dev, 0, video, s_routing,
1306
			     INPUT(index)->vmux, 0, 0);
1307

1308
	if (dev->has_msp34xx) {
1309
		if (dev->i2s_speed) {
1310
			v4l2_device_call_all(v4l2_dev, 0, audio,
1311
					     s_i2s_clock_freq, dev->i2s_speed);
1312
		}
1313
		/* Note: this is msp3400 specific */
1314
		v4l2_device_call_all(v4l2_dev, 0, audio, s_routing,
1315 1316
				     dev->ctl_ainput,
				     MSP_OUTPUT(MSP_SC_IN_DSP_SCART1), 0);
1317
	}
1318

1319
	if (dev->board.adecoder != EM28XX_NOADECODER) {
1320
		v4l2_device_call_all(v4l2_dev, 0, audio, s_routing,
1321
				     dev->ctl_ainput, dev->ctl_aoutput, 0);
1322 1323
	}

1324
	em28xx_audio_analog_set(dev);
1325 1326
}

1327
static void em28xx_ctrl_notify(struct v4l2_ctrl *ctrl, void *priv)
1328
{
1329
	struct em28xx *dev = priv;
1330

1331 1332 1333 1334 1335 1336
	/*
	 * 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.
	 */
1337 1338
	switch (ctrl->id) {
	case V4L2_CID_AUDIO_MUTE:
1339 1340 1341
		dev->mute = ctrl->val;
		em28xx_audio_analog_set(dev);
		break;
1342
	case V4L2_CID_AUDIO_VOLUME:
1343 1344 1345
		dev->volume = ctrl->val;
		em28xx_audio_analog_set(dev);
		break;
1346
	}
1347
}
1348

1349
static int em28xx_s_ctrl(struct v4l2_ctrl *ctrl)
1350
{
1351 1352 1353
	struct em28xx_v4l2 *v4l2 =
		  container_of(ctrl->handler, struct em28xx_v4l2, ctrl_handler);
	struct em28xx *dev = v4l2->dev;
1354
	int ret = -EINVAL;
1355

1356 1357
	switch (ctrl->id) {
	case V4L2_CID_AUDIO_MUTE:
1358
		dev->mute = ctrl->val;
1359
		ret = em28xx_audio_analog_set(dev);
1360
		break;
1361
	case V4L2_CID_AUDIO_VOLUME:
1362
		dev->volume = ctrl->val;
1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381
		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);
1382
		break;
1383
	}
1384

1385
	return (ret < 0) ? ret : 0;
1386
}
1387

1388
static const struct v4l2_ctrl_ops em28xx_ctrl_ops = {
1389 1390 1391
	.s_ctrl = em28xx_s_ctrl,
};

1392
static void size_to_scale(struct em28xx *dev,
1393
			  unsigned int width, unsigned int height,
1394 1395
			unsigned int *hscale, unsigned int *vscale)
{
1396 1397
	unsigned int          maxw = norm_maxw(dev);
	unsigned int          maxh = norm_maxh(dev);
1398 1399

	*hscale = (((unsigned long)maxw) << 12) / width - 4096L;
1400 1401
	if (*hscale > EM28XX_HVSCALE_MAX)
		*hscale = EM28XX_HVSCALE_MAX;
1402 1403

	*vscale = (((unsigned long)maxh) << 12) / height - 4096L;
1404 1405
	if (*vscale > EM28XX_HVSCALE_MAX)
		*vscale = EM28XX_HVSCALE_MAX;
1406 1407
}

1408 1409 1410 1411 1412 1413 1414 1415 1416
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);
1417 1418 1419 1420 1421 1422

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

1425 1426 1427
/*
 * IOCTL vidioc handling
 */
1428

1429
static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
1430
				struct v4l2_format *f)
1431
{
1432
	struct em28xx         *dev = video_drvdata(file);
1433
	struct em28xx_v4l2    *v4l2 = dev->v4l2;
1434

1435 1436
	f->fmt.pix.width = v4l2->width;
	f->fmt.pix.height = v4l2->height;
1437 1438
	f->fmt.pix.pixelformat = v4l2->format->fourcc;
	f->fmt.pix.bytesperline = (v4l2->width * v4l2->format->depth + 7) >> 3;
1439
	f->fmt.pix.sizeimage = f->fmt.pix.bytesperline * v4l2->height;
1440
	f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
1441

1442
	/* FIXME: TOP? NONE? BOTTOM? ALTENATE? */
1443
	if (v4l2->progressive)
1444 1445
		f->fmt.pix.field = V4L2_FIELD_NONE;
	else
1446
		f->fmt.pix.field = v4l2->interlaced_fieldmode ?
1447 1448
			   V4L2_FIELD_INTERLACED : V4L2_FIELD_TOP;
	return 0;
1449 1450
}

1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461
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;
}

1462
static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
1463
				  struct v4l2_format *f)
1464
{
1465
	struct em28xx         *dev   = video_drvdata(file);
1466
	struct em28xx_v4l2    *v4l2  = dev->v4l2;
1467 1468
	unsigned int          width  = f->fmt.pix.width;
	unsigned int          height = f->fmt.pix.height;
1469 1470 1471
	unsigned int          maxw   = norm_maxw(dev);
	unsigned int          maxh   = norm_maxh(dev);
	unsigned int          hscale, vscale;
1472 1473 1474 1475
	struct em28xx_fmt     *fmt;

	fmt = format_by_fourcc(f->fmt.pix.pixelformat);
	if (!fmt) {
1476 1477 1478
		fmt = &format[0];
		em28xx_videodbg("Fourcc format (%08x) invalid. Using default (%08x).\n",
				f->fmt.pix.pixelformat, fmt->fourcc);
1479
	}
1480

1481
	if (dev->board.is_em2800) {
1482
		/* the em2800 can only scale down to 50% */
1483 1484
		height = height > (3 * maxh / 4) ? maxh : maxh / 2;
		width = width > (3 * maxw / 4) ? maxw : maxw / 2;
1485 1486 1487 1488 1489
		/*
		 * MaxPacketSize for em2800 is too small to capture at full
		 * resolution use half of maxw as the scaler can only scale
		 * to 50%
		 */
1490 1491
		if (width == maxw && height == maxh)
			width /= 2;
1492
	} else {
1493 1494 1495 1496
		/*
		 * width must even because of the YUYV format
		 * height must be even because of interlacing
		 */
1497 1498
		v4l_bound_align_image(&width, 48, maxw, 1, &height, 32, maxh,
				      1, 0);
1499
	}
1500 1501 1502 1503 1504
	/* Avoid division by zero at size_to_scale */
	if (width < 1)
		width = 1;
	if (height < 1)
		height = 1;
1505

1506
	size_to_scale(dev, width, height, &hscale, &vscale);
1507
	scale_to_size(dev, hscale, vscale, &width, &height);
1508

1509 1510
	f->fmt.pix.width = width;
	f->fmt.pix.height = height;
1511
	f->fmt.pix.pixelformat = fmt->fourcc;
1512
	f->fmt.pix.bytesperline = (width * fmt->depth + 7) >> 3;
1513
	f->fmt.pix.sizeimage = f->fmt.pix.bytesperline * height;
1514
	f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
1515
	if (v4l2->progressive)
1516 1517
		f->fmt.pix.field = V4L2_FIELD_NONE;
	else
1518
		f->fmt.pix.field = v4l2->interlaced_fieldmode ?
1519
			   V4L2_FIELD_INTERLACED : V4L2_FIELD_TOP;
1520
	f->fmt.pix.priv = 0;
1521 1522 1523 1524

	return 0;
}

1525
static int em28xx_set_video_format(struct em28xx *dev, unsigned int fourcc,
1526
				   unsigned int width, unsigned int height)
1527 1528
{
	struct em28xx_fmt     *fmt;
1529
	struct em28xx_v4l2    *v4l2 = dev->v4l2;
1530 1531 1532 1533 1534

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

1535
	v4l2->format = fmt;
1536 1537
	v4l2->width  = width;
	v4l2->height = height;
1538 1539

	/* set new image size */
1540
	size_to_scale(dev, v4l2->width, v4l2->height,
1541
		      &v4l2->hscale, &v4l2->vscale);
1542 1543 1544 1545 1546 1547

	em28xx_resolution_set(dev);

	return 0;
}

1548
static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
1549
				struct v4l2_format *f)
1550
{
1551
	struct em28xx *dev = video_drvdata(file);
1552
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
1553

1554
	if (vb2_is_busy(&v4l2->vb_vidq))
1555
		return -EBUSY;
1556

1557 1558
	vidioc_try_fmt_vid_cap(file, priv, f);

H
Hans Verkuil 已提交
1559
	return em28xx_set_video_format(dev, f->fmt.pix.pixelformat,
1560
				f->fmt.pix.width, f->fmt.pix.height);
1561 1562
}

1563 1564
static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *norm)
{
1565
	struct em28xx *dev = video_drvdata(file);
1566

1567
	*norm = dev->v4l2->norm;
1568 1569 1570 1571

	return 0;
}

1572 1573
static int vidioc_querystd(struct file *file, void *priv, v4l2_std_id *norm)
{
1574
	struct em28xx *dev = video_drvdata(file);
1575

1576
	v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, video, querystd, norm);
1577 1578 1579 1580

	return 0;
}

1581
static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm)
1582
{
1583
	struct em28xx      *dev  = video_drvdata(file);
1584
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
1585 1586
	struct v4l2_format f;

1587
	if (norm == v4l2->norm)
1588
		return 0;
1589

1590
	if (v4l2->streaming_users > 0)
1591 1592
		return -EBUSY;

1593
	v4l2->norm = norm;
1594

1595
	/* Adjusts width/height, if needed */
1596
	f.fmt.pix.width = 720;
1597
	f.fmt.pix.height = (norm & V4L2_STD_525_60) ? 480 : 576;
1598
	vidioc_try_fmt_vid_cap(file, priv, &f);
1599

1600
	/* set new image size */
1601 1602 1603
	v4l2->width = f.fmt.pix.width;
	v4l2->height = f.fmt.pix.height;
	size_to_scale(dev, v4l2->width, v4l2->height,
1604
		      &v4l2->hscale, &v4l2->vscale);
1605

1606
	em28xx_resolution_set(dev);
1607
	v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_std, v4l2->norm);
1608

1609 1610
	return 0;
}
1611

1612 1613 1614
static int vidioc_g_parm(struct file *file, void *priv,
			 struct v4l2_streamparm *p)
{
1615
	struct v4l2_subdev_frame_interval ival = { 0 };
1616
	struct em28xx      *dev  = video_drvdata(file);
1617
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
1618 1619
	int rc = 0;

1620 1621 1622 1623
	if (p->type != V4L2_BUF_TYPE_VIDEO_CAPTURE &&
	    p->type != V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)
		return -EINVAL;

1624
	p->parm.capture.readbuffers = EM28XX_MIN_BUF;
1625
	p->parm.capture.capability = V4L2_CAP_TIMEPERFRAME;
1626
	if (dev->is_webcam) {
1627
		rc = v4l2_device_call_until_err(&v4l2->v4l2_dev, 0,
1628 1629 1630 1631
						video, g_frame_interval, &ival);
		if (!rc)
			p->parm.capture.timeperframe = ival.interval;
	} else {
1632
		v4l2_video_std_frame_period(v4l2->norm,
1633
					    &p->parm.capture.timeperframe);
1634
	}
1635 1636 1637 1638 1639 1640 1641

	return rc;
}

static int vidioc_s_parm(struct file *file, void *priv,
			 struct v4l2_streamparm *p)
{
1642
	struct em28xx *dev = video_drvdata(file);
1643 1644 1645 1646 1647 1648
	struct v4l2_subdev_frame_interval ival = {
		0,
		p->parm.capture.timeperframe
	};
	int rc = 0;

1649
	if (!dev->is_webcam)
1650
		return -ENOTTY;
1651

1652 1653 1654 1655 1656
	if (p->type != V4L2_BUF_TYPE_VIDEO_CAPTURE &&
	    p->type != V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)
		return -EINVAL;

	memset(&p->parm, 0, sizeof(p->parm));
1657
	p->parm.capture.readbuffers = EM28XX_MIN_BUF;
1658 1659 1660 1661 1662 1663
	p->parm.capture.capability = V4L2_CAP_TIMEPERFRAME;
	rc = v4l2_device_call_until_err(&dev->v4l2->v4l2_dev, 0,
					video, s_frame_interval, &ival);
	if (!rc)
		p->parm.capture.timeperframe = ival.interval;
	return rc;
1664 1665
}

1666
static int vidioc_enum_input(struct file *file, void *priv,
1667
			     struct v4l2_input *i)
1668
{
1669
	struct em28xx *dev = video_drvdata(file);
1670
	unsigned int       n;
1671
	int j;
1672

1673 1674 1675
	n = i->index;
	if (n >= MAX_EM28XX_INPUT)
		return -EINVAL;
1676
	if (!INPUT(n)->type)
1677
		return -EINVAL;
1678

1679
	i->type = V4L2_INPUT_TYPE_CAMERA;
1680

1681
	strscpy(i->name, iname[INPUT(n)->type], sizeof(i->name));
1682

1683
	if (INPUT(n)->type == EM28XX_VMUX_TELEVISION)
1684 1685
		i->type = V4L2_INPUT_TYPE_TUNER;

1686
	i->std = dev->v4l2->vdev.tvnorms;
1687
	/* webcams do not have the STD API */
1688
	if (dev->is_webcam)
1689
		i->capabilities = 0;
1690

1691 1692 1693 1694 1695 1696
	/* Dynamically generates an audioset bitmask */
	i->audioset = 0;
	for (j = 0; j < MAX_EM28XX_INPUT; j++)
		if (dev->amux_map[j] != EM28XX_AMUX_UNUSED)
			i->audioset |= 1 << j;

1697
	return 0;
1698 1699
}

1700
static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
1701
{
1702
	struct em28xx *dev = video_drvdata(file);
1703

1704 1705 1706 1707 1708 1709 1710
	*i = dev->ctl_input;

	return 0;
}

static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
{
1711
	struct em28xx *dev = video_drvdata(file);
1712 1713 1714

	if (i >= MAX_EM28XX_INPUT)
		return -EINVAL;
1715
	if (!INPUT(i)->type)
1716
		return -EINVAL;
1717

1718
	video_mux(dev, i);
1719 1720 1721
	return 0;
}

1722 1723 1724 1725
static int em28xx_fill_audio_input(struct em28xx *dev,
				   const char *s,
				   struct v4l2_audio *a,
				   unsigned int index)
1726
{
1727
	unsigned int idx = dev->amux_map[index];
1728

1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739
	/*
	 * With msp3400, almost all mappings use the default (amux = 0).
	 * The only one may use a different value is WinTV USB2, where it
	 * can also be SCART1 input.
	 * As it is very doubtful that we would see new boards with msp3400,
	 * let's just reuse the existing switch.
	 */
	if (dev->has_msp34xx && idx != EM28XX_AMUX_UNUSED)
		idx = EM28XX_AMUX_LINE_IN;

	switch (idx) {
1740
	case EM28XX_AMUX_VIDEO:
1741
		strscpy(a->name, "Television", sizeof(a->name));
1742 1743
		break;
	case EM28XX_AMUX_LINE_IN:
1744
		strscpy(a->name, "Line In", sizeof(a->name));
1745 1746
		break;
	case EM28XX_AMUX_VIDEO2:
1747
		strscpy(a->name, "Television alt", sizeof(a->name));
1748 1749
		break;
	case EM28XX_AMUX_PHONE:
1750
		strscpy(a->name, "Phone", sizeof(a->name));
1751 1752
		break;
	case EM28XX_AMUX_MIC:
1753
		strscpy(a->name, "Mic", sizeof(a->name));
1754 1755
		break;
	case EM28XX_AMUX_CD:
1756
		strscpy(a->name, "CD", sizeof(a->name));
1757 1758
		break;
	case EM28XX_AMUX_AUX:
1759
		strscpy(a->name, "Aux", sizeof(a->name));
1760 1761
		break;
	case EM28XX_AMUX_PCM_OUT:
1762
		strscpy(a->name, "PCM", sizeof(a->name));
1763
		break;
1764
	case EM28XX_AMUX_UNUSED:
1765 1766 1767
	default:
		return -EINVAL;
	}
1768
	a->index = index;
1769 1770
	a->capability = V4L2_AUDCAP_STEREO;

1771 1772 1773
	em28xx_videodbg("%s: audio input index %d is '%s'\n",
			s, a->index, a->name);

1774 1775 1776
	return 0;
}

1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799
static int vidioc_enumaudio(struct file *file, void *fh, struct v4l2_audio *a)
{
	struct em28xx *dev = video_drvdata(file);

	if (a->index >= MAX_EM28XX_INPUT)
		return -EINVAL;

	return em28xx_fill_audio_input(dev, __func__, a, a->index);
}

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

	for (i = 0; i < MAX_EM28XX_INPUT; i++)
		if (dev->ctl_ainput == dev->amux_map[i])
			return em28xx_fill_audio_input(dev, __func__, a, i);

	/* Should never happen! */
	return -EINVAL;
}

1800 1801
static int vidioc_s_audio(struct file *file, void *priv,
			  const struct v4l2_audio *a)
1802
{
1803
	struct em28xx *dev = video_drvdata(file);
1804
	int idx, i;
1805

1806 1807
	if (a->index >= MAX_EM28XX_INPUT)
		return -EINVAL;
1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826

	idx = dev->amux_map[a->index];

	if (idx == EM28XX_AMUX_UNUSED)
		return -EINVAL;

	dev->ctl_ainput = idx;

	/*
	 * FIXME: This is wrong, as different inputs at em28xx_cards
	 * may have different audio outputs. So, the right thing
	 * to do is to implement VIDIOC_G_AUDOUT/VIDIOC_S_AUDOUT.
	 * With the current board definitions, this would work fine,
	 * as, currently, all boards fit.
	 */
	for (i = 0; i < MAX_EM28XX_INPUT; i++)
		if (idx == dev->amux_map[i])
			break;
	if (i == MAX_EM28XX_INPUT)
1827 1828
		return -EINVAL;

1829
	dev->ctl_aoutput = INPUT(i)->aout;
1830 1831 1832

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

1834 1835 1836
	em28xx_videodbg("%s: set audio input to %d\n", __func__,
			dev->ctl_ainput);

1837 1838 1839 1840
	return 0;
}

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

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

1848
	strscpy(t->name, "Tuner", sizeof(t->name));
1849

1850
	v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, g_tuner, t);
1851
	return 0;
1852 1853
}

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

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

1862
	v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, s_tuner, t);
1863
	return 0;
1864 1865
}

1866
static int vidioc_g_frequency(struct file *file, void *priv,
1867
			      struct v4l2_frequency *f)
1868
{
1869
	struct em28xx         *dev = video_drvdata(file);
1870
	struct em28xx_v4l2    *v4l2 = dev->v4l2;
1871

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

1875
	f->frequency = v4l2->frequency;
1876 1877 1878 1879
	return 0;
}

static int vidioc_s_frequency(struct file *file, void *priv,
1880
			      const struct v4l2_frequency *f)
1881
{
1882
	struct v4l2_frequency  new_freq = *f;
1883
	struct em28xx             *dev  = video_drvdata(file);
1884
	struct em28xx_v4l2        *v4l2 = dev->v4l2;
1885

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

1889 1890
	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);
1891
	v4l2->frequency = new_freq.frequency;
1892

1893 1894
	return 0;
}
1895

1896
#ifdef CONFIG_VIDEO_ADV_DEBUG
1897
static int vidioc_g_chip_info(struct file *file, void *priv,
1898
			      struct v4l2_dbg_chip_info *chip)
1899
{
1900
	struct em28xx *dev = video_drvdata(file);
1901 1902 1903 1904

	if (chip->match.addr > 1)
		return -EINVAL;
	if (chip->match.addr == 1)
1905
		strscpy(chip->name, "ac97", sizeof(chip->name));
1906
	else
1907
		strscpy(chip->name,
1908
			dev->v4l2->v4l2_dev.name, sizeof(chip->name));
1909 1910 1911
	return 0;
}

1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922
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;
	}
}
1923

1924
static int vidioc_g_register(struct file *file, void *priv,
1925
			     struct v4l2_dbg_register *reg)
1926
{
1927
	struct em28xx *dev = video_drvdata(file);
1928 1929
	int ret;

1930 1931 1932
	if (reg->match.addr > 1)
		return -EINVAL;
	if (reg->match.addr) {
1933 1934 1935 1936 1937
		ret = em28xx_read_ac97(dev, reg->reg);
		if (ret < 0)
			return ret;

		reg->val = ret;
1938
		reg->size = 1;
1939
		return 0;
1940
	}
1941

1942
	/* Match host */
1943 1944
	reg->size = em28xx_reg_len(reg->reg);
	if (reg->size == 1) {
1945
		ret = em28xx_read_reg(dev, reg->reg);
1946

1947 1948 1949 1950 1951
		if (ret < 0)
			return ret;

		reg->val = ret;
	} else {
1952
		__le16 val = 0;
1953

1954
		ret = dev->em28xx_read_reg_req_len(dev, USB_REQ_GET_STATUS,
1955 1956 1957 1958
						   reg->reg, (char *)&val, 2);
		if (ret < 0)
			return ret;

1959
		reg->val = le16_to_cpu(val);
1960 1961 1962 1963 1964 1965
	}

	return 0;
}

static int vidioc_s_register(struct file *file, void *priv,
1966
			     const struct v4l2_dbg_register *reg)
1967
{
1968
	struct em28xx *dev = video_drvdata(file);
1969
	__le16 buf;
1970

1971
	if (reg->match.addr > 1)
1972
		return -EINVAL;
1973 1974
	if (reg->match.addr)
		return em28xx_write_ac97(dev, reg->reg, reg->val);
1975

1976
	/* Match host */
1977
	buf = cpu_to_le16(reg->val);
1978

H
Hans Verkuil 已提交
1979
	return em28xx_write_regs(dev, reg->reg, (char *)&buf,
1980
			       em28xx_reg_len(reg->reg));
1981 1982 1983
}
#endif

1984
static int vidioc_querycap(struct file *file, void  *priv,
1985
			   struct v4l2_capability *cap)
1986
{
1987
	struct video_device   *vdev = video_devdata(file);
1988
	struct em28xx         *dev  = video_drvdata(file);
1989
	struct em28xx_v4l2    *v4l2 = dev->v4l2;
1990
	struct usb_device *udev = interface_to_usbdev(dev->intf);
1991

1992 1993
	strscpy(cap->driver, "em28xx", sizeof(cap->driver));
	strscpy(cap->card, em28xx_boards[dev->model].name, sizeof(cap->card));
1994
	usb_make_path(udev, cap->bus_info, sizeof(cap->bus_info));
1995

H
Hans Verkuil 已提交
1996 1997 1998 1999 2000 2001
	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
2002
		cap->device_caps = V4L2_CAP_READWRITE | V4L2_CAP_VBI_CAPTURE;
2003

2004
	if (dev->int_audio_type != EM28XX_INT_AUDIO_NONE)
H
Hans Verkuil 已提交
2005
		cap->device_caps |= V4L2_CAP_AUDIO;
2006

2007
	if (dev->tuner_type != TUNER_ABSENT)
H
Hans Verkuil 已提交
2008
		cap->device_caps |= V4L2_CAP_TUNER;
2009

2010 2011 2012
	cap->capabilities = cap->device_caps |
			    V4L2_CAP_DEVICE_CAPS | V4L2_CAP_READWRITE |
			    V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
2013
	if (video_is_registered(&v4l2->vbi_dev))
2014
		cap->capabilities |= V4L2_CAP_VBI_CAPTURE;
2015
	if (video_is_registered(&v4l2->radio_dev))
H
Hans Verkuil 已提交
2016
		cap->capabilities |= V4L2_CAP_RADIO;
2017
	return 0;
2018 2019
}

2020
static int vidioc_enum_fmt_vid_cap(struct file *file, void  *priv,
2021
				   struct v4l2_fmtdesc *f)
2022
{
2023
	if (unlikely(f->index >= ARRAY_SIZE(format)))
2024
		return -EINVAL;
2025

2026
	strscpy(f->description, format[f->index].name, sizeof(f->description));
2027
	f->pixelformat = format[f->index].fourcc;
2028 2029

	return 0;
2030 2031
}

2032 2033 2034
static int vidioc_enum_framesizes(struct file *file, void *priv,
				  struct v4l2_frmsizeenum *fsize)
{
2035
	struct em28xx         *dev = video_drvdata(file);
2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060
	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;
2061 2062 2063 2064 2065 2066
	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;
2067 2068 2069 2070 2071 2072 2073
	fsize->stepwise.max_width = maxw;
	fsize->stepwise.max_height = maxh;
	fsize->stepwise.step_width = 1;
	fsize->stepwise.step_height = 1;
	return 0;
}

2074 2075 2076 2077 2078
/* RAW VBI ioctls */

static int vidioc_g_fmt_vbi_cap(struct file *file, void *priv,
				struct v4l2_format *format)
{
2079
	struct em28xx         *dev  = video_drvdata(file);
2080
	struct em28xx_v4l2    *v4l2 = dev->v4l2;
2081

2082
	format->fmt.vbi.samples_per_line = v4l2->vbi_width;
2083 2084 2085
	format->fmt.vbi.sample_format = V4L2_PIX_FMT_GREY;
	format->fmt.vbi.offset = 0;
	format->fmt.vbi.flags = 0;
2086
	format->fmt.vbi.sampling_rate = 6750000 * 4 / 2;
2087 2088
	format->fmt.vbi.count[0] = v4l2->vbi_height;
	format->fmt.vbi.count[1] = v4l2->vbi_height;
2089
	memset(format->fmt.vbi.reserved, 0, sizeof(format->fmt.vbi.reserved));
2090 2091

	/* Varies by video standard (NTSC, PAL, etc.) */
2092
	if (v4l2->norm & V4L2_STD_525_60) {
2093 2094 2095
		/* NTSC */
		format->fmt.vbi.start[0] = 10;
		format->fmt.vbi.start[1] = 273;
2096
	} else if (v4l2->norm & V4L2_STD_625_50) {
2097 2098 2099 2100
		/* PAL */
		format->fmt.vbi.start[0] = 6;
		format->fmt.vbi.start[1] = 318;
	}
2101 2102 2103 2104

	return 0;
}

2105 2106 2107
/*
 * RADIO ESPECIFIC IOCTLS
 */
2108 2109 2110 2111

static int radio_g_tuner(struct file *file, void *priv,
			 struct v4l2_tuner *t)
{
2112
	struct em28xx *dev = video_drvdata(file);
2113 2114 2115 2116

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

2117
	strscpy(t->name, "Radio", sizeof(t->name));
2118

2119
	v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, g_tuner, t);
2120

2121 2122 2123 2124
	return 0;
}

static int radio_s_tuner(struct file *file, void *priv,
2125
			 const struct v4l2_tuner *t)
2126
{
2127
	struct em28xx *dev = video_drvdata(file);
2128

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

2132
	v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, s_tuner, t);
2133 2134 2135 2136

	return 0;
}

2137 2138 2139 2140 2141 2142 2143
/*
 * em28xx_free_v4l2() - Free struct em28xx_v4l2
 *
 * @ref: struct kref for struct em28xx_v4l2
 *
 * Called when all users of struct em28xx_v4l2 are gone
 */
2144
static void em28xx_free_v4l2(struct kref *ref)
2145 2146 2147
{
	struct em28xx_v4l2 *v4l2 = container_of(ref, struct em28xx_v4l2, ref);

2148
	v4l2->dev->v4l2 = NULL;
2149 2150 2151
	kfree(v4l2);
}

2152 2153 2154 2155
/*
 * em28xx_v4l2_open()
 * inits the device and starts isoc transfer
 */
2156
static int em28xx_v4l2_open(struct file *filp)
2157
{
2158 2159
	struct video_device *vdev = video_devdata(filp);
	struct em28xx *dev = video_drvdata(filp);
2160
	struct em28xx_v4l2 *v4l2 = dev->v4l2;
2161
	enum v4l2_buf_type fh_type = 0;
2162
	int ret;
2163

2164 2165 2166 2167 2168 2169 2170
	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;
2171 2172 2173 2174
	case VFL_TYPE_RADIO:
		break;
	default:
		return -EINVAL;
2175
	}
2176

2177 2178 2179
	em28xx_videodbg("open dev=%s type=%s users=%d\n",
			video_device_node_name(vdev), v4l2_type_names[fh_type],
			v4l2->users);
2180

2181 2182
	if (mutex_lock_interruptible(&dev->lock))
		return -ERESTARTSYS;
2183 2184 2185

	ret = v4l2_fh_open(filp);
	if (ret) {
2186
		dev_err(&dev->intf->dev,
2187
			"%s: v4l2_fh_open() returned error %d\n",
2188
		       __func__, ret);
2189
		mutex_unlock(&dev->lock);
2190
		return ret;
2191
	}
2192

2193
	if (v4l2->users == 0) {
2194
		em28xx_set_mode(dev, EM28XX_ANALOG_MODE);
2195

2196 2197 2198 2199 2200 2201
		if (vdev->vfl_type != VFL_TYPE_RADIO)
			em28xx_resolution_set(dev);

		/*
		 * Needed, since GPIO might have disabled power
		 * of some i2c devices
2202
		 */
2203
		em28xx_wake_i2c(dev);
2204
	}
2205 2206

	if (vdev->vfl_type == VFL_TYPE_RADIO) {
2207
		em28xx_videodbg("video_open: setting radio device\n");
2208
		v4l2_device_call_all(&v4l2->v4l2_dev, 0, tuner, s_radio);
2209
	}
2210

2211
	kref_get(&dev->ref);
2212
	kref_get(&v4l2->ref);
2213
	v4l2->users++;
2214

2215
	mutex_unlock(&dev->lock);
2216

2217
	return 0;
2218
}
2219

2220
/*
2221
 * em28xx_v4l2_fini()
2222 2223
 * unregisters the v4l2,i2c and usb devices
 * called when the device gets disconected or at module unload
2224
 */
2225
static int em28xx_v4l2_fini(struct em28xx *dev)
2226
{
2227 2228
	struct em28xx_v4l2 *v4l2 = dev->v4l2;

2229 2230 2231 2232 2233
	if (dev->is_audio_only) {
		/* Shouldn't initialize IR for this interface */
		return 0;
	}

2234 2235 2236 2237
	if (!dev->has_video) {
		/* This device does not support the v4l2 extension */
		return 0;
	}
2238

2239
	if (!v4l2)
2240 2241
		return 0;

2242
	dev_info(&dev->intf->dev, "Closing video extension\n");
2243

2244 2245
	mutex_lock(&dev->lock);

2246
	v4l2_device_disconnect(&v4l2->v4l2_dev);
2247

2248 2249
	em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);

2250 2251
	em28xx_v4l2_media_release(dev);

2252
	if (video_is_registered(&v4l2->radio_dev)) {
2253
		dev_info(&dev->intf->dev, "V4L2 device %s deregistered\n",
2254
			 video_device_node_name(&v4l2->radio_dev));
2255
		video_unregister_device(&v4l2->radio_dev);
2256
	}
2257
	if (video_is_registered(&v4l2->vbi_dev)) {
2258
		dev_info(&dev->intf->dev, "V4L2 device %s deregistered\n",
2259
			 video_device_node_name(&v4l2->vbi_dev));
2260
		video_unregister_device(&v4l2->vbi_dev);
2261
	}
2262
	if (video_is_registered(&v4l2->vdev)) {
2263
		dev_info(&dev->intf->dev, "V4L2 device %s deregistered\n",
2264
			 video_device_node_name(&v4l2->vdev));
2265
		video_unregister_device(&v4l2->vdev);
2266
	}
2267

2268
	v4l2_ctrl_handler_free(&v4l2->ctrl_handler);
2269
	v4l2_device_unregister(&v4l2->v4l2_dev);
2270

2271 2272
	kref_put(&v4l2->ref, em28xx_free_v4l2);

2273
	mutex_unlock(&dev->lock);
2274

2275
	kref_put(&dev->ref, em28xx_free_device);
2276

2277
	return 0;
2278
}
2279

2280 2281 2282 2283 2284 2285 2286 2287
static int em28xx_v4l2_suspend(struct em28xx *dev)
{
	if (dev->is_audio_only)
		return 0;

	if (!dev->has_video)
		return 0;

2288
	dev_info(&dev->intf->dev, "Suspending video extension\n");
2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300
	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;

2301
	dev_info(&dev->intf->dev, "Resuming video extension\n");
2302 2303 2304 2305
	/* what do we do here */
	return 0;
}

2306 2307
/*
 * em28xx_v4l2_close()
2308 2309
 * stops streaming and deallocates all resources allocated by the v4l2
 * calls and ioctls
2310
 */
2311
static int em28xx_v4l2_close(struct file *filp)
2312
{
2313
	struct em28xx         *dev  = video_drvdata(filp);
2314
	struct em28xx_v4l2    *v4l2 = dev->v4l2;
2315
	struct usb_device *udev = interface_to_usbdev(dev->intf);
2316
	int              err;
2317

2318
	em28xx_videodbg("users=%d\n", v4l2->users);
2319

2320 2321
	vb2_fop_release(filp);
	mutex_lock(&dev->lock);
2322

2323
	if (v4l2->users == 1) {
2324 2325
		/* No sense to try to write to the device */
		if (dev->disconnected)
2326
			goto exit;
2327

2328
		/* Save some power by putting tuner to sleep */
2329
		v4l2_device_call_all(&v4l2->v4l2_dev, 0, tuner, standby);
2330

2331
		/* do this before setting alternate! */
2332
		em28xx_set_mode(dev, EM28XX_SUSPEND);
2333

2334 2335 2336
		/* set alternate 0 */
		dev->alt = 0;
		em28xx_videodbg("setting alternate 0\n");
2337 2338
		err = usb_set_interface(udev, 0, 0);
		if (err < 0) {
2339
			dev_err(&dev->intf->dev,
2340
				"cannot change alternate number to 0 (error=%i)\n",
2341
				err);
2342
		}
2343
	}
2344

2345
exit:
2346
	v4l2->users--;
2347
	kref_put(&v4l2->ref, em28xx_free_v4l2);
2348
	mutex_unlock(&dev->lock);
2349 2350
	kref_put(&dev->ref, em28xx_free_device);

2351 2352
	return 0;
}
2353

2354
static const struct v4l2_file_operations em28xx_v4l_fops = {
2355 2356 2357
	.owner         = THIS_MODULE,
	.open          = em28xx_v4l2_open,
	.release       = em28xx_v4l2_close,
2358 2359 2360
	.read          = vb2_fop_read,
	.poll          = vb2_fop_poll,
	.mmap          = vb2_fop_mmap,
H
Hans Verkuil 已提交
2361
	.unlocked_ioctl = video_ioctl2,
2362
};
2363

2364
static const struct v4l2_ioctl_ops video_ioctl_ops = {
2365
	.vidioc_querycap            = vidioc_querycap,
2366 2367 2368 2369
	.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,
2370
	.vidioc_g_fmt_vbi_cap       = vidioc_g_fmt_vbi_cap,
2371
	.vidioc_try_fmt_vbi_cap     = vidioc_g_fmt_vbi_cap,
2372
	.vidioc_s_fmt_vbi_cap       = vidioc_g_fmt_vbi_cap,
2373
	.vidioc_enum_framesizes     = vidioc_enum_framesizes,
2374
	.vidioc_enumaudio           = vidioc_enumaudio,
2375 2376 2377
	.vidioc_g_audio             = vidioc_g_audio,
	.vidioc_s_audio             = vidioc_s_audio,

2378 2379 2380 2381 2382 2383 2384
	.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,

2385
	.vidioc_g_std               = vidioc_g_std,
2386
	.vidioc_querystd            = vidioc_querystd,
2387
	.vidioc_s_std               = vidioc_s_std,
2388 2389
	.vidioc_g_parm		    = vidioc_g_parm,
	.vidioc_s_parm		    = vidioc_s_parm,
2390 2391 2392
	.vidioc_enum_input          = vidioc_enum_input,
	.vidioc_g_input             = vidioc_g_input,
	.vidioc_s_input             = vidioc_s_input,
2393 2394
	.vidioc_streamon            = vb2_ioctl_streamon,
	.vidioc_streamoff           = vb2_ioctl_streamoff,
2395 2396 2397 2398
	.vidioc_g_tuner             = vidioc_g_tuner,
	.vidioc_s_tuner             = vidioc_s_tuner,
	.vidioc_g_frequency         = vidioc_g_frequency,
	.vidioc_s_frequency         = vidioc_s_frequency,
2399 2400
	.vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
	.vidioc_unsubscribe_event = v4l2_event_unsubscribe,
2401
#ifdef CONFIG_VIDEO_ADV_DEBUG
2402
	.vidioc_g_chip_info         = vidioc_g_chip_info,
2403 2404 2405
	.vidioc_g_register          = vidioc_g_register,
	.vidioc_s_register          = vidioc_s_register,
#endif
2406 2407 2408
};

static const struct video_device em28xx_video_template = {
2409 2410
	.fops		= &em28xx_v4l_fops,
	.ioctl_ops	= &video_ioctl_ops,
2411
	.release	= video_device_release_empty,
2412
	.tvnorms	= V4L2_STD_ALL,
2413 2414
};

2415
static const struct v4l2_file_operations radio_fops = {
2416 2417 2418
	.owner         = THIS_MODULE,
	.open          = em28xx_v4l2_open,
	.release       = em28xx_v4l2_close,
2419
	.unlocked_ioctl = video_ioctl2,
2420 2421 2422
};

static const struct v4l2_ioctl_ops radio_ioctl_ops = {
H
Hans Verkuil 已提交
2423
	.vidioc_querycap      = vidioc_querycap,
2424 2425 2426 2427
	.vidioc_g_tuner       = radio_g_tuner,
	.vidioc_s_tuner       = radio_s_tuner,
	.vidioc_g_frequency   = vidioc_g_frequency,
	.vidioc_s_frequency   = vidioc_s_frequency,
2428 2429
	.vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
	.vidioc_unsubscribe_event = v4l2_event_unsubscribe,
2430
#ifdef CONFIG_VIDEO_ADV_DEBUG
2431
	.vidioc_g_chip_info   = vidioc_g_chip_info,
2432 2433 2434
	.vidioc_g_register    = vidioc_g_register,
	.vidioc_s_register    = vidioc_s_register,
#endif
2435 2436
};

2437
static struct video_device em28xx_radio_template = {
2438 2439
	.fops		= &radio_fops,
	.ioctl_ops	= &radio_ioctl_ops,
2440
	.release	= video_device_release_empty,
2441 2442
};

2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460
/* 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
};

2461
/******************************** usb interface ******************************/
2462

2463 2464 2465 2466
static void em28xx_vdev_init(struct em28xx *dev,
			     struct video_device *vfd,
			     const struct video_device *template,
			     const char *type_name)
2467
{
2468
	*vfd		= *template;
2469
	vfd->v4l2_dev	= &dev->v4l2->v4l2_dev;
H
Hans Verkuil 已提交
2470
	vfd->lock	= &dev->lock;
2471
	if (dev->is_webcam)
2472
		vfd->tvnorms = 0;
2473 2474

	snprintf(vfd->name, sizeof(vfd->name), "%s %s",
2475
		 dev_name(&dev->intf->dev), type_name);
2476

2477
	video_set_drvdata(vfd, dev);
2478 2479
}

2480
static void em28xx_tuner_setup(struct em28xx *dev, unsigned short tuner_addr)
2481
{
2482 2483 2484 2485
	struct em28xx_v4l2      *v4l2 = dev->v4l2;
	struct v4l2_device      *v4l2_dev = &v4l2->v4l2_dev;
	struct tuner_setup      tun_setup;
	struct v4l2_frequency   f;
2486 2487 2488 2489 2490 2491 2492 2493 2494 2495

	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;

2496 2497
		v4l2_device_call_all(v4l2_dev,
				     0, tuner, s_type_addr, &tun_setup);
2498 2499
	}

2500
	if (dev->tuner_type != TUNER_ABSENT && dev->tuner_type) {
2501
		tun_setup.type   = dev->tuner_type;
2502
		tun_setup.addr   = tuner_addr;
2503

2504 2505
		v4l2_device_call_all(v4l2_dev,
				     0, tuner, s_type_addr, &tun_setup);
2506 2507
	}

2508
	if (dev->board.tda9887_conf) {
2509 2510 2511
		struct v4l2_priv_tun_config tda9887_cfg;

		tda9887_cfg.tuner = TUNER_TDA9887;
2512
		tda9887_cfg.priv = &dev->board.tda9887_conf;
2513

2514 2515
		v4l2_device_call_all(v4l2_dev,
				     0, tuner, s_config, &tda9887_cfg);
2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529
	}

	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;

2530
		v4l2_device_call_all(v4l2_dev, 0, tuner, s_config, &xc2028_cfg);
2531 2532 2533 2534 2535 2536
	}

	/* configure tuner */
	f.tuner = 0;
	f.type = V4L2_TUNER_ANALOG_TV;
	f.frequency = 9076;     /* just a magic number */
2537
	v4l2->frequency = f.frequency;
2538
	v4l2_device_call_all(v4l2_dev, 0, tuner, s_frequency, &f);
2539 2540
}

2541
static int em28xx_v4l2_init(struct em28xx *dev)
2542
{
2543
	u8 val;
2544
	int ret;
2545
	unsigned int maxw;
2546
	struct v4l2_ctrl_handler *hdl;
2547
	struct em28xx_v4l2 *v4l2;
2548

2549 2550 2551 2552 2553
	if (dev->is_audio_only) {
		/* Shouldn't initialize IR for this interface */
		return 0;
	}

2554
	if (!dev->has_video) {
2555 2556 2557
		/* This device does not support the v4l2 extension */
		return 0;
	}
2558

2559
	dev_info(&dev->intf->dev, "Registering V4L2 extension\n");
2560

2561 2562
	mutex_lock(&dev->lock);

2563
	v4l2 = kzalloc(sizeof(*v4l2), GFP_KERNEL);
2564
	if (!v4l2) {
2565 2566 2567 2568
		mutex_unlock(&dev->lock);
		return -ENOMEM;
	}
	kref_init(&v4l2->ref);
2569
	v4l2->dev = dev;
2570 2571
	dev->v4l2 = v4l2;

2572 2573 2574
#ifdef CONFIG_MEDIA_CONTROLLER
	v4l2->v4l2_dev.mdev = dev->media_dev;
#endif
2575
	ret = v4l2_device_register(&dev->intf->dev, &v4l2->v4l2_dev);
2576
	if (ret < 0) {
2577
		dev_err(&dev->intf->dev,
2578
			"Call to v4l2_device_register() failed!\n");
2579 2580 2581
		goto err;
	}

2582
	hdl = &v4l2->ctrl_handler;
2583
	v4l2_ctrl_handler_init(hdl, 8);
2584
	v4l2->v4l2_dev.ctrl_handler = hdl;
2585

2586
	if (dev->is_webcam)
2587
		v4l2->progressive = true;
2588

2589 2590 2591
	/*
	 * Default format, used for tvp5150 or saa711x output formats
	 */
2592
	v4l2->vinmode = EM28XX_VINMODE_YUV422_CbYCrY;
2593 2594
	v4l2->vinctl  = EM28XX_VINCTRL_INTERLACED |
			EM28XX_VINCTRL_CCIR656_ENABLE;
2595 2596 2597

	/* request some modules */

2598
	if (dev->has_msp34xx)
2599 2600 2601
		v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
				    &dev->i2c_adap[dev->def_i2c_bus],
				    "msp3400", 0, msp3400_addrs);
2602 2603

	if (dev->board.decoder == EM28XX_SAA711X)
2604 2605 2606
		v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
				    &dev->i2c_adap[dev->def_i2c_bus],
				    "saa7115_auto", 0, saa711x_addrs);
2607 2608

	if (dev->board.decoder == EM28XX_TVP5150)
2609 2610 2611
		v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
				    &dev->i2c_adap[dev->def_i2c_bus],
				    "tvp5150", 0, tvp5150_addrs);
2612 2613

	if (dev->board.adecoder == EM28XX_TVAUDIO)
2614 2615 2616
		v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
				    &dev->i2c_adap[dev->def_i2c_bus],
				    "tvaudio", dev->board.tvaudio_addr, NULL);
2617 2618 2619 2620

	/* Initialize tuner and camera */

	if (dev->board.tuner_type != TUNER_ABSENT) {
2621
		unsigned short tuner_addr = dev->board.tuner_addr;
2622
		int has_demod = (dev->board.tda9887_conf & TDA9887_PRESENT);
2623 2624

		if (dev->board.radio.type)
2625
			v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2626 2627 2628
					    &dev->i2c_adap[dev->def_i2c_bus],
					    "tuner", dev->board.radio_addr,
					    NULL);
2629 2630

		if (has_demod)
2631
			v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2632 2633 2634
					    &dev->i2c_adap[dev->def_i2c_bus],
					    "tuner", 0,
					    v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
2635
		if (tuner_addr == 0) {
2636 2637 2638 2639
			enum v4l2_i2c_tuner_type type =
				has_demod ? ADDRS_TV_WITH_DEMOD : ADDRS_TV;
			struct v4l2_subdev *sd;

2640
			sd = v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2641 2642 2643
						 &dev->i2c_adap[dev->def_i2c_bus],
						 "tuner", 0,
						 v4l2_i2c_tuner_addrs(type));
2644 2645

			if (sd)
2646
				tuner_addr = v4l2_i2c_subdev_addr(sd);
2647
		} else {
2648 2649
			v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
					    &dev->i2c_adap[dev->def_i2c_bus],
2650
					    "tuner", tuner_addr, NULL);
2651
		}
2652 2653

		em28xx_tuner_setup(dev, tuner_addr);
2654 2655
	}

2656 2657
	if (dev->em28xx_sensor != EM28XX_NOSENSOR)
		em28xx_init_camera(dev);
2658 2659 2660 2661

	/* Configure audio */
	ret = em28xx_audio_setup(dev);
	if (ret < 0) {
2662
		dev_err(&dev->intf->dev,
2663 2664
			"%s: Error while setting audio - error [%d]!\n",
			__func__, ret);
2665 2666 2667 2668
		goto unregister_dev;
	}
	if (dev->audio_mode.ac97 != EM28XX_NO_AC97) {
		v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2669
				  V4L2_CID_AUDIO_MUTE, 0, 1, 1, 1);
2670
		v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2671
				  V4L2_CID_AUDIO_VOLUME, 0, 0x1f, 1, 0x1f);
2672 2673 2674
	} else {
		/* install the em28xx notify callback */
		v4l2_ctrl_notify(v4l2_ctrl_find(hdl, V4L2_CID_AUDIO_MUTE),
2675
				 em28xx_ctrl_notify, dev);
2676
		v4l2_ctrl_notify(v4l2_ctrl_find(hdl, V4L2_CID_AUDIO_VOLUME),
2677
				 em28xx_ctrl_notify, dev);
2678 2679 2680 2681 2682 2683 2684 2685 2686
	}

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

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

2687
	if (dev->has_msp34xx) {
2688 2689 2690
		/* Send a reset to other chips via gpio */
		ret = em28xx_write_reg(dev, EM2820_R08_GPIO_CTRL, 0xf7);
		if (ret < 0) {
2691
			dev_err(&dev->intf->dev,
2692 2693
				"%s: em28xx_write_reg - msp34xx(1) failed! error [%d]\n",
				__func__, ret);
2694 2695
			goto unregister_dev;
		}
2696
		usleep_range(10000, 11000);
2697 2698 2699

		ret = em28xx_write_reg(dev, EM2820_R08_GPIO_CTRL, 0xff);
		if (ret < 0) {
2700
			dev_err(&dev->intf->dev,
2701 2702
				"%s: em28xx_write_reg - msp34xx(2) failed! error [%d]\n",
				__func__, ret);
2703 2704
			goto unregister_dev;
		}
2705
		usleep_range(10000, 11000);
2706 2707
	}

2708
	/* set default norm */
2709
	v4l2->norm = V4L2_STD_PAL;
2710
	v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_std, v4l2->norm);
2711
	v4l2->interlaced_fieldmode = EM28XX_INTERLACED_DEFAULT;
2712

2713
	/* Analog specific initialization */
2714
	v4l2->format = &format[0];
2715 2716

	maxw = norm_maxw(dev);
2717 2718 2719 2720
	/*
	 * MaxPacketSize for em2800 is too small to capture at full resolution
	 * use half of maxw as the scaler can only scale to 50%
	 */
2721 2722
	if (dev->board.is_em2800)
		maxw /= 2;
2723

2724
	em28xx_set_video_format(dev, format[0].fourcc,
2725
				maxw, norm_maxh(dev));
2726

2727
	video_mux(dev, 0);
2728 2729 2730 2731

	/* Audio defaults */
	dev->mute = 1;
	dev->volume = 0x1f;
2732 2733

/*	em28xx_write_reg(dev, EM28XX_R0E_AUDIOSRC, 0xc0); audio register */
2734 2735 2736
	val = (u8)em28xx_read_reg(dev, EM28XX_R0F_XCLK);
	em28xx_write_reg(dev, EM28XX_R0F_XCLK,
			 (EM28XX_XCLK_AUDIO_UNMUTE | val));
2737 2738 2739

	em28xx_set_outfmt(dev);

2740
	/* Add image controls */
2741 2742 2743 2744 2745 2746 2747

	/*
	 * NOTE: at this point, the subdevices are already registered, so
	 * bridge controls are only added/enabled when no subdevice provides
	 * them
	 */
	if (!v4l2_ctrl_find(hdl, V4L2_CID_CONTRAST))
2748
		v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2749 2750
				  V4L2_CID_CONTRAST,
				  0, 0x1f, 1, CONTRAST_DEFAULT);
2751
	if (!v4l2_ctrl_find(hdl, V4L2_CID_BRIGHTNESS))
2752
		v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2753 2754
				  V4L2_CID_BRIGHTNESS,
				  -0x80, 0x7f, 1, BRIGHTNESS_DEFAULT);
2755
	if (!v4l2_ctrl_find(hdl, V4L2_CID_SATURATION))
2756
		v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2757 2758
				  V4L2_CID_SATURATION,
				  0, 0x1f, 1, SATURATION_DEFAULT);
2759
	if (!v4l2_ctrl_find(hdl, V4L2_CID_BLUE_BALANCE))
2760
		v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2761 2762
				  V4L2_CID_BLUE_BALANCE,
				  -0x30, 0x30, 1, BLUE_BALANCE_DEFAULT);
2763
	if (!v4l2_ctrl_find(hdl, V4L2_CID_RED_BALANCE))
2764
		v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2765 2766
				  V4L2_CID_RED_BALANCE,
				  -0x30, 0x30, 1, RED_BALANCE_DEFAULT);
2767
	if (!v4l2_ctrl_find(hdl, V4L2_CID_SHARPNESS))
2768
		v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2769 2770 2771 2772 2773
				  V4L2_CID_SHARPNESS,
				  0, 0x0f, 1, SHARPNESS_DEFAULT);

	/* Reset image controls */
	em28xx_colorlevels_set_default(dev);
2774 2775
	v4l2_ctrl_handler_setup(hdl);
	ret = hdl->error;
2776 2777
	if (ret)
		goto unregister_dev;
2778

2779
	/* allocate and fill video video_device struct */
2780
	em28xx_vdev_init(dev, &v4l2->vdev, &em28xx_video_template, "video");
2781 2782
	mutex_init(&v4l2->vb_queue_lock);
	mutex_init(&v4l2->vb_vbi_queue_lock);
2783 2784
	v4l2->vdev.queue = &v4l2->vb_vidq;
	v4l2->vdev.queue->lock = &v4l2->vb_queue_lock;
2785

2786
	/* disable inapplicable ioctls */
2787
	if (dev->is_webcam) {
2788 2789 2790
		v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_QUERYSTD);
		v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_STD);
		v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_STD);
2791
	} else {
2792
		v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_PARM);
2793
	}
2794
	if (dev->tuner_type == TUNER_ABSENT) {
2795 2796 2797 2798
		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);
2799
	}
2800
	if (dev->int_audio_type == EM28XX_INT_AUDIO_NONE) {
2801 2802
		v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_AUDIO);
		v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_AUDIO);
2803
	}
2804

2805
	/* register v4l2 video video_device */
2806
	ret = video_register_device(&v4l2->vdev, VFL_TYPE_GRABBER,
2807
				    video_nr[dev->devno]);
2808
	if (ret) {
2809
		dev_err(&dev->intf->dev,
2810
			"unable to register video device (error=%i).\n", ret);
2811
		goto unregister_dev;
2812 2813 2814
	}

	/* Allocate and fill vbi video_device struct */
2815
	if (em28xx_vbi_supported(dev) == 1) {
2816
		em28xx_vdev_init(dev, &v4l2->vbi_dev, &em28xx_video_template,
2817
				 "vbi");
2818

2819 2820
		v4l2->vbi_dev.queue = &v4l2->vb_vbiq;
		v4l2->vbi_dev.queue->lock = &v4l2->vb_vbi_queue_lock;
2821

2822
		/* disable inapplicable ioctls */
2823
		v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_PARM);
2824
		if (dev->tuner_type == TUNER_ABSENT) {
2825 2826 2827 2828
			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);
2829
		}
2830
		if (dev->int_audio_type == EM28XX_INT_AUDIO_NONE) {
2831 2832
			v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_G_AUDIO);
			v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_AUDIO);
2833
		}
2834

2835
		/* register v4l2 vbi video_device */
2836
		ret = video_register_device(&v4l2->vbi_dev, VFL_TYPE_VBI,
2837 2838
					    vbi_nr[dev->devno]);
		if (ret < 0) {
2839
			dev_err(&dev->intf->dev,
2840
				"unable to register vbi device\n");
2841
			goto unregister_dev;
2842
		}
2843 2844 2845
	}

	if (em28xx_boards[dev->model].radio.type == EM28XX_RADIO) {
2846
		em28xx_vdev_init(dev, &v4l2->radio_dev, &em28xx_radio_template,
2847
				 "radio");
2848
		ret = video_register_device(&v4l2->radio_dev, VFL_TYPE_RADIO,
2849 2850
					    radio_nr[dev->devno]);
		if (ret < 0) {
2851
			dev_err(&dev->intf->dev,
2852
				"can't register radio device\n");
2853
			goto unregister_dev;
2854
		}
2855
		dev_info(&dev->intf->dev,
2856 2857
			 "Registered radio device as %s\n",
			 video_device_node_name(&v4l2->radio_dev));
2858 2859
	}

2860 2861 2862
	/* Init entities at the Media Controller */
	em28xx_v4l2_create_entities(dev);

2863
#ifdef CONFIG_MEDIA_CONTROLLER
2864
	ret = v4l2_mc_create_media_graph(dev->media_dev);
2865
	if (ret) {
2866
		dev_err(&dev->intf->dev,
2867
			"failed to create media graph\n");
2868 2869 2870
		em28xx_v4l2_media_release(dev);
		goto unregister_dev;
	}
2871
#endif
2872

2873
	dev_info(&dev->intf->dev,
2874 2875
		 "V4L2 video device registered as %s\n",
		 video_device_node_name(&v4l2->vdev));
2876

2877
	if (video_is_registered(&v4l2->vbi_dev))
2878
		dev_info(&dev->intf->dev,
2879 2880
			 "V4L2 VBI device registered as %s\n",
			 video_device_node_name(&v4l2->vbi_dev));
2881

2882
	/* Save some power by putting tuner to sleep */
2883
	v4l2_device_call_all(&v4l2->v4l2_dev, 0, tuner, standby);
2884 2885 2886 2887

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

2888
	dev_info(&dev->intf->dev,
2889
		 "V4L2 extension successfully initialized\n");
2890

2891 2892
	kref_get(&dev->ref);

2893
	mutex_unlock(&dev->lock);
2894
	return 0;
2895 2896

unregister_dev:
2897
	if (video_is_registered(&v4l2->radio_dev)) {
2898
		dev_info(&dev->intf->dev,
2899 2900
			 "V4L2 device %s deregistered\n",
			 video_device_node_name(&v4l2->radio_dev));
2901 2902 2903
		video_unregister_device(&v4l2->radio_dev);
	}
	if (video_is_registered(&v4l2->vbi_dev)) {
2904
		dev_info(&dev->intf->dev,
2905 2906
			 "V4L2 device %s deregistered\n",
			 video_device_node_name(&v4l2->vbi_dev));
2907 2908 2909
		video_unregister_device(&v4l2->vbi_dev);
	}
	if (video_is_registered(&v4l2->vdev)) {
2910
		dev_info(&dev->intf->dev,
2911 2912
			 "V4L2 device %s deregistered\n",
			 video_device_node_name(&v4l2->vdev));
2913 2914 2915
		video_unregister_device(&v4l2->vdev);
	}

2916
	v4l2_ctrl_handler_free(&v4l2->ctrl_handler);
2917
	v4l2_device_unregister(&v4l2->v4l2_dev);
2918
err:
2919 2920
	dev->v4l2 = NULL;
	kref_put(&v4l2->ref, em28xx_free_v4l2);
2921
	mutex_unlock(&dev->lock);
2922
	return ret;
2923
}
2924 2925 2926 2927 2928 2929

static struct em28xx_ops v4l2_ops = {
	.id   = EM28XX_V4L2,
	.name = "Em28xx v4l2 Extension",
	.init = em28xx_v4l2_init,
	.fini = em28xx_v4l2_fini,
2930 2931
	.suspend = em28xx_v4l2_suspend,
	.resume = em28xx_v4l2_resume,
2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945
};

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