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 Copyright (C) 2012 Frank Schäfer <fschaefer.oss@googlemail.com> 10 11 Some parts based on SN9C10x PC Camera Controllers GPL driver made 12 by Luca Risolia <luca.risolia@studio.unibo.it> 13 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. 18 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. 23 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. 27 */ 28 29 #include "em28xx.h" 30 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> 41 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/v4l2-clk.h> 47 #include <media/drv-intf/msp3400.h> 48 #include <media/tuner.h> 49 50 #define DRIVER_AUTHOR "Ludovico Cavedon <cavedon@sssup.it>, " \ 51 "Markus Rechberger <mrechberger@gmail.com>, " \ 52 "Mauro Carvalho Chehab <mchehab@infradead.org>, " \ 53 "Sascha Sommer <saschasommer@freenet.de>" 54 55 static unsigned int isoc_debug; 56 module_param(isoc_debug, int, 0644); 57 MODULE_PARM_DESC(isoc_debug, "enable debug messages [isoc transfers]"); 58 59 static unsigned int disable_vbi; 60 module_param(disable_vbi, int, 0644); 61 MODULE_PARM_DESC(disable_vbi, "disable vbi support"); 62 63 static int alt; 64 module_param(alt, int, 0644); 65 MODULE_PARM_DESC(alt, "alternate setting to use for video endpoint"); 66 67 #define em28xx_videodbg(fmt, arg...) do { \ 68 if (video_debug) \ 69 dev_printk(KERN_DEBUG, &dev->intf->dev, \ 70 "video: %s: " fmt, __func__, ## arg); \ 71 } while (0) 72 73 #define em28xx_isocdbg(fmt, arg...) do {\ 74 if (isoc_debug) \ 75 dev_printk(KERN_DEBUG, &dev->intf->dev, \ 76 "isoc: %s: " fmt, __func__, ## arg); \ 77 } while (0) 78 79 MODULE_AUTHOR(DRIVER_AUTHOR); 80 MODULE_DESCRIPTION(DRIVER_DESC " - v4l2 interface"); 81 MODULE_LICENSE("GPL"); 82 MODULE_VERSION(EM28XX_VERSION); 83 84 #define EM25XX_FRMDATAHDR_BYTE1 0x02 85 #define EM25XX_FRMDATAHDR_BYTE2_STILL_IMAGE 0x20 86 #define EM25XX_FRMDATAHDR_BYTE2_FRAME_END 0x02 87 #define EM25XX_FRMDATAHDR_BYTE2_FRAME_ID 0x01 88 #define EM25XX_FRMDATAHDR_BYTE2_MASK (EM25XX_FRMDATAHDR_BYTE2_STILL_IMAGE | \ 89 EM25XX_FRMDATAHDR_BYTE2_FRAME_END | \ 90 EM25XX_FRMDATAHDR_BYTE2_FRAME_ID) 91 92 static unsigned int video_nr[] = {[0 ... (EM28XX_MAXBOARDS - 1)] = -1U }; 93 static unsigned int vbi_nr[] = {[0 ... (EM28XX_MAXBOARDS - 1)] = -1U }; 94 static unsigned int radio_nr[] = {[0 ... (EM28XX_MAXBOARDS - 1)] = -1U }; 95 96 module_param_array(video_nr, int, NULL, 0444); 97 module_param_array(vbi_nr, int, NULL, 0444); 98 module_param_array(radio_nr, int, NULL, 0444); 99 MODULE_PARM_DESC(video_nr, "video device numbers"); 100 MODULE_PARM_DESC(vbi_nr, "vbi device numbers"); 101 MODULE_PARM_DESC(radio_nr, "radio device numbers"); 102 103 static unsigned int video_debug; 104 module_param(video_debug, int, 0644); 105 MODULE_PARM_DESC(video_debug, "enable debug messages [video]"); 106 107 /* supported video standards */ 108 static struct em28xx_fmt format[] = { 109 { 110 .name = "16 bpp YUY2, 4:2:2, packed", 111 .fourcc = V4L2_PIX_FMT_YUYV, 112 .depth = 16, 113 .reg = EM28XX_OUTFMT_YUV422_Y0UY1V, 114 }, { 115 .name = "16 bpp RGB 565, LE", 116 .fourcc = V4L2_PIX_FMT_RGB565, 117 .depth = 16, 118 .reg = EM28XX_OUTFMT_RGB_16_656, 119 }, { 120 .name = "8 bpp Bayer BGBG..GRGR", 121 .fourcc = V4L2_PIX_FMT_SBGGR8, 122 .depth = 8, 123 .reg = EM28XX_OUTFMT_RGB_8_BGBG, 124 }, { 125 .name = "8 bpp Bayer GRGR..BGBG", 126 .fourcc = V4L2_PIX_FMT_SGRBG8, 127 .depth = 8, 128 .reg = EM28XX_OUTFMT_RGB_8_GRGR, 129 }, { 130 .name = "8 bpp Bayer GBGB..RGRG", 131 .fourcc = V4L2_PIX_FMT_SGBRG8, 132 .depth = 8, 133 .reg = EM28XX_OUTFMT_RGB_8_GBGB, 134 }, { 135 .name = "12 bpp YUV411", 136 .fourcc = V4L2_PIX_FMT_YUV411P, 137 .depth = 12, 138 .reg = EM28XX_OUTFMT_YUV411, 139 }, 140 }; 141 142 /*FIXME: maxw should be dependent of alt mode */ 143 static inline unsigned int norm_maxw(struct em28xx *dev) 144 { 145 struct em28xx_v4l2 *v4l2 = dev->v4l2; 146 147 if (dev->board.is_webcam) 148 return v4l2->sensor_xres; 149 150 if (dev->board.max_range_640_480) 151 return 640; 152 153 return 720; 154 } 155 156 static inline unsigned int norm_maxh(struct em28xx *dev) 157 { 158 struct em28xx_v4l2 *v4l2 = dev->v4l2; 159 160 if (dev->board.is_webcam) 161 return v4l2->sensor_yres; 162 163 if (dev->board.max_range_640_480) 164 return 480; 165 166 return (v4l2->norm & V4L2_STD_625_50) ? 576 : 480; 167 } 168 169 static int em28xx_vbi_supported(struct em28xx *dev) 170 { 171 /* Modprobe option to manually disable */ 172 if (disable_vbi == 1) 173 return 0; 174 175 if (dev->board.is_webcam) 176 return 0; 177 178 /* FIXME: check subdevices for VBI support */ 179 180 if (dev->chip_id == CHIP_ID_EM2860 || 181 dev->chip_id == CHIP_ID_EM2883) 182 return 1; 183 184 /* Version of em28xx that does not support VBI */ 185 return 0; 186 } 187 188 /* 189 * em28xx_wake_i2c() 190 * configure i2c attached devices 191 */ 192 static void em28xx_wake_i2c(struct em28xx *dev) 193 { 194 struct v4l2_device *v4l2_dev = &dev->v4l2->v4l2_dev; 195 196 v4l2_device_call_all(v4l2_dev, 0, core, reset, 0); 197 v4l2_device_call_all(v4l2_dev, 0, video, s_routing, 198 INPUT(dev->ctl_input)->vmux, 0, 0); 199 } 200 201 static int em28xx_colorlevels_set_default(struct em28xx *dev) 202 { 203 em28xx_write_reg(dev, EM28XX_R20_YGAIN, CONTRAST_DEFAULT); 204 em28xx_write_reg(dev, EM28XX_R21_YOFFSET, BRIGHTNESS_DEFAULT); 205 em28xx_write_reg(dev, EM28XX_R22_UVGAIN, SATURATION_DEFAULT); 206 em28xx_write_reg(dev, EM28XX_R23_UOFFSET, BLUE_BALANCE_DEFAULT); 207 em28xx_write_reg(dev, EM28XX_R24_VOFFSET, RED_BALANCE_DEFAULT); 208 em28xx_write_reg(dev, EM28XX_R25_SHARPNESS, SHARPNESS_DEFAULT); 209 210 em28xx_write_reg(dev, EM28XX_R14_GAMMA, 0x20); 211 em28xx_write_reg(dev, EM28XX_R15_RGAIN, 0x20); 212 em28xx_write_reg(dev, EM28XX_R16_GGAIN, 0x20); 213 em28xx_write_reg(dev, EM28XX_R17_BGAIN, 0x20); 214 em28xx_write_reg(dev, EM28XX_R18_ROFFSET, 0x00); 215 em28xx_write_reg(dev, EM28XX_R19_GOFFSET, 0x00); 216 return em28xx_write_reg(dev, EM28XX_R1A_BOFFSET, 0x00); 217 } 218 219 static int em28xx_set_outfmt(struct em28xx *dev) 220 { 221 int ret; 222 u8 fmt, vinctrl; 223 struct em28xx_v4l2 *v4l2 = dev->v4l2; 224 225 fmt = v4l2->format->reg; 226 if (!dev->is_em25xx) 227 fmt |= 0x20; 228 /* 229 * NOTE: it's not clear if this is really needed ! 230 * The datasheets say bit 5 is a reserved bit and devices seem to work 231 * fine without it. But the Windows driver sets it for em2710/50+em28xx 232 * devices and we've always been setting it, too. 233 * 234 * em2765 (em25xx, em276x/7x/8x) devices do NOT work with this bit set, 235 * it's likely used for an additional (compressed ?) format there. 236 */ 237 ret = em28xx_write_reg(dev, EM28XX_R27_OUTFMT, fmt); 238 if (ret < 0) 239 return ret; 240 241 ret = em28xx_write_reg(dev, EM28XX_R10_VINMODE, v4l2->vinmode); 242 if (ret < 0) 243 return ret; 244 245 vinctrl = v4l2->vinctl; 246 if (em28xx_vbi_supported(dev) == 1) { 247 vinctrl |= EM28XX_VINCTRL_VBI_RAW; 248 em28xx_write_reg(dev, EM28XX_R34_VBI_START_H, 0x00); 249 em28xx_write_reg(dev, EM28XX_R36_VBI_WIDTH, v4l2->vbi_width/4); 250 em28xx_write_reg(dev, EM28XX_R37_VBI_HEIGHT, v4l2->vbi_height); 251 if (v4l2->norm & V4L2_STD_525_60) { 252 /* NTSC */ 253 em28xx_write_reg(dev, EM28XX_R35_VBI_START_V, 0x09); 254 } else if (v4l2->norm & V4L2_STD_625_50) { 255 /* PAL */ 256 em28xx_write_reg(dev, EM28XX_R35_VBI_START_V, 0x07); 257 } 258 } 259 260 return em28xx_write_reg(dev, EM28XX_R11_VINCTRL, vinctrl); 261 } 262 263 static int em28xx_accumulator_set(struct em28xx *dev, u8 xmin, u8 xmax, 264 u8 ymin, u8 ymax) 265 { 266 em28xx_videodbg("em28xx Scale: (%d,%d)-(%d,%d)\n", 267 xmin, ymin, xmax, ymax); 268 269 em28xx_write_regs(dev, EM28XX_R28_XMIN, &xmin, 1); 270 em28xx_write_regs(dev, EM28XX_R29_XMAX, &xmax, 1); 271 em28xx_write_regs(dev, EM28XX_R2A_YMIN, &ymin, 1); 272 return em28xx_write_regs(dev, EM28XX_R2B_YMAX, &ymax, 1); 273 } 274 275 static void em28xx_capture_area_set(struct em28xx *dev, u8 hstart, u8 vstart, 276 u16 width, u16 height) 277 { 278 u8 cwidth = width >> 2; 279 u8 cheight = height >> 2; 280 u8 overflow = (height >> 9 & 0x02) | (width >> 10 & 0x01); 281 /* NOTE: size limit: 2047x1023 = 2MPix */ 282 283 em28xx_videodbg("capture area set to (%d,%d): %dx%d\n", 284 hstart, vstart, 285 ((overflow & 2) << 9 | cwidth << 2), 286 ((overflow & 1) << 10 | cheight << 2)); 287 288 em28xx_write_regs(dev, EM28XX_R1C_HSTART, &hstart, 1); 289 em28xx_write_regs(dev, EM28XX_R1D_VSTART, &vstart, 1); 290 em28xx_write_regs(dev, EM28XX_R1E_CWIDTH, &cwidth, 1); 291 em28xx_write_regs(dev, EM28XX_R1F_CHEIGHT, &cheight, 1); 292 em28xx_write_regs(dev, EM28XX_R1B_OFLOW, &overflow, 1); 293 294 /* FIXME: function/meaning of these registers ? */ 295 /* FIXME: align width+height to multiples of 4 ?! */ 296 if (dev->is_em25xx) { 297 em28xx_write_reg(dev, 0x34, width >> 4); 298 em28xx_write_reg(dev, 0x35, height >> 4); 299 } 300 } 301 302 static int em28xx_scaler_set(struct em28xx *dev, u16 h, u16 v) 303 { 304 u8 mode = 0x00; 305 /* the em2800 scaler only supports scaling down to 50% */ 306 307 if (dev->board.is_em2800) { 308 mode = (v ? 0x20 : 0x00) | (h ? 0x10 : 0x00); 309 } else { 310 u8 buf[2]; 311 312 buf[0] = h; 313 buf[1] = h >> 8; 314 em28xx_write_regs(dev, EM28XX_R30_HSCALELOW, (char *)buf, 2); 315 316 buf[0] = v; 317 buf[1] = v >> 8; 318 em28xx_write_regs(dev, EM28XX_R32_VSCALELOW, (char *)buf, 2); 319 /* it seems that both H and V scalers must be active 320 to work correctly */ 321 mode = (h || v) ? 0x30 : 0x00; 322 } 323 return em28xx_write_reg(dev, EM28XX_R26_COMPR, mode); 324 } 325 326 /* FIXME: this only function read values from dev */ 327 static int em28xx_resolution_set(struct em28xx *dev) 328 { 329 struct em28xx_v4l2 *v4l2 = dev->v4l2; 330 int width = norm_maxw(dev); 331 int height = norm_maxh(dev); 332 333 /* Properly setup VBI */ 334 v4l2->vbi_width = 720; 335 if (v4l2->norm & V4L2_STD_525_60) 336 v4l2->vbi_height = 12; 337 else 338 v4l2->vbi_height = 18; 339 340 em28xx_set_outfmt(dev); 341 342 em28xx_accumulator_set(dev, 1, (width - 4) >> 2, 1, (height - 4) >> 2); 343 344 /* If we don't set the start position to 2 in VBI mode, we end up 345 with line 20/21 being YUYV encoded instead of being in 8-bit 346 greyscale. The core of the issue is that line 21 (and line 23 for 347 PAL WSS) are inside of active video region, and as a result they 348 get the pixelformatting associated with that area. So by cropping 349 it out, we end up with the same format as the rest of the VBI 350 region */ 351 if (em28xx_vbi_supported(dev) == 1) 352 em28xx_capture_area_set(dev, 0, 2, width, height); 353 else 354 em28xx_capture_area_set(dev, 0, 0, width, height); 355 356 return em28xx_scaler_set(dev, v4l2->hscale, v4l2->vscale); 357 } 358 359 /* Set USB alternate setting for analog video */ 360 static int em28xx_set_alternate(struct em28xx *dev) 361 { 362 struct em28xx_v4l2 *v4l2 = dev->v4l2; 363 int errCode; 364 int i; 365 unsigned int min_pkt_size = v4l2->width * 2 + 4; 366 367 /* NOTE: for isoc transfers, only alt settings > 0 are allowed 368 bulk transfers seem to work only with alt=0 ! */ 369 dev->alt = 0; 370 if ((alt > 0) && (alt < dev->num_alt)) { 371 em28xx_videodbg("alternate forced to %d\n", dev->alt); 372 dev->alt = alt; 373 goto set_alt; 374 } 375 if (dev->analog_xfer_bulk) 376 goto set_alt; 377 378 /* When image size is bigger than a certain value, 379 the frame size should be increased, otherwise, only 380 green screen will be received. 381 */ 382 if (v4l2->width * 2 * v4l2->height > 720 * 240 * 2) 383 min_pkt_size *= 2; 384 385 for (i = 0; i < dev->num_alt; i++) { 386 /* stop when the selected alt setting offers enough bandwidth */ 387 if (dev->alt_max_pkt_size_isoc[i] >= min_pkt_size) { 388 dev->alt = i; 389 break; 390 /* otherwise make sure that we end up with the maximum bandwidth 391 because the min_pkt_size equation might be wrong... 392 */ 393 } else if (dev->alt_max_pkt_size_isoc[i] > 394 dev->alt_max_pkt_size_isoc[dev->alt]) 395 dev->alt = i; 396 } 397 398 set_alt: 399 /* NOTE: for bulk transfers, we need to call usb_set_interface() 400 * even if the previous settings were the same. Otherwise streaming 401 * fails with all urbs having status = -EOVERFLOW ! */ 402 if (dev->analog_xfer_bulk) { 403 dev->max_pkt_size = 512; /* USB 2.0 spec */ 404 dev->packet_multiplier = EM28XX_BULK_PACKET_MULTIPLIER; 405 } else { /* isoc */ 406 em28xx_videodbg("minimum isoc packet size: %u (alt=%d)\n", 407 min_pkt_size, dev->alt); 408 dev->max_pkt_size = 409 dev->alt_max_pkt_size_isoc[dev->alt]; 410 dev->packet_multiplier = EM28XX_NUM_ISOC_PACKETS; 411 } 412 em28xx_videodbg("setting alternate %d with wMaxPacketSize=%u\n", 413 dev->alt, dev->max_pkt_size); 414 errCode = usb_set_interface(dev->udev, dev->ifnum, dev->alt); 415 if (errCode < 0) { 416 dev_err(&dev->intf->dev, 417 "cannot change alternate number to %d (error=%i)\n", 418 dev->alt, errCode); 419 return errCode; 420 } 421 return 0; 422 } 423 424 /* ------------------------------------------------------------------ 425 DMA and thread functions 426 ------------------------------------------------------------------*/ 427 428 /* 429 * Finish the current buffer 430 */ 431 static inline void finish_buffer(struct em28xx *dev, 432 struct em28xx_buffer *buf) 433 { 434 em28xx_isocdbg("[%p/%d] wakeup\n", buf, buf->top_field); 435 436 buf->vb.sequence = dev->v4l2->field_count++; 437 if (dev->v4l2->progressive) 438 buf->vb.field = V4L2_FIELD_NONE; 439 else 440 buf->vb.field = V4L2_FIELD_INTERLACED; 441 buf->vb.vb2_buf.timestamp = ktime_get_ns(); 442 443 vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE); 444 } 445 446 /* 447 * Copy picture data from USB buffer to videobuf buffer 448 */ 449 static void em28xx_copy_video(struct em28xx *dev, 450 struct em28xx_buffer *buf, 451 unsigned char *usb_buf, 452 unsigned long len) 453 { 454 struct em28xx_v4l2 *v4l2 = dev->v4l2; 455 void *fieldstart, *startwrite, *startread; 456 int linesdone, currlinedone, offset, lencopy, remain; 457 int bytesperline = v4l2->width << 1; 458 459 if (buf->pos + len > buf->length) 460 len = buf->length - buf->pos; 461 462 startread = usb_buf; 463 remain = len; 464 465 if (v4l2->progressive || buf->top_field) 466 fieldstart = buf->vb_buf; 467 else /* interlaced mode, even nr. of lines */ 468 fieldstart = buf->vb_buf + bytesperline; 469 470 linesdone = buf->pos / bytesperline; 471 currlinedone = buf->pos % bytesperline; 472 473 if (v4l2->progressive) 474 offset = linesdone * bytesperline + currlinedone; 475 else 476 offset = linesdone * bytesperline * 2 + currlinedone; 477 478 startwrite = fieldstart + offset; 479 lencopy = bytesperline - currlinedone; 480 lencopy = lencopy > remain ? remain : lencopy; 481 482 if ((char *)startwrite + lencopy > (char *)buf->vb_buf + buf->length) { 483 em28xx_isocdbg("Overflow of %zu bytes past buffer end (1)\n", 484 ((char *)startwrite + lencopy) - 485 ((char *)buf->vb_buf + buf->length)); 486 remain = (char *)buf->vb_buf + buf->length - 487 (char *)startwrite; 488 lencopy = remain; 489 } 490 if (lencopy <= 0) 491 return; 492 memcpy(startwrite, startread, lencopy); 493 494 remain -= lencopy; 495 496 while (remain > 0) { 497 if (v4l2->progressive) 498 startwrite += lencopy; 499 else 500 startwrite += lencopy + bytesperline; 501 startread += lencopy; 502 if (bytesperline > remain) 503 lencopy = remain; 504 else 505 lencopy = bytesperline; 506 507 if ((char *)startwrite + lencopy > (char *)buf->vb_buf + 508 buf->length) { 509 em28xx_isocdbg("Overflow of %zu bytes past buffer end(2)\n", 510 ((char *)startwrite + lencopy) - 511 ((char *)buf->vb_buf + buf->length)); 512 lencopy = remain = (char *)buf->vb_buf + buf->length - 513 (char *)startwrite; 514 } 515 if (lencopy <= 0) 516 break; 517 518 memcpy(startwrite, startread, lencopy); 519 520 remain -= lencopy; 521 } 522 523 buf->pos += len; 524 } 525 526 /* 527 * Copy VBI data from USB buffer to videobuf buffer 528 */ 529 static void em28xx_copy_vbi(struct em28xx *dev, 530 struct em28xx_buffer *buf, 531 unsigned char *usb_buf, 532 unsigned long len) 533 { 534 unsigned int offset; 535 536 if (buf->pos + len > buf->length) 537 len = buf->length - buf->pos; 538 539 offset = buf->pos; 540 /* Make sure the bottom field populates the second half of the frame */ 541 if (buf->top_field == 0) 542 offset += dev->v4l2->vbi_width * dev->v4l2->vbi_height; 543 544 memcpy(buf->vb_buf + offset, usb_buf, len); 545 buf->pos += len; 546 } 547 548 static inline void print_err_status(struct em28xx *dev, 549 int packet, int status) 550 { 551 char *errmsg = "Unknown"; 552 553 switch (status) { 554 case -ENOENT: 555 errmsg = "unlinked synchronuously"; 556 break; 557 case -ECONNRESET: 558 errmsg = "unlinked asynchronuously"; 559 break; 560 case -ENOSR: 561 errmsg = "Buffer error (overrun)"; 562 break; 563 case -EPIPE: 564 errmsg = "Stalled (device not responding)"; 565 break; 566 case -EOVERFLOW: 567 errmsg = "Babble (bad cable?)"; 568 break; 569 case -EPROTO: 570 errmsg = "Bit-stuff error (bad cable?)"; 571 break; 572 case -EILSEQ: 573 errmsg = "CRC/Timeout (could be anything)"; 574 break; 575 case -ETIME: 576 errmsg = "Device does not respond"; 577 break; 578 } 579 if (packet < 0) { 580 em28xx_isocdbg("URB status %d [%s].\n", status, errmsg); 581 } else { 582 em28xx_isocdbg("URB packet %d, status %d [%s].\n", 583 packet, status, errmsg); 584 } 585 } 586 587 /* 588 * get the next available buffer from dma queue 589 */ 590 static inline struct em28xx_buffer *get_next_buf(struct em28xx *dev, 591 struct em28xx_dmaqueue *dma_q) 592 { 593 struct em28xx_buffer *buf; 594 595 if (list_empty(&dma_q->active)) { 596 em28xx_isocdbg("No active queue to serve\n"); 597 return NULL; 598 } 599 600 /* Get the next buffer */ 601 buf = list_entry(dma_q->active.next, struct em28xx_buffer, list); 602 /* Cleans up buffer - Useful for testing for frame/URB loss */ 603 list_del(&buf->list); 604 buf->pos = 0; 605 buf->vb_buf = buf->mem; 606 607 return buf; 608 } 609 610 /* 611 * Finish the current buffer if completed and prepare for the next field 612 */ 613 static struct em28xx_buffer * 614 finish_field_prepare_next(struct em28xx *dev, 615 struct em28xx_buffer *buf, 616 struct em28xx_dmaqueue *dma_q) 617 { 618 struct em28xx_v4l2 *v4l2 = dev->v4l2; 619 620 if (v4l2->progressive || v4l2->top_field) { /* Brand new frame */ 621 if (buf != NULL) 622 finish_buffer(dev, buf); 623 buf = get_next_buf(dev, dma_q); 624 } 625 if (buf != NULL) { 626 buf->top_field = v4l2->top_field; 627 buf->pos = 0; 628 } 629 630 return buf; 631 } 632 633 /* 634 * Process data packet according to the em2710/em2750/em28xx frame data format 635 */ 636 static inline void process_frame_data_em28xx(struct em28xx *dev, 637 unsigned char *data_pkt, 638 unsigned int data_len) 639 { 640 struct em28xx_v4l2 *v4l2 = dev->v4l2; 641 struct em28xx_buffer *buf = dev->usb_ctl.vid_buf; 642 struct em28xx_buffer *vbi_buf = dev->usb_ctl.vbi_buf; 643 struct em28xx_dmaqueue *dma_q = &dev->vidq; 644 struct em28xx_dmaqueue *vbi_dma_q = &dev->vbiq; 645 646 /* capture type 0 = vbi start 647 capture type 1 = vbi in progress 648 capture type 2 = video start 649 capture type 3 = video in progress */ 650 if (data_len >= 4) { 651 /* NOTE: Headers are always 4 bytes and 652 * never split across packets */ 653 if (data_pkt[0] == 0x88 && data_pkt[1] == 0x88 && 654 data_pkt[2] == 0x88 && data_pkt[3] == 0x88) { 655 /* Continuation */ 656 data_pkt += 4; 657 data_len -= 4; 658 } else if (data_pkt[0] == 0x33 && data_pkt[1] == 0x95) { 659 /* Field start (VBI mode) */ 660 v4l2->capture_type = 0; 661 v4l2->vbi_read = 0; 662 em28xx_isocdbg("VBI START HEADER !!!\n"); 663 v4l2->top_field = !(data_pkt[2] & 1); 664 data_pkt += 4; 665 data_len -= 4; 666 } else if (data_pkt[0] == 0x22 && data_pkt[1] == 0x5a) { 667 /* Field start (VBI disabled) */ 668 v4l2->capture_type = 2; 669 em28xx_isocdbg("VIDEO START HEADER !!!\n"); 670 v4l2->top_field = !(data_pkt[2] & 1); 671 data_pkt += 4; 672 data_len -= 4; 673 } 674 } 675 /* NOTE: With bulk transfers, intermediate data packets 676 * have no continuation header */ 677 678 if (v4l2->capture_type == 0) { 679 vbi_buf = finish_field_prepare_next(dev, vbi_buf, vbi_dma_q); 680 dev->usb_ctl.vbi_buf = vbi_buf; 681 v4l2->capture_type = 1; 682 } 683 684 if (v4l2->capture_type == 1) { 685 int vbi_size = v4l2->vbi_width * v4l2->vbi_height; 686 int vbi_data_len = ((v4l2->vbi_read + data_len) > vbi_size) ? 687 (vbi_size - v4l2->vbi_read) : data_len; 688 689 /* Copy VBI data */ 690 if (vbi_buf != NULL) 691 em28xx_copy_vbi(dev, vbi_buf, data_pkt, vbi_data_len); 692 v4l2->vbi_read += vbi_data_len; 693 694 if (vbi_data_len < data_len) { 695 /* Continue with copying video data */ 696 v4l2->capture_type = 2; 697 data_pkt += vbi_data_len; 698 data_len -= vbi_data_len; 699 } 700 } 701 702 if (v4l2->capture_type == 2) { 703 buf = finish_field_prepare_next(dev, buf, dma_q); 704 dev->usb_ctl.vid_buf = buf; 705 v4l2->capture_type = 3; 706 } 707 708 if (v4l2->capture_type == 3 && buf != NULL && data_len > 0) 709 em28xx_copy_video(dev, buf, data_pkt, data_len); 710 } 711 712 /* 713 * Process data packet according to the em25xx/em276x/7x/8x frame data format 714 */ 715 static inline void process_frame_data_em25xx(struct em28xx *dev, 716 unsigned char *data_pkt, 717 unsigned int data_len) 718 { 719 struct em28xx_buffer *buf = dev->usb_ctl.vid_buf; 720 struct em28xx_dmaqueue *dmaq = &dev->vidq; 721 struct em28xx_v4l2 *v4l2 = dev->v4l2; 722 bool frame_end = false; 723 724 /* Check for header */ 725 /* NOTE: at least with bulk transfers, only the first packet 726 * has a header and has always set the FRAME_END bit */ 727 if (data_len >= 2) { /* em25xx header is only 2 bytes long */ 728 if ((data_pkt[0] == EM25XX_FRMDATAHDR_BYTE1) && 729 ((data_pkt[1] & ~EM25XX_FRMDATAHDR_BYTE2_MASK) == 0x00)) { 730 v4l2->top_field = !(data_pkt[1] & 731 EM25XX_FRMDATAHDR_BYTE2_FRAME_ID); 732 frame_end = data_pkt[1] & 733 EM25XX_FRMDATAHDR_BYTE2_FRAME_END; 734 data_pkt += 2; 735 data_len -= 2; 736 } 737 738 /* Finish field and prepare next (BULK only) */ 739 if (dev->analog_xfer_bulk && frame_end) { 740 buf = finish_field_prepare_next(dev, buf, dmaq); 741 dev->usb_ctl.vid_buf = buf; 742 } 743 /* NOTE: in ISOC mode when a new frame starts and buf==NULL, 744 * we COULD already prepare a buffer here to avoid skipping the 745 * first frame. 746 */ 747 } 748 749 /* Copy data */ 750 if (buf != NULL && data_len > 0) 751 em28xx_copy_video(dev, buf, data_pkt, data_len); 752 753 /* Finish frame (ISOC only) => avoids lag of 1 frame */ 754 if (!dev->analog_xfer_bulk && frame_end) { 755 buf = finish_field_prepare_next(dev, buf, dmaq); 756 dev->usb_ctl.vid_buf = buf; 757 } 758 759 /* NOTE: Tested with USB bulk transfers only ! 760 * The wording in the datasheet suggests that isoc might work different. 761 * The current code assumes that with isoc transfers each packet has a 762 * header like with the other em28xx devices. 763 */ 764 /* NOTE: Support for interlaced mode is pure theory. It has not been 765 * tested and it is unknown if these devices actually support it. */ 766 /* NOTE: No VBI support yet (these chips likely do not support VBI). */ 767 } 768 769 /* Processes and copies the URB data content (video and VBI data) */ 770 static inline int em28xx_urb_data_copy(struct em28xx *dev, struct urb *urb) 771 { 772 int xfer_bulk, num_packets, i; 773 unsigned char *usb_data_pkt; 774 unsigned int usb_data_len; 775 776 if (!dev) 777 return 0; 778 779 if (dev->disconnected) 780 return 0; 781 782 if (urb->status < 0) 783 print_err_status(dev, -1, urb->status); 784 785 xfer_bulk = usb_pipebulk(urb->pipe); 786 787 if (xfer_bulk) /* bulk */ 788 num_packets = 1; 789 else /* isoc */ 790 num_packets = urb->number_of_packets; 791 792 for (i = 0; i < num_packets; i++) { 793 if (xfer_bulk) { /* bulk */ 794 usb_data_len = urb->actual_length; 795 796 usb_data_pkt = urb->transfer_buffer; 797 } else { /* isoc */ 798 if (urb->iso_frame_desc[i].status < 0) { 799 print_err_status(dev, i, 800 urb->iso_frame_desc[i].status); 801 if (urb->iso_frame_desc[i].status != -EPROTO) 802 continue; 803 } 804 805 usb_data_len = urb->iso_frame_desc[i].actual_length; 806 if (usb_data_len > dev->max_pkt_size) { 807 em28xx_isocdbg("packet bigger than packet size"); 808 continue; 809 } 810 811 usb_data_pkt = urb->transfer_buffer + 812 urb->iso_frame_desc[i].offset; 813 } 814 815 if (usb_data_len == 0) { 816 /* NOTE: happens very often with isoc transfers */ 817 /* em28xx_usbdbg("packet %d is empty",i); - spammy */ 818 continue; 819 } 820 821 if (dev->is_em25xx) 822 process_frame_data_em25xx(dev, 823 usb_data_pkt, usb_data_len); 824 else 825 process_frame_data_em28xx(dev, 826 usb_data_pkt, usb_data_len); 827 828 } 829 return 1; 830 } 831 832 static int get_ressource(enum v4l2_buf_type f_type) 833 { 834 switch (f_type) { 835 case V4L2_BUF_TYPE_VIDEO_CAPTURE: 836 return EM28XX_RESOURCE_VIDEO; 837 case V4L2_BUF_TYPE_VBI_CAPTURE: 838 return EM28XX_RESOURCE_VBI; 839 default: 840 BUG(); 841 } 842 } 843 844 /* Usage lock check functions */ 845 static int res_get(struct em28xx *dev, enum v4l2_buf_type f_type) 846 { 847 int res_type = get_ressource(f_type); 848 849 /* is it free? */ 850 if (dev->resources & res_type) { 851 /* no, someone else uses it */ 852 return -EBUSY; 853 } 854 855 /* it's free, grab it */ 856 dev->resources |= res_type; 857 em28xx_videodbg("res: get %d\n", res_type); 858 return 0; 859 } 860 861 static void res_free(struct em28xx *dev, enum v4l2_buf_type f_type) 862 { 863 int res_type = get_ressource(f_type); 864 865 dev->resources &= ~res_type; 866 em28xx_videodbg("res: put %d\n", res_type); 867 } 868 869 static void em28xx_v4l2_media_release(struct em28xx *dev) 870 { 871 #ifdef CONFIG_MEDIA_CONTROLLER 872 int i; 873 874 for (i = 0; i < MAX_EM28XX_INPUT; i++) { 875 if (!INPUT(i)->type) 876 return; 877 media_device_unregister_entity(&dev->input_ent[i]); 878 } 879 #endif 880 } 881 882 /* 883 * Media Controller helper functions 884 */ 885 886 static int em28xx_enable_analog_tuner(struct em28xx *dev) 887 { 888 #ifdef CONFIG_MEDIA_CONTROLLER 889 struct media_device *mdev = dev->media_dev; 890 struct em28xx_v4l2 *v4l2 = dev->v4l2; 891 struct media_entity *source; 892 struct media_link *link, *found_link = NULL; 893 int ret, active_links = 0; 894 895 if (!mdev || !v4l2->decoder) 896 return 0; 897 898 /* 899 * This will find the tuner that is connected into the decoder. 900 * Technically, this is not 100% correct, as the device may be 901 * using an analog input instead of the tuner. However, as we can't 902 * do DVB streaming while the DMA engine is being used for V4L2, 903 * this should be enough for the actual needs. 904 */ 905 list_for_each_entry(link, &v4l2->decoder->links, list) { 906 if (link->sink->entity == v4l2->decoder) { 907 found_link = link; 908 if (link->flags & MEDIA_LNK_FL_ENABLED) 909 active_links++; 910 break; 911 } 912 } 913 914 if (active_links == 1 || !found_link) 915 return 0; 916 917 source = found_link->source->entity; 918 list_for_each_entry(link, &source->links, list) { 919 struct media_entity *sink; 920 int flags = 0; 921 922 sink = link->sink->entity; 923 924 if (sink == v4l2->decoder) 925 flags = MEDIA_LNK_FL_ENABLED; 926 927 ret = media_entity_setup_link(link, flags); 928 if (ret) { 929 dev_err(&dev->intf->dev, 930 "Couldn't change link %s->%s to %s. Error %d\n", 931 source->name, sink->name, 932 flags ? "enabled" : "disabled", 933 ret); 934 return ret; 935 } else 936 em28xx_videodbg("link %s->%s was %s\n", 937 source->name, sink->name, 938 flags ? "ENABLED" : "disabled"); 939 } 940 #endif 941 return 0; 942 } 943 944 static const char * const iname[] = { 945 [EM28XX_VMUX_COMPOSITE] = "Composite", 946 [EM28XX_VMUX_SVIDEO] = "S-Video", 947 [EM28XX_VMUX_TELEVISION] = "Television", 948 [EM28XX_RADIO] = "Radio", 949 }; 950 951 static void em28xx_v4l2_create_entities(struct em28xx *dev) 952 { 953 #if defined(CONFIG_MEDIA_CONTROLLER) 954 struct em28xx_v4l2 *v4l2 = dev->v4l2; 955 int ret, i; 956 957 /* Initialize Video, VBI and Radio pads */ 958 v4l2->video_pad.flags = MEDIA_PAD_FL_SINK; 959 ret = media_entity_pads_init(&v4l2->vdev.entity, 1, &v4l2->video_pad); 960 if (ret < 0) 961 dev_err(&dev->intf->dev, 962 "failed to initialize video media entity!\n"); 963 964 if (em28xx_vbi_supported(dev)) { 965 v4l2->vbi_pad.flags = MEDIA_PAD_FL_SINK; 966 ret = media_entity_pads_init(&v4l2->vbi_dev.entity, 1, 967 &v4l2->vbi_pad); 968 if (ret < 0) 969 dev_err(&dev->intf->dev, 970 "failed to initialize vbi media entity!\n"); 971 } 972 973 /* Webcams don't have input connectors */ 974 if (dev->board.is_webcam) 975 return; 976 977 /* Create entities for each input connector */ 978 for (i = 0; i < MAX_EM28XX_INPUT; i++) { 979 struct media_entity *ent = &dev->input_ent[i]; 980 981 if (!INPUT(i)->type) 982 break; 983 984 ent->name = iname[INPUT(i)->type]; 985 ent->flags = MEDIA_ENT_FL_CONNECTOR; 986 dev->input_pad[i].flags = MEDIA_PAD_FL_SOURCE; 987 988 switch (INPUT(i)->type) { 989 case EM28XX_VMUX_COMPOSITE: 990 ent->function = MEDIA_ENT_F_CONN_COMPOSITE; 991 break; 992 case EM28XX_VMUX_SVIDEO: 993 ent->function = MEDIA_ENT_F_CONN_SVIDEO; 994 break; 995 default: /* EM28XX_VMUX_TELEVISION or EM28XX_RADIO */ 996 if (dev->tuner_type != TUNER_ABSENT) 997 ent->function = MEDIA_ENT_F_CONN_RF; 998 break; 999 } 1000 1001 ret = media_entity_pads_init(ent, 1, &dev->input_pad[i]); 1002 if (ret < 0) 1003 dev_err(&dev->intf->dev, 1004 "failed to initialize input pad[%d]!\n", i); 1005 1006 ret = media_device_register_entity(dev->media_dev, ent); 1007 if (ret < 0) 1008 dev_err(&dev->intf->dev, 1009 "failed to register input entity %d!\n", i); 1010 } 1011 #endif 1012 } 1013 1014 1015 /* ------------------------------------------------------------------ 1016 Videobuf2 operations 1017 ------------------------------------------------------------------*/ 1018 1019 static int queue_setup(struct vb2_queue *vq, 1020 unsigned int *nbuffers, unsigned int *nplanes, 1021 unsigned int sizes[], struct device *alloc_devs[]) 1022 { 1023 struct em28xx *dev = vb2_get_drv_priv(vq); 1024 struct em28xx_v4l2 *v4l2 = dev->v4l2; 1025 unsigned long size = 1026 (v4l2->width * v4l2->height * v4l2->format->depth + 7) >> 3; 1027 1028 if (*nplanes) 1029 return sizes[0] < size ? -EINVAL : 0; 1030 *nplanes = 1; 1031 sizes[0] = size; 1032 1033 em28xx_enable_analog_tuner(dev); 1034 1035 return 0; 1036 } 1037 1038 static int 1039 buffer_prepare(struct vb2_buffer *vb) 1040 { 1041 struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb); 1042 struct em28xx *dev = vb2_get_drv_priv(vb->vb2_queue); 1043 struct em28xx_v4l2 *v4l2 = dev->v4l2; 1044 unsigned long size; 1045 1046 em28xx_videodbg("%s, field=%d\n", __func__, vbuf->field); 1047 1048 size = (v4l2->width * v4l2->height * v4l2->format->depth + 7) >> 3; 1049 1050 if (vb2_plane_size(vb, 0) < size) { 1051 em28xx_videodbg("%s data will not fit into plane (%lu < %lu)\n", 1052 __func__, vb2_plane_size(vb, 0), size); 1053 return -EINVAL; 1054 } 1055 vb2_set_plane_payload(vb, 0, size); 1056 1057 return 0; 1058 } 1059 1060 int em28xx_start_analog_streaming(struct vb2_queue *vq, unsigned int count) 1061 { 1062 struct em28xx *dev = vb2_get_drv_priv(vq); 1063 struct em28xx_v4l2 *v4l2 = dev->v4l2; 1064 struct v4l2_frequency f; 1065 struct v4l2_fh *owner; 1066 int rc = 0; 1067 1068 em28xx_videodbg("%s\n", __func__); 1069 1070 /* Make sure streaming is not already in progress for this type 1071 of filehandle (e.g. video, vbi) */ 1072 rc = res_get(dev, vq->type); 1073 if (rc) 1074 return rc; 1075 1076 if (v4l2->streaming_users == 0) { 1077 /* First active streaming user, so allocate all the URBs */ 1078 1079 /* Allocate the USB bandwidth */ 1080 em28xx_set_alternate(dev); 1081 1082 /* Needed, since GPIO might have disabled power of 1083 some i2c device 1084 */ 1085 em28xx_wake_i2c(dev); 1086 1087 v4l2->capture_type = -1; 1088 rc = em28xx_init_usb_xfer(dev, EM28XX_ANALOG_MODE, 1089 dev->analog_xfer_bulk, 1090 EM28XX_NUM_BUFS, 1091 dev->max_pkt_size, 1092 dev->packet_multiplier, 1093 em28xx_urb_data_copy); 1094 if (rc < 0) 1095 return rc; 1096 1097 /* 1098 * djh: it's not clear whether this code is still needed. I'm 1099 * leaving it in here for now entirely out of concern for 1100 * backward compatibility (the old code did it) 1101 */ 1102 1103 /* Ask tuner to go to analog or radio mode */ 1104 memset(&f, 0, sizeof(f)); 1105 f.frequency = v4l2->frequency; 1106 owner = (struct v4l2_fh *)vq->owner; 1107 if (owner && owner->vdev->vfl_type == VFL_TYPE_RADIO) 1108 f.type = V4L2_TUNER_RADIO; 1109 else 1110 f.type = V4L2_TUNER_ANALOG_TV; 1111 v4l2_device_call_all(&v4l2->v4l2_dev, 1112 0, tuner, s_frequency, &f); 1113 1114 /* Enable video stream at TV decoder */ 1115 v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_stream, 1); 1116 } 1117 1118 v4l2->streaming_users++; 1119 1120 return rc; 1121 } 1122 1123 static void em28xx_stop_streaming(struct vb2_queue *vq) 1124 { 1125 struct em28xx *dev = vb2_get_drv_priv(vq); 1126 struct em28xx_v4l2 *v4l2 = dev->v4l2; 1127 struct em28xx_dmaqueue *vidq = &dev->vidq; 1128 unsigned long flags = 0; 1129 1130 em28xx_videodbg("%s\n", __func__); 1131 1132 res_free(dev, vq->type); 1133 1134 if (v4l2->streaming_users-- == 1) { 1135 /* Disable video stream at TV decoder */ 1136 v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_stream, 0); 1137 1138 /* Last active user, so shutdown all the URBS */ 1139 em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE); 1140 } 1141 1142 spin_lock_irqsave(&dev->slock, flags); 1143 if (dev->usb_ctl.vid_buf != NULL) { 1144 vb2_buffer_done(&dev->usb_ctl.vid_buf->vb.vb2_buf, 1145 VB2_BUF_STATE_ERROR); 1146 dev->usb_ctl.vid_buf = NULL; 1147 } 1148 while (!list_empty(&vidq->active)) { 1149 struct em28xx_buffer *buf; 1150 1151 buf = list_entry(vidq->active.next, struct em28xx_buffer, list); 1152 list_del(&buf->list); 1153 vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR); 1154 } 1155 spin_unlock_irqrestore(&dev->slock, flags); 1156 } 1157 1158 void em28xx_stop_vbi_streaming(struct vb2_queue *vq) 1159 { 1160 struct em28xx *dev = vb2_get_drv_priv(vq); 1161 struct em28xx_v4l2 *v4l2 = dev->v4l2; 1162 struct em28xx_dmaqueue *vbiq = &dev->vbiq; 1163 unsigned long flags = 0; 1164 1165 em28xx_videodbg("%s\n", __func__); 1166 1167 res_free(dev, vq->type); 1168 1169 if (v4l2->streaming_users-- == 1) { 1170 /* Disable video stream at TV decoder */ 1171 v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_stream, 0); 1172 1173 /* Last active user, so shutdown all the URBS */ 1174 em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE); 1175 } 1176 1177 spin_lock_irqsave(&dev->slock, flags); 1178 if (dev->usb_ctl.vbi_buf != NULL) { 1179 vb2_buffer_done(&dev->usb_ctl.vbi_buf->vb.vb2_buf, 1180 VB2_BUF_STATE_ERROR); 1181 dev->usb_ctl.vbi_buf = NULL; 1182 } 1183 while (!list_empty(&vbiq->active)) { 1184 struct em28xx_buffer *buf; 1185 1186 buf = list_entry(vbiq->active.next, struct em28xx_buffer, list); 1187 list_del(&buf->list); 1188 vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR); 1189 } 1190 spin_unlock_irqrestore(&dev->slock, flags); 1191 } 1192 1193 static void 1194 buffer_queue(struct vb2_buffer *vb) 1195 { 1196 struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb); 1197 struct em28xx *dev = vb2_get_drv_priv(vb->vb2_queue); 1198 struct em28xx_buffer *buf = 1199 container_of(vbuf, struct em28xx_buffer, vb); 1200 struct em28xx_dmaqueue *vidq = &dev->vidq; 1201 unsigned long flags = 0; 1202 1203 em28xx_videodbg("%s\n", __func__); 1204 buf->mem = vb2_plane_vaddr(vb, 0); 1205 buf->length = vb2_plane_size(vb, 0); 1206 1207 spin_lock_irqsave(&dev->slock, flags); 1208 list_add_tail(&buf->list, &vidq->active); 1209 spin_unlock_irqrestore(&dev->slock, flags); 1210 } 1211 1212 static const struct vb2_ops em28xx_video_qops = { 1213 .queue_setup = queue_setup, 1214 .buf_prepare = buffer_prepare, 1215 .buf_queue = buffer_queue, 1216 .start_streaming = em28xx_start_analog_streaming, 1217 .stop_streaming = em28xx_stop_streaming, 1218 .wait_prepare = vb2_ops_wait_prepare, 1219 .wait_finish = vb2_ops_wait_finish, 1220 }; 1221 1222 static int em28xx_vb2_setup(struct em28xx *dev) 1223 { 1224 int rc; 1225 struct vb2_queue *q; 1226 struct em28xx_v4l2 *v4l2 = dev->v4l2; 1227 1228 /* Setup Videobuf2 for Video capture */ 1229 q = &v4l2->vb_vidq; 1230 q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; 1231 q->io_modes = VB2_READ | VB2_MMAP | VB2_USERPTR | VB2_DMABUF; 1232 q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; 1233 q->drv_priv = dev; 1234 q->buf_struct_size = sizeof(struct em28xx_buffer); 1235 q->ops = &em28xx_video_qops; 1236 q->mem_ops = &vb2_vmalloc_memops; 1237 1238 rc = vb2_queue_init(q); 1239 if (rc < 0) 1240 return rc; 1241 1242 /* Setup Videobuf2 for VBI capture */ 1243 q = &v4l2->vb_vbiq; 1244 q->type = V4L2_BUF_TYPE_VBI_CAPTURE; 1245 q->io_modes = VB2_READ | VB2_MMAP | VB2_USERPTR; 1246 q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; 1247 q->drv_priv = dev; 1248 q->buf_struct_size = sizeof(struct em28xx_buffer); 1249 q->ops = &em28xx_vbi_qops; 1250 q->mem_ops = &vb2_vmalloc_memops; 1251 1252 rc = vb2_queue_init(q); 1253 if (rc < 0) 1254 return rc; 1255 1256 return 0; 1257 } 1258 1259 /********************* v4l2 interface **************************************/ 1260 1261 static void video_mux(struct em28xx *dev, int index) 1262 { 1263 struct v4l2_device *v4l2_dev = &dev->v4l2->v4l2_dev; 1264 1265 dev->ctl_input = index; 1266 dev->ctl_ainput = INPUT(index)->amux; 1267 dev->ctl_aoutput = INPUT(index)->aout; 1268 1269 if (!dev->ctl_aoutput) 1270 dev->ctl_aoutput = EM28XX_AOUT_MASTER; 1271 1272 v4l2_device_call_all(v4l2_dev, 0, video, s_routing, 1273 INPUT(index)->vmux, 0, 0); 1274 1275 if (dev->board.has_msp34xx) { 1276 if (dev->i2s_speed) { 1277 v4l2_device_call_all(v4l2_dev, 0, audio, 1278 s_i2s_clock_freq, dev->i2s_speed); 1279 } 1280 /* Note: this is msp3400 specific */ 1281 v4l2_device_call_all(v4l2_dev, 0, audio, s_routing, 1282 dev->ctl_ainput, 1283 MSP_OUTPUT(MSP_SC_IN_DSP_SCART1), 0); 1284 } 1285 1286 if (dev->board.adecoder != EM28XX_NOADECODER) { 1287 v4l2_device_call_all(v4l2_dev, 0, audio, s_routing, 1288 dev->ctl_ainput, dev->ctl_aoutput, 0); 1289 } 1290 1291 em28xx_audio_analog_set(dev); 1292 } 1293 1294 static void em28xx_ctrl_notify(struct v4l2_ctrl *ctrl, void *priv) 1295 { 1296 struct em28xx *dev = priv; 1297 1298 /* 1299 * In the case of non-AC97 volume controls, we still need 1300 * to do some setups at em28xx, in order to mute/unmute 1301 * and to adjust audio volume. However, the value ranges 1302 * should be checked by the corresponding V4L subdriver. 1303 */ 1304 switch (ctrl->id) { 1305 case V4L2_CID_AUDIO_MUTE: 1306 dev->mute = ctrl->val; 1307 em28xx_audio_analog_set(dev); 1308 break; 1309 case V4L2_CID_AUDIO_VOLUME: 1310 dev->volume = ctrl->val; 1311 em28xx_audio_analog_set(dev); 1312 break; 1313 } 1314 } 1315 1316 static int em28xx_s_ctrl(struct v4l2_ctrl *ctrl) 1317 { 1318 struct em28xx_v4l2 *v4l2 = 1319 container_of(ctrl->handler, struct em28xx_v4l2, ctrl_handler); 1320 struct em28xx *dev = v4l2->dev; 1321 int ret = -EINVAL; 1322 1323 switch (ctrl->id) { 1324 case V4L2_CID_AUDIO_MUTE: 1325 dev->mute = ctrl->val; 1326 ret = em28xx_audio_analog_set(dev); 1327 break; 1328 case V4L2_CID_AUDIO_VOLUME: 1329 dev->volume = ctrl->val; 1330 ret = em28xx_audio_analog_set(dev); 1331 break; 1332 case V4L2_CID_CONTRAST: 1333 ret = em28xx_write_reg(dev, EM28XX_R20_YGAIN, ctrl->val); 1334 break; 1335 case V4L2_CID_BRIGHTNESS: 1336 ret = em28xx_write_reg(dev, EM28XX_R21_YOFFSET, ctrl->val); 1337 break; 1338 case V4L2_CID_SATURATION: 1339 ret = em28xx_write_reg(dev, EM28XX_R22_UVGAIN, ctrl->val); 1340 break; 1341 case V4L2_CID_BLUE_BALANCE: 1342 ret = em28xx_write_reg(dev, EM28XX_R23_UOFFSET, ctrl->val); 1343 break; 1344 case V4L2_CID_RED_BALANCE: 1345 ret = em28xx_write_reg(dev, EM28XX_R24_VOFFSET, ctrl->val); 1346 break; 1347 case V4L2_CID_SHARPNESS: 1348 ret = em28xx_write_reg(dev, EM28XX_R25_SHARPNESS, ctrl->val); 1349 break; 1350 } 1351 1352 return (ret < 0) ? ret : 0; 1353 } 1354 1355 static const struct v4l2_ctrl_ops em28xx_ctrl_ops = { 1356 .s_ctrl = em28xx_s_ctrl, 1357 }; 1358 1359 static void size_to_scale(struct em28xx *dev, 1360 unsigned int width, unsigned int height, 1361 unsigned int *hscale, unsigned int *vscale) 1362 { 1363 unsigned int maxw = norm_maxw(dev); 1364 unsigned int maxh = norm_maxh(dev); 1365 1366 *hscale = (((unsigned long)maxw) << 12) / width - 4096L; 1367 if (*hscale > EM28XX_HVSCALE_MAX) 1368 *hscale = EM28XX_HVSCALE_MAX; 1369 1370 *vscale = (((unsigned long)maxh) << 12) / height - 4096L; 1371 if (*vscale > EM28XX_HVSCALE_MAX) 1372 *vscale = EM28XX_HVSCALE_MAX; 1373 } 1374 1375 static void scale_to_size(struct em28xx *dev, 1376 unsigned int hscale, unsigned int vscale, 1377 unsigned int *width, unsigned int *height) 1378 { 1379 unsigned int maxw = norm_maxw(dev); 1380 unsigned int maxh = norm_maxh(dev); 1381 1382 *width = (((unsigned long)maxw) << 12) / (hscale + 4096L); 1383 *height = (((unsigned long)maxh) << 12) / (vscale + 4096L); 1384 1385 /* Don't let width or height to be zero */ 1386 if (*width < 1) 1387 *width = 1; 1388 if (*height < 1) 1389 *height = 1; 1390 } 1391 1392 /* ------------------------------------------------------------------ 1393 IOCTL vidioc handling 1394 ------------------------------------------------------------------*/ 1395 1396 static int vidioc_g_fmt_vid_cap(struct file *file, void *priv, 1397 struct v4l2_format *f) 1398 { 1399 struct em28xx *dev = video_drvdata(file); 1400 struct em28xx_v4l2 *v4l2 = dev->v4l2; 1401 1402 f->fmt.pix.width = v4l2->width; 1403 f->fmt.pix.height = v4l2->height; 1404 f->fmt.pix.pixelformat = v4l2->format->fourcc; 1405 f->fmt.pix.bytesperline = (v4l2->width * v4l2->format->depth + 7) >> 3; 1406 f->fmt.pix.sizeimage = f->fmt.pix.bytesperline * v4l2->height; 1407 f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M; 1408 1409 /* FIXME: TOP? NONE? BOTTOM? ALTENATE? */ 1410 if (v4l2->progressive) 1411 f->fmt.pix.field = V4L2_FIELD_NONE; 1412 else 1413 f->fmt.pix.field = v4l2->interlaced_fieldmode ? 1414 V4L2_FIELD_INTERLACED : V4L2_FIELD_TOP; 1415 return 0; 1416 } 1417 1418 static struct em28xx_fmt *format_by_fourcc(unsigned int fourcc) 1419 { 1420 unsigned int i; 1421 1422 for (i = 0; i < ARRAY_SIZE(format); i++) 1423 if (format[i].fourcc == fourcc) 1424 return &format[i]; 1425 1426 return NULL; 1427 } 1428 1429 static int vidioc_try_fmt_vid_cap(struct file *file, void *priv, 1430 struct v4l2_format *f) 1431 { 1432 struct em28xx *dev = video_drvdata(file); 1433 struct em28xx_v4l2 *v4l2 = dev->v4l2; 1434 unsigned int width = f->fmt.pix.width; 1435 unsigned int height = f->fmt.pix.height; 1436 unsigned int maxw = norm_maxw(dev); 1437 unsigned int maxh = norm_maxh(dev); 1438 unsigned int hscale, vscale; 1439 struct em28xx_fmt *fmt; 1440 1441 fmt = format_by_fourcc(f->fmt.pix.pixelformat); 1442 if (!fmt) { 1443 em28xx_videodbg("Fourcc format (%08x) invalid.\n", 1444 f->fmt.pix.pixelformat); 1445 return -EINVAL; 1446 } 1447 1448 if (dev->board.is_em2800) { 1449 /* the em2800 can only scale down to 50% */ 1450 height = height > (3 * maxh / 4) ? maxh : maxh / 2; 1451 width = width > (3 * maxw / 4) ? maxw : maxw / 2; 1452 /* 1453 * MaxPacketSize for em2800 is too small to capture at full 1454 * resolution use half of maxw as the scaler can only scale 1455 * to 50% 1456 */ 1457 if (width == maxw && height == maxh) 1458 width /= 2; 1459 } else { 1460 /* width must even because of the YUYV format 1461 height must be even because of interlacing */ 1462 v4l_bound_align_image(&width, 48, maxw, 1, &height, 32, maxh, 1463 1, 0); 1464 } 1465 /* Avoid division by zero at size_to_scale */ 1466 if (width < 1) 1467 width = 1; 1468 if (height < 1) 1469 height = 1; 1470 1471 size_to_scale(dev, width, height, &hscale, &vscale); 1472 scale_to_size(dev, hscale, vscale, &width, &height); 1473 1474 f->fmt.pix.width = width; 1475 f->fmt.pix.height = height; 1476 f->fmt.pix.pixelformat = fmt->fourcc; 1477 f->fmt.pix.bytesperline = (width * fmt->depth + 7) >> 3; 1478 f->fmt.pix.sizeimage = f->fmt.pix.bytesperline * height; 1479 f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M; 1480 if (v4l2->progressive) 1481 f->fmt.pix.field = V4L2_FIELD_NONE; 1482 else 1483 f->fmt.pix.field = v4l2->interlaced_fieldmode ? 1484 V4L2_FIELD_INTERLACED : V4L2_FIELD_TOP; 1485 f->fmt.pix.priv = 0; 1486 1487 return 0; 1488 } 1489 1490 static int em28xx_set_video_format(struct em28xx *dev, unsigned int fourcc, 1491 unsigned width, unsigned height) 1492 { 1493 struct em28xx_fmt *fmt; 1494 struct em28xx_v4l2 *v4l2 = dev->v4l2; 1495 1496 fmt = format_by_fourcc(fourcc); 1497 if (!fmt) 1498 return -EINVAL; 1499 1500 v4l2->format = fmt; 1501 v4l2->width = width; 1502 v4l2->height = height; 1503 1504 /* set new image size */ 1505 size_to_scale(dev, v4l2->width, v4l2->height, 1506 &v4l2->hscale, &v4l2->vscale); 1507 1508 em28xx_resolution_set(dev); 1509 1510 return 0; 1511 } 1512 1513 static int vidioc_s_fmt_vid_cap(struct file *file, void *priv, 1514 struct v4l2_format *f) 1515 { 1516 struct em28xx *dev = video_drvdata(file); 1517 struct em28xx_v4l2 *v4l2 = dev->v4l2; 1518 1519 if (vb2_is_busy(&v4l2->vb_vidq)) 1520 return -EBUSY; 1521 1522 vidioc_try_fmt_vid_cap(file, priv, f); 1523 1524 return em28xx_set_video_format(dev, f->fmt.pix.pixelformat, 1525 f->fmt.pix.width, f->fmt.pix.height); 1526 } 1527 1528 static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *norm) 1529 { 1530 struct em28xx *dev = video_drvdata(file); 1531 1532 *norm = dev->v4l2->norm; 1533 1534 return 0; 1535 } 1536 1537 static int vidioc_querystd(struct file *file, void *priv, v4l2_std_id *norm) 1538 { 1539 struct em28xx *dev = video_drvdata(file); 1540 1541 v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, video, querystd, norm); 1542 1543 return 0; 1544 } 1545 1546 static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm) 1547 { 1548 struct em28xx *dev = video_drvdata(file); 1549 struct em28xx_v4l2 *v4l2 = dev->v4l2; 1550 struct v4l2_format f; 1551 1552 if (norm == v4l2->norm) 1553 return 0; 1554 1555 if (v4l2->streaming_users > 0) 1556 return -EBUSY; 1557 1558 v4l2->norm = norm; 1559 1560 /* Adjusts width/height, if needed */ 1561 f.fmt.pix.width = 720; 1562 f.fmt.pix.height = (norm & V4L2_STD_525_60) ? 480 : 576; 1563 vidioc_try_fmt_vid_cap(file, priv, &f); 1564 1565 /* set new image size */ 1566 v4l2->width = f.fmt.pix.width; 1567 v4l2->height = f.fmt.pix.height; 1568 size_to_scale(dev, v4l2->width, v4l2->height, 1569 &v4l2->hscale, &v4l2->vscale); 1570 1571 em28xx_resolution_set(dev); 1572 v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_std, v4l2->norm); 1573 1574 return 0; 1575 } 1576 1577 static int vidioc_g_parm(struct file *file, void *priv, 1578 struct v4l2_streamparm *p) 1579 { 1580 struct em28xx *dev = video_drvdata(file); 1581 struct em28xx_v4l2 *v4l2 = dev->v4l2; 1582 int rc = 0; 1583 1584 p->parm.capture.readbuffers = EM28XX_MIN_BUF; 1585 if (dev->board.is_webcam) 1586 rc = v4l2_device_call_until_err(&v4l2->v4l2_dev, 0, 1587 video, g_parm, p); 1588 else 1589 v4l2_video_std_frame_period(v4l2->norm, 1590 &p->parm.capture.timeperframe); 1591 1592 return rc; 1593 } 1594 1595 static int vidioc_s_parm(struct file *file, void *priv, 1596 struct v4l2_streamparm *p) 1597 { 1598 struct em28xx *dev = video_drvdata(file); 1599 1600 p->parm.capture.readbuffers = EM28XX_MIN_BUF; 1601 return v4l2_device_call_until_err(&dev->v4l2->v4l2_dev, 1602 0, video, s_parm, p); 1603 } 1604 1605 static int vidioc_enum_input(struct file *file, void *priv, 1606 struct v4l2_input *i) 1607 { 1608 struct em28xx *dev = video_drvdata(file); 1609 unsigned int n; 1610 1611 n = i->index; 1612 if (n >= MAX_EM28XX_INPUT) 1613 return -EINVAL; 1614 if (0 == INPUT(n)->type) 1615 return -EINVAL; 1616 1617 i->index = n; 1618 i->type = V4L2_INPUT_TYPE_CAMERA; 1619 1620 strcpy(i->name, iname[INPUT(n)->type]); 1621 1622 if ((EM28XX_VMUX_TELEVISION == INPUT(n)->type)) 1623 i->type = V4L2_INPUT_TYPE_TUNER; 1624 1625 i->std = dev->v4l2->vdev.tvnorms; 1626 /* webcams do not have the STD API */ 1627 if (dev->board.is_webcam) 1628 i->capabilities = 0; 1629 1630 return 0; 1631 } 1632 1633 static int vidioc_g_input(struct file *file, void *priv, unsigned int *i) 1634 { 1635 struct em28xx *dev = video_drvdata(file); 1636 1637 *i = dev->ctl_input; 1638 1639 return 0; 1640 } 1641 1642 static int vidioc_s_input(struct file *file, void *priv, unsigned int i) 1643 { 1644 struct em28xx *dev = video_drvdata(file); 1645 1646 if (i >= MAX_EM28XX_INPUT) 1647 return -EINVAL; 1648 if (0 == INPUT(i)->type) 1649 return -EINVAL; 1650 1651 video_mux(dev, i); 1652 return 0; 1653 } 1654 1655 static int vidioc_g_audio(struct file *file, void *priv, struct v4l2_audio *a) 1656 { 1657 struct em28xx *dev = video_drvdata(file); 1658 1659 switch (a->index) { 1660 case EM28XX_AMUX_VIDEO: 1661 strcpy(a->name, "Television"); 1662 break; 1663 case EM28XX_AMUX_LINE_IN: 1664 strcpy(a->name, "Line In"); 1665 break; 1666 case EM28XX_AMUX_VIDEO2: 1667 strcpy(a->name, "Television alt"); 1668 break; 1669 case EM28XX_AMUX_PHONE: 1670 strcpy(a->name, "Phone"); 1671 break; 1672 case EM28XX_AMUX_MIC: 1673 strcpy(a->name, "Mic"); 1674 break; 1675 case EM28XX_AMUX_CD: 1676 strcpy(a->name, "CD"); 1677 break; 1678 case EM28XX_AMUX_AUX: 1679 strcpy(a->name, "Aux"); 1680 break; 1681 case EM28XX_AMUX_PCM_OUT: 1682 strcpy(a->name, "PCM"); 1683 break; 1684 default: 1685 return -EINVAL; 1686 } 1687 1688 a->index = dev->ctl_ainput; 1689 a->capability = V4L2_AUDCAP_STEREO; 1690 1691 return 0; 1692 } 1693 1694 static int vidioc_s_audio(struct file *file, void *priv, const struct v4l2_audio *a) 1695 { 1696 struct em28xx *dev = video_drvdata(file); 1697 1698 if (a->index >= MAX_EM28XX_INPUT) 1699 return -EINVAL; 1700 if (0 == INPUT(a->index)->type) 1701 return -EINVAL; 1702 1703 dev->ctl_ainput = INPUT(a->index)->amux; 1704 dev->ctl_aoutput = INPUT(a->index)->aout; 1705 1706 if (!dev->ctl_aoutput) 1707 dev->ctl_aoutput = EM28XX_AOUT_MASTER; 1708 1709 return 0; 1710 } 1711 1712 static int vidioc_g_tuner(struct file *file, void *priv, 1713 struct v4l2_tuner *t) 1714 { 1715 struct em28xx *dev = video_drvdata(file); 1716 1717 if (0 != t->index) 1718 return -EINVAL; 1719 1720 strcpy(t->name, "Tuner"); 1721 1722 v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, g_tuner, t); 1723 return 0; 1724 } 1725 1726 static int vidioc_s_tuner(struct file *file, void *priv, 1727 const struct v4l2_tuner *t) 1728 { 1729 struct em28xx *dev = video_drvdata(file); 1730 1731 if (0 != t->index) 1732 return -EINVAL; 1733 1734 v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, s_tuner, t); 1735 return 0; 1736 } 1737 1738 static int vidioc_g_frequency(struct file *file, void *priv, 1739 struct v4l2_frequency *f) 1740 { 1741 struct em28xx *dev = video_drvdata(file); 1742 struct em28xx_v4l2 *v4l2 = dev->v4l2; 1743 1744 if (0 != f->tuner) 1745 return -EINVAL; 1746 1747 f->frequency = v4l2->frequency; 1748 return 0; 1749 } 1750 1751 static int vidioc_s_frequency(struct file *file, void *priv, 1752 const struct v4l2_frequency *f) 1753 { 1754 struct v4l2_frequency new_freq = *f; 1755 struct em28xx *dev = video_drvdata(file); 1756 struct em28xx_v4l2 *v4l2 = dev->v4l2; 1757 1758 if (0 != f->tuner) 1759 return -EINVAL; 1760 1761 v4l2_device_call_all(&v4l2->v4l2_dev, 0, tuner, s_frequency, f); 1762 v4l2_device_call_all(&v4l2->v4l2_dev, 0, tuner, g_frequency, &new_freq); 1763 v4l2->frequency = new_freq.frequency; 1764 1765 return 0; 1766 } 1767 1768 #ifdef CONFIG_VIDEO_ADV_DEBUG 1769 static int vidioc_g_chip_info(struct file *file, void *priv, 1770 struct v4l2_dbg_chip_info *chip) 1771 { 1772 struct em28xx *dev = video_drvdata(file); 1773 1774 if (chip->match.addr > 1) 1775 return -EINVAL; 1776 if (chip->match.addr == 1) 1777 strlcpy(chip->name, "ac97", sizeof(chip->name)); 1778 else 1779 strlcpy(chip->name, 1780 dev->v4l2->v4l2_dev.name, sizeof(chip->name)); 1781 return 0; 1782 } 1783 1784 static int em28xx_reg_len(int reg) 1785 { 1786 switch (reg) { 1787 case EM28XX_R40_AC97LSB: 1788 case EM28XX_R30_HSCALELOW: 1789 case EM28XX_R32_VSCALELOW: 1790 return 2; 1791 default: 1792 return 1; 1793 } 1794 } 1795 1796 static int vidioc_g_register(struct file *file, void *priv, 1797 struct v4l2_dbg_register *reg) 1798 { 1799 struct em28xx *dev = video_drvdata(file); 1800 int ret; 1801 1802 if (reg->match.addr > 1) 1803 return -EINVAL; 1804 if (reg->match.addr) { 1805 ret = em28xx_read_ac97(dev, reg->reg); 1806 if (ret < 0) 1807 return ret; 1808 1809 reg->val = ret; 1810 reg->size = 1; 1811 return 0; 1812 } 1813 1814 /* Match host */ 1815 reg->size = em28xx_reg_len(reg->reg); 1816 if (reg->size == 1) { 1817 ret = em28xx_read_reg(dev, reg->reg); 1818 1819 if (ret < 0) 1820 return ret; 1821 1822 reg->val = ret; 1823 } else { 1824 __le16 val = 0; 1825 1826 ret = dev->em28xx_read_reg_req_len(dev, USB_REQ_GET_STATUS, 1827 reg->reg, (char *)&val, 2); 1828 if (ret < 0) 1829 return ret; 1830 1831 reg->val = le16_to_cpu(val); 1832 } 1833 1834 return 0; 1835 } 1836 1837 static int vidioc_s_register(struct file *file, void *priv, 1838 const struct v4l2_dbg_register *reg) 1839 { 1840 struct em28xx *dev = video_drvdata(file); 1841 __le16 buf; 1842 1843 if (reg->match.addr > 1) 1844 return -EINVAL; 1845 if (reg->match.addr) 1846 return em28xx_write_ac97(dev, reg->reg, reg->val); 1847 1848 /* Match host */ 1849 buf = cpu_to_le16(reg->val); 1850 1851 return em28xx_write_regs(dev, reg->reg, (char *)&buf, 1852 em28xx_reg_len(reg->reg)); 1853 } 1854 #endif 1855 1856 static int vidioc_querycap(struct file *file, void *priv, 1857 struct v4l2_capability *cap) 1858 { 1859 struct video_device *vdev = video_devdata(file); 1860 struct em28xx *dev = video_drvdata(file); 1861 struct em28xx_v4l2 *v4l2 = dev->v4l2; 1862 1863 strlcpy(cap->driver, "em28xx", sizeof(cap->driver)); 1864 strlcpy(cap->card, em28xx_boards[dev->model].name, sizeof(cap->card)); 1865 usb_make_path(dev->udev, cap->bus_info, sizeof(cap->bus_info)); 1866 1867 if (vdev->vfl_type == VFL_TYPE_GRABBER) 1868 cap->device_caps = V4L2_CAP_READWRITE | 1869 V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; 1870 else if (vdev->vfl_type == VFL_TYPE_RADIO) 1871 cap->device_caps = V4L2_CAP_RADIO; 1872 else 1873 cap->device_caps = V4L2_CAP_READWRITE | V4L2_CAP_VBI_CAPTURE; 1874 1875 if (dev->int_audio_type != EM28XX_INT_AUDIO_NONE) 1876 cap->device_caps |= V4L2_CAP_AUDIO; 1877 1878 if (dev->tuner_type != TUNER_ABSENT) 1879 cap->device_caps |= V4L2_CAP_TUNER; 1880 1881 cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS | 1882 V4L2_CAP_READWRITE | V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; 1883 if (video_is_registered(&v4l2->vbi_dev)) 1884 cap->capabilities |= V4L2_CAP_VBI_CAPTURE; 1885 if (video_is_registered(&v4l2->radio_dev)) 1886 cap->capabilities |= V4L2_CAP_RADIO; 1887 return 0; 1888 } 1889 1890 static int vidioc_enum_fmt_vid_cap(struct file *file, void *priv, 1891 struct v4l2_fmtdesc *f) 1892 { 1893 if (unlikely(f->index >= ARRAY_SIZE(format))) 1894 return -EINVAL; 1895 1896 strlcpy(f->description, format[f->index].name, sizeof(f->description)); 1897 f->pixelformat = format[f->index].fourcc; 1898 1899 return 0; 1900 } 1901 1902 static int vidioc_enum_framesizes(struct file *file, void *priv, 1903 struct v4l2_frmsizeenum *fsize) 1904 { 1905 struct em28xx *dev = video_drvdata(file); 1906 struct em28xx_fmt *fmt; 1907 unsigned int maxw = norm_maxw(dev); 1908 unsigned int maxh = norm_maxh(dev); 1909 1910 fmt = format_by_fourcc(fsize->pixel_format); 1911 if (!fmt) { 1912 em28xx_videodbg("Fourcc format (%08x) invalid.\n", 1913 fsize->pixel_format); 1914 return -EINVAL; 1915 } 1916 1917 if (dev->board.is_em2800) { 1918 if (fsize->index > 1) 1919 return -EINVAL; 1920 fsize->type = V4L2_FRMSIZE_TYPE_DISCRETE; 1921 fsize->discrete.width = maxw / (1 + fsize->index); 1922 fsize->discrete.height = maxh / (1 + fsize->index); 1923 return 0; 1924 } 1925 1926 if (fsize->index != 0) 1927 return -EINVAL; 1928 1929 /* Report a continuous range */ 1930 fsize->type = V4L2_FRMSIZE_TYPE_STEPWISE; 1931 scale_to_size(dev, EM28XX_HVSCALE_MAX, EM28XX_HVSCALE_MAX, 1932 &fsize->stepwise.min_width, &fsize->stepwise.min_height); 1933 if (fsize->stepwise.min_width < 48) 1934 fsize->stepwise.min_width = 48; 1935 if (fsize->stepwise.min_height < 38) 1936 fsize->stepwise.min_height = 38; 1937 fsize->stepwise.max_width = maxw; 1938 fsize->stepwise.max_height = maxh; 1939 fsize->stepwise.step_width = 1; 1940 fsize->stepwise.step_height = 1; 1941 return 0; 1942 } 1943 1944 /* RAW VBI ioctls */ 1945 1946 static int vidioc_g_fmt_vbi_cap(struct file *file, void *priv, 1947 struct v4l2_format *format) 1948 { 1949 struct em28xx *dev = video_drvdata(file); 1950 struct em28xx_v4l2 *v4l2 = dev->v4l2; 1951 1952 format->fmt.vbi.samples_per_line = v4l2->vbi_width; 1953 format->fmt.vbi.sample_format = V4L2_PIX_FMT_GREY; 1954 format->fmt.vbi.offset = 0; 1955 format->fmt.vbi.flags = 0; 1956 format->fmt.vbi.sampling_rate = 6750000 * 4 / 2; 1957 format->fmt.vbi.count[0] = v4l2->vbi_height; 1958 format->fmt.vbi.count[1] = v4l2->vbi_height; 1959 memset(format->fmt.vbi.reserved, 0, sizeof(format->fmt.vbi.reserved)); 1960 1961 /* Varies by video standard (NTSC, PAL, etc.) */ 1962 if (v4l2->norm & V4L2_STD_525_60) { 1963 /* NTSC */ 1964 format->fmt.vbi.start[0] = 10; 1965 format->fmt.vbi.start[1] = 273; 1966 } else if (v4l2->norm & V4L2_STD_625_50) { 1967 /* PAL */ 1968 format->fmt.vbi.start[0] = 6; 1969 format->fmt.vbi.start[1] = 318; 1970 } 1971 1972 return 0; 1973 } 1974 1975 /* ----------------------------------------------------------- */ 1976 /* RADIO ESPECIFIC IOCTLS */ 1977 /* ----------------------------------------------------------- */ 1978 1979 static int radio_g_tuner(struct file *file, void *priv, 1980 struct v4l2_tuner *t) 1981 { 1982 struct em28xx *dev = video_drvdata(file); 1983 1984 if (unlikely(t->index > 0)) 1985 return -EINVAL; 1986 1987 strcpy(t->name, "Radio"); 1988 1989 v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, g_tuner, t); 1990 1991 return 0; 1992 } 1993 1994 static int radio_s_tuner(struct file *file, void *priv, 1995 const struct v4l2_tuner *t) 1996 { 1997 struct em28xx *dev = video_drvdata(file); 1998 1999 if (0 != t->index) 2000 return -EINVAL; 2001 2002 v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, s_tuner, t); 2003 2004 return 0; 2005 } 2006 2007 /* 2008 * em28xx_free_v4l2() - Free struct em28xx_v4l2 2009 * 2010 * @ref: struct kref for struct em28xx_v4l2 2011 * 2012 * Called when all users of struct em28xx_v4l2 are gone 2013 */ 2014 static void em28xx_free_v4l2(struct kref *ref) 2015 { 2016 struct em28xx_v4l2 *v4l2 = container_of(ref, struct em28xx_v4l2, ref); 2017 2018 v4l2->dev->v4l2 = NULL; 2019 kfree(v4l2); 2020 } 2021 2022 /* 2023 * em28xx_v4l2_open() 2024 * inits the device and starts isoc transfer 2025 */ 2026 static int em28xx_v4l2_open(struct file *filp) 2027 { 2028 struct video_device *vdev = video_devdata(filp); 2029 struct em28xx *dev = video_drvdata(filp); 2030 struct em28xx_v4l2 *v4l2 = dev->v4l2; 2031 enum v4l2_buf_type fh_type = 0; 2032 int ret; 2033 2034 switch (vdev->vfl_type) { 2035 case VFL_TYPE_GRABBER: 2036 fh_type = V4L2_BUF_TYPE_VIDEO_CAPTURE; 2037 break; 2038 case VFL_TYPE_VBI: 2039 fh_type = V4L2_BUF_TYPE_VBI_CAPTURE; 2040 break; 2041 case VFL_TYPE_RADIO: 2042 break; 2043 default: 2044 return -EINVAL; 2045 } 2046 2047 em28xx_videodbg("open dev=%s type=%s users=%d\n", 2048 video_device_node_name(vdev), v4l2_type_names[fh_type], 2049 v4l2->users); 2050 2051 if (mutex_lock_interruptible(&dev->lock)) 2052 return -ERESTARTSYS; 2053 2054 ret = v4l2_fh_open(filp); 2055 if (ret) { 2056 dev_err(&dev->intf->dev, 2057 "%s: v4l2_fh_open() returned error %d\n", 2058 __func__, ret); 2059 mutex_unlock(&dev->lock); 2060 return ret; 2061 } 2062 2063 if (v4l2->users == 0) { 2064 em28xx_set_mode(dev, EM28XX_ANALOG_MODE); 2065 2066 if (vdev->vfl_type != VFL_TYPE_RADIO) 2067 em28xx_resolution_set(dev); 2068 2069 /* 2070 * Needed, since GPIO might have disabled power 2071 * of some i2c devices 2072 */ 2073 em28xx_wake_i2c(dev); 2074 } 2075 2076 if (vdev->vfl_type == VFL_TYPE_RADIO) { 2077 em28xx_videodbg("video_open: setting radio device\n"); 2078 v4l2_device_call_all(&v4l2->v4l2_dev, 0, tuner, s_radio); 2079 } 2080 2081 kref_get(&dev->ref); 2082 kref_get(&v4l2->ref); 2083 v4l2->users++; 2084 2085 mutex_unlock(&dev->lock); 2086 2087 return 0; 2088 } 2089 2090 /* 2091 * em28xx_v4l2_fini() 2092 * unregisters the v4l2,i2c and usb devices 2093 * called when the device gets disconected or at module unload 2094 */ 2095 static int em28xx_v4l2_fini(struct em28xx *dev) 2096 { 2097 struct em28xx_v4l2 *v4l2 = dev->v4l2; 2098 2099 if (dev->is_audio_only) { 2100 /* Shouldn't initialize IR for this interface */ 2101 return 0; 2102 } 2103 2104 if (!dev->has_video) { 2105 /* This device does not support the v4l2 extension */ 2106 return 0; 2107 } 2108 2109 if (v4l2 == NULL) 2110 return 0; 2111 2112 dev_info(&dev->intf->dev, "Closing video extension\n"); 2113 2114 mutex_lock(&dev->lock); 2115 2116 v4l2_device_disconnect(&v4l2->v4l2_dev); 2117 2118 em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE); 2119 2120 em28xx_v4l2_media_release(dev); 2121 2122 if (video_is_registered(&v4l2->radio_dev)) { 2123 dev_info(&dev->intf->dev, "V4L2 device %s deregistered\n", 2124 video_device_node_name(&v4l2->radio_dev)); 2125 video_unregister_device(&v4l2->radio_dev); 2126 } 2127 if (video_is_registered(&v4l2->vbi_dev)) { 2128 dev_info(&dev->intf->dev, "V4L2 device %s deregistered\n", 2129 video_device_node_name(&v4l2->vbi_dev)); 2130 video_unregister_device(&v4l2->vbi_dev); 2131 } 2132 if (video_is_registered(&v4l2->vdev)) { 2133 dev_info(&dev->intf->dev, "V4L2 device %s deregistered\n", 2134 video_device_node_name(&v4l2->vdev)); 2135 video_unregister_device(&v4l2->vdev); 2136 } 2137 2138 v4l2_ctrl_handler_free(&v4l2->ctrl_handler); 2139 v4l2_device_unregister(&v4l2->v4l2_dev); 2140 2141 if (v4l2->clk) { 2142 v4l2_clk_unregister_fixed(v4l2->clk); 2143 v4l2->clk = NULL; 2144 } 2145 2146 kref_put(&v4l2->ref, em28xx_free_v4l2); 2147 2148 mutex_unlock(&dev->lock); 2149 2150 kref_put(&dev->ref, em28xx_free_device); 2151 2152 return 0; 2153 } 2154 2155 static int em28xx_v4l2_suspend(struct em28xx *dev) 2156 { 2157 if (dev->is_audio_only) 2158 return 0; 2159 2160 if (!dev->has_video) 2161 return 0; 2162 2163 dev_info(&dev->intf->dev, "Suspending video extension\n"); 2164 em28xx_stop_urbs(dev); 2165 return 0; 2166 } 2167 2168 static int em28xx_v4l2_resume(struct em28xx *dev) 2169 { 2170 if (dev->is_audio_only) 2171 return 0; 2172 2173 if (!dev->has_video) 2174 return 0; 2175 2176 dev_info(&dev->intf->dev, "Resuming video extension\n"); 2177 /* what do we do here */ 2178 return 0; 2179 } 2180 2181 /* 2182 * em28xx_v4l2_close() 2183 * stops streaming and deallocates all resources allocated by the v4l2 2184 * calls and ioctls 2185 */ 2186 static int em28xx_v4l2_close(struct file *filp) 2187 { 2188 struct em28xx *dev = video_drvdata(filp); 2189 struct em28xx_v4l2 *v4l2 = dev->v4l2; 2190 int errCode; 2191 2192 em28xx_videodbg("users=%d\n", v4l2->users); 2193 2194 vb2_fop_release(filp); 2195 mutex_lock(&dev->lock); 2196 2197 if (v4l2->users == 1) { 2198 /* No sense to try to write to the device */ 2199 if (dev->disconnected) 2200 goto exit; 2201 2202 /* Save some power by putting tuner to sleep */ 2203 v4l2_device_call_all(&v4l2->v4l2_dev, 0, core, s_power, 0); 2204 2205 /* do this before setting alternate! */ 2206 em28xx_set_mode(dev, EM28XX_SUSPEND); 2207 2208 /* set alternate 0 */ 2209 dev->alt = 0; 2210 em28xx_videodbg("setting alternate 0\n"); 2211 errCode = usb_set_interface(dev->udev, 0, 0); 2212 if (errCode < 0) { 2213 dev_err(&dev->intf->dev, 2214 "cannot change alternate number to 0 (error=%i)\n", 2215 errCode); 2216 } 2217 } 2218 2219 exit: 2220 v4l2->users--; 2221 kref_put(&v4l2->ref, em28xx_free_v4l2); 2222 mutex_unlock(&dev->lock); 2223 kref_put(&dev->ref, em28xx_free_device); 2224 2225 return 0; 2226 } 2227 2228 static const struct v4l2_file_operations em28xx_v4l_fops = { 2229 .owner = THIS_MODULE, 2230 .open = em28xx_v4l2_open, 2231 .release = em28xx_v4l2_close, 2232 .read = vb2_fop_read, 2233 .poll = vb2_fop_poll, 2234 .mmap = vb2_fop_mmap, 2235 .unlocked_ioctl = video_ioctl2, 2236 }; 2237 2238 static const struct v4l2_ioctl_ops video_ioctl_ops = { 2239 .vidioc_querycap = vidioc_querycap, 2240 .vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap, 2241 .vidioc_g_fmt_vid_cap = vidioc_g_fmt_vid_cap, 2242 .vidioc_try_fmt_vid_cap = vidioc_try_fmt_vid_cap, 2243 .vidioc_s_fmt_vid_cap = vidioc_s_fmt_vid_cap, 2244 .vidioc_g_fmt_vbi_cap = vidioc_g_fmt_vbi_cap, 2245 .vidioc_try_fmt_vbi_cap = vidioc_g_fmt_vbi_cap, 2246 .vidioc_s_fmt_vbi_cap = vidioc_g_fmt_vbi_cap, 2247 .vidioc_enum_framesizes = vidioc_enum_framesizes, 2248 .vidioc_g_audio = vidioc_g_audio, 2249 .vidioc_s_audio = vidioc_s_audio, 2250 2251 .vidioc_reqbufs = vb2_ioctl_reqbufs, 2252 .vidioc_create_bufs = vb2_ioctl_create_bufs, 2253 .vidioc_prepare_buf = vb2_ioctl_prepare_buf, 2254 .vidioc_querybuf = vb2_ioctl_querybuf, 2255 .vidioc_qbuf = vb2_ioctl_qbuf, 2256 .vidioc_dqbuf = vb2_ioctl_dqbuf, 2257 2258 .vidioc_g_std = vidioc_g_std, 2259 .vidioc_querystd = vidioc_querystd, 2260 .vidioc_s_std = vidioc_s_std, 2261 .vidioc_g_parm = vidioc_g_parm, 2262 .vidioc_s_parm = vidioc_s_parm, 2263 .vidioc_enum_input = vidioc_enum_input, 2264 .vidioc_g_input = vidioc_g_input, 2265 .vidioc_s_input = vidioc_s_input, 2266 .vidioc_streamon = vb2_ioctl_streamon, 2267 .vidioc_streamoff = vb2_ioctl_streamoff, 2268 .vidioc_g_tuner = vidioc_g_tuner, 2269 .vidioc_s_tuner = vidioc_s_tuner, 2270 .vidioc_g_frequency = vidioc_g_frequency, 2271 .vidioc_s_frequency = vidioc_s_frequency, 2272 .vidioc_subscribe_event = v4l2_ctrl_subscribe_event, 2273 .vidioc_unsubscribe_event = v4l2_event_unsubscribe, 2274 #ifdef CONFIG_VIDEO_ADV_DEBUG 2275 .vidioc_g_chip_info = vidioc_g_chip_info, 2276 .vidioc_g_register = vidioc_g_register, 2277 .vidioc_s_register = vidioc_s_register, 2278 #endif 2279 }; 2280 2281 static const struct video_device em28xx_video_template = { 2282 .fops = &em28xx_v4l_fops, 2283 .ioctl_ops = &video_ioctl_ops, 2284 .release = video_device_release_empty, 2285 .tvnorms = V4L2_STD_ALL, 2286 }; 2287 2288 static const struct v4l2_file_operations radio_fops = { 2289 .owner = THIS_MODULE, 2290 .open = em28xx_v4l2_open, 2291 .release = em28xx_v4l2_close, 2292 .unlocked_ioctl = video_ioctl2, 2293 }; 2294 2295 static const struct v4l2_ioctl_ops radio_ioctl_ops = { 2296 .vidioc_querycap = vidioc_querycap, 2297 .vidioc_g_tuner = radio_g_tuner, 2298 .vidioc_s_tuner = radio_s_tuner, 2299 .vidioc_g_frequency = vidioc_g_frequency, 2300 .vidioc_s_frequency = vidioc_s_frequency, 2301 .vidioc_subscribe_event = v4l2_ctrl_subscribe_event, 2302 .vidioc_unsubscribe_event = v4l2_event_unsubscribe, 2303 #ifdef CONFIG_VIDEO_ADV_DEBUG 2304 .vidioc_g_chip_info = vidioc_g_chip_info, 2305 .vidioc_g_register = vidioc_g_register, 2306 .vidioc_s_register = vidioc_s_register, 2307 #endif 2308 }; 2309 2310 static struct video_device em28xx_radio_template = { 2311 .fops = &radio_fops, 2312 .ioctl_ops = &radio_ioctl_ops, 2313 .release = video_device_release_empty, 2314 }; 2315 2316 /* I2C possible address to saa7115, tvp5150, msp3400, tvaudio */ 2317 static unsigned short saa711x_addrs[] = { 2318 0x4a >> 1, 0x48 >> 1, /* SAA7111, SAA7111A and SAA7113 */ 2319 0x42 >> 1, 0x40 >> 1, /* SAA7114, SAA7115 and SAA7118 */ 2320 I2C_CLIENT_END }; 2321 2322 static unsigned short tvp5150_addrs[] = { 2323 0xb8 >> 1, 2324 0xba >> 1, 2325 I2C_CLIENT_END 2326 }; 2327 2328 static unsigned short msp3400_addrs[] = { 2329 0x80 >> 1, 2330 0x88 >> 1, 2331 I2C_CLIENT_END 2332 }; 2333 2334 /******************************** usb interface ******************************/ 2335 2336 static void em28xx_vdev_init(struct em28xx *dev, 2337 struct video_device *vfd, 2338 const struct video_device *template, 2339 const char *type_name) 2340 { 2341 *vfd = *template; 2342 vfd->v4l2_dev = &dev->v4l2->v4l2_dev; 2343 vfd->lock = &dev->lock; 2344 if (dev->board.is_webcam) 2345 vfd->tvnorms = 0; 2346 2347 snprintf(vfd->name, sizeof(vfd->name), "%s %s", 2348 dev_name(&dev->intf->dev), type_name); 2349 2350 video_set_drvdata(vfd, dev); 2351 } 2352 2353 static void em28xx_tuner_setup(struct em28xx *dev, unsigned short tuner_addr) 2354 { 2355 struct em28xx_v4l2 *v4l2 = dev->v4l2; 2356 struct v4l2_device *v4l2_dev = &v4l2->v4l2_dev; 2357 struct tuner_setup tun_setup; 2358 struct v4l2_frequency f; 2359 2360 memset(&tun_setup, 0, sizeof(tun_setup)); 2361 2362 tun_setup.mode_mask = T_ANALOG_TV | T_RADIO; 2363 tun_setup.tuner_callback = em28xx_tuner_callback; 2364 2365 if (dev->board.radio.type) { 2366 tun_setup.type = dev->board.radio.type; 2367 tun_setup.addr = dev->board.radio_addr; 2368 2369 v4l2_device_call_all(v4l2_dev, 2370 0, tuner, s_type_addr, &tun_setup); 2371 } 2372 2373 if ((dev->tuner_type != TUNER_ABSENT) && (dev->tuner_type)) { 2374 tun_setup.type = dev->tuner_type; 2375 tun_setup.addr = tuner_addr; 2376 2377 v4l2_device_call_all(v4l2_dev, 2378 0, tuner, s_type_addr, &tun_setup); 2379 } 2380 2381 if (dev->board.tda9887_conf) { 2382 struct v4l2_priv_tun_config tda9887_cfg; 2383 2384 tda9887_cfg.tuner = TUNER_TDA9887; 2385 tda9887_cfg.priv = &dev->board.tda9887_conf; 2386 2387 v4l2_device_call_all(v4l2_dev, 2388 0, tuner, s_config, &tda9887_cfg); 2389 } 2390 2391 if (dev->tuner_type == TUNER_XC2028) { 2392 struct v4l2_priv_tun_config xc2028_cfg; 2393 struct xc2028_ctrl ctl; 2394 2395 memset(&xc2028_cfg, 0, sizeof(xc2028_cfg)); 2396 memset(&ctl, 0, sizeof(ctl)); 2397 2398 em28xx_setup_xc3028(dev, &ctl); 2399 2400 xc2028_cfg.tuner = TUNER_XC2028; 2401 xc2028_cfg.priv = &ctl; 2402 2403 v4l2_device_call_all(v4l2_dev, 0, tuner, s_config, &xc2028_cfg); 2404 } 2405 2406 /* configure tuner */ 2407 f.tuner = 0; 2408 f.type = V4L2_TUNER_ANALOG_TV; 2409 f.frequency = 9076; /* just a magic number */ 2410 v4l2->frequency = f.frequency; 2411 v4l2_device_call_all(v4l2_dev, 0, tuner, s_frequency, &f); 2412 } 2413 2414 static int em28xx_v4l2_init(struct em28xx *dev) 2415 { 2416 u8 val; 2417 int ret; 2418 unsigned int maxw; 2419 struct v4l2_ctrl_handler *hdl; 2420 struct em28xx_v4l2 *v4l2; 2421 2422 if (dev->is_audio_only) { 2423 /* Shouldn't initialize IR for this interface */ 2424 return 0; 2425 } 2426 2427 if (!dev->has_video) { 2428 /* This device does not support the v4l2 extension */ 2429 return 0; 2430 } 2431 2432 dev_info(&dev->intf->dev, "Registering V4L2 extension\n"); 2433 2434 mutex_lock(&dev->lock); 2435 2436 v4l2 = kzalloc(sizeof(struct em28xx_v4l2), GFP_KERNEL); 2437 if (!v4l2) { 2438 mutex_unlock(&dev->lock); 2439 return -ENOMEM; 2440 } 2441 kref_init(&v4l2->ref); 2442 v4l2->dev = dev; 2443 dev->v4l2 = v4l2; 2444 2445 #ifdef CONFIG_MEDIA_CONTROLLER 2446 v4l2->v4l2_dev.mdev = dev->media_dev; 2447 #endif 2448 ret = v4l2_device_register(&dev->intf->dev, &v4l2->v4l2_dev); 2449 if (ret < 0) { 2450 dev_err(&dev->intf->dev, 2451 "Call to v4l2_device_register() failed!\n"); 2452 goto err; 2453 } 2454 2455 hdl = &v4l2->ctrl_handler; 2456 v4l2_ctrl_handler_init(hdl, 8); 2457 v4l2->v4l2_dev.ctrl_handler = hdl; 2458 2459 if (dev->board.is_webcam) 2460 v4l2->progressive = true; 2461 2462 /* 2463 * Default format, used for tvp5150 or saa711x output formats 2464 */ 2465 v4l2->vinmode = 0x10; 2466 v4l2->vinctl = EM28XX_VINCTRL_INTERLACED | 2467 EM28XX_VINCTRL_CCIR656_ENABLE; 2468 2469 /* request some modules */ 2470 2471 if (dev->board.has_msp34xx) 2472 v4l2_i2c_new_subdev(&v4l2->v4l2_dev, 2473 &dev->i2c_adap[dev->def_i2c_bus], 2474 "msp3400", 0, msp3400_addrs); 2475 2476 if (dev->board.decoder == EM28XX_SAA711X) 2477 v4l2_i2c_new_subdev(&v4l2->v4l2_dev, 2478 &dev->i2c_adap[dev->def_i2c_bus], 2479 "saa7115_auto", 0, saa711x_addrs); 2480 2481 if (dev->board.decoder == EM28XX_TVP5150) 2482 v4l2_i2c_new_subdev(&v4l2->v4l2_dev, 2483 &dev->i2c_adap[dev->def_i2c_bus], 2484 "tvp5150", 0, tvp5150_addrs); 2485 2486 if (dev->board.adecoder == EM28XX_TVAUDIO) 2487 v4l2_i2c_new_subdev(&v4l2->v4l2_dev, 2488 &dev->i2c_adap[dev->def_i2c_bus], 2489 "tvaudio", dev->board.tvaudio_addr, NULL); 2490 2491 /* Initialize tuner and camera */ 2492 2493 if (dev->board.tuner_type != TUNER_ABSENT) { 2494 unsigned short tuner_addr = dev->board.tuner_addr; 2495 int has_demod = (dev->board.tda9887_conf & TDA9887_PRESENT); 2496 2497 if (dev->board.radio.type) 2498 v4l2_i2c_new_subdev(&v4l2->v4l2_dev, 2499 &dev->i2c_adap[dev->def_i2c_bus], 2500 "tuner", dev->board.radio_addr, 2501 NULL); 2502 2503 if (has_demod) 2504 v4l2_i2c_new_subdev(&v4l2->v4l2_dev, 2505 &dev->i2c_adap[dev->def_i2c_bus], 2506 "tuner", 0, 2507 v4l2_i2c_tuner_addrs(ADDRS_DEMOD)); 2508 if (tuner_addr == 0) { 2509 enum v4l2_i2c_tuner_type type = 2510 has_demod ? ADDRS_TV_WITH_DEMOD : ADDRS_TV; 2511 struct v4l2_subdev *sd; 2512 2513 sd = v4l2_i2c_new_subdev(&v4l2->v4l2_dev, 2514 &dev->i2c_adap[dev->def_i2c_bus], 2515 "tuner", 0, 2516 v4l2_i2c_tuner_addrs(type)); 2517 2518 if (sd) 2519 tuner_addr = v4l2_i2c_subdev_addr(sd); 2520 } else { 2521 v4l2_i2c_new_subdev(&v4l2->v4l2_dev, 2522 &dev->i2c_adap[dev->def_i2c_bus], 2523 "tuner", tuner_addr, NULL); 2524 } 2525 2526 em28xx_tuner_setup(dev, tuner_addr); 2527 } 2528 2529 if (dev->em28xx_sensor != EM28XX_NOSENSOR) 2530 em28xx_init_camera(dev); 2531 2532 /* Configure audio */ 2533 ret = em28xx_audio_setup(dev); 2534 if (ret < 0) { 2535 dev_err(&dev->intf->dev, 2536 "%s: Error while setting audio - error [%d]!\n", 2537 __func__, ret); 2538 goto unregister_dev; 2539 } 2540 if (dev->audio_mode.ac97 != EM28XX_NO_AC97) { 2541 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops, 2542 V4L2_CID_AUDIO_MUTE, 0, 1, 1, 1); 2543 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops, 2544 V4L2_CID_AUDIO_VOLUME, 0, 0x1f, 1, 0x1f); 2545 } else { 2546 /* install the em28xx notify callback */ 2547 v4l2_ctrl_notify(v4l2_ctrl_find(hdl, V4L2_CID_AUDIO_MUTE), 2548 em28xx_ctrl_notify, dev); 2549 v4l2_ctrl_notify(v4l2_ctrl_find(hdl, V4L2_CID_AUDIO_VOLUME), 2550 em28xx_ctrl_notify, dev); 2551 } 2552 2553 /* wake i2c devices */ 2554 em28xx_wake_i2c(dev); 2555 2556 /* init video dma queues */ 2557 INIT_LIST_HEAD(&dev->vidq.active); 2558 INIT_LIST_HEAD(&dev->vbiq.active); 2559 2560 if (dev->board.has_msp34xx) { 2561 /* Send a reset to other chips via gpio */ 2562 ret = em28xx_write_reg(dev, EM2820_R08_GPIO_CTRL, 0xf7); 2563 if (ret < 0) { 2564 dev_err(&dev->intf->dev, 2565 "%s: em28xx_write_reg - msp34xx(1) failed! error [%d]\n", 2566 __func__, ret); 2567 goto unregister_dev; 2568 } 2569 msleep(3); 2570 2571 ret = em28xx_write_reg(dev, EM2820_R08_GPIO_CTRL, 0xff); 2572 if (ret < 0) { 2573 dev_err(&dev->intf->dev, 2574 "%s: em28xx_write_reg - msp34xx(2) failed! error [%d]\n", 2575 __func__, ret); 2576 goto unregister_dev; 2577 } 2578 msleep(3); 2579 } 2580 2581 /* set default norm */ 2582 v4l2->norm = V4L2_STD_PAL; 2583 v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_std, v4l2->norm); 2584 v4l2->interlaced_fieldmode = EM28XX_INTERLACED_DEFAULT; 2585 2586 /* Analog specific initialization */ 2587 v4l2->format = &format[0]; 2588 2589 maxw = norm_maxw(dev); 2590 /* MaxPacketSize for em2800 is too small to capture at full resolution 2591 * use half of maxw as the scaler can only scale to 50% */ 2592 if (dev->board.is_em2800) 2593 maxw /= 2; 2594 2595 em28xx_set_video_format(dev, format[0].fourcc, 2596 maxw, norm_maxh(dev)); 2597 2598 video_mux(dev, 0); 2599 2600 /* Audio defaults */ 2601 dev->mute = 1; 2602 dev->volume = 0x1f; 2603 2604 /* em28xx_write_reg(dev, EM28XX_R0E_AUDIOSRC, 0xc0); audio register */ 2605 val = (u8)em28xx_read_reg(dev, EM28XX_R0F_XCLK); 2606 em28xx_write_reg(dev, EM28XX_R0F_XCLK, 2607 (EM28XX_XCLK_AUDIO_UNMUTE | val)); 2608 2609 em28xx_set_outfmt(dev); 2610 2611 /* Add image controls */ 2612 /* NOTE: at this point, the subdevices are already registered, so bridge 2613 * controls are only added/enabled when no subdevice provides them */ 2614 if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_CONTRAST)) 2615 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops, 2616 V4L2_CID_CONTRAST, 2617 0, 0x1f, 1, CONTRAST_DEFAULT); 2618 if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_BRIGHTNESS)) 2619 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops, 2620 V4L2_CID_BRIGHTNESS, 2621 -0x80, 0x7f, 1, BRIGHTNESS_DEFAULT); 2622 if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_SATURATION)) 2623 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops, 2624 V4L2_CID_SATURATION, 2625 0, 0x1f, 1, SATURATION_DEFAULT); 2626 if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_BLUE_BALANCE)) 2627 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops, 2628 V4L2_CID_BLUE_BALANCE, 2629 -0x30, 0x30, 1, BLUE_BALANCE_DEFAULT); 2630 if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_RED_BALANCE)) 2631 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops, 2632 V4L2_CID_RED_BALANCE, 2633 -0x30, 0x30, 1, RED_BALANCE_DEFAULT); 2634 if (NULL == v4l2_ctrl_find(hdl, V4L2_CID_SHARPNESS)) 2635 v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops, 2636 V4L2_CID_SHARPNESS, 2637 0, 0x0f, 1, SHARPNESS_DEFAULT); 2638 2639 /* Reset image controls */ 2640 em28xx_colorlevels_set_default(dev); 2641 v4l2_ctrl_handler_setup(hdl); 2642 ret = hdl->error; 2643 if (ret) 2644 goto unregister_dev; 2645 2646 /* allocate and fill video video_device struct */ 2647 em28xx_vdev_init(dev, &v4l2->vdev, &em28xx_video_template, "video"); 2648 mutex_init(&v4l2->vb_queue_lock); 2649 mutex_init(&v4l2->vb_vbi_queue_lock); 2650 v4l2->vdev.queue = &v4l2->vb_vidq; 2651 v4l2->vdev.queue->lock = &v4l2->vb_queue_lock; 2652 2653 /* disable inapplicable ioctls */ 2654 if (dev->board.is_webcam) { 2655 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_QUERYSTD); 2656 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_STD); 2657 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_STD); 2658 } else { 2659 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_PARM); 2660 } 2661 if (dev->tuner_type == TUNER_ABSENT) { 2662 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_TUNER); 2663 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_TUNER); 2664 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_FREQUENCY); 2665 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_FREQUENCY); 2666 } 2667 if (dev->int_audio_type == EM28XX_INT_AUDIO_NONE) { 2668 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_AUDIO); 2669 v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_AUDIO); 2670 } 2671 2672 /* register v4l2 video video_device */ 2673 ret = video_register_device(&v4l2->vdev, VFL_TYPE_GRABBER, 2674 video_nr[dev->devno]); 2675 if (ret) { 2676 dev_err(&dev->intf->dev, 2677 "unable to register video device (error=%i).\n", ret); 2678 goto unregister_dev; 2679 } 2680 2681 /* Allocate and fill vbi video_device struct */ 2682 if (em28xx_vbi_supported(dev) == 1) { 2683 em28xx_vdev_init(dev, &v4l2->vbi_dev, &em28xx_video_template, 2684 "vbi"); 2685 2686 v4l2->vbi_dev.queue = &v4l2->vb_vbiq; 2687 v4l2->vbi_dev.queue->lock = &v4l2->vb_vbi_queue_lock; 2688 2689 /* disable inapplicable ioctls */ 2690 v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_PARM); 2691 if (dev->tuner_type == TUNER_ABSENT) { 2692 v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_G_TUNER); 2693 v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_TUNER); 2694 v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_G_FREQUENCY); 2695 v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_FREQUENCY); 2696 } 2697 if (dev->int_audio_type == EM28XX_INT_AUDIO_NONE) { 2698 v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_G_AUDIO); 2699 v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_AUDIO); 2700 } 2701 2702 /* register v4l2 vbi video_device */ 2703 ret = video_register_device(&v4l2->vbi_dev, VFL_TYPE_VBI, 2704 vbi_nr[dev->devno]); 2705 if (ret < 0) { 2706 dev_err(&dev->intf->dev, 2707 "unable to register vbi device\n"); 2708 goto unregister_dev; 2709 } 2710 } 2711 2712 if (em28xx_boards[dev->model].radio.type == EM28XX_RADIO) { 2713 em28xx_vdev_init(dev, &v4l2->radio_dev, &em28xx_radio_template, 2714 "radio"); 2715 ret = video_register_device(&v4l2->radio_dev, VFL_TYPE_RADIO, 2716 radio_nr[dev->devno]); 2717 if (ret < 0) { 2718 dev_err(&dev->intf->dev, 2719 "can't register radio device\n"); 2720 goto unregister_dev; 2721 } 2722 dev_info(&dev->intf->dev, 2723 "Registered radio device as %s\n", 2724 video_device_node_name(&v4l2->radio_dev)); 2725 } 2726 2727 /* Init entities at the Media Controller */ 2728 em28xx_v4l2_create_entities(dev); 2729 2730 #ifdef CONFIG_MEDIA_CONTROLLER 2731 ret = v4l2_mc_create_media_graph(dev->media_dev); 2732 if (ret) { 2733 dev_err(&dev->intf->dev, 2734 "failed to create media graph\n"); 2735 em28xx_v4l2_media_release(dev); 2736 goto unregister_dev; 2737 } 2738 #endif 2739 2740 dev_info(&dev->intf->dev, 2741 "V4L2 video device registered as %s\n", 2742 video_device_node_name(&v4l2->vdev)); 2743 2744 if (video_is_registered(&v4l2->vbi_dev)) 2745 dev_info(&dev->intf->dev, 2746 "V4L2 VBI device registered as %s\n", 2747 video_device_node_name(&v4l2->vbi_dev)); 2748 2749 /* Save some power by putting tuner to sleep */ 2750 v4l2_device_call_all(&v4l2->v4l2_dev, 0, core, s_power, 0); 2751 2752 /* initialize videobuf2 stuff */ 2753 em28xx_vb2_setup(dev); 2754 2755 dev_info(&dev->intf->dev, 2756 "V4L2 extension successfully initialized\n"); 2757 2758 kref_get(&dev->ref); 2759 2760 mutex_unlock(&dev->lock); 2761 return 0; 2762 2763 unregister_dev: 2764 if (video_is_registered(&v4l2->radio_dev)) { 2765 dev_info(&dev->intf->dev, 2766 "V4L2 device %s deregistered\n", 2767 video_device_node_name(&v4l2->radio_dev)); 2768 video_unregister_device(&v4l2->radio_dev); 2769 } 2770 if (video_is_registered(&v4l2->vbi_dev)) { 2771 dev_info(&dev->intf->dev, 2772 "V4L2 device %s deregistered\n", 2773 video_device_node_name(&v4l2->vbi_dev)); 2774 video_unregister_device(&v4l2->vbi_dev); 2775 } 2776 if (video_is_registered(&v4l2->vdev)) { 2777 dev_info(&dev->intf->dev, 2778 "V4L2 device %s deregistered\n", 2779 video_device_node_name(&v4l2->vdev)); 2780 video_unregister_device(&v4l2->vdev); 2781 } 2782 2783 v4l2_ctrl_handler_free(&v4l2->ctrl_handler); 2784 v4l2_device_unregister(&v4l2->v4l2_dev); 2785 err: 2786 dev->v4l2 = NULL; 2787 kref_put(&v4l2->ref, em28xx_free_v4l2); 2788 mutex_unlock(&dev->lock); 2789 return ret; 2790 } 2791 2792 static struct em28xx_ops v4l2_ops = { 2793 .id = EM28XX_V4L2, 2794 .name = "Em28xx v4l2 Extension", 2795 .init = em28xx_v4l2_init, 2796 .fini = em28xx_v4l2_fini, 2797 .suspend = em28xx_v4l2_suspend, 2798 .resume = em28xx_v4l2_resume, 2799 }; 2800 2801 static int __init em28xx_video_register(void) 2802 { 2803 return em28xx_register_extension(&v4l2_ops); 2804 } 2805 2806 static void __exit em28xx_video_unregister(void) 2807 { 2808 em28xx_unregister_extension(&v4l2_ops); 2809 } 2810 2811 module_init(em28xx_video_register); 2812 module_exit(em28xx_video_unregister); 2813