2 * $Id: saa7134-cards.c,v 1.35 2004/11/07 14:44:59 kraxel Exp $
4 * device driver for philips saa7134 based TV cards
7 * (c) 2001-04 Gerd Knorr <kraxel@bytesex.org> [SuSE Labs]
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 #include <linux/init.h>
25 #include <linux/module.h>
27 #include "saa7134-reg.h"
30 /* commly used strings */
31 static char name_mute[] = "mute";
32 static char name_radio[] = "Radio";
33 static char name_tv[] = "Television";
34 static char name_tv_mono[] = "TV (mono only)";
35 static char name_comp1[] = "Composite1";
36 static char name_comp2[] = "Composite2";
37 static char name_comp3[] = "Composite3";
38 static char name_comp4[] = "Composite4";
39 static char name_svideo[] = "S-Video";
41 /* ------------------------------------------------------------------ */
42 /* board config info */
44 struct saa7134_board saa7134_boards[] = {
45 [SAA7134_BOARD_UNKNOWN] = {
46 .name = "UNKNOWN/GENERIC",
47 .audio_clock = 0x00187de7,
48 .tuner_type = TUNER_ABSENT,
55 [SAA7134_BOARD_PROTEUS_PRO] = {
57 .name = "Proteus Pro [philips reference design]",
58 .audio_clock = 0x00187de7,
59 .tuner_type = TUNER_PHILIPS_PAL,
80 [SAA7134_BOARD_FLYVIDEO3000] = {
81 /* "Marco d'Itri" <md@Linux.IT> */
82 .name = "LifeView FlyVIDEO3000",
83 .audio_clock = 0x00200000,
84 .tuner_type = TUNER_PHILIPS_PAL,
120 [SAA7134_BOARD_FLYVIDEO2000] = {
121 /* "TC Wan" <tcwan@cs.usm.my> */
122 .name = "LifeView FlyVIDEO2000",
123 .audio_clock = 0x00200000,
124 .tuner_type = TUNER_LG_PAL_NEW_TAPC,
159 [SAA7134_BOARD_FLYTVPLATINUM] = {
160 /* "Arnaud Quette" <aquette@free.fr> */
161 .name = "LifeView FlyTV Platinum",
162 .audio_clock = 0x00200000,
163 .tuner_type = TUNER_PHILIPS_SECAM,
179 [SAA7134_BOARD_EMPRESS] = {
180 /* "Gert Vervoort" <gert.vervoort@philips.com> */
182 .audio_clock = 0x00187de7,
183 .tuner_type = TUNER_PHILIPS_PAL,
202 .mpeg = SAA7134_MPEG_EMPRESS,
203 .video_out = CCIR656,
205 [SAA7134_BOARD_MONSTERTV] = {
206 /* "K.Ohta" <alpha292@bremen.or.jp> */
207 .name = "SKNet Monster TV",
208 .audio_clock = 0x00187de7,
209 .tuner_type = TUNER_PHILIPS_NTSC_M,
229 [SAA7134_BOARD_MD9717] = {
230 .name = "Tevion MD 9717",
231 .audio_clock = 0x00200000,
232 .tuner_type = TUNER_PHILIPS_PAL,
239 /* workaround for problems with normal TV sound */
240 .name = name_tv_mono,
262 [SAA7134_BOARD_TVSTATION_RDS] = {
263 /* Typhoon TV Tuner RDS: Art.Nr. 50694 */
264 .name = "KNC One TV-Station RDS / Typhoon TV Tuner RDS",
265 .audio_clock = 0x00200000,
266 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
267 .tda9887_conf = TDA9887_PRESENT,
274 .name = name_tv_mono,
289 .name = "CVid over SVid",
298 [SAA7134_BOARD_TVSTATION_DVR] = {
299 .name = "KNC One TV-Station DVR",
300 .audio_clock = 0x00200000,
301 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
302 .tda9887_conf = TDA9887_PRESENT,
303 .gpiomask = 0x820000,
326 .mpeg = SAA7134_MPEG_EMPRESS,
327 .video_out = CCIR656,
329 [SAA7134_BOARD_CINERGY400] = {
330 .name = "Terratec Cinergy 400 TV",
331 .audio_clock = 0x00200000,
332 .tuner_type = TUNER_PHILIPS_PAL,
347 .name = name_comp2, // CVideo over SVideo Connector
352 [SAA7134_BOARD_MD5044] = {
353 .name = "Medion 5044",
354 .audio_clock = 0x00187de7, // was: 0x00200000,
355 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
356 .tda9887_conf = TDA9887_PRESENT,
363 /* workaround for problems with normal TV sound */
364 .name = name_tv_mono,
386 [SAA7134_BOARD_KWORLD] = {
387 .name = "Kworld/KuroutoShikou SAA7130-TVPCI",
388 .audio_clock = 0x00187de7,
389 .tuner_type = TUNER_PHILIPS_NTSC_M,
405 [SAA7134_BOARD_CINERGY600] = {
406 .name = "Terratec Cinergy 600 TV",
407 .audio_clock = 0x00200000,
408 .tuner_type = TUNER_PHILIPS_PAL,
409 .tda9887_conf = TDA9887_PRESENT,
424 .name = name_comp2, // CVideo over SVideo Connector
433 [SAA7134_BOARD_MD7134] = {
434 .name = "Medion 7134",
435 //.audio_clock = 0x00200000,
436 .audio_clock = 0x00187de7,
437 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
438 .tda9887_conf = TDA9887_PRESENT,
458 [SAA7134_BOARD_TYPHOON_90031] = {
459 /* aka Typhoon "TV+Radio", Art.Nr 90031 */
460 /* Tom Zoerner <tomzo at users sourceforge net> */
461 .name = "Typhoon TV+Radio 90031",
462 .audio_clock = 0x00200000,
463 .tuner_type = TUNER_PHILIPS_PAL,
464 .tda9887_conf = TDA9887_PRESENT,
484 [SAA7134_BOARD_ELSA] = {
485 .name = "ELSA EX-VISION 300TV",
486 .audio_clock = 0x00187de7,
487 .tuner_type = TUNER_HITACHI_NTSC,
503 [SAA7134_BOARD_ELSA_500TV] = {
504 .name = "ELSA EX-VISION 500TV",
505 .audio_clock = 0x00187de7,
506 .tuner_type = TUNER_HITACHI_NTSC,
517 .name = name_tv_mono,
523 [SAA7134_BOARD_ASUSTeK_TVFM7134] = {
524 .name = "ASUS TV-FM 7134",
525 .audio_clock = 0x00187de7,
526 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
527 .tda9887_conf = TDA9887_PRESENT,
547 [SAA7134_BOARD_VA1000POWER] = {
548 .name = "AOPEN VA1000 POWER",
549 .audio_clock = 0x00187de7,
550 .tuner_type = TUNER_PHILIPS_NTSC,
566 [SAA7134_BOARD_10MOONSTVMASTER] = {
567 /* "lilicheng" <llc@linuxfans.org> */
568 .name = "10MOONS PCI TV CAPTURE CARD",
569 .audio_clock = 0x00200000,
570 .tuner_type = TUNER_LG_PAL_NEW_TAPC,
605 [SAA7134_BOARD_BMK_MPEX_NOTUNER] = {
606 /* "Andrew de Quincey" <adq@lidskialf.net> */
607 .name = "BMK MPEX No Tuner",
608 .audio_clock = 0x200000,
609 .tuner_type = TUNER_ABSENT,
631 .mpeg = SAA7134_MPEG_EMPRESS,
632 .video_out = CCIR656,
634 [SAA7134_BOARD_VIDEOMATE_TV] = {
635 .name = "Compro VideoMate TV",
636 .audio_clock = 0x00187de7,
637 .tuner_type = TUNER_PHILIPS_NTSC_M,
653 [SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUS] = {
654 .name = "Compro VideoMate TV Gold+",
655 .audio_clock = 0x00187de7,
656 .tuner_type = TUNER_PHILIPS_NTSC_M,
657 .gpiomask = 0x800c0000,
676 [SAA7134_BOARD_CRONOS_PLUS] = {
682 14 .. 15 VIDIN_SEL */
683 .name = "Matrox CronosPlus",
684 .tuner_type = TUNER_ABSENT,
708 [SAA7134_BOARD_MD2819] = {
709 .name = "AverMedia M156 / Medion 2819",
710 .audio_clock = 0x00187de7,
711 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
712 .tda9887_conf = TDA9887_PRESENT,
736 [SAA7134_BOARD_BMK_MPEX_TUNER] = {
737 /* "Greg Wickham <greg.wickham@grangenet.net> */
738 .name = "BMK MPEX Tuner",
739 .audio_clock = 0x200000,
740 .tuner_type = TUNER_PHILIPS_PAL,
755 .mpeg = SAA7134_MPEG_EMPRESS,
756 .video_out = CCIR656,
758 [SAA7134_BOARD_ASUSTEK_TVFM7133] = {
759 .name = "ASUS TV-FM 7133",
760 .audio_clock = 0x00187de7,
761 // probably wrong, the 7133 one is the NTSC version ...
762 // .tuner_type = TUNER_PHILIPS_FM1236_MK3
763 .tuner_type = TUNER_LG_NTSC_NEW_TAPC,
764 .tda9887_conf = TDA9887_PRESENT,
784 [SAA7134_BOARD_PINNACLE_PCTV_STEREO] = {
785 .name = "Pinnacle PCTV Stereo (saa7134)",
786 .audio_clock = 0x00187de7,
787 .tuner_type = TUNER_MT2032,
788 .tda9887_conf = TDA9887_PRESENT | TDA9887_INTERCARRIER,
808 [SAA7134_BOARD_MANLI_MTV002] = {
809 /* Ognjen Nastic <ognjen@logosoft.ba> */
810 .name = "Manli MuchTV M-TV002",
811 .audio_clock = 0x00200000,
812 .tuner_type = TUNER_PHILIPS_PAL,
832 [SAA7134_BOARD_MANLI_MTV001] = {
833 /* Ognjen Nastic <ognjen@logosoft.ba> UNTESTED */
834 .name = "Manli MuchTV M-TV001",
835 .audio_clock = 0x00200000,
836 .tuner_type = TUNER_PHILIPS_PAL,
852 [SAA7134_BOARD_TG3000TV] = {
853 /* TransGear 3000TV */
854 .name = "Nagase Sangyo TransGear 3000TV",
855 .audio_clock = 0x00187de7,
856 .tuner_type = TUNER_PHILIPS_NTSC_M,
872 [SAA7134_BOARD_ECS_TVP3XP] = {
873 .name = "Elitegroup ECS TVP3XP FM1216 Tuner Card(PAL-BG,FM) ",
874 .audio_clock = 0x187de7, // xtal 32.1 MHz
875 .tuner_type = TUNER_PHILIPS_PAL,
882 .name = name_tv_mono,
895 .name = "CVid over SVid",
904 [SAA7134_BOARD_ECS_TVP3XP_4CB5] = {
905 .name = "Elitegroup ECS TVP3XP FM1236 Tuner Card (NTSC,FM)",
906 .audio_clock = 0x187de7,
907 .tuner_type = TUNER_PHILIPS_NTSC,
914 .name = name_tv_mono,
927 .name = "CVid over SVid",
936 [SAA7134_BOARD_AVACSSMARTTV] = {
937 /* Roman Pszonczenko <romka@kolos.math.uni.lodz.pl> */
938 .name = "AVACS SmartTV",
939 .audio_clock = 0x00187de7,
940 .tuner_type = TUNER_PHILIPS_PAL,
947 .name = name_tv_mono,
970 [SAA7134_BOARD_AVERMEDIA_DVD_EZMAKER] = {
971 /* Michael Smith <msmith@cbnco.com> */
972 .name = "AVerMedia DVD EZMaker",
973 .audio_clock = 0x00187de7,
974 .tuner_type = TUNER_ABSENT,
980 [SAA7134_BOARD_NOVAC_PRIMETV7133] = {
981 /* toshii@netbsd.org */
982 .name = "Noval Prime TV 7133",
983 .audio_clock = 0x00200000,
984 .tuner_type = TUNER_ALPS_TSBH1_NTSC,
998 [SAA7134_BOARD_AVERMEDIA_305] = {
999 .name = "AverMedia 305",
1000 .audio_clock = 0x00187de7,
1001 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
1002 .tda9887_conf = TDA9887_PRESENT,
1017 .name = name_svideo,
1030 [SAA7133_BOARD_UPMOST_PURPLE_TV] = {
1031 .name = "UPMOST PURPLE TV",
1032 .audio_clock = 0x00187de7,
1033 .tuner_type = TUNER_PHILIPS_FM1236_MK3,
1034 .tda9887_conf = TDA9887_PRESENT,
1041 .name = name_svideo,
1046 [SAA7134_BOARD_ITEMS_MTV005] = {
1047 /* Norman Jonas <normanjonas@arcor.de> */
1048 .name = "Items MuchTV Plus / IT-005",
1049 .audio_clock = 0x00187de7,
1050 .tuner_type = TUNER_PHILIPS_PAL,
1061 .name = name_svideo,
1070 [SAA7134_BOARD_CINERGY200] = {
1071 .name = "Terratec Cinergy 200 TV",
1072 .audio_clock = 0x00200000,
1073 .tuner_type = TUNER_PHILIPS_PAL,
1084 .name = name_svideo,
1088 .name = name_comp2, // CVideo over SVideo Connector
1097 [SAA7134_BOARD_VIDEOMATE_TV_PVR] = {
1098 /* Alain St-Denis <alain@topaze.homeip.net> */
1099 .name = "Compro VideoMate TV PVR/FM",
1100 .audio_clock = 0x00187de7,
1101 .tuner_type = TUNER_PHILIPS_NTSC_M,
1102 .gpiomask = 0x808c0080,
1104 .name = name_svideo,
1131 [SAA7134_BOARD_SABRENT_SBTTVFM] = {
1132 /* Michael Rodriguez-Torrent */
1133 .name = "Sabrent SBT-TVFM (saa7130)",
1134 .audio_clock = 0x00187de7,
1135 .tuner_type = TUNER_PHILIPS_NTSC_M,
1136 .tda9887_conf = TDA9887_PRESENT,
1147 .name = name_svideo,
1156 [SAA7134_BOARD_ZOLID_XPERT_TV7134] = {
1157 /* Helge Jensen <helge.jensen@slog.dk> */
1158 .name = ":Zolid Xpert TV7134",
1159 .audio_clock = 0x00187de7,
1160 .tuner_type = TUNER_PHILIPS_NTSC,
1162 .name = name_svideo,
1176 [SAA7134_BOARD_EMPIRE_PCI_TV_RADIO_LE] = {
1177 /* "Matteo Az" <matte.az@nospam.libero.it> ;-) */
1178 .name = "Empire PCI TV-Radio LE",
1179 .audio_clock = 0x00187de7,
1180 .tuner_type = TUNER_PHILIPS_PAL,
1183 .name = name_tv_mono,
1194 .name = name_svideo,
1210 [SAA7134_BOARD_AVERMEDIA_307] = {
1211 /* Nickolay V. Shmyrev <nshmyrev@yandex.ru> */
1212 .name = "Avermedia AVerTV Studio 307",
1213 .audio_clock = 0x00187de7,
1214 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
1215 .tda9887_conf = TDA9887_PRESENT,
1230 .name = name_svideo,
1239 [SAA7134_BOARD_AVERMEDIA_CARDBUS] = {
1240 /* Jon Westgate <oryn@oryn.fsck.tv> */
1241 .name = "AVerMedia Cardbus TV/Radio",
1242 .audio_clock = 0x00200000,
1243 .tuner_type = TUNER_PHILIPS_PAL,
1254 .name = name_svideo,
1263 [SAA7134_BOARD_CINERGY400_CARDBUS] = {
1264 .name = "Terratec Cinergy 400 mobile",
1265 .audio_clock = 0x187de7,
1266 .tuner_type = UNSET /* not supported yet :/ */,
1276 .name = name_svideo,
1282 const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards);
1284 /* ------------------------------------------------------------------ */
1285 /* PCI ids + subsystem IDs */
1287 struct pci_device_id saa7134_pci_tbl[] = {
1289 .vendor = PCI_VENDOR_ID_PHILIPS,
1290 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1291 .subvendor = PCI_VENDOR_ID_PHILIPS,
1292 .subdevice = 0x2001,
1293 .driver_data = SAA7134_BOARD_PROTEUS_PRO,
1295 .vendor = PCI_VENDOR_ID_PHILIPS,
1296 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
1297 .subvendor = PCI_VENDOR_ID_PHILIPS,
1298 .subdevice = 0x2001,
1299 .driver_data = SAA7134_BOARD_PROTEUS_PRO,
1301 .vendor = PCI_VENDOR_ID_PHILIPS,
1302 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1303 .subvendor = PCI_VENDOR_ID_PHILIPS,
1304 .subdevice = 0x6752,
1305 .driver_data = SAA7134_BOARD_EMPRESS,
1307 .vendor = PCI_VENDOR_ID_PHILIPS,
1308 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1309 .subvendor = 0x1131,
1310 .subdevice = 0x4e85,
1311 .driver_data = SAA7134_BOARD_MONSTERTV,
1313 .vendor = PCI_VENDOR_ID_PHILIPS,
1314 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1315 .subvendor = 0x153B,
1316 .subdevice = 0x1142,
1317 .driver_data = SAA7134_BOARD_CINERGY400,
1319 .vendor = PCI_VENDOR_ID_PHILIPS,
1320 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1321 .subvendor = 0x153B,
1322 .subdevice = 0x1143,
1323 .driver_data = SAA7134_BOARD_CINERGY600,
1325 .vendor = PCI_VENDOR_ID_PHILIPS,
1326 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
1327 .subvendor = 0x153b,
1328 .subdevice = 0x1162,
1329 .driver_data = SAA7134_BOARD_CINERGY400_CARDBUS,
1331 .vendor = PCI_VENDOR_ID_PHILIPS,
1332 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1333 .subvendor = 0x5168,
1334 .subdevice = 0x0138,
1335 .driver_data = SAA7134_BOARD_FLYVIDEO3000,
1337 .vendor = PCI_VENDOR_ID_PHILIPS,
1338 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1339 .subvendor = 0x4e42, //"Typhoon PCI Capture TV Card" Art.No. 50673
1340 .subdevice = 0x0138,
1341 .driver_data = SAA7134_BOARD_FLYVIDEO3000,
1343 .vendor = PCI_VENDOR_ID_PHILIPS,
1344 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
1345 .subvendor = 0x5168,
1346 .subdevice = 0x0138,
1347 .driver_data = SAA7134_BOARD_FLYVIDEO2000,
1349 .vendor = PCI_VENDOR_ID_PHILIPS,
1350 .device = PCI_DEVICE_ID_PHILIPS_SAA7135,
1351 .subvendor = 0x5168,
1352 .subdevice = 0x0212,
1353 .driver_data = SAA7134_BOARD_FLYTVPLATINUM,
1355 .vendor = PCI_VENDOR_ID_PHILIPS,
1356 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1357 .subvendor = 0x16be,
1358 .subdevice = 0x0003,
1359 .driver_data = SAA7134_BOARD_MD7134,
1361 .vendor = PCI_VENDOR_ID_PHILIPS,
1362 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
1363 .subvendor = 0x1048,
1364 .subdevice = 0x226b,
1365 .driver_data = SAA7134_BOARD_ELSA,
1367 .vendor = PCI_VENDOR_ID_PHILIPS,
1368 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
1369 .subvendor = 0x1048,
1370 .subdevice = 0x226b,
1371 .driver_data = SAA7134_BOARD_ELSA_500TV,
1373 .vendor = PCI_VENDOR_ID_PHILIPS,
1374 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1375 .subvendor = PCI_VENDOR_ID_ASUSTEK,
1376 .subdevice = 0x4842,
1377 .driver_data = SAA7134_BOARD_ASUSTeK_TVFM7134,
1379 .vendor = PCI_VENDOR_ID_PHILIPS,
1380 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1381 .subvendor = PCI_VENDOR_ID_ASUSTEK,
1382 .subdevice = 0x4830,
1383 .driver_data = SAA7134_BOARD_ASUSTeK_TVFM7134,
1385 .vendor = PCI_VENDOR_ID_PHILIPS,
1386 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
1387 .subvendor = PCI_VENDOR_ID_ASUSTEK,
1388 .subdevice = 0x4843,
1389 .driver_data = SAA7134_BOARD_ASUSTEK_TVFM7133,
1391 .vendor = PCI_VENDOR_ID_PHILIPS,
1392 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1393 .subvendor = PCI_VENDOR_ID_ASUSTEK,
1394 .subdevice = 0x4840,
1395 .driver_data = SAA7134_BOARD_ASUSTeK_TVFM7134,
1397 .vendor = PCI_VENDOR_ID_PHILIPS,
1398 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1399 .subvendor = PCI_VENDOR_ID_PHILIPS,
1400 .subdevice = 0xfe01,
1401 .driver_data = SAA7134_BOARD_TVSTATION_RDS,
1403 .vendor = PCI_VENDOR_ID_PHILIPS,
1404 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1405 .subvendor = 0x1894,
1406 .subdevice = 0xfe01,
1407 .driver_data = SAA7134_BOARD_TVSTATION_RDS,
1409 .vendor = PCI_VENDOR_ID_PHILIPS,
1410 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1411 .subvendor = 0x1894,
1412 .subdevice = 0xa006,
1413 .driver_data = SAA7134_BOARD_TVSTATION_DVR,
1415 .vendor = PCI_VENDOR_ID_PHILIPS,
1416 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1417 .subvendor = 0x1131,
1418 .subdevice = 0x7133,
1419 .driver_data = SAA7134_BOARD_VA1000POWER,
1421 .vendor = PCI_VENDOR_ID_PHILIPS,
1422 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
1423 .subvendor = PCI_VENDOR_ID_PHILIPS,
1424 .subdevice = 0x2001,
1425 .driver_data = SAA7134_BOARD_10MOONSTVMASTER,
1427 .vendor = PCI_VENDOR_ID_PHILIPS,
1428 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
1429 .subvendor = 0x185b,
1430 .subdevice = 0xc100,
1431 .driver_data = SAA7134_BOARD_VIDEOMATE_TV,
1433 .vendor = PCI_VENDOR_ID_PHILIPS,
1434 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
1435 .subvendor = 0x185b,
1436 .subdevice = 0xc100,
1437 .driver_data = SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUS,
1439 .vendor = PCI_VENDOR_ID_PHILIPS,
1440 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
1441 .subvendor = PCI_VENDOR_ID_MATROX,
1442 .subdevice = 0x48d0,
1443 .driver_data = SAA7134_BOARD_CRONOS_PLUS,
1445 .vendor = PCI_VENDOR_ID_PHILIPS,
1446 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1447 .subvendor = 0x1461, /* Avermedia Technologies Inc */
1448 .subdevice = 0xa70b,
1449 .driver_data = SAA7134_BOARD_MD2819,
1451 .vendor = PCI_VENDOR_ID_PHILIPS,
1452 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
1453 .subvendor = 0x1461, /* Avermedia Technologies Inc */
1454 .subdevice = 0x2115,
1455 .driver_data = SAA7134_BOARD_AVERMEDIA_305,
1457 .vendor = PCI_VENDOR_ID_PHILIPS,
1458 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
1459 .subvendor = 0x1461, /* Avermedia Technologies Inc */
1460 .subdevice = 0x10ff,
1461 .driver_data = SAA7134_BOARD_AVERMEDIA_DVD_EZMAKER,
1463 /* AVerMedia CardBus */
1464 .vendor = PCI_VENDOR_ID_PHILIPS,
1465 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1466 .subvendor = 0x1461, /* Avermedia Technologies Inc */
1467 .subdevice = 0xd6ee,
1468 .driver_data = SAA7134_BOARD_AVERMEDIA_CARDBUS,
1470 /* TransGear 3000TV */
1471 .vendor = PCI_VENDOR_ID_PHILIPS,
1472 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
1473 .subvendor = 0x1461, /* Avermedia Technologies Inc */
1474 .subdevice = 0x050c,
1475 .driver_data = SAA7134_BOARD_TG3000TV,
1477 .vendor = PCI_VENDOR_ID_PHILIPS,
1478 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1479 .subvendor = 0x11bd,
1480 .subdevice = 0x002b,
1481 .driver_data = SAA7134_BOARD_PINNACLE_PCTV_STEREO,
1483 .vendor = PCI_VENDOR_ID_PHILIPS,
1484 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1485 .subvendor = 0x11bd,
1486 .subdevice = 0x002d, /* 300i DVB-T + PAL */
1487 .driver_data = SAA7134_BOARD_PINNACLE_PCTV_STEREO,
1489 .vendor = PCI_VENDOR_ID_PHILIPS,
1490 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1491 .subvendor = 0x1019,
1492 .subdevice = 0x4cb4,
1493 .driver_data = SAA7134_BOARD_ECS_TVP3XP,
1495 .vendor = PCI_VENDOR_ID_PHILIPS,
1496 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
1497 .subvendor = 0x1019,
1498 .subdevice = 0x4cb5,
1499 .driver_data = SAA7134_BOARD_ECS_TVP3XP_4CB5,
1501 .vendor = PCI_VENDOR_ID_PHILIPS,
1502 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
1503 .subvendor = 0x12ab,
1504 .subdevice = 0x0800,
1505 .driver_data = SAA7133_BOARD_UPMOST_PURPLE_TV,
1507 .vendor = PCI_VENDOR_ID_PHILIPS,
1508 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
1509 .subvendor = 0x153B,
1510 .subdevice = 0x1152,
1511 .driver_data = SAA7134_BOARD_CINERGY200,
1514 .vendor = PCI_VENDOR_ID_PHILIPS,
1515 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
1516 .subvendor = 0x185b,
1517 .subdevice = 0xc100,
1518 .driver_data = SAA7134_BOARD_VIDEOMATE_TV_PVR,
1521 .vendor = PCI_VENDOR_ID_PHILIPS,
1522 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1523 .subvendor = 0x1461, /* Avermedia Technologies Inc */
1524 .subdevice = 0x9715,
1525 .driver_data = SAA7134_BOARD_AVERMEDIA_307,
1528 /* --- boards without eeprom + subsystem ID --- */
1529 .vendor = PCI_VENDOR_ID_PHILIPS,
1530 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1531 .subvendor = PCI_VENDOR_ID_PHILIPS,
1533 .driver_data = SAA7134_BOARD_NOAUTO,
1535 .vendor = PCI_VENDOR_ID_PHILIPS,
1536 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
1537 .subvendor = PCI_VENDOR_ID_PHILIPS,
1539 .driver_data = SAA7134_BOARD_NOAUTO,
1542 /* --- default catch --- */
1543 .vendor = PCI_VENDOR_ID_PHILIPS,
1544 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
1545 .subvendor = PCI_ANY_ID,
1546 .subdevice = PCI_ANY_ID,
1547 .driver_data = SAA7134_BOARD_UNKNOWN,
1549 .vendor = PCI_VENDOR_ID_PHILIPS,
1550 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
1551 .subvendor = PCI_ANY_ID,
1552 .subdevice = PCI_ANY_ID,
1553 .driver_data = SAA7134_BOARD_UNKNOWN,
1555 .vendor = PCI_VENDOR_ID_PHILIPS,
1556 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
1557 .subvendor = PCI_ANY_ID,
1558 .subdevice = PCI_ANY_ID,
1559 .driver_data = SAA7134_BOARD_UNKNOWN,
1561 .vendor = PCI_VENDOR_ID_PHILIPS,
1562 .device = PCI_DEVICE_ID_PHILIPS_SAA7135,
1563 .subvendor = PCI_ANY_ID,
1564 .subdevice = PCI_ANY_ID,
1565 .driver_data = SAA7134_BOARD_UNKNOWN,
1567 /* --- end of list --- */
1570 MODULE_DEVICE_TABLE(pci, saa7134_pci_tbl);
1572 /* ----------------------------------------------------------- */
1573 /* flyvideo tweaks */
1579 } fly_list[0x20] = {
1580 /* default catch ... */
1583 .tuner_type = TUNER_ABSENT,
1585 /* ... the ones known so far */
1588 .tuner_type = TUNER_LG_PAL_NEW_TAPC,
1591 .model = "PAL-BG / PAL-DK",
1592 .tuner_type = TUNER_PHILIPS_PAL,
1596 .tuner_type = TUNER_ABSENT /* FIXME */,
1601 static void board_flyvideo(struct saa7134_dev *dev)
1604 /* non-working attempt to detect the correct tuner type ... */
1608 value = dev->gpio_value;
1609 index = (value & 0x1f00) >> 8;
1610 printk(KERN_INFO "%s: flyvideo: gpio is 0x%x [model=%s,tuner=%d]\n",
1611 dev->name, value, fly_list[index].model,
1612 fly_list[index].tuner_type);
1613 dev->tuner_type = fly_list[index].tuner_type;
1615 printk("%s: there are different flyvideo cards with different tuners\n"
1616 "%s: out there, you might have to use the tuner=<nr> insmod\n"
1617 "%s: option to override the default value.\n",
1618 dev->name, dev->name, dev->name);
1621 /* ----------------------------------------------------------- */
1623 int saa7134_board_init1(struct saa7134_dev *dev)
1625 // Always print gpio, often manufacturers encode tuner type and other info.
1626 saa_writel(SAA7134_GPIO_GPMODE0 >> 2, 0);
1627 dev->gpio_value = saa_readl(SAA7134_GPIO_GPSTATUS0 >> 2);
1628 printk(KERN_INFO "%s: board init: gpio is %x\n", dev->name, dev->gpio_value);
1630 switch (dev->board) {
1631 case SAA7134_BOARD_FLYVIDEO2000:
1632 case SAA7134_BOARD_FLYVIDEO3000:
1633 dev->has_remote = 1;
1635 case SAA7134_BOARD_FLYTVPLATINUM:
1636 board_flyvideo(dev);
1638 case SAA7134_BOARD_CINERGY400:
1639 case SAA7134_BOARD_CINERGY600:
1640 case SAA7134_BOARD_ECS_TVP3XP:
1641 case SAA7134_BOARD_ECS_TVP3XP_4CB5:
1642 case SAA7134_BOARD_MD2819:
1643 case SAA7134_BOARD_AVERMEDIA_307:
1644 dev->has_remote = 1;
1646 case SAA7134_BOARD_AVACSSMARTTV:
1647 dev->has_remote = 1;
1649 case SAA7134_BOARD_MD5044:
1650 printk("%s: seems there are two different versions of the MD5044\n"
1651 "%s: (with the same ID) out there. If sound doesn't work for\n"
1652 "%s: you try the audio_clock_override=0x200000 insmod option.\n",
1653 dev->name,dev->name,dev->name);
1655 case SAA7134_BOARD_CINERGY400_CARDBUS:
1656 /* power-up tuner chip */
1657 saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0x00040000, 0x00040000);
1658 saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x00040000, 0x00000000);
1664 /* stuff which needs working i2c */
1665 int saa7134_board_init2(struct saa7134_dev *dev)
1670 switch (dev->board) {
1671 case SAA7134_BOARD_BMK_MPEX_NOTUNER:
1672 case SAA7134_BOARD_BMK_MPEX_TUNER:
1673 dev->i2c_client.addr = 0x60;
1674 board = (i2c_master_recv(&dev->i2c_client,&buf,0) < 0)
1675 ? SAA7134_BOARD_BMK_MPEX_NOTUNER
1676 : SAA7134_BOARD_BMK_MPEX_TUNER;
1677 if (board == dev->board)
1679 printk("%s: board type fixup: %s\n", dev->name,
1680 saa7134_boards[dev->board].name);
1681 dev->tuner_type = saa7134_boards[dev->board].tuner_type;
1682 if (TUNER_ABSENT != dev->tuner_type)
1683 saa7134_i2c_call_clients(dev,TUNER_SET_TYPE,&dev->tuner_type);
1689 /* ----------------------------------------------------------- */