root/drivers/media/pci/saa7134/saa7134.h

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

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. is_empress

   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 
  46 enum 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 
  55 enum saa7134_audio_in {
  56         TV    = 1,
  57         LINE1 = 2,
  58         LINE2 = 3,
  59         LINE2_LEFT,
  60 };
  61 
  62 enum saa7134_video_out {
  63         CCIR656 = 1,
  64 };
  65 
  66 /* ----------------------------------------------------------- */
  67 /* static data                                                 */
  68 
  69 struct 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 
  92 struct saa7134_tvaudio {
  93         char         *name;
  94         v4l2_std_id  std;
  95         enum         saa7134_tvaudio_mode mode;
  96         int          carr1;
  97         int          carr2;
  98 };
  99 
 100 struct 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 
 113 struct 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 
 332 #define SAA7134_MAXBOARDS 32
 333 #define SAA7134_INPUT_MAX 8
 334 
 335 /* ----------------------------------------------------------- */
 336 /* Since we support 2 remote types, lets tell them apart       */
 337 
 338 #define SAA7134_REMOTE_GPIO  1
 339 #define SAA7134_REMOTE_I2C   2
 340 
 341 /* ----------------------------------------------------------- */
 342 /* Video Output Port Register Initialization Options           */
 343 
 344 #define SET_T_CODE_POLARITY_NON_INVERTED        (1 << 0)
 345 #define SET_CLOCK_NOT_DELAYED                   (1 << 1)
 346 #define SET_CLOCK_INVERTED                      (1 << 2)
 347 #define SET_VSYNC_OFF                           (1 << 3)
 348 
 349 enum saa7134_input_types {
 350         SAA7134_NO_INPUT = 0,
 351         SAA7134_INPUT_MUTE,
 352         SAA7134_INPUT_RADIO,
 353         SAA7134_INPUT_TV,
 354         SAA7134_INPUT_TV_MONO,
 355         SAA7134_INPUT_COMPOSITE,
 356         SAA7134_INPUT_COMPOSITE0,
 357         SAA7134_INPUT_COMPOSITE1,
 358         SAA7134_INPUT_COMPOSITE2,
 359         SAA7134_INPUT_COMPOSITE3,
 360         SAA7134_INPUT_COMPOSITE4,
 361         SAA7134_INPUT_SVIDEO,
 362         SAA7134_INPUT_SVIDEO0,
 363         SAA7134_INPUT_SVIDEO1,
 364         SAA7134_INPUT_COMPOSITE_OVER_SVIDEO,
 365 };
 366 
 367 struct saa7134_input {
 368         enum saa7134_input_types type;
 369         unsigned int             vmux;
 370         enum saa7134_audio_in    amux;
 371         unsigned int             gpio;
 372 };
 373 
 374 enum saa7134_mpeg_type {
 375         SAA7134_MPEG_UNUSED,
 376         SAA7134_MPEG_EMPRESS,
 377         SAA7134_MPEG_DVB,
 378         SAA7134_MPEG_GO7007,
 379 };
 380 
 381 enum saa7134_mpeg_ts_type {
 382         SAA7134_MPEG_TS_PARALLEL = 0,
 383         SAA7134_MPEG_TS_SERIAL,
 384 };
 385 
 386 struct saa7134_board {
 387         char                    *name;
 388         unsigned int            audio_clock;
 389 
 390         /* input switching */
 391         unsigned int            gpiomask;
 392         struct saa7134_input    inputs[SAA7134_INPUT_MAX];
 393         struct saa7134_input    radio;
 394         struct saa7134_input    mute;
 395 
 396         /* i2c chip info */
 397         unsigned int            tuner_type;
 398         unsigned int            radio_type;
 399         unsigned char           tuner_addr;
 400         unsigned char           radio_addr;
 401         unsigned char           empress_addr;
 402         unsigned char           rds_addr;
 403 
 404         unsigned int            tda9887_conf;
 405         struct tda829x_config   tda829x_conf;
 406 
 407         /* peripheral I/O */
 408         enum saa7134_video_out  video_out;
 409         enum saa7134_mpeg_type  mpeg;
 410         enum saa7134_mpeg_ts_type ts_type;
 411         unsigned int            vid_port_opts;
 412         unsigned int            ts_force_val:1;
 413 };
 414 
 415 #define card_has_radio(dev)   (SAA7134_NO_INPUT != saa7134_boards[dev->board].radio.type)
 416 #define card_is_empress(dev)  (SAA7134_MPEG_EMPRESS == saa7134_boards[dev->board].mpeg)
 417 #define card_is_dvb(dev)      (SAA7134_MPEG_DVB     == saa7134_boards[dev->board].mpeg)
 418 #define card_is_go7007(dev)   (SAA7134_MPEG_GO7007  == saa7134_boards[dev->board].mpeg)
 419 #define card_has_mpeg(dev)    (SAA7134_MPEG_UNUSED  != saa7134_boards[dev->board].mpeg)
 420 #define card(dev)             (saa7134_boards[dev->board])
 421 #define card_in(dev,n)        (saa7134_boards[dev->board].inputs[n])
 422 
 423 #define V4L2_CID_PRIVATE_INVERT      (V4L2_CID_USER_SAA7134_BASE + 0)
 424 #define V4L2_CID_PRIVATE_Y_ODD       (V4L2_CID_USER_SAA7134_BASE + 1)
 425 #define V4L2_CID_PRIVATE_Y_EVEN      (V4L2_CID_USER_SAA7134_BASE + 2)
 426 #define V4L2_CID_PRIVATE_AUTOMUTE    (V4L2_CID_USER_SAA7134_BASE + 3)
 427 
 428 /* ----------------------------------------------------------- */
 429 /* device / file handle status                                 */
 430 
 431 #define RESOURCE_OVERLAY       1
 432 #define RESOURCE_VIDEO         2
 433 #define RESOURCE_VBI           4
 434 #define RESOURCE_EMPRESS       8
 435 
 436 #define INTERLACE_AUTO         0
 437 #define INTERLACE_ON           1
 438 #define INTERLACE_OFF          2
 439 
 440 #define BUFFER_TIMEOUT     msecs_to_jiffies(500)  /* 0.5 seconds */
 441 #define TS_BUFFER_TIMEOUT  msecs_to_jiffies(1000)  /* 1 second */
 442 
 443 struct saa7134_dev;
 444 struct saa7134_dma;
 445 
 446 /* saa7134 page table */
 447 struct saa7134_pgtable {
 448         unsigned int               size;
 449         __le32                     *cpu;
 450         dma_addr_t                 dma;
 451 };
 452 
 453 /* tvaudio thread status */
 454 struct saa7134_thread {
 455         struct task_struct         *thread;
 456         unsigned int               scan1;
 457         unsigned int               scan2;
 458         unsigned int               mode;
 459         unsigned int               stopped;
 460 };
 461 
 462 /* buffer for one video/vbi/ts frame */
 463 struct saa7134_buf {
 464         /* common v4l buffer stuff -- must be first */
 465         struct vb2_v4l2_buffer vb2;
 466 
 467         /* saa7134 specific */
 468         unsigned int            top_seen;
 469         int (*activate)(struct saa7134_dev *dev,
 470                         struct saa7134_buf *buf,
 471                         struct saa7134_buf *next);
 472 
 473         struct list_head        entry;
 474 };
 475 
 476 struct saa7134_dmaqueue {
 477         struct saa7134_dev         *dev;
 478         struct saa7134_buf         *curr;
 479         struct list_head           queue;
 480         struct timer_list          timeout;
 481         unsigned int               need_two;
 482         unsigned int               seq_nr;
 483         struct saa7134_pgtable     pt;
 484 };
 485 
 486 /* dmasound dsp status */
 487 struct saa7134_dmasound {
 488         struct mutex               lock;
 489         int                        minor_mixer;
 490         int                        minor_dsp;
 491         unsigned int               users_dsp;
 492 
 493         /* mixer */
 494         enum saa7134_audio_in      input;
 495         unsigned int               count;
 496         unsigned int               line1;
 497         unsigned int               line2;
 498 
 499         /* dsp */
 500         unsigned int               afmt;
 501         unsigned int               rate;
 502         unsigned int               channels;
 503         unsigned int               recording_on;
 504         unsigned int               dma_running;
 505         unsigned int               blocks;
 506         unsigned int               blksize;
 507         unsigned int               bufsize;
 508         struct saa7134_pgtable     pt;
 509         void                       *vaddr;
 510         struct scatterlist         *sglist;
 511         int                        sglen;
 512         int                        nr_pages;
 513         unsigned int               dma_blk;
 514         unsigned int               read_offset;
 515         unsigned int               read_count;
 516         void *                     priv_data;
 517         struct snd_pcm_substream   *substream;
 518 };
 519 
 520 /* ts/mpeg status */
 521 struct saa7134_ts {
 522         /* TS capture */
 523         int                        nr_packets;
 524         int                        nr_bufs;
 525 };
 526 
 527 /* ts/mpeg ops */
 528 struct saa7134_mpeg_ops {
 529         enum saa7134_mpeg_type     type;
 530         struct list_head           next;
 531         int                        (*init)(struct saa7134_dev *dev);
 532         int                        (*fini)(struct saa7134_dev *dev);
 533         void                       (*signal_change)(struct saa7134_dev *dev);
 534         void                       (*irq_ts_done)(struct saa7134_dev *dev,
 535                                                   unsigned long status);
 536 };
 537 
 538 enum saa7134_pads {
 539         SAA7134_PAD_IF_INPUT,
 540         SAA7134_PAD_VID_OUT,
 541         SAA7134_NUM_PADS
 542 };
 543 
 544 /* global device status */
 545 struct saa7134_dev {
 546         struct list_head           devlist;
 547         struct mutex               lock;
 548         spinlock_t                 slock;
 549         struct v4l2_device         v4l2_dev;
 550         /* workstruct for loading modules */
 551         struct work_struct request_module_wk;
 552 
 553         /* insmod option/autodetected */
 554         int                        autodetected;
 555 
 556         /* various device info */
 557         unsigned int               resources;
 558         struct video_device        *video_dev;
 559         struct video_device        *radio_dev;
 560         struct video_device        *vbi_dev;
 561         struct saa7134_dmasound    dmasound;
 562 
 563         /* infrared remote */
 564         int                        has_remote;
 565         struct saa7134_card_ir     *remote;
 566 
 567         /* pci i/o */
 568         char                       name[32];
 569         int                        nr;
 570         struct pci_dev             *pci;
 571         unsigned char              pci_rev,pci_lat;
 572         __u32                      __iomem *lmmio;
 573         __u8                       __iomem *bmmio;
 574 
 575         /* config info */
 576         unsigned int               board;
 577         unsigned int               tuner_type;
 578         unsigned int               radio_type;
 579         unsigned char              tuner_addr;
 580         unsigned char              radio_addr;
 581 
 582         unsigned int               tda9887_conf;
 583         unsigned int               gpio_value;
 584 
 585         /* i2c i/o */
 586         struct i2c_adapter         i2c_adap;
 587         struct i2c_client          i2c_client;
 588         unsigned char              eedata[256];
 589         int                        has_rds;
 590 
 591         /* video overlay */
 592         struct v4l2_framebuffer    ovbuf;
 593         struct saa7134_format      *ovfmt;
 594         unsigned int               ovenable;
 595         enum v4l2_field            ovfield;
 596         struct v4l2_window         win;
 597         struct v4l2_clip           clips[8];
 598         unsigned int               nclips;
 599         struct v4l2_fh             *overlay_owner;
 600 
 601 
 602         /* video+ts+vbi capture */
 603         struct saa7134_dmaqueue    video_q;
 604         struct vb2_queue           video_vbq;
 605         struct saa7134_dmaqueue    vbi_q;
 606         struct vb2_queue           vbi_vbq;
 607         enum v4l2_field            field;
 608         struct saa7134_format      *fmt;
 609         unsigned int               width, height;
 610         unsigned int               vbi_hlen, vbi_vlen;
 611         struct pm_qos_request      qos_request;
 612 
 613         /* SAA7134_MPEG_* */
 614         struct saa7134_ts          ts;
 615         struct saa7134_dmaqueue    ts_q;
 616         enum v4l2_field            ts_field;
 617         int                        ts_started;
 618         struct saa7134_mpeg_ops    *mops;
 619 
 620         /* SAA7134_MPEG_EMPRESS only */
 621         struct video_device        *empress_dev;
 622         struct v4l2_subdev         *empress_sd;
 623         struct vb2_queue           empress_vbq;
 624         struct work_struct         empress_workqueue;
 625         int                        empress_started;
 626         struct v4l2_ctrl_handler   empress_ctrl_handler;
 627 
 628         /* various v4l controls */
 629         struct saa7134_tvnorm      *tvnorm;              /* video */
 630         struct saa7134_tvaudio     *tvaudio;
 631         struct v4l2_ctrl_handler   ctrl_handler;
 632         unsigned int               ctl_input;
 633         int                        ctl_bright;
 634         int                        ctl_contrast;
 635         int                        ctl_hue;
 636         int                        ctl_saturation;
 637         int                        ctl_mute;             /* audio */
 638         int                        ctl_volume;
 639         int                        ctl_invert;           /* private */
 640         int                        ctl_mirror;
 641         int                        ctl_y_odd;
 642         int                        ctl_y_even;
 643         int                        ctl_automute;
 644 
 645         /* crop */
 646         struct v4l2_rect           crop_bounds;
 647         struct v4l2_rect           crop_defrect;
 648         struct v4l2_rect           crop_current;
 649 
 650         /* other global state info */
 651         unsigned int               automute;
 652         struct saa7134_thread      thread;
 653         struct saa7134_input       *input;
 654         struct saa7134_input       *hw_input;
 655         unsigned int               hw_mute;
 656         int                        last_carrier;
 657         int                        nosignal;
 658         unsigned int               insuspend;
 659         struct v4l2_ctrl_handler   radio_ctrl_handler;
 660 
 661         /* I2C keyboard data */
 662         struct IR_i2c_init_data    init_data;
 663 
 664 #ifdef CONFIG_MEDIA_CONTROLLER
 665         struct media_device *media_dev;
 666 
 667         struct media_entity input_ent[SAA7134_INPUT_MAX + 1];
 668         struct media_pad input_pad[SAA7134_INPUT_MAX + 1];
 669 
 670         struct media_entity demod;
 671         struct media_pad demod_pad[SAA7134_NUM_PADS];
 672 
 673         struct media_pad video_pad, vbi_pad;
 674         struct media_entity *decoder;
 675 #endif
 676 
 677 #if IS_ENABLED(CONFIG_VIDEO_SAA7134_DVB)
 678         /* SAA7134_MPEG_DVB only */
 679         struct vb2_dvb_frontends frontends;
 680         int (*original_demod_sleep)(struct dvb_frontend *fe);
 681         int (*original_set_voltage)(struct dvb_frontend *fe,
 682                                     enum fe_sec_voltage voltage);
 683         int (*original_set_high_voltage)(struct dvb_frontend *fe, long arg);
 684 #endif
 685         void (*gate_ctrl)(struct saa7134_dev *dev, int open);
 686 };
 687 
 688 /* ----------------------------------------------------------- */
 689 
 690 #define saa_readl(reg)             readl(dev->lmmio + (reg))
 691 #define saa_writel(reg,value)      writel((value), dev->lmmio + (reg));
 692 #define saa_andorl(reg,mask,value) \
 693   writel((readl(dev->lmmio+(reg)) & ~(mask)) |\
 694   ((value) & (mask)), dev->lmmio+(reg))
 695 #define saa_setl(reg,bit)          saa_andorl((reg),(bit),(bit))
 696 #define saa_clearl(reg,bit)        saa_andorl((reg),(bit),0)
 697 
 698 #define saa_readb(reg)             readb(dev->bmmio + (reg))
 699 #define saa_writeb(reg,value)      writeb((value), dev->bmmio + (reg));
 700 #define saa_andorb(reg,mask,value) \
 701   writeb((readb(dev->bmmio+(reg)) & ~(mask)) |\
 702   ((value) & (mask)), dev->bmmio+(reg))
 703 #define saa_setb(reg,bit)          saa_andorb((reg),(bit),(bit))
 704 #define saa_clearb(reg,bit)        saa_andorb((reg),(bit),0)
 705 
 706 #define saa_wait(us) { udelay(us); }
 707 
 708 #define SAA7134_NORMS   (\
 709                 V4L2_STD_PAL    | V4L2_STD_PAL_N | \
 710                 V4L2_STD_PAL_Nc | V4L2_STD_SECAM | \
 711                 V4L2_STD_NTSC   | V4L2_STD_PAL_M | \
 712                 V4L2_STD_PAL_60)
 713 
 714 #define GRP_EMPRESS (1)
 715 #define saa_call_all(dev, o, f, args...) do {                           \
 716         if (dev->gate_ctrl)                                             \
 717                 dev->gate_ctrl(dev, 1);                                 \
 718         v4l2_device_call_all(&(dev)->v4l2_dev, 0, o, f , ##args);       \
 719         if (dev->gate_ctrl)                                             \
 720                 dev->gate_ctrl(dev, 0);                                 \
 721 } while (0)
 722 
 723 #define saa_call_empress(dev, o, f, args...) ({                         \
 724         long _rc;                                                       \
 725         if (dev->gate_ctrl)                                             \
 726                 dev->gate_ctrl(dev, 1);                                 \
 727         _rc = v4l2_device_call_until_err(&(dev)->v4l2_dev,              \
 728                                          GRP_EMPRESS, o, f , ##args);   \
 729         if (dev->gate_ctrl)                                             \
 730                 dev->gate_ctrl(dev, 0);                                 \
 731         _rc;                                                            \
 732 })
 733 
 734 static inline bool is_empress(struct file *file)
 735 {
 736         struct video_device *vdev = video_devdata(file);
 737         struct saa7134_dev *dev = video_get_drvdata(vdev);
 738 
 739         return vdev->queue == &dev->empress_vbq;
 740 }
 741 
 742 /* ----------------------------------------------------------- */
 743 /* saa7134-core.c                                              */
 744 
 745 extern struct list_head  saa7134_devlist;
 746 extern struct mutex saa7134_devlist_lock;
 747 extern int saa7134_no_overlay;
 748 extern bool saa7134_userptr;
 749 
 750 void saa7134_track_gpio(struct saa7134_dev *dev, const char *msg);
 751 void saa7134_set_gpio(struct saa7134_dev *dev, int bit_no, int value);
 752 
 753 #define SAA7134_PGTABLE_SIZE 4096
 754 
 755 int saa7134_pgtable_alloc(struct pci_dev *pci, struct saa7134_pgtable *pt);
 756 int  saa7134_pgtable_build(struct pci_dev *pci, struct saa7134_pgtable *pt,
 757                            struct scatterlist *list, unsigned int length,
 758                            unsigned int startpage);
 759 void saa7134_pgtable_free(struct pci_dev *pci, struct saa7134_pgtable *pt);
 760 
 761 int saa7134_buffer_count(unsigned int size, unsigned int count);
 762 int saa7134_buffer_startpage(struct saa7134_buf *buf);
 763 unsigned long saa7134_buffer_base(struct saa7134_buf *buf);
 764 
 765 int saa7134_buffer_queue(struct saa7134_dev *dev, struct saa7134_dmaqueue *q,
 766                          struct saa7134_buf *buf);
 767 void saa7134_buffer_finish(struct saa7134_dev *dev, struct saa7134_dmaqueue *q,
 768                            unsigned int state);
 769 void saa7134_buffer_next(struct saa7134_dev *dev, struct saa7134_dmaqueue *q);
 770 void saa7134_buffer_timeout(struct timer_list *t);
 771 void saa7134_stop_streaming(struct saa7134_dev *dev, struct saa7134_dmaqueue *q);
 772 
 773 int saa7134_set_dmabits(struct saa7134_dev *dev);
 774 
 775 extern int (*saa7134_dmasound_init)(struct saa7134_dev *dev);
 776 extern int (*saa7134_dmasound_exit)(struct saa7134_dev *dev);
 777 
 778 
 779 /* ----------------------------------------------------------- */
 780 /* saa7134-cards.c                                             */
 781 
 782 extern struct saa7134_board saa7134_boards[];
 783 extern const char * const saa7134_input_name[];
 784 extern const unsigned int saa7134_bcount;
 785 extern struct pci_device_id saa7134_pci_tbl[];
 786 
 787 extern int saa7134_board_init1(struct saa7134_dev *dev);
 788 extern int saa7134_board_init2(struct saa7134_dev *dev);
 789 int saa7134_tuner_callback(void *priv, int component, int command, int arg);
 790 
 791 
 792 /* ----------------------------------------------------------- */
 793 /* saa7134-i2c.c                                               */
 794 
 795 int saa7134_i2c_register(struct saa7134_dev *dev);
 796 int saa7134_i2c_unregister(struct saa7134_dev *dev);
 797 
 798 
 799 /* ----------------------------------------------------------- */
 800 /* saa7134-video.c                                             */
 801 
 802 extern unsigned int video_debug;
 803 extern struct video_device saa7134_video_template;
 804 extern struct video_device saa7134_radio_template;
 805 
 806 void saa7134_vb2_buffer_queue(struct vb2_buffer *vb);
 807 int saa7134_vb2_start_streaming(struct vb2_queue *vq, unsigned int count);
 808 void saa7134_vb2_stop_streaming(struct vb2_queue *vq);
 809 
 810 int saa7134_s_std(struct file *file, void *priv, v4l2_std_id id);
 811 int saa7134_g_std(struct file *file, void *priv, v4l2_std_id *id);
 812 int saa7134_querystd(struct file *file, void *priv, v4l2_std_id *std);
 813 int saa7134_enum_input(struct file *file, void *priv, struct v4l2_input *i);
 814 int saa7134_g_input(struct file *file, void *priv, unsigned int *i);
 815 int saa7134_s_input(struct file *file, void *priv, unsigned int i);
 816 int saa7134_querycap(struct file *file, void  *priv,
 817                                         struct v4l2_capability *cap);
 818 int saa7134_g_tuner(struct file *file, void *priv,
 819                                         struct v4l2_tuner *t);
 820 int saa7134_s_tuner(struct file *file, void *priv,
 821                                         const struct v4l2_tuner *t);
 822 int saa7134_g_frequency(struct file *file, void *priv,
 823                                         struct v4l2_frequency *f);
 824 int saa7134_s_frequency(struct file *file, void *priv,
 825                                         const struct v4l2_frequency *f);
 826 
 827 int saa7134_videoport_init(struct saa7134_dev *dev);
 828 void saa7134_set_tvnorm_hw(struct saa7134_dev *dev);
 829 
 830 int saa7134_video_init1(struct saa7134_dev *dev);
 831 int saa7134_video_init2(struct saa7134_dev *dev);
 832 void saa7134_irq_video_signalchange(struct saa7134_dev *dev);
 833 void saa7134_irq_video_done(struct saa7134_dev *dev, unsigned long status);
 834 void saa7134_video_fini(struct saa7134_dev *dev);
 835 
 836 
 837 /* ----------------------------------------------------------- */
 838 /* saa7134-ts.c                                                */
 839 
 840 #define TS_PACKET_SIZE 188 /* TS packets 188 bytes */
 841 
 842 int saa7134_ts_buffer_init(struct vb2_buffer *vb2);
 843 int saa7134_ts_buffer_prepare(struct vb2_buffer *vb2);
 844 int saa7134_ts_queue_setup(struct vb2_queue *q,
 845                            unsigned int *nbuffers, unsigned int *nplanes,
 846                            unsigned int sizes[], struct device *alloc_devs[]);
 847 int saa7134_ts_start_streaming(struct vb2_queue *vq, unsigned int count);
 848 void saa7134_ts_stop_streaming(struct vb2_queue *vq);
 849 
 850 extern struct vb2_ops saa7134_ts_qops;
 851 
 852 int saa7134_ts_init1(struct saa7134_dev *dev);
 853 int saa7134_ts_fini(struct saa7134_dev *dev);
 854 void saa7134_irq_ts_done(struct saa7134_dev *dev, unsigned long status);
 855 
 856 int saa7134_ts_register(struct saa7134_mpeg_ops *ops);
 857 void saa7134_ts_unregister(struct saa7134_mpeg_ops *ops);
 858 
 859 int saa7134_ts_init_hw(struct saa7134_dev *dev);
 860 
 861 int saa7134_ts_start(struct saa7134_dev *dev);
 862 int saa7134_ts_stop(struct saa7134_dev *dev);
 863 
 864 /* ----------------------------------------------------------- */
 865 /* saa7134-vbi.c                                               */
 866 
 867 extern const struct vb2_ops saa7134_vbi_qops;
 868 extern struct video_device saa7134_vbi_template;
 869 
 870 int saa7134_vbi_init1(struct saa7134_dev *dev);
 871 int saa7134_vbi_fini(struct saa7134_dev *dev);
 872 void saa7134_irq_vbi_done(struct saa7134_dev *dev, unsigned long status);
 873 
 874 
 875 /* ----------------------------------------------------------- */
 876 /* saa7134-tvaudio.c                                           */
 877 
 878 int saa7134_tvaudio_rx2mode(u32 rx);
 879 
 880 void saa7134_tvaudio_setmute(struct saa7134_dev *dev);
 881 void saa7134_tvaudio_setinput(struct saa7134_dev *dev,
 882                               struct saa7134_input *in);
 883 void saa7134_tvaudio_setvolume(struct saa7134_dev *dev, int level);
 884 int saa7134_tvaudio_getstereo(struct saa7134_dev *dev);
 885 
 886 void saa7134_tvaudio_init(struct saa7134_dev *dev);
 887 int saa7134_tvaudio_init2(struct saa7134_dev *dev);
 888 int saa7134_tvaudio_fini(struct saa7134_dev *dev);
 889 int saa7134_tvaudio_do_scan(struct saa7134_dev *dev);
 890 int saa7134_tvaudio_close(struct saa7134_dev *dev);
 891 
 892 int saa_dsp_writel(struct saa7134_dev *dev, int reg, u32 value);
 893 
 894 void saa7134_enable_i2s(struct saa7134_dev *dev);
 895 
 896 /* ----------------------------------------------------------- */
 897 /* saa7134-oss.c                                               */
 898 
 899 extern const struct file_operations saa7134_dsp_fops;
 900 extern const struct file_operations saa7134_mixer_fops;
 901 
 902 int saa7134_oss_init1(struct saa7134_dev *dev);
 903 int saa7134_oss_fini(struct saa7134_dev *dev);
 904 void saa7134_irq_oss_done(struct saa7134_dev *dev, unsigned long status);
 905 
 906 /* ----------------------------------------------------------- */
 907 /* saa7134-input.c                                             */
 908 
 909 #if defined(CONFIG_VIDEO_SAA7134_RC)
 910 int  saa7134_input_init1(struct saa7134_dev *dev);
 911 void saa7134_input_fini(struct saa7134_dev *dev);
 912 void saa7134_input_irq(struct saa7134_dev *dev);
 913 void saa7134_probe_i2c_ir(struct saa7134_dev *dev);
 914 int saa7134_ir_open(struct rc_dev *dev);
 915 void saa7134_ir_close(struct rc_dev *dev);
 916 #else
 917 #define saa7134_input_init1(dev)        ((void)0)
 918 #define saa7134_input_fini(dev)         ((void)0)
 919 #define saa7134_input_irq(dev)          ((void)0)
 920 #define saa7134_probe_i2c_ir(dev)       ((void)0)
 921 #define saa7134_ir_open(dev)            ((void)0)
 922 #define saa7134_ir_close(dev)           ((void)0)
 923 #endif

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