Merge tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost
[cris-mirror.git] / drivers / media / usb / em28xx / em28xx-video.c
bloba2ba2d9059529108cba1cc8869fc4d7f8ebe84f2
1 /*
2 em28xx-video.c - driver for Empia EM2800/EM2820/2840 USB
3 video capture devices
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 Copyright (C) 2012 Frank Schäfer <fschaefer.oss@googlemail.com>
11 Some parts based on SN9C10x PC Camera Controllers GPL driver made
12 by Luca Risolia <luca.risolia@studio.unibo.it>
14 This program is free software; you can redistribute it and/or modify
15 it under the terms of the GNU General Public License as published by
16 the Free Software Foundation; either version 2 of the License, or
17 (at your option) any later version.
19 This program is distributed in the hope that it will be useful,
20 but WITHOUT ANY WARRANTY; without even the implied warranty of
21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 GNU General Public License for more details.
24 You should have received a copy of the GNU General Public License
25 along with this program; if not, write to the Free Software
26 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
29 #include "em28xx.h"
31 #include <linux/init.h>
32 #include <linux/list.h>
33 #include <linux/module.h>
34 #include <linux/kernel.h>
35 #include <linux/bitmap.h>
36 #include <linux/usb.h>
37 #include <linux/i2c.h>
38 #include <linux/mm.h>
39 #include <linux/mutex.h>
40 #include <linux/slab.h>
42 #include "em28xx-v4l.h"
43 #include <media/v4l2-common.h>
44 #include <media/v4l2-ioctl.h>
45 #include <media/v4l2-event.h>
46 #include <media/drv-intf/msp3400.h>
47 #include <media/tuner.h>
49 #define DRIVER_AUTHOR "Ludovico Cavedon <cavedon@sssup.it>, " \
50 "Markus Rechberger <mrechberger@gmail.com>, " \
51 "Mauro Carvalho Chehab <mchehab@infradead.org>, " \
52 "Sascha Sommer <saschasommer@freenet.de>"
54 static unsigned int isoc_debug;
55 module_param(isoc_debug, int, 0644);
56 MODULE_PARM_DESC(isoc_debug, "enable debug messages [isoc transfers]");
58 static unsigned int disable_vbi;
59 module_param(disable_vbi, int, 0644);
60 MODULE_PARM_DESC(disable_vbi, "disable vbi support");
62 static int alt;
63 module_param(alt, int, 0644);
64 MODULE_PARM_DESC(alt, "alternate setting to use for video endpoint");
66 #define em28xx_videodbg(fmt, arg...) do { \
67 if (video_debug) \
68 dev_printk(KERN_DEBUG, &dev->intf->dev, \
69 "video: %s: " fmt, __func__, ## arg); \
70 } while (0)
72 #define em28xx_isocdbg(fmt, arg...) do {\
73 if (isoc_debug) \
74 dev_printk(KERN_DEBUG, &dev->intf->dev, \
75 "isoc: %s: " fmt, __func__, ## arg); \
76 } while (0)
78 MODULE_AUTHOR(DRIVER_AUTHOR);
79 MODULE_DESCRIPTION(DRIVER_DESC " - v4l2 interface");
80 MODULE_LICENSE("GPL");
81 MODULE_VERSION(EM28XX_VERSION);
83 #define EM25XX_FRMDATAHDR_BYTE1 0x02
84 #define EM25XX_FRMDATAHDR_BYTE2_STILL_IMAGE 0x20
85 #define EM25XX_FRMDATAHDR_BYTE2_FRAME_END 0x02
86 #define EM25XX_FRMDATAHDR_BYTE2_FRAME_ID 0x01
87 #define EM25XX_FRMDATAHDR_BYTE2_MASK (EM25XX_FRMDATAHDR_BYTE2_STILL_IMAGE | \
88 EM25XX_FRMDATAHDR_BYTE2_FRAME_END | \
89 EM25XX_FRMDATAHDR_BYTE2_FRAME_ID)
91 static unsigned int video_nr[] = {[0 ... (EM28XX_MAXBOARDS - 1)] = -1U };
92 static unsigned int vbi_nr[] = {[0 ... (EM28XX_MAXBOARDS - 1)] = -1U };
93 static unsigned int radio_nr[] = {[0 ... (EM28XX_MAXBOARDS - 1)] = -1U };
95 module_param_array(video_nr, int, NULL, 0444);
96 module_param_array(vbi_nr, int, NULL, 0444);
97 module_param_array(radio_nr, int, NULL, 0444);
98 MODULE_PARM_DESC(video_nr, "video device numbers");
99 MODULE_PARM_DESC(vbi_nr, "vbi device numbers");
100 MODULE_PARM_DESC(radio_nr, "radio device numbers");
102 static unsigned int video_debug;
103 module_param(video_debug, int, 0644);
104 MODULE_PARM_DESC(video_debug, "enable debug messages [video]");
106 /* supported video standards */
107 static struct em28xx_fmt format[] = {
109 .name = "16 bpp YUY2, 4:2:2, packed",
110 .fourcc = V4L2_PIX_FMT_YUYV,
111 .depth = 16,
112 .reg = EM28XX_OUTFMT_YUV422_Y0UY1V,
113 }, {
114 .name = "16 bpp RGB 565, LE",
115 .fourcc = V4L2_PIX_FMT_RGB565,
116 .depth = 16,
117 .reg = EM28XX_OUTFMT_RGB_16_656,
118 }, {
119 .name = "8 bpp Bayer RGRG..GBGB",
120 .fourcc = V4L2_PIX_FMT_SRGGB8,
121 .depth = 8,
122 .reg = EM28XX_OUTFMT_RGB_8_RGRG,
123 }, {
124 .name = "8 bpp Bayer BGBG..GRGR",
125 .fourcc = V4L2_PIX_FMT_SBGGR8,
126 .depth = 8,
127 .reg = EM28XX_OUTFMT_RGB_8_BGBG,
128 }, {
129 .name = "8 bpp Bayer GRGR..BGBG",
130 .fourcc = V4L2_PIX_FMT_SGRBG8,
131 .depth = 8,
132 .reg = EM28XX_OUTFMT_RGB_8_GRGR,
133 }, {
134 .name = "8 bpp Bayer GBGB..RGRG",
135 .fourcc = V4L2_PIX_FMT_SGBRG8,
136 .depth = 8,
137 .reg = EM28XX_OUTFMT_RGB_8_GBGB,
138 }, {
139 .name = "12 bpp YUV411",
140 .fourcc = V4L2_PIX_FMT_YUV411P,
141 .depth = 12,
142 .reg = EM28XX_OUTFMT_YUV411,
146 /*FIXME: maxw should be dependent of alt mode */
147 static inline unsigned int norm_maxw(struct em28xx *dev)
149 struct em28xx_v4l2 *v4l2 = dev->v4l2;
151 if (dev->board.is_webcam)
152 return v4l2->sensor_xres;
154 if (dev->board.max_range_640_480)
155 return 640;
157 return 720;
160 static inline unsigned int norm_maxh(struct em28xx *dev)
162 struct em28xx_v4l2 *v4l2 = dev->v4l2;
164 if (dev->board.is_webcam)
165 return v4l2->sensor_yres;
167 if (dev->board.max_range_640_480)
168 return 480;
170 return (v4l2->norm & V4L2_STD_625_50) ? 576 : 480;
173 static int em28xx_vbi_supported(struct em28xx *dev)
175 /* Modprobe option to manually disable */
176 if (disable_vbi == 1)
177 return 0;
179 if (dev->board.is_webcam)
180 return 0;
182 /* FIXME: check subdevices for VBI support */
184 if (dev->chip_id == CHIP_ID_EM2860 ||
185 dev->chip_id == CHIP_ID_EM2883)
186 return 1;
188 /* Version of em28xx that does not support VBI */
189 return 0;
193 * em28xx_wake_i2c()
194 * configure i2c attached devices
196 static void em28xx_wake_i2c(struct em28xx *dev)
198 struct v4l2_device *v4l2_dev = &dev->v4l2->v4l2_dev;
200 v4l2_device_call_all(v4l2_dev, 0, core, reset, 0);
201 v4l2_device_call_all(v4l2_dev, 0, video, s_routing,
202 INPUT(dev->ctl_input)->vmux, 0, 0);
205 static int em28xx_colorlevels_set_default(struct em28xx *dev)
207 em28xx_write_reg(dev, EM28XX_R20_YGAIN, CONTRAST_DEFAULT);
208 em28xx_write_reg(dev, EM28XX_R21_YOFFSET, BRIGHTNESS_DEFAULT);
209 em28xx_write_reg(dev, EM28XX_R22_UVGAIN, SATURATION_DEFAULT);
210 em28xx_write_reg(dev, EM28XX_R23_UOFFSET, BLUE_BALANCE_DEFAULT);
211 em28xx_write_reg(dev, EM28XX_R24_VOFFSET, RED_BALANCE_DEFAULT);
212 em28xx_write_reg(dev, EM28XX_R25_SHARPNESS, SHARPNESS_DEFAULT);
214 em28xx_write_reg(dev, EM28XX_R14_GAMMA, 0x20);
215 em28xx_write_reg(dev, EM28XX_R15_RGAIN, 0x20);
216 em28xx_write_reg(dev, EM28XX_R16_GGAIN, 0x20);
217 em28xx_write_reg(dev, EM28XX_R17_BGAIN, 0x20);
218 em28xx_write_reg(dev, EM28XX_R18_ROFFSET, 0x00);
219 em28xx_write_reg(dev, EM28XX_R19_GOFFSET, 0x00);
220 return em28xx_write_reg(dev, EM28XX_R1A_BOFFSET, 0x00);
223 static int em28xx_set_outfmt(struct em28xx *dev)
225 int ret;
226 u8 fmt, vinctrl;
227 struct em28xx_v4l2 *v4l2 = dev->v4l2;
229 fmt = v4l2->format->reg;
230 if (!dev->is_em25xx)
231 fmt |= 0x20;
233 * NOTE: it's not clear if this is really needed !
234 * The datasheets say bit 5 is a reserved bit and devices seem to work
235 * fine without it. But the Windows driver sets it for em2710/50+em28xx
236 * devices and we've always been setting it, too.
238 * em2765 (em25xx, em276x/7x/8x) devices do NOT work with this bit set,
239 * it's likely used for an additional (compressed ?) format there.
241 ret = em28xx_write_reg(dev, EM28XX_R27_OUTFMT, fmt);
242 if (ret < 0)
243 return ret;
245 ret = em28xx_write_reg(dev, EM28XX_R10_VINMODE, v4l2->vinmode);
246 if (ret < 0)
247 return ret;
249 vinctrl = v4l2->vinctl;
250 if (em28xx_vbi_supported(dev) == 1) {
251 vinctrl |= EM28XX_VINCTRL_VBI_RAW;
252 em28xx_write_reg(dev, EM28XX_R34_VBI_START_H, 0x00);
253 em28xx_write_reg(dev, EM28XX_R36_VBI_WIDTH, v4l2->vbi_width/4);
254 em28xx_write_reg(dev, EM28XX_R37_VBI_HEIGHT, v4l2->vbi_height);
255 if (v4l2->norm & V4L2_STD_525_60) {
256 /* NTSC */
257 em28xx_write_reg(dev, EM28XX_R35_VBI_START_V, 0x09);
258 } else if (v4l2->norm & V4L2_STD_625_50) {
259 /* PAL */
260 em28xx_write_reg(dev, EM28XX_R35_VBI_START_V, 0x07);
264 return em28xx_write_reg(dev, EM28XX_R11_VINCTRL, vinctrl);
267 static int em28xx_accumulator_set(struct em28xx *dev, u8 xmin, u8 xmax,
268 u8 ymin, u8 ymax)
270 em28xx_videodbg("em28xx Scale: (%d,%d)-(%d,%d)\n",
271 xmin, ymin, xmax, ymax);
273 em28xx_write_regs(dev, EM28XX_R28_XMIN, &xmin, 1);
274 em28xx_write_regs(dev, EM28XX_R29_XMAX, &xmax, 1);
275 em28xx_write_regs(dev, EM28XX_R2A_YMIN, &ymin, 1);
276 return em28xx_write_regs(dev, EM28XX_R2B_YMAX, &ymax, 1);
279 static void em28xx_capture_area_set(struct em28xx *dev, u8 hstart, u8 vstart,
280 u16 width, u16 height)
282 u8 cwidth = width >> 2;
283 u8 cheight = height >> 2;
284 u8 overflow = (height >> 9 & 0x02) | (width >> 10 & 0x01);
285 /* NOTE: size limit: 2047x1023 = 2MPix */
287 em28xx_videodbg("capture area set to (%d,%d): %dx%d\n",
288 hstart, vstart,
289 ((overflow & 2) << 9 | cwidth << 2),
290 ((overflow & 1) << 10 | cheight << 2));
292 em28xx_write_regs(dev, EM28XX_R1C_HSTART, &hstart, 1);
293 em28xx_write_regs(dev, EM28XX_R1D_VSTART, &vstart, 1);
294 em28xx_write_regs(dev, EM28XX_R1E_CWIDTH, &cwidth, 1);
295 em28xx_write_regs(dev, EM28XX_R1F_CHEIGHT, &cheight, 1);
296 em28xx_write_regs(dev, EM28XX_R1B_OFLOW, &overflow, 1);
298 /* FIXME: function/meaning of these registers ? */
299 /* FIXME: align width+height to multiples of 4 ?! */
300 if (dev->is_em25xx) {
301 em28xx_write_reg(dev, 0x34, width >> 4);
302 em28xx_write_reg(dev, 0x35, height >> 4);
306 static int em28xx_scaler_set(struct em28xx *dev, u16 h, u16 v)
308 u8 mode = 0x00;
309 /* the em2800 scaler only supports scaling down to 50% */
311 if (dev->board.is_em2800) {
312 mode = (v ? 0x20 : 0x00) | (h ? 0x10 : 0x00);
313 } else {
314 u8 buf[2];
316 buf[0] = h;
317 buf[1] = h >> 8;
318 em28xx_write_regs(dev, EM28XX_R30_HSCALELOW, (char *)buf, 2);
320 buf[0] = v;
321 buf[1] = v >> 8;
322 em28xx_write_regs(dev, EM28XX_R32_VSCALELOW, (char *)buf, 2);
323 /* it seems that both H and V scalers must be active
324 to work correctly */
325 mode = (h || v) ? 0x30 : 0x00;
327 return em28xx_write_reg(dev, EM28XX_R26_COMPR, mode);
330 /* FIXME: this only function read values from dev */
331 static int em28xx_resolution_set(struct em28xx *dev)
333 struct em28xx_v4l2 *v4l2 = dev->v4l2;
334 int width = norm_maxw(dev);
335 int height = norm_maxh(dev);
337 /* Properly setup VBI */
338 v4l2->vbi_width = 720;
339 if (v4l2->norm & V4L2_STD_525_60)
340 v4l2->vbi_height = 12;
341 else
342 v4l2->vbi_height = 18;
344 em28xx_set_outfmt(dev);
346 em28xx_accumulator_set(dev, 1, (width - 4) >> 2, 1, (height - 4) >> 2);
348 /* If we don't set the start position to 2 in VBI mode, we end up
349 with line 20/21 being YUYV encoded instead of being in 8-bit
350 greyscale. The core of the issue is that line 21 (and line 23 for
351 PAL WSS) are inside of active video region, and as a result they
352 get the pixelformatting associated with that area. So by cropping
353 it out, we end up with the same format as the rest of the VBI
354 region */
355 if (em28xx_vbi_supported(dev) == 1)
356 em28xx_capture_area_set(dev, 0, 2, width, height);
357 else
358 em28xx_capture_area_set(dev, 0, 0, width, height);
360 return em28xx_scaler_set(dev, v4l2->hscale, v4l2->vscale);
363 /* Set USB alternate setting for analog video */
364 static int em28xx_set_alternate(struct em28xx *dev)
366 struct em28xx_v4l2 *v4l2 = dev->v4l2;
367 struct usb_device *udev = interface_to_usbdev(dev->intf);
368 int errCode;
369 int i;
370 unsigned int min_pkt_size = v4l2->width * 2 + 4;
372 /* NOTE: for isoc transfers, only alt settings > 0 are allowed
373 bulk transfers seem to work only with alt=0 ! */
374 dev->alt = 0;
375 if ((alt > 0) && (alt < dev->num_alt)) {
376 em28xx_videodbg("alternate forced to %d\n", dev->alt);
377 dev->alt = alt;
378 goto set_alt;
380 if (dev->analog_xfer_bulk)
381 goto set_alt;
383 /* When image size is bigger than a certain value,
384 the frame size should be increased, otherwise, only
385 green screen will be received.
387 if (v4l2->width * 2 * v4l2->height > 720 * 240 * 2)
388 min_pkt_size *= 2;
390 for (i = 0; i < dev->num_alt; i++) {
391 /* stop when the selected alt setting offers enough bandwidth */
392 if (dev->alt_max_pkt_size_isoc[i] >= min_pkt_size) {
393 dev->alt = i;
394 break;
395 /* otherwise make sure that we end up with the maximum bandwidth
396 because the min_pkt_size equation might be wrong...
398 } else if (dev->alt_max_pkt_size_isoc[i] >
399 dev->alt_max_pkt_size_isoc[dev->alt])
400 dev->alt = i;
403 set_alt:
404 /* NOTE: for bulk transfers, we need to call usb_set_interface()
405 * even if the previous settings were the same. Otherwise streaming
406 * fails with all urbs having status = -EOVERFLOW ! */
407 if (dev->analog_xfer_bulk) {
408 dev->max_pkt_size = 512; /* USB 2.0 spec */
409 dev->packet_multiplier = EM28XX_BULK_PACKET_MULTIPLIER;
410 } else { /* isoc */
411 em28xx_videodbg("minimum isoc packet size: %u (alt=%d)\n",
412 min_pkt_size, dev->alt);
413 dev->max_pkt_size =
414 dev->alt_max_pkt_size_isoc[dev->alt];
415 dev->packet_multiplier = EM28XX_NUM_ISOC_PACKETS;
417 em28xx_videodbg("setting alternate %d with wMaxPacketSize=%u\n",
418 dev->alt, dev->max_pkt_size);
419 errCode = usb_set_interface(udev, dev->ifnum, dev->alt);
420 if (errCode < 0) {
421 dev_err(&dev->intf->dev,
422 "cannot change alternate number to %d (error=%i)\n",
423 dev->alt, errCode);
424 return errCode;
426 return 0;
429 /* ------------------------------------------------------------------
430 DMA and thread functions
431 ------------------------------------------------------------------*/
434 * Finish the current buffer
436 static inline void finish_buffer(struct em28xx *dev,
437 struct em28xx_buffer *buf)
439 em28xx_isocdbg("[%p/%d] wakeup\n", buf, buf->top_field);
441 buf->vb.sequence = dev->v4l2->field_count++;
442 if (dev->v4l2->progressive)
443 buf->vb.field = V4L2_FIELD_NONE;
444 else
445 buf->vb.field = V4L2_FIELD_INTERLACED;
446 buf->vb.vb2_buf.timestamp = ktime_get_ns();
448 vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
452 * Copy picture data from USB buffer to videobuf buffer
454 static void em28xx_copy_video(struct em28xx *dev,
455 struct em28xx_buffer *buf,
456 unsigned char *usb_buf,
457 unsigned long len)
459 struct em28xx_v4l2 *v4l2 = dev->v4l2;
460 void *fieldstart, *startwrite, *startread;
461 int linesdone, currlinedone, offset, lencopy, remain;
462 int bytesperline = v4l2->width << 1;
464 if (buf->pos + len > buf->length)
465 len = buf->length - buf->pos;
467 startread = usb_buf;
468 remain = len;
470 if (v4l2->progressive || buf->top_field)
471 fieldstart = buf->vb_buf;
472 else /* interlaced mode, even nr. of lines */
473 fieldstart = buf->vb_buf + bytesperline;
475 linesdone = buf->pos / bytesperline;
476 currlinedone = buf->pos % bytesperline;
478 if (v4l2->progressive)
479 offset = linesdone * bytesperline + currlinedone;
480 else
481 offset = linesdone * bytesperline * 2 + currlinedone;
483 startwrite = fieldstart + offset;
484 lencopy = bytesperline - currlinedone;
485 lencopy = lencopy > remain ? remain : lencopy;
487 if ((char *)startwrite + lencopy > (char *)buf->vb_buf + buf->length) {
488 em28xx_isocdbg("Overflow of %zu bytes past buffer end (1)\n",
489 ((char *)startwrite + lencopy) -
490 ((char *)buf->vb_buf + buf->length));
491 remain = (char *)buf->vb_buf + buf->length -
492 (char *)startwrite;
493 lencopy = remain;
495 if (lencopy <= 0)
496 return;
497 memcpy(startwrite, startread, lencopy);
499 remain -= lencopy;
501 while (remain > 0) {
502 if (v4l2->progressive)
503 startwrite += lencopy;
504 else
505 startwrite += lencopy + bytesperline;
506 startread += lencopy;
507 if (bytesperline > remain)
508 lencopy = remain;
509 else
510 lencopy = bytesperline;
512 if ((char *)startwrite + lencopy > (char *)buf->vb_buf +
513 buf->length) {
514 em28xx_isocdbg("Overflow of %zu bytes past buffer end(2)\n",
515 ((char *)startwrite + lencopy) -
516 ((char *)buf->vb_buf + buf->length));
517 lencopy = remain = (char *)buf->vb_buf + buf->length -
518 (char *)startwrite;
520 if (lencopy <= 0)
521 break;
523 memcpy(startwrite, startread, lencopy);
525 remain -= lencopy;
528 buf->pos += len;
532 * Copy VBI data from USB buffer to videobuf buffer
534 static void em28xx_copy_vbi(struct em28xx *dev,
535 struct em28xx_buffer *buf,
536 unsigned char *usb_buf,
537 unsigned long len)
539 unsigned int offset;
541 if (buf->pos + len > buf->length)
542 len = buf->length - buf->pos;
544 offset = buf->pos;
545 /* Make sure the bottom field populates the second half of the frame */
546 if (buf->top_field == 0)
547 offset += dev->v4l2->vbi_width * dev->v4l2->vbi_height;
549 memcpy(buf->vb_buf + offset, usb_buf, len);
550 buf->pos += len;
553 static inline void print_err_status(struct em28xx *dev,
554 int packet, int status)
556 char *errmsg = "Unknown";
558 switch (status) {
559 case -ENOENT:
560 errmsg = "unlinked synchronously";
561 break;
562 case -ECONNRESET:
563 errmsg = "unlinked asynchronously";
564 break;
565 case -ENOSR:
566 errmsg = "Buffer error (overrun)";
567 break;
568 case -EPIPE:
569 errmsg = "Stalled (device not responding)";
570 break;
571 case -EOVERFLOW:
572 errmsg = "Babble (bad cable?)";
573 break;
574 case -EPROTO:
575 errmsg = "Bit-stuff error (bad cable?)";
576 break;
577 case -EILSEQ:
578 errmsg = "CRC/Timeout (could be anything)";
579 break;
580 case -ETIME:
581 errmsg = "Device does not respond";
582 break;
584 if (packet < 0) {
585 em28xx_isocdbg("URB status %d [%s].\n", status, errmsg);
586 } else {
587 em28xx_isocdbg("URB packet %d, status %d [%s].\n",
588 packet, status, errmsg);
593 * get the next available buffer from dma queue
595 static inline struct em28xx_buffer *get_next_buf(struct em28xx *dev,
596 struct em28xx_dmaqueue *dma_q)
598 struct em28xx_buffer *buf;
600 if (list_empty(&dma_q->active)) {
601 em28xx_isocdbg("No active queue to serve\n");
602 return NULL;
605 /* Get the next buffer */
606 buf = list_entry(dma_q->active.next, struct em28xx_buffer, list);
607 /* Cleans up buffer - Useful for testing for frame/URB loss */
608 list_del(&buf->list);
609 buf->pos = 0;
610 buf->vb_buf = buf->mem;
612 return buf;
616 * Finish the current buffer if completed and prepare for the next field
618 static struct em28xx_buffer *
619 finish_field_prepare_next(struct em28xx *dev,
620 struct em28xx_buffer *buf,
621 struct em28xx_dmaqueue *dma_q)
623 struct em28xx_v4l2 *v4l2 = dev->v4l2;
625 if (v4l2->progressive || v4l2->top_field) { /* Brand new frame */
626 if (buf != NULL)
627 finish_buffer(dev, buf);
628 buf = get_next_buf(dev, dma_q);
630 if (buf != NULL) {
631 buf->top_field = v4l2->top_field;
632 buf->pos = 0;
635 return buf;
639 * Process data packet according to the em2710/em2750/em28xx frame data format
641 static inline void process_frame_data_em28xx(struct em28xx *dev,
642 unsigned char *data_pkt,
643 unsigned int data_len)
645 struct em28xx_v4l2 *v4l2 = dev->v4l2;
646 struct em28xx_buffer *buf = dev->usb_ctl.vid_buf;
647 struct em28xx_buffer *vbi_buf = dev->usb_ctl.vbi_buf;
648 struct em28xx_dmaqueue *dma_q = &dev->vidq;
649 struct em28xx_dmaqueue *vbi_dma_q = &dev->vbiq;
651 /* capture type 0 = vbi start
652 capture type 1 = vbi in progress
653 capture type 2 = video start
654 capture type 3 = video in progress */
655 if (data_len >= 4) {
656 /* NOTE: Headers are always 4 bytes and
657 * never split across packets */
658 if (data_pkt[0] == 0x88 && data_pkt[1] == 0x88 &&
659 data_pkt[2] == 0x88 && data_pkt[3] == 0x88) {
660 /* Continuation */
661 data_pkt += 4;
662 data_len -= 4;
663 } else if (data_pkt[0] == 0x33 && data_pkt[1] == 0x95) {
664 /* Field start (VBI mode) */
665 v4l2->capture_type = 0;
666 v4l2->vbi_read = 0;
667 em28xx_isocdbg("VBI START HEADER !!!\n");
668 v4l2->top_field = !(data_pkt[2] & 1);
669 data_pkt += 4;
670 data_len -= 4;
671 } else if (data_pkt[0] == 0x22 && data_pkt[1] == 0x5a) {
672 /* Field start (VBI disabled) */
673 v4l2->capture_type = 2;
674 em28xx_isocdbg("VIDEO START HEADER !!!\n");
675 v4l2->top_field = !(data_pkt[2] & 1);
676 data_pkt += 4;
677 data_len -= 4;
680 /* NOTE: With bulk transfers, intermediate data packets
681 * have no continuation header */
683 if (v4l2->capture_type == 0) {
684 vbi_buf = finish_field_prepare_next(dev, vbi_buf, vbi_dma_q);
685 dev->usb_ctl.vbi_buf = vbi_buf;
686 v4l2->capture_type = 1;
689 if (v4l2->capture_type == 1) {
690 int vbi_size = v4l2->vbi_width * v4l2->vbi_height;
691 int vbi_data_len = ((v4l2->vbi_read + data_len) > vbi_size) ?
692 (vbi_size - v4l2->vbi_read) : data_len;
694 /* Copy VBI data */
695 if (vbi_buf != NULL)
696 em28xx_copy_vbi(dev, vbi_buf, data_pkt, vbi_data_len);
697 v4l2->vbi_read += vbi_data_len;
699 if (vbi_data_len < data_len) {
700 /* Continue with copying video data */
701 v4l2->capture_type = 2;
702 data_pkt += vbi_data_len;
703 data_len -= vbi_data_len;
707 if (v4l2->capture_type == 2) {
708 buf = finish_field_prepare_next(dev, buf, dma_q);
709 dev->usb_ctl.vid_buf = buf;
710 v4l2->capture_type = 3;
713 if (v4l2->capture_type == 3 && buf != NULL && data_len > 0)
714 em28xx_copy_video(dev, buf, data_pkt, data_len);
718 * Process data packet according to the em25xx/em276x/7x/8x frame data format
720 static inline void process_frame_data_em25xx(struct em28xx *dev,
721 unsigned char *data_pkt,
722 unsigned int data_len)
724 struct em28xx_buffer *buf = dev->usb_ctl.vid_buf;
725 struct em28xx_dmaqueue *dmaq = &dev->vidq;
726 struct em28xx_v4l2 *v4l2 = dev->v4l2;
727 bool frame_end = false;
729 /* Check for header */
730 /* NOTE: at least with bulk transfers, only the first packet
731 * has a header and has always set the FRAME_END bit */
732 if (data_len >= 2) { /* em25xx header is only 2 bytes long */
733 if ((data_pkt[0] == EM25XX_FRMDATAHDR_BYTE1) &&
734 ((data_pkt[1] & ~EM25XX_FRMDATAHDR_BYTE2_MASK) == 0x00)) {
735 v4l2->top_field = !(data_pkt[1] &
736 EM25XX_FRMDATAHDR_BYTE2_FRAME_ID);
737 frame_end = data_pkt[1] &
738 EM25XX_FRMDATAHDR_BYTE2_FRAME_END;
739 data_pkt += 2;
740 data_len -= 2;
743 /* Finish field and prepare next (BULK only) */
744 if (dev->analog_xfer_bulk && frame_end) {
745 buf = finish_field_prepare_next(dev, buf, dmaq);
746 dev->usb_ctl.vid_buf = buf;
748 /* NOTE: in ISOC mode when a new frame starts and buf==NULL,
749 * we COULD already prepare a buffer here to avoid skipping the
750 * first frame.
754 /* Copy data */
755 if (buf != NULL && data_len > 0)
756 em28xx_copy_video(dev, buf, data_pkt, data_len);
758 /* Finish frame (ISOC only) => avoids lag of 1 frame */
759 if (!dev->analog_xfer_bulk && frame_end) {
760 buf = finish_field_prepare_next(dev, buf, dmaq);
761 dev->usb_ctl.vid_buf = buf;
764 /* NOTE: Tested with USB bulk transfers only !
765 * The wording in the datasheet suggests that isoc might work different.
766 * The current code assumes that with isoc transfers each packet has a
767 * header like with the other em28xx devices.
769 /* NOTE: Support for interlaced mode is pure theory. It has not been
770 * tested and it is unknown if these devices actually support it. */
771 /* NOTE: No VBI support yet (these chips likely do not support VBI). */
774 /* Processes and copies the URB data content (video and VBI data) */
775 static inline int em28xx_urb_data_copy(struct em28xx *dev, struct urb *urb)
777 int xfer_bulk, num_packets, i;
778 unsigned char *usb_data_pkt;
779 unsigned int usb_data_len;
781 if (!dev)
782 return 0;
784 if (dev->disconnected)
785 return 0;
787 if (urb->status < 0)
788 print_err_status(dev, -1, urb->status);
790 xfer_bulk = usb_pipebulk(urb->pipe);
792 if (xfer_bulk) /* bulk */
793 num_packets = 1;
794 else /* isoc */
795 num_packets = urb->number_of_packets;
797 for (i = 0; i < num_packets; i++) {
798 if (xfer_bulk) { /* bulk */
799 usb_data_len = urb->actual_length;
801 usb_data_pkt = urb->transfer_buffer;
802 } else { /* isoc */
803 if (urb->iso_frame_desc[i].status < 0) {
804 print_err_status(dev, i,
805 urb->iso_frame_desc[i].status);
806 if (urb->iso_frame_desc[i].status != -EPROTO)
807 continue;
810 usb_data_len = urb->iso_frame_desc[i].actual_length;
811 if (usb_data_len > dev->max_pkt_size) {
812 em28xx_isocdbg("packet bigger than packet size");
813 continue;
816 usb_data_pkt = urb->transfer_buffer +
817 urb->iso_frame_desc[i].offset;
820 if (usb_data_len == 0) {
821 /* NOTE: happens very often with isoc transfers */
822 /* em28xx_usbdbg("packet %d is empty",i); - spammy */
823 continue;
826 if (dev->is_em25xx)
827 process_frame_data_em25xx(dev,
828 usb_data_pkt, usb_data_len);
829 else
830 process_frame_data_em28xx(dev,
831 usb_data_pkt, usb_data_len);
834 return 1;
837 static int get_ressource(enum v4l2_buf_type f_type)
839 switch (f_type) {
840 case V4L2_BUF_TYPE_VIDEO_CAPTURE:
841 return EM28XX_RESOURCE_VIDEO;
842 case V4L2_BUF_TYPE_VBI_CAPTURE:
843 return EM28XX_RESOURCE_VBI;
844 default:
845 BUG();
849 /* Usage lock check functions */
850 static int res_get(struct em28xx *dev, enum v4l2_buf_type f_type)
852 int res_type = get_ressource(f_type);
854 /* is it free? */
855 if (dev->resources & res_type) {
856 /* no, someone else uses it */
857 return -EBUSY;
860 /* it's free, grab it */
861 dev->resources |= res_type;
862 em28xx_videodbg("res: get %d\n", res_type);
863 return 0;
866 static void res_free(struct em28xx *dev, enum v4l2_buf_type f_type)
868 int res_type = get_ressource(f_type);
870 dev->resources &= ~res_type;
871 em28xx_videodbg("res: put %d\n", res_type);
874 static void em28xx_v4l2_media_release(struct em28xx *dev)
876 #ifdef CONFIG_MEDIA_CONTROLLER
877 int i;
879 for (i = 0; i < MAX_EM28XX_INPUT; i++) {
880 if (!INPUT(i)->type)
881 return;
882 media_device_unregister_entity(&dev->input_ent[i]);
884 #endif
888 * Media Controller helper functions
891 static int em28xx_enable_analog_tuner(struct em28xx *dev)
893 #ifdef CONFIG_MEDIA_CONTROLLER
894 struct media_device *mdev = dev->media_dev;
895 struct em28xx_v4l2 *v4l2 = dev->v4l2;
896 struct media_entity *source;
897 struct media_link *link, *found_link = NULL;
898 int ret, active_links = 0;
900 if (!mdev || !v4l2->decoder)
901 return 0;
904 * This will find the tuner that is connected into the decoder.
905 * Technically, this is not 100% correct, as the device may be
906 * using an analog input instead of the tuner. However, as we can't
907 * do DVB streaming while the DMA engine is being used for V4L2,
908 * this should be enough for the actual needs.
910 list_for_each_entry(link, &v4l2->decoder->links, list) {
911 if (link->sink->entity == v4l2->decoder) {
912 found_link = link;
913 if (link->flags & MEDIA_LNK_FL_ENABLED)
914 active_links++;
915 break;
919 if (active_links == 1 || !found_link)
920 return 0;
922 source = found_link->source->entity;
923 list_for_each_entry(link, &source->links, list) {
924 struct media_entity *sink;
925 int flags = 0;
927 sink = link->sink->entity;
929 if (sink == v4l2->decoder)
930 flags = MEDIA_LNK_FL_ENABLED;
932 ret = media_entity_setup_link(link, flags);
933 if (ret) {
934 dev_err(&dev->intf->dev,
935 "Couldn't change link %s->%s to %s. Error %d\n",
936 source->name, sink->name,
937 flags ? "enabled" : "disabled",
938 ret);
939 return ret;
940 } else
941 em28xx_videodbg("link %s->%s was %s\n",
942 source->name, sink->name,
943 flags ? "ENABLED" : "disabled");
945 #endif
946 return 0;
949 static const char * const iname[] = {
950 [EM28XX_VMUX_COMPOSITE] = "Composite",
951 [EM28XX_VMUX_SVIDEO] = "S-Video",
952 [EM28XX_VMUX_TELEVISION] = "Television",
953 [EM28XX_RADIO] = "Radio",
956 static void em28xx_v4l2_create_entities(struct em28xx *dev)
958 #if defined(CONFIG_MEDIA_CONTROLLER)
959 struct em28xx_v4l2 *v4l2 = dev->v4l2;
960 int ret, i;
962 /* Initialize Video, VBI and Radio pads */
963 v4l2->video_pad.flags = MEDIA_PAD_FL_SINK;
964 ret = media_entity_pads_init(&v4l2->vdev.entity, 1, &v4l2->video_pad);
965 if (ret < 0)
966 dev_err(&dev->intf->dev,
967 "failed to initialize video media entity!\n");
969 if (em28xx_vbi_supported(dev)) {
970 v4l2->vbi_pad.flags = MEDIA_PAD_FL_SINK;
971 ret = media_entity_pads_init(&v4l2->vbi_dev.entity, 1,
972 &v4l2->vbi_pad);
973 if (ret < 0)
974 dev_err(&dev->intf->dev,
975 "failed to initialize vbi media entity!\n");
978 /* Webcams don't have input connectors */
979 if (dev->board.is_webcam)
980 return;
982 /* Create entities for each input connector */
983 for (i = 0; i < MAX_EM28XX_INPUT; i++) {
984 struct media_entity *ent = &dev->input_ent[i];
986 if (!INPUT(i)->type)
987 break;
989 ent->name = iname[INPUT(i)->type];
990 ent->flags = MEDIA_ENT_FL_CONNECTOR;
991 dev->input_pad[i].flags = MEDIA_PAD_FL_SOURCE;
993 switch (INPUT(i)->type) {
994 case EM28XX_VMUX_COMPOSITE:
995 ent->function = MEDIA_ENT_F_CONN_COMPOSITE;
996 break;
997 case EM28XX_VMUX_SVIDEO:
998 ent->function = MEDIA_ENT_F_CONN_SVIDEO;
999 break;
1000 default: /* EM28XX_VMUX_TELEVISION or EM28XX_RADIO */
1001 if (dev->tuner_type != TUNER_ABSENT)
1002 ent->function = MEDIA_ENT_F_CONN_RF;
1003 break;
1006 ret = media_entity_pads_init(ent, 1, &dev->input_pad[i]);
1007 if (ret < 0)
1008 dev_err(&dev->intf->dev,
1009 "failed to initialize input pad[%d]!\n", i);
1011 ret = media_device_register_entity(dev->media_dev, ent);
1012 if (ret < 0)
1013 dev_err(&dev->intf->dev,
1014 "failed to register input entity %d!\n", i);
1016 #endif
1020 /* ------------------------------------------------------------------
1021 Videobuf2 operations
1022 ------------------------------------------------------------------*/
1024 static int queue_setup(struct vb2_queue *vq,
1025 unsigned int *nbuffers, unsigned int *nplanes,
1026 unsigned int sizes[], struct device *alloc_devs[])
1028 struct em28xx *dev = vb2_get_drv_priv(vq);
1029 struct em28xx_v4l2 *v4l2 = dev->v4l2;
1030 unsigned long size =
1031 (v4l2->width * v4l2->height * v4l2->format->depth + 7) >> 3;
1033 if (*nplanes)
1034 return sizes[0] < size ? -EINVAL : 0;
1035 *nplanes = 1;
1036 sizes[0] = size;
1038 em28xx_enable_analog_tuner(dev);
1040 return 0;
1043 static int
1044 buffer_prepare(struct vb2_buffer *vb)
1046 struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
1047 struct em28xx *dev = vb2_get_drv_priv(vb->vb2_queue);
1048 struct em28xx_v4l2 *v4l2 = dev->v4l2;
1049 unsigned long size;
1051 em28xx_videodbg("%s, field=%d\n", __func__, vbuf->field);
1053 size = (v4l2->width * v4l2->height * v4l2->format->depth + 7) >> 3;
1055 if (vb2_plane_size(vb, 0) < size) {
1056 em28xx_videodbg("%s data will not fit into plane (%lu < %lu)\n",
1057 __func__, vb2_plane_size(vb, 0), size);
1058 return -EINVAL;
1060 vb2_set_plane_payload(vb, 0, size);
1062 return 0;
1065 int em28xx_start_analog_streaming(struct vb2_queue *vq, unsigned int count)
1067 struct em28xx *dev = vb2_get_drv_priv(vq);
1068 struct em28xx_v4l2 *v4l2 = dev->v4l2;
1069 struct v4l2_frequency f;
1070 struct v4l2_fh *owner;
1071 int rc = 0;
1073 em28xx_videodbg("%s\n", __func__);
1075 /* Make sure streaming is not already in progress for this type
1076 of filehandle (e.g. video, vbi) */
1077 rc = res_get(dev, vq->type);
1078 if (rc)
1079 return rc;
1081 if (v4l2->streaming_users == 0) {
1082 /* First active streaming user, so allocate all the URBs */
1084 /* Allocate the USB bandwidth */
1085 em28xx_set_alternate(dev);
1087 /* Needed, since GPIO might have disabled power of
1088 some i2c device
1090 em28xx_wake_i2c(dev);
1092 v4l2->capture_type = -1;
1093 rc = em28xx_init_usb_xfer(dev, EM28XX_ANALOG_MODE,
1094 dev->analog_xfer_bulk,
1095 EM28XX_NUM_BUFS,
1096 dev->max_pkt_size,
1097 dev->packet_multiplier,
1098 em28xx_urb_data_copy);
1099 if (rc < 0)
1100 return rc;
1103 * djh: it's not clear whether this code is still needed. I'm
1104 * leaving it in here for now entirely out of concern for
1105 * backward compatibility (the old code did it)
1108 /* Ask tuner to go to analog or radio mode */
1109 memset(&f, 0, sizeof(f));
1110 f.frequency = v4l2->frequency;
1111 owner = (struct v4l2_fh *)vq->owner;
1112 if (owner && owner->vdev->vfl_type == VFL_TYPE_RADIO)
1113 f.type = V4L2_TUNER_RADIO;
1114 else
1115 f.type = V4L2_TUNER_ANALOG_TV;
1116 v4l2_device_call_all(&v4l2->v4l2_dev,
1117 0, tuner, s_frequency, &f);
1119 /* Enable video stream at TV decoder */
1120 v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_stream, 1);
1123 v4l2->streaming_users++;
1125 return rc;
1128 static void em28xx_stop_streaming(struct vb2_queue *vq)
1130 struct em28xx *dev = vb2_get_drv_priv(vq);
1131 struct em28xx_v4l2 *v4l2 = dev->v4l2;
1132 struct em28xx_dmaqueue *vidq = &dev->vidq;
1133 unsigned long flags = 0;
1135 em28xx_videodbg("%s\n", __func__);
1137 res_free(dev, vq->type);
1139 if (v4l2->streaming_users-- == 1) {
1140 /* Disable video stream at TV decoder */
1141 v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_stream, 0);
1143 /* Last active user, so shutdown all the URBS */
1144 em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);
1147 spin_lock_irqsave(&dev->slock, flags);
1148 if (dev->usb_ctl.vid_buf != NULL) {
1149 vb2_buffer_done(&dev->usb_ctl.vid_buf->vb.vb2_buf,
1150 VB2_BUF_STATE_ERROR);
1151 dev->usb_ctl.vid_buf = NULL;
1153 while (!list_empty(&vidq->active)) {
1154 struct em28xx_buffer *buf;
1156 buf = list_entry(vidq->active.next, struct em28xx_buffer, list);
1157 list_del(&buf->list);
1158 vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
1160 spin_unlock_irqrestore(&dev->slock, flags);
1163 void em28xx_stop_vbi_streaming(struct vb2_queue *vq)
1165 struct em28xx *dev = vb2_get_drv_priv(vq);
1166 struct em28xx_v4l2 *v4l2 = dev->v4l2;
1167 struct em28xx_dmaqueue *vbiq = &dev->vbiq;
1168 unsigned long flags = 0;
1170 em28xx_videodbg("%s\n", __func__);
1172 res_free(dev, vq->type);
1174 if (v4l2->streaming_users-- == 1) {
1175 /* Disable video stream at TV decoder */
1176 v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_stream, 0);
1178 /* Last active user, so shutdown all the URBS */
1179 em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);
1182 spin_lock_irqsave(&dev->slock, flags);
1183 if (dev->usb_ctl.vbi_buf != NULL) {
1184 vb2_buffer_done(&dev->usb_ctl.vbi_buf->vb.vb2_buf,
1185 VB2_BUF_STATE_ERROR);
1186 dev->usb_ctl.vbi_buf = NULL;
1188 while (!list_empty(&vbiq->active)) {
1189 struct em28xx_buffer *buf;
1191 buf = list_entry(vbiq->active.next, struct em28xx_buffer, list);
1192 list_del(&buf->list);
1193 vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
1195 spin_unlock_irqrestore(&dev->slock, flags);
1198 static void
1199 buffer_queue(struct vb2_buffer *vb)
1201 struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
1202 struct em28xx *dev = vb2_get_drv_priv(vb->vb2_queue);
1203 struct em28xx_buffer *buf =
1204 container_of(vbuf, struct em28xx_buffer, vb);
1205 struct em28xx_dmaqueue *vidq = &dev->vidq;
1206 unsigned long flags = 0;
1208 em28xx_videodbg("%s\n", __func__);
1209 buf->mem = vb2_plane_vaddr(vb, 0);
1210 buf->length = vb2_plane_size(vb, 0);
1212 spin_lock_irqsave(&dev->slock, flags);
1213 list_add_tail(&buf->list, &vidq->active);
1214 spin_unlock_irqrestore(&dev->slock, flags);
1217 static const struct vb2_ops em28xx_video_qops = {
1218 .queue_setup = queue_setup,
1219 .buf_prepare = buffer_prepare,
1220 .buf_queue = buffer_queue,
1221 .start_streaming = em28xx_start_analog_streaming,
1222 .stop_streaming = em28xx_stop_streaming,
1223 .wait_prepare = vb2_ops_wait_prepare,
1224 .wait_finish = vb2_ops_wait_finish,
1227 static int em28xx_vb2_setup(struct em28xx *dev)
1229 int rc;
1230 struct vb2_queue *q;
1231 struct em28xx_v4l2 *v4l2 = dev->v4l2;
1233 /* Setup Videobuf2 for Video capture */
1234 q = &v4l2->vb_vidq;
1235 q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1236 q->io_modes = VB2_READ | VB2_MMAP | VB2_USERPTR | VB2_DMABUF;
1237 q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1238 q->drv_priv = dev;
1239 q->buf_struct_size = sizeof(struct em28xx_buffer);
1240 q->ops = &em28xx_video_qops;
1241 q->mem_ops = &vb2_vmalloc_memops;
1243 rc = vb2_queue_init(q);
1244 if (rc < 0)
1245 return rc;
1247 /* Setup Videobuf2 for VBI capture */
1248 q = &v4l2->vb_vbiq;
1249 q->type = V4L2_BUF_TYPE_VBI_CAPTURE;
1250 q->io_modes = VB2_READ | VB2_MMAP | VB2_USERPTR;
1251 q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1252 q->drv_priv = dev;
1253 q->buf_struct_size = sizeof(struct em28xx_buffer);
1254 q->ops = &em28xx_vbi_qops;
1255 q->mem_ops = &vb2_vmalloc_memops;
1257 rc = vb2_queue_init(q);
1258 if (rc < 0)
1259 return rc;
1261 return 0;
1264 /********************* v4l2 interface **************************************/
1266 static void video_mux(struct em28xx *dev, int index)
1268 struct v4l2_device *v4l2_dev = &dev->v4l2->v4l2_dev;
1270 dev->ctl_input = index;
1271 dev->ctl_ainput = INPUT(index)->amux;
1272 dev->ctl_aoutput = INPUT(index)->aout;
1274 if (!dev->ctl_aoutput)
1275 dev->ctl_aoutput = EM28XX_AOUT_MASTER;
1277 v4l2_device_call_all(v4l2_dev, 0, video, s_routing,
1278 INPUT(index)->vmux, 0, 0);
1280 if (dev->board.has_msp34xx) {
1281 if (dev->i2s_speed) {
1282 v4l2_device_call_all(v4l2_dev, 0, audio,
1283 s_i2s_clock_freq, dev->i2s_speed);
1285 /* Note: this is msp3400 specific */
1286 v4l2_device_call_all(v4l2_dev, 0, audio, s_routing,
1287 dev->ctl_ainput,
1288 MSP_OUTPUT(MSP_SC_IN_DSP_SCART1), 0);
1291 if (dev->board.adecoder != EM28XX_NOADECODER) {
1292 v4l2_device_call_all(v4l2_dev, 0, audio, s_routing,
1293 dev->ctl_ainput, dev->ctl_aoutput, 0);
1296 em28xx_audio_analog_set(dev);
1299 static void em28xx_ctrl_notify(struct v4l2_ctrl *ctrl, void *priv)
1301 struct em28xx *dev = priv;
1304 * In the case of non-AC97 volume controls, we still need
1305 * to do some setups at em28xx, in order to mute/unmute
1306 * and to adjust audio volume. However, the value ranges
1307 * should be checked by the corresponding V4L subdriver.
1309 switch (ctrl->id) {
1310 case V4L2_CID_AUDIO_MUTE:
1311 dev->mute = ctrl->val;
1312 em28xx_audio_analog_set(dev);
1313 break;
1314 case V4L2_CID_AUDIO_VOLUME:
1315 dev->volume = ctrl->val;
1316 em28xx_audio_analog_set(dev);
1317 break;
1321 static int em28xx_s_ctrl(struct v4l2_ctrl *ctrl)
1323 struct em28xx_v4l2 *v4l2 =
1324 container_of(ctrl->handler, struct em28xx_v4l2, ctrl_handler);
1325 struct em28xx *dev = v4l2->dev;
1326 int ret = -EINVAL;
1328 switch (ctrl->id) {
1329 case V4L2_CID_AUDIO_MUTE:
1330 dev->mute = ctrl->val;
1331 ret = em28xx_audio_analog_set(dev);
1332 break;
1333 case V4L2_CID_AUDIO_VOLUME:
1334 dev->volume = ctrl->val;
1335 ret = em28xx_audio_analog_set(dev);
1336 break;
1337 case V4L2_CID_CONTRAST:
1338 ret = em28xx_write_reg(dev, EM28XX_R20_YGAIN, ctrl->val);
1339 break;
1340 case V4L2_CID_BRIGHTNESS:
1341 ret = em28xx_write_reg(dev, EM28XX_R21_YOFFSET, ctrl->val);
1342 break;
1343 case V4L2_CID_SATURATION:
1344 ret = em28xx_write_reg(dev, EM28XX_R22_UVGAIN, ctrl->val);
1345 break;
1346 case V4L2_CID_BLUE_BALANCE:
1347 ret = em28xx_write_reg(dev, EM28XX_R23_UOFFSET, ctrl->val);
1348 break;
1349 case V4L2_CID_RED_BALANCE:
1350 ret = em28xx_write_reg(dev, EM28XX_R24_VOFFSET, ctrl->val);
1351 break;
1352 case V4L2_CID_SHARPNESS:
1353 ret = em28xx_write_reg(dev, EM28XX_R25_SHARPNESS, ctrl->val);
1354 break;
1357 return (ret < 0) ? ret : 0;
1360 static const struct v4l2_ctrl_ops em28xx_ctrl_ops = {
1361 .s_ctrl = em28xx_s_ctrl,
1364 static void size_to_scale(struct em28xx *dev,
1365 unsigned int width, unsigned int height,
1366 unsigned int *hscale, unsigned int *vscale)
1368 unsigned int maxw = norm_maxw(dev);
1369 unsigned int maxh = norm_maxh(dev);
1371 *hscale = (((unsigned long)maxw) << 12) / width - 4096L;
1372 if (*hscale > EM28XX_HVSCALE_MAX)
1373 *hscale = EM28XX_HVSCALE_MAX;
1375 *vscale = (((unsigned long)maxh) << 12) / height - 4096L;
1376 if (*vscale > EM28XX_HVSCALE_MAX)
1377 *vscale = EM28XX_HVSCALE_MAX;
1380 static void scale_to_size(struct em28xx *dev,
1381 unsigned int hscale, unsigned int vscale,
1382 unsigned int *width, unsigned int *height)
1384 unsigned int maxw = norm_maxw(dev);
1385 unsigned int maxh = norm_maxh(dev);
1387 *width = (((unsigned long)maxw) << 12) / (hscale + 4096L);
1388 *height = (((unsigned long)maxh) << 12) / (vscale + 4096L);
1390 /* Don't let width or height to be zero */
1391 if (*width < 1)
1392 *width = 1;
1393 if (*height < 1)
1394 *height = 1;
1397 /* ------------------------------------------------------------------
1398 IOCTL vidioc handling
1399 ------------------------------------------------------------------*/
1401 static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
1402 struct v4l2_format *f)
1404 struct em28xx *dev = video_drvdata(file);
1405 struct em28xx_v4l2 *v4l2 = dev->v4l2;
1407 f->fmt.pix.width = v4l2->width;
1408 f->fmt.pix.height = v4l2->height;
1409 f->fmt.pix.pixelformat = v4l2->format->fourcc;
1410 f->fmt.pix.bytesperline = (v4l2->width * v4l2->format->depth + 7) >> 3;
1411 f->fmt.pix.sizeimage = f->fmt.pix.bytesperline * v4l2->height;
1412 f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
1414 /* FIXME: TOP? NONE? BOTTOM? ALTENATE? */
1415 if (v4l2->progressive)
1416 f->fmt.pix.field = V4L2_FIELD_NONE;
1417 else
1418 f->fmt.pix.field = v4l2->interlaced_fieldmode ?
1419 V4L2_FIELD_INTERLACED : V4L2_FIELD_TOP;
1420 return 0;
1423 static struct em28xx_fmt *format_by_fourcc(unsigned int fourcc)
1425 unsigned int i;
1427 for (i = 0; i < ARRAY_SIZE(format); i++)
1428 if (format[i].fourcc == fourcc)
1429 return &format[i];
1431 return NULL;
1434 static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
1435 struct v4l2_format *f)
1437 struct em28xx *dev = video_drvdata(file);
1438 struct em28xx_v4l2 *v4l2 = dev->v4l2;
1439 unsigned int width = f->fmt.pix.width;
1440 unsigned int height = f->fmt.pix.height;
1441 unsigned int maxw = norm_maxw(dev);
1442 unsigned int maxh = norm_maxh(dev);
1443 unsigned int hscale, vscale;
1444 struct em28xx_fmt *fmt;
1446 fmt = format_by_fourcc(f->fmt.pix.pixelformat);
1447 if (!fmt) {
1448 em28xx_videodbg("Fourcc format (%08x) invalid.\n",
1449 f->fmt.pix.pixelformat);
1450 return -EINVAL;
1453 if (dev->board.is_em2800) {
1454 /* the em2800 can only scale down to 50% */
1455 height = height > (3 * maxh / 4) ? maxh : maxh / 2;
1456 width = width > (3 * maxw / 4) ? maxw : maxw / 2;
1458 * MaxPacketSize for em2800 is too small to capture at full
1459 * resolution use half of maxw as the scaler can only scale
1460 * to 50%
1462 if (width == maxw && height == maxh)
1463 width /= 2;
1464 } else {
1465 /* width must even because of the YUYV format
1466 height must be even because of interlacing */
1467 v4l_bound_align_image(&width, 48, maxw, 1, &height, 32, maxh,
1468 1, 0);
1470 /* Avoid division by zero at size_to_scale */
1471 if (width < 1)
1472 width = 1;
1473 if (height < 1)
1474 height = 1;
1476 size_to_scale(dev, width, height, &hscale, &vscale);
1477 scale_to_size(dev, hscale, vscale, &width, &height);
1479 f->fmt.pix.width = width;
1480 f->fmt.pix.height = height;
1481 f->fmt.pix.pixelformat = fmt->fourcc;
1482 f->fmt.pix.bytesperline = (width * fmt->depth + 7) >> 3;
1483 f->fmt.pix.sizeimage = f->fmt.pix.bytesperline * height;
1484 f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
1485 if (v4l2->progressive)
1486 f->fmt.pix.field = V4L2_FIELD_NONE;
1487 else
1488 f->fmt.pix.field = v4l2->interlaced_fieldmode ?
1489 V4L2_FIELD_INTERLACED : V4L2_FIELD_TOP;
1490 f->fmt.pix.priv = 0;
1492 return 0;
1495 static int em28xx_set_video_format(struct em28xx *dev, unsigned int fourcc,
1496 unsigned width, unsigned height)
1498 struct em28xx_fmt *fmt;
1499 struct em28xx_v4l2 *v4l2 = dev->v4l2;
1501 fmt = format_by_fourcc(fourcc);
1502 if (!fmt)
1503 return -EINVAL;
1505 v4l2->format = fmt;
1506 v4l2->width = width;
1507 v4l2->height = height;
1509 /* set new image size */
1510 size_to_scale(dev, v4l2->width, v4l2->height,
1511 &v4l2->hscale, &v4l2->vscale);
1513 em28xx_resolution_set(dev);
1515 return 0;
1518 static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
1519 struct v4l2_format *f)
1521 struct em28xx *dev = video_drvdata(file);
1522 struct em28xx_v4l2 *v4l2 = dev->v4l2;
1524 if (vb2_is_busy(&v4l2->vb_vidq))
1525 return -EBUSY;
1527 vidioc_try_fmt_vid_cap(file, priv, f);
1529 return em28xx_set_video_format(dev, f->fmt.pix.pixelformat,
1530 f->fmt.pix.width, f->fmt.pix.height);
1533 static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *norm)
1535 struct em28xx *dev = video_drvdata(file);
1537 *norm = dev->v4l2->norm;
1539 return 0;
1542 static int vidioc_querystd(struct file *file, void *priv, v4l2_std_id *norm)
1544 struct em28xx *dev = video_drvdata(file);
1546 v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, video, querystd, norm);
1548 return 0;
1551 static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm)
1553 struct em28xx *dev = video_drvdata(file);
1554 struct em28xx_v4l2 *v4l2 = dev->v4l2;
1555 struct v4l2_format f;
1557 if (norm == v4l2->norm)
1558 return 0;
1560 if (v4l2->streaming_users > 0)
1561 return -EBUSY;
1563 v4l2->norm = norm;
1565 /* Adjusts width/height, if needed */
1566 f.fmt.pix.width = 720;
1567 f.fmt.pix.height = (norm & V4L2_STD_525_60) ? 480 : 576;
1568 vidioc_try_fmt_vid_cap(file, priv, &f);
1570 /* set new image size */
1571 v4l2->width = f.fmt.pix.width;
1572 v4l2->height = f.fmt.pix.height;
1573 size_to_scale(dev, v4l2->width, v4l2->height,
1574 &v4l2->hscale, &v4l2->vscale);
1576 em28xx_resolution_set(dev);
1577 v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_std, v4l2->norm);
1579 return 0;
1582 static int vidioc_g_parm(struct file *file, void *priv,
1583 struct v4l2_streamparm *p)
1585 struct em28xx *dev = video_drvdata(file);
1586 struct em28xx_v4l2 *v4l2 = dev->v4l2;
1587 int rc = 0;
1589 p->parm.capture.readbuffers = EM28XX_MIN_BUF;
1590 if (dev->board.is_webcam)
1591 rc = v4l2_device_call_until_err(&v4l2->v4l2_dev, 0,
1592 video, g_parm, p);
1593 else
1594 v4l2_video_std_frame_period(v4l2->norm,
1595 &p->parm.capture.timeperframe);
1597 return rc;
1600 static int vidioc_s_parm(struct file *file, void *priv,
1601 struct v4l2_streamparm *p)
1603 struct em28xx *dev = video_drvdata(file);
1605 p->parm.capture.readbuffers = EM28XX_MIN_BUF;
1606 return v4l2_device_call_until_err(&dev->v4l2->v4l2_dev,
1607 0, video, s_parm, p);
1610 static int vidioc_enum_input(struct file *file, void *priv,
1611 struct v4l2_input *i)
1613 struct em28xx *dev = video_drvdata(file);
1614 unsigned int n;
1616 n = i->index;
1617 if (n >= MAX_EM28XX_INPUT)
1618 return -EINVAL;
1619 if (0 == INPUT(n)->type)
1620 return -EINVAL;
1622 i->index = n;
1623 i->type = V4L2_INPUT_TYPE_CAMERA;
1625 strcpy(i->name, iname[INPUT(n)->type]);
1627 if ((EM28XX_VMUX_TELEVISION == INPUT(n)->type))
1628 i->type = V4L2_INPUT_TYPE_TUNER;
1630 i->std = dev->v4l2->vdev.tvnorms;
1631 /* webcams do not have the STD API */
1632 if (dev->board.is_webcam)
1633 i->capabilities = 0;
1635 return 0;
1638 static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
1640 struct em28xx *dev = video_drvdata(file);
1642 *i = dev->ctl_input;
1644 return 0;
1647 static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
1649 struct em28xx *dev = video_drvdata(file);
1651 if (i >= MAX_EM28XX_INPUT)
1652 return -EINVAL;
1653 if (0 == INPUT(i)->type)
1654 return -EINVAL;
1656 video_mux(dev, i);
1657 return 0;
1660 static int vidioc_g_audio(struct file *file, void *priv, struct v4l2_audio *a)
1662 struct em28xx *dev = video_drvdata(file);
1664 switch (a->index) {
1665 case EM28XX_AMUX_VIDEO:
1666 strcpy(a->name, "Television");
1667 break;
1668 case EM28XX_AMUX_LINE_IN:
1669 strcpy(a->name, "Line In");
1670 break;
1671 case EM28XX_AMUX_VIDEO2:
1672 strcpy(a->name, "Television alt");
1673 break;
1674 case EM28XX_AMUX_PHONE:
1675 strcpy(a->name, "Phone");
1676 break;
1677 case EM28XX_AMUX_MIC:
1678 strcpy(a->name, "Mic");
1679 break;
1680 case EM28XX_AMUX_CD:
1681 strcpy(a->name, "CD");
1682 break;
1683 case EM28XX_AMUX_AUX:
1684 strcpy(a->name, "Aux");
1685 break;
1686 case EM28XX_AMUX_PCM_OUT:
1687 strcpy(a->name, "PCM");
1688 break;
1689 default:
1690 return -EINVAL;
1693 a->index = dev->ctl_ainput;
1694 a->capability = V4L2_AUDCAP_STEREO;
1696 return 0;
1699 static int vidioc_s_audio(struct file *file, void *priv, const struct v4l2_audio *a)
1701 struct em28xx *dev = video_drvdata(file);
1703 if (a->index >= MAX_EM28XX_INPUT)
1704 return -EINVAL;
1705 if (0 == INPUT(a->index)->type)
1706 return -EINVAL;
1708 dev->ctl_ainput = INPUT(a->index)->amux;
1709 dev->ctl_aoutput = INPUT(a->index)->aout;
1711 if (!dev->ctl_aoutput)
1712 dev->ctl_aoutput = EM28XX_AOUT_MASTER;
1714 return 0;
1717 static int vidioc_g_tuner(struct file *file, void *priv,
1718 struct v4l2_tuner *t)
1720 struct em28xx *dev = video_drvdata(file);
1722 if (0 != t->index)
1723 return -EINVAL;
1725 strcpy(t->name, "Tuner");
1727 v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, g_tuner, t);
1728 return 0;
1731 static int vidioc_s_tuner(struct file *file, void *priv,
1732 const struct v4l2_tuner *t)
1734 struct em28xx *dev = video_drvdata(file);
1736 if (0 != t->index)
1737 return -EINVAL;
1739 v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, s_tuner, t);
1740 return 0;
1743 static int vidioc_g_frequency(struct file *file, void *priv,
1744 struct v4l2_frequency *f)
1746 struct em28xx *dev = video_drvdata(file);
1747 struct em28xx_v4l2 *v4l2 = dev->v4l2;
1749 if (0 != f->tuner)
1750 return -EINVAL;
1752 f->frequency = v4l2->frequency;
1753 return 0;
1756 static int vidioc_s_frequency(struct file *file, void *priv,
1757 const struct v4l2_frequency *f)
1759 struct v4l2_frequency new_freq = *f;
1760 struct em28xx *dev = video_drvdata(file);
1761 struct em28xx_v4l2 *v4l2 = dev->v4l2;
1763 if (0 != f->tuner)
1764 return -EINVAL;
1766 v4l2_device_call_all(&v4l2->v4l2_dev, 0, tuner, s_frequency, f);
1767 v4l2_device_call_all(&v4l2->v4l2_dev, 0, tuner, g_frequency, &new_freq);
1768 v4l2->frequency = new_freq.frequency;
1770 return 0;
1773 #ifdef CONFIG_VIDEO_ADV_DEBUG
1774 static int vidioc_g_chip_info(struct file *file, void *priv,
1775 struct v4l2_dbg_chip_info *chip)
1777 struct em28xx *dev = video_drvdata(file);
1779 if (chip->match.addr > 1)
1780 return -EINVAL;
1781 if (chip->match.addr == 1)
1782 strlcpy(chip->name, "ac97", sizeof(chip->name));
1783 else
1784 strlcpy(chip->name,
1785 dev->v4l2->v4l2_dev.name, sizeof(chip->name));
1786 return 0;
1789 static int em28xx_reg_len(int reg)
1791 switch (reg) {
1792 case EM28XX_R40_AC97LSB:
1793 case EM28XX_R30_HSCALELOW:
1794 case EM28XX_R32_VSCALELOW:
1795 return 2;
1796 default:
1797 return 1;
1801 static int vidioc_g_register(struct file *file, void *priv,
1802 struct v4l2_dbg_register *reg)
1804 struct em28xx *dev = video_drvdata(file);
1805 int ret;
1807 if (reg->match.addr > 1)
1808 return -EINVAL;
1809 if (reg->match.addr) {
1810 ret = em28xx_read_ac97(dev, reg->reg);
1811 if (ret < 0)
1812 return ret;
1814 reg->val = ret;
1815 reg->size = 1;
1816 return 0;
1819 /* Match host */
1820 reg->size = em28xx_reg_len(reg->reg);
1821 if (reg->size == 1) {
1822 ret = em28xx_read_reg(dev, reg->reg);
1824 if (ret < 0)
1825 return ret;
1827 reg->val = ret;
1828 } else {
1829 __le16 val = 0;
1831 ret = dev->em28xx_read_reg_req_len(dev, USB_REQ_GET_STATUS,
1832 reg->reg, (char *)&val, 2);
1833 if (ret < 0)
1834 return ret;
1836 reg->val = le16_to_cpu(val);
1839 return 0;
1842 static int vidioc_s_register(struct file *file, void *priv,
1843 const struct v4l2_dbg_register *reg)
1845 struct em28xx *dev = video_drvdata(file);
1846 __le16 buf;
1848 if (reg->match.addr > 1)
1849 return -EINVAL;
1850 if (reg->match.addr)
1851 return em28xx_write_ac97(dev, reg->reg, reg->val);
1853 /* Match host */
1854 buf = cpu_to_le16(reg->val);
1856 return em28xx_write_regs(dev, reg->reg, (char *)&buf,
1857 em28xx_reg_len(reg->reg));
1859 #endif
1861 static int vidioc_querycap(struct file *file, void *priv,
1862 struct v4l2_capability *cap)
1864 struct video_device *vdev = video_devdata(file);
1865 struct em28xx *dev = video_drvdata(file);
1866 struct em28xx_v4l2 *v4l2 = dev->v4l2;
1867 struct usb_device *udev = interface_to_usbdev(dev->intf);
1869 strlcpy(cap->driver, "em28xx", sizeof(cap->driver));
1870 strlcpy(cap->card, em28xx_boards[dev->model].name, sizeof(cap->card));
1871 usb_make_path(udev, cap->bus_info, sizeof(cap->bus_info));
1873 if (vdev->vfl_type == VFL_TYPE_GRABBER)
1874 cap->device_caps = V4L2_CAP_READWRITE |
1875 V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
1876 else if (vdev->vfl_type == VFL_TYPE_RADIO)
1877 cap->device_caps = V4L2_CAP_RADIO;
1878 else
1879 cap->device_caps = V4L2_CAP_READWRITE | V4L2_CAP_VBI_CAPTURE;
1881 if (dev->int_audio_type != EM28XX_INT_AUDIO_NONE)
1882 cap->device_caps |= V4L2_CAP_AUDIO;
1884 if (dev->tuner_type != TUNER_ABSENT)
1885 cap->device_caps |= V4L2_CAP_TUNER;
1887 cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS |
1888 V4L2_CAP_READWRITE | V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
1889 if (video_is_registered(&v4l2->vbi_dev))
1890 cap->capabilities |= V4L2_CAP_VBI_CAPTURE;
1891 if (video_is_registered(&v4l2->radio_dev))
1892 cap->capabilities |= V4L2_CAP_RADIO;
1893 return 0;
1896 static int vidioc_enum_fmt_vid_cap(struct file *file, void *priv,
1897 struct v4l2_fmtdesc *f)
1899 if (unlikely(f->index >= ARRAY_SIZE(format)))
1900 return -EINVAL;
1902 strlcpy(f->description, format[f->index].name, sizeof(f->description));
1903 f->pixelformat = format[f->index].fourcc;
1905 return 0;
1908 static int vidioc_enum_framesizes(struct file *file, void *priv,
1909 struct v4l2_frmsizeenum *fsize)
1911 struct em28xx *dev = video_drvdata(file);
1912 struct em28xx_fmt *fmt;
1913 unsigned int maxw = norm_maxw(dev);
1914 unsigned int maxh = norm_maxh(dev);
1916 fmt = format_by_fourcc(fsize->pixel_format);
1917 if (!fmt) {
1918 em28xx_videodbg("Fourcc format (%08x) invalid.\n",
1919 fsize->pixel_format);
1920 return -EINVAL;
1923 if (dev->board.is_em2800) {
1924 if (fsize->index > 1)
1925 return -EINVAL;
1926 fsize->type = V4L2_FRMSIZE_TYPE_DISCRETE;
1927 fsize->discrete.width = maxw / (1 + fsize->index);
1928 fsize->discrete.height = maxh / (1 + fsize->index);
1929 return 0;
1932 if (fsize->index != 0)
1933 return -EINVAL;
1935 /* Report a continuous range */
1936 fsize->type = V4L2_FRMSIZE_TYPE_STEPWISE;
1937 scale_to_size(dev, EM28XX_HVSCALE_MAX, EM28XX_HVSCALE_MAX,
1938 &fsize->stepwise.min_width, &fsize->stepwise.min_height);
1939 if (fsize->stepwise.min_width < 48)
1940 fsize->stepwise.min_width = 48;
1941 if (fsize->stepwise.min_height < 38)
1942 fsize->stepwise.min_height = 38;
1943 fsize->stepwise.max_width = maxw;
1944 fsize->stepwise.max_height = maxh;
1945 fsize->stepwise.step_width = 1;
1946 fsize->stepwise.step_height = 1;
1947 return 0;
1950 /* RAW VBI ioctls */
1952 static int vidioc_g_fmt_vbi_cap(struct file *file, void *priv,
1953 struct v4l2_format *format)
1955 struct em28xx *dev = video_drvdata(file);
1956 struct em28xx_v4l2 *v4l2 = dev->v4l2;
1958 format->fmt.vbi.samples_per_line = v4l2->vbi_width;
1959 format->fmt.vbi.sample_format = V4L2_PIX_FMT_GREY;
1960 format->fmt.vbi.offset = 0;
1961 format->fmt.vbi.flags = 0;
1962 format->fmt.vbi.sampling_rate = 6750000 * 4 / 2;
1963 format->fmt.vbi.count[0] = v4l2->vbi_height;
1964 format->fmt.vbi.count[1] = v4l2->vbi_height;
1965 memset(format->fmt.vbi.reserved, 0, sizeof(format->fmt.vbi.reserved));
1967 /* Varies by video standard (NTSC, PAL, etc.) */
1968 if (v4l2->norm & V4L2_STD_525_60) {
1969 /* NTSC */
1970 format->fmt.vbi.start[0] = 10;
1971 format->fmt.vbi.start[1] = 273;
1972 } else if (v4l2->norm & V4L2_STD_625_50) {
1973 /* PAL */
1974 format->fmt.vbi.start[0] = 6;
1975 format->fmt.vbi.start[1] = 318;
1978 return 0;
1981 /* ----------------------------------------------------------- */
1982 /* RADIO ESPECIFIC IOCTLS */
1983 /* ----------------------------------------------------------- */
1985 static int radio_g_tuner(struct file *file, void *priv,
1986 struct v4l2_tuner *t)
1988 struct em28xx *dev = video_drvdata(file);
1990 if (unlikely(t->index > 0))
1991 return -EINVAL;
1993 strcpy(t->name, "Radio");
1995 v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, g_tuner, t);
1997 return 0;
2000 static int radio_s_tuner(struct file *file, void *priv,
2001 const struct v4l2_tuner *t)
2003 struct em28xx *dev = video_drvdata(file);
2005 if (0 != t->index)
2006 return -EINVAL;
2008 v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, s_tuner, t);
2010 return 0;
2014 * em28xx_free_v4l2() - Free struct em28xx_v4l2
2016 * @ref: struct kref for struct em28xx_v4l2
2018 * Called when all users of struct em28xx_v4l2 are gone
2020 static void em28xx_free_v4l2(struct kref *ref)
2022 struct em28xx_v4l2 *v4l2 = container_of(ref, struct em28xx_v4l2, ref);
2024 v4l2->dev->v4l2 = NULL;
2025 kfree(v4l2);
2029 * em28xx_v4l2_open()
2030 * inits the device and starts isoc transfer
2032 static int em28xx_v4l2_open(struct file *filp)
2034 struct video_device *vdev = video_devdata(filp);
2035 struct em28xx *dev = video_drvdata(filp);
2036 struct em28xx_v4l2 *v4l2 = dev->v4l2;
2037 enum v4l2_buf_type fh_type = 0;
2038 int ret;
2040 switch (vdev->vfl_type) {
2041 case VFL_TYPE_GRABBER:
2042 fh_type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
2043 break;
2044 case VFL_TYPE_VBI:
2045 fh_type = V4L2_BUF_TYPE_VBI_CAPTURE;
2046 break;
2047 case VFL_TYPE_RADIO:
2048 break;
2049 default:
2050 return -EINVAL;
2053 em28xx_videodbg("open dev=%s type=%s users=%d\n",
2054 video_device_node_name(vdev), v4l2_type_names[fh_type],
2055 v4l2->users);
2057 if (mutex_lock_interruptible(&dev->lock))
2058 return -ERESTARTSYS;
2060 ret = v4l2_fh_open(filp);
2061 if (ret) {
2062 dev_err(&dev->intf->dev,
2063 "%s: v4l2_fh_open() returned error %d\n",
2064 __func__, ret);
2065 mutex_unlock(&dev->lock);
2066 return ret;
2069 if (v4l2->users == 0) {
2070 em28xx_set_mode(dev, EM28XX_ANALOG_MODE);
2072 if (vdev->vfl_type != VFL_TYPE_RADIO)
2073 em28xx_resolution_set(dev);
2076 * Needed, since GPIO might have disabled power
2077 * of some i2c devices
2079 em28xx_wake_i2c(dev);
2082 if (vdev->vfl_type == VFL_TYPE_RADIO) {
2083 em28xx_videodbg("video_open: setting radio device\n");
2084 v4l2_device_call_all(&v4l2->v4l2_dev, 0, tuner, s_radio);
2087 kref_get(&dev->ref);
2088 kref_get(&v4l2->ref);
2089 v4l2->users++;
2091 mutex_unlock(&dev->lock);
2093 return 0;
2097 * em28xx_v4l2_fini()
2098 * unregisters the v4l2,i2c and usb devices
2099 * called when the device gets disconected or at module unload
2101 static int em28xx_v4l2_fini(struct em28xx *dev)
2103 struct em28xx_v4l2 *v4l2 = dev->v4l2;
2105 if (dev->is_audio_only) {
2106 /* Shouldn't initialize IR for this interface */
2107 return 0;
2110 if (!dev->has_video) {
2111 /* This device does not support the v4l2 extension */
2112 return 0;
2115 if (v4l2 == NULL)
2116 return 0;
2118 dev_info(&dev->intf->dev, "Closing video extension\n");
2120 mutex_lock(&dev->lock);
2122 v4l2_device_disconnect(&v4l2->v4l2_dev);
2124 em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);
2126 em28xx_v4l2_media_release(dev);
2128 if (video_is_registered(&v4l2->radio_dev)) {
2129 dev_info(&dev->intf->dev, "V4L2 device %s deregistered\n",
2130 video_device_node_name(&v4l2->radio_dev));
2131 video_unregister_device(&v4l2->radio_dev);
2133 if (video_is_registered(&v4l2->vbi_dev)) {
2134 dev_info(&dev->intf->dev, "V4L2 device %s deregistered\n",
2135 video_device_node_name(&v4l2->vbi_dev));
2136 video_unregister_device(&v4l2->vbi_dev);
2138 if (video_is_registered(&v4l2->vdev)) {
2139 dev_info(&dev->intf->dev, "V4L2 device %s deregistered\n",
2140 video_device_node_name(&v4l2->vdev));
2141 video_unregister_device(&v4l2->vdev);
2144 v4l2_ctrl_handler_free(&v4l2->ctrl_handler);
2145 v4l2_device_unregister(&v4l2->v4l2_dev);
2147 kref_put(&v4l2->ref, em28xx_free_v4l2);
2149 mutex_unlock(&dev->lock);
2151 kref_put(&dev->ref, em28xx_free_device);
2153 return 0;
2156 static int em28xx_v4l2_suspend(struct em28xx *dev)
2158 if (dev->is_audio_only)
2159 return 0;
2161 if (!dev->has_video)
2162 return 0;
2164 dev_info(&dev->intf->dev, "Suspending video extension\n");
2165 em28xx_stop_urbs(dev);
2166 return 0;
2169 static int em28xx_v4l2_resume(struct em28xx *dev)
2171 if (dev->is_audio_only)
2172 return 0;
2174 if (!dev->has_video)
2175 return 0;
2177 dev_info(&dev->intf->dev, "Resuming video extension\n");
2178 /* what do we do here */
2179 return 0;
2183 * em28xx_v4l2_close()
2184 * stops streaming and deallocates all resources allocated by the v4l2
2185 * calls and ioctls
2187 static int em28xx_v4l2_close(struct file *filp)
2189 struct em28xx *dev = video_drvdata(filp);
2190 struct em28xx_v4l2 *v4l2 = dev->v4l2;
2191 struct usb_device *udev = interface_to_usbdev(dev->intf);
2192 int errCode;
2194 em28xx_videodbg("users=%d\n", v4l2->users);
2196 vb2_fop_release(filp);
2197 mutex_lock(&dev->lock);
2199 if (v4l2->users == 1) {
2200 /* No sense to try to write to the device */
2201 if (dev->disconnected)
2202 goto exit;
2204 /* Save some power by putting tuner to sleep */
2205 v4l2_device_call_all(&v4l2->v4l2_dev, 0, core, s_power, 0);
2207 /* do this before setting alternate! */
2208 em28xx_set_mode(dev, EM28XX_SUSPEND);
2210 /* set alternate 0 */
2211 dev->alt = 0;
2212 em28xx_videodbg("setting alternate 0\n");
2213 errCode = usb_set_interface(udev, 0, 0);
2214 if (errCode < 0) {
2215 dev_err(&dev->intf->dev,
2216 "cannot change alternate number to 0 (error=%i)\n",
2217 errCode);
2221 exit:
2222 v4l2->users--;
2223 kref_put(&v4l2->ref, em28xx_free_v4l2);
2224 mutex_unlock(&dev->lock);
2225 kref_put(&dev->ref, em28xx_free_device);
2227 return 0;
2230 static const struct v4l2_file_operations em28xx_v4l_fops = {
2231 .owner = THIS_MODULE,
2232 .open = em28xx_v4l2_open,
2233 .release = em28xx_v4l2_close,
2234 .read = vb2_fop_read,
2235 .poll = vb2_fop_poll,
2236 .mmap = vb2_fop_mmap,
2237 .unlocked_ioctl = video_ioctl2,
2240 static const struct v4l2_ioctl_ops video_ioctl_ops = {
2241 .vidioc_querycap = vidioc_querycap,
2242 .vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap,
2243 .vidioc_g_fmt_vid_cap = vidioc_g_fmt_vid_cap,
2244 .vidioc_try_fmt_vid_cap = vidioc_try_fmt_vid_cap,
2245 .vidioc_s_fmt_vid_cap = vidioc_s_fmt_vid_cap,
2246 .vidioc_g_fmt_vbi_cap = vidioc_g_fmt_vbi_cap,
2247 .vidioc_try_fmt_vbi_cap = vidioc_g_fmt_vbi_cap,
2248 .vidioc_s_fmt_vbi_cap = vidioc_g_fmt_vbi_cap,
2249 .vidioc_enum_framesizes = vidioc_enum_framesizes,
2250 .vidioc_g_audio = vidioc_g_audio,
2251 .vidioc_s_audio = vidioc_s_audio,
2253 .vidioc_reqbufs = vb2_ioctl_reqbufs,
2254 .vidioc_create_bufs = vb2_ioctl_create_bufs,
2255 .vidioc_prepare_buf = vb2_ioctl_prepare_buf,
2256 .vidioc_querybuf = vb2_ioctl_querybuf,
2257 .vidioc_qbuf = vb2_ioctl_qbuf,
2258 .vidioc_dqbuf = vb2_ioctl_dqbuf,
2260 .vidioc_g_std = vidioc_g_std,
2261 .vidioc_querystd = vidioc_querystd,
2262 .vidioc_s_std = vidioc_s_std,
2263 .vidioc_g_parm = vidioc_g_parm,
2264 .vidioc_s_parm = vidioc_s_parm,
2265 .vidioc_enum_input = vidioc_enum_input,
2266 .vidioc_g_input = vidioc_g_input,
2267 .vidioc_s_input = vidioc_s_input,
2268 .vidioc_streamon = vb2_ioctl_streamon,
2269 .vidioc_streamoff = vb2_ioctl_streamoff,
2270 .vidioc_g_tuner = vidioc_g_tuner,
2271 .vidioc_s_tuner = vidioc_s_tuner,
2272 .vidioc_g_frequency = vidioc_g_frequency,
2273 .vidioc_s_frequency = vidioc_s_frequency,
2274 .vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
2275 .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
2276 #ifdef CONFIG_VIDEO_ADV_DEBUG
2277 .vidioc_g_chip_info = vidioc_g_chip_info,
2278 .vidioc_g_register = vidioc_g_register,
2279 .vidioc_s_register = vidioc_s_register,
2280 #endif
2283 static const struct video_device em28xx_video_template = {
2284 .fops = &em28xx_v4l_fops,
2285 .ioctl_ops = &video_ioctl_ops,
2286 .release = video_device_release_empty,
2287 .tvnorms = V4L2_STD_ALL,
2290 static const struct v4l2_file_operations radio_fops = {
2291 .owner = THIS_MODULE,
2292 .open = em28xx_v4l2_open,
2293 .release = em28xx_v4l2_close,
2294 .unlocked_ioctl = video_ioctl2,
2297 static const struct v4l2_ioctl_ops radio_ioctl_ops = {
2298 .vidioc_querycap = vidioc_querycap,
2299 .vidioc_g_tuner = radio_g_tuner,
2300 .vidioc_s_tuner = radio_s_tuner,
2301 .vidioc_g_frequency = vidioc_g_frequency,
2302 .vidioc_s_frequency = vidioc_s_frequency,
2303 .vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
2304 .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
2305 #ifdef CONFIG_VIDEO_ADV_DEBUG
2306 .vidioc_g_chip_info = vidioc_g_chip_info,
2307 .vidioc_g_register = vidioc_g_register,
2308 .vidioc_s_register = vidioc_s_register,
2309 #endif
2312 static struct video_device em28xx_radio_template = {
2313 .fops = &radio_fops,
2314 .ioctl_ops = &radio_ioctl_ops,
2315 .release = video_device_release_empty,
2318 /* I2C possible address to saa7115, tvp5150, msp3400, tvaudio */
2319 static unsigned short saa711x_addrs[] = {
2320 0x4a >> 1, 0x48 >> 1, /* SAA7111, SAA7111A and SAA7113 */
2321 0x42 >> 1, 0x40 >> 1, /* SAA7114, SAA7115 and SAA7118 */
2322 I2C_CLIENT_END };
2324 static unsigned short tvp5150_addrs[] = {
2325 0xb8 >> 1,
2326 0xba >> 1,
2327 I2C_CLIENT_END
2330 static unsigned short msp3400_addrs[] = {
2331 0x80 >> 1,
2332 0x88 >> 1,
2333 I2C_CLIENT_END
2336 /******************************** usb interface ******************************/
2338 static void em28xx_vdev_init(struct em28xx *dev,
2339 struct video_device *vfd,
2340 const struct video_device *template,
2341 const char *type_name)
2343 *vfd = *template;
2344 vfd->v4l2_dev = &dev->v4l2->v4l2_dev;
2345 vfd->lock = &dev->lock;
2346 if (dev->board.is_webcam)
2347 vfd->tvnorms = 0;
2349 snprintf(vfd->name, sizeof(vfd->name), "%s %s",
2350 dev_name(&dev->intf->dev), type_name);
2352 video_set_drvdata(vfd, dev);
2355 static void em28xx_tuner_setup(struct em28xx *dev, unsigned short tuner_addr)
2357 struct em28xx_v4l2 *v4l2 = dev->v4l2;
2358 struct v4l2_device *v4l2_dev = &v4l2->v4l2_dev;
2359 struct tuner_setup tun_setup;
2360 struct v4l2_frequency f;
2362 memset(&tun_setup, 0, sizeof(tun_setup));
2364 tun_setup.mode_mask = T_ANALOG_TV | T_RADIO;
2365 tun_setup.tuner_callback = em28xx_tuner_callback;
2367 if (dev->board.radio.type) {
2368 tun_setup.type = dev->board.radio.type;
2369 tun_setup.addr = dev->board.radio_addr;
2371 v4l2_device_call_all(v4l2_dev,
2372 0, tuner, s_type_addr, &tun_setup);
2375 if ((dev->tuner_type != TUNER_ABSENT) && (dev->tuner_type)) {
2376 tun_setup.type = dev->tuner_type;
2377 tun_setup.addr = tuner_addr;
2379 v4l2_device_call_all(v4l2_dev,
2380 0, tuner, s_type_addr, &tun_setup);
2383 if (dev->board.tda9887_conf) {
2384 struct v4l2_priv_tun_config tda9887_cfg;
2386 tda9887_cfg.tuner = TUNER_TDA9887;
2387 tda9887_cfg.priv = &dev->board.tda9887_conf;
2389 v4l2_device_call_all(v4l2_dev,
2390 0, tuner, s_config, &tda9887_cfg);
2393 if (dev->tuner_type == TUNER_XC2028) {
2394 struct v4l2_priv_tun_config xc2028_cfg;
2395 struct xc2028_ctrl ctl;
2397 memset(&xc2028_cfg, 0, sizeof(xc2028_cfg));
2398 memset(&ctl, 0, sizeof(ctl));
2400 em28xx_setup_xc3028(dev, &ctl);
2402 xc2028_cfg.tuner = TUNER_XC2028;
2403 xc2028_cfg.priv = &ctl;
2405 v4l2_device_call_all(v4l2_dev, 0, tuner, s_config, &xc2028_cfg);
2408 /* configure tuner */
2409 f.tuner = 0;
2410 f.type = V4L2_TUNER_ANALOG_TV;
2411 f.frequency = 9076; /* just a magic number */
2412 v4l2->frequency = f.frequency;
2413 v4l2_device_call_all(v4l2_dev, 0, tuner, s_frequency, &f);
2416 static int em28xx_v4l2_init(struct em28xx *dev)
2418 u8 val;
2419 int ret;
2420 unsigned int maxw;
2421 struct v4l2_ctrl_handler *hdl;
2422 struct em28xx_v4l2 *v4l2;
2424 if (dev->is_audio_only) {
2425 /* Shouldn't initialize IR for this interface */
2426 return 0;
2429 if (!dev->has_video) {
2430 /* This device does not support the v4l2 extension */
2431 return 0;
2434 dev_info(&dev->intf->dev, "Registering V4L2 extension\n");
2436 mutex_lock(&dev->lock);
2438 v4l2 = kzalloc(sizeof(struct em28xx_v4l2), GFP_KERNEL);
2439 if (!v4l2) {
2440 mutex_unlock(&dev->lock);
2441 return -ENOMEM;
2443 kref_init(&v4l2->ref);
2444 v4l2->dev = dev;
2445 dev->v4l2 = v4l2;
2447 #ifdef CONFIG_MEDIA_CONTROLLER
2448 v4l2->v4l2_dev.mdev = dev->media_dev;
2449 #endif
2450 ret = v4l2_device_register(&dev->intf->dev, &v4l2->v4l2_dev);
2451 if (ret < 0) {
2452 dev_err(&dev->intf->dev,
2453 "Call to v4l2_device_register() failed!\n");
2454 goto err;
2457 hdl = &v4l2->ctrl_handler;
2458 v4l2_ctrl_handler_init(hdl, 8);
2459 v4l2->v4l2_dev.ctrl_handler = hdl;
2461 if (dev->board.is_webcam)
2462 v4l2->progressive = true;
2465 * Default format, used for tvp5150 or saa711x output formats
2467 v4l2->vinmode = EM28XX_VINMODE_YUV422_CbYCrY;
2468 v4l2->vinctl = EM28XX_VINCTRL_INTERLACED |
2469 EM28XX_VINCTRL_CCIR656_ENABLE;
2471 /* request some modules */
2473 if (dev->board.has_msp34xx)
2474 v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2475 &dev->i2c_adap[dev->def_i2c_bus],
2476 "msp3400", 0, msp3400_addrs);
2478 if (dev->board.decoder == EM28XX_SAA711X)
2479 v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2480 &dev->i2c_adap[dev->def_i2c_bus],
2481 "saa7115_auto", 0, saa711x_addrs);
2483 if (dev->board.decoder == EM28XX_TVP5150)
2484 v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2485 &dev->i2c_adap[dev->def_i2c_bus],
2486 "tvp5150", 0, tvp5150_addrs);
2488 if (dev->board.adecoder == EM28XX_TVAUDIO)
2489 v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2490 &dev->i2c_adap[dev->def_i2c_bus],
2491 "tvaudio", dev->board.tvaudio_addr, NULL);
2493 /* Initialize tuner and camera */
2495 if (dev->board.tuner_type != TUNER_ABSENT) {
2496 unsigned short tuner_addr = dev->board.tuner_addr;
2497 int has_demod = (dev->board.tda9887_conf & TDA9887_PRESENT);
2499 if (dev->board.radio.type)
2500 v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2501 &dev->i2c_adap[dev->def_i2c_bus],
2502 "tuner", dev->board.radio_addr,
2503 NULL);
2505 if (has_demod)
2506 v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2507 &dev->i2c_adap[dev->def_i2c_bus],
2508 "tuner", 0,
2509 v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
2510 if (tuner_addr == 0) {
2511 enum v4l2_i2c_tuner_type type =
2512 has_demod ? ADDRS_TV_WITH_DEMOD : ADDRS_TV;
2513 struct v4l2_subdev *sd;
2515 sd = v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2516 &dev->i2c_adap[dev->def_i2c_bus],
2517 "tuner", 0,
2518 v4l2_i2c_tuner_addrs(type));
2520 if (sd)
2521 tuner_addr = v4l2_i2c_subdev_addr(sd);
2522 } else {
2523 v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2524 &dev->i2c_adap[dev->def_i2c_bus],
2525 "tuner", tuner_addr, NULL);
2528 em28xx_tuner_setup(dev, tuner_addr);
2531 if (dev->em28xx_sensor != EM28XX_NOSENSOR)
2532 em28xx_init_camera(dev);
2534 /* Configure audio */
2535 ret = em28xx_audio_setup(dev);
2536 if (ret < 0) {
2537 dev_err(&dev->intf->dev,
2538 "%s: Error while setting audio - error [%d]!\n",
2539 __func__, ret);
2540 goto unregister_dev;
2542 if (dev->audio_mode.ac97 != EM28XX_NO_AC97) {
2543 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2544 V4L2_CID_AUDIO_MUTE, 0, 1, 1, 1);
2545 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2546 V4L2_CID_AUDIO_VOLUME, 0, 0x1f, 1, 0x1f);
2547 } else {
2548 /* install the em28xx notify callback */
2549 v4l2_ctrl_notify(v4l2_ctrl_find(hdl, V4L2_CID_AUDIO_MUTE),
2550 em28xx_ctrl_notify, dev);
2551 v4l2_ctrl_notify(v4l2_ctrl_find(hdl, V4L2_CID_AUDIO_VOLUME),
2552 em28xx_ctrl_notify, dev);
2555 /* wake i2c devices */
2556 em28xx_wake_i2c(dev);
2558 /* init video dma queues */
2559 INIT_LIST_HEAD(&dev->vidq.active);
2560 INIT_LIST_HEAD(&dev->vbiq.active);
2562 if (dev->board.has_msp34xx) {
2563 /* Send a reset to other chips via gpio */
2564 ret = em28xx_write_reg(dev, EM2820_R08_GPIO_CTRL, 0xf7);
2565 if (ret < 0) {
2566 dev_err(&dev->intf->dev,
2567 "%s: em28xx_write_reg - msp34xx(1) failed! error [%d]\n",
2568 __func__, ret);
2569 goto unregister_dev;
2571 msleep(3);
2573 ret = em28xx_write_reg(dev, EM2820_R08_GPIO_CTRL, 0xff);
2574 if (ret < 0) {
2575 dev_err(&dev->intf->dev,
2576 "%s: em28xx_write_reg - msp34xx(2) failed! error [%d]\n",
2577 __func__, ret);
2578 goto unregister_dev;
2580 msleep(3);
2583 /* set default norm */
2584 v4l2->norm = V4L2_STD_PAL;
2585 v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_std, v4l2->norm);
2586 v4l2->interlaced_fieldmode = EM28XX_INTERLACED_DEFAULT;
2588 /* Analog specific initialization */
2589 v4l2->format = &format[0];
2591 maxw = norm_maxw(dev);
2592 /* MaxPacketSize for em2800 is too small to capture at full resolution
2593 * use half of maxw as the scaler can only scale to 50% */
2594 if (dev->board.is_em2800)
2595 maxw /= 2;
2597 em28xx_set_video_format(dev, format[0].fourcc,
2598 maxw, norm_maxh(dev));
2600 video_mux(dev, 0);
2602 /* Audio defaults */
2603 dev->mute = 1;
2604 dev->volume = 0x1f;
2606 /* em28xx_write_reg(dev, EM28XX_R0E_AUDIOSRC, 0xc0); audio register */
2607 val = (u8)em28xx_read_reg(dev, EM28XX_R0F_XCLK);
2608 em28xx_write_reg(dev, EM28XX_R0F_XCLK,
2609 (EM28XX_XCLK_AUDIO_UNMUTE | val));
2611 em28xx_set_outfmt(dev);
2613 /* Add image controls */
2614 /* NOTE: at this point, the subdevices are already registered, so bridge
2615 * controls are only added/enabled when no subdevice provides them */
2616 if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_CONTRAST))
2617 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2618 V4L2_CID_CONTRAST,
2619 0, 0x1f, 1, CONTRAST_DEFAULT);
2620 if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_BRIGHTNESS))
2621 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2622 V4L2_CID_BRIGHTNESS,
2623 -0x80, 0x7f, 1, BRIGHTNESS_DEFAULT);
2624 if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_SATURATION))
2625 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2626 V4L2_CID_SATURATION,
2627 0, 0x1f, 1, SATURATION_DEFAULT);
2628 if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_BLUE_BALANCE))
2629 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2630 V4L2_CID_BLUE_BALANCE,
2631 -0x30, 0x30, 1, BLUE_BALANCE_DEFAULT);
2632 if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_RED_BALANCE))
2633 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2634 V4L2_CID_RED_BALANCE,
2635 -0x30, 0x30, 1, RED_BALANCE_DEFAULT);
2636 if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_SHARPNESS))
2637 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2638 V4L2_CID_SHARPNESS,
2639 0, 0x0f, 1, SHARPNESS_DEFAULT);
2641 /* Reset image controls */
2642 em28xx_colorlevels_set_default(dev);
2643 v4l2_ctrl_handler_setup(hdl);
2644 ret = hdl->error;
2645 if (ret)
2646 goto unregister_dev;
2648 /* allocate and fill video video_device struct */
2649 em28xx_vdev_init(dev, &v4l2->vdev, &em28xx_video_template, "video");
2650 mutex_init(&v4l2->vb_queue_lock);
2651 mutex_init(&v4l2->vb_vbi_queue_lock);
2652 v4l2->vdev.queue = &v4l2->vb_vidq;
2653 v4l2->vdev.queue->lock = &v4l2->vb_queue_lock;
2655 /* disable inapplicable ioctls */
2656 if (dev->board.is_webcam) {
2657 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_QUERYSTD);
2658 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_STD);
2659 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_STD);
2660 } else {
2661 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_PARM);
2663 if (dev->tuner_type == TUNER_ABSENT) {
2664 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_TUNER);
2665 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_TUNER);
2666 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_FREQUENCY);
2667 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_FREQUENCY);
2669 if (dev->int_audio_type == EM28XX_INT_AUDIO_NONE) {
2670 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_AUDIO);
2671 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_AUDIO);
2674 /* register v4l2 video video_device */
2675 ret = video_register_device(&v4l2->vdev, VFL_TYPE_GRABBER,
2676 video_nr[dev->devno]);
2677 if (ret) {
2678 dev_err(&dev->intf->dev,
2679 "unable to register video device (error=%i).\n", ret);
2680 goto unregister_dev;
2683 /* Allocate and fill vbi video_device struct */
2684 if (em28xx_vbi_supported(dev) == 1) {
2685 em28xx_vdev_init(dev, &v4l2->vbi_dev, &em28xx_video_template,
2686 "vbi");
2688 v4l2->vbi_dev.queue = &v4l2->vb_vbiq;
2689 v4l2->vbi_dev.queue->lock = &v4l2->vb_vbi_queue_lock;
2691 /* disable inapplicable ioctls */
2692 v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_PARM);
2693 if (dev->tuner_type == TUNER_ABSENT) {
2694 v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_G_TUNER);
2695 v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_TUNER);
2696 v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_G_FREQUENCY);
2697 v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_FREQUENCY);
2699 if (dev->int_audio_type == EM28XX_INT_AUDIO_NONE) {
2700 v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_G_AUDIO);
2701 v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_AUDIO);
2704 /* register v4l2 vbi video_device */
2705 ret = video_register_device(&v4l2->vbi_dev, VFL_TYPE_VBI,
2706 vbi_nr[dev->devno]);
2707 if (ret < 0) {
2708 dev_err(&dev->intf->dev,
2709 "unable to register vbi device\n");
2710 goto unregister_dev;
2714 if (em28xx_boards[dev->model].radio.type == EM28XX_RADIO) {
2715 em28xx_vdev_init(dev, &v4l2->radio_dev, &em28xx_radio_template,
2716 "radio");
2717 ret = video_register_device(&v4l2->radio_dev, VFL_TYPE_RADIO,
2718 radio_nr[dev->devno]);
2719 if (ret < 0) {
2720 dev_err(&dev->intf->dev,
2721 "can't register radio device\n");
2722 goto unregister_dev;
2724 dev_info(&dev->intf->dev,
2725 "Registered radio device as %s\n",
2726 video_device_node_name(&v4l2->radio_dev));
2729 /* Init entities at the Media Controller */
2730 em28xx_v4l2_create_entities(dev);
2732 #ifdef CONFIG_MEDIA_CONTROLLER
2733 ret = v4l2_mc_create_media_graph(dev->media_dev);
2734 if (ret) {
2735 dev_err(&dev->intf->dev,
2736 "failed to create media graph\n");
2737 em28xx_v4l2_media_release(dev);
2738 goto unregister_dev;
2740 #endif
2742 dev_info(&dev->intf->dev,
2743 "V4L2 video device registered as %s\n",
2744 video_device_node_name(&v4l2->vdev));
2746 if (video_is_registered(&v4l2->vbi_dev))
2747 dev_info(&dev->intf->dev,
2748 "V4L2 VBI device registered as %s\n",
2749 video_device_node_name(&v4l2->vbi_dev));
2751 /* Save some power by putting tuner to sleep */
2752 v4l2_device_call_all(&v4l2->v4l2_dev, 0, core, s_power, 0);
2754 /* initialize videobuf2 stuff */
2755 em28xx_vb2_setup(dev);
2757 dev_info(&dev->intf->dev,
2758 "V4L2 extension successfully initialized\n");
2760 kref_get(&dev->ref);
2762 mutex_unlock(&dev->lock);
2763 return 0;
2765 unregister_dev:
2766 if (video_is_registered(&v4l2->radio_dev)) {
2767 dev_info(&dev->intf->dev,
2768 "V4L2 device %s deregistered\n",
2769 video_device_node_name(&v4l2->radio_dev));
2770 video_unregister_device(&v4l2->radio_dev);
2772 if (video_is_registered(&v4l2->vbi_dev)) {
2773 dev_info(&dev->intf->dev,
2774 "V4L2 device %s deregistered\n",
2775 video_device_node_name(&v4l2->vbi_dev));
2776 video_unregister_device(&v4l2->vbi_dev);
2778 if (video_is_registered(&v4l2->vdev)) {
2779 dev_info(&dev->intf->dev,
2780 "V4L2 device %s deregistered\n",
2781 video_device_node_name(&v4l2->vdev));
2782 video_unregister_device(&v4l2->vdev);
2785 v4l2_ctrl_handler_free(&v4l2->ctrl_handler);
2786 v4l2_device_unregister(&v4l2->v4l2_dev);
2787 err:
2788 dev->v4l2 = NULL;
2789 kref_put(&v4l2->ref, em28xx_free_v4l2);
2790 mutex_unlock(&dev->lock);
2791 return ret;
2794 static struct em28xx_ops v4l2_ops = {
2795 .id = EM28XX_V4L2,
2796 .name = "Em28xx v4l2 Extension",
2797 .init = em28xx_v4l2_init,
2798 .fini = em28xx_v4l2_fini,
2799 .suspend = em28xx_v4l2_suspend,
2800 .resume = em28xx_v4l2_resume,
2803 static int __init em28xx_video_register(void)
2805 return em28xx_register_extension(&v4l2_ops);
2808 static void __exit em28xx_video_unregister(void)
2810 em28xx_unregister_extension(&v4l2_ops);
2813 module_init(em28xx_video_register);
2814 module_exit(em28xx_video_unregister);