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

5 6
   Copyright (C) 2005 Ludovico Cavedon <cavedon@sssup.it>
		      Markus Rechberger <mrechberger@gmail.com>
7
		      Mauro Carvalho Chehab <mchehab@infradead.org>
8
		      Sascha Sommer <saschasommer@freenet.de>
9
   Copyright (C) 2012 Frank Schäfer <fschaefer.oss@googlemail.com>
10

11 12 13
	Some parts based on SN9C10x PC Camera Controllers GPL driver made
		by Luca Risolia <luca.risolia@studio.unibo.it>

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

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

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

#include <linux/init.h>
#include <linux/list.h>
#include <linux/module.h>
#include <linux/kernel.h>
33
#include <linux/bitmap.h>
34 35
#include <linux/usb.h>
#include <linux/i2c.h>
36
#include <linux/mm.h>
37
#include <linux/mutex.h>
38
#include <linux/slab.h>
39

40
#include "em28xx.h"
41
#include <media/v4l2-common.h>
42
#include <media/v4l2-ioctl.h>
43
#include <media/v4l2-event.h>
44
#include <media/v4l2-chip-ident.h>
45
#include <media/msp3400.h>
46
#include <media/tuner.h>
47

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

53
#define DRIVER_DESC         "Empia em28xx based USB video device driver"
54

55
#define EM28XX_VERSION "0.2.0"
56

57
#define em28xx_videodbg(fmt, arg...) do {\
58 59
	if (video_debug) \
		printk(KERN_INFO "%s %s :"fmt, \
60
			 dev->name, __func__ , ##arg); } while (0)
61

62
static unsigned int isoc_debug;
63 64
module_param(isoc_debug, int, 0644);
MODULE_PARM_DESC(isoc_debug, "enable debug messages [isoc transfers]");
65

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

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

79 80 81 82 83 84 85 86 87 88

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


89 90 91
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 };
92

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

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

104 105 106
/* supported video standards */
static struct em28xx_fmt format[] = {
	{
107
		.name     = "16 bpp YUY2, 4:2:2, packed",
108 109
		.fourcc   = V4L2_PIX_FMT_YUYV,
		.depth    = 16,
110
		.reg	  = EM28XX_OUTFMT_YUV422_Y0UY1V,
111
	}, {
112
		.name     = "16 bpp RGB 565, LE",
113 114
		.fourcc   = V4L2_PIX_FMT_RGB565,
		.depth    = 16,
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
		.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,
136 137 138
	},
};

139 140 141 142 143
/* ------------------------------------------------------------------
	DMA and thread functions
   ------------------------------------------------------------------*/

/*
144
 * Finish the current buffer
145
 */
146 147
static inline void finish_buffer(struct em28xx *dev,
				 struct em28xx_buffer *buf)
148
{
149 150 151 152 153 154 155
	em28xx_isocdbg("[%p/%d] wakeup\n", buf, buf->top_field);

	buf->vb.v4l2_buf.sequence = dev->field_count++;
	buf->vb.v4l2_buf.field = V4L2_FIELD_INTERLACED;
	v4l2_get_timestamp(&buf->vb.v4l2_buf.timestamp);

	vb2_buffer_done(&buf->vb, VB2_BUF_STATE_DONE);
156 157 158
}

/*
159
 * Copy picture data from USB buffer to videobuf buffer
160 161 162
 */
static void em28xx_copy_video(struct em28xx *dev,
			      struct em28xx_buffer *buf,
163
			      unsigned char *usb_buf,
164
			      unsigned long len)
165 166
{
	void *fieldstart, *startwrite, *startread;
167
	int  linesdone, currlinedone, offset, lencopy, remain;
168
	int bytesperline = dev->width << 1;
169

170 171
	if (buf->pos + len > buf->length)
		len = buf->length - buf->pos;
172

173
	startread = usb_buf;
174 175
	remain = len;

176
	if (dev->progressive || buf->top_field)
177
		fieldstart = buf->vb_buf;
178
	else /* interlaced mode, even nr. of lines */
179
		fieldstart = buf->vb_buf + bytesperline;
180

181 182
	linesdone = buf->pos / bytesperline;
	currlinedone = buf->pos % bytesperline;
183 184 185 186 187 188

	if (dev->progressive)
		offset = linesdone * bytesperline + currlinedone;
	else
		offset = linesdone * bytesperline * 2 + currlinedone;

189
	startwrite = fieldstart + offset;
190
	lencopy = bytesperline - currlinedone;
191 192
	lencopy = lencopy > remain ? remain : lencopy;

193
	if ((char *)startwrite + lencopy > (char *)buf->vb_buf + buf->length) {
194
		em28xx_isocdbg("Overflow of %zi bytes past buffer end (1)\n",
195
			      ((char *)startwrite + lencopy) -
196 197
			      ((char *)buf->vb_buf + buf->length));
		remain = (char *)buf->vb_buf + buf->length -
198
			 (char *)startwrite;
199
		lencopy = remain;
200
	}
201 202
	if (lencopy <= 0)
		return;
203
	memcpy(startwrite, startread, lencopy);
204 205 206 207

	remain -= lencopy;

	while (remain > 0) {
208 209 210 211
		if (dev->progressive)
			startwrite += lencopy;
		else
			startwrite += lencopy + bytesperline;
212
		startread += lencopy;
213
		if (bytesperline > remain)
214 215
			lencopy = remain;
		else
216
			lencopy = bytesperline;
217

218
		if ((char *)startwrite + lencopy > (char *)buf->vb_buf +
219
		    buf->length) {
220 221
			em28xx_isocdbg("Overflow of %zi bytes past buffer end"
				       "(2)\n",
222
				       ((char *)startwrite + lencopy) -
223 224 225
				       ((char *)buf->vb_buf + buf->length));
			lencopy = remain = (char *)buf->vb_buf + buf->length -
				(char *)startwrite;
226
		}
227 228
		if (lencopy <= 0)
			break;
229 230

		memcpy(startwrite, startread, lencopy);
231 232 233 234

		remain -= lencopy;
	}

235
	buf->pos += len;
236 237
}

238 239 240
/*
 * Copy VBI data from USB buffer to videobuf buffer
 */
241
static void em28xx_copy_vbi(struct em28xx *dev,
242
			    struct em28xx_buffer *buf,
243
			    unsigned char *usb_buf,
244
			    unsigned long len)
245
{
246
	unsigned int offset;
247

248 249
	if (buf->pos + len > buf->length)
		len = buf->length - buf->pos;
250

251
	offset = buf->pos;
252
	/* Make sure the bottom field populates the second half of the frame */
253 254
	if (buf->top_field == 0)
		offset += dev->vbi_width * dev->vbi_height;
255

256
	memcpy(buf->vb_buf + offset, usb_buf, len);
257
	buf->pos += len;
258 259
}

260
static inline void print_err_status(struct em28xx *dev,
261 262 263 264
				     int packet, int status)
{
	char *errmsg = "Unknown";

265
	switch (status) {
266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290
	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;
	}
291
	if (packet < 0) {
292 293 294 295 296 297 298 299
		em28xx_isocdbg("URB status %d [%s].\n",	status, errmsg);
	} else {
		em28xx_isocdbg("URB packet %d, status %d [%s].\n",
			       packet, status, errmsg);
	}
}

/*
300
 * get the next available buffer from dma queue
301
 */
302 303
static inline struct em28xx_buffer *get_next_buf(struct em28xx *dev,
						 struct em28xx_dmaqueue *dma_q)
