32 #define MSP_TUNER MSP_INPUT(MSP_IN_SCART1, MSP_IN_TUNER1, \
33 MSP_DSP_IN_TUNER, MSP_DSP_IN_TUNER)
34 #define MSP_SCART1 MSP_INPUT(MSP_IN_SCART1, MSP_IN_TUNER1, \
35 MSP_DSP_IN_SCART, MSP_DSP_IN_SCART)
36 #define MSP_SCART2 MSP_INPUT(MSP_IN_SCART2, MSP_IN_TUNER1, \
37 MSP_DSP_IN_SCART, MSP_DSP_IN_SCART)
38 #define MSP_SCART3 MSP_INPUT(MSP_IN_SCART3, MSP_IN_TUNER1, \
39 MSP_DSP_IN_SCART, MSP_DSP_IN_SCART)
40 #define MSP_MONO MSP_INPUT(MSP_IN_MONO, MSP_IN_TUNER1, \
41 MSP_DSP_IN_SCART, MSP_DSP_IN_SCART)
43 #define V4L2_STD_PAL_SECAM (V4L2_STD_PAL|V4L2_STD_SECAM)
76 static const struct ivtv_card ivtv_card_pvr250 = {
78 .name =
"Hauppauge WinTV PVR-250",
109 .name =
"S-Video + Composite",
129 static const struct ivtv_card ivtv_card_pvr350 = {
131 .name =
"Hauppauge WinTV PVR-350",
133 .video_outputs = ivtv_pvr350_outputs,
134 .nof_outputs =
ARRAY_SIZE(ivtv_pvr350_outputs),
155 .i2c = &ivtv_i2c_std,
162 static const struct ivtv_card ivtv_card_pvr350_v1 = {
164 .name =
"Hauppauge WinTV PVR-350 (V1)",
166 .video_outputs = ivtv_pvr350_outputs,
167 .nof_outputs =
ARRAY_SIZE(ivtv_pvr350_outputs),
187 .i2c = &ivtv_i2c_std,
194 static const struct ivtv_card ivtv_card_pvr150 = {
196 .name =
"Hauppauge WinTV PVR-150",
224 .gpio_init = { .direction = 0x1f01, .initial_value = 0x26f3 },
225 .i2c = &ivtv_i2c_std,
238 static const struct ivtv_card ivtv_card_m179 = {
240 .name =
"AVerMedia M179",
255 .gpio_init = { .direction = 0xe380, .initial_value = 0x8290 },
256 .gpio_audio_input = { .mask = 0x8040, .tuner = 0x8000, .linein = 0x0000 },
257 .gpio_audio_mute = { .mask = 0x2000, .mute = 0x2000 },
258 .gpio_audio_mode = { .mask = 0x4300, .mono = 0x4000, .stereo = 0x0200,
259 .lang1 = 0x0200, .lang2 = 0x0100, .both = 0x0000 },
260 .gpio_audio_freq = { .mask = 0x0018, .f32000 = 0x0000,
261 .f44100 = 0x0008, .f48000 = 0x0010 },
262 .gpio_audio_detect = { .mask = 0x4000, .stereo = 0x0000 },
267 .pci_list = ivtv_pci_m179,
268 .i2c = &ivtv_i2c_std,
281 static const struct ivtv_card ivtv_card_mpg600 = {
283 .name =
"Yuan MPG600, Kuroutoshikou ITVC16-STVLP",
298 .gpio_init = { .direction = 0x3080, .initial_value = 0x0004 },
299 .gpio_audio_input = { .mask = 0x3000, .tuner = 0x0000, .linein = 0x2000 },
300 .gpio_audio_mute = { .mask = 0x0001, .mute = 0x0001 },
301 .gpio_audio_mode = { .mask = 0x000e, .mono = 0x0006, .stereo = 0x0004,
302 .lang1 = 0x0004, .lang2 = 0x0000, .both = 0x0008 },
303 .gpio_audio_detect = { .mask = 0x0900, .stereo = 0x0100 },
309 .pci_list = ivtv_pci_mpg600,
310 .i2c = &ivtv_i2c_std,
323 static const struct ivtv_card ivtv_card_mpg160 = {
325 .name =
"YUAN MPG160, Kuroutoshikou ITVC15-STVLP, I/O Data GV-M2TV/PCI",
340 .gpio_init = { .direction = 0x7080, .initial_value = 0x400c },
341 .gpio_audio_input = { .mask = 0x3000, .tuner = 0x0000, .linein = 0x2000 },
342 .gpio_audio_mute = { .mask = 0x0001, .mute = 0x0001 },
343 .gpio_audio_mode = { .mask = 0x000e, .mono = 0x0006, .stereo = 0x0004,
344 .lang1 = 0x0004, .lang2 = 0x0000, .both = 0x0008 },
345 .gpio_audio_detect = { .mask = 0x0900, .stereo = 0x0100 },
350 .pci_list = ivtv_pci_mpg160,
351 .i2c = &ivtv_i2c_std,
364 static const struct ivtv_card ivtv_card_pg600 = {
366 .name =
"Yuan PG600, Diamond PVR-550",
386 .pci_list = ivtv_pci_pg600,
387 .i2c = &ivtv_i2c_std,
399 static const struct ivtv_card ivtv_card_avc2410 = {
401 .name =
"Adaptec VideOh! AVC-2410",
427 .tuner = TUNER_PHILIPS_FM1236_MK3 },
430 .pci_list = ivtv_pci_avc2410,
431 .i2c = &ivtv_i2c_std,
443 static const struct ivtv_card ivtv_card_avc2010 = {
445 .name =
"Adaptec VideOh! AVC-2010",
459 .pci_list = ivtv_pci_avc2010,
471 static const struct ivtv_card ivtv_card_tg5000tv = {
473 .name =
"Nagase Transgear 5000TV",
491 .gpio_init = { .direction = 0xe080, .initial_value = 0x8000 },
492 .gpio_audio_input = { .mask = 0x8080, .tuner = 0x8000, .linein = 0x0080 },
493 .gpio_audio_mute = { .mask = 0x6000, .mute = 0x6000 },
494 .gpio_audio_mode = { .mask = 0x4300, .mono = 0x4000, .stereo = 0x0200,
495 .lang1 = 0x0300, .lang2 = 0x0000, .both = 0x0200 },
496 .gpio_video_input = { .mask = 0x0030, .tuner = 0x0000,
497 .composite = 0x0010, .svideo = 0x0020 },
499 { .std =
V4L2_STD_MN, .tuner = TUNER_PHILIPS_FQ1286 },
501 .pci_list = ivtv_pci_tg5000tv,
502 .i2c = &ivtv_i2c_std,
514 static const struct ivtv_card ivtv_card_va2000 = {
516 .name =
"AOpen VA2000MAX-SNT6",
530 { .std =
V4L2_STD_MN, .tuner = TUNER_PHILIPS_FQ1286 },
532 .pci_list = ivtv_pci_va2000,
533 .i2c = &ivtv_i2c_std,
547 static const struct ivtv_card ivtv_card_cx23416gyc = {
549 .name =
"Yuan MPG600GR, Kuroutoshikou CX23416GYC-STVLP",
568 .gpio_init = { .direction = 0xf880, .initial_value = 0x8800 },
569 .gpio_video_input = { .mask = 0x0020, .tuner = 0x0000,
570 .composite = 0x0020, .svideo = 0x0020 },
571 .gpio_audio_freq = { .mask = 0xc000, .f32000 = 0x0000,
572 .f44100 = 0x4000, .f48000 = 0x8000 },
575 { .std =
V4L2_STD_ALL, .tuner = TUNER_PHILIPS_FM1236_MK3 },
577 .pci_list = ivtv_pci_cx23416gyc,
578 .i2c = &ivtv_i2c_std,
581 static const struct ivtv_card ivtv_card_cx23416gyc_nogr = {
583 .name =
"Yuan MPG600GR, Kuroutoshikou CX23416GYC-STVLP (no GR)",
600 .gpio_init = { .direction = 0xf880, .initial_value = 0x8800 },
601 .gpio_video_input = { .mask = 0x0020, .tuner = 0x0000,
602 .composite = 0x0020, .svideo = 0x0020 },
603 .gpio_audio_freq = { .mask = 0xc000, .f32000 = 0x0000,
604 .f44100 = 0x4000, .f48000 = 0x8000 },
607 { .std =
V4L2_STD_ALL, .tuner = TUNER_PHILIPS_FM1236_MK3 },
609 .i2c = &ivtv_i2c_std,
612 static const struct ivtv_card ivtv_card_cx23416gyc_nogrycs = {
614 .name =
"Yuan MPG600GR, Kuroutoshikou CX23416GYC-STVLP (no GR/YCS)",
630 .gpio_init = { .direction = 0xf880, .initial_value = 0x8800 },
631 .gpio_video_input = { .mask = 0x0020, .tuner = 0x0000,
632 .composite = 0x0020, .svideo = 0x0020 },
633 .gpio_audio_freq = { .mask = 0xc000, .f32000 = 0x0000,
634 .f44100 = 0x4000, .f48000 = 0x8000 },
637 { .std =
V4L2_STD_ALL, .tuner = TUNER_PHILIPS_FM1236_MK3 },
639 .i2c = &ivtv_i2c_std,
653 static const struct ivtv_card ivtv_card_gv_mvprx = {
655 .name =
"I/O Data GV-MVP/RX, GV-MVP/RX2W (dual tuner)",
672 .gpio_init = { .direction = 0xc301, .initial_value = 0x0200 },
673 .gpio_audio_input = { .mask = 0xffff, .tuner = 0x0200, .linein = 0x0300 },
676 { .std =
V4L2_STD_MN, .tuner = TUNER_PANASONIC_VP27 },
678 .pci_list = ivtv_pci_gv_mvprx,
679 .i2c = &ivtv_i2c_std,
691 static const struct ivtv_card ivtv_card_gv_mvprx2e = {
693 .name =
"I/O Data GV-MVP/RX2E",
709 .gpio_init = { .direction = 0xc301, .initial_value = 0x0200 },
710 .gpio_audio_input = { .mask = 0xffff, .tuner = 0x0200, .linein = 0x0300 },
713 { .std =
V4L2_STD_MN, .tuner = TUNER_PANASONIC_VP27 },
715 .pci_list = ivtv_pci_gv_mvprx2e,
716 .i2c = &ivtv_i2c_std,
728 static const struct ivtv_card ivtv_card_gotview_pci_dvd = {
730 .name =
"GotView PCI DVD",
745 .gpio_init = { .direction = 0xf000, .initial_value = 0xA000 },
750 .pci_list = ivtv_pci_gotview_pci_dvd,
751 .i2c = &ivtv_i2c_std,
763 static const struct ivtv_card ivtv_card_gotview_pci_dvd2 = {
765 .name =
"GotView PCI DVD2 Deluxe",
783 .gpio_init = { .direction = 0x0800, .initial_value = 0 },
784 .gpio_audio_input = { .mask = 0x0800, .tuner = 0, .linein = 0, .radio = 0x0800 },
789 .pci_list = ivtv_pci_gotview_pci_dvd2,
790 .i2c = &ivtv_i2c_std,
802 static const struct ivtv_card ivtv_card_yuan_mpc622 = {
804 .name =
"Yuan MPC622",
820 .gpio_init = { .direction = 0x00ff, .initial_value = 0x0002 },
823 { .std =
V4L2_STD_ALL, .tuner = TUNER_PHILIPS_TDA8290 },
825 .pci_list = ivtv_pci_yuan_mpc622,
826 .i2c = &ivtv_i2c_tda8290,
838 static const struct ivtv_card ivtv_card_dctmvtvp1 = {
840 .name =
"Digital Cowboy DCT-MTVP1",
857 .gpio_init = { .direction = 0xe080, .initial_value = 0x8000 },
858 .gpio_audio_input = { .mask = 0x8080, .tuner = 0x8000, .linein = 0x0080 },
859 .gpio_audio_mute = { .mask = 0x6000, .mute = 0x6000 },
860 .gpio_audio_mode = { .mask = 0x4300, .mono = 0x4000, .stereo = 0x0200,
861 .lang1 = 0x0300, .lang2 = 0x0000, .both = 0x0200 },
862 .gpio_video_input = { .mask = 0x0030, .tuner = 0x0000,
863 .composite = 0x0010, .svideo = 0x0020},
865 { .std =
V4L2_STD_MN, .tuner = TUNER_PHILIPS_FQ1286 },
867 .pci_list = ivtv_pci_dctmvtvp1,
868 .i2c = &ivtv_i2c_std,
881 static const struct ivtv_card ivtv_card_pg600v2 = {
883 .name =
"Yuan PG600-2, GotView PCI DVD Lite",
906 .pci_list = ivtv_pci_pg600v2,
907 .i2c = &ivtv_i2c_std,
919 static const struct ivtv_card ivtv_card_club3d = {
921 .name =
"Club3D ZAP-TV1x01",
942 .pci_list = ivtv_pci_club3d,
943 .i2c = &ivtv_i2c_std,
955 static const struct ivtv_card ivtv_card_avertv_mce116 = {
957 .name =
"AVerTV MCE 116 Plus",
975 .gpio_init = { .direction = 0xe000, .initial_value = 0x4000 },
980 .pci_list = ivtv_pci_avertv_mce116,
981 .i2c = &ivtv_i2c_std,
994 static const struct ivtv_card ivtv_card_aver_pvr150 = {
996 .name =
"AVerMedia PVR-150 Plus / AVerTV M113 Partsnic (Daewoo) Tuner",
1015 .gpio_init = { .direction = 0xc000, .initial_value = 0 },
1016 .gpio_audio_input = { .mask = 0xc000,
1022 { .std =
V4L2_STD_MN, .tuner = TUNER_PARTSNIC_PTI_5NF05 },
1024 .pci_list = ivtv_pci_aver_pvr150,
1026 .i2c = &ivtv_i2c_radio,
1039 static const struct ivtv_card ivtv_card_aver_ultra1500mce = {
1041 .name =
"AVerMedia UltraTV 1500 MCE / AVerTV M113 Philips Tuner",
1042 .comment =
"For non-NTSC tuners, use the pal= or secam= module options",
1061 .gpio_init = { .direction = 0xc000, .initial_value = 0 },
1062 .gpio_audio_input = { .mask = 0xc000,
1068 { .std =
V4L2_STD_MN, .tuner = TUNER_PHILIPS_FM1236_MK3 },
1071 .pci_list = ivtv_pci_aver_ultra1500mce,
1072 .i2c = &ivtv_i2c_std,
1084 static const struct ivtv_card ivtv_card_aver_ezmaker = {
1086 .name =
"AVerMedia EZMaker PCI Deluxe",
1099 .gpio_init = { .direction = 0x4000, .initial_value = 0x4000 },
1101 .pci_list = ivtv_pci_aver_ezmaker,
1115 static const struct ivtv_card ivtv_card_asus_falcon2 = {
1117 .name =
"ASUS Falcon2",
1137 { .std =
V4L2_STD_MN, .tuner = TUNER_PHILIPS_FM1236_MK3 },
1139 .pci_list = ivtv_pci_asus_falcon2,
1140 .i2c = &ivtv_i2c_std,
1152 static const struct ivtv_card ivtv_card_aver_m104 = {
1154 .name =
"AVerMedia M104",
1155 .comment =
"Not yet supported!\n",
1156 .v4l2_capabilities = 0,
1170 .gpio_init = { .direction = 0xe000, .initial_value = 0x4000 },
1175 .pci_list = ivtv_pci_aver_m104,
1176 .i2c = &ivtv_i2c_std,
1188 static const struct ivtv_card ivtv_card_buffalo = {
1190 .name =
"Buffalo PC-MV5L/PCI",
1210 .pci_list = ivtv_pci_buffalo,
1211 .i2c = &ivtv_i2c_std,
1222 static const struct ivtv_card ivtv_card_kikyou = {
1224 .name =
"Sony VAIO Giga Pocket (ENX Kikyou)",
1240 .gpio_init = { .direction = 0x03e1, .initial_value = 0x0320 },
1241 .gpio_audio_input = { .mask = 0x0060,
1245 .gpio_audio_mute = { .mask = 0x0000,
1247 .gpio_audio_mode = { .mask = 0x0080,
1254 { .std =
V4L2_STD_ALL, .tuner = TUNER_SONY_BTF_PXN01Z },
1256 .pci_list = ivtv_pci_kikyou,
1257 .i2c = &ivtv_i2c_std,
1261 static const struct ivtv_card *ivtv_card_list[] = {
1271 &ivtv_card_tg5000tv,
1273 &ivtv_card_cx23416gyc,
1274 &ivtv_card_gv_mvprx,
1275 &ivtv_card_gv_mvprx2e,
1276 &ivtv_card_gotview_pci_dvd,
1277 &ivtv_card_gotview_pci_dvd2,
1278 &ivtv_card_yuan_mpc622,
1279 &ivtv_card_dctmvtvp1,
1282 &ivtv_card_avertv_mce116,
1283 &ivtv_card_asus_falcon2,
1284 &ivtv_card_aver_pvr150,
1285 &ivtv_card_aver_ezmaker,
1286 &ivtv_card_aver_m104,
1288 &ivtv_card_aver_ultra1500mce,
1293 &ivtv_card_pvr350_v1,
1294 &ivtv_card_cx23416gyc_nogr,
1295 &ivtv_card_cx23416gyc_nogrycs,
1302 return ivtv_card_list[
index];
1308 static const char *
const input_strs[] = {
1321 sizeof(input->
name));
1334 if (index >= itv->
card->nof_outputs)
1347 static const char *
const input_strs[] = {
1353 memset(audio, 0,
sizeof(*audio));
1357 sizeof(audio->
name));
1365 memset(aud_output, 0,
sizeof(*aud_output));
1366 if (itv->
card->video_outputs ==
NULL || index != 0)