linux/drivers/media/pci/saa7134/saa7134.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-or-later */
   2/*
   3 *
   4 * v4l2 device driver for philips saa7134 based TV cards
   5 *
   6 * (c) 2001,02 Gerd Knorr <kraxel@bytesex.org>
   7 */
   8
   9#define SAA7134_VERSION "0, 2, 17"
  10
  11#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  12
  13#include <linux/pci.h>
  14#include <linux/i2c.h>
  15#include <linux/videodev2.h>
  16#include <linux/kdev_t.h>
  17#include <linux/input.h>
  18#include <linux/notifier.h>
  19#include <linux/delay.h>
  20#include <linux/mutex.h>
  21#include <linux/pm_qos.h>
  22
  23#include <asm/io.h>
  24
  25#include <media/v4l2-common.h>
  26#include <media/v4l2-ioctl.h>
  27#include <media/v4l2-device.h>
  28#include <media/v4l2-fh.h>
  29#include <media/v4l2-ctrls.h>
  30#include <media/tuner.h>
  31#include <media/rc-core.h>
  32#include <media/i2c/ir-kbd-i2c.h>
  33#include <media/videobuf2-dma-sg.h>
  34#include <sound/core.h>
  35#include <sound/pcm.h>
  36#if IS_ENABLED(CONFIG_VIDEO_SAA7134_DVB)
  37#include <media/videobuf2-dvb.h>
  38#endif
  39#include "tda8290.h"
  40
  41#define UNSET (-1U)
  42
  43/* ----------------------------------------------------------- */
  44/* enums                                                       */
  45
  46enum saa7134_tvaudio_mode {
  47        TVAUDIO_FM_MONO       = 1,
  48        TVAUDIO_FM_BG_STEREO  = 2,
  49        TVAUDIO_FM_SAT_STEREO = 3,
  50        TVAUDIO_FM_K_STEREO   = 4,
  51        TVAUDIO_NICAM_AM      = 5,
  52        TVAUDIO_NICAM_FM      = 6,
  53};
  54
  55enum saa7134_audio_in {
  56        TV    = 1,
  57        LINE1 = 2,
  58        LINE2 = 3,
  59        LINE2_LEFT,
  60};
  61
  62enum saa7134_video_out {
  63        CCIR656 = 1,
  64};
  65
  66/* ----------------------------------------------------------- */
  67/* static data                                                 */
  68
  69struct saa7134_tvnorm {
  70        char          *name;
  71        v4l2_std_id   id;
  72
  73        /* video decoder */
  74        unsigned int  sync_control;
  75        unsigned int  luma_control;
  76        unsigned int  chroma_ctrl1;
  77        unsigned int  chroma_gain;
  78        unsigned int  chroma_ctrl2;
  79        unsigned int  vgate_misc;
  80
  81        /* video scaler */
  82        unsigned int  h_start;
  83        unsigned int  h_stop;
  84        unsigned int  video_v_start;
  85        unsigned int  video_v_stop;
  86        unsigned int  vbi_v_start_0;
  87        unsigned int  vbi_v_stop_0;
  88        unsigned int  src_timing;
  89        unsigned int  vbi_v_start_1;
  90};
  91
  92struct saa7134_tvaudio {
  93        char         *name;
  94        v4l2_std_id  std;
  95        enum         saa7134_tvaudio_mode mode;
  96        int          carr1;
  97        int          carr2;
  98};
  99
 100struct saa7134_format {
 101        char           *name;
 102        unsigned int   fourcc;
 103        unsigned int   depth;
 104        unsigned int   pm;
 105        unsigned int   vshift;   /* vertical downsampling (for planar yuv) */
 106        unsigned int   hshift;   /* horizontal downsampling (for planar yuv) */
 107        unsigned int   bswap:1;
 108        unsigned int   wswap:1;
 109        unsigned int   yuv:1;
 110        unsigned int   planar:1;
 111        unsigned int   uvswap:1;
 112};
 113
 114struct saa7134_card_ir {
 115        struct rc_dev           *dev;
 116
 117        char                    phys[32];
 118
 119        u32                     polling;
 120        u32                     last_gpio;
 121        u32                     mask_keycode, mask_keydown, mask_keyup;
 122
 123        bool                    running;
 124
 125        struct timer_list       timer;
 126
 127        /* IR core raw decoding */
 128        u32                     raw_decode;
 129};
 130
 131/* ----------------------------------------------------------- */
 132/* card configuration                                          */
 133
 134#define SAA7134_BOARD_NOAUTO        UNSET
 135#define SAA7134_BOARD_UNKNOWN           0
 136#define SAA7134_BOARD_PROTEUS_PRO       1
 137#define SAA7134_BOARD_FLYVIDEO3000      2
 138#define SAA7134_BOARD_FLYVIDEO2000      3
 139#define SAA7134_BOARD_EMPRESS           4
 140#define SAA7134_BOARD_MONSTERTV         5
 141#define SAA7134_BOARD_MD9717            6
 142#define SAA7134_BOARD_TVSTATION_RDS     7
 143#define SAA7134_BOARD_CINERGY400        8
 144#define SAA7134_BOARD_MD5044            9
 145#define SAA7134_BOARD_KWORLD           10
 146#define SAA7134_BOARD_CINERGY600       11
 147#define SAA7134_BOARD_MD7134           12
 148#define SAA7134_BOARD_TYPHOON_90031    13
 149#define SAA7134_BOARD_ELSA             14
 150#define SAA7134_BOARD_ELSA_500TV       15
 151#define SAA7134_BOARD_ASUSTeK_TVFM7134 16
 152#define SAA7134_BOARD_VA1000POWER      17
 153#define SAA7134_BOARD_BMK_MPEX_NOTUNER 18
 154#define SAA7134_BOARD_VIDEOMATE_TV     19
 155#define SAA7134_BOARD_CRONOS_PLUS      20
 156#define SAA7134_BOARD_10MOONSTVMASTER  21
 157#define SAA7134_BOARD_MD2819           22
 158#define SAA7134_BOARD_BMK_MPEX_TUNER   23
 159#define SAA7134_BOARD_TVSTATION_DVR    24
 160#define SAA7134_BOARD_ASUSTEK_TVFM7133  25
 161#define SAA7134_BOARD_PINNACLE_PCTV_STEREO 26
 162#define SAA7134_BOARD_MANLI_MTV002     27
 163#define SAA7134_BOARD_MANLI_MTV001     28
 164#define SAA7134_BOARD_TG3000TV         29
 165#define SAA7134_BOARD_ECS_TVP3XP       30
 166#define SAA7134_BOARD_ECS_TVP3XP_4CB5  31
 167#define SAA7134_BOARD_AVACSSMARTTV     32
 168#define SAA7134_BOARD_AVERMEDIA_DVD_EZMAKER 33
 169#define SAA7134_BOARD_NOVAC_PRIMETV7133 34
 170#define SAA7134_BOARD_AVERMEDIA_STUDIO_305 35
 171#define SAA7134_BOARD_UPMOST_PURPLE_TV 36
 172#define SAA7134_BOARD_ITEMS_MTV005     37
 173#define SAA7134_BOARD_CINERGY200       38
 174#define SAA7134_BOARD_FLYTVPLATINUM_MINI 39
 175#define SAA7134_BOARD_VIDEOMATE_TV_PVR 40
 176#define SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUS 41
 177#define SAA7134_BOARD_SABRENT_SBTTVFM  42
 178#define SAA7134_BOARD_ZOLID_XPERT_TV7134 43
 179#define SAA7134_BOARD_EMPIRE_PCI_TV_RADIO_LE 44
 180#define SAA7134_BOARD_AVERMEDIA_STUDIO_307    45
 181#define SAA7134_BOARD_AVERMEDIA_CARDBUS 46
 182#define SAA7134_BOARD_CINERGY400_CARDBUS 47
 183#define SAA7134_BOARD_CINERGY600_MK3   48
 184#define SAA7134_BOARD_VIDEOMATE_GOLD_PLUS 49
 185#define SAA7134_BOARD_PINNACLE_300I_DVBT_PAL 50
 186#define SAA7134_BOARD_PROVIDEO_PV952   51
 187#define SAA7134_BOARD_AVERMEDIA_305    52
 188#define SAA7134_BOARD_ASUSTeK_TVFM7135 53
 189#define SAA7134_BOARD_FLYTVPLATINUM_FM 54
 190#define SAA7134_BOARD_FLYDVBTDUO 55
 191#define SAA7134_BOARD_AVERMEDIA_307    56
 192#define SAA7134_BOARD_AVERMEDIA_GO_007_FM 57
 193#define SAA7134_BOARD_ADS_INSTANT_TV 58
 194#define SAA7134_BOARD_KWORLD_VSTREAM_XPERT 59
 195#define SAA7134_BOARD_FLYDVBT_DUO_CARDBUS 60
 196#define SAA7134_BOARD_PHILIPS_TOUGH 61
 197#define SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUSII 62
 198#define SAA7134_BOARD_KWORLD_XPERT 63
 199#define SAA7134_BOARD_FLYTV_DIGIMATRIX 64
 200#define SAA7134_BOARD_KWORLD_TERMINATOR 65
 201#define SAA7134_BOARD_YUAN_TUN900 66
 202#define SAA7134_BOARD_BEHOLD_409FM 67
 203#define SAA7134_BOARD_GOTVIEW_7135 68
 204#define SAA7134_BOARD_PHILIPS_EUROPA  69
 205#define SAA7134_BOARD_VIDEOMATE_DVBT_300 70
 206#define SAA7134_BOARD_VIDEOMATE_DVBT_200 71
 207#define SAA7134_BOARD_RTD_VFG7350 72
 208#define SAA7134_BOARD_RTD_VFG7330 73
 209#define SAA7134_BOARD_FLYTVPLATINUM_MINI2 74
 210#define SAA7134_BOARD_AVERMEDIA_AVERTVHD_A180 75
 211#define SAA7134_BOARD_MONSTERTV_MOBILE 76
 212#define SAA7134_BOARD_PINNACLE_PCTV_110i 77
 213#define SAA7134_BOARD_ASUSTeK_P7131_DUAL 78
 214#define SAA7134_BOARD_SEDNA_PC_TV_CARDBUS     79
 215#define SAA7134_BOARD_ASUSTEK_DIGIMATRIX_TV 80
 216#define SAA7134_BOARD_PHILIPS_TIGER  81
 217#define SAA7134_BOARD_MSI_TVATANYWHERE_PLUS  82
 218#define SAA7134_BOARD_CINERGY250PCI 83
 219#define SAA7134_BOARD_FLYDVB_TRIO 84
 220#define SAA7134_BOARD_AVERMEDIA_777 85
 221#define SAA7134_BOARD_FLYDVBT_LR301 86
 222#define SAA7134_BOARD_ADS_DUO_CARDBUS_PTV331 87
 223#define SAA7134_BOARD_TEVION_DVBT_220RF 88
 224#define SAA7134_BOARD_ELSA_700TV       89
 225#define SAA7134_BOARD_KWORLD_ATSC110   90
 226#define SAA7134_BOARD_AVERMEDIA_A169_B 91
 227#define SAA7134_BOARD_AVERMEDIA_A169_B1 92
 228#define SAA7134_BOARD_MD7134_BRIDGE_2     93
 229#define SAA7134_BOARD_FLYDVBT_HYBRID_CARDBUS 94
 230#define SAA7134_BOARD_FLYVIDEO3000_NTSC 95
 231#define SAA7134_BOARD_MEDION_MD8800_QUADRO 96
 232#define SAA7134_BOARD_FLYDVBS_LR300 97
 233#define SAA7134_BOARD_PROTEUS_2309 98
 234#define SAA7134_BOARD_AVERMEDIA_A16AR   99
 235#define SAA7134_BOARD_ASUS_EUROPA2_HYBRID 100
 236#define SAA7134_BOARD_PINNACLE_PCTV_310i  101
 237#define SAA7134_BOARD_AVERMEDIA_STUDIO_507 102
 238#define SAA7134_BOARD_VIDEOMATE_DVBT_200A  103
 239#define SAA7134_BOARD_HAUPPAUGE_HVR1110    104
 240#define SAA7134_BOARD_CINERGY_HT_PCMCIA    105
 241#define SAA7134_BOARD_ENCORE_ENLTV         106
 242#define SAA7134_BOARD_ENCORE_ENLTV_FM      107
 243#define SAA7134_BOARD_CINERGY_HT_PCI       108
 244#define SAA7134_BOARD_PHILIPS_TIGER_S      109
 245#define SAA7134_BOARD_AVERMEDIA_M102       110
 246#define SAA7134_BOARD_ASUS_P7131_4871      111
 247#define SAA7134_BOARD_ASUSTeK_P7131_HYBRID_LNA 112
 248#define SAA7134_BOARD_ECS_TVP3XP_4CB6  113
 249#define SAA7134_BOARD_KWORLD_DVBT_210 114
 250#define SAA7134_BOARD_SABRENT_TV_PCB05     115
 251#define SAA7134_BOARD_10MOONSTVMASTER3     116
 252#define SAA7134_BOARD_AVERMEDIA_SUPER_007  117
 253#define SAA7134_BOARD_BEHOLD_401        118
 254#define SAA7134_BOARD_BEHOLD_403        119
 255#define SAA7134_BOARD_BEHOLD_403FM      120
 256#define SAA7134_BOARD_BEHOLD_405        121
 257#define SAA7134_BOARD_BEHOLD_405FM      122
 258#define SAA7134_BOARD_BEHOLD_407        123
 259#define SAA7134_BOARD_BEHOLD_407FM      124
 260#define SAA7134_BOARD_BEHOLD_409        125
 261#define SAA7134_BOARD_BEHOLD_505FM      126
 262#define SAA7134_BOARD_BEHOLD_507_9FM    127
 263#define SAA7134_BOARD_BEHOLD_COLUMBUS_TVFM 128
 264#define SAA7134_BOARD_BEHOLD_607FM_MK3  129
 265#define SAA7134_BOARD_BEHOLD_M6         130
 266#define SAA7134_BOARD_TWINHAN_DTV_DVB_3056 131
 267#define SAA7134_BOARD_GENIUS_TVGO_A11MCE   132
 268#define SAA7134_BOARD_PHILIPS_SNAKE        133
 269#define SAA7134_BOARD_CREATIX_CTX953       134
 270#define SAA7134_BOARD_MSI_TVANYWHERE_AD11  135
 271#define SAA7134_BOARD_AVERMEDIA_CARDBUS_506 136
 272#define SAA7134_BOARD_AVERMEDIA_A16D       137
 273#define SAA7134_BOARD_AVERMEDIA_M115       138
 274#define SAA7134_BOARD_VIDEOMATE_T750       139
 275#define SAA7134_BOARD_AVERMEDIA_A700_PRO    140
 276#define SAA7134_BOARD_AVERMEDIA_A700_HYBRID 141
 277#define SAA7134_BOARD_BEHOLD_H6      142
 278#define SAA7134_BOARD_BEHOLD_M63      143
 279#define SAA7134_BOARD_BEHOLD_M6_EXTRA    144
 280#define SAA7134_BOARD_AVERMEDIA_M103    145
 281#define SAA7134_BOARD_ASUSTeK_P7131_ANALOG 146
 282#define SAA7134_BOARD_ASUSTeK_TIGER_3IN1   147
 283#define SAA7134_BOARD_ENCORE_ENLTV_FM53 148
 284#define SAA7134_BOARD_AVERMEDIA_M135A    149
 285#define SAA7134_BOARD_REAL_ANGEL_220     150
 286#define SAA7134_BOARD_ADS_INSTANT_HDTV_PCI  151
 287#define SAA7134_BOARD_ASUSTeK_TIGER         152
 288#define SAA7134_BOARD_KWORLD_PLUS_TV_ANALOG 153
 289#define SAA7134_BOARD_AVERMEDIA_GO_007_FM_PLUS 154
 290#define SAA7134_BOARD_HAUPPAUGE_HVR1150     155
 291#define SAA7134_BOARD_HAUPPAUGE_HVR1120   156
 292#define SAA7134_BOARD_AVERMEDIA_STUDIO_507UA 157
 293#define SAA7134_BOARD_AVERMEDIA_CARDBUS_501 158
 294#define SAA7134_BOARD_BEHOLD_505RDS_MK5     159
 295#define SAA7134_BOARD_BEHOLD_507RDS_MK3     160
 296#define SAA7134_BOARD_BEHOLD_507RDS_MK5     161
 297#define SAA7134_BOARD_BEHOLD_607FM_MK5      162
 298#define SAA7134_BOARD_BEHOLD_609FM_MK3      163
 299#define SAA7134_BOARD_BEHOLD_609FM_MK5      164
 300#define SAA7134_BOARD_BEHOLD_607RDS_MK3     165
 301#define SAA7134_BOARD_BEHOLD_607RDS_MK5     166
 302#define SAA7134_BOARD_BEHOLD_609RDS_MK3     167
 303#define SAA7134_BOARD_BEHOLD_609RDS_MK5     168
 304#define SAA7134_BOARD_VIDEOMATE_S350        169
 305#define SAA7134_BOARD_AVERMEDIA_STUDIO_505  170
 306#define SAA7134_BOARD_BEHOLD_X7             171
 307#define SAA7134_BOARD_ROVERMEDIA_LINK_PRO_FM 172
 308#define SAA7134_BOARD_ZOLID_HYBRID_PCI          173
 309#define SAA7134_BOARD_ASUS_EUROPA_HYBRID        174
 310#define SAA7134_BOARD_LEADTEK_WINFAST_DTV1000S 175
 311#define SAA7134_BOARD_BEHOLD_505RDS_MK3     176
 312#define SAA7134_BOARD_HAWELL_HW_404M7           177
 313#define SAA7134_BOARD_BEHOLD_H7             178
 314#define SAA7134_BOARD_BEHOLD_A7             179
 315#define SAA7134_BOARD_AVERMEDIA_M733A       180
 316#define SAA7134_BOARD_TECHNOTREND_BUDGET_T3000 181
 317#define SAA7134_BOARD_KWORLD_PCI_SBTVD_FULLSEG 182
 318#define SAA7134_BOARD_VIDEOMATE_M1F         183
 319#define SAA7134_BOARD_ENCORE_ENLTV_FM3      184
 320#define SAA7134_BOARD_MAGICPRO_PROHDTV_PRO2 185
 321#define SAA7134_BOARD_BEHOLD_501            186
 322#define SAA7134_BOARD_BEHOLD_503FM          187
 323#define SAA7134_BOARD_SENSORAY811_911       188
 324#define SAA7134_BOARD_KWORLD_PC150U         189
 325#define SAA7134_BOARD_ASUSTeK_PS3_100      190
 326#define SAA7134_BOARD_HAWELL_HW_9004V1      191
 327#define SAA7134_BOARD_AVERMEDIA_A706            192
 328#define SAA7134_BOARD_WIS_VOYAGER           193
 329#define SAA7134_BOARD_AVERMEDIA_505         194
 330#define SAA7134_BOARD_LEADTEK_WINFAST_TV2100_FM 195
 331#define SAA7134_BOARD_SNAZIO_TVPVR_PRO      196
 332
 333#define SAA7134_MAXBOARDS 32
 334#define SAA7134_INPUT_MAX 8
 335
 336/* ----------------------------------------------------------- */
 337/* Since we support 2 remote types, lets tell them apart       */
 338
 339#define SAA7134_REMOTE_GPIO  1
 340#define SAA7134_REMOTE_I2C   2
 341
 342/* ----------------------------------------------------------- */
 343/* Video Output Port Register Initialization Options           */
 344
 345#define SET_T_CODE_POLARITY_NON_INVERTED        (1 << 0)
 346#define SET_CLOCK_NOT_DELAYED                   (1 << 1)
 347#define SET_CLOCK_INVERTED                      (1 << 2)
 348#define SET_VSYNC_OFF                           (1 << 3)
 349
 350enum saa7134_input_types {
 351        SAA7134_NO_INPUT = 0,
 352        SAA7134_INPUT_MUTE,
 353        SAA7134_INPUT_RADIO,
 354        SAA7134_INPUT_TV,
 355        SAA7134_INPUT_TV_MONO,
 356        SAA7134_INPUT_COMPOSITE,
 357        SAA7134_INPUT_COMPOSITE0,
 358        SAA7134_INPUT_COMPOSITE1,
 359        SAA7134_INPUT_COMPOSITE2,
 360        SAA7134_INPUT_COMPOSITE3,
 361        SAA7134_INPUT_COMPOSITE4,
 362        SAA7134_INPUT_SVIDEO,
 363        SAA7134_INPUT_SVIDEO0,
 364        SAA7134_INPUT_SVIDEO1,
 365        SAA7134_INPUT_COMPOSITE_OVER_SVIDEO,
 366};
 367
 368struct saa7134_input {
 369        enum saa7134_input_types type;
 370        unsigned int             vmux;
 371        enum saa7134_audio_in    amux;
 372        unsigned int             gpio;
 373};
 374
 375enum saa7134_mpeg_type {
 376        SAA7134_MPEG_UNUSED,
 377        SAA7134_MPEG_EMPRESS,
 378        SAA7134_MPEG_DVB,
 379        SAA7134_MPEG_GO7007,
 380};
 381
 382enum saa7134_mpeg_ts_type {
 383        SAA7134_MPEG_TS_PARALLEL = 0,
 384        SAA7134_MPEG_TS_SERIAL,
 385};
 386
 387struct saa7134_board {
 388        char                    *name;
 389        unsigned int            audio_clock;
 390
 391        /* input switching */
 392        unsigned int            gpiomask;
 393        struct saa7134_input    inputs[SAA7134_INPUT_MAX];
 394        struct saa7134_input    radio;
 395        struct saa7134_input    mute;
 396
 397        /* i2c chip info */
 398        unsigned int            tuner_type;
 399        unsigned int            radio_type;
 400        unsigned char           tuner_addr;
 401        unsigned char           radio_addr;
 402        unsigned char           empress_addr;
 403        unsigned char           rds_addr;
 404
 405        unsigned int            tda9887_conf;
 406        struct tda829x_config   tda829x_conf;
 407
 408        /* peripheral I/O */
 409        enum saa7134_video_out  video_out;
 410        enum saa7134_mpeg_type  mpeg;
 411        enum saa7134_mpeg_ts_type ts_type;
 412        unsigned int            vid_port_opts;
 413        unsigned int            ts_force_val:1;
 414};
 415
 416#define card_has_radio(dev)   (SAA7134_NO_INPUT != saa7134_boards[dev->board].radio.type)
 417#define card_is_empress(dev)  (SAA7134_MPEG_EMPRESS == saa7134_boards[dev->board].mpeg)
 418#define card_is_dvb(dev)      (SAA7134_MPEG_DVB     == saa7134_boards[dev->board].mpeg)
 419#define card_is_go7007(dev)   (SAA7134_MPEG_GO7007  == saa7134_boards[dev->board].mpeg)
 420#define card_has_mpeg(dev)    (SAA7134_MPEG_UNUSED  != saa7134_boards[dev->board].mpeg)
 421#define card(dev)             (saa7134_boards[dev->board])
 422#define card_in(dev,n)        (saa7134_boards[dev->board].inputs[n])
 423
 424#define V4L2_CID_PRIVATE_INVERT      (V4L2_CID_USER_SAA7134_BASE + 0)
 425#define V4L2_CID_PRIVATE_Y_ODD       (V4L2_CID_USER_SAA7134_BASE + 1)
 426#define V4L2_CID_PRIVATE_Y_EVEN      (V4L2_CID_USER_SAA7134_BASE + 2)
 427#define V4L2_CID_PRIVATE_AUTOMUTE    (V4L2_CID_USER_SAA7134_BASE + 3)
 428
 429/* ----------------------------------------------------------- */
 430/* device / file handle status                                 */
 431
 432#define RESOURCE_OVERLAY       1
 433#define RESOURCE_VIDEO         2
 434#define RESOURCE_VBI           4
 435#define RESOURCE_EMPRESS       8
 436
 437#define INTERLACE_AUTO         0
 438#define INTERLACE_ON           1
 439#define INTERLACE_OFF          2
 440
 441#define BUFFER_TIMEOUT     msecs_to_jiffies(500)  /* 0.5 seconds */
 442#define TS_BUFFER_TIMEOUT  msecs_to_jiffies(1000)  /* 1 second */
 443
 444struct saa7134_dev;
 445struct saa7134_dma;
 446
 447/* saa7134 page table */
 448struct saa7134_pgtable {
 449        unsigned int               size;
 450        __le32                     *cpu;
 451        dma_addr_t                 dma;
 452};
 453
 454/* tvaudio thread status */
 455struct saa7134_thread {
 456        struct task_struct         *thread;
 457        unsigned int               scan1;
 458        unsigned int               scan2;
 459        unsigned int               mode;
 460        unsigned int               stopped;
 461};
 462
 463/* buffer for one video/vbi/ts frame */
 464struct saa7134_buf {
 465        /* common v4l buffer stuff -- must be first */
 466        struct vb2_v4l2_buffer vb2;
 467
 468        /* saa7134 specific */
 469        unsigned int            top_seen;
 470        int (*activate)(struct saa7134_dev *dev,
 471                        struct saa7134_buf *buf,
 472                        struct saa7134_buf *next);
 473
 474        struct list_head        entry;
 475};
 476
 477struct saa7134_dmaqueue {
 478        struct saa7134_dev         *dev;
 479        struct saa7134_buf         *curr;
 480        struct list_head           queue;
 481        struct timer_list          timeout;
 482        unsigned int               need_two;
 483        unsigned int               seq_nr;
 484        struct saa7134_pgtable     pt;
 485};
 486
 487/* dmasound dsp status */
 488struct saa7134_dmasound {
 489        struct mutex               lock;
 490        int                        minor_mixer;
 491        int                        minor_dsp;
 492        unsigned int               users_dsp;
 493
 494        /* mixer */
 495        enum saa7134_audio_in      input;
 496        unsigned int               count;
 497        unsigned int               line1;
 498        unsigned int               line2;
 499
 500        /* dsp */
 501        unsigned int               afmt;
 502        unsigned int               rate;
 503        unsigned int               channels;
 504        unsigned int               recording_on;
 505        unsigned int               dma_running;
 506        unsigned int               blocks;
 507        unsigned int               blksize;
 508        unsigned int               bufsize;
 509        struct saa7134_pgtable     pt;
 510        void                       *vaddr;
 511        struct scatterlist         *sglist;
 512        int                        sglen;
 513        int                        nr_pages;
 514        unsigned int               dma_blk;
 515        unsigned int               read_offset;
 516        unsigned int               read_count;
 517        void *                     priv_data;
 518        struct snd_pcm_substream   *substream;
 519};
 520
 521/* ts/mpeg status */
 522struct saa7134_ts {
 523        /* TS capture */
 524        int                        nr_packets;
 525        int                        nr_bufs;
 526};
 527
 528/* ts/mpeg ops */
 529struct saa7134_mpeg_ops {
 530        enum saa7134_mpeg_type     type;
 531        struct list_head           next;
 532        int                        (*init)(struct saa7134_dev *dev);
 533        int                        (*fini)(struct saa7134_dev *dev);
 534        void                       (*signal_change)(struct saa7134_dev *dev);
 535        void                       (*irq_ts_done)(struct saa7134_dev *dev,
 536                                                  unsigned long status);
 537};
 538
 539enum saa7134_pads {
 540        SAA7134_PAD_IF_INPUT,
 541        SAA7134_PAD_VID_OUT,
 542        SAA7134_NUM_PADS
 543};
 544
 545/* global device status */
 546struct saa7134_dev {
 547        struct list_head           devlist;
 548        struct mutex               lock;
 549        spinlock_t                 slock;
 550        struct v4l2_device         v4l2_dev;
 551        /* workstruct for loading modules */
 552        struct work_struct request_module_wk;
 553
 554        /* insmod option/autodetected */
 555        int                        autodetected;
 556
 557        /* various device info */
 558        unsigned int               resources;
 559        struct video_device        *video_dev;
 560        struct video_device        *radio_dev;
 561        struct video_device        *vbi_dev;
 562        struct saa7134_dmasound    dmasound;
 563
 564        /* infrared remote */
 565        int                        has_remote;
 566        struct saa7134_card_ir     *remote;
 567
 568        /* pci i/o */
 569        char                       name[32];
 570        int                        nr;
 571        struct pci_dev             *pci;
 572        unsigned char              pci_rev,pci_lat;
 573        __u32                      __iomem *lmmio;
 574        __u8                       __iomem *bmmio;
 575
 576        /* config info */
 577        unsigned int               board;
 578        unsigned int               tuner_type;
 579        unsigned int               radio_type;
 580        unsigned char              tuner_addr;
 581        unsigned char              radio_addr;
 582
 583        unsigned int               tda9887_conf;
 584        unsigned int               gpio_value;
 585
 586        /* i2c i/o */
 587        struct i2c_adapter         i2c_adap;
 588        struct i2c_client          i2c_client;
 589        unsigned char              eedata[256];
 590        int                        has_rds;
 591
 592        /* video overlay */
 593        struct v4l2_framebuffer    ovbuf;
 594        struct saa7134_format      *ovfmt;
 595        unsigned int               ovenable;
 596        enum v4l2_field            ovfield;
 597        struct v4l2_window         win;
 598        struct v4l2_clip           clips[8];
 599        unsigned int               nclips;
 600        struct v4l2_fh             *overlay_owner;
 601
 602
 603        /* video+ts+vbi capture */
 604        struct saa7134_dmaqueue    video_q;
 605        struct vb2_queue           video_vbq;
 606        struct saa7134_dmaqueue    vbi_q;
 607        struct vb2_queue           vbi_vbq;
 608        enum v4l2_field            field;
 609        struct saa7134_format      *fmt;
 610        unsigned int               width, height;
 611        unsigned int               vbi_hlen, vbi_vlen;
 612        struct pm_qos_request      qos_request;
 613
 614        /* SAA7134_MPEG_* */
 615        struct saa7134_ts          ts;
 616        struct saa7134_dmaqueue    ts_q;
 617        enum v4l2_field            ts_field;
 618        int                        ts_started;
 619        struct saa7134_mpeg_ops    *mops;
 620
 621        /* SAA7134_MPEG_EMPRESS only */
 622        struct video_device        *empress_dev;
 623        struct v4l2_subdev         *empress_sd;
 624        struct vb2_queue           empress_vbq;
 625        struct work_struct         empress_workqueue;
 626        int                        empress_started;
 627        struct v4l2_ctrl_handler   empress_ctrl_handler;
 628
 629        /* various v4l controls */
 630        struct saa7134_tvnorm      *tvnorm;              /* video */
 631        struct saa7134_tvaudio     *tvaudio;
 632        struct v4l2_ctrl_handler   ctrl_handler;
 633        unsigned int               ctl_input;
 634        int                        ctl_bright;
 635        int                        ctl_contrast;
 636        int                        ctl_hue;
 637        int                        ctl_saturation;
 638        int                        ctl_mute;             /* audio */
 639        int                        ctl_volume;
 640        int                        ctl_invert;           /* private */
 641        int                        ctl_mirror;
 642        int                        ctl_y_odd;
 643        int                        ctl_y_even;
 644        int                        ctl_automute;
 645
 646        /* crop */
 647        struct v4l2_rect           crop_bounds;
 648        struct v4l2_rect           crop_defrect;
 649        struct v4l2_rect           crop_current;
 650
 651        /* other global state info */
 652        unsigned int               automute;
 653        struct saa7134_thread      thread;
 654        struct saa7134_input       *input;
 655        struct saa7134_input       *hw_input;
 656        unsigned int               hw_mute;
 657        int                        last_carrier;
 658        int                        nosignal;
 659        unsigned int               insuspend;
 660        struct v4l2_ctrl_handler   radio_ctrl_handler;
 661
 662        /* I2C keyboard data */
 663        struct IR_i2c_init_data    init_data;
 664
 665#ifdef CONFIG_MEDIA_CONTROLLER
 666        struct media_device *media_dev;
 667
 668        struct media_entity input_ent[SAA7134_INPUT_MAX + 1];
 669        struct media_pad input_pad[SAA7134_INPUT_MAX + 1];
 670
 671        struct media_entity demod;
 672        struct media_pad demod_pad[SAA7134_NUM_PADS];
 673
 674        struct media_pad video_pad, vbi_pad;
 675        struct media_entity *decoder;
 676#endif
 677
 678#if IS_ENABLED(CONFIG_VIDEO_SAA7134_DVB)
 679        /* SAA7134_MPEG_DVB only */
 680        struct vb2_dvb_frontends frontends;
 681        int (*original_demod_sleep)(struct dvb_frontend *fe);
 682        int (*original_set_voltage)(struct dvb_frontend *fe,
 683                                    enum fe_sec_voltage voltage);
 684        int (*original_set_high_voltage)(struct dvb_frontend *fe, long arg);
 685#endif
 686        void (*gate_ctrl)(struct saa7134_dev *dev, int open);
 687};
 688
 689/* ----------------------------------------------------------- */
 690
 691#define saa_readl(reg)             readl(dev->lmmio + (reg))
 692#define saa_writel(reg,value)      writel((value), dev->lmmio + (reg));
 693#define saa_andorl(reg,mask,value) \
 694  writel((readl(dev->lmmio+(reg)) & ~(mask)) |\
 695  ((value) & (mask)), dev->lmmio+(reg))
 696#define saa_setl(reg,bit)          saa_andorl((reg),(bit),(bit))
 697#define saa_clearl(reg,bit)        saa_andorl((reg),(bit),0)
 698
 699#define saa_readb(reg)             readb(dev->bmmio + (reg))
 700#define saa_writeb(reg,value)      writeb((value), dev->bmmio + (reg));
 701#define saa_andorb(reg,mask,value) \
 702  writeb((readb(dev->bmmio+(reg)) & ~(mask)) |\
 703  ((value) & (mask)), dev->bmmio+(reg))
 704#define saa_setb(reg,bit)          saa_andorb((reg),(bit),(bit))
 705#define saa_clearb(reg,bit)        saa_andorb((reg),(bit),0)
 706
 707#define saa_wait(us) { udelay(us); }
 708
 709#define SAA7134_NORMS   (\
 710                V4L2_STD_PAL    | V4L2_STD_PAL_N | \
 711                V4L2_STD_PAL_Nc | V4L2_STD_SECAM | \
 712                V4L2_STD_NTSC   | V4L2_STD_PAL_M | \
 713                V4L2_STD_PAL_60)
 714
 715#define GRP_EMPRESS (1)
 716#define saa_call_all(dev, o, f, args...) do {                           \
 717        if (dev->gate_ctrl)                                             \
 718                dev->gate_ctrl(dev, 1);                                 \
 719        v4l2_device_call_all(&(dev)->v4l2_dev, 0, o, f , ##args);       \
 720        if (dev->gate_ctrl)                                             \
 721                dev->gate_ctrl(dev, 0);                                 \
 722} while (0)
 723
 724#define saa_call_empress(dev, o, f, args...) ({                         \
 725        long _rc;                                                       \
 726        if (dev->gate_ctrl)                                             \
 727                dev->gate_ctrl(dev, 1);                                 \
 728        _rc = v4l2_device_call_until_err(&(dev)->v4l2_dev,              \
 729                                         GRP_EMPRESS, o, f , ##args);   \
 730        if (dev->gate_ctrl)                                             \
 731                dev->gate_ctrl(dev, 0);                                 \
 732        _rc;                                                            \
 733})
 734
 735static inline bool is_empress(struct file *file)
 736{
 737        struct video_device *vdev = video_devdata(file);
 738        struct saa7134_dev *dev = video_get_drvdata(vdev);
 739
 740        return vdev->queue == &dev->empress_vbq;
 741}
 742
 743/* ----------------------------------------------------------- */
 744/* saa7134-core.c                                              */
 745
 746extern struct list_head  saa7134_devlist;
 747extern struct mutex saa7134_devlist_lock;
 748extern int saa7134_no_overlay;
 749extern bool saa7134_userptr;
 750
 751void saa7134_track_gpio(struct saa7134_dev *dev, const char *msg);
 752void saa7134_set_gpio(struct saa7134_dev *dev, int bit_no, int value);
 753
 754#define SAA7134_PGTABLE_SIZE 4096
 755
 756int saa7134_pgtable_alloc(struct pci_dev *pci, struct saa7134_pgtable *pt);
 757int  saa7134_pgtable_build(struct pci_dev *pci, struct saa7134_pgtable *pt,
 758                           struct scatterlist *list, unsigned int length,
 759                           unsigned int startpage);
 760void saa7134_pgtable_free(struct pci_dev *pci, struct saa7134_pgtable *pt);
 761
 762int saa7134_buffer_count(unsigned int size, unsigned int count);
 763int saa7134_buffer_startpage(struct saa7134_buf *buf);
 764unsigned long saa7134_buffer_base(struct saa7134_buf *buf);
 765
 766int saa7134_buffer_queue(struct saa7134_dev *dev, struct saa7134_dmaqueue *q,
 767                         struct saa7134_buf *buf);
 768void saa7134_buffer_finish(struct saa7134_dev *dev, struct saa7134_dmaqueue *q,
 769                           unsigned int state);
 770void saa7134_buffer_next(struct saa7134_dev *dev, struct saa7134_dmaqueue *q);
 771void saa7134_buffer_timeout(struct timer_list *t);
 772void saa7134_stop_streaming(struct saa7134_dev *dev, struct saa7134_dmaqueue *q);
 773
 774int saa7134_set_dmabits(struct saa7134_dev *dev);
 775
 776extern int (*saa7134_dmasound_init)(struct saa7134_dev *dev);
 777extern int (*saa7134_dmasound_exit)(struct saa7134_dev *dev);
 778
 779
 780/* ----------------------------------------------------------- */
 781/* saa7134-cards.c                                             */
 782
 783extern struct saa7134_board saa7134_boards[];
 784extern const char * const saa7134_input_name[];
 785extern const unsigned int saa7134_bcount;
 786extern struct pci_device_id saa7134_pci_tbl[];
 787
 788extern int saa7134_board_init1(struct saa7134_dev *dev);
 789extern int saa7134_board_init2(struct saa7134_dev *dev);
 790int saa7134_tuner_callback(void *priv, int component, int command, int arg);
 791
 792
 793/* ----------------------------------------------------------- */
 794/* saa7134-i2c.c                                               */
 795
 796int saa7134_i2c_register(struct saa7134_dev *dev);
 797int saa7134_i2c_unregister(struct saa7134_dev *dev);
 798
 799
 800/* ----------------------------------------------------------- */
 801/* saa7134-video.c                                             */
 802
 803extern unsigned int video_debug;
 804extern struct video_device saa7134_video_template;
 805extern struct video_device saa7134_radio_template;
 806
 807void saa7134_vb2_buffer_queue(struct vb2_buffer *vb);
 808int saa7134_vb2_start_streaming(struct vb2_queue *vq, unsigned int count);
 809void saa7134_vb2_stop_streaming(struct vb2_queue *vq);
 810
 811int saa7134_s_std(struct file *file, void *priv, v4l2_std_id id);
 812int saa7134_g_std(struct file *file, void *priv, v4l2_std_id *id);
 813int saa7134_querystd(struct file *file, void *priv, v4l2_std_id *std);
 814int saa7134_enum_input(struct file *file, void *priv, struct v4l2_input *i);
 815int saa7134_g_input(struct file *file, void *priv, unsigned int *i);
 816int saa7134_s_input(struct file *file, void *priv, unsigned int i);
 817int saa7134_querycap(struct file *file, void  *priv,
 818                                        struct v4l2_capability *cap);
 819int saa7134_g_tuner(struct file *file, void *priv,
 820                                        struct v4l2_tuner *t);
 821int saa7134_s_tuner(struct file *file, void *priv,
 822                                        const struct v4l2_tuner *t);
 823int saa7134_g_frequency(struct file *file, void *priv,
 824                                        struct v4l2_frequency *f);
 825int saa7134_s_frequency(struct file *file, void *priv,
 826                                        const struct v4l2_frequency *f);
 827
 828int saa7134_videoport_init(struct saa7134_dev *dev);
 829void saa7134_set_tvnorm_hw(struct saa7134_dev *dev);
 830
 831int saa7134_video_init1(struct saa7134_dev *dev);
 832int saa7134_video_init2(struct saa7134_dev *dev);
 833void saa7134_irq_video_signalchange(struct saa7134_dev *dev);
 834void saa7134_irq_video_done(struct saa7134_dev *dev, unsigned long status);
 835void saa7134_video_fini(struct saa7134_dev *dev);
 836
 837
 838/* ----------------------------------------------------------- */
 839/* saa7134-ts.c                                                */
 840
 841#define TS_PACKET_SIZE 188 /* TS packets 188 bytes */
 842
 843int saa7134_ts_buffer_init(struct vb2_buffer *vb2);
 844int saa7134_ts_buffer_prepare(struct vb2_buffer *vb2);
 845int saa7134_ts_queue_setup(struct vb2_queue *q,
 846                           unsigned int *nbuffers, unsigned int *nplanes,
 847                           unsigned int sizes[], struct device *alloc_devs[]);
 848int saa7134_ts_start_streaming(struct vb2_queue *vq, unsigned int count);
 849void saa7134_ts_stop_streaming(struct vb2_queue *vq);
 850
 851extern struct vb2_ops saa7134_ts_qops;
 852
 853int saa7134_ts_init1(struct saa7134_dev *dev);
 854int saa7134_ts_fini(struct saa7134_dev *dev);
 855void saa7134_irq_ts_done(struct saa7134_dev *dev, unsigned long status);
 856
 857int saa7134_ts_register(struct saa7134_mpeg_ops *ops);
 858void saa7134_ts_unregister(struct saa7134_mpeg_ops *ops);
 859
 860int saa7134_ts_init_hw(struct saa7134_dev *dev);
 861
 862int saa7134_ts_start(struct saa7134_dev *dev);
 863int saa7134_ts_stop(struct saa7134_dev *dev);
 864
 865/* ----------------------------------------------------------- */
 866/* saa7134-vbi.c                                               */
 867
 868extern const struct vb2_ops saa7134_vbi_qops;
 869extern struct video_device saa7134_vbi_template;
 870
 871int saa7134_vbi_init1(struct saa7134_dev *dev);
 872int saa7134_vbi_fini(struct saa7134_dev *dev);
 873void saa7134_irq_vbi_done(struct saa7134_dev *dev, unsigned long status);
 874
 875
 876/* ----------------------------------------------------------- */
 877/* saa7134-tvaudio.c                                           */
 878
 879int saa7134_tvaudio_rx2mode(u32 rx);
 880
 881void saa7134_tvaudio_setmute(struct saa7134_dev *dev);
 882void saa7134_tvaudio_setinput(struct saa7134_dev *dev,
 883                              struct saa7134_input *in);
 884void saa7134_tvaudio_setvolume(struct saa7134_dev *dev, int level);
 885int saa7134_tvaudio_getstereo(struct saa7134_dev *dev);
 886
 887void saa7134_tvaudio_init(struct saa7134_dev *dev);
 888int saa7134_tvaudio_init2(struct saa7134_dev *dev);
 889int saa7134_tvaudio_fini(struct saa7134_dev *dev);
 890int saa7134_tvaudio_do_scan(struct saa7134_dev *dev);
 891int saa7134_tvaudio_close(struct saa7134_dev *dev);
 892
 893int saa_dsp_writel(struct saa7134_dev *dev, int reg, u32 value);
 894
 895void saa7134_enable_i2s(struct saa7134_dev *dev);
 896
 897/* ----------------------------------------------------------- */
 898/* saa7134-oss.c                                               */
 899
 900extern const struct file_operations saa7134_dsp_fops;
 901extern const struct file_operations saa7134_mixer_fops;
 902
 903int saa7134_oss_init1(struct saa7134_dev *dev);
 904int saa7134_oss_fini(struct saa7134_dev *dev);
 905void saa7134_irq_oss_done(struct saa7134_dev *dev, unsigned long status);
 906
 907/* ----------------------------------------------------------- */
 908/* saa7134-input.c                                             */
 909
 910#if defined(CONFIG_VIDEO_SAA7134_RC)
 911int  saa7134_input_init1(struct saa7134_dev *dev);
 912void saa7134_input_fini(struct saa7134_dev *dev);
 913void saa7134_input_irq(struct saa7134_dev *dev);
 914void saa7134_probe_i2c_ir(struct saa7134_dev *dev);
 915int saa7134_ir_open(struct rc_dev *dev);
 916void saa7134_ir_close(struct rc_dev *dev);
 917#else
 918#define saa7134_input_init1(dev)        ((void)0)
 919#define saa7134_input_fini(dev)         ((void)0)
 920#define saa7134_input_irq(dev)          ((void)0)
 921#define saa7134_probe_i2c_ir(dev)       ((void)0)
 922#define saa7134_ir_open(dev)            ((void)0)
 923#define saa7134_ir_close(dev)           ((void)0)
 924#endif
 925