304
{
305
	struct em28xx_buffer *buf;
306

307 308
	if (list_empty(&dma_q->active)) {
		em28xx_isocdbg("No active queue to serve\n");
309
		return NULL;
310 311 312
	}

	/* Get the next buffer */
313
	buf = list_entry(dma_q->active.next, struct em28xx_buffer, list);
L
Lucas De Marchi 已提交
314
	/* Cleans up buffer - Useful for testing for frame/URB loss */
315
	list_del(&buf->list);
316
	buf->pos = 0;
317
	buf->vb_buf = buf->mem;
318

319
	return buf;
320 321
}

322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342
/*
 * 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)
{
	if (dev->progressive || dev->top_field) { /* Brand new frame */
		if (buf != NULL)
			finish_buffer(dev, buf);
		buf = get_next_buf(dev, dma_q);
	}
	if (buf != NULL) {
		buf->top_field = dev->top_field;
		buf->pos = 0;
	}

	return buf;
}

343 344 345 346 347 348
/*
 * 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)
349
{
350 351
	struct em28xx_buffer    *buf = dev->usb_ctl.vid_buf;
	struct em28xx_buffer    *vbi_buf = dev->usb_ctl.vbi_buf;
352
	struct em28xx_dmaqueue  *dma_q = &dev->vidq;
353
	struct em28xx_dmaqueue  *vbi_dma_q = &dev->vbiq;
354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420

	/* 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) */
			dev->capture_type = 0;
			dev->vbi_read = 0;
			em28xx_isocdbg("VBI START HEADER !!!\n");
			dev->top_field = !(data_pkt[2] & 1);
			data_pkt += 4;
			data_len -= 4;
		} else if (data_pkt[0] == 0x22 && data_pkt[1] == 0x5a) {
			/* Field start (VBI disabled) */
			dev->capture_type = 2;
			em28xx_isocdbg("VIDEO START HEADER !!!\n");
			dev->top_field = !(data_pkt[2] & 1);
			data_pkt += 4;
			data_len -= 4;
		}
	}
	/* NOTE: With bulk transfers, intermediate data packets
	 * have no continuation header */

	if (dev->capture_type == 0) {
		vbi_buf = finish_field_prepare_next(dev, vbi_buf, vbi_dma_q);
		dev->usb_ctl.vbi_buf = vbi_buf;
		dev->capture_type = 1;
	}

	if (dev->capture_type == 1) {
		int vbi_size = dev->vbi_width * dev->vbi_height;
		int vbi_data_len = ((dev->vbi_read + data_len) > vbi_size) ?
				   (vbi_size - dev->vbi_read) : data_len;

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

		if (vbi_data_len < data_len) {
			/* Continue with copying video data */
			dev->capture_type = 2;
			data_pkt += vbi_data_len;
			data_len -= vbi_data_len;
		}
	}

	if (dev->capture_type == 2) {
		buf = finish_field_prepare_next(dev, buf, dma_q);
		dev->usb_ctl.vid_buf = buf;
		dev->capture_type = 3;
	}

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

421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476
/*
 * 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;
	bool frame_end = 0;

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

477 478 479 480 481 482
/* 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;
483 484 485 486

	if (!dev)
		return 0;

487
	if (dev->disconnected)
488 489
		return 0;

490
	if (urb->status < 0)
491 492
		print_err_status(dev, -1, urb->status);

493 494 495 496 497 498
	xfer_bulk = usb_pipebulk(urb->pipe);

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

500 501
	for (i = 0; i < num_packets; i++) {
		if (xfer_bulk) { /* bulk */
502
			usb_data_len = urb->actual_length;
503

504
			usb_data_pkt = urb->transfer_buffer;
505 506 507 508 509 510 511 512
		} 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;
			}

513 514
			usb_data_len = urb->iso_frame_desc[i].actual_length;
			if (usb_data_len > dev->max_pkt_size) {
515
				em28xx_isocdbg("packet bigger than packet size");
516
				continue;
517
			}
518

519 520
			usb_data_pkt = urb->transfer_buffer +
				       urb->iso_frame_desc[i].offset;
521
		}
522

523
		if (usb_data_len == 0) {
524 525
			/* NOTE: happens very often with isoc transfers */
			/* em28xx_usbdbg("packet %d is empty",i); - spammy */
526 527 528
			continue;
		}

529 530 531 532 533 534 535
		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);

536
	}
537
	return 1;
538 539 540
}


541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578
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);
}

579
/* ------------------------------------------------------------------
580
	Videobuf2 operations
581 582
   ------------------------------------------------------------------*/

583 584 585
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[])
586
{
587 588
	struct em28xx *dev = vb2_get_drv_priv(vq);
	unsigned long size;
589

590 591 592 593
	if (fmt)
		size = fmt->fmt.pix.sizeimage;
	else
		size = (dev->width * dev->height * dev->format->depth + 7) >> 3;
594

595 596
	if (size == 0)
		return -EINVAL;
597

598 599
	if (0 == *nbuffers)
		*nbuffers = 32;
600

601 602
	*nplanes = 1;
	sizes[0] = size;
603

604 605 606
	return 0;
}

607 608
static int
buffer_prepare(struct vb2_buffer *vb)
609
{
610 611 612
	struct em28xx        *dev = vb2_get_drv_priv(vb->vb2_queue);
	struct em28xx_buffer *buf = container_of(vb, struct em28xx_buffer, vb);
	unsigned long size;
613

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

616
	size = (dev->width * dev->height * dev->format->depth + 7) >> 3;
617

618 619 620 621 622 623 624 625
	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;
626 627
}

628
int em28xx_start_analog_streaming(struct vb2_queue *vq, unsigned int count)
629
{
630 631 632
	struct em28xx *dev = vb2_get_drv_priv(vq);
	struct v4l2_frequency f;
	int rc = 0;
633

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

636 637 638 639 640
	/* 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;
641

642 643
	if (dev->streaming_users++ == 0) {
		/* First active streaming user, so allocate all the URBs */
644

645 646
		/* Allocate the USB bandwidth */
		em28xx_set_alternate(dev);
647

648 649 650 651
		/* Needed, since GPIO might have disabled power of
		   some i2c device
		*/
		em28xx_wake_i2c(dev);
652

653
		dev->capture_type = -1;
654 655 656 657 658 659
		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);
660
		if (rc < 0)
661 662
			goto fail;

663 664 665 666 667 668 669 670 671 672 673 674 675 676 677
		/*
		 * 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));
		f.frequency = dev->ctl_freq;
		if (vq->owner && vq->owner->vdev->vfl_type == VFL_TYPE_RADIO)
			f.type = V4L2_TUNER_RADIO;
		else
			f.type = V4L2_TUNER_ANALOG_TV;
		v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_frequency, &f);
	}
678 679 680 681 682

fail:
	return rc;
}

683
static int em28xx_stop_streaming(struct vb2_queue *vq)
684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711
{
	struct em28xx *dev = vb2_get_drv_priv(vq);
	struct em28xx_dmaqueue *vidq = &dev->vidq;
	unsigned long flags = 0;

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

	res_free(dev, vq->type);

	if (dev->streaming_users-- == 1) {
		/* Last active user, so shutdown all the URBS */
		em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);
	}

	spin_lock_irqsave(&dev->slock, flags);
	while (!list_empty(&vidq->active)) {
		struct em28xx_buffer *buf;
		buf = list_entry(vidq->active.next, struct em28xx_buffer, list);
		list_del(&buf->list);
		vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
	}
	dev->usb_ctl.vid_buf = NULL;
	spin_unlock_irqrestore(&dev->slock, flags);

	return 0;
}

