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#define EM2861_BOARD_MAGIX_VIDEOWANDLER2          103
 153#define EM28178_BOARD_PCTV_461E_V2                104
 154#define EM2860_BOARD_MYGICA_IGRABBER              105
 155#define EM2874_BOARD_HAUPPAUGE_USB_QUADHD         106
 156
 157/* Limits minimum and default number of buffers */
 158#define EM28XX_MIN_BUF 4
 159#define EM28XX_DEF_BUF 8
 160
 161/*Limits the max URB message size */
 162#define URB_MAX_CTRL_SIZE 80
 163
 164/* Params for validated field */
 165#define EM28XX_BOARD_NOT_VALIDATED 1
 166#define EM28XX_BOARD_VALIDATED     0
 167
 168/* Params for em28xx_cmd() audio */
 169#define EM28XX_START_AUDIO      1
 170#define EM28XX_STOP_AUDIO       0
 171
 172/* maximum number of em28xx boards */
 173#define EM28XX_MAXBOARDS DVB_MAX_ADAPTERS /* All adapters could be em28xx */
 174
 175/* maximum number of frames that can be queued */
 176#define EM28XX_NUM_FRAMES 5
 177/* number of frames that get used for v4l2_read() */
 178#define EM28XX_NUM_READ_FRAMES 2
 179
 180/* number of buffers for isoc transfers */
 181#define EM28XX_NUM_BUFS 5
 182#define EM28XX_DVB_NUM_BUFS 5
 183
 184/* max number of I2C buses on em28xx devices */
 185#define NUM_I2C_BUSES   2
 186
 187/*
 188 * isoc transfers: number of packets for each buffer
 189 * windows requests only 64 packets .. so we better do the same
 190 * this is what I found out for all alternate numbers there!
 191 */
 192#define EM28XX_NUM_ISOC_PACKETS 64
 193#define EM28XX_DVB_NUM_ISOC_PACKETS 64
 194
 195/*
 196 * bulk transfers: transfer buffer size = packet size * packet multiplier
 197 * USB 2.0 spec says bulk packet size is always 512 bytes
 198 */
 199#define EM28XX_BULK_PACKET_MULTIPLIER 384
 200#define EM28XX_DVB_BULK_PACKET_MULTIPLIER 94
 201
 202#define EM28XX_INTERLACED_DEFAULT 1
 203
 204/* time in msecs to wait for AC97 xfers to finish */
 205#define EM28XX_AC97_XFER_TIMEOUT        100
 206
 207/* max. number of button state polling addresses */
 208#define EM28XX_NUM_BUTTON_ADDRESSES_MAX         5
 209
 210#define PRIMARY_TS      0
 211#define SECONDARY_TS    1
 212
 213enum em28xx_mode {
 214        EM28XX_SUSPEND,
 215        EM28XX_ANALOG_MODE,
 216        EM28XX_DIGITAL_MODE,
 217};
 218
 219struct em28xx;
 220
 221/**
 222 * struct em28xx_usb_bufs - Contains URB-related buffer data
 223 *
 224 * @max_pkt_size:       max packet size of isoc transaction
 225 * @num_packets:        number of packets in each buffer
 226 * @num_bufs:           number of allocated urb
 227 * @urb:                urb for isoc/bulk transfers
 228 * @buf:                transfer buffers for isoc/bulk transfer
 229 */
 230struct em28xx_usb_bufs {
 231        int                             max_pkt_size;
 232        int                             num_packets;
 233        int                             num_bufs;
 234        struct urb                      **urb;
 235        char                            **buf;
 236};
 237
 238/**
 239 * struct em28xx_usb_ctl - Contains URB-related buffer data
 240 *
 241 * @analog_bufs:        isoc/bulk transfer buffers for analog mode
 242 * @digital_bufs:       isoc/bulk transfer buffers for digital mode
 243 * @vid_buf:            Stores already requested video buffers
 244 * @vbi_buf:            Stores already requested VBI buffers
 245 * @urb_data_copy:      copy data from URB
 246 */
 247struct em28xx_usb_ctl {
 248        struct em28xx_usb_bufs          analog_bufs;
 249        struct em28xx_usb_bufs          digital_bufs;
 250        struct em28xx_buffer    *vid_buf;
 251        struct em28xx_buffer    *vbi_buf;
 252        int (*urb_data_copy)(struct em28xx *dev, struct urb *urb);
 253};
 254
 255/**
 256 * struct em28xx_fmt - Struct to enumberate video formats
 257 *
 258 * @fourcc:     v4l2 format id
 259 * @depth:      mean number of bits to represent a pixel
 260 * @reg:        em28xx register value to set it
 261 */
 262struct em28xx_fmt {
 263        u32     fourcc;
 264        int     depth;
 265        int     reg;
 266};
 267
 268/**
 269 * struct em28xx_buffer- buffer for storing one video frame
 270 *
 271 * @vb:         common v4l buffer stuff
 272 * @list:       List to associate it with the other buffers
 273 * @mem:        pointer to the buffer, as returned by vb2_plane_vaddr()
 274 * @length:     length of the buffer, as returned by vb2_plane_size()
 275 * @top_field:  If non-zero, indicate that the buffer is the top field
 276 * @pos:        Indicate the next position of the buffer to be filled.
 277 * @vb_buf:     pointer to vmalloc memory address in vb
 278 *
 279 * .. note::
 280 *
 281 *    in interlaced mode, @pos is reset to zero at the start of each new
 282 *    field (not frame !)
 283 */
 284struct em28xx_buffer {
 285        struct vb2_v4l2_buffer  vb;             /* must be first */
 286
 287        struct list_head        list;
 288
 289        void                    *mem;
 290        unsigned int            length;
 291        int                     top_field;
 292
 293        unsigned int            pos;
 294
 295        char                    *vb_buf;
 296};
 297
 298struct em28xx_dmaqueue {
 299        struct list_head       active;
 300
 301        wait_queue_head_t          wq;
 302};
 303
 304/* inputs */
 305
 306#define MAX_EM28XX_INPUT 4
 307enum enum28xx_itype {
 308        EM28XX_VMUX_COMPOSITE = 1,
 309        EM28XX_VMUX_SVIDEO,
 310        EM28XX_VMUX_TELEVISION,
 311        EM28XX_RADIO,
 312};
 313
 314enum em28xx_ac97_mode {
 315        EM28XX_NO_AC97 = 0,
 316        EM28XX_AC97_EM202,
 317        EM28XX_AC97_SIGMATEL,
 318        EM28XX_AC97_OTHER,
 319};
 320
 321struct em28xx_audio_mode {
 322        enum em28xx_ac97_mode ac97;
 323};
 324
 325enum em28xx_int_audio_type {
 326        EM28XX_INT_AUDIO_NONE = 0,
 327        EM28XX_INT_AUDIO_AC97,
 328        EM28XX_INT_AUDIO_I2S,
 329};
 330
 331enum em28xx_usb_audio_type {
 332        EM28XX_USB_AUDIO_NONE = 0,
 333        EM28XX_USB_AUDIO_CLASS,
 334        EM28XX_USB_AUDIO_VENDOR,
 335};
 336
 337/**
 338 * enum em28xx_amux - describes the type of audio input used by em28xx
 339 *
 340 * @EM28XX_AMUX_UNUSED:
 341 *      Used only on em28xx dev->map field, in order to mark an entry
 342 *      as unused.
 343 * @EM28XX_AMUX_VIDEO:
 344 *      On devices without AC97, this is the only value that it is currently
 345 *      allowed.
 346 *      On devices with AC97, it corresponds to the AC97 mixer "Video" control.
 347 * @EM28XX_AMUX_LINE_IN:
 348 *      Only for devices with AC97. Corresponds to AC97 mixer "Line In".
 349 * @EM28XX_AMUX_VIDEO2:
 350 *      Only for devices with AC97. It means that em28xx should use "Line In"
 351 *      And AC97 should use the "Video" mixer control.
 352 * @EM28XX_AMUX_PHONE:
 353 *      Only for devices with AC97. Corresponds to AC97 mixer "Phone".
 354 * @EM28XX_AMUX_MIC:
 355 *      Only for devices with AC97. Corresponds to AC97 mixer "Mic".
 356 * @EM28XX_AMUX_CD:
 357 *      Only for devices with AC97. Corresponds to AC97 mixer "CD".
 358 * @EM28XX_AMUX_AUX:
 359 *      Only for devices with AC97. Corresponds to AC97 mixer "Aux".
 360 * @EM28XX_AMUX_PCM_OUT:
 361 *      Only for devices with AC97. Corresponds to AC97 mixer "PCM out".
 362 *
 363 * The em28xx chip itself has only two audio inputs: tuner and line in.
 364 * On almost all devices, only the tuner input is used.
 365 *
 366 * However, on most devices, an auxiliary AC97 codec device is used,
 367 * usually connected to the em28xx tuner input (except for
 368 * @EM28XX_AMUX_LINE_IN).
 369 *
 370 * The AC97 device typically have several different inputs and outputs.
 371 * The exact number and description depends on their model.
 372 *
 373 * It is possible to AC97 to mixer more than one different entries at the
 374 * same time, via the alsa mux.
 375 */
 376enum em28xx_amux {
 377        EM28XX_AMUX_UNUSED = -1,
 378        EM28XX_AMUX_VIDEO = 0,
 379        EM28XX_AMUX_LINE_IN,
 380
 381        /* Some less-common mixer setups */
 382        EM28XX_AMUX_VIDEO2,
 383        EM28XX_AMUX_PHONE,
 384        EM28XX_AMUX_MIC,
 385        EM28XX_AMUX_CD,
 386        EM28XX_AMUX_AUX,
 387        EM28XX_AMUX_PCM_OUT,
 388};
 389
 390enum em28xx_aout {
 391        /* AC97 outputs */
 392        EM28XX_AOUT_MASTER = BIT(0),
 393        EM28XX_AOUT_LINE   = BIT(1),
 394        EM28XX_AOUT_MONO   = BIT(2),
 395        EM28XX_AOUT_LFE    = BIT(3),
 396        EM28XX_AOUT_SURR   = BIT(4),
 397
 398        /* PCM IN Mixer - used by AC97_RECORD_SELECT register */
 399        EM28XX_AOUT_PCM_IN = BIT(7),
 400
 401        /* Bits 10-8 are used to indicate the PCM IN record select */
 402        EM28XX_AOUT_PCM_MIC_PCM = 0 << 8,
 403        EM28XX_AOUT_PCM_CD      = 1 << 8,
 404        EM28XX_AOUT_PCM_VIDEO   = 2 << 8,
 405        EM28XX_AOUT_PCM_AUX     = 3 << 8,
 406        EM28XX_AOUT_PCM_LINE    = 4 << 8,
 407        EM28XX_AOUT_PCM_STEREO  = 5 << 8,
 408        EM28XX_AOUT_PCM_MONO    = 6 << 8,
 409        EM28XX_AOUT_PCM_PHONE   = 7 << 8,
 410};
 411
 412static inline int ac97_return_record_select(int a_out)
 413{
 414        return (a_out & 0x700) >> 8;
 415}
 416
 417struct em28xx_reg_seq {
 418        int reg;
 419        unsigned char val, mask;
 420        int sleep;
 421};
 422
 423struct em28xx_input {
 424        enum enum28xx_itype type;
 425        unsigned int vmux;
 426        enum em28xx_amux amux;
 427        enum em28xx_aout aout;
 428        const struct em28xx_reg_seq *gpio;
 429};
 430
 431#define INPUT(nr) (&em28xx_boards[dev->model].input[nr])
 432
 433enum em28xx_decoder {
 434        EM28XX_NODECODER = 0,
 435        EM28XX_TVP5150,
 436        EM28XX_SAA711X,
 437};
 438
 439enum em28xx_sensor {
 440        EM28XX_NOSENSOR = 0,
 441        EM28XX_MT9V011,
 442        EM28XX_MT9M001,
 443        EM28XX_MT9M111,
 444        EM28XX_OV2640,
 445};
 446
 447enum em28xx_adecoder {
 448        EM28XX_NOADECODER = 0,
 449        EM28XX_TVAUDIO,
 450};
 451
 452enum em28xx_led_role {
 453        EM28XX_LED_ANALOG_CAPTURING = 0,
 454        EM28XX_LED_DIGITAL_CAPTURING,
 455        EM28XX_LED_DIGITAL_CAPTURING_TS2,
 456        EM28XX_LED_ILLUMINATION,
 457        EM28XX_NUM_LED_ROLES, /* must be the last */
 458};
 459
 460struct em28xx_led {
 461        enum em28xx_led_role role;
 462        u8 gpio_reg;
 463        u8 gpio_mask;
 464        bool inverted;
 465};
 466
 467enum em28xx_button_role {
 468        EM28XX_BUTTON_SNAPSHOT = 0,
 469        EM28XX_BUTTON_ILLUMINATION,
 470        EM28XX_NUM_BUTTON_ROLES, /* must be the last */
 471};
 472
 473struct em28xx_button {
 474        enum em28xx_button_role role;
 475        u8 reg_r;
 476        u8 reg_clearing;
 477        u8 mask;
 478        bool inverted;
 479};
 480
 481struct em28xx_board {
 482        char *name;
 483        int vchannels;
 484        int tuner_type;
 485        int tuner_addr;
 486        unsigned int def_i2c_bus;       /* Default I2C bus */
 487
 488        /* i2c flags */
 489        unsigned int tda9887_conf;
 490
 491        /* GPIO sequences */
 492        const struct em28xx_reg_seq *dvb_gpio;
 493        const struct em28xx_reg_seq *suspend_gpio;
 494        const struct em28xx_reg_seq *tuner_gpio;
 495        const struct em28xx_reg_seq *mute_gpio;
 496
 497        unsigned int is_em2800:1;
 498        unsigned int has_msp34xx:1;
 499        unsigned int mts_firmware:1;
 500        unsigned int max_range_640_480:1;
 501        unsigned int has_dvb:1;
 502        unsigned int has_dual_ts:1;
 503        unsigned int is_webcam:1;
 504        unsigned int valid:1;
 505        unsigned int has_ir_i2c:1;
 506
 507        unsigned char xclk, i2c_speed;
 508        unsigned char radio_addr;
 509        unsigned short tvaudio_addr;
 510
 511        enum em28xx_decoder decoder;
 512        enum em28xx_adecoder adecoder;
 513
 514        struct em28xx_input       input[MAX_EM28XX_INPUT];
 515        struct em28xx_input       radio;
 516        char                      *ir_codes;
 517
 518        /* LEDs that need to be controlled explicitly */
 519        struct em28xx_led         *leds;
 520
 521        /* Buttons */
 522        const struct em28xx_button *buttons;
 523};
 524
 525struct em28xx_eeprom {
 526        u8 id[4];                       /* 1a eb 67 95 */
 527        __le16 vendor_ID;
 528        __le16 product_ID;
 529
 530        __le16 chip_conf;
 531
 532        __le16 board_conf;
 533
 534        __le16 string1, string2, string3;
 535
 536        u8 string_idx_table;
 537};
 538
 539#define EM28XX_CAPTURE_STREAM_EN 1
 540
 541/* em28xx extensions */
 542#define EM28XX_AUDIO   0x10
 543#define EM28XX_DVB     0x20
 544#define EM28XX_RC      0x30
 545#define EM28XX_V4L2    0x40
 546
 547/* em28xx resource types (used for res_get/res_lock etc */
 548#define EM28XX_RESOURCE_VIDEO 0x01
 549#define EM28XX_RESOURCE_VBI   0x02
 550
 551struct em28xx_v4l2 {
 552        struct kref ref;
 553        struct em28xx *dev;
 554
 555        struct v4l2_device v4l2_dev;
 556        struct v4l2_ctrl_handler ctrl_handler;
 557
 558        struct video_device vdev;
 559        struct video_device vbi_dev;
 560        struct video_device radio_dev;
 561
 562        /* Videobuf2 */
 563        struct vb2_queue vb_vidq;
 564        struct vb2_queue vb_vbiq;
 565        struct mutex vb_queue_lock;     /* Protects vb_vidq */
 566        struct mutex vb_vbi_queue_lock; /* Protects vb_vbiq */
 567
 568        u8 vinmode;
 569        u8 vinctl;
 570
 571        /* Camera specific fields */
 572        int sensor_xres;
 573        int sensor_yres;
 574        int sensor_xtal;
 575
 576        int users;              /* user count for exclusive use */
 577        int streaming_users;    /* number of actively streaming users */
 578
 579        u32 frequency;          /* selected tuner frequency */
 580
 581        struct em28xx_fmt *format;
 582        v4l2_std_id norm;       /* selected tv norm */
 583
 584        /* Progressive/interlaced mode */
 585        bool progressive;
 586        int interlaced_fieldmode; /* 1=interlaced fields, 0=just top fields */
 587        /* FIXME: everything else than interlaced_fieldmode=1 doesn't work */
 588
 589        /* Frame properties */
 590        int width;              /* current frame width */
 591        int height;             /* current frame height */
 592        unsigned int hscale;    /* horizontal scale factor (see datasheet) */
 593        unsigned int vscale;    /* vertical scale factor (see datasheet) */
 594        unsigned int vbi_width;
 595        unsigned int vbi_height; /* lines per field */
 596
 597        /* Capture state tracking */
 598        int capture_type;
 599        bool top_field;
 600        int vbi_read;
 601        unsigned int field_count;
 602
 603#ifdef CONFIG_MEDIA_CONTROLLER
 604        struct media_pad video_pad, vbi_pad;
 605        struct media_entity *decoder;
 606#endif
 607};
 608
 609struct em28xx_audio {
 610        char name[50];
 611        unsigned int num_urb;
 612        char **transfer_buffer;
 613        struct urb **urb;
 614        struct usb_device *udev;
 615        unsigned int capture_transfer_done;
 616        struct snd_pcm_substream   *capture_pcm_substream;
 617
 618        unsigned int hwptr_done_capture;
 619        struct snd_card            *sndcard;
 620
 621        size_t period;
 622
 623        int users;
 624        spinlock_t slock;               /* Protects struct em28xx_audio */
 625
 626        /* Controls streaming */
 627        struct work_struct wq_trigger;  /* trigger to start/stop audio */
 628        atomic_t       stream_started;  /* stream should be running if true */
 629};
 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 disconnected
 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