PageRenderTime 103ms CodeModel.GetById 27ms app.highlight 64ms RepoModel.GetById 1ms app.codeStats 1ms

/drivers/media/video/em28xx/em28xx-video.c

https://bitbucket.org/abioy/linux
C | 2579 lines | 1927 code | 455 blank | 197 comment | 371 complexity | b28f8b86652de0801c8e5b89e6d309ce MD5 | raw file
Possible License(s): CC-BY-SA-3.0, GPL-2.0, LGPL-2.0, AGPL-1.0

Large files files are truncated, but you can click here to view the full file

   1/*
   2   em28xx-video.c - driver for Empia EM2800/EM2820/2840 USB
   3		    video capture devices
   4
   5   Copyright (C) 2005 Ludovico Cavedon <cavedon@sssup.it>
   6		      Markus Rechberger <mrechberger@gmail.com>
   7		      Mauro Carvalho Chehab <mchehab@infradead.org>
   8		      Sascha Sommer <saschasommer@freenet.de>
   9
  10	Some parts based on SN9C10x PC Camera Controllers GPL driver made
  11		by Luca Risolia <luca.risolia@studio.unibo.it>
  12
  13   This program is free software; you can redistribute it and/or modify
  14   it under the terms of the GNU General Public License as published by
  15   the Free Software Foundation; either version 2 of the License, or
  16   (at your option) any later version.
  17
  18   This program is distributed in the hope that it will be useful,
  19   but WITHOUT ANY WARRANTY; without even the implied warranty of
  20   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21   GNU General Public License for more details.
  22
  23   You should have received a copy of the GNU General Public License
  24   along with this program; if not, write to the Free Software
  25   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  26 */
  27
  28#include <linux/init.h>
  29#include <linux/list.h>
  30#include <linux/module.h>
  31#include <linux/kernel.h>
  32#include <linux/bitmap.h>
  33#include <linux/usb.h>
  34#include <linux/i2c.h>
  35#include <linux/version.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-chip-ident.h>
  44#include <media/msp3400.h>
  45#include <media/tuner.h>
  46
  47#define DRIVER_AUTHOR "Ludovico Cavedon <cavedon@sssup.it>, " \
  48		      "Markus Rechberger <mrechberger@gmail.com>, " \
  49		      "Mauro Carvalho Chehab <mchehab@infradead.org>, " \
  50		      "Sascha Sommer <saschasommer@freenet.de>"
  51
  52#define DRIVER_DESC         "Empia em28xx based USB video device driver"
  53#define EM28XX_VERSION_CODE  KERNEL_VERSION(0, 1, 2)
  54
  55#define em28xx_videodbg(fmt, arg...) do {\
  56	if (video_debug) \
  57		printk(KERN_INFO "%s %s :"fmt, \
  58			 dev->name, __func__ , ##arg); } while (0)
  59
  60static unsigned int isoc_debug;
  61module_param(isoc_debug, int, 0644);
  62MODULE_PARM_DESC(isoc_debug, "enable debug messages [isoc transfers]");
  63
  64#define em28xx_isocdbg(fmt, arg...) \
  65do {\
  66	if (isoc_debug) { \
  67		printk(KERN_INFO "%s %s :"fmt, \
  68			 dev->name, __func__ , ##arg); \
  69	} \
  70  } while (0)
  71
  72MODULE_AUTHOR(DRIVER_AUTHOR);
  73MODULE_DESCRIPTION(DRIVER_DESC);
  74MODULE_LICENSE("GPL");
  75
  76static unsigned int video_nr[] = {[0 ... (EM28XX_MAXBOARDS - 1)] = UNSET };
  77static unsigned int vbi_nr[]   = {[0 ... (EM28XX_MAXBOARDS - 1)] = UNSET };
  78static unsigned int radio_nr[] = {[0 ... (EM28XX_MAXBOARDS - 1)] = UNSET };
  79
  80module_param_array(video_nr, int, NULL, 0444);
  81module_param_array(vbi_nr, int, NULL, 0444);
  82module_param_array(radio_nr, int, NULL, 0444);
  83MODULE_PARM_DESC(video_nr, "video device numbers");
  84MODULE_PARM_DESC(vbi_nr,   "vbi device numbers");
  85MODULE_PARM_DESC(radio_nr, "radio device numbers");
  86
  87static unsigned int video_debug;
  88module_param(video_debug, int, 0644);
  89MODULE_PARM_DESC(video_debug, "enable debug messages [video]");
  90
  91/* supported video standards */
  92static struct em28xx_fmt format[] = {
  93	{
  94		.name     = "16 bpp YUY2, 4:2:2, packed",
  95		.fourcc   = V4L2_PIX_FMT_YUYV,
  96		.depth    = 16,
  97		.reg	  = EM28XX_OUTFMT_YUV422_Y0UY1V,
  98	}, {
  99		.name     = "16 bpp RGB 565, LE",
 100		.fourcc   = V4L2_PIX_FMT_RGB565,
 101		.depth    = 16,
 102		.reg      = EM28XX_OUTFMT_RGB_16_656,
 103	}, {
 104		.name     = "8 bpp Bayer BGBG..GRGR",
 105		.fourcc   = V4L2_PIX_FMT_SBGGR8,
 106		.depth    = 8,
 107		.reg      = EM28XX_OUTFMT_RGB_8_BGBG,
 108	}, {
 109		.name     = "8 bpp Bayer GRGR..BGBG",
 110		.fourcc   = V4L2_PIX_FMT_SGRBG8,
 111		.depth    = 8,
 112		.reg      = EM28XX_OUTFMT_RGB_8_GRGR,
 113	}, {
 114		.name     = "8 bpp Bayer GBGB..RGRG",
 115		.fourcc   = V4L2_PIX_FMT_SGBRG8,
 116		.depth    = 8,
 117		.reg      = EM28XX_OUTFMT_RGB_8_GBGB,
 118	}, {
 119		.name     = "12 bpp YUV411",
 120		.fourcc   = V4L2_PIX_FMT_YUV411P,
 121		.depth    = 12,
 122		.reg      = EM28XX_OUTFMT_YUV411,
 123	},
 124};
 125
 126/* supported controls */
 127/* Common to all boards */
 128static struct v4l2_queryctrl ac97_qctrl[] = {
 129	{
 130		.id = V4L2_CID_AUDIO_VOLUME,
 131		.type = V4L2_CTRL_TYPE_INTEGER,
 132		.name = "Volume",
 133		.minimum = 0x0,
 134		.maximum = 0x1f,
 135		.step = 0x1,
 136		.default_value = 0x1f,
 137		.flags = V4L2_CTRL_FLAG_SLIDER,
 138	}, {
 139		.id = V4L2_CID_AUDIO_MUTE,
 140		.type = V4L2_CTRL_TYPE_BOOLEAN,
 141		.name = "Mute",
 142		.minimum = 0,
 143		.maximum = 1,
 144		.step = 1,
 145		.default_value = 1,
 146		.flags = 0,
 147	}
 148};
 149
 150/* ------------------------------------------------------------------
 151	DMA and thread functions
 152   ------------------------------------------------------------------*/
 153
 154/*
 155 * Announces that a buffer were filled and request the next
 156 */
 157static inline void buffer_filled(struct em28xx *dev,
 158				  struct em28xx_dmaqueue *dma_q,
 159				  struct em28xx_buffer *buf)
 160{
 161	/* Advice that buffer was filled */
 162	em28xx_isocdbg("[%p/%d] wakeup\n", buf, buf->vb.i);
 163	buf->vb.state = VIDEOBUF_DONE;
 164	buf->vb.field_count++;
 165	do_gettimeofday(&buf->vb.ts);
 166
 167	dev->isoc_ctl.vid_buf = NULL;
 168
 169	list_del(&buf->vb.queue);
 170	wake_up(&buf->vb.done);
 171}
 172
 173static inline void vbi_buffer_filled(struct em28xx *dev,
 174				     struct em28xx_dmaqueue *dma_q,
 175				     struct em28xx_buffer *buf)
 176{
 177	/* Advice that buffer was filled */
 178	em28xx_isocdbg("[%p/%d] wakeup\n", buf, buf->vb.i);
 179
 180	buf->vb.state = VIDEOBUF_DONE;
 181	buf->vb.field_count++;
 182	do_gettimeofday(&buf->vb.ts);
 183
 184	dev->isoc_ctl.vbi_buf = NULL;
 185
 186	list_del(&buf->vb.queue);
 187	wake_up(&buf->vb.done);
 188}
 189
 190/*
 191 * Identify the buffer header type and properly handles
 192 */
 193static void em28xx_copy_video(struct em28xx *dev,
 194			      struct em28xx_dmaqueue  *dma_q,
 195			      struct em28xx_buffer *buf,
 196			      unsigned char *p,
 197			      unsigned char *outp, unsigned long len)
 198{
 199	void *fieldstart, *startwrite, *startread;
 200	int  linesdone, currlinedone, offset, lencopy, remain;
 201	int bytesperline = dev->width << 1;
 202
 203	if (dma_q->pos + len > buf->vb.size)
 204		len = buf->vb.size - dma_q->pos;
 205
 206	if (p[0] != 0x88 && p[0] != 0x22) {
 207		em28xx_isocdbg("frame is not complete\n");
 208		len += 4;
 209	} else
 210		p += 4;
 211
 212	startread = p;
 213	remain = len;
 214
 215	if (dev->progressive)
 216		fieldstart = outp;
 217	else {
 218		/* Interlaces two half frames */
 219		if (buf->top_field)
 220			fieldstart = outp;
 221		else
 222			fieldstart = outp + bytesperline;
 223	}
 224
 225	linesdone = dma_q->pos / bytesperline;
 226	currlinedone = dma_q->pos % bytesperline;
 227
 228	if (dev->progressive)
 229		offset = linesdone * bytesperline + currlinedone;
 230	else
 231		offset = linesdone * bytesperline * 2 + currlinedone;
 232
 233	startwrite = fieldstart + offset;
 234	lencopy = bytesperline - currlinedone;
 235	lencopy = lencopy > remain ? remain : lencopy;
 236
 237	if ((char *)startwrite + lencopy > (char *)outp + buf->vb.size) {
 238		em28xx_isocdbg("Overflow of %zi bytes past buffer end (1)\n",
 239			       ((char *)startwrite + lencopy) -
 240			       ((char *)outp + buf->vb.size));
 241		remain = (char *)outp + buf->vb.size - (char *)startwrite;
 242		lencopy = remain;
 243	}
 244	if (lencopy <= 0)
 245		return;
 246	memcpy(startwrite, startread, lencopy);
 247
 248	remain -= lencopy;
 249
 250	while (remain > 0) {
 251		startwrite += lencopy + bytesperline;
 252		startread += lencopy;
 253		if (bytesperline > remain)
 254			lencopy = remain;
 255		else
 256			lencopy = bytesperline;
 257
 258		if ((char *)startwrite + lencopy > (char *)outp +
 259		    buf->vb.size) {
 260			em28xx_isocdbg("Overflow of %zi bytes past buffer end"
 261				       "(2)\n",
 262				       ((char *)startwrite + lencopy) -
 263				       ((char *)outp + buf->vb.size));
 264			lencopy = remain = (char *)outp + buf->vb.size -
 265					   (char *)startwrite;
 266		}
 267		if (lencopy <= 0)
 268			break;
 269
 270		memcpy(startwrite, startread, lencopy);
 271
 272		remain -= lencopy;
 273	}
 274
 275	dma_q->pos += len;
 276}
 277
 278static void em28xx_copy_vbi(struct em28xx *dev,
 279			      struct em28xx_dmaqueue  *dma_q,
 280			      struct em28xx_buffer *buf,
 281			      unsigned char *p,
 282			      unsigned char *outp, unsigned long len)
 283{
 284	void *startwrite, *startread;
 285	int  offset;
 286	int bytesperline = dev->vbi_width;
 287
 288	if (dev == NULL) {
 289		em28xx_isocdbg("dev is null\n");
 290		return;
 291	}
 292
 293	if (dma_q == NULL) {
 294		em28xx_isocdbg("dma_q is null\n");
 295		return;
 296	}
 297	if (buf == NULL) {
 298		return;
 299	}
 300	if (p == NULL) {
 301		em28xx_isocdbg("p is null\n");
 302		return;
 303	}
 304	if (outp == NULL) {
 305		em28xx_isocdbg("outp is null\n");
 306		return;
 307	}
 308
 309	if (dma_q->pos + len > buf->vb.size)
 310		len = buf->vb.size - dma_q->pos;
 311
 312	if ((p[0] == 0x33 && p[1] == 0x95) ||
 313	    (p[0] == 0x88 && p[1] == 0x88)) {
 314		/* Header field, advance past it */
 315		p += 4;
 316	} else {
 317		len += 4;
 318	}
 319
 320	startread = p;
 321
 322	startwrite = outp + dma_q->pos;
 323	offset = dma_q->pos;
 324
 325	/* Make sure the bottom field populates the second half of the frame */
 326	if (buf->top_field == 0) {
 327		startwrite += bytesperline * dev->vbi_height;
 328		offset += bytesperline * dev->vbi_height;
 329	}
 330
 331	memcpy(startwrite, startread, len);
 332	dma_q->pos += len;
 333}
 334
 335static inline void print_err_status(struct em28xx *dev,
 336				     int packet, int status)
 337{
 338	char *errmsg = "Unknown";
 339
 340	switch (status) {
 341	case -ENOENT:
 342		errmsg = "unlinked synchronuously";
 343		break;
 344	case -ECONNRESET:
 345		errmsg = "unlinked asynchronuously";
 346		break;
 347	case -ENOSR:
 348		errmsg = "Buffer error (overrun)";
 349		break;
 350	case -EPIPE:
 351		errmsg = "Stalled (device not responding)";
 352		break;
 353	case -EOVERFLOW:
 354		errmsg = "Babble (bad cable?)";
 355		break;
 356	case -EPROTO:
 357		errmsg = "Bit-stuff error (bad cable?)";
 358		break;
 359	case -EILSEQ:
 360		errmsg = "CRC/Timeout (could be anything)";
 361		break;
 362	case -ETIME:
 363		errmsg = "Device does not respond";
 364		break;
 365	}
 366	if (packet < 0) {
 367		em28xx_isocdbg("URB status %d [%s].\n",	status, errmsg);
 368	} else {
 369		em28xx_isocdbg("URB packet %d, status %d [%s].\n",
 370			       packet, status, errmsg);
 371	}
 372}
 373
 374/*
 375 * video-buf generic routine to get the next available buffer
 376 */
 377static inline void get_next_buf(struct em28xx_dmaqueue *dma_q,
 378					  struct em28xx_buffer **buf)
 379{
 380	struct em28xx *dev = container_of(dma_q, struct em28xx, vidq);
 381	char *outp;
 382
 383	if (list_empty(&dma_q->active)) {
 384		em28xx_isocdbg("No active queue to serve\n");
 385		dev->isoc_ctl.vid_buf = NULL;
 386		*buf = NULL;
 387		return;
 388	}
 389
 390	/* Get the next buffer */
 391	*buf = list_entry(dma_q->active.next, struct em28xx_buffer, vb.queue);
 392
 393	/* Cleans up buffer - Usefull for testing for frame/URB loss */
 394	outp = videobuf_to_vmalloc(&(*buf)->vb);
 395	memset(outp, 0, (*buf)->vb.size);
 396
 397	dev->isoc_ctl.vid_buf = *buf;
 398
 399	return;
 400}
 401
 402/*
 403 * video-buf generic routine to get the next available VBI buffer
 404 */
 405static inline void vbi_get_next_buf(struct em28xx_dmaqueue *dma_q,
 406				    struct em28xx_buffer **buf)
 407{
 408	struct em28xx *dev = container_of(dma_q, struct em28xx, vbiq);
 409	char *outp;
 410
 411	if (list_empty(&dma_q->active)) {
 412		em28xx_isocdbg("No active queue to serve\n");
 413		dev->isoc_ctl.vbi_buf = NULL;
 414		*buf = NULL;
 415		return;
 416	}
 417
 418	/* Get the next buffer */
 419	*buf = list_entry(dma_q->active.next, struct em28xx_buffer, vb.queue);
 420	/* Cleans up buffer - Usefull for testing for frame/URB loss */
 421	outp = videobuf_to_vmalloc(&(*buf)->vb);
 422	memset(outp, 0x00, (*buf)->vb.size);
 423
 424	dev->isoc_ctl.vbi_buf = *buf;
 425
 426	return;
 427}
 428
 429/*
 430 * Controls the isoc copy of each urb packet
 431 */
 432static inline int em28xx_isoc_copy(struct em28xx *dev, struct urb *urb)
 433{
 434	struct em28xx_buffer    *buf;
 435	struct em28xx_dmaqueue  *dma_q = &dev->vidq;
 436	unsigned char *outp = NULL;
 437	int i, len = 0, rc = 1;
 438	unsigned char *p;
 439
 440	if (!dev)
 441		return 0;
 442
 443	if ((dev->state & DEV_DISCONNECTED) || (dev->state & DEV_MISCONFIGURED))
 444		return 0;
 445
 446	if (urb->status < 0) {
 447		print_err_status(dev, -1, urb->status);
 448		if (urb->status == -ENOENT)
 449			return 0;
 450	}
 451
 452	buf = dev->isoc_ctl.vid_buf;
 453	if (buf != NULL)
 454		outp = videobuf_to_vmalloc(&buf->vb);
 455
 456	for (i = 0; i < urb->number_of_packets; i++) {
 457		int status = urb->iso_frame_desc[i].status;
 458
 459		if (status < 0) {
 460			print_err_status(dev, i, status);
 461			if (urb->iso_frame_desc[i].status != -EPROTO)
 462				continue;
 463		}
 464
 465		len = urb->iso_frame_desc[i].actual_length - 4;
 466
 467		if (urb->iso_frame_desc[i].actual_length <= 0) {
 468			/* em28xx_isocdbg("packet %d is empty",i); - spammy */
 469			continue;
 470		}
 471		if (urb->iso_frame_desc[i].actual_length >
 472						dev->max_pkt_size) {
 473			em28xx_isocdbg("packet bigger than packet size");
 474			continue;
 475		}
 476
 477		p = urb->transfer_buffer + urb->iso_frame_desc[i].offset;
 478
 479		/* FIXME: incomplete buffer checks where removed to make
 480		   logic simpler. Impacts of those changes should be evaluated
 481		 */
 482		if (p[0] == 0x33 && p[1] == 0x95 && p[2] == 0x00) {
 483			em28xx_isocdbg("VBI HEADER!!!\n");
 484			/* FIXME: Should add vbi copy */
 485			continue;
 486		}
 487		if (p[0] == 0x22 && p[1] == 0x5a) {
 488			em28xx_isocdbg("Video frame %d, length=%i, %s\n", p[2],
 489				       len, (p[2] & 1) ? "odd" : "even");
 490
 491			if (dev->progressive || !(p[2] & 1)) {
 492				if (buf != NULL)
 493					buffer_filled(dev, dma_q, buf);
 494				get_next_buf(dma_q, &buf);
 495				if (buf == NULL)
 496					outp = NULL;
 497				else
 498					outp = videobuf_to_vmalloc(&buf->vb);
 499			}
 500
 501			if (buf != NULL) {
 502				if (p[2] & 1)
 503					buf->top_field = 0;
 504				else
 505					buf->top_field = 1;
 506			}
 507
 508			dma_q->pos = 0;
 509		}
 510		if (buf != NULL)
 511			em28xx_copy_video(dev, dma_q, buf, p, outp, len);
 512	}
 513	return rc;
 514}
 515
 516/* Version of isoc handler that takes into account a mixture of video and
 517   VBI data */
 518static inline int em28xx_isoc_copy_vbi(struct em28xx *dev, struct urb *urb)
 519{
 520	struct em28xx_buffer    *buf, *vbi_buf;
 521	struct em28xx_dmaqueue  *dma_q = &dev->vidq;
 522	struct em28xx_dmaqueue  *vbi_dma_q = &dev->vbiq;
 523	unsigned char *outp = NULL;
 524	unsigned char *vbioutp = NULL;
 525	int i, len = 0, rc = 1;
 526	unsigned char *p;
 527	int vbi_size;
 528
 529	if (!dev)
 530		return 0;
 531
 532	if ((dev->state & DEV_DISCONNECTED) || (dev->state & DEV_MISCONFIGURED))
 533		return 0;
 534
 535	if (urb->status < 0) {
 536		print_err_status(dev, -1, urb->status);
 537		if (urb->status == -ENOENT)
 538			return 0;
 539	}
 540
 541	buf = dev->isoc_ctl.vid_buf;
 542	if (buf != NULL)
 543		outp = videobuf_to_vmalloc(&buf->vb);
 544
 545	vbi_buf = dev->isoc_ctl.vbi_buf;
 546	if (vbi_buf != NULL)
 547		vbioutp = videobuf_to_vmalloc(&vbi_buf->vb);
 548
 549	for (i = 0; i < urb->number_of_packets; i++) {
 550		int status = urb->iso_frame_desc[i].status;
 551
 552		if (status < 0) {
 553			print_err_status(dev, i, status);
 554			if (urb->iso_frame_desc[i].status != -EPROTO)
 555				continue;
 556		}
 557
 558		len = urb->iso_frame_desc[i].actual_length - 4;
 559
 560		if (urb->iso_frame_desc[i].actual_length <= 0) {
 561			/* em28xx_isocdbg("packet %d is empty",i); - spammy */
 562			continue;
 563		}
 564		if (urb->iso_frame_desc[i].actual_length >
 565						dev->max_pkt_size) {
 566			em28xx_isocdbg("packet bigger than packet size");
 567			continue;
 568		}
 569
 570		p = urb->transfer_buffer + urb->iso_frame_desc[i].offset;
 571
 572		/* capture type 0 = vbi start
 573		   capture type 1 = video start
 574		   capture type 2 = video in progress */
 575		if (p[0] == 0x33 && p[1] == 0x95) {
 576			dev->capture_type = 0;
 577			dev->vbi_read = 0;
 578			em28xx_isocdbg("VBI START HEADER!!!\n");
 579			dev->cur_field = p[2];
 580		}
 581
 582		vbi_size = dev->vbi_width * dev->vbi_height;
 583
 584		if (dev->capture_type == 0) {
 585			if (dev->vbi_read >= vbi_size) {
 586				/* We've already read all the VBI data, so
 587				   treat the rest as video */
 588				em28xx_isocdbg("dev->vbi_read > vbi_size\n");
 589			} else if ((dev->vbi_read + len) < vbi_size) {
 590				/* This entire frame is VBI data */
 591				if (dev->vbi_read == 0 &&
 592				    (!(dev->cur_field & 1))) {
 593					/* Brand new frame */
 594					if (vbi_buf != NULL)
 595						vbi_buffer_filled(dev,
 596								  vbi_dma_q,
 597								  vbi_buf);
 598					vbi_get_next_buf(vbi_dma_q, &vbi_buf);
 599					if (vbi_buf == NULL)
 600						vbioutp = NULL;
 601					else
 602						vbioutp = videobuf_to_vmalloc(
 603							&vbi_buf->vb);
 604				}
 605
 606				if (dev->vbi_read == 0) {
 607					vbi_dma_q->pos = 0;
 608					if (vbi_buf != NULL) {
 609						if (dev->cur_field & 1)
 610							vbi_buf->top_field = 0;
 611						else
 612							vbi_buf->top_field = 1;
 613					}
 614				}
 615
 616				dev->vbi_read += len;
 617				em28xx_copy_vbi(dev, vbi_dma_q, vbi_buf, p,
 618						vbioutp, len);
 619			} else {
 620				/* Some of this frame is VBI data and some is
 621				   video data */
 622				int vbi_data_len = vbi_size - dev->vbi_read;
 623				dev->vbi_read += vbi_data_len;
 624				em28xx_copy_vbi(dev, vbi_dma_q, vbi_buf, p,
 625						vbioutp, vbi_data_len);
 626				dev->capture_type = 1;
 627				p += vbi_data_len;
 628				len -= vbi_data_len;
 629			}
 630		}
 631
 632		if (dev->capture_type == 1) {
 633			dev->capture_type = 2;
 634			em28xx_isocdbg("Video frame %d, length=%i, %s\n", p[2],
 635				       len, (p[2] & 1) ? "odd" : "even");
 636
 637			if (dev->progressive || !(dev->cur_field & 1)) {
 638				if (buf != NULL)
 639					buffer_filled(dev, dma_q, buf);
 640				get_next_buf(dma_q, &buf);
 641				if (buf == NULL)
 642					outp = NULL;
 643				else
 644					outp = videobuf_to_vmalloc(&buf->vb);
 645			}
 646			if (buf != NULL) {
 647				if (dev->cur_field & 1)
 648					buf->top_field = 0;
 649				else
 650					buf->top_field = 1;
 651			}
 652
 653			dma_q->pos = 0;
 654		}
 655		if (buf != NULL && dev->capture_type == 2)
 656			em28xx_copy_video(dev, dma_q, buf, p, outp, len);
 657	}
 658	return rc;
 659}
 660
 661
 662/* ------------------------------------------------------------------
 663	Videobuf operations
 664   ------------------------------------------------------------------*/
 665
 666static int
 667buffer_setup(struct videobuf_queue *vq, unsigned int *count, unsigned int *size)
 668{
 669	struct em28xx_fh *fh = vq->priv_data;
 670	struct em28xx        *dev = fh->dev;
 671	struct v4l2_frequency f;
 672
 673	*size = (fh->dev->width * fh->dev->height * dev->format->depth + 7)
 674		>> 3;
 675
 676	if (0 == *count)
 677		*count = EM28XX_DEF_BUF;
 678
 679	if (*count < EM28XX_MIN_BUF)
 680		*count = EM28XX_MIN_BUF;
 681
 682	/* Ask tuner to go to analog or radio mode */
 683	memset(&f, 0, sizeof(f));
 684	f.frequency = dev->ctl_freq;
 685	f.type = fh->radio ? V4L2_TUNER_RADIO : V4L2_TUNER_ANALOG_TV;
 686
 687	v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_frequency, &f);
 688
 689	return 0;
 690}
 691
 692/* This is called *without* dev->slock held; please keep it that way */
 693static void free_buffer(struct videobuf_queue *vq, struct em28xx_buffer *buf)
 694{
 695	struct em28xx_fh     *fh  = vq->priv_data;
 696	struct em28xx        *dev = fh->dev;
 697	unsigned long flags = 0;
 698	if (in_interrupt())
 699		BUG();
 700
 701	/* We used to wait for the buffer to finish here, but this didn't work
 702	   because, as we were keeping the state as VIDEOBUF_QUEUED,
 703	   videobuf_queue_cancel marked it as finished for us.
 704	   (Also, it could wedge forever if the hardware was misconfigured.)
 705
 706	   This should be safe; by the time we get here, the buffer isn't
 707	   queued anymore. If we ever start marking the buffers as
 708	   VIDEOBUF_ACTIVE, it won't be, though.
 709	*/
 710	spin_lock_irqsave(&dev->slock, flags);
 711	if (dev->isoc_ctl.vid_buf == buf)
 712		dev->isoc_ctl.vid_buf = NULL;
 713	spin_unlock_irqrestore(&dev->slock, flags);
 714
 715	videobuf_vmalloc_free(&buf->vb);
 716	buf->vb.state = VIDEOBUF_NEEDS_INIT;
 717}
 718
 719static int
 720buffer_prepare(struct videobuf_queue *vq, struct videobuf_buffer *vb,
 721						enum v4l2_field field)
 722{
 723	struct em28xx_fh     *fh  = vq->priv_data;
 724	struct em28xx_buffer *buf = container_of(vb, struct em28xx_buffer, vb);
 725	struct em28xx        *dev = fh->dev;
 726	int                  rc = 0, urb_init = 0;
 727
 728	buf->vb.size = (fh->dev->width * fh->dev->height * dev->format->depth
 729			+ 7) >> 3;
 730
 731	if (0 != buf->vb.baddr  &&  buf->vb.bsize < buf->vb.size)
 732		return -EINVAL;
 733
 734	buf->vb.width  = dev->width;
 735	buf->vb.height = dev->height;
 736	buf->vb.field  = field;
 737
 738	if (VIDEOBUF_NEEDS_INIT == buf->vb.state) {
 739		rc = videobuf_iolock(vq, &buf->vb, NULL);
 740		if (rc < 0)
 741			goto fail;
 742	}
 743
 744	if (!dev->isoc_ctl.num_bufs)
 745		urb_init = 1;
 746
 747	if (urb_init) {
 748		if (em28xx_vbi_supported(dev) == 1)
 749			rc = em28xx_init_isoc(dev, EM28XX_NUM_PACKETS,
 750					      EM28XX_NUM_BUFS,
 751					      dev->max_pkt_size,
 752					      em28xx_isoc_copy_vbi);
 753		else
 754			rc = em28xx_init_isoc(dev, EM28XX_NUM_PACKETS,
 755					      EM28XX_NUM_BUFS,
 756					      dev->max_pkt_size,
 757					      em28xx_isoc_copy);
 758		if (rc < 0)
 759			goto fail;
 760	}
 761
 762	buf->vb.state = VIDEOBUF_PREPARED;
 763	return 0;
 764
 765fail:
 766	free_buffer(vq, buf);
 767	return rc;
 768}
 769
 770static void
 771buffer_queue(struct videobuf_queue *vq, struct videobuf_buffer *vb)
 772{
 773	struct em28xx_buffer    *buf     = container_of(vb,
 774							struct em28xx_buffer,
 775							vb);
 776	struct em28xx_fh        *fh      = vq->priv_data;
 777	struct em28xx           *dev     = fh->dev;
 778	struct em28xx_dmaqueue  *vidq    = &dev->vidq;
 779
 780	buf->vb.state = VIDEOBUF_QUEUED;
 781	list_add_tail(&buf->vb.queue, &vidq->active);
 782
 783}
 784
 785static void buffer_release(struct videobuf_queue *vq,
 786				struct videobuf_buffer *vb)
 787{
 788	struct em28xx_buffer   *buf  = container_of(vb,
 789						    struct em28xx_buffer,
 790						    vb);
 791	struct em28xx_fh       *fh   = vq->priv_data;
 792	struct em28xx          *dev  = (struct em28xx *)fh->dev;
 793
 794	em28xx_isocdbg("em28xx: called buffer_release\n");
 795
 796	free_buffer(vq, buf);
 797}
 798
 799static struct videobuf_queue_ops em28xx_video_qops = {
 800	.buf_setup      = buffer_setup,
 801	.buf_prepare    = buffer_prepare,
 802	.buf_queue      = buffer_queue,
 803	.buf_release    = buffer_release,
 804};
 805
 806/*********************  v4l2 interface  **************************************/
 807
 808static void video_mux(struct em28xx *dev, int index)
 809{
 810	dev->ctl_input = index;
 811	dev->ctl_ainput = INPUT(index)->amux;
 812	dev->ctl_aoutput = INPUT(index)->aout;
 813
 814	if (!dev->ctl_aoutput)
 815		dev->ctl_aoutput = EM28XX_AOUT_MASTER;
 816
 817	v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_routing,
 818			INPUT(index)->vmux, 0, 0);
 819
 820	if (dev->board.has_msp34xx) {
 821		if (dev->i2s_speed) {
 822			v4l2_device_call_all(&dev->v4l2_dev, 0, audio,
 823				s_i2s_clock_freq, dev->i2s_speed);
 824		}
 825		/* Note: this is msp3400 specific */
 826		v4l2_device_call_all(&dev->v4l2_dev, 0, audio, s_routing,
 827			 dev->ctl_ainput, MSP_OUTPUT(MSP_SC_IN_DSP_SCART1), 0);
 828	}
 829
 830	if (dev->board.adecoder != EM28XX_NOADECODER) {
 831		v4l2_device_call_all(&dev->v4l2_dev, 0, audio, s_routing,
 832			dev->ctl_ainput, dev->ctl_aoutput, 0);
 833	}
 834
 835	em28xx_audio_analog_set(dev);
 836}
 837
 838/* Usage lock check functions */
 839static int res_get(struct em28xx_fh *fh, unsigned int bit)
 840{
 841	struct em28xx    *dev = fh->dev;
 842
 843	if (fh->resources & bit)
 844		/* have it already allocated */
 845		return 1;
 846
 847	/* is it free? */
 848	mutex_lock(&dev->lock);
 849	if (dev->resources & bit) {
 850		/* no, someone else uses it */
 851		mutex_unlock(&dev->lock);
 852		return 0;
 853	}
 854	/* it's free, grab it */
 855	fh->resources  |= bit;
 856	dev->resources |= bit;
 857	em28xx_videodbg("res: get %d\n", bit);
 858	mutex_unlock(&dev->lock);
 859	return 1;
 860}
 861
 862static int res_check(struct em28xx_fh *fh, unsigned int bit)
 863{
 864	return fh->resources & bit;
 865}
 866
 867static int res_locked(struct em28xx *dev, unsigned int bit)
 868{
 869	return dev->resources & bit;
 870}
 871
 872static void res_free(struct em28xx_fh *fh, unsigned int bits)
 873{
 874	struct em28xx    *dev = fh->dev;
 875
 876	BUG_ON((fh->resources & bits) != bits);
 877
 878	mutex_lock(&dev->lock);
 879	fh->resources  &= ~bits;
 880	dev->resources &= ~bits;
 881	em28xx_videodbg("res: put %d\n", bits);
 882	mutex_unlock(&dev->lock);
 883}
 884
 885static int get_ressource(struct em28xx_fh *fh)
 886{
 887	switch (fh->type) {
 888	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
 889		return EM28XX_RESOURCE_VIDEO;
 890	case V4L2_BUF_TYPE_VBI_CAPTURE:
 891		return EM28XX_RESOURCE_VBI;
 892	default:
 893		BUG();
 894		return 0;
 895	}
 896}
 897
 898/*
 899 * ac97_queryctrl()
 900 * return the ac97 supported controls
 901 */
 902static int ac97_queryctrl(struct v4l2_queryctrl *qc)
 903{
 904	int i;
 905
 906	for (i = 0; i < ARRAY_SIZE(ac97_qctrl); i++) {
 907		if (qc->id && qc->id == ac97_qctrl[i].id) {
 908			memcpy(qc, &(ac97_qctrl[i]), sizeof(*qc));
 909			return 0;
 910		}
 911	}
 912
 913	/* Control is not ac97 related */
 914	return 1;
 915}
 916
 917/*
 918 * ac97_get_ctrl()
 919 * return the current values for ac97 mute and volume
 920 */
 921static int ac97_get_ctrl(struct em28xx *dev, struct v4l2_control *ctrl)
 922{
 923	switch (ctrl->id) {
 924	case V4L2_CID_AUDIO_MUTE:
 925		ctrl->value = dev->mute;
 926		return 0;
 927	case V4L2_CID_AUDIO_VOLUME:
 928		ctrl->value = dev->volume;
 929		return 0;
 930	default:
 931		/* Control is not ac97 related */
 932		return 1;
 933	}
 934}
 935
 936/*
 937 * ac97_set_ctrl()
 938 * set values for ac97 mute and volume
 939 */
 940static int ac97_set_ctrl(struct em28xx *dev, const struct v4l2_control *ctrl)
 941{
 942	int i;
 943
 944	for (i = 0; i < ARRAY_SIZE(ac97_qctrl); i++)
 945		if (ctrl->id == ac97_qctrl[i].id)
 946			goto handle;
 947
 948	/* Announce that hasn't handle it */
 949	return 1;
 950
 951handle:
 952	if (ctrl->value < ac97_qctrl[i].minimum ||
 953	    ctrl->value > ac97_qctrl[i].maximum)
 954		return -ERANGE;
 955
 956	switch (ctrl->id) {
 957	case V4L2_CID_AUDIO_MUTE:
 958		dev->mute = ctrl->value;
 959		break;
 960	case V4L2_CID_AUDIO_VOLUME:
 961		dev->volume = ctrl->value;
 962		break;
 963	}
 964
 965	return em28xx_audio_analog_set(dev);
 966}
 967
 968static int check_dev(struct em28xx *dev)
 969{
 970	if (dev->state & DEV_DISCONNECTED) {
 971		em28xx_errdev("v4l2 ioctl: device not present\n");
 972		return -ENODEV;
 973	}
 974
 975	if (dev->state & DEV_MISCONFIGURED) {
 976		em28xx_errdev("v4l2 ioctl: device is misconfigured; "
 977			      "close and open it again\n");
 978		return -EIO;
 979	}
 980	return 0;
 981}
 982
 983static void get_scale(struct em28xx *dev,
 984			unsigned int width, unsigned int height,
 985			unsigned int *hscale, unsigned int *vscale)
 986{
 987	unsigned int          maxw = norm_maxw(dev);
 988	unsigned int          maxh = norm_maxh(dev);
 989
 990	*hscale = (((unsigned long)maxw) << 12) / width - 4096L;
 991	if (*hscale >= 0x4000)
 992		*hscale = 0x3fff;
 993
 994	*vscale = (((unsigned long)maxh) << 12) / height - 4096L;
 995	if (*vscale >= 0x4000)
 996		*vscale = 0x3fff;
 997}
 998
 999/* ------------------------------------------------------------------
1000	IOCTL vidioc handling
1001   ------------------------------------------------------------------*/
1002
1003static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
1004					struct v4l2_format *f)
1005{
1006	struct em28xx_fh      *fh  = priv;
1007	struct em28xx         *dev = fh->dev;
1008
1009	mutex_lock(&dev->lock);
1010
1011	f->fmt.pix.width = dev->width;
1012	f->fmt.pix.height = dev->height;
1013	f->fmt.pix.pixelformat = dev->format->fourcc;
1014	f->fmt.pix.bytesperline = (dev->width * dev->format->depth + 7) >> 3;
1015	f->fmt.pix.sizeimage = f->fmt.pix.bytesperline  * dev->height;
1016	f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
1017
1018	/* FIXME: TOP? NONE? BOTTOM? ALTENATE? */
1019	if (dev->progressive)
1020		f->fmt.pix.field = V4L2_FIELD_NONE;
1021	else
1022		f->fmt.pix.field = dev->interlaced ?
1023			   V4L2_FIELD_INTERLACED : V4L2_FIELD_TOP;
1024
1025	mutex_unlock(&dev->lock);
1026	return 0;
1027}
1028
1029static struct em28xx_fmt *format_by_fourcc(unsigned int fourcc)
1030{
1031	unsigned int i;
1032
1033	for (i = 0; i < ARRAY_SIZE(format); i++)
1034		if (format[i].fourcc == fourcc)
1035			return &format[i];
1036
1037	return NULL;
1038}
1039
1040static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
1041			struct v4l2_format *f)
1042{
1043	struct em28xx_fh      *fh    = priv;
1044	struct em28xx         *dev   = fh->dev;
1045	unsigned int          width  = f->fmt.pix.width;
1046	unsigned int          height = f->fmt.pix.height;
1047	unsigned int          maxw   = norm_maxw(dev);
1048	unsigned int          maxh   = norm_maxh(dev);
1049	unsigned int          hscale, vscale;
1050	struct em28xx_fmt     *fmt;
1051
1052	fmt = format_by_fourcc(f->fmt.pix.pixelformat);
1053	if (!fmt) {
1054		em28xx_videodbg("Fourcc format (%08x) invalid.\n",
1055				f->fmt.pix.pixelformat);
1056		return -EINVAL;
1057	}
1058
1059	if (dev->board.is_em2800) {
1060		/* the em2800 can only scale down to 50% */
1061		height = height > (3 * maxh / 4) ? maxh : maxh / 2;
1062		width = width > (3 * maxw / 4) ? maxw : maxw / 2;
1063	} else {
1064		/* width must even because of the YUYV format
1065		   height must be even because of interlacing */
1066		v4l_bound_align_image(&width, 48, maxw, 1, &height, 32, maxh,
1067				      1, 0);
1068	}
1069
1070	get_scale(dev, width, height, &hscale, &vscale);
1071
1072	width = (((unsigned long)maxw) << 12) / (hscale + 4096L);
1073	height = (((unsigned long)maxh) << 12) / (vscale + 4096L);
1074
1075	f->fmt.pix.width = width;
1076	f->fmt.pix.height = height;
1077	f->fmt.pix.pixelformat = fmt->fourcc;
1078	f->fmt.pix.bytesperline = (dev->width * fmt->depth + 7) >> 3;
1079	f->fmt.pix.sizeimage = f->fmt.pix.bytesperline * height;
1080	f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
1081	if (dev->progressive)
1082		f->fmt.pix.field = V4L2_FIELD_NONE;
1083	else
1084		f->fmt.pix.field = dev->interlaced ?
1085			   V4L2_FIELD_INTERLACED : V4L2_FIELD_TOP;
1086
1087	return 0;
1088}
1089
1090static int em28xx_set_video_format(struct em28xx *dev, unsigned int fourcc,
1091				   unsigned width, unsigned height)
1092{
1093	struct em28xx_fmt     *fmt;
1094
1095	fmt = format_by_fourcc(fourcc);
1096	if (!fmt)
1097		return -EINVAL;
1098
1099	dev->format = fmt;
1100	dev->width  = width;
1101	dev->height = height;
1102
1103	/* set new image size */
1104	get_scale(dev, dev->width, dev->height, &dev->hscale, &dev->vscale);
1105
1106	em28xx_set_alternate(dev);
1107	em28xx_resolution_set(dev);
1108
1109	return 0;
1110}
1111
1112static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
1113			struct v4l2_format *f)
1114{
1115	struct em28xx_fh      *fh  = priv;
1116	struct em28xx         *dev = fh->dev;
1117	int                   rc;
1118
1119	rc = check_dev(dev);
1120	if (rc < 0)
1121		return rc;
1122
1123	mutex_lock(&dev->lock);
1124
1125	vidioc_try_fmt_vid_cap(file, priv, f);
1126
1127	if (videobuf_queue_is_busy(&fh->vb_vidq)) {
1128		em28xx_errdev("%s queue busy\n", __func__);
1129		rc = -EBUSY;
1130		goto out;
1131	}
1132
1133	rc = em28xx_set_video_format(dev, f->fmt.pix.pixelformat,
1134				f->fmt.pix.width, f->fmt.pix.height);
1135
1136out:
1137	mutex_unlock(&dev->lock);
1138	return rc;
1139}
1140
1141static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *norm)
1142{
1143	struct em28xx_fh   *fh  = priv;
1144	struct em28xx      *dev = fh->dev;
1145	int                rc;
1146
1147	rc = check_dev(dev);
1148	if (rc < 0)
1149		return rc;
1150
1151	*norm = dev->norm;
1152
1153	return 0;
1154}
1155
1156static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id *norm)
1157{
1158	struct em28xx_fh   *fh  = priv;
1159	struct em28xx      *dev = fh->dev;
1160	struct v4l2_format f;
1161	int                rc;
1162
1163	rc = check_dev(dev);
1164	if (rc < 0)
1165		return rc;
1166
1167	mutex_lock(&dev->lock);
1168	dev->norm = *norm;
1169
1170	/* Adjusts width/height, if needed */
1171	f.fmt.pix.width = dev->width;
1172	f.fmt.pix.height = dev->height;
1173	vidioc_try_fmt_vid_cap(file, priv, &f);
1174
1175	/* set new image size */
1176	dev->width = f.fmt.pix.width;
1177	dev->height = f.fmt.pix.height;
1178	get_scale(dev, dev->width, dev->height, &dev->hscale, &dev->vscale);
1179
1180	em28xx_resolution_set(dev);
1181	v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_std, dev->norm);
1182
1183	mutex_unlock(&dev->lock);
1184	return 0;
1185}
1186
1187static int vidioc_g_parm(struct file *file, void *priv,
1188			 struct v4l2_streamparm *p)
1189{
1190	struct em28xx_fh   *fh  = priv;
1191	struct em28xx      *dev = fh->dev;
1192	int rc = 0;
1193
1194	if (p->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
1195		return -EINVAL;
1196
1197	if (dev->board.is_webcam)
1198		rc = v4l2_device_call_until_err(&dev->v4l2_dev, 0,
1199						video, g_parm, p);
1200	else
1201		v4l2_video_std_frame_period(dev->norm,
1202						 &p->parm.capture.timeperframe);
1203
1204	return rc;
1205}
1206
1207static int vidioc_s_parm(struct file *file, void *priv,
1208			 struct v4l2_streamparm *p)
1209{
1210	struct em28xx_fh   *fh  = priv;
1211	struct em28xx      *dev = fh->dev;
1212
1213	if (!dev->board.is_webcam)
1214		return -EINVAL;
1215
1216	if (p->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
1217		return -EINVAL;
1218
1219	return v4l2_device_call_until_err(&dev->v4l2_dev, 0, video, s_parm, p);
1220}
1221
1222static const char *iname[] = {
1223	[EM28XX_VMUX_COMPOSITE1] = "Composite1",
1224	[EM28XX_VMUX_COMPOSITE2] = "Composite2",
1225	[EM28XX_VMUX_COMPOSITE3] = "Composite3",
1226	[EM28XX_VMUX_COMPOSITE4] = "Composite4",
1227	[EM28XX_VMUX_SVIDEO]     = "S-Video",
1228	[EM28XX_VMUX_TELEVISION] = "Television",
1229	[EM28XX_VMUX_CABLE]      = "Cable TV",
1230	[EM28XX_VMUX_DVB]        = "DVB",
1231	[EM28XX_VMUX_DEBUG]      = "for debug only",
1232};
1233
1234static int vidioc_enum_input(struct file *file, void *priv,
1235				struct v4l2_input *i)
1236{
1237	struct em28xx_fh   *fh  = priv;
1238	struct em28xx      *dev = fh->dev;
1239	unsigned int       n;
1240
1241	n = i->index;
1242	if (n >= MAX_EM28XX_INPUT)
1243		return -EINVAL;
1244	if (0 == INPUT(n)->type)
1245		return -EINVAL;
1246
1247	i->index = n;
1248	i->type = V4L2_INPUT_TYPE_CAMERA;
1249
1250	strcpy(i->name, iname[INPUT(n)->type]);
1251
1252	if ((EM28XX_VMUX_TELEVISION == INPUT(n)->type) ||
1253		(EM28XX_VMUX_CABLE == INPUT(n)->type))
1254		i->type = V4L2_INPUT_TYPE_TUNER;
1255
1256	i->std = dev->vdev->tvnorms;
1257
1258	return 0;
1259}
1260
1261static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
1262{
1263	struct em28xx_fh   *fh  = priv;
1264	struct em28xx      *dev = fh->dev;
1265
1266	*i = dev->ctl_input;
1267
1268	return 0;
1269}
1270
1271static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
1272{
1273	struct em28xx_fh   *fh  = priv;
1274	struct em28xx      *dev = fh->dev;
1275	int                rc;
1276
1277	rc = check_dev(dev);
1278	if (rc < 0)
1279		return rc;
1280
1281	if (i >= MAX_EM28XX_INPUT)
1282		return -EINVAL;
1283	if (0 == INPUT(i)->type)
1284		return -EINVAL;
1285
1286	dev->ctl_input = i;
1287
1288	mutex_lock(&dev->lock);
1289	video_mux(dev, dev->ctl_input);
1290	mutex_unlock(&dev->lock);
1291	return 0;
1292}
1293
1294static int vidioc_g_audio(struct file *file, void *priv, struct v4l2_audio *a)
1295{
1296	struct em28xx_fh   *fh    = priv;
1297	struct em28xx      *dev   = fh->dev;
1298
1299	if (!dev->audio_mode.has_audio)
1300		return -EINVAL;
1301
1302	switch (a->index) {
1303	case EM28XX_AMUX_VIDEO:
1304		strcpy(a->name, "Television");
1305		break;
1306	case EM28XX_AMUX_LINE_IN:
1307		strcpy(a->name, "Line In");
1308		break;
1309	case EM28XX_AMUX_VIDEO2:
1310		strcpy(a->name, "Television alt");
1311		break;
1312	case EM28XX_AMUX_PHONE:
1313		strcpy(a->name, "Phone");
1314		break;
1315	case EM28XX_AMUX_MIC:
1316		strcpy(a->name, "Mic");
1317		break;
1318	case EM28XX_AMUX_CD:
1319		strcpy(a->name, "CD");
1320		break;
1321	case EM28XX_AMUX_AUX:
1322		strcpy(a->name, "Aux");
1323		break;
1324	case EM28XX_AMUX_PCM_OUT:
1325		strcpy(a->name, "PCM");
1326		break;
1327	default:
1328		return -EINVAL;
1329	}
1330
1331	a->index = dev->ctl_ainput;
1332	a->capability = V4L2_AUDCAP_STEREO;
1333
1334	return 0;
1335}
1336
1337static int vidioc_s_audio(struct file *file, void *priv, struct v4l2_audio *a)
1338{
1339	struct em28xx_fh   *fh  = priv;
1340	struct em28xx      *dev = fh->dev;
1341
1342
1343	if (!dev->audio_mode.has_audio)
1344		return -EINVAL;
1345
1346	if (a->index >= MAX_EM28XX_INPUT)
1347		return -EINVAL;
1348	if (0 == INPUT(a->index)->type)
1349		return -EINVAL;
1350
1351	mutex_lock(&dev->lock);
1352
1353	dev->ctl_ainput = INPUT(a->index)->amux;
1354	dev->ctl_aoutput = INPUT(a->index)->aout;
1355
1356	if (!dev->ctl_aoutput)
1357		dev->ctl_aoutput = EM28XX_AOUT_MASTER;
1358
1359	mutex_unlock(&dev->lock);
1360	return 0;
1361}
1362
1363static int vidioc_queryctrl(struct file *file, void *priv,
1364				struct v4l2_queryctrl *qc)
1365{
1366	struct em28xx_fh      *fh  = priv;
1367	struct em28xx         *dev = fh->dev;
1368	int                   id  = qc->id;
1369	int                   rc;
1370
1371	rc = check_dev(dev);
1372	if (rc < 0)
1373		return rc;
1374
1375	memset(qc, 0, sizeof(*qc));
1376
1377	qc->id = id;
1378
1379	/* enumberate AC97 controls */
1380	if (dev->audio_mode.ac97 != EM28XX_NO_AC97) {
1381		rc = ac97_queryctrl(qc);
1382		if (!rc)
1383			return 0;
1384	}
1385
1386	/* enumberate V4L2 device controls */
1387	mutex_lock(&dev->lock);
1388	v4l2_device_call_all(&dev->v4l2_dev, 0, core, queryctrl, qc);
1389	mutex_unlock(&dev->lock);
1390
1391	if (qc->type)
1392		return 0;
1393	else
1394		return -EINVAL;
1395}
1396
1397static int vidioc_g_ctrl(struct file *file, void *priv,
1398				struct v4l2_control *ctrl)
1399{
1400	struct em28xx_fh      *fh  = priv;
1401	struct em28xx         *dev = fh->dev;
1402	int                   rc;
1403
1404	rc = check_dev(dev);
1405	if (rc < 0)
1406		return rc;
1407	rc = 0;
1408
1409	mutex_lock(&dev->lock);
1410
1411	/* Set an AC97 control */
1412	if (dev->audio_mode.ac97 != EM28XX_NO_AC97)
1413		rc = ac97_get_ctrl(dev, ctrl);
1414	else
1415		rc = 1;
1416
1417	/* It were not an AC97 control. Sends it to the v4l2 dev interface */
1418	if (rc == 1) {
1419		v4l2_device_call_all(&dev->v4l2_dev, 0, core, g_ctrl, ctrl);
1420		rc = 0;
1421	}
1422
1423	mutex_unlock(&dev->lock);
1424	return rc;
1425}
1426
1427static int vidioc_s_ctrl(struct file *file, void *priv,
1428				struct v4l2_control *ctrl)
1429{
1430	struct em28xx_fh      *fh  = priv;
1431	struct em28xx         *dev = fh->dev;
1432	int                   rc;
1433
1434	rc = check_dev(dev);
1435	if (rc < 0)
1436		return rc;
1437
1438	mutex_lock(&dev->lock);
1439
1440	/* Set an AC97 control */
1441	if (dev->audio_mode.ac97 != EM28XX_NO_AC97)
1442		rc = ac97_set_ctrl(dev, ctrl);
1443	else
1444		rc = 1;
1445
1446	/* It isn't an AC97 control. Sends it to the v4l2 dev interface */
1447	if (rc == 1) {
1448		v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_ctrl, ctrl);
1449
1450		/*
1451		 * In the case of non-AC97 volume controls, we still need
1452		 * to do some setups at em28xx, in order to mute/unmute
1453		 * and to adjust audio volume. However, the value ranges
1454		 * should be checked by the corresponding V4L subdriver.
1455		 */
1456		switch (ctrl->id) {
1457		case V4L2_CID_AUDIO_MUTE:
1458			dev->mute = ctrl->value;
1459			rc = em28xx_audio_analog_set(dev);
1460			break;
1461		case V4L2_CID_AUDIO_VOLUME:
1462			dev->volume = ctrl->value;
1463			rc = em28xx_audio_analog_set(dev);
1464		}
1465	}
1466
1467	mutex_unlock(&dev->lock);
1468	return rc;
1469}
1470
1471static int vidioc_g_tuner(struct file *file, void *priv,
1472				struct v4l2_tuner *t)
1473{
1474	struct em28xx_fh      *fh  = priv;
1475	struct em28xx         *dev = fh->dev;
1476	int                   rc;
1477
1478	rc = check_dev(dev);
1479	if (rc < 0)
1480		return rc;
1481
1482	if (0 != t->index)
1483		return -EINVAL;
1484
1485	strcpy(t->name, "Tuner");
1486
1487	mutex_lock(&dev->lock);
1488	v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, g_tuner, t);
1489	mutex_unlock(&dev->lock);
1490
1491	return 0;
1492}
1493
1494static int vidioc_s_tuner(struct file *file, void *priv,
1495				struct v4l2_tuner *t)
1496{
1497	struct em28xx_fh      *fh  = priv;
1498	struct em28xx         *dev = fh->dev;
1499	int                   rc;
1500
1501	rc = check_dev(dev);
1502	if (rc < 0)
1503		return rc;
1504
1505	if (0 != t->index)
1506		return -EINVAL;
1507
1508	mutex_lock(&dev->lock);
1509	v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_tuner, t);
1510	mutex_unlock(&dev->lock);
1511
1512	return 0;
1513}
1514
1515static int vidioc_g_frequency(struct file *file, void *priv,
1516				struct v4l2_frequency *f)
1517{
1518	struct em28xx_fh      *fh  = priv;
1519	struct em28xx         *dev = fh->dev;
1520
1521	mutex_lock(&dev->lock);
1522	f->type = fh->radio ? V4L2_TUNER_RADIO : V4L2_TUNER_ANALOG_TV;
1523	f->frequency = dev->ctl_freq;
1524	mutex_unlock(&dev->lock);
1525
1526	return 0;
1527}
1528
1529static int vidioc_s_frequency(struct file *file, void *priv,
1530				struct v4l2_frequency *f)
1531{
1532	struct em28xx_fh      *fh  = priv;
1533	struct em28xx         *dev = fh->dev;
1534	int                   rc;
1535
1536	rc = check_dev(dev);
1537	if (rc < 0)
1538		return rc;
1539
1540	if (0 != f->tuner)
1541		return -EINVAL;
1542
1543	if (unlikely(0 == fh->radio && f->type != V4L2_TUNER_ANALOG_TV))
1544		return -EINVAL;
1545	if (unlikely(1 == fh->radio && f->type != V4L2_TUNER_RADIO))
1546		return -EINVAL;
1547
1548	mutex_lock(&dev->lock);
1549
1550	dev->ctl_freq = f->frequency;
1551	v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_frequency, f);
1552
1553	mutex_unlock(&dev->lock);
1554
1555	return 0;
1556}
1557
1558#ifdef CONFIG_VIDEO_ADV_DEBUG
1559static int em28xx_reg_len(int reg)
1560{
1561	switch (reg) {
1562	case EM28XX_R40_AC97LSB:
1563	case EM28XX_R30_HSCALELOW:
1564	case EM28XX_R32_VSCALELOW:
1565		return 2;
1566	default:
1567		return 1;
1568	}
1569}
1570
1571static int vidioc_g_chip_ident(struct file *file, void *priv,
1572	       struct v4l2_dbg_chip_ident *chip)
1573{
1574	struct em28xx_fh      *fh  = priv;
1575	struct em28xx         *dev = fh->dev;
1576
1577	chip->ident = V4L2_IDENT_NONE;
1578	chip->revision = 0;
1579
1580	v4l2_device_call_all(&dev->v4l2_dev, 0, core, g_chip_ident, chip);
1581
1582	return 0;
1583}
1584
1585
1586static int vidioc_g_register(struct file *file, void *priv,
1587			     struct v4l2_dbg_register *reg)
1588{
1589	struct em28xx_fh      *fh  = priv;
1590	struct em28xx         *dev = fh->dev;
1591	int ret;
1592
1593	switch (reg->match.type) {
1594	case V4L2_CHIP_MATCH_AC97:
1595		mutex_lock(&dev->lock);
1596		ret = em28xx_read_ac97(dev, reg->reg);
1597		mutex_unlock(&dev->lock);
1598		if (ret < 0)
1599			return ret;
1600
1601		reg->val = ret;
1602		reg->size = 1;
1603		return 0;
1604	case V4L2_CHIP_MATCH_I2C_DRIVER:
1605		v4l2_device_call_all(&dev->v4l2_dev, 0, core, g_register, reg);
1606		return 0;
1607	case V4L2_CHIP_MATCH_I2C_ADDR:
1608		/* TODO: is this correct? */
1609		v4l2_device_call_all(&dev->v4l2_dev, 0, core, g_register, reg);
1610		return 0;
1611	default:
1612		if (!v4l2_chip_match_host(&reg->match))
1613			return -EINVAL;
1614	}
1615
1616	/* Match host */
1617	reg->size = em28xx_reg_len(reg->reg);
1618	if (reg->size == 1) {
1619		mutex_lock(&dev->lock);
1620		ret = em28xx_read_reg(dev, reg->reg);
1621		mutex_unlock(&dev->lock);
1622
1623		if (ret < 0)
1624			return ret;
1625
1626		reg->val = ret;
1627	} else {
1628		__le16 val = 0;
1629		mutex_lock(&dev->lock);
1630		ret = em28xx_read_reg_req_len(dev, USB_REQ_GET_STATUS,
1631						   reg->reg, (char *)&val, 2);
1632		mutex_unlock(&dev->lock);
1633		if (ret < 0)
1634			return ret;
1635
1636		reg->val = le16_to_cpu(val);
1637	}
1638
1639	return 0;
1640}
1641
1642static int vidioc_s_register(struct file *file, void *priv,
1643			     struct v4l2_dbg_register *reg)
1644{
1645	struct em28xx_fh      *fh  = priv;
1646	struct em28xx         *dev = fh->dev;
1647	__le16 buf;
1648	int    rc;
1649
1650	switch (reg->match.type) {
1651	case V4L2_CHIP_MATCH_AC97:
1652		mutex_lock(&dev->lock);
1653		rc = em28xx_write_ac97(dev, reg->reg, reg->val);
1654		mutex_unlock(&dev->lock);
1655
1656		return rc;
1657	case V4L2_CHIP_MATCH_I2C_DRIVER:
1658		v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_register, reg);
1659		return 0;
1660	case V4L2_CHIP_MATCH_I2C_ADDR:
1661		/* TODO: is this correct? */
1662		v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_register, reg);
1663		return 0;
1664	default:
1665		if (!v4l2_chip_match_host(&reg->match))
1666			return -EINVAL;
1667	}
1668
1669	/* Match host */
1670	buf = cpu_to_le16(reg->val);
1671
1672	mutex_lock(&dev->lock);
1673	rc = em28xx_write_regs(dev, reg->reg, (char *)&buf,
1674			       em28xx_reg_len(reg->reg));
1675	mutex_unlock(&dev->lock);
1676
1677	return rc;
1678}
1679#endif
1680
1681
1682static int vidioc_cropcap(struct file *file, void *priv,
1683					struct v4l2_cropcap *cc)
1684{
1685	struct em28xx_fh      *fh  = priv;
1686	struct em28xx         *dev = fh->dev;
1687
1688	if (cc->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
1689		return -EINVAL;
1690
1691	cc->bounds.left = 0;
1692	cc->bounds.top = 0;
1693	cc->bounds.width = dev->width;
1694	cc->bounds.height = dev->height;
1695	cc->defrect = cc->bounds;
1696	cc->pixelaspect.numerator = 54;	/* 4:3 FIXME: remove magic numbers */
1697	cc->pixelaspect.denominator = 59;
1698
1699	return 0;
1700}
1701
1702static int vidioc_streamon(struct file *file, void *priv,
1703					enum v4l2_buf_type type)
1704{
1705	struct em28xx_fh      *fh  = priv;
1706	struct em28xx         *dev = fh->dev;
1707	int                   rc = -EINVAL;
1708
1709	rc = check_dev(dev);
1710	if (rc < 0)
1711		return rc;
1712
1713	if (unlikely(type != fh->type))
1714		return -EINVAL;
1715
1716	em28xx_videodbg("vidioc_streamon fh=%p t=%d fh->res=%d dev->res=%d\n",
1717			fh, type, fh->resources, dev->resources);
1718
1719	if (unlikely(!res_get(fh, get_ressource(fh))))
1720		return -EBUSY;
1721
1722	if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
1723		rc = videobuf_streamon(&fh->vb_vidq);
1724	else if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE)
1725		rc = videobuf_streamon(&fh->vb_vbiq);
1726
1727	return rc;
1728}
1729
1730static int vidioc_streamoff(struct file *file, void *priv,
1731					enum v4l2_buf_type type)
1732{
1733	struct em28xx_fh      *fh  = priv;
1734	struct em28xx         *dev = fh->dev;
1735	int                   rc;
1736
1737	rc = check_dev(dev);
1738	if (rc < 0)
1739		return rc;
1740
1741	if (fh->type != V4L2_BUF_TYPE_VIDEO_CAPTURE &&
1742	    fh->type != V4L2_BUF_TYPE_VBI_CAPTURE)
1743		return -EINVAL;
1744	if (type != fh->type)
1745		return -EINVAL;
1746
1747	em28xx_videodbg("vidioc_streamoff fh=%p t=%d fh->res=%d dev->res=%d\n",
1748			fh, type, fh->resources, dev->resources);
1749
1750	if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
1751		videobuf_streamoff(&fh->vb_vidq);
1752		res_free(fh, EM28XX_RESOURCE_VIDEO);
1753	} else if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE) {
1754		videobuf_streamoff(&fh->vb_vbiq);
1755		res_free(fh, EM28XX_RESOURCE_VBI);
1756	}
1757
1758	return 0;
1759}
1760
1761static int vidioc_querycap(struct file *file, void  *priv,
1762					struct v4l2_capability *cap)
1763{
1764	struct em28xx_fh      *fh  = priv;
1765	struct em28xx         *dev = fh->dev;
1766
1767	strlcpy(cap->driver, "em28xx", sizeof(cap->driver));
1768	strlcpy(cap->card, em28xx_boards[dev->model].name, sizeof(cap->card));
1769	usb_make_path(dev->udev, cap->bus_info, sizeof(cap->bus_info));
1770
1771	cap->version = EM28XX_VERSION_CODE;
1772
1773	cap->capabilities =
1774			V4L2_CAP_SLICED_VBI_CAPTURE |
1775			V4L2_CAP_VIDEO_CAPTURE |
1776			V4L2_CAP_READWRITE | V4L2_CAP_STREAMING;
1777
1778	if (dev->vbi_dev)
1779		cap->capabilities |= V4L2_CAP_VBI_CAPTURE;
1780
1781	if (dev->audio_mode.has_audio)
1782		cap->capabilities |= V4L2_CAP_AUDIO;
1783
1784	if (dev->tuner_type != TUNER_ABSENT)
1785		cap->capabilities |= V4L2_CAP_TUNER;
1786
1787	return 0;
1788}
1789
1790static int vidioc_enum_fmt_vid_cap(struct file *file, void  *priv,
1791					struct v4l2_fmtdesc *f)
1792{
1793	if (unlikely(f->index >= ARRAY_SIZE(format)))
1794		return -EINVAL;
1795
1796	strlcpy(f->description, format[f->index].name, sizeof(f->description));
1797	f->pixelformat = format[f->index].fourcc;
1798
1799	return 0;
1800}
1801
1802/* Sliced VBI ioctls */
1803static int vidioc_g_fmt_sliced_vbi_cap(struct file *file, void *priv,
1804					struct v4l2_format *f)
1805{
1806	struct em28xx_fh      *fh  = priv;
1807	struct em28xx         *dev = fh->dev;
1808	int                   rc;
1809
1810	rc = check_dev(dev);
1811	if (rc < 0)
1812		return rc;
1813
1814	mutex_lock(&dev->lock);
1815
1816	f->fmt.sliced.service_set = 0;
1817	v4l2_device_call_all(&dev->v4l2_dev, 0, video, g_fmt, f);
1818
1819	if (f->fmt.sliced.service_set == 0)
1820		rc = -EINVAL;
1821
1822	mutex_unlock(&dev->lock);
1823
1824	return rc;
1825}
1826
1827static int vidioc_try_set_sliced_vbi_cap(struct file *file, void *priv,
1828			struct v4l2_format *f)
1829{
1830	struct em28xx_fh      *fh  = priv;
1831	struct em28xx         *dev = fh->dev;
1832	int                   rc;
1833
1834	rc = check_dev(dev);
1835	if (rc < 0)
1836		return rc;
1837
1838	mutex_lock(&dev->lock);
1839	v4l2_device_call_all(&dev->v4l2_dev, 0, video, g_fmt, f);
1840	mutex_unlock(&dev->lock);
1841
1842	if (f->fmt.sliced.service_set == 0)
1843		return -EINVAL;
1844
1845	return 0;
1846}
1847
1848/* RAW VBI ioctls */
1849
1850static int vidioc_g_fmt_vbi_cap(struct file *file, void *priv,
1851				struct v4l2_format *format)
1852{
1853	struct em28xx_fh      *fh  = priv;
1854	struct em28xx         *dev = fh->dev;
1855
1856	format->fmt.vbi.samples_per_line = dev->vbi_width;
1857	format->fmt.vbi.sample_format = V4L2_PIX_FMT_GREY;
1858	format->fmt.vbi.offset = 0;
1859	format->fmt.vbi.flags = 0;
1860	format->fmt.vbi.sampling_rate = 6750000 * 4 / 2;
1861	format->fmt.vbi.count[0] = dev->vbi_height;
1862	format->fmt.vbi.count[1] = dev->vbi_height;
1863
1864	/* Varies by video standard (NTSC, PAL, etc.) */
1865	if (dev->norm & V4L2_STD_525_60) {
1866		/* NTSC */
1867		format->fmt.vbi.start[0] = 10;
1868		format->fmt.vbi.start[1] = 273;
1869	} else if (dev->norm & V4L2_STD_625_50) {
1870		/* PAL */
1871		format->fmt.vbi.start[0] = 6;
1872		format->fmt.vbi.start[1] = 318;
1873	}
1874
1875	return 0;
1876}
1877
1878static int vidioc_s_fmt_vbi_cap(struct file *file, void *priv,
1879				struct v4l2_format *format)
1880{
1881	struct em28xx_fh      *fh  = priv;
1882	struct em28xx         *dev = fh->dev;
1883
1884	format->fmt.vbi.samples_per_line = dev->vbi_width;
1885	format->fmt.vbi.sample_format = V4L2_PIX_FMT_GREY;
1886	format->fmt.vbi.offset = 0;
1887	format->fmt.vbi.flags = 0;
1888	format->fmt.vbi.sampling_rate = 6750000 * 4 / 2;
1889	format->fmt.vbi.count[0] = dev->vbi_height;
1890	format->fmt.vbi.count[1] = dev->vbi_height;
1891
1892	/* Varies by video standard (NTSC, PAL, etc.) */
1893	if (dev->norm & V4L2_STD_525_60) {
1894		/* NTSC */
1895		format->fmt.vbi.start[0] = 10;
1896		format->fmt.vbi.start[1] = 273;
1897	} else if (dev->norm & V4L2_STD_625_50) {
1898		/* PAL */
1899		format->fmt.vbi.start[0] = 6;
1900		format->fmt.vbi.start[1] = 318;
1901	}
1902
1903	return 0;
1904}
1905
1906static int vidioc_reqbufs(struct file *file, void *priv,
1907			  struct v4l2_requestbuffers *rb)
1908{
1909	struct em28xx_fh      *fh  = priv;
1910	struct em28xx         *dev = fh->dev;
1911	int                   rc;
1912
1913	rc = check_dev(dev);
1914	if (rc < 0)
1915		return rc;
1916
1917	if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
1918		return videobuf_reqbufs(&fh->vb_vidq, rb);
1919	else
1920		return videobuf_reqbufs(&fh->vb_vbiq, rb);
1921}
1922
1923static int vidioc_querybuf(struct file *file, void *priv,
1924			   struct v4l2_buffer *b)
1925{
1926	struct em28xx_fh      *fh  = priv;
1927	struct em28xx         *dev = fh->dev;
1928	int                   rc;
1929
1930	rc = check_dev(dev);
1931	if (rc < 0)
1932		return rc;
1933
1934	if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
1935		return videobuf_querybuf(&fh->vb_vidq, b);
1936	else {
1937		/* FIXME: I'm not sure yet whether this is a bug in zvbi or
1938		   the videobuf framework, but we probably shouldn't be
1939		   returning a buffer larger than that which was asked for.
1940		   At a minimum, it causes a crash in zvbi since it does
1941		   a memcpy based on the source buffer length */
1942		int result = videobuf_querybuf(&fh->vb_vbiq, b);
1943		b->length = dev->vbi_width * dev->vbi_height * 2;
1944
1945		return result;
1946	}
1947}
1948
1949static int vidioc_qbuf(struct file *file, void *priv, struct v4l2_buffer *b)
1950{
1951	struct em28xx_fh      *fh  = priv;
1952	struct em28xx         *dev = fh->dev;
1953	int                   rc;
1954
1955	rc = check_dev(dev);
1956	if (rc < 0)
1957		return rc;
1958
1959	if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
1960		return videobuf_qbuf(&fh->vb_vidq, b);
1961	else
1962		return videobuf_qbuf(&fh->vb_vbiq, b);
1963}
1964
1965static int vidioc_dqbuf(struct file *file, void *priv, struct v4l2_buffer *b)
1966{
1967	struct em28xx_fh      *fh  = priv;
1968	struct em28xx         *dev = fh->dev;
1969	int                   rc;
1970
1971	rc = check_dev(dev);
1972	if (rc < 0)
1973		return rc;
1974
1975	if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
1976		return videobuf_dqbuf(&fh->vb_vidq, b, file->f_flags &
1977				      O_NONBLOCK);
1978	else
1979		return videobuf_dqbuf(&fh->vb_vbiq, b, file->f_flags &
1980				      O_NONBLOCK);
1981}
1982
1983#ifdef CONFIG_VIDEO_V4L1_COMPAT
1984static int vidiocgmbuf(struct file *file, void *priv, struct video_mbuf *mbuf)
1985{
1986	struct em28xx_fh  *fh = priv;
1987
1988	if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
1989		return videobuf_cgmbuf(&fh->vb_vidq, mbuf, 8);
1990	else
1991		return videobuf_cgmbuf(&fh->vb_vbiq, mbuf, 8);
1992}
1993#endif
1994
1995
1996/* ----------------------------------------------------------- */
1997/* RADIO ESPECIFIC IOCTLS                                      */
1998/* ----------------------------------------------------------- */
1999
2000static int radio_querycap(struct file *file, void  *priv,
2001			  struct v4l2_capability *cap)
2002{
2003	struct em28xx *dev = ((struct em28xx_fh *)priv)->dev;
2004
2005	strlcpy(cap->driver, "em28xx", sizeof(cap->driver));
2006	strlcpy(cap->card, em28xx_boards[dev->model].name, sizeof(cap->card));
2007	usb_make_path(dev->udev, cap->bus_info, sizeof(cap->bus_info));
2008
2009	cap->version = EM28XX_VERSION_CODE;
2010	cap->capabilities = V4L2_CAP_TUNER;
2011	return 0;
2012}
2013
2014static int radio_g_tuner(struct file *file, void *priv,
2015			 struct v4l2_tuner *t)
2016{
2017	struct em28xx *dev = ((struct em28xx_fh *)priv)->dev;
2018
2019	if (unlikely(t->index > 0))
2020		return -EINVAL;
2021
2022	strcpy(t->name, "Radio");
2023	t->type = V4L2_TUNER_RADIO;
2024
2025	mutex_lock(&dev->lock);
2026	v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, g_tuner, t);
2027	mutex_unlock(&dev->lock);
2028
2029	return 0;
2030}
2031
2032static int radio_enum_input(struct file *file, void *priv,
2033			    struct v4l2_input *i)
2034{
2035	if (i->index != 0)
2036		return -EINVAL;
2037	strcpy(i->name, "Radio");
2038	i->type = V4L2_INPUT_TYPE_TUNER;
2039
2040	return 0;
2041}
2042
2043static int radio_g_audio(struct file *file, void *priv, struct v4l2_audio *a)
2044{
2045	if (unlikely(a->index))
2046		return -EINVAL;
2047
2048	strcpy(a->name, "Radio");
2049	return 0;
2050}
2051
2052static int radio_s_tuner(struct file *file, void *priv,
2053			 struct v4l2_tuner *t)
2054{
2055	struct em28xx *dev = ((struct em28xx_fh *)priv)->dev;
2056
2057	if (0 != t->index)
2058		return -EINVAL;
2059
2060	mutex_lock(&dev->lock);
2061	v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_tuner, t);
2062	mutex_unlock(&dev->lock);
2063
2064	return 0;
2065}
2066
2067static int radio_s_audio(struct file *file, void *fh,
2068			 struct v4l2_audio *a)
2069{
2070	return 0;
2071}
2072
2073static int radio_s_input(struct file *file, void *fh, unsigned int i)
2074{
2075	return 0;
2076}
2077
2078static int radio_queryctrl(struct file *file, void *priv,
2079			   struct v4l2_queryctrl *qc)
2080{
2081	int i;
2082
2083	if (qc->id <  V4L2_CID_BASE ||
2084		qc->id >= V4L2_CID_LASTP1)
2085		return -EINVAL;
2086
2087	for (i = 0; i < ARRAY_SIZE(ac97_qctrl); i++) {
2088		if (qc->id && qc->id == ac97_qctrl[i].id) {
2089			memcp

Large files files are truncated, but you can click here to view the full file