int em28xx_stop_vbi_streaming(struct vb2_queue *vq)
712
{
713 714 715 716 717 718 719
	struct em28xx *dev = vb2_get_drv_priv(vq);
	struct em28xx_dmaqueue *vbiq = &dev->vbiq;
	unsigned long flags = 0;

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

	res_free(dev, vq->type);
720

721 722 723 724 725 726 727 728 729 730 731 732 733 734
	if (dev->streaming_users-- == 1) {
		/* Last active user, so shutdown all the URBS */
		em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);
	}

	spin_lock_irqsave(&dev->slock, flags);
	while (!list_empty(&vbiq->active)) {
		struct em28xx_buffer *buf;
		buf = list_entry(vbiq->active.next, struct em28xx_buffer, list);
		list_del(&buf->list);
		vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
	}
	dev->usb_ctl.vbi_buf = NULL;
	spin_unlock_irqrestore(&dev->slock, flags);
735

736
	return 0;
737 738
}

739 740
static void
buffer_queue(struct vb2_buffer *vb)
741
{
742 743 744 745
	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;
746

747 748 749
	em28xx_videodbg("%s\n", __func__);
	buf->mem = vb2_plane_vaddr(vb, 0);
	buf->length = vb2_plane_size(vb, 0);
750

751 752 753
	spin_lock_irqsave(&dev->slock, flags);
	list_add_tail(&buf->list, &vidq->active);
	spin_unlock_irqrestore(&dev->slock, flags);
754 755
}

756 757
static struct vb2_ops em28xx_video_qops = {
	.queue_setup    = queue_setup,
758 759
	.buf_prepare    = buffer_prepare,
	.buf_queue      = buffer_queue,
760 761 762 763
	.start_streaming = em28xx_start_analog_streaming,
	.stop_streaming = em28xx_stop_streaming,
	.wait_prepare   = vb2_ops_wait_prepare,
	.wait_finish    = vb2_ops_wait_finish,
764
};
765

766 767 768 769 770 771 772 773
int em28xx_vb2_setup(struct em28xx *dev)
{
	int rc;
	struct vb2_queue *q;

	/* Setup Videobuf2 for Video capture */
	q = &dev->vb_vidq;
	q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
774
	q->io_modes = VB2_READ | VB2_MMAP | VB2_USERPTR | VB2_DMABUF;
775
	q->timestamp_type = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
776 777 778 779 780 781 782 783 784 785 786 787 788
	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 */
	q = &dev->vb_vbiq;
	q->type = V4L2_BUF_TYPE_VBI_CAPTURE;
	q->io_modes = VB2_READ | VB2_MMAP | VB2_USERPTR;
789
	q->timestamp_type = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
790 791 792 793 794 795 796 797 798 799 800 801
	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;
}

802
/*********************  v4l2 interface  **************************************/
803

804 805 806 807
static void video_mux(struct em28xx *dev, int index)
{
	dev->ctl_input = index;
	dev->ctl_ainput = INPUT(index)->amux;
808
	dev->ctl_aoutput = INPUT(index)->aout;
809

810 811 812
	if (!dev->ctl_aoutput)
		dev->ctl_aoutput = EM28XX_AOUT_MASTER;

813 814
	v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_routing,
			INPUT(index)->vmux, 0, 0);
815

816
	if (dev->board.has_msp34xx) {
817
		if (dev->i2s_speed) {
818 819
			v4l2_device_call_all(&dev->v4l2_dev, 0, audio,
				s_i2s_clock_freq, dev->i2s_speed);
820
		}
821
		/* Note: this is msp3400 specific */
822 823
		v4l2_device_call_all(&dev->v4l2_dev, 0, audio, s_routing,
			 dev->ctl_ainput, MSP_OUTPUT(MSP_SC_IN_DSP_SCART1), 0);
824
	}
825

826
	if (dev->board.adecoder != EM28XX_NOADECODER) {
827 828
		v4l2_device_call_all(&dev->v4l2_dev, 0, audio, s_routing,
			dev->ctl_ainput, dev->ctl_aoutput, 0);
829 830
	}

831
	em28xx_audio_analog_set(dev);
832 833
}

834
void em28xx_ctrl_notify(struct v4l2_ctrl *ctrl, void *priv)
835
{
836
	struct em28xx *dev = priv;
837

838 839 840 841 842 843
	/*
	 * 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.
	 */
844 845
	switch (ctrl->id) {
	case V4L2_CID_AUDIO_MUTE:
846 847 848
		dev->mute = ctrl->val;
		em28xx_audio_analog_set(dev);
		break;
849
	case V4L2_CID_AUDIO_VOLUME:
850 851 852
		dev->volume = ctrl->val;
		em28xx_audio_analog_set(dev);
		break;
853
	}
854
}
855

856
static int em28xx_s_ctrl(struct v4l2_ctrl *ctrl)
857
{
858
	struct em28xx *dev = container_of(ctrl->handler, struct em28xx, ctrl_handler);
859
	int ret = -EINVAL;
860

861 862
	switch (ctrl->id) {
	case V4L2_CID_AUDIO_MUTE:
863
		dev->mute = ctrl->val;
864
		ret = em28xx_audio_analog_set(dev);
865
		break;
866
	case V4L2_CID_AUDIO_VOLUME:
867
		dev->volume = ctrl->val;
868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886
		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);
887
		break;
888
	}
889

890
	return (ret < 0) ? ret : 0;
891
}
892

893 894 895 896
const struct v4l2_ctrl_ops em28xx_ctrl_ops = {
	.s_ctrl = em28xx_s_ctrl,
};

897
static void size_to_scale(struct em28xx *dev,
898 899 900
			unsigned int width, unsigned int height,
			unsigned int *hscale, unsigned int *vscale)
{
901 902
	unsigned int          maxw = norm_maxw(dev);
	unsigned int          maxh = norm_maxh(dev);
903 904

	*hscale = (((unsigned long)maxw) << 12) / width - 4096L;
905 906
	if (*hscale > EM28XX_HVSCALE_MAX)
		*hscale = EM28XX_HVSCALE_MAX;
907 908

	*vscale = (((unsigned long)maxh) << 12) / height - 4096L;
909 910
	if (*vscale > EM28XX_HVSCALE_MAX)
		*vscale = EM28XX_HVSCALE_MAX;
911 912
}

913 914 915 916 917 918 919 920 921 922 923
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);
}

924 925 926 927
/* ------------------------------------------------------------------
	IOCTL vidioc handling
   ------------------------------------------------------------------*/

928
static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
929
					struct v4l2_format *f)
930
{
931 932
	struct em28xx_fh      *fh  = priv;
	struct em28xx         *dev = fh->dev;
933

934 935
	f->fmt.pix.width = dev->width;
	f->fmt.pix.height = dev->height;
936 937
	f->fmt.pix.pixelformat = dev->format->fourcc;
	f->fmt.pix.bytesperline = (dev->width * dev->format->depth + 7) >> 3;
938
	f->fmt.pix.sizeimage = f->fmt.pix.bytesperline  * dev->height;
939
	f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
940

941
	/* FIXME: TOP? NONE? BOTTOM? ALTENATE? */
942 943 944 945
	if (dev->progressive)
		f->fmt.pix.field = V4L2_FIELD_NONE;
	else
		f->fmt.pix.field = dev->interlaced ?
946 947
			   V4L2_FIELD_INTERLACED : V4L2_FIELD_TOP;
	return 0;
948 949
}

950 951 952 953 954 955 956 957 958 959 960
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;
}

961
static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
962
			struct v4l2_format *f)
963
{
964 965
	struct em28xx_fh      *fh    = priv;
	struct em28xx         *dev   = fh->dev;
966 967
	unsigned int          width  = f->fmt.pix.width;
	unsigned int          height = f->fmt.pix.height;
968 969 970
	unsigned int          maxw   = norm_maxw(dev);
	unsigned int          maxh   = norm_maxh(dev);
	unsigned int          hscale, vscale;
971 972 973 974 975 976 977 978
	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;
	}
