diff options
Diffstat (limited to 'drivers/media/video/cx88/cx88-cards.c')
-rw-r--r-- | drivers/media/video/cx88/cx88-cards.c | 227 |
1 files changed, 220 insertions, 7 deletions
diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c index 951709aa88ba..a76d54503b6f 100644 --- a/drivers/media/video/cx88/cx88-cards.c +++ b/drivers/media/video/cx88/cx88-cards.c | |||
@@ -611,12 +611,12 @@ struct cx88_board cx88_boards[] = { | |||
611 | .input = {{ | 611 | .input = {{ |
612 | .type = CX88_VMUX_TELEVISION, | 612 | .type = CX88_VMUX_TELEVISION, |
613 | .vmux = 0, | 613 | .vmux = 0, |
614 | .gpio0 = 0xed12, /* internal decoder */ | 614 | .gpio0 = 0xed1a, |
615 | .gpio2 = 0x00ff, | 615 | .gpio2 = 0x00ff, |
616 | },{ | 616 | },{ |
617 | .type = CX88_VMUX_DEBUG, | 617 | .type = CX88_VMUX_DEBUG, |
618 | .vmux = 0, | 618 | .vmux = 0, |
619 | .gpio0 = 0xff01, /* mono from tuner chip */ | 619 | .gpio0 = 0xff01, |
620 | },{ | 620 | },{ |
621 | .type = CX88_VMUX_COMPOSITE1, | 621 | .type = CX88_VMUX_COMPOSITE1, |
622 | .vmux = 1, | 622 | .vmux = 1, |
@@ -708,7 +708,7 @@ struct cx88_board cx88_boards[] = { | |||
708 | }, | 708 | }, |
709 | [CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_T] = { | 709 | [CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_T] = { |
710 | .name = "DViCO FusionHDTV 3 Gold-T", | 710 | .name = "DViCO FusionHDTV 3 Gold-T", |
711 | .tuner_type = TUNER_THOMSON_DTT7611, | 711 | .tuner_type = TUNER_THOMSON_DTT761X, |
712 | .radio_type = UNSET, | 712 | .radio_type = UNSET, |
713 | .tuner_addr = ADDR_UNSET, | 713 | .tuner_addr = ADDR_UNSET, |
714 | .radio_addr = ADDR_UNSET, | 714 | .radio_addr = ADDR_UNSET, |
@@ -897,6 +897,158 @@ struct cx88_board cx88_boards[] = { | |||
897 | .gpio3 = 0x0000, | 897 | .gpio3 = 0x0000, |
898 | }}, | 898 | }}, |
899 | }, | 899 | }, |
900 | [CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1] = { | ||
901 | .name = "Hauppauge Nova-S-Plus DVB-S", | ||
902 | .tuner_type = TUNER_ABSENT, | ||
903 | .radio_type = UNSET, | ||
904 | .tuner_addr = ADDR_UNSET, | ||
905 | .radio_addr = ADDR_UNSET, | ||
906 | .input = {{ | ||
907 | .type = CX88_VMUX_DVB, | ||
908 | .vmux = 0, | ||
909 | },{ | ||
910 | .type = CX88_VMUX_COMPOSITE1, | ||
911 | .vmux = 1, | ||
912 | },{ | ||
913 | .type = CX88_VMUX_SVIDEO, | ||
914 | .vmux = 2, | ||
915 | }}, | ||
916 | .dvb = 1, | ||
917 | }, | ||
918 | [CX88_BOARD_HAUPPAUGE_NOVASE2_S1] = { | ||
919 | .name = "Hauppauge Nova-SE2 DVB-S", | ||
920 | .tuner_type = TUNER_ABSENT, | ||
921 | .radio_type = UNSET, | ||
922 | .tuner_addr = ADDR_UNSET, | ||
923 | .radio_addr = ADDR_UNSET, | ||
924 | .input = {{ | ||
925 | .type = CX88_VMUX_DVB, | ||
926 | .vmux = 0, | ||
927 | }}, | ||
928 | .dvb = 1, | ||
929 | }, | ||
930 | [CX88_BOARD_KWORLD_DVBS_100] = { | ||
931 | .name = "KWorld DVB-S 100", | ||
932 | .tuner_type = TUNER_ABSENT, | ||
933 | .radio_type = UNSET, | ||
934 | .tuner_addr = ADDR_UNSET, | ||
935 | .radio_addr = ADDR_UNSET, | ||
936 | .input = {{ | ||
937 | .type = CX88_VMUX_DVB, | ||
938 | .vmux = 0, | ||
939 | },{ | ||
940 | .type = CX88_VMUX_COMPOSITE1, | ||
941 | .vmux = 1, | ||
942 | },{ | ||
943 | .type = CX88_VMUX_SVIDEO, | ||
944 | .vmux = 2, | ||
945 | }}, | ||
946 | .dvb = 1, | ||
947 | }, | ||
948 | [CX88_BOARD_HAUPPAUGE_HVR1100] = { | ||
949 | .name = "Hauppauge WinTV-HVR1100 DVB-T/Hybrid", | ||
950 | .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, | ||
951 | .radio_type = UNSET, | ||
952 | .tuner_addr = ADDR_UNSET, | ||
953 | .radio_addr = ADDR_UNSET, | ||
954 | .tda9887_conf = TDA9887_PRESENT, | ||
955 | .input = {{ | ||
956 | .type = CX88_VMUX_TELEVISION, | ||
957 | .vmux = 0, | ||
958 | },{ | ||
959 | .type = CX88_VMUX_COMPOSITE1, | ||
960 | .vmux = 1, | ||
961 | },{ | ||
962 | .type = CX88_VMUX_SVIDEO, | ||
963 | .vmux = 2, | ||
964 | }}, | ||
965 | /* fixme: Add radio support */ | ||
966 | .dvb = 1, | ||
967 | }, | ||
968 | [CX88_BOARD_HAUPPAUGE_HVR1100LP] = { | ||
969 | .name = "Hauppauge WinTV-HVR1100 DVB-T/Hybrid (Low Profile)", | ||
970 | .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, | ||
971 | .radio_type = UNSET, | ||
972 | .tuner_addr = ADDR_UNSET, | ||
973 | .radio_addr = ADDR_UNSET, | ||
974 | .tda9887_conf = TDA9887_PRESENT, | ||
975 | .input = {{ | ||
976 | .type = CX88_VMUX_TELEVISION, | ||
977 | .vmux = 0, | ||
978 | },{ | ||
979 | .type = CX88_VMUX_COMPOSITE1, | ||
980 | .vmux = 1, | ||
981 | }}, | ||
982 | /* fixme: Add radio support */ | ||
983 | .dvb = 1, | ||
984 | }, | ||
985 | [CX88_BOARD_DNTV_LIVE_DVB_T_PRO] = { | ||
986 | .name = "digitalnow DNTV Live! DVB-T Pro", | ||
987 | .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, | ||
988 | .radio_type = UNSET, | ||
989 | .tuner_addr = ADDR_UNSET, | ||
990 | .radio_addr = ADDR_UNSET, | ||
991 | .tda9887_conf = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE | | ||
992 | TDA9887_PORT2_ACTIVE, | ||
993 | .input = {{ | ||
994 | .type = CX88_VMUX_TELEVISION, | ||
995 | .vmux = 0, | ||
996 | .gpio0 = 0xf80808, | ||
997 | },{ | ||
998 | .type = CX88_VMUX_COMPOSITE1, | ||
999 | .vmux = 1, | ||
1000 | .gpio0 = 0xf80808, | ||
1001 | },{ | ||
1002 | .type = CX88_VMUX_SVIDEO, | ||
1003 | .vmux = 2, | ||
1004 | .gpio0 = 0xf80808, | ||
1005 | }}, | ||
1006 | .radio = { | ||
1007 | .type = CX88_RADIO, | ||
1008 | .gpio0 = 0xf80808, | ||
1009 | }, | ||
1010 | .dvb = 1, | ||
1011 | }, | ||
1012 | [CX88_BOARD_KWORLD_DVB_T_CX22702] = { | ||
1013 | /* Kworld V-stream Xpert DVB-T with Thomson tuner */ | ||
1014 | /* DTT 7579 Conexant CX22702-19 Conexant CX2388x */ | ||
1015 | /* Manenti Marco <marco_manenti@colman.it> */ | ||
1016 | .name = "KWorld/VStream XPert DVB-T with cx22702", | ||
1017 | .tuner_type = TUNER_ABSENT, | ||
1018 | .radio_type = UNSET, | ||
1019 | .tuner_addr = ADDR_UNSET, | ||
1020 | .radio_addr = ADDR_UNSET, | ||
1021 | .input = {{ | ||
1022 | .type = CX88_VMUX_COMPOSITE1, | ||
1023 | .vmux = 1, | ||
1024 | .gpio0 = 0x0700, | ||
1025 | .gpio2 = 0x0101, | ||
1026 | },{ | ||
1027 | .type = CX88_VMUX_SVIDEO, | ||
1028 | .vmux = 2, | ||
1029 | .gpio0 = 0x0700, | ||
1030 | .gpio2 = 0x0101, | ||
1031 | }}, | ||
1032 | .dvb = 1, | ||
1033 | }, | ||
1034 | [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL] = { | ||
1035 | .name = "DViCO FusionHDTV DVB-T Dual Digital", | ||
1036 | .tuner_type = TUNER_ABSENT, /* No analog tuner */ | ||
1037 | .radio_type = UNSET, | ||
1038 | .tuner_addr = ADDR_UNSET, | ||
1039 | .radio_addr = ADDR_UNSET, | ||
1040 | .input = {{ | ||
1041 | .type = CX88_VMUX_COMPOSITE1, | ||
1042 | .vmux = 1, | ||
1043 | .gpio0 = 0x000027df, | ||
1044 | },{ | ||
1045 | .type = CX88_VMUX_SVIDEO, | ||
1046 | .vmux = 2, | ||
1047 | .gpio0 = 0x000027df, | ||
1048 | }}, | ||
1049 | .dvb = 1, | ||
1050 | }, | ||
1051 | |||
900 | }; | 1052 | }; |
901 | const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards); | 1053 | const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards); |
902 | 1054 | ||
@@ -1044,6 +1196,54 @@ struct cx88_subid cx88_subids[] = { | |||
1044 | .subvendor = 0x1461, | 1196 | .subvendor = 0x1461, |
1045 | .subdevice = 0x000a, | 1197 | .subdevice = 0x000a, |
1046 | .card = CX88_BOARD_AVERTV_303, | 1198 | .card = CX88_BOARD_AVERTV_303, |
1199 | },{ | ||
1200 | .subvendor = 0x0070, | ||
1201 | .subdevice = 0x9200, | ||
1202 | .card = CX88_BOARD_HAUPPAUGE_NOVASE2_S1, | ||
1203 | },{ | ||
1204 | .subvendor = 0x0070, | ||
1205 | .subdevice = 0x9201, | ||
1206 | .card = CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1, | ||
1207 | },{ | ||
1208 | .subvendor = 0x0070, | ||
1209 | .subdevice = 0x9202, | ||
1210 | .card = CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1, | ||
1211 | },{ | ||
1212 | .subvendor = 0x17de, | ||
1213 | .subdevice = 0x08b2, | ||
1214 | .card = CX88_BOARD_KWORLD_DVBS_100, | ||
1215 | },{ | ||
1216 | .subvendor = 0x0070, | ||
1217 | .subdevice = 0x9400, | ||
1218 | .card = CX88_BOARD_HAUPPAUGE_HVR1100, | ||
1219 | },{ | ||
1220 | .subvendor = 0x0070, | ||
1221 | .subdevice = 0x9402, | ||
1222 | .card = CX88_BOARD_HAUPPAUGE_HVR1100, | ||
1223 | },{ | ||
1224 | .subvendor = 0x0070, | ||
1225 | .subdevice = 0x9800, | ||
1226 | .card = CX88_BOARD_HAUPPAUGE_HVR1100LP, | ||
1227 | },{ | ||
1228 | .subvendor = 0x0070, | ||
1229 | .subdevice = 0x9802, | ||
1230 | .card = CX88_BOARD_HAUPPAUGE_HVR1100LP, | ||
1231 | },{ | ||
1232 | .subvendor = 0x0070, | ||
1233 | .subdevice = 0x9001, | ||
1234 | .card = CX88_BOARD_HAUPPAUGE_DVB_T1, | ||
1235 | },{ | ||
1236 | .subvendor = 0x1822, | ||
1237 | .subdevice = 0x0025, | ||
1238 | .card = CX88_BOARD_DNTV_LIVE_DVB_T_PRO, | ||
1239 | },{ | ||
1240 | .subvendor = 0x17de, | ||
1241 | .subdevice = 0x08a1, | ||
1242 | .card = CX88_BOARD_KWORLD_DVB_T_CX22702, | ||
1243 | },{ | ||
1244 | .subvendor = 0x18ac, | ||
1245 | .subdevice = 0xdb50, | ||
1246 | .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL, | ||
1047 | }, | 1247 | }, |
1048 | }; | 1248 | }; |
1049 | const unsigned int cx88_idcount = ARRAY_SIZE(cx88_subids); | 1249 | const unsigned int cx88_idcount = ARRAY_SIZE(cx88_subids); |
@@ -1075,20 +1275,19 @@ static void __devinit leadtek_eeprom(struct cx88_core *core, u8 *eeprom_data) | |||
1075 | core->name, core->tuner_type, eeprom_data[0]); | 1275 | core->name, core->tuner_type, eeprom_data[0]); |
1076 | } | 1276 | } |
1077 | 1277 | ||
1078 | |||
1079 | /* ----------------------------------------------------------------------- */ | ||
1080 | |||
1081 | static void hauppauge_eeprom(struct cx88_core *core, u8 *eeprom_data) | 1278 | static void hauppauge_eeprom(struct cx88_core *core, u8 *eeprom_data) |
1082 | { | 1279 | { |
1083 | struct tveeprom tv; | 1280 | struct tveeprom tv; |
1084 | 1281 | ||
1085 | tveeprom_hauppauge_analog(&core->i2c_client, &tv, eeprom_data); | 1282 | tveeprom_hauppauge_analog(&core->i2c_client, &tv, eeprom_data); |
1086 | core->tuner_type = tv.tuner_type; | 1283 | core->tuner_type = tv.tuner_type; |
1284 | core->tuner_formats = tv.tuner_formats; | ||
1087 | core->has_radio = tv.has_radio; | 1285 | core->has_radio = tv.has_radio; |
1088 | 1286 | ||
1089 | /* Make sure we support the board model */ | 1287 | /* Make sure we support the board model */ |
1090 | switch (tv.model) | 1288 | switch (tv.model) |
1091 | { | 1289 | { |
1290 | case 28552: /* WinTV-PVR 'Roslyn' (No IR) */ | ||
1092 | case 90002: /* Nova-T-PCI (9002) */ | 1291 | case 90002: /* Nova-T-PCI (9002) */ |
1093 | case 92001: /* Nova-S-Plus (Video and IR) */ | 1292 | case 92001: /* Nova-S-Plus (Video and IR) */ |
1094 | case 92002: /* Nova-S-Plus (Video and IR) */ | 1293 | case 92002: /* Nova-S-Plus (Video and IR) */ |
@@ -1096,7 +1295,9 @@ static void hauppauge_eeprom(struct cx88_core *core, u8 *eeprom_data) | |||
1096 | case 90500: /* Nova-T-PCI (oem) */ | 1295 | case 90500: /* Nova-T-PCI (oem) */ |
1097 | case 90501: /* Nova-T-PCI (oem/IR) */ | 1296 | case 90501: /* Nova-T-PCI (oem/IR) */ |
1098 | case 92000: /* Nova-SE2 (OEM, No Video or IR) */ | 1297 | case 92000: /* Nova-SE2 (OEM, No Video or IR) */ |
1099 | 1298 | case 94009: /* WinTV-HVR1100 (Video and IR Retail) */ | |
1299 | case 94501: /* WinTV-HVR1100 (Video and IR OEM) */ | ||
1300 | case 98559: /* WinTV-HVR1100LP (Video no IR, Retail - Low Profile) */ | ||
1100 | /* known */ | 1301 | /* known */ |
1101 | break; | 1302 | break; |
1102 | default: | 1303 | default: |
@@ -1211,12 +1412,21 @@ void cx88_card_setup(struct cx88_core *core) | |||
1211 | if (0 == core->i2c_rc) | 1412 | if (0 == core->i2c_rc) |
1212 | leadtek_eeprom(core,eeprom); | 1413 | leadtek_eeprom(core,eeprom); |
1213 | break; | 1414 | break; |
1415 | case CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1: | ||
1416 | case CX88_BOARD_HAUPPAUGE_NOVASE2_S1: | ||
1214 | case CX88_BOARD_HAUPPAUGE_DVB_T1: | 1417 | case CX88_BOARD_HAUPPAUGE_DVB_T1: |
1418 | case CX88_BOARD_HAUPPAUGE_HVR1100: | ||
1419 | case CX88_BOARD_HAUPPAUGE_HVR1100LP: | ||
1215 | if (0 == core->i2c_rc) | 1420 | if (0 == core->i2c_rc) |
1216 | hauppauge_eeprom(core,eeprom); | 1421 | hauppauge_eeprom(core,eeprom); |
1217 | break; | 1422 | break; |
1423 | case CX88_BOARD_KWORLD_DVBS_100: | ||
1424 | cx_write(MO_GP0_IO, 0x000007f8); | ||
1425 | cx_write(MO_GP1_IO, 0x00000001); | ||
1426 | break; | ||
1218 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1: | 1427 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1: |
1219 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS: | 1428 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS: |
1429 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL: | ||
1220 | /* GPIO0:0 is hooked to mt352 reset pin */ | 1430 | /* GPIO0:0 is hooked to mt352 reset pin */ |
1221 | cx_set(MO_GP0_IO, 0x00000101); | 1431 | cx_set(MO_GP0_IO, 0x00000101); |
1222 | cx_clear(MO_GP0_IO, 0x00000001); | 1432 | cx_clear(MO_GP0_IO, 0x00000001); |
@@ -1232,6 +1442,9 @@ void cx88_card_setup(struct cx88_core *core) | |||
1232 | cx_clear(MO_GP0_IO, 0x00000007); | 1442 | cx_clear(MO_GP0_IO, 0x00000007); |
1233 | cx_set(MO_GP2_IO, 0x00000101); | 1443 | cx_set(MO_GP2_IO, 0x00000101); |
1234 | break; | 1444 | break; |
1445 | case CX88_BOARD_DNTV_LIVE_DVB_T_PRO: | ||
1446 | cx_write(MO_GP0_IO, 0x00080808); | ||
1447 | break; | ||
1235 | case CX88_BOARD_ATI_HDTVWONDER: | 1448 | case CX88_BOARD_ATI_HDTVWONDER: |
1236 | if (0 == core->i2c_rc) { | 1449 | if (0 == core->i2c_rc) { |
1237 | /* enable tuner */ | 1450 | /* enable tuner */ |