2 * device driver for philips saa7134 based TV cards
5 * (c) 2001-04 Gerd Knorr <kraxel@bytesex.org> [SuSE Labs]
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 #include <linux/init.h>
23 #include <linux/module.h>
25 #include "saa7134-reg.h"
28 /* commly used strings */
29 static char name_mute[] = "mute";
30 static char name_radio[] = "Radio";
31 static char name_tv[] = "Television";
32 static char name_tv_mono[] = "TV (mono only)";
33 static char name_comp1[] = "Composite1";
34 static char name_comp2[] = "Composite2";
35 static char name_comp3[] = "Composite3";
36 static char name_comp4[] = "Composite4";
37 static char name_svideo[] = "S-Video";
39 /* ------------------------------------------------------------------ */
40 /* board config info */
42 struct saa7134_board saa7134_boards[] = {
43 [SAA7134_BOARD_UNKNOWN] = {
44 .name = "UNKNOWN/GENERIC",
45 .audio_clock = 0x00187de7,
46 .tuner_type = TUNER_ABSENT,
53 [SAA7134_BOARD_PROTEUS_PRO] = {
55 .name = "Proteus Pro [philips reference design]",
56 .audio_clock = 0x00187de7,
57 .tuner_type = TUNER_PHILIPS_PAL,
78 [SAA7134_BOARD_FLYVIDEO3000] = {
79 /* "Marco d'Itri" <md@Linux.IT> */
80 .name = "LifeView FlyVIDEO3000",
81 .audio_clock = 0x00200000,
82 .tuner_type = TUNER_PHILIPS_PAL,
118 [SAA7134_BOARD_FLYVIDEO2000] = {
119 /* "TC Wan" <tcwan@cs.usm.my> */
120 .name = "LifeView FlyVIDEO2000",
121 .audio_clock = 0x00200000,
122 .tuner_type = TUNER_LG_PAL_NEW_TAPC,
157 [SAA7134_BOARD_FLYTVPLATINUM] = {
158 /* "Arnaud Quette" <aquette@free.fr> */
159 .name = "LifeView FlyTV Platinum",
160 .audio_clock = 0x00200000,
161 .tuner_type = TUNER_PHILIPS_SECAM,
177 [SAA7134_BOARD_EMPRESS] = {
178 /* "Gert Vervoort" <gert.vervoort@philips.com> */
180 .audio_clock = 0x00187de7,
181 .tuner_type = TUNER_PHILIPS_PAL,
201 .video_out = CCIR656,
203 [SAA7134_BOARD_MONSTERTV] = {
204 /* "K.Ohta" <alpha292@bremen.or.jp> */
205 .name = "SKNet Monster TV",
206 .audio_clock = 0x00187de7,
207 .tuner_type = TUNER_PHILIPS_NTSC_M,
227 [SAA7134_BOARD_MD9717] = {
228 .name = "Tevion MD 9717",
229 .audio_clock = 0x00200000,
230 .tuner_type = TUNER_PHILIPS_PAL,
237 /* workaround for problems with normal TV sound */
238 .name = name_tv_mono,
260 [SAA7134_BOARD_TVSTATION_RDS] = {
261 /* Typhoon TV Tuner RDS: Art.Nr. 50694 */
262 .name = "KNC One TV-Station RDS / Typhoon TV Tuner RDS",
263 .audio_clock = 0x00200000,
264 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
265 .tda9887_conf = TDA9887_PRESENT,
272 .name = name_tv_mono,
287 .name = "CVid over SVid",
296 [SAA7134_BOARD_TVSTATION_DVR] = {
297 .name = "KNC One TV-Station DVR",
298 .audio_clock = 0x00200000,
299 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
300 .tda9887_conf = TDA9887_PRESENT,
301 .gpiomask = 0x820000,
325 .video_out = CCIR656,
327 [SAA7134_BOARD_CINERGY400] = {
328 .name = "Terratec Cinergy 400 TV",
329 .audio_clock = 0x00200000,
330 .tuner_type = TUNER_PHILIPS_PAL,
345 .name = name_comp2, // CVideo over SVideo Connector
350 [SAA7134_BOARD_MD5044] = {
351 .name = "Medion 5044",
352 .audio_clock = 0x00187de7, // was: 0x00200000,
353 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
354 .tda9887_conf = TDA9887_PRESENT,
361 /* workaround for problems with normal TV sound */
362 .name = name_tv_mono,
384 [SAA7134_BOARD_KWORLD] = {
385 .name = "Kworld/KuroutoShikou SAA7130-TVPCI",
386 .audio_clock = 0x00187de7,
387 .tuner_type = TUNER_PHILIPS_NTSC_M,
403 [SAA7134_BOARD_CINERGY600] = {
404 .name = "Terratec Cinergy 600 TV",
405 .audio_clock = 0x00200000,
406 .tuner_type = TUNER_PHILIPS_PAL,
421 .name = name_comp2, // CVideo over SVideo Connector
430 [SAA7134_BOARD_MD7134] = {
431 .name = "Medion 7134",
432 //.audio_clock = 0x00200000,
433 .audio_clock = 0x00187de7,
434 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
435 .tda9887_conf = TDA9887_PRESENT,
455 [SAA7134_BOARD_TYPHOON_90031] = {
456 /* aka Typhoon "TV+Radio", Art.Nr 90031 */
457 /* Tom Zoerner <tomzo at users sourceforge net> */
458 .name = "Typhoon TV+Radio 90031",
459 .audio_clock = 0x00200000,
460 .tuner_type = TUNER_PHILIPS_PAL,
461 .tda9887_conf = TDA9887_PRESENT,
481 [SAA7134_BOARD_ELSA] = {
482 .name = "ELSA EX-VISION 300TV",
483 .audio_clock = 0x00187de7,
484 .tuner_type = TUNER_HITACHI_NTSC,
500 [SAA7134_BOARD_ELSA_500TV] = {
501 .name = "ELSA EX-VISION 500TV",
502 .audio_clock = 0x00187de7,
503 .tuner_type = TUNER_HITACHI_NTSC,
514 .name = name_tv_mono,
520 [SAA7134_BOARD_ASUSTeK_TVFM7134] = {
521 .name = "ASUS TV-FM 7134",
522 .audio_clock = 0x00187de7,
523 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
524 .tda9887_conf = TDA9887_PRESENT,
544 [SAA7134_BOARD_VA1000POWER] = {
545 .name = "AOPEN VA1000 POWER",
546 .audio_clock = 0x00187de7,
547 .tuner_type = TUNER_PHILIPS_NTSC,
563 [SAA7134_BOARD_10MOONSTVMASTER] = {
564 /* "lilicheng" <llc@linuxfans.org> */
565 .name = "10MOONS PCI TV CAPTURE CARD",
566 .audio_clock = 0x00200000,
567 .tuner_type = TUNER_LG_PAL_NEW_TAPC,
602 [SAA7134_BOARD_BMK_MPEX_NOTUNER] = {
603 /* "Andrew de Quincey" <adq@lidskialf.net> */
604 .name = "BMK MPEX No Tuner",
605 .audio_clock = 0x200000,
606 .tuner_type = TUNER_ABSENT,
629 .video_out = CCIR656,
631 [SAA7134_BOARD_VIDEOMATE_TV] = {
632 .name = "Compro VideoMate TV",
633 .audio_clock = 0x00187de7,
634 .tuner_type = TUNER_PHILIPS_NTSC_M,
650 [SAA7134_BOARD_CRONOS_PLUS] = {
656 14 .. 15 VIDIN_SEL */
657 .name = "Matrox CronosPlus",
658 .tuner_type = TUNER_ABSENT,
682 [SAA7134_BOARD_MD2819] = {
683 .name = "AverMedia M156 / Medion 2819",
684 .audio_clock = 0x00187de7,
685 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
686 .tda9887_conf = TDA9887_PRESENT,
710 [SAA7134_BOARD_BMK_MPEX_TUNER] = {
711 /* "Greg Wickham <greg.wickham@grangenet.net> */
712 .name = "BMK MPEX Tuner",
713 .audio_clock = 0x200000,
714 .tuner_type = TUNER_PHILIPS_PAL,
730 .video_out = CCIR656,
732 [SAA7134_BOARD_ASUSTEK_TVFM7133] = {
733 .name = "ASUS TV-FM 7133",
734 .audio_clock = 0x00187de7,
735 // probably wrong, the 7133 one is the NTSC version ...
736 // .tuner_type = TUNER_PHILIPS_FM1236_MK3
737 .tuner_type = TUNER_LG_NTSC_NEW_TAPC,
738 .tda9887_conf = TDA9887_PRESENT,
758 [SAA7134_BOARD_PINNACLE_PCTV_STEREO] = {
759 .name = "Pinnacle PCTV Stereo (saa7134)",
760 .audio_clock = 0x00187de7,
761 .tuner_type = TUNER_MT2032,
762 .tda9887_conf = TDA9887_PRESENT,
782 [SAA7134_BOARD_MANLI_MTV002] = {
783 /* Ognjen Nastic <ognjen@logosoft.ba> */
784 .name = "Manli MuchTV M-TV002",
785 .audio_clock = 0x00200000,
786 .tuner_type = TUNER_PHILIPS_PAL,
806 [SAA7134_BOARD_MANLI_MTV001] = {
807 /* Ognjen Nastic <ognjen@logosoft.ba> UNTESTED */
808 .name = "Manli MuchTV M-TV001",
809 .audio_clock = 0x00200000,
810 .tuner_type = TUNER_PHILIPS_PAL,
826 [SAA7134_BOARD_TG3000TV] = {
827 /* TransGear 3000TV */
828 .name = "Nagase Sangyo TransGear 3000TV",
829 .audio_clock = 0x00187de7,
830 .tuner_type = TUNER_PHILIPS_NTSC_M,
846 [SAA7134_BOARD_ECS_TVP3XP] = {
847 .name = "Elitegroup ECS TVP3XP FM1216 Tuner Card(PAL-BG,FM) ",
848 .audio_clock = 0x187de7, // xtal 32.1 MHz
849 .tuner_type = TUNER_PHILIPS_PAL,
856 .name = name_tv_mono,
869 .name = "CVid over SVid",
878 [SAA7134_BOARD_ECS_TVP3XP_4CB5] = {
879 .name = "Elitegroup ECS TVP3XP FM1236 Tuner Card (NTSC,FM)",
880 .audio_clock = 0x187de7,
881 .tuner_type = TUNER_PHILIPS_NTSC,
888 .name = name_tv_mono,
901 .name = "CVid over SVid",
910 [SAA7134_BOARD_AVACSSMARTTV] = {
911 /* Roman Pszonczenko <romka@kolos.math.uni.lodz.pl> */
912 .name = "AVACS SmartTV",
913 .audio_clock = 0x00187de7,
914 .tuner_type = TUNER_PHILIPS_PAL,
921 .name = name_tv_mono,
944 [SAA7134_BOARD_AVERMEDIA_DVD_EZMAKER] = {
945 /* Michael Smith <msmith@cbnco.com> */
946 .name = "AVerMedia DVD EZMaker",
947 .audio_clock = 0x00187de7,
948 .tuner_type = TUNER_ABSENT,
954 [SAA7134_BOARD_NOVAC_PRIMETV7133] = {
955 /* toshii@netbsd.org */
956 .name = "Noval Prime TV 7133",
957 .audio_clock = 0x00200000,
958 .tuner_type = TUNER_ALPS_TSBH1_NTSC,
972 [SAA7134_BOARD_AVERMEDIA_305] = {
973 .name = "AverMedia 305",
974 .audio_clock = 0x00187de7,
975 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
976 .tda9887_conf = TDA9887_PRESENT,
1004 [SAA7133_BOARD_UPMOST_PURPLE_TV] = {
1005 .name = "UPMOST PURPLE TV",
1006 .audio_clock = 0x00187de7,
1007 .tuner_type = TUNER_PHILIPS_FM1236_MK3,
1008 .tda9887_conf = TDA9887_PRESENT,
1015 .name = name_svideo,
1020 [SAA7134_BOARD_ITEMS_MTV005] = {
1021 /* Norman Jonas <normanjonas@arcor.de> */
1022 .name = "Items MuchTV Plus / IT-005",
1023 .audio_clock = 0x00187de7,
1024 .tuner_type = TUNER_PHILIPS_PAL,
1035 .name = name_svideo,
1044 [SAA7134_BOARD_CINERGY200] = {
1045 .name = "Terratec Cinergy 200 TV",
1046 .audio_clock = 0x00200000,
1047 .tuner_type = TUNER_PHILIPS_PAL,
1060 [SAA7134_BOARD_VIDEOMATE_TV_PVR] = {
1061 /* Alain St-Denis <alain@topaze.homeip.net> */
1062 .name = "Compro VideoMate TV PVR/FM",
1063 .audio_clock = 0x00187de7,
1064 .tuner_type = TUNER_PHILIPS_NTSC_M,
1065 .gpiomask = 0x808c0080,
1067 .name = name_svideo,
1095 const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards);
1097 /* ------------------------------------------------------------------ */
1098 /* PCI ids + subsystem IDs */
1100 struct pci_device_id saa7134_pci_tbl[] = {
1102 .vendor = PCI_VENDOR_ID_PHILIPS,
1103 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1104 .subvendor = PCI_VENDOR_ID_PHILIPS,
1105 .subdevice = 0x2001,
1106 .driver_data = SAA7134_BOARD_PROTEUS_PRO,
1108 .vendor = PCI_VENDOR_ID_PHILIPS,
1109 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
1110 .subvendor = PCI_VENDOR_ID_PHILIPS,
1111 .subdevice = 0x2001,
1112 .driver_data = SAA7134_BOARD_PROTEUS_PRO,
1114 .vendor = PCI_VENDOR_ID_PHILIPS,
1115 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1116 .subvendor = PCI_VENDOR_ID_PHILIPS,
1117 .subdevice = 0x6752,
1118 .driver_data = SAA7134_BOARD_EMPRESS,
1120 .vendor = PCI_VENDOR_ID_PHILIPS,
1121 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1122 .subvendor = 0x1131,
1123 .subdevice = 0x4e85,
1124 .driver_data = SAA7134_BOARD_MONSTERTV,
1126 .vendor = PCI_VENDOR_ID_PHILIPS,
1127 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1128 .subvendor = 0x153B,
1129 .subdevice = 0x1142,
1130 .driver_data = SAA7134_BOARD_CINERGY400,
1132 .vendor = PCI_VENDOR_ID_PHILIPS,
1133 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1134 .subvendor = 0x153B,
1135 .subdevice = 0x1143,
1136 .driver_data = SAA7134_BOARD_CINERGY600,
1138 .vendor = PCI_VENDOR_ID_PHILIPS,
1139 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1140 .subvendor = 0x5168,
1141 .subdevice = 0x0138,
1142 .driver_data = SAA7134_BOARD_FLYVIDEO3000,
1144 .vendor = PCI_VENDOR_ID_PHILIPS,
1145 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1146 .subvendor = 0x4e42, //"Typhoon PCI Capture TV Card" Art.No. 50673
1147 .subdevice = 0x0138,
1148 .driver_data = SAA7134_BOARD_FLYVIDEO3000,
1150 .vendor = PCI_VENDOR_ID_PHILIPS,
1151 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
1152 .subvendor = 0x5168,
1153 .subdevice = 0x0138,
1154 .driver_data = SAA7134_BOARD_FLYVIDEO2000,
1156 .vendor = PCI_VENDOR_ID_PHILIPS,
1157 .device = PCI_DEVICE_ID_PHILIPS_SAA7135,
1158 .subvendor = 0x5168,
1159 .subdevice = 0x0212,
1160 .driver_data = SAA7134_BOARD_FLYTVPLATINUM,
1162 .vendor = PCI_VENDOR_ID_PHILIPS,
1163 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1164 .subvendor = 0x16be,
1165 .subdevice = 0x0003,
1166 .driver_data = SAA7134_BOARD_MD7134,
1168 .vendor = PCI_VENDOR_ID_PHILIPS,
1169 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
1170 .subvendor = 0x1048,
1171 .subdevice = 0x226b,
1172 .driver_data = SAA7134_BOARD_ELSA,
1174 .vendor = PCI_VENDOR_ID_PHILIPS,
1175 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
1176 .subvendor = 0x1048,
1177 .subdevice = 0x226b,
1178 .driver_data = SAA7134_BOARD_ELSA_500TV,
1180 .vendor = PCI_VENDOR_ID_PHILIPS,
1181 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1182 .subvendor = PCI_VENDOR_ID_ASUSTEK,
1183 .subdevice = 0x4842,
1184 .driver_data = SAA7134_BOARD_ASUSTeK_TVFM7134,
1186 .vendor = PCI_VENDOR_ID_PHILIPS,
1187 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1188 .subvendor = PCI_VENDOR_ID_ASUSTEK,
1189 .subdevice = 0x4830,
1190 .driver_data = SAA7134_BOARD_ASUSTeK_TVFM7134,
1192 .vendor = PCI_VENDOR_ID_PHILIPS,
1193 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
1194 .subvendor = PCI_VENDOR_ID_ASUSTEK,
1195 .subdevice = 0x4843,
1196 .driver_data = SAA7134_BOARD_ASUSTEK_TVFM7133,
1198 .vendor = PCI_VENDOR_ID_PHILIPS,
1199 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1200 .subvendor = PCI_VENDOR_ID_ASUSTEK,
1201 .subdevice = 0x4840,
1202 .driver_data = SAA7134_BOARD_ASUSTeK_TVFM7134,
1204 .vendor = PCI_VENDOR_ID_PHILIPS,
1205 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1206 .subvendor = PCI_VENDOR_ID_PHILIPS,
1207 .subdevice = 0xfe01,
1208 .driver_data = SAA7134_BOARD_TVSTATION_RDS,
1210 .vendor = PCI_VENDOR_ID_PHILIPS,
1211 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1212 .subvendor = 0x1894,
1213 .subdevice = 0xfe01,
1214 .driver_data = SAA7134_BOARD_TVSTATION_RDS,
1216 .vendor = PCI_VENDOR_ID_PHILIPS,
1217 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1218 .subvendor = 0x1894,
1219 .subdevice = 0xa006,
1220 .driver_data = SAA7134_BOARD_TVSTATION_DVR,
1222 .vendor = PCI_VENDOR_ID_PHILIPS,
1223 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1224 .subvendor = 0x1131,
1225 .subdevice = 0x7133,
1226 .driver_data = SAA7134_BOARD_VA1000POWER,
1228 .vendor = PCI_VENDOR_ID_PHILIPS,
1229 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
1230 .subvendor = PCI_VENDOR_ID_PHILIPS,
1231 .subdevice = 0x2001,
1232 .driver_data = SAA7134_BOARD_10MOONSTVMASTER,
1234 .vendor = PCI_VENDOR_ID_PHILIPS,
1235 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
1236 .subvendor = 0x185b,
1237 .subdevice = 0xc100,
1238 .driver_data = SAA7134_BOARD_VIDEOMATE_TV,
1240 .vendor = PCI_VENDOR_ID_PHILIPS,
1241 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
1242 .subvendor = PCI_VENDOR_ID_MATROX,
1243 .subdevice = 0x48d0,
1244 .driver_data = SAA7134_BOARD_CRONOS_PLUS,
1246 .vendor = PCI_VENDOR_ID_PHILIPS,
1247 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1248 .subvendor = 0x1461, /* Avermedia Technologies Inc */
1249 .subdevice = 0xa70b,
1250 .driver_data = SAA7134_BOARD_MD2819,
1252 .vendor = PCI_VENDOR_ID_PHILIPS,
1253 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
1254 .subvendor = 0x1461, /* Avermedia Technologies Inc */
1255 .subdevice = 0x2115,
1256 .driver_data = SAA7134_BOARD_AVERMEDIA_305,
1258 .vendor = PCI_VENDOR_ID_PHILIPS,
1259 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
1260 .subvendor = 0x1461, /* Avermedia Technologies Inc */
1261 .subdevice = 0x10ff,
1262 .driver_data = SAA7134_BOARD_AVERMEDIA_DVD_EZMAKER,
1264 /* TransGear 3000TV */
1265 .vendor = PCI_VENDOR_ID_PHILIPS,
1266 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
1267 .subvendor = 0x1461, /* Avermedia Technologies Inc */
1268 .subdevice = 0x050c,
1269 .driver_data = SAA7134_BOARD_TG3000TV,
1271 .vendor = PCI_VENDOR_ID_PHILIPS,
1272 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1273 .subvendor = 0x11bd,
1274 .subdevice = 0x002b,
1275 .driver_data = SAA7134_BOARD_PINNACLE_PCTV_STEREO,
1277 .vendor = PCI_VENDOR_ID_PHILIPS,
1278 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1279 .subvendor = 0x1019,
1280 .subdevice = 0x4cb4,
1281 .driver_data = SAA7134_BOARD_ECS_TVP3XP,
1283 .vendor = PCI_VENDOR_ID_PHILIPS,
1284 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
1285 .subvendor = 0x1019,
1286 .subdevice = 0x4cb5,
1287 .driver_data = SAA7134_BOARD_ECS_TVP3XP_4CB5,
1289 .vendor = PCI_VENDOR_ID_PHILIPS,
1290 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
1291 .subvendor = 0x12ab,
1292 .subdevice = 0x0800,
1293 .driver_data = SAA7133_BOARD_UPMOST_PURPLE_TV,
1295 .vendor = PCI_VENDOR_ID_PHILIPS,
1296 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
1297 .subvendor = 0x153B,
1298 .subdevice = 0x1152,
1299 .driver_data = SAA7134_BOARD_CINERGY200,
1302 .vendor = PCI_VENDOR_ID_PHILIPS,
1303 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
1304 .subvendor = 0x185b,
1305 .subdevice = 0xc100,
1306 .driver_data = SAA7134_BOARD_VIDEOMATE_TV_PVR,
1309 /* --- boards without eeprom + subsystem ID --- */
1310 .vendor = PCI_VENDOR_ID_PHILIPS,
1311 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1312 .subvendor = PCI_VENDOR_ID_PHILIPS,
1314 .driver_data = SAA7134_BOARD_NOAUTO,
1316 .vendor = PCI_VENDOR_ID_PHILIPS,
1317 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
1318 .subvendor = PCI_VENDOR_ID_PHILIPS,
1320 .driver_data = SAA7134_BOARD_NOAUTO,
1323 /* --- default catch --- */
1324 .vendor = PCI_VENDOR_ID_PHILIPS,
1325 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
1326 .subvendor = PCI_ANY_ID,
1327 .subdevice = PCI_ANY_ID,
1328 .driver_data = SAA7134_BOARD_UNKNOWN,
1330 .vendor = PCI_VENDOR_ID_PHILIPS,
1331 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
1332 .subvendor = PCI_ANY_ID,
1333 .subdevice = PCI_ANY_ID,
1334 .driver_data = SAA7134_BOARD_UNKNOWN,
1336 .vendor = PCI_VENDOR_ID_PHILIPS,
1337 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1338 .subvendor = PCI_ANY_ID,
1339 .subdevice = PCI_ANY_ID,
1340 .driver_data = SAA7134_BOARD_UNKNOWN,
1342 .vendor = PCI_VENDOR_ID_PHILIPS,
1343 .device = PCI_DEVICE_ID_PHILIPS_SAA7135,
1344 .subvendor = PCI_ANY_ID,
1345 .subdevice = PCI_ANY_ID,
1346 .driver_data = SAA7134_BOARD_UNKNOWN,
1348 /* --- end of list --- */
1351 MODULE_DEVICE_TABLE(pci, saa7134_pci_tbl);
1353 /* ----------------------------------------------------------- */
1354 /* flyvideo tweaks */
1360 } fly_list[0x20] = {
1361 /* default catch ... */
1364 .tuner_type = TUNER_ABSENT,
1366 /* ... the ones known so far */
1369 .tuner_type = TUNER_LG_PAL_NEW_TAPC,
1372 .model = "PAL-BG / PAL-DK",
1373 .tuner_type = TUNER_PHILIPS_PAL,
1377 .tuner_type = TUNER_ABSENT /* FIXME */,
1382 static void board_flyvideo(struct saa7134_dev *dev)
1385 /* non-working attempt to detect the correct tuner type ... */
1389 value = dev->gpio_value;
1390 index = (value & 0x1f00) >> 8;
1391 printk(KERN_INFO "%s: flyvideo: gpio is 0x%x [model=%s,tuner=%d]\n",
1392 dev->name, value, fly_list[index].model,
1393 fly_list[index].tuner_type);
1394 dev->tuner_type = fly_list[index].tuner_type;
1396 printk("%s: there are different flyvideo cards with different tuners\n"
1397 "%s: out there, you might have to use the tuner=<nr> insmod\n"
1398 "%s: option to override the default value.\n",
1399 dev->name, dev->name, dev->name);
1402 /* ----------------------------------------------------------- */
1404 int saa7134_board_init(struct saa7134_dev *dev)
1406 // Always print gpio, often manufacturers encode tuner type and other info.
1407 saa_writel(SAA7134_GPIO_GPMODE0 >> 2, 0);
1408 dev->gpio_value = saa_readl(SAA7134_GPIO_GPSTATUS0 >> 2);
1409 printk(KERN_INFO "%s: board init: gpio is %x\n", dev->name, dev->gpio_value);
1411 switch (dev->board) {
1412 case SAA7134_BOARD_FLYVIDEO2000:
1413 case SAA7134_BOARD_FLYVIDEO3000:
1414 dev->has_remote = 1;
1416 case SAA7134_BOARD_FLYTVPLATINUM:
1417 board_flyvideo(dev);
1419 case SAA7134_BOARD_CINERGY400:
1420 case SAA7134_BOARD_CINERGY600:
1421 case SAA7134_BOARD_ECS_TVP3XP:
1422 case SAA7134_BOARD_ECS_TVP3XP_4CB5:
1423 dev->has_remote = 1;
1425 case SAA7134_BOARD_AVACSSMARTTV:
1426 dev->has_remote = 1;
1428 case SAA7134_BOARD_MD5044:
1429 printk("%s: seems there are two different versions of the MD5044\n"
1430 "%s: (with the same ID) out there. If sound doesn't work for\n"
1431 "%s: you try the audio_clock_override=0x200000 insmod option.\n",
1432 dev->name,dev->name,dev->name);
1438 /* ----------------------------------------------------------- */