979

980
	if (dev->board.is_em2800) {
981
		/* the em2800 can only scale down to 50% */
982 983
		height = height > (3 * maxh / 4) ? maxh : maxh / 2;
		width = width > (3 * maxw / 4) ? maxw : maxw / 2;
984 985 986 987 988
		/*
		 * MaxPacketSize for em2800 is too small to capture at full
		 * resolution use half of maxw as the scaler can only scale
		 * to 50%
		 */
989 990
		if (width == maxw && height == maxh)
			width /= 2;
991 992 993
	} else {
		/* width must even because of the YUYV format
		   height must be even because of interlacing */
994 995
		v4l_bound_align_image(&width, 48, maxw, 1, &height, 32, maxh,
				      1, 0);
996
	}
997

998
	size_to_scale(dev, width, height, &hscale, &vscale);
999
	scale_to_size(dev, hscale, vscale, &width, &height);
1000

1001 1002
	f->fmt.pix.width = width;
	f->fmt.pix.height = height;
1003
	f->fmt.pix.pixelformat = fmt->fourcc;
1004
	f->fmt.pix.bytesperline = (width * fmt->depth + 7) >> 3;
1005
	f->fmt.pix.sizeimage = f->fmt.pix.bytesperline * height;
1006
	f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
1007 1008 1009 1010 1011
	if (dev->progressive)
		f->fmt.pix.field = V4L2_FIELD_NONE;
	else
		f->fmt.pix.field = dev->interlaced ?
			   V4L2_FIELD_INTERLACED : V4L2_FIELD_TOP;
1012 1013 1014 1015

	return 0;
}

1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029
static int em28xx_set_video_format(struct em28xx *dev, unsigned int fourcc,
				   unsigned width, unsigned height)
{
	struct em28xx_fmt     *fmt;

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

	dev->format = fmt;
	dev->width  = width;
	dev->height = height;

	/* set new image size */
1030
	size_to_scale(dev, dev->width, dev->height, &dev->hscale, &dev->vscale);
1031 1032 1033 1034 1035 1036

	em28xx_resolution_set(dev);

	return 0;
}

1037
static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
1038
			struct v4l2_format *f)
1039
{
1040
	struct em28xx *dev = video_drvdata(file);
1041

1042 1043
	if (dev->streaming_users > 0)
		return -EBUSY;
1044

1045 1046
	vidioc_try_fmt_vid_cap(file, priv, f);

H
Hans Verkuil 已提交
1047
	return em28xx_set_video_format(dev, f->fmt.pix.pixelformat,
1048
				f->fmt.pix.width, f->fmt.pix.height);
1049 1050
}

1051 1052 1053 1054 1055 1056 1057 1058 1059 1060
static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *norm)
{
	struct em28xx_fh   *fh  = priv;
	struct em28xx      *dev = fh->dev;

	*norm = dev->norm;

	return 0;
}

1061 1062 1063 1064 1065 1066 1067 1068 1069 1070
static int vidioc_querystd(struct file *file, void *priv, v4l2_std_id *norm)
{
	struct em28xx_fh   *fh  = priv;
	struct em28xx      *dev = fh->dev;

	v4l2_device_call_all(&dev->v4l2_dev, 0, video, querystd, norm);

	return 0;
}

1071
static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm)
1072 1073 1074 1075 1076
{
	struct em28xx_fh   *fh  = priv;
	struct em28xx      *dev = fh->dev;
	struct v4l2_format f;

1077
	if (norm == dev->norm)
1078
		return 0;
1079

1080
	if (dev->streaming_users > 0)
1081 1082
		return -EBUSY;

1083
	dev->norm = norm;
1084

1085
	/* Adjusts width/height, if needed */
1086
	f.fmt.pix.width = 720;
1087
	f.fmt.pix.height = (norm & V4L2_STD_525_60) ? 480 : 576;
1088
	vidioc_try_fmt_vid_cap(file, priv, &f);
1089

1090 1091 1092
	/* set new image size */
	dev->width = f.fmt.pix.width;
	dev->height = f.fmt.pix.height;
1093
	size_to_scale(dev, dev->width, dev->height, &dev->hscale, &dev->vscale);
1094

1095
	em28xx_resolution_set(dev);
1096
	v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_std, dev->norm);
1097

1098 1099
	return 0;
}
1100

1101 1102 1103 1104 1105 1106 1107
static int vidioc_g_parm(struct file *file, void *priv,
			 struct v4l2_streamparm *p)
{
	struct em28xx_fh   *fh  = priv;
	struct em28xx      *dev = fh->dev;
	int rc = 0;

1108
	p->parm.capture.readbuffers = EM28XX_MIN_BUF;
1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124
	if (dev->board.is_webcam)
		rc = v4l2_device_call_until_err(&dev->v4l2_dev, 0,
						video, g_parm, p);
	else
		v4l2_video_std_frame_period(dev->norm,
						 &p->parm.capture.timeperframe);

	return rc;
}

static int vidioc_s_parm(struct file *file, void *priv,
			 struct v4l2_streamparm *p)
{
	struct em28xx_fh   *fh  = priv;
	struct em28xx      *dev = fh->dev;

1125
	p->parm.capture.readbuffers = EM28XX_MIN_BUF;
1126 1127 1128
	return v4l2_device_call_until_err(&dev->v4l2_dev, 0, video, s_parm, p);
}

1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139
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",
};
1140

1141 1142 1143 1144 1145 1146
static int vidioc_enum_input(struct file *file, void *priv,
				struct v4l2_input *i)
{
	struct em28xx_fh   *fh  = priv;
	struct em28xx      *dev = fh->dev;
	unsigned int       n;
1147

1148 1149 1150 1151 1152
	n = i->index;
	if (n >= MAX_EM28XX_INPUT)
		return -EINVAL;
	if (0 == INPUT(n)->type)
		return -EINVAL;
1153

1154 1155
	i->index = n;
	i->type = V4L2_INPUT_TYPE_CAMERA;
1156

1157
	strcpy(i->name, iname[INPUT(n)->type]);
1158

1159 1160 1161 1162
	if ((EM28XX_VMUX_TELEVISION == INPUT(n)->type) ||
		(EM28XX_VMUX_CABLE == INPUT(n)->type))
		i->type = V4L2_INPUT_TYPE_TUNER;

1163
	i->std = dev->vdev->tvnorms;
1164 1165 1166
	/* webcams do not have the STD API */
	if (dev->board.is_webcam)
		i->capabilities = 0;
1167 1168

	return 0;
1169 1170
}

1171
static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
1172
{
1173 1174
	struct em28xx_fh   *fh  = priv;
	struct em28xx      *dev = fh->dev;
1175

1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189
	*i = dev->ctl_input;

	return 0;
}

static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
{
	struct em28xx_fh   *fh  = priv;
	struct em28xx      *dev = fh->dev;

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

1191
	video_mux(dev, i);
1192 1193 1194 1195 1196 1197 1198 1199
	return 0;
}

static int vidioc_g_audio(struct file *file, void *priv, struct v4l2_audio *a)
{
	struct em28xx_fh   *fh    = priv;
	struct em28xx      *dev   = fh->dev;

1200 1201
	switch (a->index) {
	case EM28XX_AMUX_VIDEO:
1202
		strcpy(a->name, "Television");
1203 1204
		break;
	case EM28XX_AMUX_LINE_IN:
1205
		strcpy(a->name, "Line In");
1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227
		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;
	}
1228

1229
	a->index = dev->ctl_ainput;
1230 1231 1232 1233 1234
	a->capability = V4L2_AUDCAP_STEREO;

	return 0;
}

