linux/drivers/media/usb/em28xx/em28xx.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0+ */
   2/*
   3 * em28xx.h - driver for Empia EM2800/EM2820/2840 USB video capture devices
   4 *
   5 * Copyright (C) 2005 Markus Rechberger <mrechberger@gmail.com>
   6 *                    Ludovico Cavedon <cavedon@sssup.it>
   7 *                    Mauro Carvalho Chehab <mchehab@kernel.org>
   8 * Copyright (C) 2012 Frank Schäfer <fschaefer.oss@googlemail.com>
   9 *
  10 * Based on the em2800 driver from Sascha Sommer <saschasommer@freenet.de>
  11 *
  12 * This program is free software; you can redistribute it and/or modify
  13 * it under the terms of the GNU General Public License as published by
  14 * the Free Software Foundation; either version 2 of the License, or
  15 * (at your option) any later version.
  16 *
  17 * This program is distributed in the hope that it will be useful,
  18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20 * GNU General Public License for more details.
  21 */
  22
  23#ifndef _EM28XX_H
  24#define _EM28XX_H
  25
  26#include <linux/bitfield.h>
  27
  28#define EM28XX_VERSION "0.2.2"
  29#define DRIVER_DESC    "Empia em28xx device driver"
  30
  31#include <linux/workqueue.h>
  32#include <linux/i2c.h>
  33#include <linux/mutex.h>
  34#include <linux/kref.h>
  35#include <linux/videodev2.h>
  36
  37#include <media/videobuf2-v4l2.h>
  38#include <media/videobuf2-vmalloc.h>
  39#include <media/v4l2-device.h>
  40#include <media/v4l2-ctrls.h>
  41#include <media/v4l2-fh.h>
  42#include <media/i2c/ir-kbd-i2c.h>
  43#include <media/rc-core.h>
  44#include "tuner-xc2028.h"
  45#include "xc5000.h"
  46#include "em28xx-reg.h"
  47
  48/* Boards supported by driver */
  49#define EM2800_BOARD_UNKNOWN                      0
  50#define EM2820_BOARD_UNKNOWN                      1
  51#define EM2820_BOARD_TERRATEC_CINERGY_250         2
  52#define EM2820_BOARD_PINNACLE_USB_2               3
  53#define EM2820_BOARD_HAUPPAUGE_WINTV_USB_2        4
  54#define EM2820_BOARD_MSI_VOX_USB_2                5
  55#define EM2800_BOARD_TERRATEC_CINERGY_200         6
  56#define EM2800_BOARD_LEADTEK_WINFAST_USBII        7
  57#define EM2800_BOARD_KWORLD_USB2800               8
  58#define EM2820_BOARD_PINNACLE_DVC_90              9
  59#define EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900      10
  60#define EM2880_BOARD_TERRATEC_HYBRID_XS           11
  61#define EM2820_BOARD_KWORLD_PVRTV2800RF           12
  62#define EM2880_BOARD_TERRATEC_PRODIGY_XS          13
  63#define EM2820_BOARD_PROLINK_PLAYTV_USB2          14
  64#define EM2800_BOARD_VGEAR_POCKETTV               15
  65#define EM2883_BOARD_HAUPPAUGE_WINTV_HVR_950      16
  66#define EM2880_BOARD_PINNACLE_PCTV_HD_PRO         17
  67#define EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900_R2   18
  68#define EM2860_BOARD_SAA711X_REFERENCE_DESIGN     19
  69#define EM2880_BOARD_AMD_ATI_TV_WONDER_HD_600     20
  70#define EM2800_BOARD_GRABBEEX_USB2800             21
  71#define EM2750_BOARD_UNKNOWN                      22
  72#define EM2750_BOARD_DLCW_130                     23
  73#define EM2820_BOARD_DLINK_USB_TV                 24
  74#define EM2820_BOARD_GADMEI_UTV310                25
  75#define EM2820_BOARD_HERCULES_SMART_TV_USB2       26
  76#define EM2820_BOARD_PINNACLE_USB_2_FM1216ME      27
  77#define EM2820_BOARD_LEADTEK_WINFAST_USBII_DELUXE 28
  78#define EM2860_BOARD_TVP5150_REFERENCE_DESIGN     29
  79#define EM2820_BOARD_VIDEOLOGY_20K14XUSB          30
  80#define EM2821_BOARD_USBGEAR_VD204                31
  81#define EM2821_BOARD_SUPERCOMP_USB_2              32
  82#define EM2860_BOARD_ELGATO_VIDEO_CAPTURE         33
  83#define EM2860_BOARD_TERRATEC_HYBRID_XS           34
  84#define EM2860_BOARD_TYPHOON_DVD_MAKER            35
  85#define EM2860_BOARD_NETGMBH_CAM                  36
  86#define EM2860_BOARD_GADMEI_UTV330                37
  87#define EM2861_BOARD_YAKUMO_MOVIE_MIXER           38
  88#define EM2861_BOARD_KWORLD_PVRTV_300U            39
  89#define EM2861_BOARD_PLEXTOR_PX_TV100U            40
  90#define EM2870_BOARD_KWORLD_350U                  41
  91#define EM2870_BOARD_KWORLD_355U                  42
  92#define EM2870_BOARD_TERRATEC_XS                  43
  93#define EM2870_BOARD_TERRATEC_XS_MT2060           44
  94#define EM2870_BOARD_PINNACLE_PCTV_DVB            45
  95#define EM2870_BOARD_COMPRO_VIDEOMATE             46
  96#define EM2880_BOARD_KWORLD_DVB_305U              47
  97#define EM2880_BOARD_KWORLD_DVB_310U              48
  98#define EM2880_BOARD_MSI_DIGIVOX_AD               49
  99#define EM2880_BOARD_MSI_DIGIVOX_AD_II            50
 100#define EM2880_BOARD_TERRATEC_HYBRID_XS_FR        51
 101#define EM2881_BOARD_DNT_DA2_HYBRID               52
 102#define EM2881_BOARD_PINNACLE_HYBRID_PRO          53
 103#define EM2882_BOARD_KWORLD_VS_DVBT               54
 104#define EM2882_BOARD_TERRATEC_HYBRID_XS           55
 105#define EM2882_BOARD_PINNACLE_HYBRID_PRO_330E     56
 106#define EM2883_BOARD_KWORLD_HYBRID_330U           57
 107#define EM2820_BOARD_COMPRO_VIDEOMATE_FORYOU      58
 108#define EM2874_BOARD_PCTV_HD_MINI_80E             59
 109#define EM2883_BOARD_HAUPPAUGE_WINTV_HVR_850      60
 110#define EM2820_BOARD_PROLINK_PLAYTV_BOX4_USB2     61
 111#define EM2820_BOARD_GADMEI_TVR200                62
 112#define EM2860_BOARD_KAIOMY_TVNPC_U2              63
 113#define EM2860_BOARD_EASYCAP                      64
 114#define EM2820_BOARD_IODATA_GVMVP_SZ              65
 115#define EM2880_BOARD_EMPIRE_DUAL_TV               66
 116#define EM2860_BOARD_TERRATEC_GRABBY              67
 117#define EM2860_BOARD_TERRATEC_AV350               68
 118#define EM2882_BOARD_KWORLD_ATSC_315U             69
 119#define EM2882_BOARD_EVGA_INDTUBE                 70
 120#define EM2820_BOARD_SILVERCREST_WEBCAM           71
 121#define EM2861_BOARD_GADMEI_UTV330PLUS            72
 122#define EM2870_BOARD_REDDO_DVB_C_USB_BOX          73
 123#define EM2800_BOARD_VC211A                       74
 124#define EM2882_BOARD_DIKOM_DK300                  75
 125#define EM2870_BOARD_KWORLD_A340                  76
 126#define EM2874_BOARD_LEADERSHIP_ISDBT             77
 127#define EM28174_BOARD_PCTV_290E                   78
 128#define EM2884_BOARD_TERRATEC_H5                  79
 129#define EM28174_BOARD_PCTV_460E                   80
 130#define EM2884_BOARD_HAUPPAUGE_WINTV_HVR_930C     81
 131#define EM2884_BOARD_CINERGY_HTC_STICK            82
 132#define EM2860_BOARD_HT_VIDBOX_NW03               83
 133#define EM2874_BOARD_MAXMEDIA_UB425_TC            84
 134#define EM2884_BOARD_PCTV_510E                    85
 135#define EM2884_BOARD_PCTV_520E                    86
 136#define EM2884_BOARD_TERRATEC_HTC_USB_XS          87
 137#define EM2884_BOARD_C3TECH_DIGITAL_DUO           88
 138#define EM2874_BOARD_DELOCK_61959                 89
 139#define EM2874_BOARD_KWORLD_UB435Q_V2             90
 140#define EM2765_BOARD_SPEEDLINK_VAD_LAPLACE        91
 141#define EM28178_BOARD_PCTV_461E                   92
 142#define EM2874_BOARD_KWORLD_UB435Q_V3             93
 143#define EM28178_BOARD_PCTV_292E                   94
 144#define EM2861_BOARD_LEADTEK_VC100                95
 145#define EM28178_BOARD_TERRATEC_T2_STICK_HD        96
 146#define EM2884_BOARD_ELGATO_EYETV_HYBRID_2008     97
 147#define EM28178_BOARD_PLEX_PX_BCUD                98
 148#define EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_DVB  99
 149#define EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_01595 100
 150#define EM2884_BOARD_TERRATEC_H6                  101
 151#define EM2882_BOARD_ZOLID_HYBRID_TV_STICK              102
 152
 153/* Limits minimum and default number of buffers */
 154#define EM28XX_MIN_BUF 4
 155#define EM28XX_DEF_BUF 8
 156
 157/*Limits the max URB message size */
 158#define URB_MAX_CTRL_SIZE 80
 159
 160/* Params for validated field */
 161#define EM28XX_BOARD_NOT_VALIDATED 1
 162#define EM28XX_BOARD_VALIDATED     0
 163
 164/* Params for em28xx_cmd() audio */
 165#define EM28XX_START_AUDIO      1
 166#define EM28XX_STOP_AUDIO       0
 167
 168/* maximum number of em28xx boards */
 169#define EM28XX_MAXBOARDS DVB_MAX_ADAPTERS /* All adapters could be em28xx */
 170
 171/* maximum number of frames that can be queued */
 172#define EM28XX_NUM_FRAMES 5
 173/* number of frames that get used for v4l2_read() */
 174#define EM28XX_NUM_READ_FRAMES 2
 175
 176/* number of buffers for isoc transfers */
 177#define EM28XX_NUM_BUFS 5
 178#define EM28XX_DVB_NUM_BUFS 5
 179
 180/* max number of I2C buses on em28xx devices */
 181#define NUM_I2C_BUSES   2
 182
 183/*
 184 * isoc transfers: number of packets for each buffer
 185 * windows requests only 64 packets .. so we better do the same
 186 * this is what I found out for all alternate numbers there!
 187 */
 188#define EM28XX_NUM_ISOC_PACKETS 64
 189#define EM28XX_DVB_NUM_ISOC_PACKETS 64
 190
 191/*
 192 * bulk transfers: transfer buffer size = packet size * packet multiplier
 193 * USB 2.0 spec says bulk packet size is always 512 bytes
 194 */
 195#define EM28XX_BULK_PACKET_MULTIPLIER 384
 196#define EM28XX_DVB_BULK_PACKET_MULTIPLIER 94
 197
 198#define EM28XX_INTERLACED_DEFAULT 1
 199
 200/* time in msecs to wait for AC97 xfers to finish */
 201#define EM28XX_AC97_XFER_TIMEOUT        100
 202
 203/* max. number of button state polling addresses */
 204#define EM28XX_NUM_BUTTON_ADDRESSES_MAX         5
 205
 206#define PRIMARY_TS      0
 207#define SECONDARY_TS    1
 208
 209enum em28xx_mode {
 210        EM28XX_SUSPEND,
 211        EM28XX_ANALOG_MODE,
 212        EM28XX_DIGITAL_MODE,
 213};
 214
 215struct em28xx;
 216
 217/**
 218 * struct em28xx_usb_bufs - Contains URB-related buffer data
 219 *
 220 * @max_pkt_size:       max packet size of isoc transaction
 221 * @num_packets:        number of packets in each buffer
 222 * @num_bufs:           number of allocated urb
 223 * @urb:                urb for isoc/bulk transfers
 224 * @buf:                transfer buffers for isoc/bulk transfer
 225 */
 226struct em28xx_usb_bufs {
 227        int                             max_pkt_size;
 228        int                             num_packets;
 229        int                             num_bufs;
 230        struct urb                      **urb;
 231        char                            **buf;
 232};
 233
 234/**
 235 * struct em28xx_usb_ctl - Contains URB-related buffer data
 236 *
 237 * @analog_bufs:        isoc/bulk transfer buffers for analog mode
 238 * @digital_bufs:       isoc/bulk transfer buffers for digital mode
 239 * @vid_buf:            Stores already requested video buffers
 240 * @vbi_buf:            Stores already requested VBI buffers
 241 * @urb_data_copy:      copy data from URB
 242 */
 243struct em28xx_usb_ctl {
 244        struct em28xx_usb_bufs          analog_bufs;
 245        struct em28xx_usb_bufs          digital_bufs;
 246        struct em28xx_buffer    *vid_buf;
 247        struct em28xx_buffer    *vbi_buf;
 248        int (*urb_data_copy)(struct em28xx *dev, struct urb *urb);
 249};
 250
 251/**
 252 * struct em28xx_fmt - Struct to enumberate video formats
 253 *
 254 * @name:       Name for the video standard
 255 * @fourcc:     v4l2 format id
 256 * @depth:      mean number of bits to represent a pixel
 257 * @reg:        em28xx register value to set it
 258 */
 259struct em28xx_fmt {
 260        char    *name;
 261        u32     fourcc;
 262        int     depth;
 263        int     reg;
 264};
 265
 266/**
 267 * struct em28xx_buffer- buffer for storing one video frame
 268 *
 269 * @vb:         common v4l buffer stuff
 270 * @list:       List to associate it with the other buffers
 271 * @mem:        pointer to the buffer, as returned by vb2_plane_vaddr()
 272 * @length:     length of the buffer, as returned by vb2_plane_size()
 273 * @top_field:  If non-zero, indicate that the buffer is the top field
 274 * @pos:        Indicate the next position of the buffer to be filled.
 275 * @vb_buf:     pointer to vmalloc memory address in vb
 276 *
 277 * .. note::
 278 *
 279 *    in interlaced mode, @pos is reset to zero at the start of each new
 280 *    field (not frame !)
 281 */
 282struct em28xx_buffer {
 283        struct vb2_v4l2_buffer  vb;             /* must be first */
 284
 285        struct list_head        list;
 286
 287        void                    *mem;
 288        unsigned int            length;
 289        int                     top_field;
 290
 291        unsigned int            pos;
 292
 293        char                    *vb_buf;
 294};
 295
 296struct em28xx_dmaqueue {
 297        struct list_head       active;
 298
 299        wait_queue_head_t          wq;
 300};
 301
 302/* inputs */
 303
 304#define MAX_EM28XX_INPUT 4
 305enum enum28xx_itype {
 306        EM28XX_VMUX_COMPOSITE = 1,
 307        EM28XX_VMUX_SVIDEO,
 308        EM28XX_VMUX_TELEVISION,
 309        EM28XX_RADIO,
 310};
 311
 312enum em28xx_ac97_mode {
 313        EM28XX_NO_AC97 = 0,
 314        EM28XX_AC97_EM202,
 315        EM28XX_AC97_SIGMATEL,
 316        EM28XX_AC97_OTHER,
 317};
 318
 319struct em28xx_audio_mode {
 320        enum em28xx_ac97_mode ac97;
 321};
 322
 323enum em28xx_int_audio_type {
 324        EM28XX_INT_AUDIO_NONE = 0,
 325        EM28XX_INT_AUDIO_AC97,
 326        EM28XX_INT_AUDIO_I2S,
 327};
 328
 329enum em28xx_usb_audio_type {
 330        EM28XX_USB_AUDIO_NONE = 0,
 331        EM28XX_USB_AUDIO_CLASS,
 332        EM28XX_USB_AUDIO_VENDOR,
 333};
 334
 335/**
 336 * em28xx_amux - describes the type of audio input used by em28xx
 337 *
 338 * @EM28XX_AMUX_UNUSED:
 339 *      Used only on em28xx dev->map field, in order to mark an entry
 340 *      as unused.
 341 * @EM28XX_AMUX_VIDEO:
 342 *      On devices without AC97, this is the only value that it is currently
 343 *      allowed.
 344 *      On devices with AC97, it corresponds to the AC97 mixer "Video" control.
 345 * @EM28XX_AMUX_LINE_IN:
 346 *      Only for devices with AC97. Corresponds to AC97 mixer "Line In".
 347 * @EM28XX_AMUX_VIDEO2:
 348 *      Only for devices with AC97. It means that em28xx should use "Line In"
 349 *      And AC97 should use the "Video" mixer control.
 350 * @EM28XX_AMUX_PHONE:
 351 *      Only for devices with AC97. Corresponds to AC97 mixer "Phone".
 352 * @EM28XX_AMUX_MIC:
 353 *      Only for devices with AC97. Corresponds to AC97 mixer "Mic".
 354 * @EM28XX_AMUX_CD:
 355 *      Only for devices with AC97. Corresponds to AC97 mixer "CD".
 356 * @EM28XX_AMUX_AUX:
 357 *      Only for devices with AC97. Corresponds to AC97 mixer "Aux".
 358 * @EM28XX_AMUX_PCM_OUT:
 359 *      Only for devices with AC97. Corresponds to AC97 mixer "PCM out".
 360 *
 361 * The em28xx chip itself has only two audio inputs: tuner and line in.
 362 * On almost all devices, only the tuner input is used.
 363 *
 364 * However, on most devices, an auxiliary AC97 codec device is used,
 365 * usually connected to the em28xx tuner input (except for
 366 * @EM28XX_AMUX_LINE_IN).
 367 *
 368 * The AC97 device typically have several different inputs and outputs.
 369 * The exact number and description depends on their model.
 370 *
 371 * It is possible to AC97 to mixer more than one different entries at the
 372 * same time, via the alsa mux.
 373 */
 374enum em28xx_amux {
 375        EM28XX_AMUX_UNUSED = -1,
 376        EM28XX_AMUX_VIDEO = 0,
 377        EM28XX_AMUX_LINE_IN,
 378
 379        /* Some less-common mixer setups */
 380        EM28XX_AMUX_VIDEO2,
 381        EM28XX_AMUX_PHONE,
 382        EM28XX_AMUX_MIC,
 383        EM28XX_AMUX_CD,
 384        EM28XX_AMUX_AUX,
 385        EM28XX_AMUX_PCM_OUT,
 386};
 387
 388enum em28xx_aout {
 389        /* AC97 outputs */
 390        EM28XX_AOUT_MASTER = BIT(0),
 391        EM28XX_AOUT_LINE   = BIT(1),
 392        EM28XX_AOUT_MONO   = BIT(2),
 393        EM28XX_AOUT_LFE    = BIT(3),
 394        EM28XX_AOUT_SURR   = BIT(4),
 395
 396        /* PCM IN Mixer - used by AC97_RECORD_SELECT register */
 397        EM28XX_AOUT_PCM_IN = BIT(7),
 398
 399        /* Bits 10-8 are used to indicate the PCM IN record select */
 400        EM28XX_AOUT_PCM_MIC_PCM = 0 << 8,
 401        EM28XX_AOUT_PCM_CD      = 1 << 8,
 402        EM28XX_AOUT_PCM_VIDEO   = 2 << 8,
 403        EM28XX_AOUT_PCM_AUX     = 3 << 8,
 404        EM28XX_AOUT_PCM_LINE    = 4 << 8,
 405        EM28XX_AOUT_PCM_STEREO  = 5 << 8,
 406        EM28XX_AOUT_PCM_MONO    = 6 << 8,
 407        EM28XX_AOUT_PCM_PHONE   = 7 << 8,
 408};
 409
 410static inline int ac97_return_record_select(int a_out)
 411{
 412        return (a_out & 0x700) >> 8;
 413}
 414
 415struct em28xx_reg_seq {
 416        int reg;
 417        unsigned char val, mask;
 418        int sleep;
 419};
 420
 421struct em28xx_input {
 422        enum enum28xx_itype type;
 423        unsigned int vmux;
 424        enum em28xx_amux amux;
 425        enum em28xx_aout aout;
 426        const struct em28xx_reg_seq *gpio;
 427};
 428
 429#define INPUT(nr) (&em28xx_boards[dev->model].input[nr])
 430
 431enum em28xx_decoder {
 432        EM28XX_NODECODER = 0,
 433        EM28XX_TVP5150,
 434        EM28XX_SAA711X,
 435};
 436
 437enum em28xx_sensor {
 438        EM28XX_NOSENSOR = 0,
 439        EM28XX_MT9V011,
 440        EM28XX_MT9M001,
 441        EM28XX_MT9M111,
 442        EM28XX_OV2640,
 443};
 444
 445enum em28xx_adecoder {
 446        EM28XX_NOADECODER = 0,
 447        EM28XX_TVAUDIO,
 448};
 449
 450enum em28xx_led_role {
 451        EM28XX_LED_ANALOG_CAPTURING = 0,
 452        EM28XX_LED_DIGITAL_CAPTURING,
 453        EM28XX_LED_DIGITAL_CAPTURING_TS2,
 454        EM28XX_LED_ILLUMINATION,
 455        EM28XX_NUM_LED_ROLES, /* must be the last */
 456};
 457
 458struct em28xx_led {
 459        enum em28xx_led_role role;
 460        u8 gpio_reg;
 461        u8 gpio_mask;
 462        bool inverted;
 463};
 464
 465enum em28xx_button_role {
 466        EM28XX_BUTTON_SNAPSHOT = 0,
 467        EM28XX_BUTTON_ILLUMINATION,
 468        EM28XX_NUM_BUTTON_ROLES, /* must be the last */
 469};
 470
 471struct em28xx_button {
 472        enum em28xx_button_role role;
 473        u8 reg_r;
 474        u8 reg_clearing;
 475        u8 mask;
 476        bool inverted;
 477};
 478
 479struct em28xx_board {
 480        char *name;
 481        int vchannels;
 482        int tuner_type;
 483        int tuner_addr;
 484        unsigned int def_i2c_bus;       /* Default I2C bus */
 485
 486        /* i2c flags */
 487        unsigned int tda9887_conf;
 488
 489        /* GPIO sequences */
 490        const struct em28xx_reg_seq *dvb_gpio;
 491        const struct em28xx_reg_seq *suspend_gpio;
 492        const struct em28xx_reg_seq *tuner_gpio;
 493        const struct em28xx_reg_seq *mute_gpio;
 494
 495        unsigned int is_em2800:1;
 496        unsigned int has_msp34xx:1;
 497        unsigned int mts_firmware:1;
 498        unsigned int max_range_640_480:1;
 499        unsigned int has_dvb:1;
 500        unsigned int has_dual_ts:1;
 501        unsigned int is_webcam:1;
 502        unsigned int valid:1;
 503        unsigned int has_ir_i2c:1;
 504
 505        unsigned char xclk, i2c_speed;
 506        unsigned char radio_addr;
 507        unsigned short tvaudio_addr;
 508
 509        enum em28xx_decoder decoder;
 510        enum em28xx_adecoder adecoder;
 511
 512        struct em28xx_input       input[MAX_EM28XX_INPUT];
 513        struct em28xx_input       radio;
 514        char                      *ir_codes;
 515
 516        /* LEDs that need to be controlled explicitly */
 517        struct em28xx_led         *leds;
 518
 519        /* Buttons */
 520        const struct em28xx_button *buttons;
 521};
 522
 523struct em28xx_eeprom {
 524        u8 id[4];                       /* 1a eb 67 95 */
 525        __le16 vendor_ID;
 526        __le16 product_ID;
 527
 528        __le16 chip_conf;
 529
 530        __le16 board_conf;
 531
 532        __le16 string1, string2, string3;
 533
 534        u8 string_idx_table;
 535};
 536
 537#define EM28XX_CAPTURE_STREAM_EN 1
 538
 539/* em28xx extensions */
 540#define EM28XX_AUDIO   0x10
 541#define EM28XX_DVB     0x20
 542#define EM28XX_RC      0x30
 543#define EM28XX_V4L2    0x40
 544
 545/* em28xx resource types (used for res_get/res_lock etc */
 546#define EM28XX_RESOURCE_VIDEO 0x01
 547#define EM28XX_RESOURCE_VBI   0x02
 548
 549struct em28xx_v4l2 {
 550        struct kref ref;
 551        struct em28xx *dev;
 552
 553        struct v4l2_device v4l2_dev;
 554        struct v4l2_ctrl_handler ctrl_handler;
 555
 556        struct video_device vdev;
 557        struct video_device vbi_dev;
 558        struct video_device radio_dev;
 559
 560        /* Videobuf2 */
 561        struct vb2_queue vb_vidq;
 562        struct vb2_queue vb_vbiq;
 563        struct mutex vb_queue_lock;     /* Protects vb_vidq */
 564        struct mutex vb_vbi_queue_lock; /* Protects vb_vbiq */
 565
 566        u8 vinmode;
 567        u8 vinctl;
 568
 569        /* Camera specific fields */
 570        int sensor_xres;
 571        int sensor_yres;
 572        int sensor_xtal;
 573
 574        int users;              /* user count for exclusive use */
 575        int streaming_users;    /* number of actively streaming users */
 576
 577        u32 frequency;          /* selected tuner frequency */
 578
 579        struct em28xx_fmt *format;
 580        v4l2_std_id norm;       /* selected tv norm */
 581
 582        /* Progressive/interlaced mode */
 583        bool progressive;
 584        int interlaced_fieldmode; /* 1=interlaced fields, 0=just top fields */
 585        /* FIXME: everything else than interlaced_fieldmode=1 doesn't work */
 586
 587        /* Frame properties */
 588        int width;              /* current frame width */
 589        int height;             /* current frame height */
 590        unsigned int hscale;    /* horizontal scale factor (see datasheet) */
 591        unsigned int vscale;    /* vertical scale factor (see datasheet) */
 592        unsigned int vbi_width;
 593        unsigned int vbi_height; /* lines per field */
 594
 595        /* Capture state tracking */
 596        int capture_type;
 597        bool top_field;
 598        int vbi_read;
 599        unsigned int field_count;
 600
 601#ifdef CONFIG_MEDIA_CONTROLLER
 602        struct media_pad video_pad, vbi_pad;
 603        struct media_entity *decoder;
 604#endif
 605};
 606
 607struct em28xx_audio {
 608        char name[50];
 609        unsigned int num_urb;
 610        char **transfer_buffer;
 611        struct urb **urb;
 612        struct usb_device *udev;
 613        unsigned int capture_transfer_done;
 614        struct snd_pcm_substream   *capture_pcm_substream;
 615
 616        unsigned int hwptr_done_capture;
 617        struct snd_card            *sndcard;
 618
 619        size_t period;
 620
 621        int users;
 622        spinlock_t slock;               /* Protects struct em28xx_audio */
 623
 624        /* Controls streaming */
 625        struct work_struct wq_trigger;  /* trigger to start/stop audio */
 626        atomic_t       stream_started;  /* stream should be running if true */
 627};
 628
 629struct em28xx;
 630
 631enum em28xx_i2c_algo_type {
 632        EM28XX_I2C_ALGO_EM28XX = 0,
 633        EM28XX_I2C_ALGO_EM2800,
 634        EM28XX_I2C_ALGO_EM25XX_BUS_B,
 635};
 636
 637struct em28xx_i2c_bus {
 638        struct em28xx *dev;
 639
 640        unsigned int bus;
 641        enum em28xx_i2c_algo_type algo_type;
 642};
 643
 644/* main device struct */
 645struct em28xx {
 646        struct kref ref;
 647
 648        // Sub-module data
 649        struct em28xx_v4l2 *v4l2;
 650        struct em28xx_dvb *dvb;
 651        struct em28xx_audio adev;
 652        struct em28xx_IR *ir;
 653
 654        // generic device properties
 655        int model;              // index in the device_data struct
 656        int devno;              // marks the number of this device
 657        enum em28xx_chip_id chip_id;
 658
 659        unsigned int is_em25xx:1;       // em25xx/em276x/7x/8x family bridge
 660        unsigned int disconnected:1;    // device has been diconnected
 661        unsigned int has_video:1;
 662        unsigned int is_audio_only:1;
 663        unsigned int is_webcam:1;
 664        unsigned int has_msp34xx:1;
 665        unsigned int i2c_speed:2;
 666        enum em28xx_int_audio_type int_audio_type;
 667        enum em28xx_usb_audio_type usb_audio_type;
 668        unsigned char name[32];
 669
 670        struct em28xx_board board;
 671
 672        enum em28xx_sensor em28xx_sensor;       // camera specific
 673
 674        // Some older em28xx chips needs a waiting time after writing
 675        unsigned int wait_after_write;
 676
 677        struct list_head        devlist;
 678
 679        u32 i2s_speed;          // I2S speed for audio digital stream
 680
 681        struct em28xx_audio_mode audio_mode;
 682
 683        int tuner_type;         // type of the tuner
 684
 685        // i2c i/o
 686        struct i2c_adapter i2c_adap[NUM_I2C_BUSES];
 687        struct i2c_client i2c_client[NUM_I2C_BUSES];
 688        struct em28xx_i2c_bus i2c_bus[NUM_I2C_BUSES];
 689
 690        unsigned char eeprom_addrwidth_16bit:1;
 691        unsigned int def_i2c_bus;       // Default I2C bus
 692        unsigned int cur_i2c_bus;       // Current I2C bus
 693        struct rt_mutex i2c_bus_lock;
 694
 695        // video for linux
 696        unsigned int ctl_input; // selected input
 697        unsigned int ctl_ainput;// selected audio input
 698        unsigned int ctl_aoutput;// selected audio output
 699        enum em28xx_amux amux_map[MAX_EM28XX_INPUT];
 700
 701        int mute;
 702        int volume;
 703
 704        unsigned long hash;     // eeprom hash - for boards with generic ID
 705        unsigned long i2c_hash; // i2c devicelist hash -
 706                                // for boards with generic ID
 707
 708        struct work_struct         request_module_wk;
 709
 710        // locks
 711        struct mutex lock;              /* protects em28xx struct */
 712        struct mutex ctrl_urb_lock;     /* protects urb_buf */
 713
 714        // resources in use
 715        unsigned int resources;
 716
 717        // eeprom content
 718        u8 *eedata;
 719        u16 eedata_len;
 720
 721        // Isoc control struct
 722        struct em28xx_dmaqueue vidq;
 723        struct em28xx_dmaqueue vbiq;
 724        struct em28xx_usb_ctl usb_ctl;
 725
 726        spinlock_t slock; /* Protects em28xx video/vbi/dvb IRQ stream data */
 727
 728        // usb transfer
 729        struct usb_interface *intf;     // the usb interface
 730        u8 ifnum;               // number of the assigned usb interface
 731        u8 analog_ep_isoc;      // address of isoc endpoint for analog
 732        u8 analog_ep_bulk;      // address of bulk endpoint for analog
 733        u8 dvb_ep_isoc_ts2;     // address of isoc endpoint for DVB TS2
 734        u8 dvb_ep_bulk_ts2;     // address of bulk endpoint for DVB TS2
 735        u8 dvb_ep_isoc;         // address of isoc endpoint for DVB
 736        u8 dvb_ep_bulk;         // address of bulk endpoint for DVB
 737        int alt;                // alternate setting
 738        int max_pkt_size;       // max packet size of the selected ep at alt
 739        int packet_multiplier;  // multiplier for wMaxPacketSize, used for
 740                                // URB buffer size definition
 741        int num_alt;            // number of alternative settings
 742        unsigned int *alt_max_pkt_size_isoc; // array of isoc wMaxPacketSize
 743        unsigned int analog_xfer_bulk:1;        // use bulk instead of isoc
 744                                                // transfers for analog
 745        int dvb_alt_isoc;       // alternate setting for DVB isoc transfers
 746        unsigned int dvb_max_pkt_size_isoc;     // isoc max packet size of the
 747                                                // selected DVB ep at dvb_alt
 748        unsigned int dvb_max_pkt_size_isoc_ts2; // isoc max packet size of the
 749                                                // selected DVB ep at dvb_alt
 750        unsigned int dvb_xfer_bulk:1;           // use bulk instead of isoc
 751                                                // transfers for DVB
 752        char urb_buf[URB_MAX_CTRL_SIZE];        // urb control msg buffer
 753
 754        // helper funcs that call usb_control_msg
 755        int (*em28xx_write_regs)(struct em28xx *dev, u16 reg,
 756                                 char *buf, int len);
 757        int (*em28xx_read_reg)(struct em28xx *dev, u16 reg);
 758        int (*em28xx_read_reg_req_len)(struct em28xx *dev, u8 req, u16 reg,
 759                                       char *buf, int len);
 760        int (*em28xx_write_regs_req)(struct em28xx *dev, u8 req, u16 reg,
 761                                     char *buf, int len);
 762        int (*em28xx_read_reg_req)(struct em28xx *dev, u8 req, u16 reg);
 763
 764        enum em28xx_mode mode;
 765
 766        // Button state polling
 767        struct delayed_work buttons_query_work;
 768        u8 button_polling_addresses[EM28XX_NUM_BUTTON_ADDRESSES_MAX];
 769        u8 button_polling_last_values[EM28XX_NUM_BUTTON_ADDRESSES_MAX];
 770        u8 num_button_polling_addresses;
 771        u16 button_polling_interval; // [ms]
 772        // Snapshot button input device
 773        char snapshot_button_path[30];  // path of the input dev
 774        struct input_dev *sbutton_input_dev;
 775
 776#ifdef CONFIG_MEDIA_CONTROLLER
 777        struct media_device *media_dev;
 778        struct media_entity input_ent[MAX_EM28XX_INPUT];
 779        struct media_pad input_pad[MAX_EM28XX_INPUT];
 780#endif
 781
 782        struct em28xx   *dev_next;
 783        int ts;
 784};
 785
 786#define kref_to_dev(d) container_of(d, struct em28xx, ref)
 787
 788struct em28xx_ops {
 789        struct list_head next;
 790        char *name;
 791        int id;
 792        int (*init)(struct em28xx *dev);
 793        int (*fini)(struct em28xx *dev);
 794        int (*suspend)(struct em28xx *dev);
 795        int (*resume)(struct em28xx *dev);
 796};
 797
 798/* Provided by em28xx-i2c.c */
 799void em28xx_do_i2c_scan(struct em28xx *dev, unsigned int bus);
 800int  em28xx_i2c_register(struct em28xx *dev, unsigned int bus,
 801                         enum em28xx_i2c_algo_type algo_type);
 802int  em28xx_i2c_unregister(struct em28xx *dev, unsigned int bus);
 803
 804/* Provided by em28xx-core.c */
 805int em28xx_read_reg_req_len(struct em28xx *dev, u8 req, u16 reg,
 806                            char *buf, int len);
 807int em28xx_read_reg_req(struct em28xx *dev, u8 req, u16 reg);
 808int em28xx_read_reg(struct em28xx *dev, u16 reg);
 809int em28xx_write_regs_req(struct em28xx *dev, u8 req, u16 reg, char *buf,
 810                          int len);
 811int em28xx_write_regs(struct em28xx *dev, u16 reg, char *buf, int len);
 812int em28xx_write_reg(struct em28xx *dev, u16 reg, u8 val);
 813int em28xx_write_reg_bits(struct em28xx *dev, u16 reg, u8 val,
 814                          u8 bitmask);
 815int em28xx_toggle_reg_bits(struct em28xx *dev, u16 reg, u8 bitmask);
 816
 817int em28xx_read_ac97(struct em28xx *dev, u8 reg);
 818int em28xx_write_ac97(struct em28xx *dev, u8 reg, u16 val);
 819
 820int em28xx_audio_analog_set(struct em28xx *dev);
 821int em28xx_audio_setup(struct em28xx *dev);
 822
 823const struct em28xx_led *em28xx_find_led(struct em28xx *dev,
 824                                         enum em28xx_led_role role);
 825int em28xx_capture_start(struct em28xx *dev, int start);
 826int em28xx_alloc_urbs(struct em28xx *dev, enum em28xx_mode mode, int xfer_bulk,
 827                      int num_bufs, int max_pkt_size, int packet_multiplier);
 828int em28xx_init_usb_xfer(struct em28xx *dev, enum em28xx_mode mode,
 829                         int xfer_bulk,
 830                         int num_bufs, int max_pkt_size, int packet_multiplier,
 831                         int (*urb_data_copy)
 832                                        (struct em28xx *dev, struct urb *urb));
 833void em28xx_uninit_usb_xfer(struct em28xx *dev, enum em28xx_mode mode);
 834void em28xx_stop_urbs(struct em28xx *dev);
 835int em28xx_set_mode(struct em28xx *dev, enum em28xx_mode set_mode);
 836int em28xx_gpio_set(struct em28xx *dev, const struct em28xx_reg_seq *gpio);
 837int em28xx_register_extension(struct em28xx_ops *dev);
 838void em28xx_unregister_extension(struct em28xx_ops *dev);
 839void em28xx_init_extension(struct em28xx *dev);
 840void em28xx_close_extension(struct em28xx *dev);
 841int em28xx_suspend_extension(struct em28xx *dev);
 842int em28xx_resume_extension(struct em28xx *dev);
 843
 844/* Provided by em28xx-cards.c */
 845extern const struct em28xx_board em28xx_boards[];
 846extern struct usb_device_id em28xx_id_table[];
 847int em28xx_tuner_callback(void *ptr, int component, int command, int arg);
 848void em28xx_setup_xc3028(struct em28xx *dev, struct xc2028_ctrl *ctl);
 849void em28xx_free_device(struct kref *ref);
 850
 851/* Provided by em28xx-camera.c */
 852int em28xx_detect_sensor(struct em28xx *dev);
 853int em28xx_init_camera(struct em28xx *dev);
 854
 855#endif
 856