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