1235
static int vidioc_s_audio(struct file *file, void *priv, const struct v4l2_audio *a)
1236 1237 1238 1239
{
	struct em28xx_fh   *fh  = priv;
	struct em28xx      *dev = fh->dev;

1240 1241 1242 1243 1244
	if (a->index >= MAX_EM28XX_INPUT)
		return -EINVAL;
	if (0 == INPUT(a->index)->type)
		return -EINVAL;

1245 1246
	dev->ctl_ainput = INPUT(a->index)->amux;
	dev->ctl_aoutput = INPUT(a->index)->aout;
1247 1248 1249

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

1251 1252 1253 1254 1255
	return 0;
}

static int vidioc_g_tuner(struct file *file, void *priv,
				struct v4l2_tuner *t)
1256
{
1257 1258 1259 1260 1261 1262 1263 1264
	struct em28xx_fh      *fh  = priv;
	struct em28xx         *dev = fh->dev;

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

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

1265
	v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, g_tuner, t);
1266
	return 0;
1267 1268
}

1269
static int vidioc_s_tuner(struct file *file, void *priv,
1270
				const struct v4l2_tuner *t)
1271
{
1272 1273 1274 1275 1276 1277
	struct em28xx_fh      *fh  = priv;
	struct em28xx         *dev = fh->dev;

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

1278
	v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_tuner, t);
1279
	return 0;
1280 1281
}

1282 1283 1284 1285 1286
static int vidioc_g_frequency(struct file *file, void *priv,
				struct v4l2_frequency *f)
{
	struct em28xx_fh      *fh  = priv;
	struct em28xx         *dev = fh->dev;
1287

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

1291 1292 1293 1294 1295
	f->frequency = dev->ctl_freq;
	return 0;
}

static int vidioc_s_frequency(struct file *file, void *priv,
1296
				const struct v4l2_frequency *f)
1297
{
1298
	struct v4l2_frequency new_freq = *f;
1299 1300 1301 1302 1303 1304
	struct em28xx_fh      *fh  = priv;
	struct em28xx         *dev = fh->dev;

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

1305
	v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_frequency, f);
1306 1307
	v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, g_frequency, &new_freq);
	dev->ctl_freq = new_freq.frequency;
1308

1309 1310
	return 0;
}
1311

1312
static int vidioc_g_chip_ident(struct file *file, void *priv,
1313
	       struct v4l2_dbg_chip_ident *chip)
1314 1315 1316 1317 1318 1319
{
	struct em28xx_fh      *fh  = priv;
	struct em28xx         *dev = fh->dev;

	chip->ident = V4L2_IDENT_NONE;
	chip->revision = 0;
1320 1321 1322
	if (chip->match.type == V4L2_CHIP_MATCH_BRIDGE) {
		if (chip->match.addr > 1)
			return -EINVAL;
1323 1324 1325 1326 1327
		return 0;
	}
	if (chip->match.type != V4L2_CHIP_MATCH_I2C_DRIVER &&
	    chip->match.type != V4L2_CHIP_MATCH_I2C_ADDR)
		return -EINVAL;
1328

1329
	v4l2_device_call_all(&dev->v4l2_dev, 0, core, g_chip_ident, chip);
1330 1331 1332 1333

	return 0;
}

1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348
static int vidioc_g_chip_name(struct file *file, void *priv,
	       struct v4l2_dbg_chip_name *chip)
{
	struct em28xx_fh      *fh  = priv;
	struct em28xx         *dev = fh->dev;

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

1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360
#ifdef CONFIG_VIDEO_ADV_DEBUG
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;
	}
}
1361

1362
static int vidioc_g_register(struct file *file, void *priv,
1363
			     struct v4l2_dbg_register *reg)
1364 1365 1366 1367 1368
{
	struct em28xx_fh      *fh  = priv;
	struct em28xx         *dev = fh->dev;
	int ret;

1369
	switch (reg->match.type) {
1370 1371 1372 1373 1374 1375
	case V4L2_CHIP_MATCH_BRIDGE:
		if (reg->match.addr > 1)
			return -EINVAL;
		if (!reg->match.addr)
			break;
		/* fall-through */
1376
	case V4L2_CHIP_MATCH_AC97:
1377 1378 1379 1380 1381
		ret = em28xx_read_ac97(dev, reg->reg);
		if (ret < 0)
			return ret;

		reg->val = ret;
1382
		reg->size = 1;
1383
		return 0;
1384
	case V4L2_CHIP_MATCH_I2C_DRIVER:
1385
		v4l2_device_call_all(&dev->v4l2_dev, 0, core, g_register, reg);
1386 1387
		return 0;
	case V4L2_CHIP_MATCH_I2C_ADDR:
1388 1389 1390
		/* TODO: is this correct? */
		v4l2_device_call_all(&dev->v4l2_dev, 0, core, g_register, reg);
		return 0;
1391
	default:
1392
		return -EINVAL;
1393
	}
1394

1395
	/* Match host */
1396 1397
	reg->size = em28xx_reg_len(reg->reg);
	if (reg->size == 1) {
1398
		ret = em28xx_read_reg(dev, reg->reg);
1399

1400 1401 1402 1403 1404
		if (ret < 0)
			return ret;

		reg->val = ret;
	} else {
1405
		__le16 val = 0;
1406 1407 1408 1409 1410
		ret = em28xx_read_reg_req_len(dev, USB_REQ_GET_STATUS,
						   reg->reg, (char *)&val, 2);
		if (ret < 0)
			return ret;

1411
		reg->val = le16_to_cpu(val);
1412 1413 1414 1415 1416 1417
	}

	return 0;
}

static int vidioc_s_register(struct file *file, void *priv,
1418
			     const struct v4l2_dbg_register *reg)
1419 1420 1421
{
	struct em28xx_fh      *fh  = priv;
	struct em28xx         *dev = fh->dev;
1422
	__le16 buf;
1423

1424
	switch (reg->match.type) {
1425 1426 1427 1428 1429 1430
	case V4L2_CHIP_MATCH_BRIDGE:
		if (reg->match.addr > 1)
			return -EINVAL;
		if (!reg->match.addr)
			break;
		/* fall-through */
1431
	case V4L2_CHIP_MATCH_AC97:
H
Hans Verkuil 已提交
1432
		return em28xx_write_ac97(dev, reg->reg, reg->val);
1433
	case V4L2_CHIP_MATCH_I2C_DRIVER:
1434
		v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_register, reg);
1435 1436
		return 0;
	case V4L2_CHIP_MATCH_I2C_ADDR:
1437 1438 1439
		/* TODO: is this correct? */
		v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_register, reg);
		return 0;
1440
	default:
1441
		return -EINVAL;
1442 1443
	}

1444
	/* Match host */
1445
	buf = cpu_to_le16(reg->val);
1446

H
Hans Verkuil 已提交
1447
	return em28xx_write_regs(dev, reg->reg, (char *)&buf,
1448
			       em28xx_reg_len(reg->reg));
1449 1450 1451 1452
}
#endif


1453 1454
static int vidioc_querycap(struct file *file, void  *priv,
					struct v4l2_capability *cap)
1455
{
H
Hans Verkuil 已提交
1456
	struct video_device *vdev = video_devdata(file);
1457 1458 1459 1460 1461
	struct em28xx_fh      *fh  = priv;
	struct em28xx         *dev = fh->dev;

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

H
Hans Verkuil 已提交
1464 1465 1466 1467 1468 1469
	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
1470
		cap->device_caps = V4L2_CAP_READWRITE | V4L2_CAP_VBI_CAPTURE;
1471

1472
	if (dev->audio_mode.has_audio)
H
Hans Verkuil 已提交
1473
		cap->device_caps |= V4L2_CAP_AUDIO;
1474

1475
	if (dev->tuner_type != TUNER_ABSENT)
H
Hans Verkuil 已提交
1476
		cap->device_caps |= V4L2_CAP_TUNER;
1477

H
Hans Verkuil 已提交
1478 1479 1480
	cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS |
		V4L2_CAP_READWRITE | V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
	if (dev->vbi_dev)
1481
		cap->capabilities |= V4L2_CAP_VBI_CAPTURE;
H
Hans Verkuil 已提交
1482 1483
	if (dev->radio_dev)
		cap->capabilities |= V4L2_CAP_RADIO;
1484
	return 0;
1485 1486
}

