cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

saa7134.h (31634B)


      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	unsigned int   fourcc;
    102	unsigned int   depth;
    103	unsigned int   pm;
    104	unsigned int   vshift;   /* vertical downsampling (for planar yuv) */
    105	unsigned int   hshift;   /* horizontal downsampling (for planar yuv) */
    106	unsigned int   bswap:1;
    107	unsigned int   wswap:1;
    108	unsigned int   yuv:1;
    109	unsigned int   planar:1;
    110	unsigned int   uvswap:1;
    111};
    112
    113struct saa7134_card_ir {
    114	struct rc_dev		*dev;
    115
    116	char                    phys[32];
    117
    118	u32			polling;
    119	u32			last_gpio;
    120	u32			mask_keycode, mask_keydown, mask_keyup;
    121
    122	bool                    running;
    123
    124	struct timer_list       timer;
    125
    126	/* IR core raw decoding */
    127	u32                     raw_decode;
    128};
    129
    130/* ----------------------------------------------------------- */
    131/* card configuration                                          */
    132
    133#define SAA7134_BOARD_NOAUTO        UNSET
    134#define SAA7134_BOARD_UNKNOWN           0
    135#define SAA7134_BOARD_PROTEUS_PRO       1
    136#define SAA7134_BOARD_FLYVIDEO3000      2
    137#define SAA7134_BOARD_FLYVIDEO2000      3
    138#define SAA7134_BOARD_EMPRESS           4
    139#define SAA7134_BOARD_MONSTERTV         5
    140#define SAA7134_BOARD_MD9717            6
    141#define SAA7134_BOARD_TVSTATION_RDS     7
    142#define SAA7134_BOARD_CINERGY400	8
    143#define SAA7134_BOARD_MD5044		9
    144#define SAA7134_BOARD_KWORLD           10
    145#define SAA7134_BOARD_CINERGY600       11
    146#define SAA7134_BOARD_MD7134           12
    147#define SAA7134_BOARD_TYPHOON_90031    13
    148#define SAA7134_BOARD_ELSA             14
    149#define SAA7134_BOARD_ELSA_500TV       15
    150#define SAA7134_BOARD_ASUSTeK_TVFM7134 16
    151#define SAA7134_BOARD_VA1000POWER      17
    152#define SAA7134_BOARD_BMK_MPEX_NOTUNER 18
    153#define SAA7134_BOARD_VIDEOMATE_TV     19
    154#define SAA7134_BOARD_CRONOS_PLUS      20
    155#define SAA7134_BOARD_10MOONSTVMASTER  21
    156#define SAA7134_BOARD_MD2819           22
    157#define SAA7134_BOARD_BMK_MPEX_TUNER   23
    158#define SAA7134_BOARD_TVSTATION_DVR    24
    159#define SAA7134_BOARD_ASUSTEK_TVFM7133	25
    160#define SAA7134_BOARD_PINNACLE_PCTV_STEREO 26
    161#define SAA7134_BOARD_MANLI_MTV002     27
    162#define SAA7134_BOARD_MANLI_MTV001     28
    163#define SAA7134_BOARD_TG3000TV         29
    164#define SAA7134_BOARD_ECS_TVP3XP       30
    165#define SAA7134_BOARD_ECS_TVP3XP_4CB5  31
    166#define SAA7134_BOARD_AVACSSMARTTV     32
    167#define SAA7134_BOARD_AVERMEDIA_DVD_EZMAKER 33
    168#define SAA7134_BOARD_NOVAC_PRIMETV7133 34
    169#define SAA7134_BOARD_AVERMEDIA_STUDIO_305 35
    170#define SAA7134_BOARD_UPMOST_PURPLE_TV 36
    171#define SAA7134_BOARD_ITEMS_MTV005     37
    172#define SAA7134_BOARD_CINERGY200       38
    173#define SAA7134_BOARD_FLYTVPLATINUM_MINI 39
    174#define SAA7134_BOARD_VIDEOMATE_TV_PVR 40
    175#define SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUS 41
    176#define SAA7134_BOARD_SABRENT_SBTTVFM  42
    177#define SAA7134_BOARD_ZOLID_XPERT_TV7134 43
    178#define SAA7134_BOARD_EMPIRE_PCI_TV_RADIO_LE 44
    179#define SAA7134_BOARD_AVERMEDIA_STUDIO_307    45
    180#define SAA7134_BOARD_AVERMEDIA_CARDBUS 46
    181#define SAA7134_BOARD_CINERGY400_CARDBUS 47
    182#define SAA7134_BOARD_CINERGY600_MK3   48
    183#define SAA7134_BOARD_VIDEOMATE_GOLD_PLUS 49
    184#define SAA7134_BOARD_PINNACLE_300I_DVBT_PAL 50
    185#define SAA7134_BOARD_PROVIDEO_PV952   51
    186#define SAA7134_BOARD_AVERMEDIA_305    52
    187#define SAA7134_BOARD_ASUSTeK_TVFM7135 53
    188#define SAA7134_BOARD_FLYTVPLATINUM_FM 54
    189#define SAA7134_BOARD_FLYDVBTDUO 55
    190#define SAA7134_BOARD_AVERMEDIA_307    56
    191#define SAA7134_BOARD_AVERMEDIA_GO_007_FM 57
    192#define SAA7134_BOARD_ADS_INSTANT_TV 58
    193#define SAA7134_BOARD_KWORLD_VSTREAM_XPERT 59
    194#define SAA7134_BOARD_FLYDVBT_DUO_CARDBUS 60
    195#define SAA7134_BOARD_PHILIPS_TOUGH 61
    196#define SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUSII 62
    197#define SAA7134_BOARD_KWORLD_XPERT 63
    198#define SAA7134_BOARD_FLYTV_DIGIMATRIX 64
    199#define SAA7134_BOARD_KWORLD_TERMINATOR 65
    200#define SAA7134_BOARD_YUAN_TUN900 66
    201#define SAA7134_BOARD_BEHOLD_409FM 67
    202#define SAA7134_BOARD_GOTVIEW_7135 68
    203#define SAA7134_BOARD_PHILIPS_EUROPA  69
    204#define SAA7134_BOARD_VIDEOMATE_DVBT_300 70
    205#define SAA7134_BOARD_VIDEOMATE_DVBT_200 71
    206#define SAA7134_BOARD_RTD_VFG7350 72
    207#define SAA7134_BOARD_RTD_VFG7330 73
    208#define SAA7134_BOARD_FLYTVPLATINUM_MINI2 74
    209#define SAA7134_BOARD_AVERMEDIA_AVERTVHD_A180 75
    210#define SAA7134_BOARD_MONSTERTV_MOBILE 76
    211#define SAA7134_BOARD_PINNACLE_PCTV_110i 77
    212#define SAA7134_BOARD_ASUSTeK_P7131_DUAL 78
    213#define SAA7134_BOARD_SEDNA_PC_TV_CARDBUS     79
    214#define SAA7134_BOARD_ASUSTEK_DIGIMATRIX_TV 80
    215#define SAA7134_BOARD_PHILIPS_TIGER  81
    216#define SAA7134_BOARD_MSI_TVATANYWHERE_PLUS  82
    217#define SAA7134_BOARD_CINERGY250PCI 83
    218#define SAA7134_BOARD_FLYDVB_TRIO 84
    219#define SAA7134_BOARD_AVERMEDIA_777 85
    220#define SAA7134_BOARD_FLYDVBT_LR301 86
    221#define SAA7134_BOARD_ADS_DUO_CARDBUS_PTV331 87
    222#define SAA7134_BOARD_TEVION_DVBT_220RF 88
    223#define SAA7134_BOARD_ELSA_700TV       89
    224#define SAA7134_BOARD_KWORLD_ATSC110   90
    225#define SAA7134_BOARD_AVERMEDIA_A169_B 91
    226#define SAA7134_BOARD_AVERMEDIA_A169_B1 92
    227#define SAA7134_BOARD_MD7134_BRIDGE_2     93
    228#define SAA7134_BOARD_FLYDVBT_HYBRID_CARDBUS 94
    229#define SAA7134_BOARD_FLYVIDEO3000_NTSC 95
    230#define SAA7134_BOARD_MEDION_MD8800_QUADRO 96
    231#define SAA7134_BOARD_FLYDVBS_LR300 97
    232#define SAA7134_BOARD_PROTEUS_2309 98
    233#define SAA7134_BOARD_AVERMEDIA_A16AR   99
    234#define SAA7134_BOARD_ASUS_EUROPA2_HYBRID 100
    235#define SAA7134_BOARD_PINNACLE_PCTV_310i  101
    236#define SAA7134_BOARD_AVERMEDIA_STUDIO_507 102
    237#define SAA7134_BOARD_VIDEOMATE_DVBT_200A  103
    238#define SAA7134_BOARD_HAUPPAUGE_HVR1110    104
    239#define SAA7134_BOARD_CINERGY_HT_PCMCIA    105
    240#define SAA7134_BOARD_ENCORE_ENLTV         106
    241#define SAA7134_BOARD_ENCORE_ENLTV_FM      107
    242#define SAA7134_BOARD_CINERGY_HT_PCI       108
    243#define SAA7134_BOARD_PHILIPS_TIGER_S      109
    244#define SAA7134_BOARD_AVERMEDIA_M102	   110
    245#define SAA7134_BOARD_ASUS_P7131_4871	   111
    246#define SAA7134_BOARD_ASUSTeK_P7131_HYBRID_LNA 112
    247#define SAA7134_BOARD_ECS_TVP3XP_4CB6  113
    248#define SAA7134_BOARD_KWORLD_DVBT_210 114
    249#define SAA7134_BOARD_SABRENT_TV_PCB05     115
    250#define SAA7134_BOARD_10MOONSTVMASTER3     116
    251#define SAA7134_BOARD_AVERMEDIA_SUPER_007  117
    252#define SAA7134_BOARD_BEHOLD_401	118
    253#define SAA7134_BOARD_BEHOLD_403	119
    254#define SAA7134_BOARD_BEHOLD_403FM	120
    255#define SAA7134_BOARD_BEHOLD_405	121
    256#define SAA7134_BOARD_BEHOLD_405FM	122
    257#define SAA7134_BOARD_BEHOLD_407	123
    258#define SAA7134_BOARD_BEHOLD_407FM	124
    259#define SAA7134_BOARD_BEHOLD_409	125
    260#define SAA7134_BOARD_BEHOLD_505FM	126
    261#define SAA7134_BOARD_BEHOLD_507_9FM	127
    262#define SAA7134_BOARD_BEHOLD_COLUMBUS_TVFM 128
    263#define SAA7134_BOARD_BEHOLD_607FM_MK3	129
    264#define SAA7134_BOARD_BEHOLD_M6		130
    265#define SAA7134_BOARD_TWINHAN_DTV_DVB_3056 131
    266#define SAA7134_BOARD_GENIUS_TVGO_A11MCE   132
    267#define SAA7134_BOARD_PHILIPS_SNAKE        133
    268#define SAA7134_BOARD_CREATIX_CTX953       134
    269#define SAA7134_BOARD_MSI_TVANYWHERE_AD11  135
    270#define SAA7134_BOARD_AVERMEDIA_CARDBUS_506 136
    271#define SAA7134_BOARD_AVERMEDIA_A16D       137
    272#define SAA7134_BOARD_AVERMEDIA_M115       138
    273#define SAA7134_BOARD_VIDEOMATE_T750       139
    274#define SAA7134_BOARD_AVERMEDIA_A700_PRO    140
    275#define SAA7134_BOARD_AVERMEDIA_A700_HYBRID 141
    276#define SAA7134_BOARD_BEHOLD_H6      142
    277#define SAA7134_BOARD_BEHOLD_M63      143
    278#define SAA7134_BOARD_BEHOLD_M6_EXTRA    144
    279#define SAA7134_BOARD_AVERMEDIA_M103    145
    280#define SAA7134_BOARD_ASUSTeK_P7131_ANALOG 146
    281#define SAA7134_BOARD_ASUSTeK_TIGER_3IN1   147
    282#define SAA7134_BOARD_ENCORE_ENLTV_FM53 148
    283#define SAA7134_BOARD_AVERMEDIA_M135A    149
    284#define SAA7134_BOARD_REAL_ANGEL_220     150
    285#define SAA7134_BOARD_ADS_INSTANT_HDTV_PCI  151
    286#define SAA7134_BOARD_ASUSTeK_TIGER         152
    287#define SAA7134_BOARD_KWORLD_PLUS_TV_ANALOG 153
    288#define SAA7134_BOARD_AVERMEDIA_GO_007_FM_PLUS 154
    289#define SAA7134_BOARD_HAUPPAUGE_HVR1150     155
    290#define SAA7134_BOARD_HAUPPAUGE_HVR1120   156
    291#define SAA7134_BOARD_AVERMEDIA_STUDIO_507UA 157
    292#define SAA7134_BOARD_AVERMEDIA_CARDBUS_501 158
    293#define SAA7134_BOARD_BEHOLD_505RDS_MK5     159
    294#define SAA7134_BOARD_BEHOLD_507RDS_MK3     160
    295#define SAA7134_BOARD_BEHOLD_507RDS_MK5     161
    296#define SAA7134_BOARD_BEHOLD_607FM_MK5      162
    297#define SAA7134_BOARD_BEHOLD_609FM_MK3      163
    298#define SAA7134_BOARD_BEHOLD_609FM_MK5      164
    299#define SAA7134_BOARD_BEHOLD_607RDS_MK3     165
    300#define SAA7134_BOARD_BEHOLD_607RDS_MK5     166
    301#define SAA7134_BOARD_BEHOLD_609RDS_MK3     167
    302#define SAA7134_BOARD_BEHOLD_609RDS_MK5     168
    303#define SAA7134_BOARD_VIDEOMATE_S350        169
    304#define SAA7134_BOARD_AVERMEDIA_STUDIO_505  170
    305#define SAA7134_BOARD_BEHOLD_X7             171
    306#define SAA7134_BOARD_ROVERMEDIA_LINK_PRO_FM 172
    307#define SAA7134_BOARD_ZOLID_HYBRID_PCI		173
    308#define SAA7134_BOARD_ASUS_EUROPA_HYBRID	174
    309#define SAA7134_BOARD_LEADTEK_WINFAST_DTV1000S 175
    310#define SAA7134_BOARD_BEHOLD_505RDS_MK3     176
    311#define SAA7134_BOARD_HAWELL_HW_404M7		177
    312#define SAA7134_BOARD_BEHOLD_H7             178
    313#define SAA7134_BOARD_BEHOLD_A7             179
    314#define SAA7134_BOARD_AVERMEDIA_M733A       180
    315#define SAA7134_BOARD_TECHNOTREND_BUDGET_T3000 181
    316#define SAA7134_BOARD_KWORLD_PCI_SBTVD_FULLSEG 182
    317#define SAA7134_BOARD_VIDEOMATE_M1F         183
    318#define SAA7134_BOARD_ENCORE_ENLTV_FM3      184
    319#define SAA7134_BOARD_MAGICPRO_PROHDTV_PRO2 185
    320#define SAA7134_BOARD_BEHOLD_501            186
    321#define SAA7134_BOARD_BEHOLD_503FM          187
    322#define SAA7134_BOARD_SENSORAY811_911       188
    323#define SAA7134_BOARD_KWORLD_PC150U         189
    324#define SAA7134_BOARD_ASUSTeK_PS3_100      190
    325#define SAA7134_BOARD_HAWELL_HW_9004V1      191
    326#define SAA7134_BOARD_AVERMEDIA_A706		192
    327#define SAA7134_BOARD_WIS_VOYAGER           193
    328#define SAA7134_BOARD_AVERMEDIA_505         194
    329#define SAA7134_BOARD_LEADTEK_WINFAST_TV2100_FM 195
    330#define SAA7134_BOARD_SNAZIO_TVPVR_PRO      196
    331#define SAA7134_BOARD_LEADTEK_WINFAST_HDTV200_H 197
    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	unsigned long              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