1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun Functions to query card hardware 4*4882a593Smuzhiyun Copyright (C) 2003-2004 Kevin Thayer <nufan_wfk at yahoo.com> 5*4882a593Smuzhiyun Copyright (C) 2005-2007 Hans Verkuil <hverkuil@xs4all.nl> 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun */ 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #ifndef IVTV_CARDS_H 10*4882a593Smuzhiyun #define IVTV_CARDS_H 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun /* Supported cards */ 13*4882a593Smuzhiyun #define IVTV_CARD_PVR_250 0 /* WinTV PVR 250 */ 14*4882a593Smuzhiyun #define IVTV_CARD_PVR_350 1 /* encoder, decoder, tv-out */ 15*4882a593Smuzhiyun #define IVTV_CARD_PVR_150 2 /* WinTV PVR 150 and PVR 500 (really just two 16*4882a593Smuzhiyun PVR150s on one PCI board) */ 17*4882a593Smuzhiyun #define IVTV_CARD_M179 3 /* AVerMedia M179 (encoder only) */ 18*4882a593Smuzhiyun #define IVTV_CARD_MPG600 4 /* Kuroutoshikou ITVC16-STVLP/YUAN MPG600, encoder only */ 19*4882a593Smuzhiyun #define IVTV_CARD_MPG160 5 /* Kuroutoshikou ITVC15-STVLP/YUAN MPG160 20*4882a593Smuzhiyun cx23415 based, but does not have tv-out */ 21*4882a593Smuzhiyun #define IVTV_CARD_PG600 6 /* YUAN PG600/DIAMONDMM PVR-550 based on the CX Falcon 2 */ 22*4882a593Smuzhiyun #define IVTV_CARD_AVC2410 7 /* Adaptec AVC-2410 */ 23*4882a593Smuzhiyun #define IVTV_CARD_AVC2010 8 /* Adaptec AVD-2010 (No Tuner) */ 24*4882a593Smuzhiyun #define IVTV_CARD_TG5000TV 9 /* NAGASE TRANSGEAR 5000TV, encoder only */ 25*4882a593Smuzhiyun #define IVTV_CARD_VA2000MAX_SNT6 10 /* VA2000MAX-STN6 */ 26*4882a593Smuzhiyun #define IVTV_CARD_CX23416GYC 11 /* Kuroutoshikou CX23416GYC-STVLP (Yuan MPG600GR OEM) */ 27*4882a593Smuzhiyun #define IVTV_CARD_GV_MVPRX 12 /* I/O Data GV-MVP/RX, RX2, RX2W */ 28*4882a593Smuzhiyun #define IVTV_CARD_GV_MVPRX2E 13 /* I/O Data GV-MVP/RX2E */ 29*4882a593Smuzhiyun #define IVTV_CARD_GOTVIEW_PCI_DVD 14 /* GotView PCI DVD */ 30*4882a593Smuzhiyun #define IVTV_CARD_GOTVIEW_PCI_DVD2 15 /* GotView PCI DVD2 */ 31*4882a593Smuzhiyun #define IVTV_CARD_YUAN_MPC622 16 /* Yuan MPC622 miniPCI */ 32*4882a593Smuzhiyun #define IVTV_CARD_DCTMTVP1 17 /* DIGITAL COWBOY DCT-MTVP1 */ 33*4882a593Smuzhiyun #define IVTV_CARD_PG600V2 18 /* Yuan PG600V2/GotView PCI DVD Lite */ 34*4882a593Smuzhiyun #define IVTV_CARD_CLUB3D 19 /* Club3D ZAP-TV1x01 */ 35*4882a593Smuzhiyun #define IVTV_CARD_AVERTV_MCE116 20 /* AVerTV MCE 116 Plus */ 36*4882a593Smuzhiyun #define IVTV_CARD_ASUS_FALCON2 21 /* ASUS Falcon2 */ 37*4882a593Smuzhiyun #define IVTV_CARD_AVER_PVR150PLUS 22 /* AVerMedia PVR-150 Plus */ 38*4882a593Smuzhiyun #define IVTV_CARD_AVER_EZMAKER 23 /* AVerMedia EZMaker PCI Deluxe */ 39*4882a593Smuzhiyun #define IVTV_CARD_AVER_M104 24 /* AverMedia M104 miniPCI card */ 40*4882a593Smuzhiyun #define IVTV_CARD_BUFFALO_MV5L 25 /* Buffalo PC-MV5L/PCI card */ 41*4882a593Smuzhiyun #define IVTV_CARD_AVER_ULTRA1500MCE 26 /* AVerMedia UltraTV 1500 MCE */ 42*4882a593Smuzhiyun #define IVTV_CARD_KIKYOU 27 /* Sony VAIO Giga Pocket (ENX Kikyou) */ 43*4882a593Smuzhiyun #define IVTV_CARD_LAST 27 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun /* Variants of existing cards but with the same PCI IDs. The driver 46*4882a593Smuzhiyun detects these based on other device information. 47*4882a593Smuzhiyun These cards must always come last. 48*4882a593Smuzhiyun New cards must be inserted above, and the indices of the cards below 49*4882a593Smuzhiyun must be adjusted accordingly. */ 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun /* PVR-350 V1 (uses saa7114) */ 52*4882a593Smuzhiyun #define IVTV_CARD_PVR_350_V1 (IVTV_CARD_LAST+1) 53*4882a593Smuzhiyun /* 2 variants of Kuroutoshikou CX23416GYC-STVLP (Yuan MPG600GR OEM) */ 54*4882a593Smuzhiyun #define IVTV_CARD_CX23416GYC_NOGR (IVTV_CARD_LAST+2) 55*4882a593Smuzhiyun #define IVTV_CARD_CX23416GYC_NOGRYCS (IVTV_CARD_LAST+3) 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun /* system vendor and device IDs */ 58*4882a593Smuzhiyun #define PCI_VENDOR_ID_ICOMP 0x4444 59*4882a593Smuzhiyun #define PCI_DEVICE_ID_IVTV15 0x0803 60*4882a593Smuzhiyun #define PCI_DEVICE_ID_IVTV16 0x0016 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun /* subsystem vendor ID */ 63*4882a593Smuzhiyun #define IVTV_PCI_ID_HAUPPAUGE 0x0070 64*4882a593Smuzhiyun #define IVTV_PCI_ID_HAUPPAUGE_ALT1 0x0270 65*4882a593Smuzhiyun #define IVTV_PCI_ID_HAUPPAUGE_ALT2 0x4070 66*4882a593Smuzhiyun #define IVTV_PCI_ID_ADAPTEC 0x9005 67*4882a593Smuzhiyun #define IVTV_PCI_ID_ASUSTEK 0x1043 68*4882a593Smuzhiyun #define IVTV_PCI_ID_AVERMEDIA 0x1461 69*4882a593Smuzhiyun #define IVTV_PCI_ID_YUAN1 0x12ab 70*4882a593Smuzhiyun #define IVTV_PCI_ID_YUAN2 0xff01 71*4882a593Smuzhiyun #define IVTV_PCI_ID_YUAN3 0xffab 72*4882a593Smuzhiyun #define IVTV_PCI_ID_YUAN4 0xfbab 73*4882a593Smuzhiyun #define IVTV_PCI_ID_DIAMONDMM 0xff92 74*4882a593Smuzhiyun #define IVTV_PCI_ID_IODATA 0x10fc 75*4882a593Smuzhiyun #define IVTV_PCI_ID_MELCO 0x1154 76*4882a593Smuzhiyun #define IVTV_PCI_ID_GOTVIEW1 0xffac 77*4882a593Smuzhiyun #define IVTV_PCI_ID_GOTVIEW2 0xffad 78*4882a593Smuzhiyun #define IVTV_PCI_ID_SONY 0x104d 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun /* hardware flags, no gaps allowed */ 81*4882a593Smuzhiyun #define IVTV_HW_CX25840 (1 << 0) 82*4882a593Smuzhiyun #define IVTV_HW_SAA7115 (1 << 1) 83*4882a593Smuzhiyun #define IVTV_HW_SAA7127 (1 << 2) 84*4882a593Smuzhiyun #define IVTV_HW_MSP34XX (1 << 3) 85*4882a593Smuzhiyun #define IVTV_HW_TUNER (1 << 4) 86*4882a593Smuzhiyun #define IVTV_HW_WM8775 (1 << 5) 87*4882a593Smuzhiyun #define IVTV_HW_CS53L32A (1 << 6) 88*4882a593Smuzhiyun #define IVTV_HW_TVEEPROM (1 << 7) 89*4882a593Smuzhiyun #define IVTV_HW_SAA7114 (1 << 8) 90*4882a593Smuzhiyun #define IVTV_HW_UPD64031A (1 << 9) 91*4882a593Smuzhiyun #define IVTV_HW_UPD6408X (1 << 10) 92*4882a593Smuzhiyun #define IVTV_HW_SAA717X (1 << 11) 93*4882a593Smuzhiyun #define IVTV_HW_WM8739 (1 << 12) 94*4882a593Smuzhiyun #define IVTV_HW_VP27SMPX (1 << 13) 95*4882a593Smuzhiyun #define IVTV_HW_M52790 (1 << 14) 96*4882a593Smuzhiyun #define IVTV_HW_GPIO (1 << 15) 97*4882a593Smuzhiyun #define IVTV_HW_I2C_IR_RX_AVER (1 << 16) 98*4882a593Smuzhiyun #define IVTV_HW_I2C_IR_RX_HAUP_EXT (1 << 17) /* External before internal */ 99*4882a593Smuzhiyun #define IVTV_HW_I2C_IR_RX_HAUP_INT (1 << 18) 100*4882a593Smuzhiyun #define IVTV_HW_Z8F0811_IR_HAUP (1 << 19) 101*4882a593Smuzhiyun #define IVTV_HW_I2C_IR_RX_ADAPTEC (1 << 20) 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun #define IVTV_HW_SAA711X (IVTV_HW_SAA7115 | IVTV_HW_SAA7114) 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun #define IVTV_HW_IR_ANY (IVTV_HW_I2C_IR_RX_AVER | \ 106*4882a593Smuzhiyun IVTV_HW_I2C_IR_RX_HAUP_EXT | \ 107*4882a593Smuzhiyun IVTV_HW_I2C_IR_RX_HAUP_INT | \ 108*4882a593Smuzhiyun IVTV_HW_Z8F0811_IR_HAUP | \ 109*4882a593Smuzhiyun IVTV_HW_I2C_IR_RX_ADAPTEC) 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun /* video inputs */ 112*4882a593Smuzhiyun #define IVTV_CARD_INPUT_VID_TUNER 1 113*4882a593Smuzhiyun #define IVTV_CARD_INPUT_SVIDEO1 2 114*4882a593Smuzhiyun #define IVTV_CARD_INPUT_SVIDEO2 3 115*4882a593Smuzhiyun #define IVTV_CARD_INPUT_COMPOSITE1 4 116*4882a593Smuzhiyun #define IVTV_CARD_INPUT_COMPOSITE2 5 117*4882a593Smuzhiyun #define IVTV_CARD_INPUT_COMPOSITE3 6 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun /* audio inputs */ 120*4882a593Smuzhiyun #define IVTV_CARD_INPUT_AUD_TUNER 1 121*4882a593Smuzhiyun #define IVTV_CARD_INPUT_LINE_IN1 2 122*4882a593Smuzhiyun #define IVTV_CARD_INPUT_LINE_IN2 3 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun #define IVTV_CARD_MAX_VIDEO_INPUTS 6 125*4882a593Smuzhiyun #define IVTV_CARD_MAX_AUDIO_INPUTS 3 126*4882a593Smuzhiyun #define IVTV_CARD_MAX_TUNERS 3 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun /* SAA71XX HW inputs */ 129*4882a593Smuzhiyun #define IVTV_SAA71XX_COMPOSITE0 0 130*4882a593Smuzhiyun #define IVTV_SAA71XX_COMPOSITE1 1 131*4882a593Smuzhiyun #define IVTV_SAA71XX_COMPOSITE2 2 132*4882a593Smuzhiyun #define IVTV_SAA71XX_COMPOSITE3 3 133*4882a593Smuzhiyun #define IVTV_SAA71XX_COMPOSITE4 4 134*4882a593Smuzhiyun #define IVTV_SAA71XX_COMPOSITE5 5 135*4882a593Smuzhiyun #define IVTV_SAA71XX_SVIDEO0 6 136*4882a593Smuzhiyun #define IVTV_SAA71XX_SVIDEO1 7 137*4882a593Smuzhiyun #define IVTV_SAA71XX_SVIDEO2 8 138*4882a593Smuzhiyun #define IVTV_SAA71XX_SVIDEO3 9 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun /* SAA717X needs to mark the tuner input by ORing with this flag */ 141*4882a593Smuzhiyun #define IVTV_SAA717X_TUNER_FLAG 0x80 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun /* Dummy HW input */ 144*4882a593Smuzhiyun #define IVTV_DUMMY_AUDIO 0 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun /* GPIO HW inputs */ 147*4882a593Smuzhiyun #define IVTV_GPIO_TUNER 0 148*4882a593Smuzhiyun #define IVTV_GPIO_LINE_IN 1 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun /* SAA717X HW inputs */ 151*4882a593Smuzhiyun #define IVTV_SAA717X_IN0 0 152*4882a593Smuzhiyun #define IVTV_SAA717X_IN1 1 153*4882a593Smuzhiyun #define IVTV_SAA717X_IN2 2 154*4882a593Smuzhiyun 155*4882a593Smuzhiyun /* V4L2 capability aliases */ 156*4882a593Smuzhiyun #define IVTV_CAP_ENCODER (V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_TUNER | \ 157*4882a593Smuzhiyun V4L2_CAP_AUDIO | V4L2_CAP_READWRITE | V4L2_CAP_VBI_CAPTURE | \ 158*4882a593Smuzhiyun V4L2_CAP_SLICED_VBI_CAPTURE) 159*4882a593Smuzhiyun #define IVTV_CAP_DECODER (V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_SLICED_VBI_OUTPUT) 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun struct ivtv_card_video_input { 162*4882a593Smuzhiyun u8 video_type; /* video input type */ 163*4882a593Smuzhiyun u8 audio_index; /* index in ivtv_card_audio_input array */ 164*4882a593Smuzhiyun u16 video_input; /* hardware video input */ 165*4882a593Smuzhiyun }; 166*4882a593Smuzhiyun 167*4882a593Smuzhiyun struct ivtv_card_audio_input { 168*4882a593Smuzhiyun u8 audio_type; /* audio input type */ 169*4882a593Smuzhiyun u32 audio_input; /* hardware audio input */ 170*4882a593Smuzhiyun u16 muxer_input; /* hardware muxer input for boards with a 171*4882a593Smuzhiyun multiplexer chip */ 172*4882a593Smuzhiyun }; 173*4882a593Smuzhiyun 174*4882a593Smuzhiyun struct ivtv_card_output { 175*4882a593Smuzhiyun u8 name[32]; 176*4882a593Smuzhiyun u16 video_output; /* hardware video output */ 177*4882a593Smuzhiyun }; 178*4882a593Smuzhiyun 179*4882a593Smuzhiyun struct ivtv_card_pci_info { 180*4882a593Smuzhiyun u16 device; 181*4882a593Smuzhiyun u16 subsystem_vendor; 182*4882a593Smuzhiyun u16 subsystem_device; 183*4882a593Smuzhiyun }; 184*4882a593Smuzhiyun 185*4882a593Smuzhiyun /* GPIO definitions */ 186*4882a593Smuzhiyun 187*4882a593Smuzhiyun /* The mask is the set of bits used by the operation */ 188*4882a593Smuzhiyun 189*4882a593Smuzhiyun struct ivtv_gpio_init { /* set initial GPIO DIR and OUT values */ 190*4882a593Smuzhiyun u16 direction; /* DIR setting. Leave to 0 if no init is needed */ 191*4882a593Smuzhiyun u16 initial_value; 192*4882a593Smuzhiyun }; 193*4882a593Smuzhiyun 194*4882a593Smuzhiyun struct ivtv_gpio_video_input { /* select tuner/line in input */ 195*4882a593Smuzhiyun u16 mask; /* leave to 0 if not supported */ 196*4882a593Smuzhiyun u16 tuner; 197*4882a593Smuzhiyun u16 composite; 198*4882a593Smuzhiyun u16 svideo; 199*4882a593Smuzhiyun }; 200*4882a593Smuzhiyun 201*4882a593Smuzhiyun struct ivtv_gpio_audio_input { /* select tuner/line in input */ 202*4882a593Smuzhiyun u16 mask; /* leave to 0 if not supported */ 203*4882a593Smuzhiyun u16 tuner; 204*4882a593Smuzhiyun u16 linein; 205*4882a593Smuzhiyun u16 radio; 206*4882a593Smuzhiyun }; 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun struct ivtv_gpio_audio_mute { 209*4882a593Smuzhiyun u16 mask; /* leave to 0 if not supported */ 210*4882a593Smuzhiyun u16 mute; /* set this value to mute, 0 to unmute */ 211*4882a593Smuzhiyun }; 212*4882a593Smuzhiyun 213*4882a593Smuzhiyun struct ivtv_gpio_audio_mode { 214*4882a593Smuzhiyun u16 mask; /* leave to 0 if not supported */ 215*4882a593Smuzhiyun u16 mono; /* set audio to mono */ 216*4882a593Smuzhiyun u16 stereo; /* set audio to stereo */ 217*4882a593Smuzhiyun u16 lang1; /* set audio to the first language */ 218*4882a593Smuzhiyun u16 lang2; /* set audio to the second language */ 219*4882a593Smuzhiyun u16 both; /* both languages are output */ 220*4882a593Smuzhiyun }; 221*4882a593Smuzhiyun 222*4882a593Smuzhiyun struct ivtv_gpio_audio_freq { 223*4882a593Smuzhiyun u16 mask; /* leave to 0 if not supported */ 224*4882a593Smuzhiyun u16 f32000; 225*4882a593Smuzhiyun u16 f44100; 226*4882a593Smuzhiyun u16 f48000; 227*4882a593Smuzhiyun }; 228*4882a593Smuzhiyun 229*4882a593Smuzhiyun struct ivtv_gpio_audio_detect { 230*4882a593Smuzhiyun u16 mask; /* leave to 0 if not supported */ 231*4882a593Smuzhiyun u16 stereo; /* if the input matches this value then 232*4882a593Smuzhiyun stereo is detected */ 233*4882a593Smuzhiyun }; 234*4882a593Smuzhiyun 235*4882a593Smuzhiyun struct ivtv_card_tuner { 236*4882a593Smuzhiyun v4l2_std_id std; /* standard for which the tuner is suitable */ 237*4882a593Smuzhiyun int tuner; /* tuner ID (from tuner.h) */ 238*4882a593Smuzhiyun }; 239*4882a593Smuzhiyun 240*4882a593Smuzhiyun struct ivtv_card_tuner_i2c { 241*4882a593Smuzhiyun unsigned short radio[2];/* radio tuner i2c address to probe */ 242*4882a593Smuzhiyun unsigned short demod[2];/* demodulator i2c address to probe */ 243*4882a593Smuzhiyun unsigned short tv[4]; /* tv tuner i2c addresses to probe */ 244*4882a593Smuzhiyun }; 245*4882a593Smuzhiyun 246*4882a593Smuzhiyun /* for card information/parameters */ 247*4882a593Smuzhiyun struct ivtv_card { 248*4882a593Smuzhiyun int type; 249*4882a593Smuzhiyun char *name; 250*4882a593Smuzhiyun char *comment; 251*4882a593Smuzhiyun u32 v4l2_capabilities; 252*4882a593Smuzhiyun u32 hw_video; /* hardware used to process video */ 253*4882a593Smuzhiyun u32 hw_audio; /* hardware used to process audio */ 254*4882a593Smuzhiyun u32 hw_audio_ctrl; /* hardware used for the V4L2 controls (only 1 dev allowed) */ 255*4882a593Smuzhiyun u32 hw_muxer; /* hardware used to multiplex audio input */ 256*4882a593Smuzhiyun u32 hw_all; /* all hardware used by the board */ 257*4882a593Smuzhiyun struct ivtv_card_video_input video_inputs[IVTV_CARD_MAX_VIDEO_INPUTS]; 258*4882a593Smuzhiyun struct ivtv_card_audio_input audio_inputs[IVTV_CARD_MAX_AUDIO_INPUTS]; 259*4882a593Smuzhiyun struct ivtv_card_audio_input radio_input; 260*4882a593Smuzhiyun int nof_outputs; 261*4882a593Smuzhiyun const struct ivtv_card_output *video_outputs; 262*4882a593Smuzhiyun u8 gr_config; /* config byte for the ghost reduction device */ 263*4882a593Smuzhiyun u8 xceive_pin; /* XCeive tuner GPIO reset pin */ 264*4882a593Smuzhiyun 265*4882a593Smuzhiyun /* GPIO card-specific settings */ 266*4882a593Smuzhiyun struct ivtv_gpio_init gpio_init; 267*4882a593Smuzhiyun struct ivtv_gpio_video_input gpio_video_input; 268*4882a593Smuzhiyun struct ivtv_gpio_audio_input gpio_audio_input; 269*4882a593Smuzhiyun struct ivtv_gpio_audio_mute gpio_audio_mute; 270*4882a593Smuzhiyun struct ivtv_gpio_audio_mode gpio_audio_mode; 271*4882a593Smuzhiyun struct ivtv_gpio_audio_freq gpio_audio_freq; 272*4882a593Smuzhiyun struct ivtv_gpio_audio_detect gpio_audio_detect; 273*4882a593Smuzhiyun 274*4882a593Smuzhiyun struct ivtv_card_tuner tuners[IVTV_CARD_MAX_TUNERS]; 275*4882a593Smuzhiyun struct ivtv_card_tuner_i2c *i2c; 276*4882a593Smuzhiyun 277*4882a593Smuzhiyun /* list of device and subsystem vendor/devices that 278*4882a593Smuzhiyun correspond to this card type. */ 279*4882a593Smuzhiyun const struct ivtv_card_pci_info *pci_list; 280*4882a593Smuzhiyun }; 281*4882a593Smuzhiyun 282*4882a593Smuzhiyun int ivtv_get_input(struct ivtv *itv, u16 index, struct v4l2_input *input); 283*4882a593Smuzhiyun int ivtv_get_output(struct ivtv *itv, u16 index, struct v4l2_output *output); 284*4882a593Smuzhiyun int ivtv_get_audio_input(struct ivtv *itv, u16 index, struct v4l2_audio *input); 285*4882a593Smuzhiyun int ivtv_get_audio_output(struct ivtv *itv, u16 index, struct v4l2_audioout *output); 286*4882a593Smuzhiyun const struct ivtv_card *ivtv_get_card(u16 index); 287*4882a593Smuzhiyun 288*4882a593Smuzhiyun #endif 289