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