root/drivers/media/usb/em28xx/em28xx.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. ac97_return_record_select

   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 
 209 enum em28xx_mode {
 210         EM28XX_SUSPEND,
 211         EM28XX_ANALOG_MODE,
 212         EM28XX_DIGITAL_MODE,
 213 };
 214 
 215 struct 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  */
 226 struct 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  */
 243 struct 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  * @fourcc:     v4l2 format id
 255  * @depth:      mean number of bits to represent a pixel
 256  * @reg:        em28xx register value to set it
 257  */
 258 struct em28xx_fmt {
 259         u32     fourcc;
 260         int     depth;
 261         int     reg;
 262 };
 263 
 264 /**
 265  * struct em28xx_buffer- buffer for storing one video frame
 266  *
 267  * @vb:         common v4l buffer stuff
 268  * @list:       List to associate it with the other buffers
 269  * @mem:        pointer to the buffer, as returned by vb2_plane_vaddr()
 270  * @length:     length of the buffer, as returned by vb2_plane_size()
 271  * @top_field:  If non-zero, indicate that the buffer is the top field
 272  * @pos:        Indicate the next position of the buffer to be filled.
 273  * @vb_buf:     pointer to vmalloc memory address in vb
 274  *
 275  * .. note::
 276  *
 277  *    in interlaced mode, @pos is reset to zero at the start of each new
 278  *    field (not frame !)
 279  */
 280 struct em28xx_buffer {
 281         struct vb2_v4l2_buffer  vb;             /* must be first */
 282 
 283         struct list_head        list;
 284 
 285         void                    *mem;
 286         unsigned int            length;
 287         int                     top_field;
 288 
 289         unsigned int            pos;
 290 
 291         char                    *vb_buf;
 292 };
 293 
 294 struct em28xx_dmaqueue {
 295         struct list_head       active;
 296 
 297         wait_queue_head_t          wq;
 298 };
 299 
 300 /* inputs */
 301 
 302 #define MAX_EM28XX_INPUT 4
 303 enum enum28xx_itype {
 304         EM28XX_VMUX_COMPOSITE = 1,
 305         EM28XX_VMUX_SVIDEO,
 306         EM28XX_VMUX_TELEVISION,
 307         EM28XX_RADIO,
 308 };
 309 
 310 enum em28xx_ac97_mode {
 311         EM28XX_NO_AC97 = 0,
 312         EM28XX_AC97_EM202,
 313         EM28XX_AC97_SIGMATEL,
 314         EM28XX_AC97_OTHER,
 315 };
 316 
 317 struct em28xx_audio_mode {
 318         enum em28xx_ac97_mode ac97;
 319 };
 320 
 321 enum em28xx_int_audio_type {
 322         EM28XX_INT_AUDIO_NONE = 0,
 323         EM28XX_INT_AUDIO_AC97,
 324         EM28XX_INT_AUDIO_I2S,
 325 };
 326 
 327 enum em28xx_usb_audio_type {
 328         EM28XX_USB_AUDIO_NONE = 0,
 329         EM28XX_USB_AUDIO_CLASS,
 330         EM28XX_USB_AUDIO_VENDOR,
 331 };
 332 
 333 /**
 334  * em28xx_amux - describes the type of audio input used by em28xx
 335  *
 336  * @EM28XX_AMUX_UNUSED:
 337  *      Used only on em28xx dev->map field, in order to mark an entry
 338  *      as unused.
 339  * @EM28XX_AMUX_VIDEO:
 340  *      On devices without AC97, this is the only value that it is currently
 341  *      allowed.
 342  *      On devices with AC97, it corresponds to the AC97 mixer "Video" control.
 343  * @EM28XX_AMUX_LINE_IN:
 344  *      Only for devices with AC97. Corresponds to AC97 mixer "Line In".
 345  * @EM28XX_AMUX_VIDEO2:
 346  *      Only for devices with AC97. It means that em28xx should use "Line In"
 347  *      And AC97 should use the "Video" mixer control.
 348  * @EM28XX_AMUX_PHONE:
 349  *      Only for devices with AC97. Corresponds to AC97 mixer "Phone".
 350  * @EM28XX_AMUX_MIC:
 351  *      Only for devices with AC97. Corresponds to AC97 mixer "Mic".
 352  * @EM28XX_AMUX_CD:
 353  *      Only for devices with AC97. Corresponds to AC97 mixer "CD".
 354  * @EM28XX_AMUX_AUX:
 355  *      Only for devices with AC97. Corresponds to AC97 mixer "Aux".
 356  * @EM28XX_AMUX_PCM_OUT:
 357  *      Only for devices with AC97. Corresponds to AC97 mixer "PCM out".
 358  *
 359  * The em28xx chip itself has only two audio inputs: tuner and line in.
 360  * On almost all devices, only the tuner input is used.
 361  *
 362  * However, on most devices, an auxiliary AC97 codec device is used,
 363  * usually connected to the em28xx tuner input (except for
 364  * @EM28XX_AMUX_LINE_IN).
 365  *
 366  * The AC97 device typically have several different inputs and outputs.
 367  * The exact number and description depends on their model.
 368  *
 369  * It is possible to AC97 to mixer more than one different entries at the
 370  * same time, via the alsa mux.
 371  */
 372 enum em28xx_amux {
 373         EM28XX_AMUX_UNUSED = -1,
 374         EM28XX_AMUX_VIDEO = 0,
 375         EM28XX_AMUX_LINE_IN,
 376 
 377         /* Some less-common mixer setups */
 378         EM28XX_AMUX_VIDEO2,
 379         EM28XX_AMUX_PHONE,
 380         EM28XX_AMUX_MIC,
 381         EM28XX_AMUX_CD,
 382         EM28XX_AMUX_AUX,
 383         EM28XX_AMUX_PCM_OUT,
 384 };
 385 
 386 enum em28xx_aout {
 387         /* AC97 outputs */
 388         EM28XX_AOUT_MASTER = BIT(0),
 389         EM28XX_AOUT_LINE   = BIT(1),
 390         EM28XX_AOUT_MONO   = BIT(2),
 391         EM28XX_AOUT_LFE    = BIT(3),
 392         EM28XX_AOUT_SURR   = BIT(4),
 393 
 394         /* PCM IN Mixer - used by AC97_RECORD_SELECT register */
 395         EM28XX_AOUT_PCM_IN = BIT(7),
 396 
 397         /* Bits 10-8 are used to indicate the PCM IN record select */
 398         EM28XX_AOUT_PCM_MIC_PCM = 0 << 8,
 399         EM28XX_AOUT_PCM_CD      = 1 << 8,
 400         EM28XX_AOUT_PCM_VIDEO   = 2 << 8,
 401         EM28XX_AOUT_PCM_AUX     = 3 << 8,
 402         EM28XX_AOUT_PCM_LINE    = 4 << 8,
 403         EM28XX_AOUT_PCM_STEREO  = 5 << 8,
 404         EM28XX_AOUT_PCM_MONO    = 6 << 8,
 405         EM28XX_AOUT_PCM_PHONE   = 7 << 8,
 406 };
 407 
 408 static inline int ac97_return_record_select(int a_out)
 409 {
 410         return (a_out & 0x700) >> 8;
 411 }
 412 
 413 struct em28xx_reg_seq {
 414         int reg;
 415         unsigned char val, mask;
 416         int sleep;
 417 };
 418 
 419 struct em28xx_input {
 420         enum enum28xx_itype type;
 421         unsigned int vmux;
 422         enum em28xx_amux amux;
 423         enum em28xx_aout aout;
 424         const struct em28xx_reg_seq *gpio;
 425 };
 426 
 427 #define INPUT(nr) (&em28xx_boards[dev->model].input[nr])
 428 
 429 enum em28xx_decoder {
 430         EM28XX_NODECODER = 0,
 431         EM28XX_TVP5150,
 432         EM28XX_SAA711X,
 433 };
 434 
 435 enum em28xx_sensor {
 436         EM28XX_NOSENSOR = 0,
 437         EM28XX_MT9V011,
 438         EM28XX_MT9M001,
 439         EM28XX_MT9M111,
 440         EM28XX_OV2640,
 441 };
 442 
 443 enum em28xx_adecoder {
 444         EM28XX_NOADECODER = 0,
 445         EM28XX_TVAUDIO,
 446 };
 447 
 448 enum em28xx_led_role {
 449         EM28XX_LED_ANALOG_CAPTURING = 0,
 450         EM28XX_LED_DIGITAL_CAPTURING,
 451         EM28XX_LED_DIGITAL_CAPTURING_TS2,
 452         EM28XX_LED_ILLUMINATION,
 453         EM28XX_NUM_LED_ROLES, /* must be the last */
 454 };
 455 
 456 struct em28xx_led {
 457         enum em28xx_led_role role;
 458         u8 gpio_reg;
 459         u8 gpio_mask;
 460         bool inverted;
 461 };
 462 
 463 enum em28xx_button_role {
 464         EM28XX_BUTTON_SNAPSHOT = 0,
 465         EM28XX_BUTTON_ILLUMINATION,
 466         EM28XX_NUM_BUTTON_ROLES, /* must be the last */
 467 };
 468 
 469 struct em28xx_button {
 470         enum em28xx_button_role role;
 471         u8 reg_r;
 472         u8 reg_clearing;
 473         u8 mask;
 474         bool inverted;
 475 };
 476 
 477 struct em28xx_board {
 478         char *name;
 479         int vchannels;
 480         int tuner_type;
 481         int tuner_addr;
 482         unsigned int def_i2c_bus;       /* Default I2C bus */
 483 
 484         /* i2c flags */
 485         unsigned int tda9887_conf;
 486 
 487         /* GPIO sequences */
 488         const struct em28xx_reg_seq *dvb_gpio;
 489         const struct em28xx_reg_seq *suspend_gpio;
 490         const struct em28xx_reg_seq *tuner_gpio;
 491         const struct em28xx_reg_seq *mute_gpio;
 492 
 493         unsigned int is_em2800:1;
 494         unsigned int has_msp34xx:1;
 495         unsigned int mts_firmware:1;
 496         unsigned int max_range_640_480:1;
 497         unsigned int has_dvb:1;
 498         unsigned int has_dual_ts:1;
 499         unsigned int is_webcam:1;
 500         unsigned int valid:1;
 501         unsigned int has_ir_i2c:1;
 502 
 503         unsigned char xclk, i2c_speed;
 504         unsigned char radio_addr;
 505         unsigned short tvaudio_addr;
 506 
 507         enum em28xx_decoder decoder;
 508         enum em28xx_adecoder adecoder;
 509 
 510         struct em28xx_input       input[MAX_EM28XX_INPUT];
 511         struct em28xx_input       radio;
 512         char                      *ir_codes;
 513 
 514         /* LEDs that need to be controlled explicitly */
 515         struct em28xx_led         *leds;
 516 
 517         /* Buttons */
 518         const struct em28xx_button *buttons;
 519 };
 520 
 521 struct em28xx_eeprom {
 522         u8 id[4];                       /* 1a eb 67 95 */
 523         __le16 vendor_ID;
 524         __le16 product_ID;
 525 
 526         __le16 chip_conf;
 527 
 528         __le16 board_conf;
 529 
 530         __le16 string1, string2, string3;
 531 
 532         u8 string_idx_table;
 533 };
 534 
 535 #define EM28XX_CAPTURE_STREAM_EN 1
 536 
 537 /* em28xx extensions */
 538 #define EM28XX_AUDIO   0x10
 539 #define EM28XX_DVB     0x20
 540 #define EM28XX_RC      0x30
 541 #define EM28XX_V4L2    0x40
 542 
 543 /* em28xx resource types (used for res_get/res_lock etc */
 544 #define EM28XX_RESOURCE_VIDEO 0x01
 545 #define EM28XX_RESOURCE_VBI   0x02
 546 
 547 struct em28xx_v4l2 {
 548         struct kref ref;
 549         struct em28xx *dev;
 550 
 551         struct v4l2_device v4l2_dev;
 552         struct v4l2_ctrl_handler ctrl_handler;
 553 
 554         struct video_device vdev;
 555         struct video_device vbi_dev;
 556         struct video_device radio_dev;
 557 
 558         /* Videobuf2 */
 559         struct vb2_queue vb_vidq;
 560         struct vb2_queue vb_vbiq;
 561         struct mutex vb_queue_lock;     /* Protects vb_vidq */
 562         struct mutex vb_vbi_queue_lock; /* Protects vb_vbiq */
 563 
 564         u8 vinmode;
 565         u8 vinctl;
 566 
 567         /* Camera specific fields */
 568         int sensor_xres;
 569         int sensor_yres;
 570         int sensor_xtal;
 571 
 572         int users;              /* user count for exclusive use */
 573         int streaming_users;    /* number of actively streaming users */
 574 
 575         u32 frequency;          /* selected tuner frequency */
 576 
 577         struct em28xx_fmt *format;
 578         v4l2_std_id norm;       /* selected tv norm */
 579 
 580         /* Progressive/interlaced mode */
 581         bool progressive;
 582         int interlaced_fieldmode; /* 1=interlaced fields, 0=just top fields */
 583         /* FIXME: everything else than interlaced_fieldmode=1 doesn't work */
 584 
 585         /* Frame properties */
 586         int width;              /* current frame width */
 587         int height;             /* current frame height */
 588         unsigned int hscale;    /* horizontal scale factor (see datasheet) */
 589         unsigned int vscale;    /* vertical scale factor (see datasheet) */
 590         unsigned int vbi_width;
 591         unsigned int vbi_height; /* lines per field */
 592 
 593         /* Capture state tracking */
 594         int capture_type;
 595         bool top_field;
 596         int vbi_read;
 597         unsigned int field_count;
 598 
 599 #ifdef CONFIG_MEDIA_CONTROLLER
 600         struct media_pad video_pad, vbi_pad;
 601         struct media_entity *decoder;
 602 #endif
 603 };
 604 
 605 struct em28xx_audio {
 606         char name[50];
 607         unsigned int num_urb;
 608         char **transfer_buffer;
 609         struct urb **urb;
 610         struct usb_device *udev;
 611         unsigned int capture_transfer_done;
 612         struct snd_pcm_substream   *capture_pcm_substream;
 613 
 614         unsigned int hwptr_done_capture;
 615         struct snd_card            *sndcard;
 616 
 617         size_t period;
 618 
 619         int users;
 620         spinlock_t slock;               /* Protects struct em28xx_audio */
 621 
 622         /* Controls streaming */
 623         struct work_struct wq_trigger;  /* trigger to start/stop audio */
 624         atomic_t       stream_started;  /* stream should be running if true */
 625 };
 626 
 627 struct em28xx;
 628 
 629 enum em28xx_i2c_algo_type {
 630         EM28XX_I2C_ALGO_EM28XX = 0,
 631         EM28XX_I2C_ALGO_EM2800,
 632         EM28XX_I2C_ALGO_EM25XX_BUS_B,
 633 };
 634 
 635 struct em28xx_i2c_bus {
 636         struct em28xx *dev;
 637 
 638         unsigned int bus;
 639         enum em28xx_i2c_algo_type algo_type;
 640 };
 641 
 642 /* main device struct */
 643 struct em28xx {
 644         struct kref ref;
 645 
 646         // Sub-module data
 647         struct em28xx_v4l2 *v4l2;
 648         struct em28xx_dvb *dvb;
 649         struct em28xx_audio adev;
 650         struct em28xx_IR *ir;
 651 
 652         // generic device properties
 653         int model;              // index in the device_data struct
 654         int devno;              // marks the number of this device
 655         enum em28xx_chip_id chip_id;
 656 
 657         unsigned int is_em25xx:1;       // em25xx/em276x/7x/8x family bridge
 658         unsigned int disconnected:1;    // device has been disconnected
 659         unsigned int has_video:1;
 660         unsigned int is_audio_only:1;
 661         unsigned int is_webcam:1;
 662         unsigned int has_msp34xx:1;
 663         unsigned int i2c_speed:2;
 664         enum em28xx_int_audio_type int_audio_type;
 665         enum em28xx_usb_audio_type usb_audio_type;
 666         unsigned char name[32];
 667 
 668         struct em28xx_board board;
 669 
 670         enum em28xx_sensor em28xx_sensor;       // camera specific
 671 
 672         // Some older em28xx chips needs a waiting time after writing
 673         unsigned int wait_after_write;
 674 
 675         struct list_head        devlist;
 676 
 677         u32 i2s_speed;          // I2S speed for audio digital stream
 678 
 679         struct em28xx_audio_mode audio_mode;
 680 
 681         int tuner_type;         // type of the tuner
 682 
 683         // i2c i/o
 684         struct i2c_adapter i2c_adap[NUM_I2C_BUSES];
 685         struct i2c_client i2c_client[NUM_I2C_BUSES];
 686         struct em28xx_i2c_bus i2c_bus[NUM_I2C_BUSES];
 687 
 688         unsigned char eeprom_addrwidth_16bit:1;
 689         unsigned int def_i2c_bus;       // Default I2C bus
 690         unsigned int cur_i2c_bus;       // Current I2C bus
 691         struct rt_mutex i2c_bus_lock;
 692 
 693         // video for linux
 694         unsigned int ctl_input; // selected input
 695         unsigned int ctl_ainput;// selected audio input
 696         unsigned int ctl_aoutput;// selected audio output
 697         enum em28xx_amux amux_map[MAX_EM28XX_INPUT];
 698 
 699         int mute;
 700         int volume;
 701 
 702         unsigned long hash;     // eeprom hash - for boards with generic ID
 703         unsigned long i2c_hash; // i2c devicelist hash -
 704                                 // for boards with generic ID
 705 
 706         struct work_struct         request_module_wk;
 707 
 708         // locks
 709         struct mutex lock;              /* protects em28xx struct */
 710         struct mutex ctrl_urb_lock;     /* protects urb_buf */
 711 
 712         // resources in use
 713         unsigned int resources;
 714 
 715         // eeprom content
 716         u8 *eedata;
 717         u16 eedata_len;
 718 
 719         // Isoc control struct
 720         struct em28xx_dmaqueue vidq;
 721         struct em28xx_dmaqueue vbiq;
 722         struct em28xx_usb_ctl usb_ctl;
 723 
 724         spinlock_t slock; /* Protects em28xx video/vbi/dvb IRQ stream data */
 725 
 726         // usb transfer
 727         struct usb_interface *intf;     // the usb interface
 728         u8 ifnum;               // number of the assigned usb interface
 729         u8 analog_ep_isoc;      // address of isoc endpoint for analog
 730         u8 analog_ep_bulk;      // address of bulk endpoint for analog
 731         u8 dvb_ep_isoc_ts2;     // address of isoc endpoint for DVB TS2
 732         u8 dvb_ep_bulk_ts2;     // address of bulk endpoint for DVB TS2
 733         u8 dvb_ep_isoc;         // address of isoc endpoint for DVB
 734         u8 dvb_ep_bulk;         // address of bulk endpoint for DVB
 735         int alt;                // alternate setting
 736         int max_pkt_size;       // max packet size of the selected ep at alt
 737         int packet_multiplier;  // multiplier for wMaxPacketSize, used for
 738                                 // URB buffer size definition
 739         int num_alt;            // number of alternative settings
 740         unsigned int *alt_max_pkt_size_isoc; // array of isoc wMaxPacketSize
 741         unsigned int analog_xfer_bulk:1;        // use bulk instead of isoc
 742                                                 // transfers for analog
 743         int dvb_alt_isoc;       // alternate setting for DVB isoc transfers
 744         unsigned int dvb_max_pkt_size_isoc;     // isoc max packet size of the
 745                                                 // selected DVB ep at dvb_alt
 746         unsigned int dvb_max_pkt_size_isoc_ts2; // isoc max packet size of the
 747                                                 // selected DVB ep at dvb_alt
 748         unsigned int dvb_xfer_bulk:1;           // use bulk instead of isoc
 749                                                 // transfers for DVB
 750         char urb_buf[URB_MAX_CTRL_SIZE];        // urb control msg buffer
 751 
 752         // helper funcs that call usb_control_msg
 753         int (*em28xx_write_regs)(struct em28xx *dev, u16 reg,
 754                                  char *buf, int len);
 755         int (*em28xx_read_reg)(struct em28xx *dev, u16 reg);
 756         int (*em28xx_read_reg_req_len)(struct em28xx *dev, u8 req, u16 reg,
 757                                        char *buf, int len);
 758         int (*em28xx_write_regs_req)(struct em28xx *dev, u8 req, u16 reg,
 759                                      char *buf, int len);
 760         int (*em28xx_read_reg_req)(struct em28xx *dev, u8 req, u16 reg);
 761 
 762         enum em28xx_mode mode;
 763 
 764         // Button state polling
 765         struct delayed_work buttons_query_work;
 766         u8 button_polling_addresses[EM28XX_NUM_BUTTON_ADDRESSES_MAX];
 767         u8 button_polling_last_values[EM28XX_NUM_BUTTON_ADDRESSES_MAX];
 768         u8 num_button_polling_addresses;
 769         u16 button_polling_interval; // [ms]
 770         // Snapshot button input device
 771         char snapshot_button_path[30];  // path of the input dev
 772         struct input_dev *sbutton_input_dev;
 773 
 774 #ifdef CONFIG_MEDIA_CONTROLLER
 775         struct media_device *media_dev;
 776         struct media_entity input_ent[MAX_EM28XX_INPUT];
 777         struct media_pad input_pad[MAX_EM28XX_INPUT];
 778 #endif
 779 
 780         struct em28xx   *dev_next;
 781         int ts;
 782 };
 783 
 784 #define kref_to_dev(d) container_of(d, struct em28xx, ref)
 785 
 786 struct em28xx_ops {
 787         struct list_head next;
 788         char *name;
 789         int id;
 790         int (*init)(struct em28xx *dev);
 791         int (*fini)(struct em28xx *dev);
 792         int (*suspend)(struct em28xx *dev);
 793         int (*resume)(struct em28xx *dev);
 794 };
 795 
 796 /* Provided by em28xx-i2c.c */
 797 void em28xx_do_i2c_scan(struct em28xx *dev, unsigned int bus);
 798 int  em28xx_i2c_register(struct em28xx *dev, unsigned int bus,
 799                          enum em28xx_i2c_algo_type algo_type);
 800 int  em28xx_i2c_unregister(struct em28xx *dev, unsigned int bus);
 801 
 802 /* Provided by em28xx-core.c */
 803 int em28xx_read_reg_req_len(struct em28xx *dev, u8 req, u16 reg,
 804                             char *buf, int len);
 805 int em28xx_read_reg_req(struct em28xx *dev, u8 req, u16 reg);
 806 int em28xx_read_reg(struct em28xx *dev, u16 reg);
 807 int em28xx_write_regs_req(struct em28xx *dev, u8 req, u16 reg, char *buf,
 808                           int len);
 809 int em28xx_write_regs(struct em28xx *dev, u16 reg, char *buf, int len);
 810 int em28xx_write_reg(struct em28xx *dev, u16 reg, u8 val);
 811 int em28xx_write_reg_bits(struct em28xx *dev, u16 reg, u8 val,
 812                           u8 bitmask);
 813 int em28xx_toggle_reg_bits(struct em28xx *dev, u16 reg, u8 bitmask);
 814 
 815 int em28xx_read_ac97(struct em28xx *dev, u8 reg);
 816 int em28xx_write_ac97(struct em28xx *dev, u8 reg, u16 val);
 817 
 818 int em28xx_audio_analog_set(struct em28xx *dev);
 819 int em28xx_audio_setup(struct em28xx *dev);
 820 
 821 const struct em28xx_led *em28xx_find_led(struct em28xx *dev,
 822                                          enum em28xx_led_role role);
 823 int em28xx_capture_start(struct em28xx *dev, int start);
 824 int em28xx_alloc_urbs(struct em28xx *dev, enum em28xx_mode mode, int xfer_bulk,
 825                       int num_bufs, int max_pkt_size, int packet_multiplier);
 826 int em28xx_init_usb_xfer(struct em28xx *dev, enum em28xx_mode mode,
 827                          int xfer_bulk,
 828                          int num_bufs, int max_pkt_size, int packet_multiplier,
 829                          int (*urb_data_copy)
 830                                         (struct em28xx *dev, struct urb *urb));
 831 void em28xx_uninit_usb_xfer(struct em28xx *dev, enum em28xx_mode mode);
 832 void em28xx_stop_urbs(struct em28xx *dev);
 833 int em28xx_set_mode(struct em28xx *dev, enum em28xx_mode set_mode);
 834 int em28xx_gpio_set(struct em28xx *dev, const struct em28xx_reg_seq *gpio);
 835 int em28xx_register_extension(struct em28xx_ops *dev);
 836 void em28xx_unregister_extension(struct em28xx_ops *dev);
 837 void em28xx_init_extension(struct em28xx *dev);
 838 void em28xx_close_extension(struct em28xx *dev);
 839 int em28xx_suspend_extension(struct em28xx *dev);
 840 int em28xx_resume_extension(struct em28xx *dev);
 841 
 842 /* Provided by em28xx-cards.c */
 843 extern const struct em28xx_board em28xx_boards[];
 844 extern struct usb_device_id em28xx_id_table[];
 845 int em28xx_tuner_callback(void *ptr, int component, int command, int arg);
 846 void em28xx_setup_xc3028(struct em28xx *dev, struct xc2028_ctrl *ctl);
 847 void em28xx_free_device(struct kref *ref);
 848 
 849 /* Provided by em28xx-camera.c */
 850 int em28xx_detect_sensor(struct em28xx *dev);
 851 int em28xx_init_camera(struct em28xx *dev);
 852 
 853 #endif

/* [<][>][^][v][top][bottom][index][help] */