1487
static int vidioc_enum_fmt_vid_cap(struct file *file, void  *priv,
1488
					struct v4l2_fmtdesc *f)
1489
{
1490
	if (unlikely(f->index >= ARRAY_SIZE(format)))
1491
		return -EINVAL;
1492

1493 1494
	strlcpy(f->description, format[f->index].name, sizeof(f->description));
	f->pixelformat = format[f->index].fourcc;
1495 1496

	return 0;
1497 1498
}

1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528
static int vidioc_enum_framesizes(struct file *file, void *priv,
				  struct v4l2_frmsizeenum *fsize)
{
	struct em28xx_fh      *fh  = priv;
	struct em28xx         *dev = fh->dev;
	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;
1529 1530 1531 1532 1533 1534
	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;
1535 1536 1537 1538 1539 1540 1541
	fsize->stepwise.max_width = maxw;
	fsize->stepwise.max_height = maxh;
	fsize->stepwise.step_width = 1;
	fsize->stepwise.step_height = 1;
	return 0;
}

1542 1543 1544 1545 1546
/* RAW VBI ioctls */

static int vidioc_g_fmt_vbi_cap(struct file *file, void *priv,
				struct v4l2_format *format)
{
1547 1548 1549 1550
	struct em28xx_fh      *fh  = priv;
	struct em28xx         *dev = fh->dev;

	format->fmt.vbi.samples_per_line = dev->vbi_width;
1551 1552 1553
	format->fmt.vbi.sample_format = V4L2_PIX_FMT_GREY;
	format->fmt.vbi.offset = 0;
	format->fmt.vbi.flags = 0;
1554 1555 1556
	format->fmt.vbi.sampling_rate = 6750000 * 4 / 2;
	format->fmt.vbi.count[0] = dev->vbi_height;
	format->fmt.vbi.count[1] = dev->vbi_height;
1557
	memset(format->fmt.vbi.reserved, 0, sizeof(format->fmt.vbi.reserved));
1558 1559

	/* Varies by video standard (NTSC, PAL, etc.) */
1560 1561 1562 1563 1564 1565 1566 1567 1568
	if (dev->norm & V4L2_STD_525_60) {
		/* NTSC */
		format->fmt.vbi.start[0] = 10;
		format->fmt.vbi.start[1] = 273;
	} else if (dev->norm & V4L2_STD_625_50) {
		/* PAL */
		format->fmt.vbi.start[0] = 6;
		format->fmt.vbi.start[1] = 318;
	}
1569 1570 1571 1572

	return 0;
}

1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586
/* ----------------------------------------------------------- */
/* RADIO ESPECIFIC IOCTLS                                      */
/* ----------------------------------------------------------- */

static int radio_g_tuner(struct file *file, void *priv,
			 struct v4l2_tuner *t)
{
	struct em28xx *dev = ((struct em28xx_fh *)priv)->dev;

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

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

1587
	v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, g_tuner, t);
1588

1589 1590 1591 1592
	return 0;
}

static int radio_s_tuner(struct file *file, void *priv,
1593
			 const struct v4l2_tuner *t)
1594 1595 1596 1597 1598 1599
{
	struct em28xx *dev = ((struct em28xx_fh *)priv)->dev;

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

1600
	v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_tuner, t);
1601 1602 1603 1604

	return 0;
}

1605 1606 1607 1608
/*
 * em28xx_v4l2_open()
 * inits the device and starts isoc transfer
 */
1609
static int em28xx_v4l2_open(struct file *filp)
1610
{
1611 1612 1613
	struct video_device *vdev = video_devdata(filp);
	struct em28xx *dev = video_drvdata(filp);
	enum v4l2_buf_type fh_type = 0;
1614
	struct em28xx_fh *fh;
1615

1616 1617 1618 1619 1620 1621 1622 1623
	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;
	}
1624

1625 1626 1627
	em28xx_videodbg("open dev=%s type=%s users=%d\n",
			video_device_node_name(vdev), v4l2_type_names[fh_type],
			dev->users);
1628

1629

1630 1631
	if (mutex_lock_interruptible(&dev->lock))
		return -ERESTARTSYS;
1632
	fh = kzalloc(sizeof(struct em28xx_fh), GFP_KERNEL);
1633 1634
	if (!fh) {
		em28xx_errdev("em28xx-video.c: Out of memory?!\n");
1635
		mutex_unlock(&dev->lock);
1636 1637
		return -ENOMEM;
	}
1638
	v4l2_fh_init(&fh->fh, vdev);
1639
	fh->dev = dev;
1640
	fh->type = fh_type;
1641
	filp->private_data = fh;
1642

1643
	if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE && dev->users == 0) {
1644
		em28xx_set_mode(dev, EM28XX_ANALOG_MODE);
1645
		em28xx_resolution_set(dev);
1646

1647 1648 1649
		/* Needed, since GPIO might have disabled power of
		   some i2c device
		 */
1650
		em28xx_wake_i2c(dev);
1651

1652
	}
1653 1654

	if (vdev->vfl_type == VFL_TYPE_RADIO) {
1655
		em28xx_videodbg("video_open: setting radio device\n");
1656
		v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_radio);
1657
	}
1658

1659
	dev->users++;
1660

1661
	mutex_unlock(&dev->lock);
1662
	v4l2_fh_add(&fh->fh);
1663

1664
	return 0;
1665
}
1666

1667
/*
1668 1669 1670 1671
 * em28xx_realease_resources()
 * unregisters the v4l2,i2c and usb devices
 * called when the device gets disconected or at module unload
*/
1672
void em28xx_release_analog_resources(struct em28xx *dev)
1673 1674
{

1675
	/*FIXME: I2C IR should be disconnected */
1676

1677
	if (dev->radio_dev) {
1678
		if (video_is_registered(dev->radio_dev))
1679 1680 1681 1682 1683 1684
			video_unregister_device(dev->radio_dev);
		else
			video_device_release(dev->radio_dev);
		dev->radio_dev = NULL;
	}
	if (dev->vbi_dev) {
1685 1686
		em28xx_info("V4L2 device %s deregistered\n",
			    video_device_node_name(dev->vbi_dev));
1687
		if (video_is_registered(dev->vbi_dev))
1688 1689 1690 1691 1692 1693
			video_unregister_device(dev->vbi_dev);
		else
			video_device_release(dev->vbi_dev);
		dev->vbi_dev = NULL;
	}
	if (dev->vdev) {
1694 1695
		em28xx_info("V4L2 device %s deregistered\n",
			    video_device_node_name(dev->vdev));
1696
		if (video_is_registered(dev->vdev))
1697 1698 1699 1700 1701
			video_unregister_device(dev->vdev);
		else
			video_device_release(dev->vdev);
		dev->vdev = NULL;
	}
1702
}
1703

1704 1705
/*
 * em28xx_v4l2_close()
1706 1707
 * stops streaming and deallocates all resources allocated by the v4l2
 * calls and ioctls
1708
 */
