0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "ivtv-driver.h"
0010 #include "ivtv-cards.h"
0011 #include "ivtv-i2c.h"
0012
0013 #include <media/drv-intf/msp3400.h>
0014 #include <media/i2c/m52790.h>
0015 #include <media/i2c/wm8775.h>
0016 #include <media/i2c/cs53l32a.h>
0017 #include <media/drv-intf/cx25840.h>
0018 #include <media/i2c/upd64031a.h>
0019
0020 #define MSP_TUNER MSP_INPUT(MSP_IN_SCART1, MSP_IN_TUNER1, \
0021 MSP_DSP_IN_TUNER, MSP_DSP_IN_TUNER)
0022 #define MSP_SCART1 MSP_INPUT(MSP_IN_SCART1, MSP_IN_TUNER1, \
0023 MSP_DSP_IN_SCART, MSP_DSP_IN_SCART)
0024 #define MSP_SCART2 MSP_INPUT(MSP_IN_SCART2, MSP_IN_TUNER1, \
0025 MSP_DSP_IN_SCART, MSP_DSP_IN_SCART)
0026 #define MSP_SCART3 MSP_INPUT(MSP_IN_SCART3, MSP_IN_TUNER1, \
0027 MSP_DSP_IN_SCART, MSP_DSP_IN_SCART)
0028 #define MSP_MONO MSP_INPUT(MSP_IN_MONO, MSP_IN_TUNER1, \
0029 MSP_DSP_IN_SCART, MSP_DSP_IN_SCART)
0030
0031 #define V4L2_STD_PAL_SECAM (V4L2_STD_PAL|V4L2_STD_SECAM)
0032
0033
0034 static struct ivtv_card_tuner_i2c ivtv_i2c_std = {
0035 .radio = { I2C_CLIENT_END },
0036 .demod = { 0x43, I2C_CLIENT_END },
0037 .tv = { 0x61, 0x60, I2C_CLIENT_END },
0038 };
0039
0040
0041 static struct ivtv_card_tuner_i2c ivtv_i2c_radio = {
0042 .radio = { 0x60, I2C_CLIENT_END },
0043 .demod = { 0x43, I2C_CLIENT_END },
0044 .tv = { 0x61, I2C_CLIENT_END },
0045 };
0046
0047
0048 static struct ivtv_card_tuner_i2c ivtv_i2c_tda8290 = {
0049 .radio = { I2C_CLIENT_END },
0050 .demod = { I2C_CLIENT_END },
0051 .tv = { 0x4b, I2C_CLIENT_END },
0052 };
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064 static const struct ivtv_card ivtv_card_pvr250 = {
0065 .type = IVTV_CARD_PVR_250,
0066 .name = "Hauppauge WinTV PVR-250",
0067 .v4l2_capabilities = IVTV_CAP_ENCODER,
0068 .hw_video = IVTV_HW_SAA7115,
0069 .hw_audio = IVTV_HW_MSP34XX,
0070 .hw_audio_ctrl = IVTV_HW_MSP34XX,
0071 .hw_all = IVTV_HW_MSP34XX | IVTV_HW_SAA7115 |
0072 IVTV_HW_TVEEPROM | IVTV_HW_TUNER,
0073 .video_inputs = {
0074 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 },
0075 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 },
0076 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE0 },
0077 { IVTV_CARD_INPUT_SVIDEO2, 2, IVTV_SAA71XX_SVIDEO1 },
0078 { IVTV_CARD_INPUT_COMPOSITE2, 2, IVTV_SAA71XX_COMPOSITE1 },
0079 { IVTV_CARD_INPUT_COMPOSITE3, 1, IVTV_SAA71XX_COMPOSITE5 },
0080 },
0081 .audio_inputs = {
0082 { IVTV_CARD_INPUT_AUD_TUNER, MSP_TUNER },
0083 { IVTV_CARD_INPUT_LINE_IN1, MSP_SCART1 },
0084 { IVTV_CARD_INPUT_LINE_IN2, MSP_SCART3 },
0085 },
0086 .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, MSP_SCART2 },
0087 .i2c = &ivtv_i2c_std,
0088 };
0089
0090
0091
0092
0093
0094
0095 static struct ivtv_card_output ivtv_pvr350_outputs[] = {
0096 {
0097 .name = "S-Video + Composite",
0098 .video_output = 0,
0099 }, {
0100 .name = "Composite",
0101 .video_output = 1,
0102 }, {
0103 .name = "S-Video",
0104 .video_output = 2,
0105 }, {
0106 .name = "RGB",
0107 .video_output = 3,
0108 }, {
0109 .name = "YUV C",
0110 .video_output = 4,
0111 }, {
0112 .name = "YUV V",
0113 .video_output = 5,
0114 }
0115 };
0116
0117 static const struct ivtv_card ivtv_card_pvr350 = {
0118 .type = IVTV_CARD_PVR_350,
0119 .name = "Hauppauge WinTV PVR-350",
0120 .v4l2_capabilities = IVTV_CAP_ENCODER | IVTV_CAP_DECODER,
0121 .video_outputs = ivtv_pvr350_outputs,
0122 .nof_outputs = ARRAY_SIZE(ivtv_pvr350_outputs),
0123 .hw_video = IVTV_HW_SAA7115,
0124 .hw_audio = IVTV_HW_MSP34XX,
0125 .hw_audio_ctrl = IVTV_HW_MSP34XX,
0126 .hw_all = IVTV_HW_MSP34XX | IVTV_HW_SAA7115 |
0127 IVTV_HW_SAA7127 | IVTV_HW_TVEEPROM | IVTV_HW_TUNER |
0128 IVTV_HW_I2C_IR_RX_HAUP_EXT | IVTV_HW_I2C_IR_RX_HAUP_INT,
0129 .video_inputs = {
0130 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 },
0131 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 },
0132 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE0 },
0133 { IVTV_CARD_INPUT_SVIDEO2, 2, IVTV_SAA71XX_SVIDEO1 },
0134 { IVTV_CARD_INPUT_COMPOSITE2, 2, IVTV_SAA71XX_COMPOSITE1 },
0135 { IVTV_CARD_INPUT_COMPOSITE3, 1, IVTV_SAA71XX_COMPOSITE5 },
0136 },
0137 .audio_inputs = {
0138 { IVTV_CARD_INPUT_AUD_TUNER, MSP_TUNER },
0139 { IVTV_CARD_INPUT_LINE_IN1, MSP_SCART1 },
0140 { IVTV_CARD_INPUT_LINE_IN2, MSP_SCART3 },
0141 },
0142 .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, MSP_SCART2 },
0143 .i2c = &ivtv_i2c_std,
0144 };
0145
0146
0147
0148
0149
0150 static const struct ivtv_card ivtv_card_pvr350_v1 = {
0151 .type = IVTV_CARD_PVR_350_V1,
0152 .name = "Hauppauge WinTV PVR-350 (V1)",
0153 .v4l2_capabilities = IVTV_CAP_ENCODER | IVTV_CAP_DECODER,
0154 .video_outputs = ivtv_pvr350_outputs,
0155 .nof_outputs = ARRAY_SIZE(ivtv_pvr350_outputs),
0156 .hw_video = IVTV_HW_SAA7114,
0157 .hw_audio = IVTV_HW_MSP34XX,
0158 .hw_audio_ctrl = IVTV_HW_MSP34XX,
0159 .hw_all = IVTV_HW_MSP34XX | IVTV_HW_SAA7114 |
0160 IVTV_HW_SAA7127 | IVTV_HW_TVEEPROM | IVTV_HW_TUNER,
0161 .video_inputs = {
0162 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 },
0163 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 },
0164 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE0 },
0165 { IVTV_CARD_INPUT_SVIDEO2, 2, IVTV_SAA71XX_SVIDEO1 },
0166 { IVTV_CARD_INPUT_COMPOSITE2, 2, IVTV_SAA71XX_COMPOSITE1 },
0167 { IVTV_CARD_INPUT_COMPOSITE3, 1, IVTV_SAA71XX_COMPOSITE5 },
0168 },
0169 .audio_inputs = {
0170 { IVTV_CARD_INPUT_AUD_TUNER, MSP_MONO },
0171 { IVTV_CARD_INPUT_LINE_IN1, MSP_SCART1 },
0172 { IVTV_CARD_INPUT_LINE_IN2, MSP_SCART3 },
0173 },
0174 .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, MSP_SCART2 },
0175 .i2c = &ivtv_i2c_std,
0176 };
0177
0178
0179
0180
0181
0182 static const struct ivtv_card ivtv_card_pvr150 = {
0183 .type = IVTV_CARD_PVR_150,
0184 .name = "Hauppauge WinTV PVR-150",
0185 .v4l2_capabilities = IVTV_CAP_ENCODER,
0186 .hw_video = IVTV_HW_CX25840,
0187 .hw_audio = IVTV_HW_CX25840,
0188 .hw_audio_ctrl = IVTV_HW_CX25840,
0189 .hw_muxer = IVTV_HW_WM8775,
0190 .hw_all = IVTV_HW_WM8775 | IVTV_HW_CX25840 |
0191 IVTV_HW_TVEEPROM | IVTV_HW_TUNER |
0192 IVTV_HW_I2C_IR_RX_HAUP_EXT | IVTV_HW_I2C_IR_RX_HAUP_INT |
0193 IVTV_HW_Z8F0811_IR_HAUP,
0194 .video_inputs = {
0195 { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE7 },
0196 { IVTV_CARD_INPUT_SVIDEO1, 1, CX25840_SVIDEO1 },
0197 { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE3 },
0198 { IVTV_CARD_INPUT_SVIDEO2, 2, CX25840_SVIDEO2 },
0199 { IVTV_CARD_INPUT_COMPOSITE2, 2, CX25840_COMPOSITE4 },
0200 },
0201 .audio_inputs = {
0202 { IVTV_CARD_INPUT_AUD_TUNER,
0203 CX25840_AUDIO8, WM8775_AIN2 },
0204 { IVTV_CARD_INPUT_LINE_IN1,
0205 CX25840_AUDIO_SERIAL, WM8775_AIN2 },
0206 { IVTV_CARD_INPUT_LINE_IN2,
0207 CX25840_AUDIO_SERIAL, WM8775_AIN3 },
0208 },
0209 .radio_input = { IVTV_CARD_INPUT_AUD_TUNER,
0210 CX25840_AUDIO_SERIAL, WM8775_AIN4 },
0211
0212 .gpio_init = { .direction = 0x1f01, .initial_value = 0x26f3 },
0213 .i2c = &ivtv_i2c_std,
0214 };
0215
0216
0217
0218
0219
0220 static const struct ivtv_card_pci_info ivtv_pci_m179[] = {
0221 { PCI_DEVICE_ID_IVTV15, IVTV_PCI_ID_AVERMEDIA, 0xa3cf },
0222 { PCI_DEVICE_ID_IVTV15, IVTV_PCI_ID_AVERMEDIA, 0xa3ce },
0223 { 0, 0, 0 }
0224 };
0225
0226 static const struct ivtv_card ivtv_card_m179 = {
0227 .type = IVTV_CARD_M179,
0228 .name = "AVerMedia M179",
0229 .v4l2_capabilities = IVTV_CAP_ENCODER,
0230 .hw_video = IVTV_HW_SAA7114,
0231 .hw_audio = IVTV_HW_GPIO,
0232 .hw_audio_ctrl = IVTV_HW_GPIO,
0233 .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA7114 | IVTV_HW_TUNER,
0234 .video_inputs = {
0235 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 },
0236 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 },
0237 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE3 },
0238 },
0239 .audio_inputs = {
0240 { IVTV_CARD_INPUT_AUD_TUNER, IVTV_GPIO_TUNER },
0241 { IVTV_CARD_INPUT_LINE_IN1, IVTV_GPIO_LINE_IN },
0242 },
0243 .gpio_init = { .direction = 0xe380, .initial_value = 0x8290 },
0244 .gpio_audio_input = { .mask = 0x8040, .tuner = 0x8000, .linein = 0x0000 },
0245 .gpio_audio_mute = { .mask = 0x2000, .mute = 0x2000 },
0246 .gpio_audio_mode = { .mask = 0x4300, .mono = 0x4000, .stereo = 0x0200,
0247 .lang1 = 0x0200, .lang2 = 0x0100, .both = 0x0000 },
0248 .gpio_audio_freq = { .mask = 0x0018, .f32000 = 0x0000,
0249 .f44100 = 0x0008, .f48000 = 0x0010 },
0250 .gpio_audio_detect = { .mask = 0x4000, .stereo = 0x0000 },
0251 .tuners = {
0252
0253 { .std = V4L2_STD_ALL, .tuner = TUNER_PHILIPS_NTSC },
0254 },
0255 .pci_list = ivtv_pci_m179,
0256 .i2c = &ivtv_i2c_std,
0257 };
0258
0259
0260
0261
0262
0263 static const struct ivtv_card_pci_info ivtv_pci_mpg600[] = {
0264 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN1, 0xfff3 },
0265 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN1, 0xffff },
0266 { 0, 0, 0 }
0267 };
0268
0269 static const struct ivtv_card ivtv_card_mpg600 = {
0270 .type = IVTV_CARD_MPG600,
0271 .name = "Yuan MPG600, Kuroutoshikou ITVC16-STVLP",
0272 .v4l2_capabilities = IVTV_CAP_ENCODER,
0273 .hw_video = IVTV_HW_SAA7115,
0274 .hw_audio = IVTV_HW_GPIO,
0275 .hw_audio_ctrl = IVTV_HW_GPIO,
0276 .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA7115 | IVTV_HW_TUNER,
0277 .video_inputs = {
0278 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 },
0279 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 },
0280 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE3 },
0281 },
0282 .audio_inputs = {
0283 { IVTV_CARD_INPUT_AUD_TUNER, IVTV_GPIO_TUNER },
0284 { IVTV_CARD_INPUT_LINE_IN1, IVTV_GPIO_LINE_IN },
0285 },
0286 .gpio_init = { .direction = 0x3080, .initial_value = 0x0004 },
0287 .gpio_audio_input = { .mask = 0x3000, .tuner = 0x0000, .linein = 0x2000 },
0288 .gpio_audio_mute = { .mask = 0x0001, .mute = 0x0001 },
0289 .gpio_audio_mode = { .mask = 0x000e, .mono = 0x0006, .stereo = 0x0004,
0290 .lang1 = 0x0004, .lang2 = 0x0000, .both = 0x0008 },
0291 .gpio_audio_detect = { .mask = 0x0900, .stereo = 0x0100 },
0292 .tuners = {
0293
0294 { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FQ1216ME },
0295 { .std = V4L2_STD_ALL, .tuner = TUNER_PHILIPS_FQ1286 },
0296 },
0297 .pci_list = ivtv_pci_mpg600,
0298 .i2c = &ivtv_i2c_std,
0299 };
0300
0301
0302
0303
0304
0305 static const struct ivtv_card_pci_info ivtv_pci_mpg160[] = {
0306 { PCI_DEVICE_ID_IVTV15, IVTV_PCI_ID_YUAN1, 0 },
0307 { PCI_DEVICE_ID_IVTV15, IVTV_PCI_ID_IODATA, 0x40a0 },
0308 { 0, 0, 0 }
0309 };
0310
0311 static const struct ivtv_card ivtv_card_mpg160 = {
0312 .type = IVTV_CARD_MPG160,
0313 .name = "YUAN MPG160, Kuroutoshikou ITVC15-STVLP, I/O Data GV-M2TV/PCI",
0314 .v4l2_capabilities = IVTV_CAP_ENCODER,
0315 .hw_video = IVTV_HW_SAA7114,
0316 .hw_audio = IVTV_HW_GPIO,
0317 .hw_audio_ctrl = IVTV_HW_GPIO,
0318 .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA7114 | IVTV_HW_TUNER,
0319 .video_inputs = {
0320 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 },
0321 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 },
0322 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE3 },
0323 },
0324 .audio_inputs = {
0325 { IVTV_CARD_INPUT_AUD_TUNER, IVTV_GPIO_TUNER },
0326 { IVTV_CARD_INPUT_LINE_IN1, IVTV_GPIO_LINE_IN },
0327 },
0328 .gpio_init = { .direction = 0x7080, .initial_value = 0x400c },
0329 .gpio_audio_input = { .mask = 0x3000, .tuner = 0x0000, .linein = 0x2000 },
0330 .gpio_audio_mute = { .mask = 0x0001, .mute = 0x0001 },
0331 .gpio_audio_mode = { .mask = 0x000e, .mono = 0x0006, .stereo = 0x0004,
0332 .lang1 = 0x0004, .lang2 = 0x0000, .both = 0x0008 },
0333 .gpio_audio_detect = { .mask = 0x0900, .stereo = 0x0100 },
0334 .tuners = {
0335 { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FQ1216ME },
0336 { .std = V4L2_STD_ALL, .tuner = TUNER_PHILIPS_FQ1286 },
0337 },
0338 .pci_list = ivtv_pci_mpg160,
0339 .i2c = &ivtv_i2c_std,
0340 };
0341
0342
0343
0344
0345
0346 static const struct ivtv_card_pci_info ivtv_pci_pg600[] = {
0347 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_DIAMONDMM, 0x0070 },
0348 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN3, 0x0600 },
0349 { 0, 0, 0 }
0350 };
0351
0352 static const struct ivtv_card ivtv_card_pg600 = {
0353 .type = IVTV_CARD_PG600,
0354 .name = "Yuan PG600, Diamond PVR-550",
0355 .v4l2_capabilities = IVTV_CAP_ENCODER,
0356 .hw_video = IVTV_HW_CX25840,
0357 .hw_audio = IVTV_HW_CX25840,
0358 .hw_audio_ctrl = IVTV_HW_CX25840,
0359 .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER,
0360 .video_inputs = {
0361 { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 },
0362 { IVTV_CARD_INPUT_SVIDEO1, 1,
0363 CX25840_SVIDEO_LUMA3 | CX25840_SVIDEO_CHROMA4 },
0364 { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE1 },
0365 },
0366 .audio_inputs = {
0367 { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 },
0368 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL },
0369 },
0370 .tuners = {
0371 { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FQ1216ME },
0372 { .std = V4L2_STD_ALL, .tuner = TUNER_PHILIPS_FQ1286 },
0373 },
0374 .pci_list = ivtv_pci_pg600,
0375 .i2c = &ivtv_i2c_std,
0376 };
0377
0378
0379
0380
0381
0382 static const struct ivtv_card_pci_info ivtv_pci_avc2410[] = {
0383 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ADAPTEC, 0x0093 },
0384 { 0, 0, 0 }
0385 };
0386
0387 static const struct ivtv_card ivtv_card_avc2410 = {
0388 .type = IVTV_CARD_AVC2410,
0389 .name = "Adaptec VideOh! AVC-2410",
0390 .v4l2_capabilities = IVTV_CAP_ENCODER,
0391 .hw_video = IVTV_HW_SAA7115,
0392 .hw_audio = IVTV_HW_MSP34XX,
0393 .hw_audio_ctrl = IVTV_HW_MSP34XX,
0394 .hw_muxer = IVTV_HW_CS53L32A,
0395 .hw_all = IVTV_HW_MSP34XX | IVTV_HW_CS53L32A |
0396 IVTV_HW_SAA7115 | IVTV_HW_TUNER |
0397 IVTV_HW_I2C_IR_RX_ADAPTEC,
0398 .video_inputs = {
0399 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 },
0400 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 },
0401 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE3 },
0402 },
0403 .audio_inputs = {
0404 { IVTV_CARD_INPUT_AUD_TUNER,
0405 MSP_TUNER, CS53L32A_IN0 },
0406 { IVTV_CARD_INPUT_LINE_IN1,
0407 MSP_SCART1, CS53L32A_IN2 },
0408 },
0409
0410
0411
0412 .tuners = {
0413 { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FM1216ME_MK3 },
0414 { .std = V4L2_STD_ALL - V4L2_STD_NTSC_M_JP,
0415 .tuner = TUNER_PHILIPS_FM1236_MK3 },
0416 { .std = V4L2_STD_NTSC_M_JP, .tuner = TUNER_PHILIPS_FQ1286 },
0417 },
0418 .pci_list = ivtv_pci_avc2410,
0419 .i2c = &ivtv_i2c_std,
0420 };
0421
0422
0423
0424
0425
0426 static const struct ivtv_card_pci_info ivtv_pci_avc2010[] = {
0427 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ADAPTEC, 0x0092 },
0428 { 0, 0, 0 }
0429 };
0430
0431 static const struct ivtv_card ivtv_card_avc2010 = {
0432 .type = IVTV_CARD_AVC2010,
0433 .name = "Adaptec VideOh! AVC-2010",
0434 .v4l2_capabilities = IVTV_CAP_ENCODER,
0435 .hw_video = IVTV_HW_SAA7115,
0436 .hw_audio = IVTV_HW_CS53L32A,
0437 .hw_audio_ctrl = IVTV_HW_CS53L32A,
0438 .hw_all = IVTV_HW_CS53L32A | IVTV_HW_SAA7115,
0439 .video_inputs = {
0440 { IVTV_CARD_INPUT_SVIDEO1, 0, IVTV_SAA71XX_SVIDEO0 },
0441 { IVTV_CARD_INPUT_COMPOSITE1, 0, IVTV_SAA71XX_COMPOSITE3 },
0442 },
0443 .audio_inputs = {
0444 { IVTV_CARD_INPUT_LINE_IN1, CS53L32A_IN2 },
0445 },
0446
0447 .pci_list = ivtv_pci_avc2010,
0448 };
0449
0450
0451
0452
0453
0454 static const struct ivtv_card_pci_info ivtv_pci_tg5000tv[] = {
0455 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_AVERMEDIA, 0xbfff },
0456 { 0, 0, 0 }
0457 };
0458
0459 static const struct ivtv_card ivtv_card_tg5000tv = {
0460 .type = IVTV_CARD_TG5000TV,
0461 .name = "Nagase Transgear 5000TV",
0462 .v4l2_capabilities = IVTV_CAP_ENCODER,
0463 .hw_video = IVTV_HW_SAA7114 | IVTV_HW_UPD64031A | IVTV_HW_UPD6408X |
0464 IVTV_HW_GPIO,
0465 .hw_audio = IVTV_HW_GPIO,
0466 .hw_audio_ctrl = IVTV_HW_GPIO,
0467 .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA7114 | IVTV_HW_TUNER |
0468 IVTV_HW_UPD64031A | IVTV_HW_UPD6408X,
0469 .video_inputs = {
0470 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_SVIDEO0 },
0471 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO2 },
0472 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_SVIDEO2 },
0473 },
0474 .audio_inputs = {
0475 { IVTV_CARD_INPUT_AUD_TUNER, IVTV_GPIO_TUNER },
0476 { IVTV_CARD_INPUT_LINE_IN1, IVTV_GPIO_LINE_IN },
0477 },
0478 .gr_config = UPD64031A_VERTICAL_EXTERNAL,
0479 .gpio_init = { .direction = 0xe080, .initial_value = 0x8000 },
0480 .gpio_audio_input = { .mask = 0x8080, .tuner = 0x8000, .linein = 0x0080 },
0481 .gpio_audio_mute = { .mask = 0x6000, .mute = 0x6000 },
0482 .gpio_audio_mode = { .mask = 0x4300, .mono = 0x4000, .stereo = 0x0200,
0483 .lang1 = 0x0300, .lang2 = 0x0000, .both = 0x0200 },
0484 .gpio_video_input = { .mask = 0x0030, .tuner = 0x0000,
0485 .composite = 0x0010, .svideo = 0x0020 },
0486 .tuners = {
0487 { .std = V4L2_STD_MN, .tuner = TUNER_PHILIPS_FQ1286 },
0488 },
0489 .pci_list = ivtv_pci_tg5000tv,
0490 .i2c = &ivtv_i2c_std,
0491 };
0492
0493
0494
0495
0496
0497 static const struct ivtv_card_pci_info ivtv_pci_va2000[] = {
0498 { PCI_DEVICE_ID_IVTV16, 0, 0xff5f },
0499 { 0, 0, 0 }
0500 };
0501
0502 static const struct ivtv_card ivtv_card_va2000 = {
0503 .type = IVTV_CARD_VA2000MAX_SNT6,
0504 .name = "AOpen VA2000MAX-SNT6",
0505 .v4l2_capabilities = IVTV_CAP_ENCODER,
0506 .hw_video = IVTV_HW_SAA7115 | IVTV_HW_UPD6408X,
0507 .hw_audio = IVTV_HW_MSP34XX,
0508 .hw_audio_ctrl = IVTV_HW_MSP34XX,
0509 .hw_all = IVTV_HW_MSP34XX | IVTV_HW_SAA7115 |
0510 IVTV_HW_UPD6408X | IVTV_HW_TUNER,
0511 .video_inputs = {
0512 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_SVIDEO0 },
0513 },
0514 .audio_inputs = {
0515 { IVTV_CARD_INPUT_AUD_TUNER, MSP_TUNER },
0516 },
0517 .tuners = {
0518 { .std = V4L2_STD_MN, .tuner = TUNER_PHILIPS_FQ1286 },
0519 },
0520 .pci_list = ivtv_pci_va2000,
0521 .i2c = &ivtv_i2c_std,
0522 };
0523
0524
0525
0526
0527
0528 static const struct ivtv_card_pci_info ivtv_pci_cx23416gyc[] = {
0529 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN1, 0x0600 },
0530 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN4, 0x0600 },
0531 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_MELCO, 0x0523 },
0532 { 0, 0, 0 }
0533 };
0534
0535 static const struct ivtv_card ivtv_card_cx23416gyc = {
0536 .type = IVTV_CARD_CX23416GYC,
0537 .name = "Yuan MPG600GR, Kuroutoshikou CX23416GYC-STVLP",
0538 .v4l2_capabilities = IVTV_CAP_ENCODER,
0539 .hw_video = IVTV_HW_SAA717X | IVTV_HW_GPIO |
0540 IVTV_HW_UPD64031A | IVTV_HW_UPD6408X,
0541 .hw_audio = IVTV_HW_SAA717X,
0542 .hw_audio_ctrl = IVTV_HW_SAA717X,
0543 .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA717X | IVTV_HW_TUNER |
0544 IVTV_HW_UPD64031A | IVTV_HW_UPD6408X,
0545 .video_inputs = {
0546 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_SVIDEO3 |
0547 IVTV_SAA717X_TUNER_FLAG },
0548 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 },
0549 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_SVIDEO3 },
0550 },
0551 .audio_inputs = {
0552 { IVTV_CARD_INPUT_AUD_TUNER, IVTV_SAA717X_IN2 },
0553 { IVTV_CARD_INPUT_LINE_IN1, IVTV_SAA717X_IN0 },
0554 },
0555 .gr_config = UPD64031A_VERTICAL_EXTERNAL,
0556 .gpio_init = { .direction = 0xf880, .initial_value = 0x8800 },
0557 .gpio_video_input = { .mask = 0x0020, .tuner = 0x0000,
0558 .composite = 0x0020, .svideo = 0x0020 },
0559 .gpio_audio_freq = { .mask = 0xc000, .f32000 = 0x0000,
0560 .f44100 = 0x4000, .f48000 = 0x8000 },
0561 .tuners = {
0562 { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FM1216ME_MK3 },
0563 { .std = V4L2_STD_ALL, .tuner = TUNER_PHILIPS_FM1236_MK3 },
0564 },
0565 .pci_list = ivtv_pci_cx23416gyc,
0566 .i2c = &ivtv_i2c_std,
0567 };
0568
0569 static const struct ivtv_card ivtv_card_cx23416gyc_nogr = {
0570 .type = IVTV_CARD_CX23416GYC_NOGR,
0571 .name = "Yuan MPG600GR, Kuroutoshikou CX23416GYC-STVLP (no GR)",
0572 .v4l2_capabilities = IVTV_CAP_ENCODER,
0573 .hw_video = IVTV_HW_SAA717X | IVTV_HW_GPIO | IVTV_HW_UPD6408X,
0574 .hw_audio = IVTV_HW_SAA717X,
0575 .hw_audio_ctrl = IVTV_HW_SAA717X,
0576 .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA717X | IVTV_HW_TUNER |
0577 IVTV_HW_UPD6408X,
0578 .video_inputs = {
0579 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 |
0580 IVTV_SAA717X_TUNER_FLAG },
0581 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 },
0582 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE0 },
0583 },
0584 .audio_inputs = {
0585 { IVTV_CARD_INPUT_AUD_TUNER, IVTV_SAA717X_IN2 },
0586 { IVTV_CARD_INPUT_LINE_IN1, IVTV_SAA717X_IN0 },
0587 },
0588 .gpio_init = { .direction = 0xf880, .initial_value = 0x8800 },
0589 .gpio_video_input = { .mask = 0x0020, .tuner = 0x0000,
0590 .composite = 0x0020, .svideo = 0x0020 },
0591 .gpio_audio_freq = { .mask = 0xc000, .f32000 = 0x0000,
0592 .f44100 = 0x4000, .f48000 = 0x8000 },
0593 .tuners = {
0594 { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FM1216ME_MK3 },
0595 { .std = V4L2_STD_ALL, .tuner = TUNER_PHILIPS_FM1236_MK3 },
0596 },
0597 .i2c = &ivtv_i2c_std,
0598 };
0599
0600 static const struct ivtv_card ivtv_card_cx23416gyc_nogrycs = {
0601 .type = IVTV_CARD_CX23416GYC_NOGRYCS,
0602 .name = "Yuan MPG600GR, Kuroutoshikou CX23416GYC-STVLP (no GR/YCS)",
0603 .v4l2_capabilities = IVTV_CAP_ENCODER,
0604 .hw_video = IVTV_HW_SAA717X | IVTV_HW_GPIO,
0605 .hw_audio = IVTV_HW_SAA717X,
0606 .hw_audio_ctrl = IVTV_HW_SAA717X,
0607 .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA717X | IVTV_HW_TUNER,
0608 .video_inputs = {
0609 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 |
0610 IVTV_SAA717X_TUNER_FLAG },
0611 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 },
0612 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE0 },
0613 },
0614 .audio_inputs = {
0615 { IVTV_CARD_INPUT_AUD_TUNER, IVTV_SAA717X_IN2 },
0616 { IVTV_CARD_INPUT_LINE_IN1, IVTV_SAA717X_IN0 },
0617 },
0618 .gpio_init = { .direction = 0xf880, .initial_value = 0x8800 },
0619 .gpio_video_input = { .mask = 0x0020, .tuner = 0x0000,
0620 .composite = 0x0020, .svideo = 0x0020 },
0621 .gpio_audio_freq = { .mask = 0xc000, .f32000 = 0x0000,
0622 .f44100 = 0x4000, .f48000 = 0x8000 },
0623 .tuners = {
0624 { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FM1216ME_MK3 },
0625 { .std = V4L2_STD_ALL, .tuner = TUNER_PHILIPS_FM1236_MK3 },
0626 },
0627 .i2c = &ivtv_i2c_std,
0628 };
0629
0630
0631
0632
0633
0634 static const struct ivtv_card_pci_info ivtv_pci_gv_mvprx[] = {
0635 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_IODATA, 0xd01e },
0636 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_IODATA, 0xd038 },
0637 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_IODATA, 0xd039 },
0638 { 0, 0, 0 }
0639 };
0640
0641 static const struct ivtv_card ivtv_card_gv_mvprx = {
0642 .type = IVTV_CARD_GV_MVPRX,
0643 .name = "I/O Data GV-MVP/RX, GV-MVP/RX2W (dual tuner)",
0644 .v4l2_capabilities = IVTV_CAP_ENCODER,
0645 .hw_video = IVTV_HW_SAA7115 | IVTV_HW_UPD64031A | IVTV_HW_UPD6408X,
0646 .hw_audio = IVTV_HW_GPIO,
0647 .hw_audio_ctrl = IVTV_HW_WM8739,
0648 .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA7115 | IVTV_HW_VP27SMPX |
0649 IVTV_HW_TUNER | IVTV_HW_WM8739 |
0650 IVTV_HW_UPD64031A | IVTV_HW_UPD6408X,
0651 .video_inputs = {
0652 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_SVIDEO0 },
0653 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO1 },
0654 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_SVIDEO2 },
0655 },
0656 .audio_inputs = {
0657 { IVTV_CARD_INPUT_AUD_TUNER, IVTV_GPIO_TUNER },
0658 { IVTV_CARD_INPUT_LINE_IN1, IVTV_GPIO_LINE_IN },
0659 },
0660 .gpio_init = { .direction = 0xc301, .initial_value = 0x0200 },
0661 .gpio_audio_input = { .mask = 0xffff, .tuner = 0x0200, .linein = 0x0300 },
0662 .tuners = {
0663
0664 { .std = V4L2_STD_MN, .tuner = TUNER_PANASONIC_VP27 },
0665 },
0666 .pci_list = ivtv_pci_gv_mvprx,
0667 .i2c = &ivtv_i2c_std,
0668 };
0669
0670
0671
0672
0673
0674 static const struct ivtv_card_pci_info ivtv_pci_gv_mvprx2e[] = {
0675 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_IODATA, 0xd025 },
0676 {0, 0, 0}
0677 };
0678
0679 static const struct ivtv_card ivtv_card_gv_mvprx2e = {
0680 .type = IVTV_CARD_GV_MVPRX2E,
0681 .name = "I/O Data GV-MVP/RX2E",
0682 .v4l2_capabilities = IVTV_CAP_ENCODER,
0683 .hw_video = IVTV_HW_SAA7115,
0684 .hw_audio = IVTV_HW_GPIO,
0685 .hw_audio_ctrl = IVTV_HW_WM8739,
0686 .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA7115 | IVTV_HW_TUNER |
0687 IVTV_HW_VP27SMPX | IVTV_HW_WM8739,
0688 .video_inputs = {
0689 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 },
0690 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 },
0691 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE3 },
0692 },
0693 .audio_inputs = {
0694 { IVTV_CARD_INPUT_AUD_TUNER, IVTV_GPIO_TUNER },
0695 { IVTV_CARD_INPUT_LINE_IN1, IVTV_GPIO_LINE_IN },
0696 },
0697 .gpio_init = { .direction = 0xc301, .initial_value = 0x0200 },
0698 .gpio_audio_input = { .mask = 0xffff, .tuner = 0x0200, .linein = 0x0300 },
0699 .tuners = {
0700
0701 { .std = V4L2_STD_MN, .tuner = TUNER_PANASONIC_VP27 },
0702 },
0703 .pci_list = ivtv_pci_gv_mvprx2e,
0704 .i2c = &ivtv_i2c_std,
0705 };
0706
0707
0708
0709
0710
0711 static const struct ivtv_card_pci_info ivtv_pci_gotview_pci_dvd[] = {
0712 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN1, 0x0600 },
0713 { 0, 0, 0 }
0714 };
0715
0716 static const struct ivtv_card ivtv_card_gotview_pci_dvd = {
0717 .type = IVTV_CARD_GOTVIEW_PCI_DVD,
0718 .name = "GotView PCI DVD",
0719 .v4l2_capabilities = IVTV_CAP_ENCODER,
0720 .hw_video = IVTV_HW_SAA717X,
0721 .hw_audio = IVTV_HW_SAA717X,
0722 .hw_audio_ctrl = IVTV_HW_SAA717X,
0723 .hw_all = IVTV_HW_SAA717X | IVTV_HW_TUNER,
0724 .video_inputs = {
0725 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE1 },
0726 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 },
0727 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE3 },
0728 },
0729 .audio_inputs = {
0730 { IVTV_CARD_INPUT_AUD_TUNER, IVTV_SAA717X_IN0 },
0731 { IVTV_CARD_INPUT_LINE_IN1, IVTV_SAA717X_IN2 },
0732 },
0733 .gpio_init = { .direction = 0xf000, .initial_value = 0xA000 },
0734 .tuners = {
0735
0736 { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FM1216ME_MK3 },
0737 },
0738 .pci_list = ivtv_pci_gotview_pci_dvd,
0739 .i2c = &ivtv_i2c_std,
0740 };
0741
0742
0743
0744
0745
0746 static const struct ivtv_card_pci_info ivtv_pci_gotview_pci_dvd2[] = {
0747 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_GOTVIEW1, 0x0600 },
0748 { 0, 0, 0 }
0749 };
0750
0751 static const struct ivtv_card ivtv_card_gotview_pci_dvd2 = {
0752 .type = IVTV_CARD_GOTVIEW_PCI_DVD2,
0753 .name = "GotView PCI DVD2 Deluxe",
0754 .v4l2_capabilities = IVTV_CAP_ENCODER,
0755 .hw_video = IVTV_HW_CX25840,
0756 .hw_audio = IVTV_HW_CX25840,
0757 .hw_audio_ctrl = IVTV_HW_CX25840,
0758 .hw_muxer = IVTV_HW_GPIO,
0759 .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER,
0760 .video_inputs = {
0761 { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 },
0762 { IVTV_CARD_INPUT_SVIDEO1, 1,
0763 CX25840_SVIDEO_LUMA3 | CX25840_SVIDEO_CHROMA4 },
0764 { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE1 },
0765 },
0766 .audio_inputs = {
0767 { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5, 0 },
0768 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL, 1 },
0769 },
0770 .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO_SERIAL, 2 },
0771 .gpio_init = { .direction = 0x0800, .initial_value = 0 },
0772 .gpio_audio_input = { .mask = 0x0800, .tuner = 0, .linein = 0, .radio = 0x0800 },
0773 .tuners = {
0774
0775 { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FM1216ME_MK3 },
0776 },
0777 .pci_list = ivtv_pci_gotview_pci_dvd2,
0778 .i2c = &ivtv_i2c_std,
0779 };
0780
0781
0782
0783
0784
0785 static const struct ivtv_card_pci_info ivtv_pci_yuan_mpc622[] = {
0786 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN2, 0xd998 },
0787 { 0, 0, 0 }
0788 };
0789
0790 static const struct ivtv_card ivtv_card_yuan_mpc622 = {
0791 .type = IVTV_CARD_YUAN_MPC622,
0792 .name = "Yuan MPC622",
0793 .v4l2_capabilities = IVTV_CAP_ENCODER,
0794 .hw_video = IVTV_HW_CX25840,
0795 .hw_audio = IVTV_HW_CX25840,
0796 .hw_audio_ctrl = IVTV_HW_CX25840,
0797 .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER,
0798 .video_inputs = {
0799 { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 },
0800 { IVTV_CARD_INPUT_SVIDEO1, 1,
0801 CX25840_SVIDEO_LUMA3 | CX25840_SVIDEO_CHROMA4 },
0802 { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE1 },
0803 },
0804 .audio_inputs = {
0805 { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 },
0806 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL },
0807 },
0808 .gpio_init = { .direction = 0x00ff, .initial_value = 0x0002 },
0809 .tuners = {
0810
0811 { .std = V4L2_STD_ALL, .tuner = TUNER_PHILIPS_TDA8290 },
0812 },
0813 .pci_list = ivtv_pci_yuan_mpc622,
0814 .i2c = &ivtv_i2c_tda8290,
0815 };
0816
0817
0818
0819
0820
0821 static const struct ivtv_card_pci_info ivtv_pci_dctmvtvp1[] = {
0822 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_AVERMEDIA, 0xbfff },
0823 { 0, 0, 0 }
0824 };
0825
0826 static const struct ivtv_card ivtv_card_dctmvtvp1 = {
0827 .type = IVTV_CARD_DCTMTVP1,
0828 .name = "Digital Cowboy DCT-MTVP1",
0829 .v4l2_capabilities = IVTV_CAP_ENCODER,
0830 .hw_video = IVTV_HW_SAA7115 | IVTV_HW_UPD64031A | IVTV_HW_UPD6408X |
0831 IVTV_HW_GPIO,
0832 .hw_audio = IVTV_HW_GPIO,
0833 .hw_audio_ctrl = IVTV_HW_GPIO,
0834 .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA7115 | IVTV_HW_TUNER |
0835 IVTV_HW_UPD64031A | IVTV_HW_UPD6408X,
0836 .video_inputs = {
0837 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_SVIDEO0 },
0838 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO2 },
0839 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_SVIDEO2 },
0840 },
0841 .audio_inputs = {
0842 { IVTV_CARD_INPUT_AUD_TUNER, IVTV_GPIO_TUNER },
0843 { IVTV_CARD_INPUT_LINE_IN1, IVTV_GPIO_LINE_IN },
0844 },
0845 .gpio_init = { .direction = 0xe080, .initial_value = 0x8000 },
0846 .gpio_audio_input = { .mask = 0x8080, .tuner = 0x8000, .linein = 0x0080 },
0847 .gpio_audio_mute = { .mask = 0x6000, .mute = 0x6000 },
0848 .gpio_audio_mode = { .mask = 0x4300, .mono = 0x4000, .stereo = 0x0200,
0849 .lang1 = 0x0300, .lang2 = 0x0000, .both = 0x0200 },
0850 .gpio_video_input = { .mask = 0x0030, .tuner = 0x0000,
0851 .composite = 0x0010, .svideo = 0x0020},
0852 .tuners = {
0853 { .std = V4L2_STD_MN, .tuner = TUNER_PHILIPS_FQ1286 },
0854 },
0855 .pci_list = ivtv_pci_dctmvtvp1,
0856 .i2c = &ivtv_i2c_std,
0857 };
0858
0859
0860
0861
0862
0863 static const struct ivtv_card_pci_info ivtv_pci_pg600v2[] = {
0864 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN3, 0x0600 },
0865 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_GOTVIEW2, 0x0600 },
0866 { 0, 0, 0 }
0867 };
0868
0869 static const struct ivtv_card ivtv_card_pg600v2 = {
0870 .type = IVTV_CARD_PG600V2,
0871 .name = "Yuan PG600-2, GotView PCI DVD Lite",
0872 .v4l2_capabilities = IVTV_CAP_ENCODER,
0873 .hw_video = IVTV_HW_CX25840,
0874 .hw_audio = IVTV_HW_CX25840,
0875 .hw_audio_ctrl = IVTV_HW_CX25840,
0876 .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER,
0877
0878
0879 .video_inputs = {
0880 { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 },
0881 { IVTV_CARD_INPUT_SVIDEO1, 1,
0882 CX25840_SVIDEO_LUMA3 | CX25840_SVIDEO_CHROMA4 },
0883 { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE1 },
0884 },
0885 .audio_inputs = {
0886 { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 },
0887 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL },
0888 },
0889 .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 },
0890 .xceive_pin = 12,
0891 .tuners = {
0892 { .std = V4L2_STD_ALL, .tuner = TUNER_XC2028 },
0893 },
0894 .pci_list = ivtv_pci_pg600v2,
0895 .i2c = &ivtv_i2c_std,
0896 };
0897
0898
0899
0900
0901
0902 static const struct ivtv_card_pci_info ivtv_pci_club3d[] = {
0903 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN3, 0x0600 },
0904 { 0, 0, 0 }
0905 };
0906
0907 static const struct ivtv_card ivtv_card_club3d = {
0908 .type = IVTV_CARD_CLUB3D,
0909 .name = "Club3D ZAP-TV1x01",
0910 .v4l2_capabilities = IVTV_CAP_ENCODER,
0911 .hw_video = IVTV_HW_CX25840,
0912 .hw_audio = IVTV_HW_CX25840,
0913 .hw_audio_ctrl = IVTV_HW_CX25840,
0914 .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER,
0915 .video_inputs = {
0916 { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 },
0917 { IVTV_CARD_INPUT_SVIDEO1, 1,
0918 CX25840_SVIDEO_LUMA3 | CX25840_SVIDEO_CHROMA4 },
0919 { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE3 },
0920 },
0921 .audio_inputs = {
0922 { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 },
0923 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL },
0924 },
0925 .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 },
0926 .xceive_pin = 12,
0927 .tuners = {
0928 { .std = V4L2_STD_ALL, .tuner = TUNER_XC2028 },
0929 },
0930 .pci_list = ivtv_pci_club3d,
0931 .i2c = &ivtv_i2c_std,
0932 };
0933
0934
0935
0936
0937
0938 static const struct ivtv_card_pci_info ivtv_pci_avertv_mce116[] = {
0939 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_AVERMEDIA, 0xc439 },
0940 { 0, 0, 0 }
0941 };
0942
0943 static const struct ivtv_card ivtv_card_avertv_mce116 = {
0944 .type = IVTV_CARD_AVERTV_MCE116,
0945 .name = "AVerTV MCE 116 Plus",
0946 .v4l2_capabilities = IVTV_CAP_ENCODER,
0947 .hw_video = IVTV_HW_CX25840,
0948 .hw_audio = IVTV_HW_CX25840,
0949 .hw_audio_ctrl = IVTV_HW_CX25840,
0950 .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER | IVTV_HW_WM8739 |
0951 IVTV_HW_I2C_IR_RX_AVER,
0952 .video_inputs = {
0953 { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 },
0954 { IVTV_CARD_INPUT_SVIDEO1, 1, CX25840_SVIDEO3 },
0955 { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE1 },
0956 },
0957 .audio_inputs = {
0958 { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 },
0959 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL, 1 },
0960 },
0961 .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 },
0962
0963 .gpio_init = { .direction = 0xe000, .initial_value = 0x4000 },
0964 .xceive_pin = 10,
0965 .tuners = {
0966 { .std = V4L2_STD_ALL, .tuner = TUNER_XC2028 },
0967 },
0968 .pci_list = ivtv_pci_avertv_mce116,
0969 .i2c = &ivtv_i2c_std,
0970 };
0971
0972
0973
0974
0975
0976 static const struct ivtv_card_pci_info ivtv_pci_aver_pvr150[] = {
0977 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_AVERMEDIA, 0xc034 },
0978 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_AVERMEDIA, 0xc035 },
0979 { 0, 0, 0 }
0980 };
0981
0982 static const struct ivtv_card ivtv_card_aver_pvr150 = {
0983 .type = IVTV_CARD_AVER_PVR150PLUS,
0984 .name = "AVerMedia PVR-150 Plus / AVerTV M113 Partsnic (Daewoo) Tuner",
0985 .v4l2_capabilities = IVTV_CAP_ENCODER,
0986 .hw_video = IVTV_HW_CX25840,
0987 .hw_audio = IVTV_HW_CX25840,
0988 .hw_audio_ctrl = IVTV_HW_CX25840,
0989 .hw_muxer = IVTV_HW_GPIO,
0990 .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER |
0991 IVTV_HW_WM8739 | IVTV_HW_GPIO,
0992 .video_inputs = {
0993 { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 },
0994 { IVTV_CARD_INPUT_SVIDEO1, 1, CX25840_SVIDEO3 },
0995 { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE1 },
0996 },
0997 .audio_inputs = {
0998 { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5, 0 },
0999 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL, 1 },
1000 },
1001 .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO_SERIAL, 2 },
1002
1003 .gpio_init = { .direction = 0xc000, .initial_value = 0 },
1004 .gpio_audio_input = { .mask = 0xc000,
1005 .tuner = 0x0000,
1006 .linein = 0x4000,
1007 .radio = 0x8000 },
1008 .tuners = {
1009
1010 { .std = V4L2_STD_MN, .tuner = TUNER_PARTSNIC_PTI_5NF05 },
1011 },
1012 .pci_list = ivtv_pci_aver_pvr150,
1013
1014 .i2c = &ivtv_i2c_radio,
1015 };
1016
1017
1018
1019
1020
1021 static const struct ivtv_card_pci_info ivtv_pci_aver_ultra1500mce[] = {
1022 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_AVERMEDIA, 0xc019 },
1023 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_AVERMEDIA, 0xc01b },
1024 { 0, 0, 0 }
1025 };
1026
1027 static const struct ivtv_card ivtv_card_aver_ultra1500mce = {
1028 .type = IVTV_CARD_AVER_ULTRA1500MCE,
1029 .name = "AVerMedia UltraTV 1500 MCE / AVerTV M113 Philips Tuner",
1030 .comment = "For non-NTSC tuners, use the pal= or secam= module options",
1031 .v4l2_capabilities = IVTV_CAP_ENCODER,
1032 .hw_video = IVTV_HW_CX25840,
1033 .hw_audio = IVTV_HW_CX25840,
1034 .hw_audio_ctrl = IVTV_HW_CX25840,
1035 .hw_muxer = IVTV_HW_GPIO,
1036 .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER |
1037 IVTV_HW_WM8739 | IVTV_HW_GPIO,
1038 .video_inputs = {
1039 { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 },
1040 { IVTV_CARD_INPUT_SVIDEO1, 1, CX25840_SVIDEO3 },
1041 { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE1 },
1042 },
1043 .audio_inputs = {
1044 { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5, 0 },
1045 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL, 1 },
1046 },
1047 .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO_SERIAL, 2 },
1048
1049 .gpio_init = { .direction = 0xc000, .initial_value = 0 },
1050 .gpio_audio_input = { .mask = 0xc000,
1051 .tuner = 0x0000,
1052 .linein = 0x4000,
1053 .radio = 0x8000 },
1054 .tuners = {
1055
1056 { .std = V4L2_STD_MN, .tuner = TUNER_PHILIPS_FM1236_MK3 },
1057 { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FM1216MK5 },
1058 },
1059 .pci_list = ivtv_pci_aver_ultra1500mce,
1060 .i2c = &ivtv_i2c_std,
1061 };
1062
1063
1064
1065
1066
1067 static const struct ivtv_card_pci_info ivtv_pci_aver_ezmaker[] = {
1068 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_AVERMEDIA, 0xc03f },
1069 { 0, 0, 0 }
1070 };
1071
1072 static const struct ivtv_card ivtv_card_aver_ezmaker = {
1073 .type = IVTV_CARD_AVER_EZMAKER,
1074 .name = "AVerMedia EZMaker PCI Deluxe",
1075 .v4l2_capabilities = IVTV_CAP_ENCODER,
1076 .hw_video = IVTV_HW_CX25840,
1077 .hw_audio = IVTV_HW_CX25840,
1078 .hw_audio_ctrl = IVTV_HW_CX25840,
1079 .hw_all = IVTV_HW_CX25840 | IVTV_HW_WM8739,
1080 .video_inputs = {
1081 { IVTV_CARD_INPUT_SVIDEO1, 0, CX25840_SVIDEO3 },
1082 { IVTV_CARD_INPUT_COMPOSITE1, 0, CX25840_COMPOSITE1 },
1083 },
1084 .audio_inputs = {
1085 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL, 0 },
1086 },
1087 .gpio_init = { .direction = 0x4000, .initial_value = 0x4000 },
1088
1089 .pci_list = ivtv_pci_aver_ezmaker,
1090 };
1091
1092
1093
1094
1095
1096 static const struct ivtv_card_pci_info ivtv_pci_asus_falcon2[] = {
1097 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ASUSTEK, 0x4b66 },
1098 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ASUSTEK, 0x462e },
1099 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ASUSTEK, 0x4b2e },
1100 { 0, 0, 0 }
1101 };
1102
1103 static const struct ivtv_card ivtv_card_asus_falcon2 = {
1104 .type = IVTV_CARD_ASUS_FALCON2,
1105 .name = "ASUS Falcon2",
1106 .v4l2_capabilities = IVTV_CAP_ENCODER,
1107 .hw_video = IVTV_HW_CX25840,
1108 .hw_audio = IVTV_HW_CX25840,
1109 .hw_audio_ctrl = IVTV_HW_CX25840,
1110 .hw_muxer = IVTV_HW_M52790,
1111 .hw_all = IVTV_HW_CX25840 | IVTV_HW_M52790 | IVTV_HW_TUNER,
1112 .video_inputs = {
1113 { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 },
1114 { IVTV_CARD_INPUT_SVIDEO1, 1, CX25840_SVIDEO3 },
1115 { IVTV_CARD_INPUT_COMPOSITE1, 2, CX25840_COMPOSITE2 },
1116 },
1117 .audio_inputs = {
1118 { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5, M52790_IN_TUNER },
1119 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL,
1120 M52790_IN_V2 | M52790_SW1_YCMIX | M52790_SW2_YCMIX },
1121 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL, M52790_IN_V2 },
1122 },
1123 .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO_SERIAL, M52790_IN_TUNER },
1124 .tuners = {
1125 { .std = V4L2_STD_MN, .tuner = TUNER_PHILIPS_FM1236_MK3 },
1126 },
1127 .pci_list = ivtv_pci_asus_falcon2,
1128 .i2c = &ivtv_i2c_std,
1129 };
1130
1131
1132
1133
1134
1135 static const struct ivtv_card_pci_info ivtv_pci_aver_m104[] = {
1136 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_AVERMEDIA, 0xc136 },
1137 { 0, 0, 0 }
1138 };
1139
1140 static const struct ivtv_card ivtv_card_aver_m104 = {
1141 .type = IVTV_CARD_AVER_M104,
1142 .name = "AVerMedia M104",
1143 .comment = "Not yet supported!\n",
1144 .v4l2_capabilities = 0,
1145 .hw_video = IVTV_HW_CX25840,
1146 .hw_audio = IVTV_HW_CX25840,
1147 .hw_audio_ctrl = IVTV_HW_CX25840,
1148 .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER | IVTV_HW_WM8739,
1149 .video_inputs = {
1150 { IVTV_CARD_INPUT_SVIDEO1, 0, CX25840_SVIDEO3 },
1151 { IVTV_CARD_INPUT_COMPOSITE1, 0, CX25840_COMPOSITE1 },
1152 },
1153 .audio_inputs = {
1154 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL, 1 },
1155 },
1156 .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO_SERIAL, 2 },
1157
1158 .gpio_init = { .direction = 0xe000, .initial_value = 0x4000 },
1159 .xceive_pin = 10,
1160 .tuners = {
1161 { .std = V4L2_STD_ALL, .tuner = TUNER_XC2028 },
1162 },
1163 .pci_list = ivtv_pci_aver_m104,
1164 .i2c = &ivtv_i2c_std,
1165 };
1166
1167
1168
1169
1170
1171 static const struct ivtv_card_pci_info ivtv_pci_buffalo[] = {
1172 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_MELCO, 0x052b },
1173 { 0, 0, 0 }
1174 };
1175
1176 static const struct ivtv_card ivtv_card_buffalo = {
1177 .type = IVTV_CARD_BUFFALO_MV5L,
1178 .name = "Buffalo PC-MV5L/PCI",
1179 .v4l2_capabilities = IVTV_CAP_ENCODER,
1180 .hw_video = IVTV_HW_CX25840,
1181 .hw_audio = IVTV_HW_CX25840,
1182 .hw_audio_ctrl = IVTV_HW_CX25840,
1183 .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER,
1184 .video_inputs = {
1185 { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 },
1186 { IVTV_CARD_INPUT_SVIDEO1, 1,
1187 CX25840_SVIDEO_LUMA3 | CX25840_SVIDEO_CHROMA4 },
1188 { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE1 },
1189 },
1190 .audio_inputs = {
1191 { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 },
1192 { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL },
1193 },
1194 .xceive_pin = 12,
1195 .tuners = {
1196 { .std = V4L2_STD_ALL, .tuner = TUNER_XC2028 },
1197 },
1198 .pci_list = ivtv_pci_buffalo,
1199 .i2c = &ivtv_i2c_std,
1200 };
1201
1202
1203
1204
1205 static const struct ivtv_card_pci_info ivtv_pci_kikyou[] = {
1206 { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_SONY, 0x813d },
1207 { 0, 0, 0 }
1208 };
1209
1210 static const struct ivtv_card ivtv_card_kikyou = {
1211 .type = IVTV_CARD_KIKYOU,
1212 .name = "Sony VAIO Giga Pocket (ENX Kikyou)",
1213 .v4l2_capabilities = IVTV_CAP_ENCODER,
1214 .hw_video = IVTV_HW_SAA7115,
1215 .hw_audio = IVTV_HW_GPIO,
1216 .hw_audio_ctrl = IVTV_HW_GPIO,
1217 .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA7115 | IVTV_HW_TUNER,
1218 .video_inputs = {
1219 { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE1 },
1220 { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE1 },
1221 { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO1 },
1222 },
1223 .audio_inputs = {
1224 { IVTV_CARD_INPUT_AUD_TUNER, IVTV_GPIO_TUNER },
1225 { IVTV_CARD_INPUT_LINE_IN1, IVTV_GPIO_LINE_IN },
1226 { IVTV_CARD_INPUT_LINE_IN2, IVTV_GPIO_LINE_IN },
1227 },
1228 .gpio_init = { .direction = 0x03e1, .initial_value = 0x0320 },
1229 .gpio_audio_input = { .mask = 0x0060,
1230 .tuner = 0x0020,
1231 .linein = 0x0000,
1232 .radio = 0x0060 },
1233 .gpio_audio_mute = { .mask = 0x0000,
1234 .mute = 0x0000 },
1235 .gpio_audio_mode = { .mask = 0x0080,
1236 .mono = 0x0000,
1237 .stereo = 0x0000,
1238 .lang1 = 0x0080,
1239 .lang2 = 0x0000,
1240 .both = 0x0080 },
1241 .tuners = {
1242 { .std = V4L2_STD_ALL, .tuner = TUNER_SONY_BTF_PXN01Z },
1243 },
1244 .pci_list = ivtv_pci_kikyou,
1245 .i2c = &ivtv_i2c_std,
1246 };
1247
1248
1249 static const struct ivtv_card *ivtv_card_list[] = {
1250 &ivtv_card_pvr250,
1251 &ivtv_card_pvr350,
1252 &ivtv_card_pvr150,
1253 &ivtv_card_m179,
1254 &ivtv_card_mpg600,
1255 &ivtv_card_mpg160,
1256 &ivtv_card_pg600,
1257 &ivtv_card_avc2410,
1258 &ivtv_card_avc2010,
1259 &ivtv_card_tg5000tv,
1260 &ivtv_card_va2000,
1261 &ivtv_card_cx23416gyc,
1262 &ivtv_card_gv_mvprx,
1263 &ivtv_card_gv_mvprx2e,
1264 &ivtv_card_gotview_pci_dvd,
1265 &ivtv_card_gotview_pci_dvd2,
1266 &ivtv_card_yuan_mpc622,
1267 &ivtv_card_dctmvtvp1,
1268 &ivtv_card_pg600v2,
1269 &ivtv_card_club3d,
1270 &ivtv_card_avertv_mce116,
1271 &ivtv_card_asus_falcon2,
1272 &ivtv_card_aver_pvr150,
1273 &ivtv_card_aver_ezmaker,
1274 &ivtv_card_aver_m104,
1275 &ivtv_card_buffalo,
1276 &ivtv_card_aver_ultra1500mce,
1277 &ivtv_card_kikyou,
1278
1279
1280
1281 &ivtv_card_pvr350_v1,
1282 &ivtv_card_cx23416gyc_nogr,
1283 &ivtv_card_cx23416gyc_nogrycs,
1284 };
1285
1286 const struct ivtv_card *ivtv_get_card(u16 index)
1287 {
1288 if (index >= ARRAY_SIZE(ivtv_card_list))
1289 return NULL;
1290 return ivtv_card_list[index];
1291 }
1292
1293 int ivtv_get_input(struct ivtv *itv, u16 index, struct v4l2_input *input)
1294 {
1295 const struct ivtv_card_video_input *card_input = itv->card->video_inputs + index;
1296 static const char * const input_strs[] = {
1297 "Tuner 1",
1298 "S-Video 1",
1299 "S-Video 2",
1300 "Composite 1",
1301 "Composite 2",
1302 "Composite 3"
1303 };
1304
1305 if (index >= itv->nof_inputs)
1306 return -EINVAL;
1307 input->index = index;
1308 strscpy(input->name, input_strs[card_input->video_type - 1],
1309 sizeof(input->name));
1310 input->type = (card_input->video_type == IVTV_CARD_INPUT_VID_TUNER ?
1311 V4L2_INPUT_TYPE_TUNER : V4L2_INPUT_TYPE_CAMERA);
1312 input->audioset = (1 << itv->nof_audio_inputs) - 1;
1313 input->std = (input->type == V4L2_INPUT_TYPE_TUNER) ?
1314 itv->tuner_std : V4L2_STD_ALL;
1315 return 0;
1316 }
1317
1318 int ivtv_get_output(struct ivtv *itv, u16 index, struct v4l2_output *output)
1319 {
1320 const struct ivtv_card_output *card_output = itv->card->video_outputs + index;
1321
1322 if (index >= itv->card->nof_outputs)
1323 return -EINVAL;
1324 output->index = index;
1325 strscpy(output->name, card_output->name, sizeof(output->name));
1326 output->type = V4L2_OUTPUT_TYPE_ANALOG;
1327 output->audioset = 1;
1328 output->std = V4L2_STD_ALL;
1329 return 0;
1330 }
1331
1332 int ivtv_get_audio_input(struct ivtv *itv, u16 index, struct v4l2_audio *audio)
1333 {
1334 const struct ivtv_card_audio_input *aud_input = itv->card->audio_inputs + index;
1335 static const char * const input_strs[] = {
1336 "Tuner 1",
1337 "Line In 1",
1338 "Line In 2"
1339 };
1340
1341 memset(audio, 0, sizeof(*audio));
1342 if (index >= itv->nof_audio_inputs)
1343 return -EINVAL;
1344 strscpy(audio->name, input_strs[aud_input->audio_type - 1],
1345 sizeof(audio->name));
1346 audio->index = index;
1347 audio->capability = V4L2_AUDCAP_STEREO;
1348 return 0;
1349 }
1350
1351 int ivtv_get_audio_output(struct ivtv *itv, u16 index, struct v4l2_audioout *aud_output)
1352 {
1353 memset(aud_output, 0, sizeof(*aud_output));
1354 if (itv->card->video_outputs == NULL || index != 0)
1355 return -EINVAL;
1356 strscpy(aud_output->name, "A/V Audio Out", sizeof(aud_output->name));
1357 return 0;
1358 }