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        /*
1097         * Make sure streaming is not already in progress for this type
1098         * of filehandle (e.g. video, vbi)
1099         */
1100        rc = res_get(dev, vq->type);
1101        if (rc)
1102                return rc;
1103
1104        if (v4l2->streaming_users == 0) {
1105                /* First active streaming user, so allocate all the URBs */
1106
1107                /* Allocate the USB bandwidth */
1108                em28xx_set_alternate(dev);
1109
1110                /*
1111                 * Needed, since GPIO might have disabled power of
1112                 * some i2c device
1113                 */
1114                em28xx_wake_i2c(dev);
1115
1116                v4l2->capture_type = -1;
1117                rc = em28xx_init_usb_xfer(dev, EM28XX_ANALOG_MODE,
1118                                          dev->analog_xfer_bulk,
1119                                          EM28XX_NUM_BUFS,
1120                                          dev->max_pkt_size,
1121                                          dev->packet_multiplier,
1122                                          em28xx_urb_data_copy);
1123                if (rc < 0)
1124                        return rc;
1125
1126                /*
1127                 * djh: it's not clear whether this code is still needed.  I'm
1128                 * leaving it in here for now entirely out of concern for
1129                 * backward compatibility (the old code did it)
1130                 */
1131
1132                /* Ask tuner to go to analog or radio mode */
1133                memset(&f, 0, sizeof(f));
1134                f.frequency = v4l2->frequency;
1135                owner = (struct v4l2_fh *)vq->owner;
1136                if (owner && owner->vdev->vfl_type == VFL_TYPE_RADIO)
1137                        f.type = V4L2_TUNER_RADIO;
1138                else
1139                        f.type = V4L2_TUNER_ANALOG_TV;
1140                v4l2_device_call_all(&v4l2->v4l2_dev,
1141                                     0, tuner, s_frequency, &f);
1142
1143                /* Enable video stream at TV decoder */
1144                v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_stream, 1);
1145        }
1146
1147        v4l2->streaming_users++;
1148
1149        return rc;
1150}
1151
1152static void em28xx_stop_streaming(struct vb2_queue *vq)
1153{
1154        struct em28xx *dev = vb2_get_drv_priv(vq);
1155        struct em28xx_v4l2 *v4l2 = dev->v4l2;
1156        struct em28xx_dmaqueue *vidq = &dev->vidq;
1157        unsigned long flags = 0;
1158
1159        em28xx_videodbg("%s\n", __func__);
1160
1161        res_free(dev, vq->type);
1162
1163        if (v4l2->streaming_users-- == 1) {
1164                /* Disable video stream at TV decoder */
1165                v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_stream, 0);
1166
1167                /* Last active user, so shutdown all the URBS */
1168                em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);
1169        }
1170
1171        spin_lock_irqsave(&dev->slock, flags);
1172        if (dev->usb_ctl.vid_buf) {
1173                vb2_buffer_done(&dev->usb_ctl.vid_buf->vb.vb2_buf,
1174                                VB2_BUF_STATE_ERROR);
1175                dev->usb_ctl.vid_buf = NULL;
1176        }
1177        while (!list_empty(&vidq->active)) {
1178                struct em28xx_buffer *buf;
1179
1180                buf = list_entry(vidq->active.next, struct em28xx_buffer, list);
1181                list_del(&buf->list);
1182                vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
1183        }
1184        spin_unlock_irqrestore(&dev->slock, flags);
1185}
1186
1187void em28xx_stop_vbi_streaming(struct vb2_queue *vq)
1188{
1189        struct em28xx *dev = vb2_get_drv_priv(vq);
1190        struct em28xx_v4l2 *v4l2 = dev->v4l2;
1191        struct em28xx_dmaqueue *vbiq = &dev->vbiq;
1192        unsigned long flags = 0;
1193
1194        em28xx_videodbg("%s\n", __func__);
1195
1196        res_free(dev, vq->type);
1197
1198        if (v4l2->streaming_users-- == 1) {
1199                /* Disable video stream at TV decoder */
1200                v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_stream, 0);
1201
1202                /* Last active user, so shutdown all the URBS */
1203                em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);
1204        }
1205
1206        spin_lock_irqsave(&dev->slock, flags);
1207        if (dev->usb_ctl.vbi_buf) {
1208                vb2_buffer_done(&dev->usb_ctl.vbi_buf->vb.vb2_buf,
1209                                VB2_BUF_STATE_ERROR);
1210                dev->usb_ctl.vbi_buf = NULL;
1211        }
1212        while (!list_empty(&vbiq->active)) {
1213                struct em28xx_buffer *buf;
1214
1215                buf = list_entry(vbiq->active.next, struct em28xx_buffer, list);
1216                list_del(&buf->list);
1217                vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
1218        }
1219        spin_unlock_irqrestore(&dev->slock, flags);
1220}
1221
1222static void
1223buffer_queue(struct vb2_buffer *vb)
1224{
1225        struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
1226        struct em28xx *dev = vb2_get_drv_priv(vb->vb2_queue);
1227        struct em28xx_buffer *buf =
1228                container_of(vbuf, struct em28xx_buffer, vb);
1229        struct em28xx_dmaqueue *vidq = &dev->vidq;
1230        unsigned long flags = 0;
1231
1232        em28xx_videodbg("%s\n", __func__);
1233        buf->mem = vb2_plane_vaddr(vb, 0);
1234        buf->length = vb2_plane_size(vb, 0);
1235
1236        spin_lock_irqsave(&dev->slock, flags);
1237        list_add_tail(&buf->list, &vidq->active);
1238        spin_unlock_irqrestore(&dev->slock, flags);
1239}
1240
1241static const struct vb2_ops em28xx_video_qops = {
1242        .queue_setup    = queue_setup,
1243        .buf_prepare    = buffer_prepare,
1244        .buf_queue      = buffer_queue,
1245        .start_streaming = em28xx_start_analog_streaming,
1246        .stop_streaming = em28xx_stop_streaming,
1247        .wait_prepare   = vb2_ops_wait_prepare,
1248        .wait_finish    = vb2_ops_wait_finish,
1249};
1250
1251static int em28xx_vb2_setup(struct em28xx *dev)
1252{
1253        int rc;
1254        struct vb2_queue *q;
1255        struct em28xx_v4l2 *v4l2 = dev->v4l2;
1256
1257        /* Setup Videobuf2 for Video capture */
1258        q = &v4l2->vb_vidq;
1259        q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
1260        q->io_modes = VB2_READ | VB2_MMAP | VB2_USERPTR | VB2_DMABUF;
1261        q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1262        q->drv_priv = dev;
1263        q->buf_struct_size = sizeof(struct em28xx_buffer);
1264        q->ops = &em28xx_video_qops;
1265        q->mem_ops = &vb2_vmalloc_memops;
1266
1267        rc = vb2_queue_init(q);
1268        if (rc < 0)
1269                return rc;
1270
1271        /* Setup Videobuf2 for VBI capture */
1272        q = &v4l2->vb_vbiq;
1273        q->type = V4L2_BUF_TYPE_VBI_CAPTURE;
1274        q->io_modes = VB2_READ | VB2_MMAP | VB2_USERPTR;
1275        q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1276        q->drv_priv = dev;
1277        q->buf_struct_size = sizeof(struct em28xx_buffer);
1278        q->ops = &em28xx_vbi_qops;
1279        q->mem_ops = &vb2_vmalloc_memops;
1280
1281        rc = vb2_queue_init(q);
1282        if (rc < 0)
1283                return rc;
1284
1285        return 0;
1286}
1287
1288/*
1289 * v4l2 interface
1290 */
1291
1292static void video_mux(struct em28xx *dev, int index)
1293{
1294        struct v4l2_device *v4l2_dev = &dev->v4l2->v4l2_dev;
1295
1296        dev->ctl_input = index;
1297        dev->ctl_ainput = INPUT(index)->amux;
1298        dev->ctl_aoutput = INPUT(index)->aout;
1299
1300        if (!dev->ctl_aoutput)
1301                dev->ctl_aoutput = EM28XX_AOUT_MASTER;
1302
1303        v4l2_device_call_all(v4l2_dev, 0, video, s_routing,
1304                             INPUT(index)->vmux, 0, 0);
1305
1306        if (dev->has_msp34xx) {
1307                if (dev->i2s_speed) {
1308                        v4l2_device_call_all(v4l2_dev, 0, audio,
1309                                             s_i2s_clock_freq, dev->i2s_speed);
1310                }
1311                /* Note: this is msp3400 specific */
1312                v4l2_device_call_all(v4l2_dev, 0, audio, s_routing,
1313                                     dev->ctl_ainput,
1314                                     MSP_OUTPUT(MSP_SC_IN_DSP_SCART1), 0);
1315        }
1316
1317        if (dev->board.adecoder != EM28XX_NOADECODER) {
1318                v4l2_device_call_all(v4l2_dev, 0, audio, s_routing,
1319                                     dev->ctl_ainput, dev->ctl_aoutput, 0);
1320        }
1321
1322        em28xx_audio_analog_set(dev);
1323}
1324
1325static void em28xx_ctrl_notify(struct v4l2_ctrl *ctrl, void *priv)
1326{
1327        struct em28xx *dev = priv;
1328
1329        /*
1330         * In the case of non-AC97 volume controls, we still need
1331         * to do some setups at em28xx, in order to mute/unmute
1332         * and to adjust audio volume. However, the value ranges
1333         * should be checked by the corresponding V4L subdriver.
1334         */
1335        switch (ctrl->id) {
1336        case V4L2_CID_AUDIO_MUTE:
1337                dev->mute = ctrl->val;
1338                em28xx_audio_analog_set(dev);
1339                break;
1340        case V4L2_CID_AUDIO_VOLUME:
1341                dev->volume = ctrl->val;
1342                em28xx_audio_analog_set(dev);
1343                break;
1344        }
1345}
1346
1347static int em28xx_s_ctrl(struct v4l2_ctrl *ctrl)
1348{
1349        struct em28xx_v4l2 *v4l2 =
1350                  container_of(ctrl->handler, struct em28xx_v4l2, ctrl_handler);
1351        struct em28xx *dev = v4l2->dev;
1352        int ret = -EINVAL;
1353
1354        switch (ctrl->id) {
1355        case V4L2_CID_AUDIO_MUTE:
1356                dev->mute = ctrl->val;
1357                ret = em28xx_audio_analog_set(dev);
1358                break;
1359        case V4L2_CID_AUDIO_VOLUME:
1360                dev->volume = ctrl->val;
1361                ret = em28xx_audio_analog_set(dev);
1362                break;
1363        case V4L2_CID_CONTRAST:
1364                ret = em28xx_write_reg(dev, EM28XX_R20_YGAIN, ctrl->val);
1365                break;
1366        case V4L2_CID_BRIGHTNESS:
1367                ret = em28xx_write_reg(dev, EM28XX_R21_YOFFSET, ctrl->val);
1368                break;
1369        case V4L2_CID_SATURATION:
1370                ret = em28xx_write_reg(dev, EM28XX_R22_UVGAIN, ctrl->val);
1371                break;
1372        case V4L2_CID_BLUE_BALANCE:
1373                ret = em28xx_write_reg(dev, EM28XX_R23_UOFFSET, ctrl->val);
1374                break;
1375        case V4L2_CID_RED_BALANCE:
1376                ret = em28xx_write_reg(dev, EM28XX_R24_VOFFSET, ctrl->val);
1377                break;
1378        case V4L2_CID_SHARPNESS:
1379                ret = em28xx_write_reg(dev, EM28XX_R25_SHARPNESS, ctrl->val);
1380                break;
1381        }
1382
1383        return (ret < 0) ? ret : 0;
1384}
1385
1386static const struct v4l2_ctrl_ops em28xx_ctrl_ops = {
1387        .s_ctrl = em28xx_s_ctrl,
1388};
1389
1390static void size_to_scale(struct em28xx *dev,
1391                          unsigned int width, unsigned int height,
1392                        unsigned int *hscale, unsigned int *vscale)
1393{
1394        unsigned int          maxw = norm_maxw(dev);
1395        unsigned int          maxh = norm_maxh(dev);
1396
1397        *hscale = (((unsigned long)maxw) << 12) / width - 4096L;
1398        if (*hscale > EM28XX_HVSCALE_MAX)
1399                *hscale = EM28XX_HVSCALE_MAX;
1400
1401        *vscale = (((unsigned long)maxh) << 12) / height - 4096L;
1402        if (*vscale > EM28XX_HVSCALE_MAX)
1403                *vscale = EM28XX_HVSCALE_MAX;
1404}
1405
1406static void scale_to_size(struct em28xx *dev,
1407                          unsigned int hscale, unsigned int vscale,
1408                          unsigned int *width, unsigned int *height)
1409{
1410        unsigned int          maxw = norm_maxw(dev);
1411        unsigned int          maxh = norm_maxh(dev);
1412
1413        *width = (((unsigned long)maxw) << 12) / (hscale + 4096L);
1414        *height = (((unsigned long)maxh) << 12) / (vscale + 4096L);
1415
1416        /* Don't let width or height to be zero */
1417        if (*width < 1)
1418                *width = 1;
1419        if (*height < 1)
1420                *height = 1;
1421}
1422
1423/*
1424 * IOCTL vidioc handling
1425 */
1426
1427static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
1428                                struct v4l2_format *f)
1429{
1430        struct em28xx         *dev = video_drvdata(file);
1431        struct em28xx_v4l2    *v4l2 = dev->v4l2;
1432
1433        f->fmt.pix.width = v4l2->width;
1434        f->fmt.pix.height = v4l2->height;
1435        f->fmt.pix.pixelformat = v4l2->format->fourcc;
1436        f->fmt.pix.bytesperline = (v4l2->width * v4l2->format->depth + 7) >> 3;
1437        f->fmt.pix.sizeimage = f->fmt.pix.bytesperline * v4l2->height;
1438        f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
1439
1440        /* FIXME: TOP? NONE? BOTTOM? ALTENATE? */
1441        if (v4l2->progressive)
1442                f->fmt.pix.field = V4L2_FIELD_NONE;
1443        else
1444                f->fmt.pix.field = v4l2->interlaced_fieldmode ?
1445                           V4L2_FIELD_INTERLACED : V4L2_FIELD_TOP;
1446        return 0;
1447}
1448
1449static struct em28xx_fmt *format_by_fourcc(unsigned int fourcc)
1450{
1451        unsigned int i;
1452
1453        for (i = 0; i < ARRAY_SIZE(format); i++)
1454                if (format[i].fourcc == fourcc)
1455                        return &format[i];
1456
1457        return NULL;
1458}
1459
1460static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
1461                                  struct v4l2_format *f)
1462{
1463        struct em28xx         *dev   = video_drvdata(file);
1464        struct em28xx_v4l2    *v4l2  = dev->v4l2;
1465        unsigned int          width  = f->fmt.pix.width;
1466        unsigned int          height = f->fmt.pix.height;
1467        unsigned int          maxw   = norm_maxw(dev);
1468        unsigned int          maxh   = norm_maxh(dev);
1469        unsigned int          hscale, vscale;
1470        struct em28xx_fmt     *fmt;
1471
1472        fmt = format_by_fourcc(f->fmt.pix.pixelformat);
1473        if (!fmt) {
1474                em28xx_videodbg("Fourcc format (%08x) invalid.\n",
1475                                f->fmt.pix.pixelformat);
1476                return -EINVAL;
1477        }
1478
1479        if (dev->board.is_em2800) {
1480                /* the em2800 can only scale down to 50% */
1481                height = height > (3 * maxh / 4) ? maxh : maxh / 2;
1482                width = width > (3 * maxw / 4) ? maxw : maxw / 2;
1483                /*
1484                 * MaxPacketSize for em2800 is too small to capture at full
1485                 * resolution use half of maxw as the scaler can only scale
1486                 * to 50%
1487                 */
1488                if (width == maxw && height == maxh)
1489                        width /= 2;
1490        } else {
1491                /*
1492                 * width must even because of the YUYV format
1493                 * height must be even because of interlacing
1494                 */
1495                v4l_bound_align_image(&width, 48, maxw, 1, &height, 32, maxh,
1496                                      1, 0);
1497        }
1498        /* Avoid division by zero at size_to_scale */
1499        if (width < 1)
1500                width = 1;
1501        if (height < 1)
1502                height = 1;
1503
1504        size_to_scale(dev, width, height, &hscale, &vscale);
1505        scale_to_size(dev, hscale, vscale, &width, &height);
1506
1507        f->fmt.pix.width = width;
1508        f->fmt.pix.height = height;
1509        f->fmt.pix.pixelformat = fmt->fourcc;
1510        f->fmt.pix.bytesperline = (width * fmt->depth + 7) >> 3;
1511        f->fmt.pix.sizeimage = f->fmt.pix.bytesperline * height;
1512        f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
1513        if (v4l2->progressive)
1514                f->fmt.pix.field = V4L2_FIELD_NONE;
1515        else
1516                f->fmt.pix.field = v4l2->interlaced_fieldmode ?
1517                           V4L2_FIELD_INTERLACED : V4L2_FIELD_TOP;
1518        f->fmt.pix.priv = 0;
1519
1520        return 0;
1521}
1522
1523static int em28xx_set_video_format(struct em28xx *dev, unsigned int fourcc,
1524                                   unsigned int width, unsigned int height)
1525{
1526        struct em28xx_fmt     *fmt;
1527        struct em28xx_v4l2    *v4l2 = dev->v4l2;
1528
1529        fmt = format_by_fourcc(fourcc);
1530        if (!fmt)
1531                return -EINVAL;
1532
1533        v4l2->format = fmt;
1534        v4l2->width  = width;
1535        v4l2->height = height;
1536
1537        /* set new image size */
1538        size_to_scale(dev, v4l2->width, v4l2->height,
1539                      &v4l2->hscale, &v4l2->vscale);
1540
1541        em28xx_resolution_set(dev);
1542
1543        return 0;
1544}
1545
1546static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
1547                                struct v4l2_format *f)
1548{
1549        struct em28xx *dev = video_drvdata(file);
1550        struct em28xx_v4l2 *v4l2 = dev->v4l2;
1551
1552        if (vb2_is_busy(&v4l2->vb_vidq))
1553                return -EBUSY;
1554
1555        vidioc_try_fmt_vid_cap(file, priv, f);
1556
1557        return em28xx_set_video_format(dev, f->fmt.pix.pixelformat,
1558                                f->fmt.pix.width, f->fmt.pix.height);
1559}
1560
1561static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *norm)
1562{
1563        struct em28xx *dev = video_drvdata(file);
1564
1565        *norm = dev->v4l2->norm;
1566
1567        return 0;
1568}
1569
1570static int vidioc_querystd(struct file *file, void *priv, v4l2_std_id *norm)
1571{
1572        struct em28xx *dev = video_drvdata(file);
1573
1574        v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, video, querystd, norm);
1575
1576        return 0;
1577}
1578
1579static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm)
1580{
1581        struct em28xx      *dev  = video_drvdata(file);
1582        struct em28xx_v4l2 *v4l2 = dev->v4l2;
1583        struct v4l2_format f;
1584
1585        if (norm == v4l2->norm)
1586                return 0;
1587
1588        if (v4l2->streaming_users > 0)
1589                return -EBUSY;
1590
1591        v4l2->norm = norm;
1592
1593        /* Adjusts width/height, if needed */
1594        f.fmt.pix.width = 720;
1595        f.fmt.pix.height = (norm & V4L2_STD_525_60) ? 480 : 576;
1596        vidioc_try_fmt_vid_cap(file, priv, &f);
1597
1598        /* set new image size */
1599        v4l2->width = f.fmt.pix.width;
1600        v4l2->height = f.fmt.pix.height;
1601        size_to_scale(dev, v4l2->width, v4l2->height,
1602                      &v4l2->hscale, &v4l2->vscale);
1603
1604        em28xx_resolution_set(dev);
1605        v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_std, v4l2->norm);
1606
1607        return 0;
1608}
1609
1610static int vidioc_g_parm(struct file *file, void *priv,
1611                         struct v4l2_streamparm *p)
1612{
1613        struct v4l2_subdev_frame_interval ival = { 0 };
1614        struct em28xx      *dev  = video_drvdata(file);
1615        struct em28xx_v4l2 *v4l2 = dev->v4l2;
1616        int rc = 0;
1617
1618        if (p->type != V4L2_BUF_TYPE_VIDEO_CAPTURE &&
1619            p->type != V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)
1620                return -EINVAL;
1621
1622        p->parm.capture.readbuffers = EM28XX_MIN_BUF;
1623        p->parm.capture.capability = V4L2_CAP_TIMEPERFRAME;
1624        if (dev->is_webcam) {
1625                rc = v4l2_device_call_until_err(&v4l2->v4l2_dev, 0,
1626                                                video, g_frame_interval, &ival);
1627                if (!rc)
1628                        p->parm.capture.timeperframe = ival.interval;
1629        } else {
1630                v4l2_video_std_frame_period(v4l2->norm,
1631                                            &p->parm.capture.timeperframe);
1632        }
1633
1634        return rc;
1635}
1636
1637static int vidioc_s_parm(struct file *file, void *priv,
1638                         struct v4l2_streamparm *p)
1639{
1640        struct em28xx *dev = video_drvdata(file);
1641        struct v4l2_subdev_frame_interval ival = {
1642                0,
1643                p->parm.capture.timeperframe
1644        };
1645        int rc = 0;
1646
1647        if (!dev->is_webcam)
1648                return -ENOTTY;
1649
1650        if (p->type != V4L2_BUF_TYPE_VIDEO_CAPTURE &&
1651            p->type != V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)
1652                return -EINVAL;
1653
1654        memset(&p->parm, 0, sizeof(p->parm));
1655        p->parm.capture.readbuffers = EM28XX_MIN_BUF;
1656        p->parm.capture.capability = V4L2_CAP_TIMEPERFRAME;
1657        rc = v4l2_device_call_until_err(&dev->v4l2->v4l2_dev, 0,
1658                                        video, s_frame_interval, &ival);
1659        if (!rc)
1660                p->parm.capture.timeperframe = ival.interval;
1661        return rc;
1662}
1663
1664static int vidioc_enum_input(struct file *file, void *priv,
1665                             struct v4l2_input *i)
1666{
1667        struct em28xx *dev = video_drvdata(file);
1668        unsigned int       n;
1669
1670        n = i->index;
1671        if (n >= MAX_EM28XX_INPUT)
1672                return -EINVAL;
1673        if (!INPUT(n)->type)
1674                return -EINVAL;
1675
1676        i->type = V4L2_INPUT_TYPE_CAMERA;
1677
1678        strcpy(i->name, iname[INPUT(n)->type]);
1679
1680        if (INPUT(n)->type == EM28XX_VMUX_TELEVISION)
1681                i->type = V4L2_INPUT_TYPE_TUNER;
1682
1683        i->std = dev->v4l2->vdev.tvnorms;
1684        /* webcams do not have the STD API */
1685        if (dev->is_webcam)
1686                i->capabilities = 0;
1687
1688        return 0;
1689}
1690
1691static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
1692{
1693        struct em28xx *dev = video_drvdata(file);
1694
1695        *i = dev->ctl_input;
1696
1697        return 0;
1698}
1699
1700static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
1701{
1702        struct em28xx *dev = video_drvdata(file);
1703
1704        if (i >= MAX_EM28XX_INPUT)
1705                return -EINVAL;
1706        if (!INPUT(i)->type)
1707                return -EINVAL;
1708
1709        video_mux(dev, i);
1710        return 0;
1711}
1712
1713static int vidioc_g_audio(struct file *file, void *priv, struct v4l2_audio *a)
1714{
1715        struct em28xx *dev = video_drvdata(file);
1716
1717        switch (a->index) {
1718        case EM28XX_AMUX_VIDEO:
1719                strcpy(a->name, "Television");
1720                break;
1721        case EM28XX_AMUX_LINE_IN:
1722                strcpy(a->name, "Line In");
1723                break;
1724        case EM28XX_AMUX_VIDEO2:
1725                strcpy(a->name, "Television alt");
1726                break;
1727        case EM28XX_AMUX_PHONE:
1728                strcpy(a->name, "Phone");
1729                break;
1730        case EM28XX_AMUX_MIC:
1731                strcpy(a->name, "Mic");
1732                break;
1733        case EM28XX_AMUX_CD:
1734                strcpy(a->name, "CD");
1735                break;
1736        case EM28XX_AMUX_AUX:
1737                strcpy(a->name, "Aux");
1738                break;
1739        case EM28XX_AMUX_PCM_OUT:
1740                strcpy(a->name, "PCM");
1741                break;
1742        default:
1743                return -EINVAL;
1744        }
1745
1746        a->index = dev->ctl_ainput;
1747        a->capability = V4L2_AUDCAP_STEREO;
1748
1749        return 0;
1750}
1751
1752static int vidioc_s_audio(struct file *file, void *priv,
1753                          const struct v4l2_audio *a)
1754{
1755        struct em28xx *dev = video_drvdata(file);
1756
1757        if (a->index >= MAX_EM28XX_INPUT)
1758                return -EINVAL;
1759        if (!INPUT(a->index)->type)
1760                return -EINVAL;
1761
1762        dev->ctl_ainput = INPUT(a->index)->amux;
1763        dev->ctl_aoutput = INPUT(a->index)->aout;
1764
1765        if (!dev->ctl_aoutput)
1766                dev->ctl_aoutput = EM28XX_AOUT_MASTER;
1767
1768        return 0;
1769}
1770
1771static int vidioc_g_tuner(struct file *file, void *priv,
1772                          struct v4l2_tuner *t)
1773{
1774        struct em28xx *dev = video_drvdata(file);
1775
1776        if (t->index != 0)
1777                return -EINVAL;
1778
1779        strcpy(t->name, "Tuner");
1780
1781        v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, g_tuner, t);
1782        return 0;
1783}
1784
1785static int vidioc_s_tuner(struct file *file, void *priv,
1786                          const struct v4l2_tuner *t)
1787{
1788        struct em28xx *dev = video_drvdata(file);
1789
1790        if (t->index != 0)
1791                return -EINVAL;
1792
1793        v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, s_tuner, t);
1794        return 0;
1795}
1796
1797static int vidioc_g_frequency(struct file *file, void *priv,
1798                              struct v4l2_frequency *f)
1799{
1800        struct em28xx         *dev = video_drvdata(file);
1801        struct em28xx_v4l2    *v4l2 = dev->v4l2;
1802
1803        if (f->tuner != 0)
1804                return -EINVAL;
1805
1806        f->frequency = v4l2->frequency;
1807        return 0;
1808}
1809
1810static int vidioc_s_frequency(struct file *file, void *priv,
1811                              const struct v4l2_frequency *f)
1812{
1813        struct v4l2_frequency  new_freq = *f;
1814        struct em28xx             *dev  = video_drvdata(file);
1815        struct em28xx_v4l2        *v4l2 = dev->v4l2;
1816
1817        if (f->tuner != 0)
1818                return -EINVAL;
1819
1820        v4l2_device_call_all(&v4l2->v4l2_dev, 0, tuner, s_frequency, f);
1821        v4l2_device_call_all(&v4l2->v4l2_dev, 0, tuner, g_frequency, &new_freq);
1822        v4l2->frequency = new_freq.frequency;
1823
1824        return 0;
1825}
1826
1827#ifdef CONFIG_VIDEO_ADV_DEBUG
1828static int vidioc_g_chip_info(struct file *file, void *priv,
1829                              struct v4l2_dbg_chip_info *chip)
1830{
1831        struct em28xx *dev = video_drvdata(file);
1832
1833        if (chip->match.addr > 1)
1834                return -EINVAL;
1835        if (chip->match.addr == 1)
1836                strlcpy(chip->name, "ac97", sizeof(chip->name));
1837        else
1838                strlcpy(chip->name,
1839                        dev->v4l2->v4l2_dev.name, sizeof(chip->name));
1840        return 0;
1841}
1842
1843static int em28xx_reg_len(int reg)
1844{
1845        switch (reg) {
1846        case EM28XX_R40_AC97LSB:
1847        case EM28XX_R30_HSCALELOW:
1848        case EM28XX_R32_VSCALELOW:
1849                return 2;
1850        default:
1851                return 1;
1852        }
1853}
1854
1855static int vidioc_g_register(struct file *file, void *priv,
1856                             struct v4l2_dbg_register *reg)
1857{
1858        struct em28xx *dev = video_drvdata(file);
1859        int ret;
1860
1861        if (reg->match.addr > 1)
1862                return -EINVAL;
1863        if (reg->match.addr) {
1864                ret = em28xx_read_ac97(dev, reg->reg);
1865                if (ret < 0)
1866                        return ret;
1867
1868                reg->val = ret;
1869                reg->size = 1;
1870                return 0;
1871        }
1872
1873        /* Match host */
1874        reg->size = em28xx_reg_len(reg->reg);
1875        if (reg->size == 1) {
1876                ret = em28xx_read_reg(dev, reg->reg);
1877
1878                if (ret < 0)
1879                        return ret;
1880
1881                reg->val = ret;
1882        } else {
1883                __le16 val = 0;
1884
1885                ret = dev->em28xx_read_reg_req_len(dev, USB_REQ_GET_STATUS,
1886                                                   reg->reg, (char *)&val, 2);
1887                if (ret < 0)
1888                        return ret;
1889
1890                reg->val = le16_to_cpu(val);
1891        }
1892
1893        return 0;
1894}
1895
1896static int vidioc_s_register(struct file *file, void *priv,
1897                             const struct v4l2_dbg_register *reg)
1898{
1899        struct em28xx *dev = video_drvdata(file);
1900        __le16 buf;
1901
1902        if (reg->match.addr > 1)
1903                return -EINVAL;
1904        if (reg->match.addr)
1905                return em28xx_write_ac97(dev, reg->reg, reg->val);
1906
1907        /* Match host */
1908        buf = cpu_to_le16(reg->val);
1909
1910        return em28xx_write_regs(dev, reg->reg, (char *)&buf,
1911                               em28xx_reg_len(reg->reg));
1912}
1913#endif
1914
1915static int vidioc_querycap(struct file *file, void  *priv,
1916                           struct v4l2_capability *cap)
1917{
1918        struct video_device   *vdev = video_devdata(file);
1919        struct em28xx         *dev  = video_drvdata(file);
1920        struct em28xx_v4l2    *v4l2 = dev->v4l2;
1921        struct usb_device *udev = interface_to_usbdev(dev->intf);
1922
1923        strlcpy(cap->driver, "em28xx", sizeof(cap->driver));
1924        strlcpy(cap->card, em28xx_boards[dev->model].name, sizeof(cap->card));
1925        usb_make_path(udev, cap->bus_info, sizeof(cap->bus_info));
1926
1927        if (vdev->vfl_type == VFL_TYPE_GRABBER)
1928                cap->device_caps = V4L2_CAP_READWRITE |
1929                        V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
1930        else if (vdev->vfl_type == VFL_TYPE_RADIO)
1931                cap->device_caps = V4L2_CAP_RADIO;
1932        else
1933                cap->device_caps = V4L2_CAP_READWRITE | V4L2_CAP_VBI_CAPTURE;
1934
1935        if (dev->int_audio_type != EM28XX_INT_AUDIO_NONE)
1936                cap->device_caps |= V4L2_CAP_AUDIO;
1937
1938        if (dev->tuner_type != TUNER_ABSENT)
1939                cap->device_caps |= V4L2_CAP_TUNER;
1940
1941        cap->capabilities = cap->device_caps |
1942                            V4L2_CAP_DEVICE_CAPS | V4L2_CAP_READWRITE |
1943                            V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
1944        if (video_is_registered(&v4l2->vbi_dev))
1945                cap->capabilities |= V4L2_CAP_VBI_CAPTURE;
1946        if (video_is_registered(&v4l2->radio_dev))
1947                cap->capabilities |= V4L2_CAP_RADIO;
1948        return 0;
1949}
1950
1951static int vidioc_enum_fmt_vid_cap(struct file *file, void  *priv,
1952                                   struct v4l2_fmtdesc *f)
1953{
1954        if (unlikely(f->index >= ARRAY_SIZE(format)))
1955                return -EINVAL;
1956
1957        strlcpy(f->description, format[f->index].name, sizeof(f->description));
1958        f->pixelformat = format[f->index].fourcc;
1959
1960        return 0;
1961}
1962
1963static int vidioc_enum_framesizes(struct file *file, void *priv,
1964                                  struct v4l2_frmsizeenum *fsize)
1965{
1966        struct em28xx         *dev = video_drvdata(file);
1967        struct em28xx_fmt     *fmt;
1968        unsigned int          maxw = norm_maxw(dev);
1969        unsigned int          maxh = norm_maxh(dev);
1970
1971        fmt = format_by_fourcc(fsize->pixel_format);
1972        if (!fmt) {
1973                em28xx_videodbg("Fourcc format (%08x) invalid.\n",
1974                                fsize->pixel_format);
1975                return -EINVAL;
1976        }
1977
1978        if (dev->board.is_em2800) {
1979                if (fsize->index > 1)
1980                        return -EINVAL;
1981                fsize->type = V4L2_FRMSIZE_TYPE_DISCRETE;
1982                fsize->discrete.width = maxw / (1 + fsize->index);
1983                fsize->discrete.height = maxh / (1 + fsize->index);
1984                return 0;
1985        }
1986
1987        if (fsize->index != 0)
1988                return -EINVAL;
1989
1990        /* Report a continuous range */
1991        fsize->type = V4L2_FRMSIZE_TYPE_STEPWISE;
1992        scale_to_size(dev, EM28XX_HVSCALE_MAX, EM28XX_HVSCALE_MAX,
1993                      &fsize->stepwise.min_width, &fsize->stepwise.min_height);
1994        if (fsize->stepwise.min_width < 48)
1995                fsize->stepwise.min_width = 48;
1996        if (fsize->stepwise.min_height < 38)
1997                fsize->stepwise.min_height = 38;
1998        fsize->stepwise.max_width = maxw;
1999        fsize->stepwise.max_height = maxh;
2000        fsize->stepwise.step_width = 1;
2001        fsize->stepwise.step_height = 1;
2002        return 0;
2003}
2004
2005/* RAW VBI ioctls */
2006
2007static int vidioc_g_fmt_vbi_cap(struct file *file, void *priv,
2008                                struct v4l2_format *format)
2009{
2010        struct em28xx         *dev  = video_drvdata(file);
2011        struct em28xx_v4l2    *v4l2 = dev->v4l2;
2012
2013        format->fmt.vbi.samples_per_line = v4l2->vbi_width;
2014        format->fmt.vbi.sample_format = V4L2_PIX_FMT_GREY;
2015        format->fmt.vbi.offset = 0;
2016        format->fmt.vbi.flags = 0;
2017        format->fmt.vbi.sampling_rate = 6750000 * 4 / 2;
2018        format->fmt.vbi.count[0] = v4l2->vbi_height;
2019        format->fmt.vbi.count[1] = v4l2->vbi_height;
2020        memset(format->fmt.vbi.reserved, 0, sizeof(format->fmt.vbi.reserved));
2021
2022        /* Varies by video standard (NTSC, PAL, etc.) */
2023        if (v4l2->norm & V4L2_STD_525_60) {
2024                /* NTSC */
2025                format->fmt.vbi.start[0] = 10;
2026                format->fmt.vbi.start[1] = 273;
2027        } else if (v4l2->norm & V4L2_STD_625_50) {
2028                /* PAL */
2029                format->fmt.vbi.start[0] = 6;
2030                format->fmt.vbi.start[1] = 318;
2031        }
2032
2033        return 0;
2034}
2035
2036/*
2037 * RADIO ESPECIFIC IOCTLS
2038 */
2039
2040static int radio_g_tuner(struct file *file, void *priv,
2041                         struct v4l2_tuner *t)
2042{
2043        struct em28xx *dev = video_drvdata(file);
2044
2045        if (unlikely(t->index > 0))
2046                return -EINVAL;
2047
2048        strcpy(t->name, "Radio");
2049
2050        v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, g_tuner, t);
2051
2052        return 0;
2053}
2054
2055static int radio_s_tuner(struct file *file, void *priv,
2056                         const struct v4l2_tuner *t)
2057{
2058        struct em28xx *dev = video_drvdata(file);
2059
2060        if (t->index != 0)
2061                return -EINVAL;
2062
2063        v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, s_tuner, t);
2064
2065        return 0;
2066}
2067
2068/*
2069 * em28xx_free_v4l2() - Free struct em28xx_v4l2
2070 *
2071 * @ref: struct kref for struct em28xx_v4l2
2072 *
2073 * Called when all users of struct em28xx_v4l2 are gone
2074 */
2075static void em28xx_free_v4l2(struct kref *ref)
2076{
2077        struct em28xx_v4l2 *v4l2 = container_of(ref, struct em28xx_v4l2, ref);
2078
2079        v4l2->dev->v4l2 = NULL;
2080        kfree(v4l2);
2081}
2082
2083/*
2084 * em28xx_v4l2_open()
2085 * inits the device and starts isoc transfer
2086 */
2087static int em28xx_v4l2_open(struct file *filp)
2088{
2089        struct video_device *vdev = video_devdata(filp);
2090        struct em28xx *dev = video_drvdata(filp);
2091        struct em28xx_v4l2 *v4l2 = dev->v4l2;
2092        enum v4l2_buf_type fh_type = 0;
2093        int ret;
2094
2095        switch (vdev->vfl_type) {
2096        case VFL_TYPE_GRABBER:
2097                fh_type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
2098                break;
2099        case VFL_TYPE_VBI:
2100                fh_type = V4L2_BUF_TYPE_VBI_CAPTURE;
2101                break;
2102        case VFL_TYPE_RADIO:
2103                break;
2104        default:
2105                return -EINVAL;
2106        }
2107
2108        em28xx_videodbg("open dev=%s type=%s users=%d\n",
2109                        video_device_node_name(vdev), v4l2_type_names[fh_type],
2110                        v4l2->users);
2111
2112        if (mutex_lock_interruptible(&dev->lock))
2113                return -ERESTARTSYS;
2114
2115        ret = v4l2_fh_open(filp);
2116        if (ret) {
2117                dev_err(&dev->intf->dev,
2118                        "%s: v4l2_fh_open() returned error %d\n",
2119                       __func__, ret);
2120                mutex_unlock(&dev->lock);
2121                return ret;
2122        }
2123
2124        if (v4l2->users == 0) {
2125                em28xx_set_mode(dev, EM28XX_ANALOG_MODE);
2126
2127                if (vdev->vfl_type != VFL_TYPE_RADIO)
2128                        em28xx_resolution_set(dev);
2129
2130                /*
2131                 * Needed, since GPIO might have disabled power
2132                 * of some i2c devices
2133                 */
2134                em28xx_wake_i2c(dev);
2135        }
2136
2137        if (vdev->vfl_type == VFL_TYPE_RADIO) {
2138                em28xx_videodbg("video_open: setting radio device\n");
2139                v4l2_device_call_all(&v4l2->v4l2_dev, 0, tuner, s_radio);
2140        }
2141
2142        kref_get(&dev->ref);
2143        kref_get(&v4l2->ref);
2144        v4l2->users++;
2145
2146        mutex_unlock(&dev->lock);
2147
2148        return 0;
2149}
2150
2151/*
2152 * em28xx_v4l2_fini()
2153 * unregisters the v4l2,i2c and usb devices
2154 * called when the device gets disconected or at module unload
2155 */
2156static int em28xx_v4l2_fini(struct em28xx *dev)
2157{
2158        struct em28xx_v4l2 *v4l2 = dev->v4l2;
2159
2160        if (dev->is_audio_only) {
2161                /* Shouldn't initialize IR for this interface */
2162                return 0;
2163        }
2164
2165        if (!dev->has_video) {
2166                /* This device does not support the v4l2 extension */
2167                return 0;
2168        }
2169
2170        if (!v4l2)
2171                return 0;
2172
2173        dev_info(&dev->intf->dev, "Closing video extension\n");
2174
2175        mutex_lock(&dev->lock);
2176
2177        v4l2_device_disconnect(&v4l2->v4l2_dev);
2178
2179        em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);
2180
2181        em28xx_v4l2_media_release(dev);
2182
2183        if (video_is_registered(&v4l2->radio_dev)) {
2184                dev_info(&dev->intf->dev, "V4L2 device %s deregistered\n",
2185                         video_device_node_name(&v4l2->radio_dev));
2186                video_unregister_device(&v4l2->radio_dev);
2187        }
2188        if (video_is_registered(&v4l2->vbi_dev)) {
2189                dev_info(&dev->intf->dev, "V4L2 device %s deregistered\n",
2190                         video_device_node_name(&v4l2->vbi_dev));
2191                video_unregister_device(&v4l2->vbi_dev);
2192        }
2193        if (video_is_registered(&v4l2->vdev)) {
2194                dev_info(&dev->intf->dev, "V4L2 device %s deregistered\n",
2195                         video_device_node_name(&v4l2->vdev));
2196                video_unregister_device(&v4l2->vdev);
2197        }
2198
2199        v4l2_ctrl_handler_free(&v4l2->ctrl_handler);
2200        v4l2_device_unregister(&v4l2->v4l2_dev);
2201
2202        kref_put(&v4l2->ref, em28xx_free_v4l2);
2203
2204        mutex_unlock(&dev->lock);
2205
2206        kref_put(&dev->ref, em28xx_free_device);
2207
2208        return 0;
2209}
2210
2211static int em28xx_v4l2_suspend(struct em28xx *dev)
2212{
2213        if (dev->is_audio_only)
2214                return 0;
2215
2216        if (!dev->has_video)
2217                return 0;
2218
2219        dev_info(&dev->intf->dev, "Suspending video extension\n");
2220        em28xx_stop_urbs(dev);
2221        return 0;
2222}
2223
2224static int em28xx_v4l2_resume(struct em28xx *dev)
2225{
2226        if (dev->is_audio_only)
2227                return 0;
2228
2229        if (!dev->has_video)
2230                return 0;
2231
2232        dev_info(&dev->intf->dev, "Resuming video extension\n");
2233        /* what do we do here */
2234        return 0;
2235}
2236
2237/*
2238 * em28xx_v4l2_close()
2239 * stops streaming and deallocates all resources allocated by the v4l2
2240 * calls and ioctls
2241 */
2242static int em28xx_v4l2_close(struct file *filp)
2243{
2244        struct em28xx         *dev  = video_drvdata(filp);
2245        struct em28xx_v4l2    *v4l2 = dev->v4l2;
2246        struct usb_device *udev = interface_to_usbdev(dev->intf);
2247        int              err;
2248
2249        em28xx_videodbg("users=%d\n", v4l2->users);
2250
2251        vb2_fop_release(filp);
2252        mutex_lock(&dev->lock);
2253
2254        if (v4l2->users == 1) {
2255                /* No sense to try to write to the device */
2256                if (dev->disconnected)
2257                        goto exit;
2258
2259                /* Save some power by putting tuner to sleep */
2260                v4l2_device_call_all(&v4l2->v4l2_dev, 0, tuner, standby);
2261
2262                /* do this before setting alternate! */
2263                em28xx_set_mode(dev, EM28XX_SUSPEND);
2264
2265                /* set alternate 0 */
2266                dev->alt = 0;
2267                em28xx_videodbg("setting alternate 0\n");
2268                err = usb_set_interface(udev, 0, 0);
2269                if (err < 0) {
2270                        dev_err(&dev->intf->dev,
2271                                "cannot change alternate number to 0 (error=%i)\n",
2272                                err);
2273                }
2274        }
2275
2276exit:
2277        v4l2->users--;
2278        kref_put(&v4l2->ref, em28xx_free_v4l2);
2279        mutex_unlock(&dev->lock);
2280        kref_put(&dev->ref, em28xx_free_device);
2281
2282        return 0;
2283}
2284
2285static const struct v4l2_file_operations em28xx_v4l_fops = {
2286        .owner         = THIS_MODULE,
2287        .open          = em28xx_v4l2_open,
2288        .release       = em28xx_v4l2_close,
2289        .read          = vb2_fop_read,
2290        .poll          = vb2_fop_poll,
2291        .mmap          = vb2_fop_mmap,
2292        .unlocked_ioctl = video_ioctl2,
2293};
2294
2295static const struct v4l2_ioctl_ops video_ioctl_ops = {
2296        .vidioc_querycap            = vidioc_querycap,
2297        .vidioc_enum_fmt_vid_cap    = vidioc_enum_fmt_vid_cap,
2298        .vidioc_g_fmt_vid_cap       = vidioc_g_fmt_vid_cap,
2299        .vidioc_try_fmt_vid_cap     = vidioc_try_fmt_vid_cap,
2300        .vidioc_s_fmt_vid_cap       = vidioc_s_fmt_vid_cap,
2301        .vidioc_g_fmt_vbi_cap       = vidioc_g_fmt_vbi_cap,
2302        .vidioc_try_fmt_vbi_cap     = vidioc_g_fmt_vbi_cap,
2303        .vidioc_s_fmt_vbi_cap       = vidioc_g_fmt_vbi_cap,
2304        .vidioc_enum_framesizes     = vidioc_enum_framesizes,
2305        .vidioc_g_audio             = vidioc_g_audio,
2306        .vidioc_s_audio             = vidioc_s_audio,
2307
2308        .vidioc_reqbufs             = vb2_ioctl_reqbufs,
2309        .vidioc_create_bufs         = vb2_ioctl_create_bufs,
2310        .vidioc_prepare_buf         = vb2_ioctl_prepare_buf,
2311        .vidioc_querybuf            = vb2_ioctl_querybuf,
2312        .vidioc_qbuf                = vb2_ioctl_qbuf,
2313        .vidioc_dqbuf               = vb2_ioctl_dqbuf,
2314
2315        .vidioc_g_std               = vidioc_g_std,
2316        .vidioc_querystd            = vidioc_querystd,
2317        .vidioc_s_std               = vidioc_s_std,
2318        .vidioc_g_parm              = vidioc_g_parm,
2319        .vidioc_s_parm              = vidioc_s_parm,
2320        .vidioc_enum_input          = vidioc_enum_input,
2321        .vidioc_g_input             = vidioc_g_input,
2322        .vidioc_s_input             = vidioc_s_input,
2323        .vidioc_streamon            = vb2_ioctl_streamon,
2324        .vidioc_streamoff           = vb2_ioctl_streamoff,
2325        .vidioc_g_tuner             = vidioc_g_tuner,
2326        .vidioc_s_tuner             = vidioc_s_tuner,
2327        .vidioc_g_frequency         = vidioc_g_frequency,
2328        .vidioc_s_frequency         = vidioc_s_frequency,
2329        .vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
2330        .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
2331#ifdef CONFIG_VIDEO_ADV_DEBUG
2332        .vidioc_g_chip_info         = vidioc_g_chip_info,
2333        .vidioc_g_register          = vidioc_g_register,
2334        .vidioc_s_register          = vidioc_s_register,
2335#endif
2336};
2337
2338static const struct video_device em28xx_video_template = {
2339        .fops           = &em28xx_v4l_fops,
2340        .ioctl_ops      = &video_ioctl_ops,
2341        .release        = video_device_release_empty,
2342        .tvnorms        = V4L2_STD_ALL,
2343};
2344
2345static const struct v4l2_file_operations radio_fops = {
2346        .owner         = THIS_MODULE,
2347        .open          = em28xx_v4l2_open,
2348        .release       = em28xx_v4l2_close,
2349        .unlocked_ioctl = video_ioctl2,
2350};
2351
2352static const struct v4l2_ioctl_ops radio_ioctl_ops = {
2353        .vidioc_querycap      = vidioc_querycap,
2354        .vidioc_g_tuner       = radio_g_tuner,
2355        .vidioc_s_tuner       = radio_s_tuner,
2356        .vidioc_g_frequency   = vidioc_g_frequency,
2357        .vidioc_s_frequency   = vidioc_s_frequency,
2358        .vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
2359        .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
2360#ifdef CONFIG_VIDEO_ADV_DEBUG
2361        .vidioc_g_chip_info   = vidioc_g_chip_info,
2362        .vidioc_g_register    = vidioc_g_register,
2363        .vidioc_s_register    = vidioc_s_register,
2364#endif
2365};
2366
2367static struct video_device em28xx_radio_template = {
2368        .fops           = &radio_fops,
2369        .ioctl_ops      = &radio_ioctl_ops,
2370        .release        = video_device_release_empty,
2371};
2372
2373/* I2C possible address to saa7115, tvp5150, msp3400, tvaudio */
2374static unsigned short saa711x_addrs[] = {
2375        0x4a >> 1, 0x48 >> 1,   /* SAA7111, SAA7111A and SAA7113 */
2376        0x42 >> 1, 0x40 >> 1,   /* SAA7114, SAA7115 and SAA7118 */
2377        I2C_CLIENT_END };
2378
2379static unsigned short tvp5150_addrs[] = {
2380        0xb8 >> 1,
2381        0xba >> 1,
2382        I2C_CLIENT_END
2383};
2384
2385static unsigned short msp3400_addrs[] = {
2386        0x80 >> 1,
2387        0x88 >> 1,
2388        I2C_CLIENT_END
2389};
2390
2391/******************************** usb interface ******************************/
2392
2393static void em28xx_vdev_init(struct em28xx *dev,
2394                             struct video_device *vfd,
2395                             const struct video_device *template,
2396                             const char *type_name)
2397{
2398        *vfd            = *template;
2399        vfd->v4l2_dev   = &dev->v4l2->v4l2_dev;
2400        vfd->lock       = &dev->lock;
2401        if (dev->is_webcam)
2402                vfd->tvnorms = 0;
2403
2404        snprintf(vfd->name, sizeof(vfd->name), "%s %s",
2405                 dev_name(&dev->intf->dev), type_name);
2406
2407        video_set_drvdata(vfd, dev);
2408}
2409
2410static void em28xx_tuner_setup(struct em28xx *dev, unsigned short tuner_addr)
2411{
2412        struct em28xx_v4l2      *v4l2 = dev->v4l2;
2413        struct v4l2_device      *v4l2_dev = &v4l2->v4l2_dev;
2414        struct tuner_setup      tun_setup;
2415        struct v4l2_frequency   f;
2416
2417        memset(&tun_setup, 0, sizeof(tun_setup));
2418
2419        tun_setup.mode_mask = T_ANALOG_TV | T_RADIO;
2420        tun_setup.tuner_callback = em28xx_tuner_callback;
2421
2422        if (dev->board.radio.type) {
2423                tun_setup.type = dev->board.radio.type;
2424                tun_setup.addr = dev->board.radio_addr;
2425
2426                v4l2_device_call_all(v4l2_dev,
2427                                     0, tuner, s_type_addr, &tun_setup);
2428        }
2429
2430        if (dev->tuner_type != TUNER_ABSENT && dev->tuner_type) {
2431                tun_setup.type   = dev->tuner_type;
2432                tun_setup.addr   = tuner_addr;
2433
2434                v4l2_device_call_all(v4l2_dev,
2435                                     0, tuner, s_type_addr, &tun_setup);
2436        }
2437
2438        if (dev->board.tda9887_conf) {
2439                struct v4l2_priv_tun_config tda9887_cfg;
2440
2441                tda9887_cfg.tuner = TUNER_TDA9887;
2442                tda9887_cfg.priv = &dev->board.tda9887_conf;
2443
2444                v4l2_device_call_all(v4l2_dev,
2445                                     0, tuner, s_config, &tda9887_cfg);
2446        }
2447
2448        if (dev->tuner_type == TUNER_XC2028) {
2449                struct v4l2_priv_tun_config  xc2028_cfg;
2450                struct xc2028_ctrl           ctl;
2451
2452                memset(&xc2028_cfg, 0, sizeof(xc2028_cfg));
2453                memset(&ctl, 0, sizeof(ctl));
2454
2455                em28xx_setup_xc3028(dev, &ctl);
2456
2457                xc2028_cfg.tuner = TUNER_XC2028;
2458                xc2028_cfg.priv  = &ctl;
2459
2460                v4l2_device_call_all(v4l2_dev, 0, tuner, s_config, &xc2028_cfg);
2461        }
2462
2463        /* configure tuner */
2464        f.tuner = 0;
2465        f.type = V4L2_TUNER_ANALOG_TV;
2466        f.frequency = 9076;     /* just a magic number */
2467        v4l2->frequency = f.frequency;
2468        v4l2_device_call_all(v4l2_dev, 0, tuner, s_frequency, &f);
2469}
2470
2471static int em28xx_v4l2_init(struct em28xx *dev)
2472{
2473        u8 val;
2474        int ret;
2475        unsigned int maxw;
2476        struct v4l2_ctrl_handler *hdl;
2477        struct em28xx_v4l2 *v4l2;
2478
2479        if (dev->is_audio_only) {
2480                /* Shouldn't initialize IR for this interface */
2481                return 0;
2482        }
2483
2484        if (!dev->has_video) {
2485                /* This device does not support the v4l2 extension */
2486                return 0;
2487        }
2488
2489        dev_info(&dev->intf->dev, "Registering V4L2 extension\n");
2490
2491        mutex_lock(&dev->lock);
2492
2493        v4l2 = kzalloc(sizeof(*v4l2), GFP_KERNEL);
2494        if (!v4l2) {
2495                mutex_unlock(&dev->lock);
2496                return -ENOMEM;
2497        }
2498        kref_init(&v4l2->ref);
2499        v4l2->dev = dev;
2500        dev->v4l2 = v4l2;
2501
2502#ifdef CONFIG_MEDIA_CONTROLLER
2503        v4l2->v4l2_dev.mdev = dev->media_dev;
2504#endif
2505        ret = v4l2_device_register(&dev->intf->dev, &v4l2->v4l2_dev);
2506        if (ret < 0) {
2507                dev_err(&dev->intf->dev,
2508                        "Call to v4l2_device_register() failed!\n");
2509                goto err;
2510        }
2511
2512        hdl = &v4l2->ctrl_handler;
2513        v4l2_ctrl_handler_init(hdl, 8);
2514        v4l2->v4l2_dev.ctrl_handler = hdl;
2515
2516        if (dev->is_webcam)
2517                v4l2->progressive = true;
2518
2519        /*
2520         * Default format, used for tvp5150 or saa711x output formats
2521         */
2522        v4l2->vinmode = EM28XX_VINMODE_YUV422_CbYCrY;
2523        v4l2->vinctl  = EM28XX_VINCTRL_INTERLACED |
2524                        EM28XX_VINCTRL_CCIR656_ENABLE;
2525
2526        /* request some modules */
2527
2528        if (dev->has_msp34xx)
2529                v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2530                                    &dev->i2c_adap[dev->def_i2c_bus],
2531                                    "msp3400", 0, msp3400_addrs);
2532
2533        if (dev->board.decoder == EM28XX_SAA711X)
2534                v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2535                                    &dev->i2c_adap[dev->def_i2c_bus],
2536                                    "saa7115_auto", 0, saa711x_addrs);
2537
2538        if (dev->board.decoder == EM28XX_TVP5150)
2539                v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2540                                    &dev->i2c_adap[dev->def_i2c_bus],
2541                                    "tvp5150", 0, tvp5150_addrs);
2542
2543        if (dev->board.adecoder == EM28XX_TVAUDIO)
2544                v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2545                                    &dev->i2c_adap[dev->def_i2c_bus],
2546                                    "tvaudio", dev->board.tvaudio_addr, NULL);
2547
2548        /* Initialize tuner and camera */
2549
2550        if (dev->board.tuner_type != TUNER_ABSENT) {
2551                unsigned short tuner_addr = dev->board.tuner_addr;
2552                int has_demod = (dev->board.tda9887_conf & TDA9887_PRESENT);
2553
2554                if (dev->board.radio.type)
2555                        v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2556                                            &dev->i2c_adap[dev->def_i2c_bus],
2557                                            "tuner", dev->board.radio_addr,
2558                                            NULL);
2559
2560                if (has_demod)
2561                        v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2562                                            &dev->i2c_adap[dev->def_i2c_bus],
2563                                            "tuner", 0,
2564                                            v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
2565                if (tuner_addr == 0) {
2566                        enum v4l2_i2c_tuner_type type =
2567                                has_demod ? ADDRS_TV_WITH_DEMOD : ADDRS_TV;
2568                        struct v4l2_subdev *sd;
2569
2570                        sd = v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2571                                                 &dev->i2c_adap[dev->def_i2c_bus],
2572                                                 "tuner", 0,
2573                                                 v4l2_i2c_tuner_addrs(type));
2574
2575                        if (sd)
2576                                tuner_addr = v4l2_i2c_subdev_addr(sd);
2577                } else {
2578                        v4l2_i2c_new_subdev(&v4l2->v4l2_dev,
2579                                            &dev->i2c_adap[dev->def_i2c_bus],
2580                                            "tuner", tuner_addr, NULL);
2581                }
2582
2583                em28xx_tuner_setup(dev, tuner_addr);
2584        }
2585
2586        if (dev->em28xx_sensor != EM28XX_NOSENSOR)
2587                em28xx_init_camera(dev);
2588
2589        /* Configure audio */
2590        ret = em28xx_audio_setup(dev);
2591        if (ret < 0) {
2592                dev_err(&dev->intf->dev,
2593                        "%s: Error while setting audio - error [%d]!\n",
2594                        __func__, ret);
2595                goto unregister_dev;
2596        }
2597        if (dev->audio_mode.ac97 != EM28XX_NO_AC97) {
2598                v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2599                                  V4L2_CID_AUDIO_MUTE, 0, 1, 1, 1);
2600                v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2601                                  V4L2_CID_AUDIO_VOLUME, 0, 0x1f, 1, 0x1f);
2602        } else {
2603                /* install the em28xx notify callback */
2604                v4l2_ctrl_notify(v4l2_ctrl_find(hdl, V4L2_CID_AUDIO_MUTE),
2605                                 em28xx_ctrl_notify, dev);
2606                v4l2_ctrl_notify(v4l2_ctrl_find(hdl, V4L2_CID_AUDIO_VOLUME),
2607                                 em28xx_ctrl_notify, dev);
2608        }
2609
2610        /* wake i2c devices */
2611        em28xx_wake_i2c(dev);
2612
2613        /* init video dma queues */
2614        INIT_LIST_HEAD(&dev->vidq.active);
2615        INIT_LIST_HEAD(&dev->vbiq.active);
2616
2617        if (dev->has_msp34xx) {
2618                /* Send a reset to other chips via gpio */
2619                ret = em28xx_write_reg(dev, EM2820_R08_GPIO_CTRL, 0xf7);
2620                if (ret < 0) {
2621                        dev_err(&dev->intf->dev,
2622                                "%s: em28xx_write_reg - msp34xx(1) failed! error [%d]\n",
2623                                __func__, ret);
2624                        goto unregister_dev;
2625                }
2626                usleep_range(10000, 11000);
2627
2628                ret = em28xx_write_reg(dev, EM2820_R08_GPIO_CTRL, 0xff);
2629                if (ret < 0) {
2630                        dev_err(&dev->intf->dev,
2631                                "%s: em28xx_write_reg - msp34xx(2) failed! error [%d]\n",
2632                                __func__, ret);
2633                        goto unregister_dev;
2634                }
2635                usleep_range(10000, 11000);
2636        }
2637
2638        /* set default norm */
2639        v4l2->norm = V4L2_STD_PAL;
2640        v4l2_device_call_all(&v4l2->v4l2_dev, 0, video, s_std, v4l2->norm);
2641        v4l2->interlaced_fieldmode = EM28XX_INTERLACED_DEFAULT;
2642
2643        /* Analog specific initialization */
2644        v4l2->format = &format[0];
2645
2646        maxw = norm_maxw(dev);
2647        /*
2648         * MaxPacketSize for em2800 is too small to capture at full resolution
2649         * use half of maxw as the scaler can only scale to 50%
2650         */
2651        if (dev->board.is_em2800)
2652                maxw /= 2;
2653
2654        em28xx_set_video_format(dev, format[0].fourcc,
2655                                maxw, norm_maxh(dev));
2656
2657        video_mux(dev, 0);
2658
2659        /* Audio defaults */
2660        dev->mute = 1;
2661        dev->volume = 0x1f;
2662
2663/*      em28xx_write_reg(dev, EM28XX_R0E_AUDIOSRC, 0xc0); audio register */
2664        val = (u8)em28xx_read_reg(dev, EM28XX_R0F_XCLK);
2665        em28xx_write_reg(dev, EM28XX_R0F_XCLK,
2666                         (EM28XX_XCLK_AUDIO_UNMUTE | val));
2667
2668        em28xx_set_outfmt(dev);
2669
2670        /* Add image controls */
2671
2672        /*
2673         * NOTE: at this point, the subdevices are already registered, so
2674         * bridge controls are only added/enabled when no subdevice provides
2675         * them
2676         */
2677        if (!v4l2_ctrl_find(hdl, V4L2_CID_CONTRAST))
2678                v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2679                                  V4L2_CID_CONTRAST,
2680                                  0, 0x1f, 1, CONTRAST_DEFAULT);
2681        if (!v4l2_ctrl_find(hdl, V4L2_CID_BRIGHTNESS))
2682                v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2683                                  V4L2_CID_BRIGHTNESS,
2684                                  -0x80, 0x7f, 1, BRIGHTNESS_DEFAULT);
2685        if (!v4l2_ctrl_find(hdl, V4L2_CID_SATURATION))
2686                v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2687                                  V4L2_CID_SATURATION,
2688                                  0, 0x1f, 1, SATURATION_DEFAULT);
2689        if (!v4l2_ctrl_find(hdl, V4L2_CID_BLUE_BALANCE))
2690                v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2691                                  V4L2_CID_BLUE_BALANCE,
2692                                  -0x30, 0x30, 1, BLUE_BALANCE_DEFAULT);
2693        if (!v4l2_ctrl_find(hdl, V4L2_CID_RED_BALANCE))
2694                v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2695                                  V4L2_CID_RED_BALANCE,
2696                                  -0x30, 0x30, 1, RED_BALANCE_DEFAULT);
2697        if (!v4l2_ctrl_find(hdl, V4L2_CID_SHARPNESS))
2698                v4l2_ctrl_new_std(hdl, &em28xx_ctrl_ops,
2699                                  V4L2_CID_SHARPNESS,
2700                                  0, 0x0f, 1, SHARPNESS_DEFAULT);
2701
2702        /* Reset image controls */
2703        em28xx_colorlevels_set_default(dev);
2704        v4l2_ctrl_handler_setup(hdl);
2705        ret = hdl->error;
2706        if (ret)
2707                goto unregister_dev;
2708
2709        /* allocate and fill video video_device struct */
2710        em28xx_vdev_init(dev, &v4l2->vdev, &em28xx_video_template, "video");
2711        mutex_init(&v4l2->vb_queue_lock);
2712        mutex_init(&v4l2->vb_vbi_queue_lock);
2713        v4l2->vdev.queue = &v4l2->vb_vidq;
2714        v4l2->vdev.queue->lock = &v4l2->vb_queue_lock;
2715
2716        /* disable inapplicable ioctls */
2717        if (dev->is_webcam) {
2718                v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_QUERYSTD);
2719                v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_STD);
2720                v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_STD);
2721        } else {
2722                v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_PARM);
2723        }
2724        if (dev->tuner_type == TUNER_ABSENT) {
2725                v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_TUNER);
2726                v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_TUNER);
2727                v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_FREQUENCY);
2728                v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_FREQUENCY);
2729        }
2730        if (dev->int_audio_type == EM28XX_INT_AUDIO_NONE) {
2731                v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_G_AUDIO);
2732                v4l2_disable_ioctl(&v4l2->vdev, VIDIOC_S_AUDIO);
2733        }
2734
2735        /* register v4l2 video video_device */
2736        ret = video_register_device(&v4l2->vdev, VFL_TYPE_GRABBER,
2737                                    video_nr[dev->devno]);
2738        if (ret) {
2739                dev_err(&dev->intf->dev,
2740                        "unable to register video device (error=%i).\n", ret);
2741                goto unregister_dev;
2742        }
2743
2744        /* Allocate and fill vbi video_device struct */
2745        if (em28xx_vbi_supported(dev) == 1) {
2746                em28xx_vdev_init(dev, &v4l2->vbi_dev, &em28xx_video_template,
2747                                 "vbi");
2748
2749                v4l2->vbi_dev.queue = &v4l2->vb_vbiq;
2750                v4l2->vbi_dev.queue->lock = &v4l2->vb_vbi_queue_lock;
2751
2752                /* disable inapplicable ioctls */
2753                v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_PARM);
2754                if (dev->tuner_type == TUNER_ABSENT) {
2755                        v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_G_TUNER);
2756                        v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_TUNER);
2757                        v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_G_FREQUENCY);
2758                        v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_FREQUENCY);
2759                }
2760                if (dev->int_audio_type == EM28XX_INT_AUDIO_NONE) {
2761                        v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_G_AUDIO);
2762                        v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_AUDIO);
2763                }
2764
2765                /* register v4l2 vbi video_device */
2766                ret = video_register_device(&v4l2->vbi_dev, VFL_TYPE_VBI,
2767                                            vbi_nr[dev->devno]);
2768                if (ret < 0) {
2769                        dev_err(&dev->intf->dev,
2770                                "unable to register vbi device\n");
2771                        goto unregister_dev;
2772                }
2773        }
2774
2775        if (em28xx_boards[dev->model].radio.type == EM28XX_RADIO) {
2776                em28xx_vdev_init(dev, &v4l2->radio_dev, &em28xx_radio_template,
2777                                 "radio");
2778                ret = video_register_device(&v4l2->radio_dev, VFL_TYPE_RADIO,
2779                                            radio_nr[dev->devno]);
2780                if (ret < 0) {
2781                        dev_err(&dev->intf->dev,
2782                                "can't register radio device\n");
2783                        goto unregister_dev;
2784                }
2785                dev_info(&dev->intf->dev,
2786                         "Registered radio device as %s\n",
2787                         video_device_node_name(&v4l2->radio_dev));
2788        }
2789
2790        /* Init entities at the Media Controller */
2791        em28xx_v4l2_create_entities(dev);
2792
2793#ifdef CONFIG_MEDIA_CONTROLLER
2794        ret = v4l2_mc_create_media_graph(dev->media_dev);
2795        if (ret) {
2796                dev_err(&dev->intf->dev,
2797                        "failed to create media graph\n");
2798                em28xx_v4l2_media_release(dev);
2799                goto unregister_dev;
2800        }
2801#endif
2802
2803        dev_info(&dev->intf->dev,
2804                 "V4L2 video device registered as %s\n",
2805                 video_device_node_name(&v4l2->vdev));
2806
2807        if (video_is_registered(&v4l2->vbi_dev))
2808                dev_info(&dev->intf->dev,
2809                         "V4L2 VBI device registered as %s\n",
2810                         video_device_node_name(&v4l2->vbi_dev));
2811
2812        /* Save some power by putting tuner to sleep */
2813        v4l2_device_call_all(&v4l2->v4l2_dev, 0, tuner, standby);
2814
2815        /* initialize videobuf2 stuff */
2816        em28xx_vb2_setup(dev);
2817
2818        dev_info(&dev->intf->dev,
2819                 "V4L2 extension successfully initialized\n");
2820
2821        kref_get(&dev->ref);
2822
2823        mutex_unlock(&dev->lock);
2824        return 0;
2825
2826unregister_dev:
2827        if (video_is_registered(&v4l2->radio_dev)) {
2828                dev_info(&dev->intf->dev,
2829                         "V4L2 device %s deregistered\n",
2830                         video_device_node_name(&v4l2->radio_dev));
2831                video_unregister_device(&v4l2->radio_dev);
2832        }
2833        if (video_is_registered(&v4l2->vbi_dev)) {
2834                dev_info(&dev->intf->dev,
2835                         "V4L2 device %s deregistered\n",
2836                         video_device_node_name(&v4l2->vbi_dev));
2837                video_unregister_device(&v4l2->vbi_dev);
2838        }
2839        if (video_is_registered(&v4l2->vdev)) {
2840                dev_info(&dev->intf->dev,
2841                         "V4L2 device %s deregistered\n",
2842                         video_device_node_name(&v4l2->vdev));
2843                video_unregister_device(&v4l2->vdev);
2844        }
2845
2846        v4l2_ctrl_handler_free(&v4l2->ctrl_handler);
2847        v4l2_device_unregister(&v4l2->v4l2_dev);
2848err:
2849        dev->v4l2 = NULL;
2850        kref_put(&v4l2->ref, em28xx_free_v4l2);
2851        mutex_unlock(&dev->lock);
2852        return ret;
2853}
2854
2855static struct em28xx_ops v4l2_ops = {
2856        .id   = EM28XX_V4L2,
2857        .name = "Em28xx v4l2 Extension",
2858        .init = em28xx_v4l2_init,
2859        .fini = em28xx_v4l2_fini,
2860        .suspend = em28xx_v4l2_suspend,
2861        .resume = em28xx_v4l2_resume,
2862};
2863
2864static int __init em28xx_video_register(void)
2865{
2866        return em28xx_register_extension(&v4l2_ops);
2867}
2868
2869static void __exit em28xx_video_unregister(void)
2870{
2871        em28xx_unregister_extension(&v4l2_ops);
2872}
2873
2874module_init(em28xx_video_register);
2875module_exit(em28xx_video_unregister);
2876