1709
static int em28xx_v4l2_close(struct file *filp)
1710 1711 1712 1713
{
	struct em28xx_fh *fh  = filp->private_data;
	struct em28xx    *dev = fh->dev;
	int              errCode;
1714

1715
	em28xx_videodbg("users=%d\n", dev->users);
1716

1717
	mutex_lock(&dev->lock);
1718
	vb2_fop_release(filp);
1719

1720
	if (dev->users == 1) {
1721 1722
		/* the device is already disconnect,
		   free the remaining resources */
1723
		if (dev->disconnected) {
1724
			em28xx_release_resources(dev);
1725
			kfree(dev->alt_max_pkt_size_isoc);
1726
			mutex_unlock(&dev->lock);
1727 1728 1729
			kfree(dev);
			return 0;
		}
1730

1731
		/* Save some power by putting tuner to sleep */
1732
		v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_power, 0);
1733

1734
		/* do this before setting alternate! */
1735
		em28xx_set_mode(dev, EM28XX_SUSPEND);
1736

1737 1738 1739 1740 1741 1742 1743 1744
		/* 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);
		}
1745
	}
1746

1747
	dev->users--;
1748
	mutex_unlock(&dev->lock);
1749 1750
	return 0;
}
1751

1752
static const struct v4l2_file_operations em28xx_v4l_fops = {
1753 1754 1755
	.owner         = THIS_MODULE,
	.open          = em28xx_v4l2_open,
	.release       = em28xx_v4l2_close,
1756 1757 1758
	.read          = vb2_fop_read,
	.poll          = vb2_fop_poll,
	.mmap          = vb2_fop_mmap,
H
Hans Verkuil 已提交
1759
	.unlocked_ioctl = video_ioctl2,
1760
};
1761

1762
static const struct v4l2_ioctl_ops video_ioctl_ops = {
1763
	.vidioc_querycap            = vidioc_querycap,
1764 1765 1766 1767
	.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,
1768
	.vidioc_g_fmt_vbi_cap       = vidioc_g_fmt_vbi_cap,
1769
	.vidioc_try_fmt_vbi_cap     = vidioc_g_fmt_vbi_cap,
1770
	.vidioc_s_fmt_vbi_cap       = vidioc_g_fmt_vbi_cap,
1771
	.vidioc_enum_framesizes     = vidioc_enum_framesizes,
1772 1773 1774
	.vidioc_g_audio             = vidioc_g_audio,
	.vidioc_s_audio             = vidioc_s_audio,

1775 1776 1777 1778 1779 1780 1781
	.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,

1782
	.vidioc_g_std               = vidioc_g_std,
1783
	.vidioc_querystd            = vidioc_querystd,
1784
	.vidioc_s_std               = vidioc_s_std,
1785 1786
	.vidioc_g_parm		    = vidioc_g_parm,
	.vidioc_s_parm		    = vidioc_s_parm,
1787 1788 1789
	.vidioc_enum_input          = vidioc_enum_input,
	.vidioc_g_input             = vidioc_g_input,
	.vidioc_s_input             = vidioc_s_input,
1790 1791
	.vidioc_streamon            = vb2_ioctl_streamon,
	.vidioc_streamoff           = vb2_ioctl_streamoff,
1792 1793 1794 1795
	.vidioc_g_tuner             = vidioc_g_tuner,
	.vidioc_s_tuner             = vidioc_s_tuner,
	.vidioc_g_frequency         = vidioc_g_frequency,
	.vidioc_s_frequency         = vidioc_s_frequency,
1796 1797
	.vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
	.vidioc_unsubscribe_event = v4l2_event_unsubscribe,
1798
	.vidioc_g_chip_ident        = vidioc_g_chip_ident,
1799
	.vidioc_g_chip_name         = vidioc_g_chip_name,
1800 1801 1802 1803
#ifdef CONFIG_VIDEO_ADV_DEBUG
	.vidioc_g_register          = vidioc_g_register,
	.vidioc_s_register          = vidioc_s_register,
#endif
1804 1805 1806 1807
};

static const struct video_device em28xx_video_template = {
	.fops                       = &em28xx_v4l_fops,
1808
	.release                    = video_device_release_empty,
1809 1810
	.ioctl_ops 		    = &video_ioctl_ops,

1811
	.tvnorms                    = V4L2_STD_ALL,
1812 1813
};

1814
static const struct v4l2_file_operations radio_fops = {
1815 1816 1817
	.owner         = THIS_MODULE,
	.open          = em28xx_v4l2_open,
	.release       = em28xx_v4l2_close,
1818
	.unlocked_ioctl = video_ioctl2,
1819 1820 1821
};

static const struct v4l2_ioctl_ops radio_ioctl_ops = {
H
Hans Verkuil 已提交
1822
	.vidioc_querycap      = vidioc_querycap,
1823 1824 1825 1826
	.vidioc_g_tuner       = radio_g_tuner,
	.vidioc_s_tuner       = radio_s_tuner,
	.vidioc_g_frequency   = vidioc_g_frequency,
	.vidioc_s_frequency   = vidioc_s_frequency,
1827 1828
	.vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
	.vidioc_unsubscribe_event = v4l2_event_unsubscribe,
1829
	.vidioc_g_chip_ident  = vidioc_g_chip_ident,
1830
	.vidioc_g_chip_name   = vidioc_g_chip_name,
1831 1832 1833 1834
#ifdef CONFIG_VIDEO_ADV_DEBUG
	.vidioc_g_register    = vidioc_g_register,
	.vidioc_s_register    = vidioc_s_register,
#endif
1835 1836
};

1837 1838 1839 1840 1841 1842
static struct video_device em28xx_radio_template = {
	.name                 = "em28xx-radio",
	.fops                 = &radio_fops,
	.ioctl_ops 	      = &radio_ioctl_ops,
};

1843
/******************************** usb interface ******************************/
1844

1845 1846


1847
static struct video_device *em28xx_vdev_init(struct em28xx *dev,
1848 1849
					const struct video_device *template,
					const char *type_name)
1850 1851 1852 1853 1854 1855
{
	struct video_device *vfd;

	vfd = video_device_alloc();
	if (NULL == vfd)
		return NULL;
1856 1857 1858 1859

	*vfd		= *template;
	vfd->v4l2_dev	= &dev->v4l2_dev;
	vfd->debug	= video_debug;
H
Hans Verkuil 已提交
1860
	vfd->lock	= &dev->lock;
1861
	set_bit(V4L2_FL_USE_FH_PRIO, &vfd->flags);
1862 1863
	if (dev->board.is_webcam)
		vfd->tvnorms = 0;
1864 1865 1866 1867

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

1868
	video_set_drvdata(vfd, dev);
1869 1870 1871
	return vfd;
}

1872
int em28xx_register_analog_devices(struct em28xx *dev)
1873
{
1874
	u8 val;
1875
	int ret;
1876
	unsigned int maxw;
1877

1878 1879
	printk(KERN_INFO "%s: v4l2 driver version %s\n",
		dev->name, EM28XX_VERSION);
1880

1881
	/* set default norm */
1882
	dev->norm = V4L2_STD_PAL;
1883
	v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_std, dev->norm);
1884 1885
	dev->interlaced = EM28XX_INTERLACED_DEFAULT;

1886 1887
	/* Analog specific initialization */
	dev->format = &format[0];
1888 1889

	maxw = norm_maxw(dev);
1890 1891 1892 1893
	/* 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;
1894

1895
	em28xx_set_video_format(dev, format[0].fourcc,
1896
				maxw, norm_maxh(dev));
1897

1898
	video_mux(dev, 0);
1899 1900 1901 1902

	/* Audio defaults */
	dev->mute = 1;
	dev->volume = 0x1f;
1903 1904

/*	em28xx_write_reg(dev, EM28XX_R0E_AUDIOSRC, 0xc0); audio register */
1905 1906 1907
	val = (u8)em28xx_read_reg(dev, EM28XX_R0F_XCLK);
	em28xx_write_reg(dev, EM28XX_R0F_XCLK,
			 (EM28XX_XCLK_AUDIO_UNMUTE | val));
1908 1909 1910 1911

	em28xx_set_outfmt(dev);
	em28xx_compression_disable(dev);

1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945
	/* Add image controls */
	/* NOTE: at this point, the subdevices are already registered, so bridge
	 * controls are only added/enabled when no subdevice provides them */
	if (NULL == v4l2_ctrl_find(&dev->ctrl_handler, V4L2_CID_CONTRAST))
		v4l2_ctrl_new_std(&dev->ctrl_handler, &em28xx_ctrl_ops,
				  V4L2_CID_CONTRAST,
				  0, 0x1f, 1, CONTRAST_DEFAULT);
	if (NULL == v4l2_ctrl_find(&dev->ctrl_handler, V4L2_CID_BRIGHTNESS))
		v4l2_ctrl_new_std(&dev->ctrl_handler, &em28xx_ctrl_ops,
				  V4L2_CID_BRIGHTNESS,
				  -0x80, 0x7f, 1, BRIGHTNESS_DEFAULT);
	if (NULL == v4l2_ctrl_find(&dev->ctrl_handler, V4L2_CID_SATURATION))
		v4l2_ctrl_new_std(&dev->ctrl_handler, &em28xx_ctrl_ops,
				  V4L2_CID_SATURATION,
				  0, 0x1f, 1, SATURATION_DEFAULT);
	if (NULL == v4l2_ctrl_find(&dev->ctrl_handler, V4L2_CID_BLUE_BALANCE))
		v4l2_ctrl_new_std(&dev->ctrl_handler, &em28xx_ctrl_ops,
				  V4L2_CID_BLUE_BALANCE,
				  -0x30, 0x30, 1, BLUE_BALANCE_DEFAULT);
	if (NULL == v4l2_ctrl_find(&dev->ctrl_handler, V4L2_CID_RED_BALANCE))
		v4l2_ctrl_new_std(&dev->ctrl_handler, &em28xx_ctrl_ops,
				  V4L2_CID_RED_BALANCE,
				  -0x30, 0x30, 1, RED_BALANCE_DEFAULT);
	if (NULL == v4l2_ctrl_find(&dev->ctrl_handler, V4L2_CID_SHARPNESS))
		v4l2_ctrl_new_std(&dev->ctrl_handler, &em28xx_ctrl_ops,
				  V4L2_CID_SHARPNESS,
				  0, 0x0f, 1, SHARPNESS_DEFAULT);

	/* Reset image controls */
	em28xx_colorlevels_set_default(dev);
	v4l2_ctrl_handler_setup(&dev->ctrl_handler);
	if (dev->ctrl_handler.error)
		return dev->ctrl_handler.error;

1946 1947 1948 1949 1950 1951
	/* allocate and fill video video_device struct */
	dev->vdev = em28xx_vdev_init(dev, &em28xx_video_template, "video");
	if (!dev->vdev) {
		em28xx_errdev("cannot allocate video_device.\n");
		return -ENODEV;
	}
1952 1953
	dev->vdev->queue = &dev->vb_vidq;
	dev->vdev->queue->lock = &dev->vb_queue_lock;
1954

1955 1956 1957 1958 1959
	/* disable inapplicable ioctls */
	if (dev->board.is_webcam) {
		v4l2_disable_ioctl(dev->vdev, VIDIOC_QUERYSTD);
		v4l2_disable_ioctl(dev->vdev, VIDIOC_G_STD);
		v4l2_disable_ioctl(dev->vdev, VIDIOC_S_STD);
1960 1961
	} else {
		v4l2_disable_ioctl(dev->vdev, VIDIOC_S_PARM);
1962
	}
1963 1964 1965 1966 1967 1968
	if (dev->tuner_type == TUNER_ABSENT) {
		v4l2_disable_ioctl(dev->vdev, VIDIOC_G_TUNER);
		v4l2_disable_ioctl(dev->vdev, VIDIOC_S_TUNER);
		v4l2_disable_ioctl(dev->vdev, VIDIOC_G_FREQUENCY);
		v4l2_disable_ioctl(dev->vdev, VIDIOC_S_FREQUENCY);
	}
1969 1970 1971 1972
	if (!dev->audio_mode.has_audio) {
		v4l2_disable_ioctl(dev->vdev, VIDIOC_G_AUDIO);
		v4l2_disable_ioctl(dev->vdev, VIDIOC_S_AUDIO);
	}
1973

1974 1975 1976 1977 1978 1979 1980 1981 1982 1983
	/* register v4l2 video video_device */
	ret = video_register_device(dev->vdev, VFL_TYPE_GRABBER,
				       video_nr[dev->devno]);
	if (ret) {
		em28xx_errdev("unable to register video device (error=%i).\n",
			      ret);
		return ret;
	}

	/* Allocate and fill vbi video_device struct */
1984 1985 1986
	if (em28xx_vbi_supported(dev) == 1) {
		dev->vbi_dev = em28xx_vdev_init(dev, &em28xx_video_template,
						"vbi");
1987

1988 1989 1990
		dev->vbi_dev->queue = &dev->vb_vbiq;
		dev->vbi_dev->queue->lock = &dev->vb_vbi_queue_lock;

1991
		/* disable inapplicable ioctls */
1992
		v4l2_disable_ioctl(dev->vdev, VIDIOC_S_PARM);
1993 1994 1995 1996 1997 1998
		if (dev->tuner_type == TUNER_ABSENT) {
			v4l2_disable_ioctl(dev->vbi_dev, VIDIOC_G_TUNER);
			v4l2_disable_ioctl(dev->vbi_dev, VIDIOC_S_TUNER);
			v4l2_disable_ioctl(dev->vbi_dev, VIDIOC_G_FREQUENCY);
			v4l2_disable_ioctl(dev->vbi_dev, VIDIOC_S_FREQUENCY);
		}
1999 2000 2001 2002
		if (!dev->audio_mode.has_audio) {
			v4l2_disable_ioctl(dev->vbi_dev, VIDIOC_G_AUDIO);
			v4l2_disable_ioctl(dev->vbi_dev, VIDIOC_S_AUDIO);
		}
2003

2004 2005 2006 2007 2008 2009 2010
		/* register v4l2 vbi video_device */
		ret = video_register_device(dev->vbi_dev, VFL_TYPE_VBI,
					    vbi_nr[dev->devno]);
		if (ret < 0) {
			em28xx_errdev("unable to register vbi device\n");
			return ret;
		}
2011 2012 2013
	}

	if (em28xx_boards[dev->model].radio.type == EM28XX_RADIO) {
2014 2015
		dev->radio_dev = em28xx_vdev_init(dev, &em28xx_radio_template,
						  "radio");
2016 2017 2018 2019 2020 2021 2022 2023 2024 2025
		if (!dev->radio_dev) {
			em28xx_errdev("cannot allocate video_device.\n");
			return -ENODEV;
		}
		ret = video_register_device(dev->radio_dev, VFL_TYPE_RADIO,
					    radio_nr[dev->devno]);
		if (ret < 0) {
			em28xx_errdev("can't register radio device\n");
			return ret;
		}
2026 2027
		em28xx_info("Registered radio device as %s\n",
			    video_device_node_name(dev->radio_dev));
2028 2029
	}

2030 2031
	em28xx_info("V4L2 video device registered as %s\n",
		    video_device_node_name(dev->vdev));
2032 2033

	if (dev->vbi_dev)
2034 2035
		em28xx_info("V4L2 VBI device registered as %s\n",
			    video_device_node_name(dev->vbi_dev));
2036 2037 2038

	return 0;
}