2 * $Id: saa7134-cards.c,v 1.80 2005/07/07 01:49:30 mkrufky 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,
50 .tuner_addr = ADDR_UNSET,
51 .radio_addr = ADDR_UNSET,
59 [SAA7134_BOARD_PROTEUS_PRO] = {
61 .name = "Proteus Pro [philips reference design]",
62 .audio_clock = 0x00187de7,
63 .tuner_type = TUNER_PHILIPS_PAL,
65 .tuner_addr = ADDR_UNSET,
66 .radio_addr = ADDR_UNSET,
88 [SAA7134_BOARD_FLYVIDEO3000] = {
89 /* "Marco d'Itri" <md@Linux.IT> */
90 .name = "LifeView FlyVIDEO3000",
91 .audio_clock = 0x00200000,
92 .tuner_type = TUNER_PHILIPS_PAL,
94 .tuner_addr = ADDR_UNSET,
95 .radio_addr = ADDR_UNSET,
105 .name = name_tv_mono,
137 [SAA7134_BOARD_FLYVIDEO2000] = {
138 /* "TC Wan" <tcwan@cs.usm.my> */
139 .name = "LifeView FlyVIDEO2000",
140 .audio_clock = 0x00200000,
141 .tuner_type = TUNER_LG_PAL_NEW_TAPC,
143 .tuner_addr = ADDR_UNSET,
144 .radio_addr = ADDR_UNSET,
180 [SAA7134_BOARD_FLYTVPLATINUM_MINI] = {
181 /* "Arnaud Quette" <aquette@free.fr> */
182 .name = "LifeView FlyTV Platinum Mini",
183 .audio_clock = 0x00200000,
184 .tuner_type = TUNER_PHILIPS_TDA8290,
186 .tuner_addr = ADDR_UNSET,
187 .radio_addr = ADDR_UNSET,
204 [SAA7134_BOARD_FLYTVPLATINUM_FM] = {
205 /* LifeView FlyTV Platinum FM (LR214WF) */
206 /* "Peter Missel <peter.missel@onlinehome.de> */
207 .name = "LifeView FlyTV Platinum FM",
208 .audio_clock = 0x00200000,
209 .tuner_type = TUNER_PHILIPS_TDA8290,
211 .tuner_addr = ADDR_UNSET,
212 .radio_addr = ADDR_UNSET,
214 .gpiomask = 0x1E000, /* Set GP16 and unused 15,14,13 to Output */
219 .gpio = 0x10000, /* GP16=1 selects TV input */
222 /* .name = name_tv_mono,
228 */ .name = name_comp1, /* Composite signal on S-Video input */
231 /* .gpio = 0x4000, */
233 .name = name_comp2, /* Composite input */
236 /* .gpio = 0x4000, */
238 .name = name_svideo, /* S-Video signal on S-Video input */
241 /* .gpio = 0x4000, */
246 .gpio = 0x00000, /* GP16=0 selects FM radio antenna */
254 [SAA7134_BOARD_EMPRESS] = {
255 /* "Gert Vervoort" <gert.vervoort@philips.com> */
257 .audio_clock = 0x00187de7,
258 .tuner_type = TUNER_PHILIPS_PAL,
260 .tuner_addr = ADDR_UNSET,
261 .radio_addr = ADDR_UNSET,
281 .mpeg = SAA7134_MPEG_EMPRESS,
282 .video_out = CCIR656,
284 [SAA7134_BOARD_MONSTERTV] = {
285 /* "K.Ohta" <alpha292@bremen.or.jp> */
286 .name = "SKNet Monster TV",
287 .audio_clock = 0x00187de7,
288 .tuner_type = TUNER_PHILIPS_NTSC_M,
290 .tuner_addr = ADDR_UNSET,
291 .radio_addr = ADDR_UNSET,
312 [SAA7134_BOARD_MD9717] = {
313 .name = "Tevion MD 9717",
314 .audio_clock = 0x00200000,
315 .tuner_type = TUNER_PHILIPS_PAL,
317 .tuner_addr = ADDR_UNSET,
318 .radio_addr = ADDR_UNSET,
325 /* workaround for problems with normal TV sound */
326 .name = name_tv_mono,
348 [SAA7134_BOARD_TVSTATION_RDS] = {
349 /* Typhoon TV Tuner RDS: Art.Nr. 50694 */
350 .name = "KNC One TV-Station RDS / Typhoon TV Tuner RDS",
351 .audio_clock = 0x00200000,
352 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
354 .tuner_addr = ADDR_UNSET,
355 .radio_addr = ADDR_UNSET,
356 .tda9887_conf = TDA9887_PRESENT,
363 .name = name_tv_mono,
378 .name = "CVid over SVid",
387 [SAA7134_BOARD_TVSTATION_DVR] = {
388 .name = "KNC One TV-Station DVR",
389 .audio_clock = 0x00200000,
390 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
392 .tuner_addr = ADDR_UNSET,
393 .radio_addr = ADDR_UNSET,
394 .tda9887_conf = TDA9887_PRESENT,
395 .gpiomask = 0x820000,
418 .mpeg = SAA7134_MPEG_EMPRESS,
419 .video_out = CCIR656,
421 [SAA7134_BOARD_CINERGY400] = {
422 .name = "Terratec Cinergy 400 TV",
423 .audio_clock = 0x00200000,
424 .tuner_type = TUNER_PHILIPS_PAL,
426 .tuner_addr = ADDR_UNSET,
427 .radio_addr = ADDR_UNSET,
442 .name = name_comp2, /* CVideo over SVideo Connector */
447 [SAA7134_BOARD_MD5044] = {
448 .name = "Medion 5044",
449 .audio_clock = 0x00187de7, /* was: 0x00200000, */
450 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
452 .tuner_addr = ADDR_UNSET,
453 .radio_addr = ADDR_UNSET,
454 .tda9887_conf = TDA9887_PRESENT,
461 /* workaround for problems with normal TV sound */
462 .name = name_tv_mono,
484 [SAA7134_BOARD_KWORLD] = {
485 .name = "Kworld/KuroutoShikou SAA7130-TVPCI",
486 .audio_clock = 0x00187de7,
487 .tuner_type = TUNER_PHILIPS_NTSC_M,
489 .tuner_addr = ADDR_UNSET,
490 .radio_addr = ADDR_UNSET,
506 [SAA7134_BOARD_CINERGY600] = {
507 .name = "Terratec Cinergy 600 TV",
508 .audio_clock = 0x00200000,
509 .tuner_type = TUNER_PHILIPS_PAL,
511 .tuner_addr = ADDR_UNSET,
512 .radio_addr = ADDR_UNSET,
513 .tda9887_conf = TDA9887_PRESENT,
528 .name = name_comp2, /* CVideo over SVideo Connector */
537 [SAA7134_BOARD_MD7134] = {
538 .name = "Medion 7134",
539 .audio_clock = 0x00187de7,
540 .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3,
542 .tuner_addr = ADDR_UNSET,
543 .radio_addr = ADDR_UNSET,
544 .tda9887_conf = TDA9887_PRESENT,
545 .mpeg = SAA7134_MPEG_DVB,
565 [SAA7134_BOARD_TYPHOON_90031] = {
566 /* aka Typhoon "TV+Radio", Art.Nr 90031 */
567 /* Tom Zoerner <tomzo at users sourceforge net> */
568 .name = "Typhoon TV+Radio 90031",
569 .audio_clock = 0x00200000,
570 .tuner_type = TUNER_PHILIPS_PAL,
572 .tuner_addr = ADDR_UNSET,
573 .radio_addr = ADDR_UNSET,
574 .tda9887_conf = TDA9887_PRESENT,
594 [SAA7134_BOARD_ELSA] = {
595 .name = "ELSA EX-VISION 300TV",
596 .audio_clock = 0x00187de7,
597 .tuner_type = TUNER_HITACHI_NTSC,
599 .tuner_addr = ADDR_UNSET,
600 .radio_addr = ADDR_UNSET,
616 [SAA7134_BOARD_ELSA_500TV] = {
617 .name = "ELSA EX-VISION 500TV",
618 .audio_clock = 0x00187de7,
619 .tuner_type = TUNER_HITACHI_NTSC,
621 .tuner_addr = ADDR_UNSET,
622 .radio_addr = ADDR_UNSET,
633 .name = name_tv_mono,
639 [SAA7134_BOARD_ASUSTeK_TVFM7134] = {
640 .name = "ASUS TV-FM 7134",
641 .audio_clock = 0x00187de7,
642 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
644 .tuner_addr = ADDR_UNSET,
645 .radio_addr = ADDR_UNSET,
646 .tda9887_conf = TDA9887_PRESENT,
666 [SAA7134_BOARD_ASUSTeK_TVFM7135] = {
667 .name = "ASUS TV-FM 7135",
668 .audio_clock = 0x00187de7,
669 .tuner_type = TUNER_PHILIPS_TDA8290,
671 .tuner_addr = ADDR_UNSET,
672 .radio_addr = ADDR_UNSET,
673 .gpiomask = 0x200000,
702 [SAA7134_BOARD_VA1000POWER] = {
703 .name = "AOPEN VA1000 POWER",
704 .audio_clock = 0x00187de7,
705 .tuner_type = TUNER_PHILIPS_NTSC,
707 .tuner_addr = ADDR_UNSET,
708 .radio_addr = ADDR_UNSET,
724 [SAA7134_BOARD_10MOONSTVMASTER] = {
725 /* "lilicheng" <llc@linuxfans.org> */
726 .name = "10MOONS PCI TV CAPTURE CARD",
727 .audio_clock = 0x00200000,
728 .tuner_type = TUNER_LG_PAL_NEW_TAPC,
730 .tuner_addr = ADDR_UNSET,
731 .radio_addr = ADDR_UNSET,
766 [SAA7134_BOARD_BMK_MPEX_NOTUNER] = {
767 /* "Andrew de Quincey" <adq@lidskialf.net> */
768 .name = "BMK MPEX No Tuner",
769 .audio_clock = 0x200000,
770 .tuner_type = TUNER_ABSENT,
772 .tuner_addr = ADDR_UNSET,
773 .radio_addr = ADDR_UNSET,
795 .mpeg = SAA7134_MPEG_EMPRESS,
796 .video_out = CCIR656,
798 [SAA7134_BOARD_VIDEOMATE_TV] = {
799 .name = "Compro VideoMate TV",
800 .audio_clock = 0x00187de7,
801 .tuner_type = TUNER_PHILIPS_NTSC_M,
803 .tuner_addr = ADDR_UNSET,
804 .radio_addr = ADDR_UNSET,
820 [SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUS] = {
821 .name = "Compro VideoMate TV Gold+",
822 .audio_clock = 0x00187de7,
823 .tuner_type = TUNER_PHILIPS_NTSC_M,
824 .gpiomask = 0x800c0000,
826 .tuner_addr = ADDR_UNSET,
827 .radio_addr = ADDR_UNSET,
844 }}, /* radio and probably mute is missing */
846 [SAA7134_BOARD_CRONOS_PLUS] = {
855 .name = "Matrox CronosPlus",
856 .tuner_type = TUNER_ABSENT,
858 .tuner_addr = ADDR_UNSET,
859 .radio_addr = ADDR_UNSET,
883 [SAA7134_BOARD_MD2819] = {
884 .name = "AverMedia M156 / Medion 2819",
885 .audio_clock = 0x00187de7,
886 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
888 .tuner_addr = ADDR_UNSET,
889 .radio_addr = ADDR_UNSET,
890 .tda9887_conf = TDA9887_PRESENT,
914 [SAA7134_BOARD_BMK_MPEX_TUNER] = {
915 /* "Greg Wickham <greg.wickham@grangenet.net> */
916 .name = "BMK MPEX Tuner",
917 .audio_clock = 0x200000,
918 .tuner_type = TUNER_PHILIPS_PAL,
920 .tuner_addr = ADDR_UNSET,
921 .radio_addr = ADDR_UNSET,
936 .mpeg = SAA7134_MPEG_EMPRESS,
937 .video_out = CCIR656,
939 [SAA7134_BOARD_ASUSTEK_TVFM7133] = {
940 .name = "ASUS TV-FM 7133",
941 .audio_clock = 0x00187de7,
942 /* probably wrong, the 7133 one is the NTSC version ...
943 * .tuner_type = TUNER_PHILIPS_FM1236_MK3 */
944 .tuner_type = TUNER_LG_NTSC_NEW_TAPC,
946 .tuner_addr = ADDR_UNSET,
947 .radio_addr = ADDR_UNSET,
948 .tda9887_conf = TDA9887_PRESENT,
969 [SAA7134_BOARD_PINNACLE_PCTV_STEREO] = {
970 .name = "Pinnacle PCTV Stereo (saa7134)",
971 .audio_clock = 0x00187de7,
972 .tuner_type = TUNER_MT2032,
974 .tuner_addr = ADDR_UNSET,
975 .radio_addr = ADDR_UNSET,
976 .tda9887_conf = TDA9887_PRESENT | TDA9887_INTERCARRIER,
996 [SAA7134_BOARD_MANLI_MTV002] = {
997 /* Ognjen Nastic <ognjen@logosoft.ba> */
998 .name = "Manli MuchTV M-TV002/Behold TV 403 FM",
999 .audio_clock = 0x00200000,
1000 .tuner_type = TUNER_PHILIPS_PAL,
1001 .radio_type = UNSET,
1002 .tuner_addr = ADDR_UNSET,
1003 .radio_addr = ADDR_UNSET,
1005 .name = name_svideo,
1023 [SAA7134_BOARD_MANLI_MTV001] = {
1024 /* Ognjen Nastic <ognjen@logosoft.ba> UNTESTED */
1025 .name = "Manli MuchTV M-TV001/Behold TV 401",
1026 .audio_clock = 0x00200000,
1027 .tuner_type = TUNER_PHILIPS_PAL,
1028 .radio_type = UNSET,
1029 .tuner_addr = ADDR_UNSET,
1030 .radio_addr = ADDR_UNSET,
1032 .name = name_svideo,
1050 [SAA7134_BOARD_TG3000TV] = {
1051 /* TransGear 3000TV */
1052 .name = "Nagase Sangyo TransGear 3000TV",
1053 .audio_clock = 0x00187de7,
1054 .tuner_type = TUNER_PHILIPS_NTSC_M,
1055 .radio_type = UNSET,
1056 .tuner_addr = ADDR_UNSET,
1057 .radio_addr = ADDR_UNSET,
1068 .name = name_svideo,
1073 [SAA7134_BOARD_ECS_TVP3XP] = {
1074 .name = "Elitegroup ECS TVP3XP FM1216 Tuner Card(PAL-BG,FM) ",
1075 .audio_clock = 0x187de7, /* xtal 32.1 MHz */
1076 .tuner_type = TUNER_PHILIPS_PAL,
1077 .radio_type = UNSET,
1078 .tuner_addr = ADDR_UNSET,
1079 .radio_addr = ADDR_UNSET,
1086 .name = name_tv_mono,
1095 .name = name_svideo,
1099 .name = "CVid over SVid",
1108 [SAA7134_BOARD_ECS_TVP3XP_4CB5] = {
1109 .name = "Elitegroup ECS TVP3XP FM1236 Tuner Card (NTSC,FM)",
1110 .audio_clock = 0x187de7,
1111 .tuner_type = TUNER_PHILIPS_NTSC,
1112 .radio_type = UNSET,
1113 .tuner_addr = ADDR_UNSET,
1114 .radio_addr = ADDR_UNSET,
1121 .name = name_tv_mono,
1130 .name = name_svideo,
1134 .name = "CVid over SVid",
1143 [SAA7134_BOARD_AVACSSMARTTV] = {
1144 /* Roman Pszonczenko <romka@kolos.math.uni.lodz.pl> */
1145 .name = "AVACS SmartTV",
1146 .audio_clock = 0x00187de7,
1147 .tuner_type = TUNER_PHILIPS_PAL,
1148 .radio_type = UNSET,
1149 .tuner_addr = ADDR_UNSET,
1150 .radio_addr = ADDR_UNSET,
1157 .name = name_tv_mono,
1170 .name = name_svideo,
1180 [SAA7134_BOARD_AVERMEDIA_DVD_EZMAKER] = {
1181 /* Michael Smith <msmith@cbnco.com> */
1182 .name = "AVerMedia DVD EZMaker",
1183 .audio_clock = 0x00187de7,
1184 .tuner_type = TUNER_ABSENT,
1185 .radio_type = UNSET,
1186 .tuner_addr = ADDR_UNSET,
1187 .radio_addr = ADDR_UNSET,
1192 .name = name_svideo,
1196 [SAA7134_BOARD_NOVAC_PRIMETV7133] = {
1197 /* toshii@netbsd.org */
1198 .name = "Noval Prime TV 7133",
1199 .audio_clock = 0x00200000,
1200 .tuner_type = TUNER_ALPS_TSBH1_NTSC,
1201 .radio_type = UNSET,
1202 .tuner_addr = ADDR_UNSET,
1203 .radio_addr = ADDR_UNSET,
1213 .name = name_svideo,
1217 [SAA7134_BOARD_AVERMEDIA_STUDIO_305] = {
1218 .name = "AverMedia AverTV Studio 305",
1219 .audio_clock = 0x00187de7,
1220 .tuner_type = TUNER_PHILIPS_FM1256_IH3,
1221 .radio_type = UNSET,
1222 .tuner_addr = ADDR_UNSET,
1223 .radio_addr = ADDR_UNSET,
1224 .tda9887_conf = TDA9887_PRESENT,
1239 .name = name_svideo,
1252 [SAA7134_BOARD_UPMOST_PURPLE_TV] = {
1253 .name = "UPMOST PURPLE TV",
1254 .audio_clock = 0x00187de7,
1255 .tuner_type = TUNER_PHILIPS_FM1236_MK3,
1256 .radio_type = UNSET,
1257 .tuner_addr = ADDR_UNSET,
1258 .radio_addr = ADDR_UNSET,
1259 .tda9887_conf = TDA9887_PRESENT,
1266 .name = name_svideo,
1271 [SAA7134_BOARD_ITEMS_MTV005] = {
1272 /* Norman Jonas <normanjonas@arcor.de> */
1273 .name = "Items MuchTV Plus / IT-005",
1274 .audio_clock = 0x00187de7,
1275 .tuner_type = TUNER_PHILIPS_PAL,
1276 .radio_type = UNSET,
1277 .tuner_addr = ADDR_UNSET,
1278 .radio_addr = ADDR_UNSET,
1289 .name = name_svideo,
1298 [SAA7134_BOARD_CINERGY200] = {
1299 .name = "Terratec Cinergy 200 TV",
1300 .audio_clock = 0x00200000,
1301 .tuner_type = TUNER_PHILIPS_PAL,
1302 .radio_type = UNSET,
1303 .tuner_addr = ADDR_UNSET,
1304 .radio_addr = ADDR_UNSET,
1315 .name = name_svideo,
1319 .name = name_comp2, /* CVideo over SVideo Connector */
1328 [SAA7134_BOARD_VIDEOMATE_TV_PVR] = {
1329 /* Alain St-Denis <alain@topaze.homeip.net> */
1330 .name = "Compro VideoMate TV PVR/FM",
1331 .audio_clock = 0x00187de7,
1332 .tuner_type = TUNER_PHILIPS_NTSC_M,
1333 .radio_type = UNSET,
1334 .tuner_addr = ADDR_UNSET,
1335 .radio_addr = ADDR_UNSET,
1336 .gpiomask = 0x808c0080,
1338 .name = name_svideo,
1365 [SAA7134_BOARD_SABRENT_SBTTVFM] = {
1366 /* Michael Rodriguez-Torrent <mrtorrent@asu.edu> */
1367 .name = "Sabrent SBT-TVFM (saa7130)",
1368 .audio_clock = 0x00187de7,
1369 .tuner_type = TUNER_PHILIPS_NTSC_M,
1370 .radio_type = UNSET,
1371 .tuner_addr = ADDR_UNSET,
1372 .radio_addr = ADDR_UNSET,
1383 .name = name_svideo,
1392 [SAA7134_BOARD_ZOLID_XPERT_TV7134] = {
1393 /* Helge Jensen <helge.jensen@slog.dk> */
1394 .name = ":Zolid Xpert TV7134",
1395 .audio_clock = 0x00187de7,
1396 .tuner_type = TUNER_PHILIPS_NTSC,
1397 .radio_type = UNSET,
1398 .tuner_addr = ADDR_UNSET,
1399 .radio_addr = ADDR_UNSET,
1401 .name = name_svideo,
1415 [SAA7134_BOARD_EMPIRE_PCI_TV_RADIO_LE] = {
1416 /* "Matteo Az" <matte.az@nospam.libero.it> ;-) */
1417 .name = "Empire PCI TV-Radio LE",
1418 .audio_clock = 0x00187de7,
1419 .tuner_type = TUNER_PHILIPS_PAL,
1420 .radio_type = UNSET,
1421 .tuner_addr = ADDR_UNSET,
1422 .radio_addr = ADDR_UNSET,
1425 .name = name_tv_mono,
1436 .name = name_svideo,
1452 [SAA7134_BOARD_AVERMEDIA_STUDIO_307] = {
1454 Nickolay V. Shmyrev <nshmyrev@yandex.ru>
1455 Lots of thanks to Andrey Zolotarev <zolotarev_andrey@mail.ru>
1457 .name = "Avermedia AVerTV Studio 307",
1458 .audio_clock = 0x00187de7,
1459 .tuner_type = TUNER_PHILIPS_FM1256_IH3,
1460 .radio_type = UNSET,
1461 .tuner_addr = ADDR_UNSET,
1462 .radio_addr = ADDR_UNSET,
1463 .tda9887_conf = TDA9887_PRESENT,
1482 .name = name_svideo,
1498 [SAA7134_BOARD_AVERMEDIA_GO_007_FM] = {
1499 .name = "Avermedia AVerTV GO 007 FM",
1500 .audio_clock = 0x00187de7,
1501 .tuner_type = TUNER_PHILIPS_TDA8290,
1502 .radio_type = UNSET,
1503 .tuner_addr = ADDR_UNSET,
1504 .radio_addr = ADDR_UNSET,
1505 .gpiomask = 0x00300003,
1506 /* .gpiomask = 0x8c240003, */
1519 .name = name_svideo,
1535 [SAA7134_BOARD_AVERMEDIA_CARDBUS] = {
1536 /* Kees.Blom@cwi.nl */
1537 .name = "AVerMedia Cardbus TV/Radio (E500)",
1538 .audio_clock = 0x187de7,
1539 .tuner_type = TUNER_PHILIPS_TDA8290,
1540 .radio_type = UNSET,
1541 .tuner_addr = ADDR_UNSET,
1542 .radio_addr = ADDR_UNSET,
1553 .name = name_svideo,
1562 [SAA7134_BOARD_CINERGY400_CARDBUS] = {
1563 .name = "Terratec Cinergy 400 mobile",
1564 .audio_clock = 0x187de7,
1565 .tuner_type = TUNER_ALPS_TSBE5_PAL,
1566 .radio_type = UNSET,
1567 .tuner_addr = ADDR_UNSET,
1568 .radio_addr = ADDR_UNSET,
1569 .tda9887_conf = TDA9887_PRESENT,
1576 .name = name_tv_mono,
1585 .name = name_svideo,
1590 [SAA7134_BOARD_CINERGY600_MK3] = {
1591 .name = "Terratec Cinergy 600 TV MK3",
1592 .audio_clock = 0x00200000,
1593 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
1594 .radio_type = UNSET,
1595 .tuner_addr = ADDR_UNSET,
1596 .radio_addr = ADDR_UNSET,
1597 .tda9887_conf = TDA9887_PRESENT,
1608 .name = name_svideo,
1612 .name = name_comp2, /* CVideo over SVideo Connector */
1621 [SAA7134_BOARD_VIDEOMATE_GOLD_PLUS] = {
1622 /* Dylan Walkden <dylan_walkden@hotmail.com> */
1623 .name = "Compro VideoMate Gold+ Pal",
1624 .audio_clock = 0x00187de7,
1625 .tuner_type = TUNER_PHILIPS_PAL,
1626 .radio_type = UNSET,
1627 .tuner_addr = ADDR_UNSET,
1628 .radio_addr = ADDR_UNSET,
1629 .gpiomask = 0x1ce780,
1631 .name = name_svideo,
1632 .vmux = 0, /* CVideo over SVideo Connector - ok? */
1658 [SAA7134_BOARD_PINNACLE_300I_DVBT_PAL] = {
1659 .name = "Pinnacle PCTV 300i DVB-T + PAL",
1660 .audio_clock = 0x00187de7,
1661 .tuner_type = TUNER_MT2032,
1662 .radio_type = UNSET,
1663 .tuner_addr = ADDR_UNSET,
1664 .radio_addr = ADDR_UNSET,
1665 .tda9887_conf = TDA9887_PRESENT | TDA9887_INTERCARRIER,
1666 .mpeg = SAA7134_MPEG_DVB,
1681 .name = name_svideo,
1686 [SAA7134_BOARD_PROVIDEO_PV952] = {
1687 /* andreas.kretschmer@web.de */
1688 .name = "ProVideo PV952",
1689 .audio_clock = 0x00187de7,
1690 .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
1691 .radio_type = UNSET,
1692 .tuner_addr = ADDR_UNSET,
1693 .radio_addr = ADDR_UNSET,
1694 .tda9887_conf = TDA9887_PRESENT,
1705 .name = name_tv_mono,
1715 [SAA7134_BOARD_AVERMEDIA_305] = {
1716 /* much like the "studio" version but without radio
1717 * and another tuner (sirspiritus@yandex.ru) */
1718 .name = "AverMedia AverTV/305",
1719 .audio_clock = 0x00187de7,
1720 .tuner_type = TUNER_PHILIPS_FQ1216ME,
1721 .radio_type = UNSET,
1722 .tuner_addr = ADDR_UNSET,
1723 .radio_addr = ADDR_UNSET,
1724 .tda9887_conf = TDA9887_PRESENT,
1739 .name = name_svideo,
1748 [SAA7134_BOARD_FLYDVBTDUO] = {
1749 /* LifeView FlyDVB-T DUO */
1750 /* "Nico Sabbi <nsabbi@tiscali.it> Hartmut Hackmann hartmut.hackmann@t-online.de*/
1751 .name = "LifeView FlyDVB-T DUO",
1752 .audio_clock = 0x00200000,
1753 .tuner_type = TUNER_PHILIPS_TDA8290,
1754 .radio_type = UNSET,
1755 .tuner_addr = ADDR_UNSET,
1756 .radio_addr = ADDR_UNSET,
1757 .mpeg = SAA7134_MPEG_DVB,
1764 .name = name_comp1, /* Composite signal on S-Video input */
1768 .name = name_comp2, /* Composite input */
1772 .name = name_svideo, /* S-Video signal on S-Video input */
1777 [SAA7134_BOARD_PHILIPS_TOUGH] = {
1778 .name = "Philips TOUGH DVB-T reference design",
1779 .tuner_type = TUNER_ABSENT,
1780 .audio_clock = 0x00187de7,
1781 .radio_type = UNSET,
1782 .tuner_addr = ADDR_UNSET,
1783 .radio_addr = ADDR_UNSET,
1784 .mpeg = SAA7134_MPEG_DVB,
1790 .name = name_svideo,
1795 [SAA7134_BOARD_AVERMEDIA_307] = {
1797 Davydov Vladimir <vladimir@iqmedia.com>
1799 .name = "Avermedia AVerTV 307",
1800 .audio_clock = 0x00187de7,
1801 .tuner_type = TUNER_PHILIPS_FQ1216ME,
1802 .radio_type = UNSET,
1803 .tuner_addr = ADDR_UNSET,
1804 .radio_addr = ADDR_UNSET,
1805 .tda9887_conf = TDA9887_PRESENT,
1820 .name = name_svideo,
1825 [SAA7134_BOARD_ADS_INSTANT_TV] = {
1826 .name = "ADS Tech Instant TV (saa7135)",
1827 .audio_clock = 0x00187de7,
1828 .tuner_type = TUNER_PHILIPS_TDA8290,
1829 .radio_type = UNSET,
1830 .tuner_addr = ADDR_UNSET,
1831 .radio_addr = ADDR_UNSET,
1842 .name = name_svideo,
1847 [SAA7134_BOARD_KWORLD_VSTREAM_XPERT] = {
1848 .name = "Kworld/Tevion V-Stream Xpert TV PVR7134",
1849 .audio_clock = 0x00187de7,
1850 .tuner_type = TUNER_PHILIPS_PAL_I,
1851 .radio_type = UNSET,
1852 .tuner_addr = ADDR_UNSET,
1853 .radio_addr = ADDR_UNSET,
1865 .gpio = 0x200, /* gpio by DScaler */
1867 .name = name_svideo,
1883 [SAA7134_BOARD_THYPHOON_DVBT_DUO_CARDBUS] = {
1884 .name = "Typhoon DVB-T Duo Digital/Analog Cardbus",
1885 .audio_clock = 0x00200000,
1886 .tuner_type = TUNER_PHILIPS_TDA8290,
1887 .radio_type = UNSET,
1888 .tuner_addr = ADDR_UNSET,
1889 .radio_addr = ADDR_UNSET,
1890 .mpeg = SAA7134_MPEG_DVB,
1891 /* .gpiomask = 0xe000, */
1896 /* .gpio = 0x0000, */
1899 .name = name_comp1, /* Composite signal on S-Video input */
1902 /* .gpio = 0x4000, */
1904 .name = name_comp2, /* Composite input */
1907 /* .gpio = 0x4000, */
1909 .name = name_svideo, /* S-Video signal on S-Video input */
1912 /* .gpio = 0x4000, */
1923 [SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUSII] = {
1924 .name = "Compro VideoMate TV Gold+II",
1925 .audio_clock = 0x002187de7,
1926 .tuner_type = TUNER_LG_PAL_NEW_TAPC,
1927 .radio_type = TUNER_TEA5767,
1930 .gpiomask = 0x8c1880,
1932 .name = name_svideo,
1959 [SAA7134_BOARD_KWORLD_XPERT] = {
1962 - Remote control doesn't initialize properly.
1963 - Audio volume starts muted,
1964 then gradually increases after channel change.
1965 - Overlay scaling problems (application error?)
1966 - Composite S-Video untested.
1967 From: Konrad Rzepecki <hannibal@megapolis.pl>
1969 .name = "Kworld Xpert TV PVR7134",
1970 .audio_clock = 0x00187de7,
1971 .tuner_type = TUNER_TENA_9533_DI,
1972 .radio_type = TUNER_TEA5767,
1986 .gpio = 0x200, /* gpio by DScaler */
1988 .name = name_svideo,
2007 const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards);
2009 /* ------------------------------------------------------------------ */
2010 /* PCI ids + subsystem IDs */
2012 struct pci_device_id saa7134_pci_tbl[] = {
2014 .vendor = PCI_VENDOR_ID_PHILIPS,
2015 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2016 .subvendor = PCI_VENDOR_ID_PHILIPS,
2017 .subdevice = 0x2001,
2018 .driver_data = SAA7134_BOARD_PROTEUS_PRO,
2020 .vendor = PCI_VENDOR_ID_PHILIPS,
2021 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
2022 .subvendor = PCI_VENDOR_ID_PHILIPS,
2023 .subdevice = 0x2001,
2024 .driver_data = SAA7134_BOARD_PROTEUS_PRO,
2026 .vendor = PCI_VENDOR_ID_PHILIPS,
2027 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2028 .subvendor = PCI_VENDOR_ID_PHILIPS,
2029 .subdevice = 0x6752,
2030 .driver_data = SAA7134_BOARD_EMPRESS,
2032 .vendor = PCI_VENDOR_ID_PHILIPS,
2033 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2034 .subvendor = 0x1131,
2035 .subdevice = 0x4e85,
2036 .driver_data = SAA7134_BOARD_MONSTERTV,
2038 .vendor = PCI_VENDOR_ID_PHILIPS,
2039 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2040 .subvendor = 0x153B,
2041 .subdevice = 0x1142,
2042 .driver_data = SAA7134_BOARD_CINERGY400,
2044 .vendor = PCI_VENDOR_ID_PHILIPS,
2045 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2046 .subvendor = 0x153B,
2047 .subdevice = 0x1143,
2048 .driver_data = SAA7134_BOARD_CINERGY600,
2050 .vendor = PCI_VENDOR_ID_PHILIPS,
2051 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2052 .subvendor = 0x153B,
2053 .subdevice = 0x1158,
2054 .driver_data = SAA7134_BOARD_CINERGY600_MK3,
2056 .vendor = PCI_VENDOR_ID_PHILIPS,
2057 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
2058 .subvendor = 0x153b,
2059 .subdevice = 0x1162,
2060 .driver_data = SAA7134_BOARD_CINERGY400_CARDBUS,
2062 .vendor = PCI_VENDOR_ID_PHILIPS,
2063 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2064 .subvendor = 0x5168,
2065 .subdevice = 0x0138,
2066 .driver_data = SAA7134_BOARD_FLYVIDEO3000,
2068 .vendor = PCI_VENDOR_ID_PHILIPS,
2069 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2070 .subvendor = 0x4e42, /* "Typhoon PCI Capture TV Card" Art.No. 50673 */
2071 .subdevice = 0x0138,
2072 .driver_data = SAA7134_BOARD_FLYVIDEO3000,
2074 .vendor = PCI_VENDOR_ID_PHILIPS,
2075 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
2076 .subvendor = 0x5168,
2077 .subdevice = 0x0138,
2078 .driver_data = SAA7134_BOARD_FLYVIDEO2000,
2080 .vendor = PCI_VENDOR_ID_PHILIPS,
2081 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
2082 .subvendor = 0x5168,
2083 .subdevice = 0x0212, /* minipci, LR212 */
2084 .driver_data = SAA7134_BOARD_FLYTVPLATINUM_MINI,
2086 .vendor = PCI_VENDOR_ID_PHILIPS,
2087 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
2088 .subvendor = 0x5168, /* Animation Technologies (LifeView) */
2089 .subdevice = 0x0214, /* Standard PCI, LR214WF */
2090 .driver_data = SAA7134_BOARD_FLYTVPLATINUM_FM,
2092 .vendor = PCI_VENDOR_ID_PHILIPS,
2093 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
2094 .subvendor = 0x1489, /* KYE */
2095 .subdevice = 0x0214, /* Genius VideoWonder ProTV */
2096 .driver_data = SAA7134_BOARD_FLYTVPLATINUM_FM, /* is an LR214WF actually */
2098 .vendor = PCI_VENDOR_ID_PHILIPS,
2099 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2100 .subvendor = 0x16be,
2101 .subdevice = 0x0003,
2102 .driver_data = SAA7134_BOARD_MD7134,
2104 .vendor = PCI_VENDOR_ID_PHILIPS,
2105 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
2106 .subvendor = 0x1048,
2107 .subdevice = 0x226b,
2108 .driver_data = SAA7134_BOARD_ELSA,
2110 .vendor = PCI_VENDOR_ID_PHILIPS,
2111 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
2112 .subvendor = 0x1048,
2113 .subdevice = 0x226b,
2114 .driver_data = SAA7134_BOARD_ELSA_500TV,
2116 .vendor = PCI_VENDOR_ID_PHILIPS,
2117 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2118 .subvendor = PCI_VENDOR_ID_ASUSTEK,
2119 .subdevice = 0x4842,
2120 .driver_data = SAA7134_BOARD_ASUSTeK_TVFM7134,
2122 .vendor = PCI_VENDOR_ID_PHILIPS,
2123 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
2124 .subvendor = PCI_VENDOR_ID_ASUSTEK,
2125 .subdevice = 0x4845,
2126 .driver_data = SAA7134_BOARD_ASUSTeK_TVFM7135,
2128 .vendor = PCI_VENDOR_ID_PHILIPS,
2129 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2130 .subvendor = PCI_VENDOR_ID_ASUSTEK,
2131 .subdevice = 0x4830,
2132 .driver_data = SAA7134_BOARD_ASUSTeK_TVFM7134,
2134 .vendor = PCI_VENDOR_ID_PHILIPS,
2135 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
2136 .subvendor = PCI_VENDOR_ID_ASUSTEK,
2137 .subdevice = 0x4843,
2138 .driver_data = SAA7134_BOARD_ASUSTEK_TVFM7133,
2140 .vendor = PCI_VENDOR_ID_PHILIPS,
2141 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2142 .subvendor = PCI_VENDOR_ID_ASUSTEK,
2143 .subdevice = 0x4840,
2144 .driver_data = SAA7134_BOARD_ASUSTeK_TVFM7134,
2146 .vendor = PCI_VENDOR_ID_PHILIPS,
2147 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2148 .subvendor = PCI_VENDOR_ID_PHILIPS,
2149 .subdevice = 0xfe01,
2150 .driver_data = SAA7134_BOARD_TVSTATION_RDS,
2152 .vendor = PCI_VENDOR_ID_PHILIPS,
2153 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2154 .subvendor = 0x1894,
2155 .subdevice = 0xfe01,
2156 .driver_data = SAA7134_BOARD_TVSTATION_RDS,
2158 .vendor = PCI_VENDOR_ID_PHILIPS,
2159 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2160 .subvendor = 0x1894,
2161 .subdevice = 0xa006,
2162 .driver_data = SAA7134_BOARD_TVSTATION_DVR,
2164 .vendor = PCI_VENDOR_ID_PHILIPS,
2165 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2166 .subvendor = 0x1131,
2167 .subdevice = 0x7133,
2168 .driver_data = SAA7134_BOARD_VA1000POWER,
2170 .vendor = PCI_VENDOR_ID_PHILIPS,
2171 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
2172 .subvendor = PCI_VENDOR_ID_PHILIPS,
2173 .subdevice = 0x2001,
2174 .driver_data = SAA7134_BOARD_10MOONSTVMASTER,
2176 .vendor = PCI_VENDOR_ID_PHILIPS,
2177 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
2178 .subvendor = 0x185b,
2179 .subdevice = 0xc100,
2180 .driver_data = SAA7134_BOARD_VIDEOMATE_TV,
2182 .vendor = PCI_VENDOR_ID_PHILIPS,
2183 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
2184 .subvendor = 0x185b,
2185 .subdevice = 0xc100,
2186 .driver_data = SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUS,
2188 .vendor = PCI_VENDOR_ID_PHILIPS,
2189 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
2190 .subvendor = PCI_VENDOR_ID_MATROX,
2191 .subdevice = 0x48d0,
2192 .driver_data = SAA7134_BOARD_CRONOS_PLUS,
2194 .vendor = PCI_VENDOR_ID_PHILIPS,
2195 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2196 .subvendor = 0x1461, /* Avermedia Technologies Inc */
2197 .subdevice = 0xa70b,
2198 .driver_data = SAA7134_BOARD_MD2819,
2200 .vendor = PCI_VENDOR_ID_PHILIPS,
2201 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
2202 .subvendor = 0x1461, /* Avermedia Technologies Inc */
2203 .subdevice = 0x2115,
2204 .driver_data = SAA7134_BOARD_AVERMEDIA_STUDIO_305,
2206 .vendor = PCI_VENDOR_ID_PHILIPS,
2207 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
2208 .subvendor = 0x1461, /* Avermedia Technologies Inc */
2209 .subdevice = 0x2108,
2210 .driver_data = SAA7134_BOARD_AVERMEDIA_305,
2212 .vendor = PCI_VENDOR_ID_PHILIPS,
2213 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
2214 .subvendor = 0x1461, /* Avermedia Technologies Inc */
2215 .subdevice = 0x10ff,
2216 .driver_data = SAA7134_BOARD_AVERMEDIA_DVD_EZMAKER,
2218 /* AVerMedia CardBus */
2219 .vendor = PCI_VENDOR_ID_PHILIPS,
2220 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2221 .subvendor = 0x1461, /* Avermedia Technologies Inc */
2222 .subdevice = 0xd6ee,
2223 .driver_data = SAA7134_BOARD_AVERMEDIA_CARDBUS,
2225 /* TransGear 3000TV */
2226 .vendor = PCI_VENDOR_ID_PHILIPS,
2227 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
2228 .subvendor = 0x1461, /* Avermedia Technologies Inc */
2229 .subdevice = 0x050c,
2230 .driver_data = SAA7134_BOARD_TG3000TV,
2232 .vendor = PCI_VENDOR_ID_PHILIPS,
2233 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2234 .subvendor = 0x11bd,
2235 .subdevice = 0x002b,
2236 .driver_data = SAA7134_BOARD_PINNACLE_PCTV_STEREO,
2238 .vendor = PCI_VENDOR_ID_PHILIPS,
2239 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2240 .subvendor = 0x11bd,
2241 .subdevice = 0x002d,
2242 .driver_data = SAA7134_BOARD_PINNACLE_300I_DVBT_PAL,
2244 .vendor = PCI_VENDOR_ID_PHILIPS,
2245 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2246 .subvendor = 0x1019,
2247 .subdevice = 0x4cb4,
2248 .driver_data = SAA7134_BOARD_ECS_TVP3XP,
2250 .vendor = PCI_VENDOR_ID_PHILIPS,
2251 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
2252 .subvendor = 0x1019,
2253 .subdevice = 0x4cb5,
2254 .driver_data = SAA7134_BOARD_ECS_TVP3XP_4CB5,
2256 .vendor = PCI_VENDOR_ID_PHILIPS,
2257 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
2258 .subvendor = 0x12ab,
2259 .subdevice = 0x0800,
2260 .driver_data = SAA7134_BOARD_UPMOST_PURPLE_TV,
2262 .vendor = PCI_VENDOR_ID_PHILIPS,
2263 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
2264 .subvendor = 0x153B,
2265 .subdevice = 0x1152,
2266 .driver_data = SAA7134_BOARD_CINERGY200,
2268 .vendor = PCI_VENDOR_ID_PHILIPS,
2269 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
2270 .subvendor = 0x185b,
2271 .subdevice = 0xc100,
2272 .driver_data = SAA7134_BOARD_VIDEOMATE_TV_PVR,
2274 .vendor = PCI_VENDOR_ID_PHILIPS,
2275 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
2276 .subvendor = 0x1131,
2278 .driver_data = SAA7134_BOARD_SABRENT_SBTTVFM,
2280 .vendor = PCI_VENDOR_ID_PHILIPS,
2281 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2282 .subvendor = 0x1461, /* Avermedia Technologies Inc */
2283 .subdevice = 0x9715,
2284 .driver_data = SAA7134_BOARD_AVERMEDIA_STUDIO_307,
2286 .vendor = PCI_VENDOR_ID_PHILIPS,
2287 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2288 .subvendor = 0x1461, /* Avermedia Technologies Inc */
2289 .subdevice = 0xa70a,
2290 .driver_data = SAA7134_BOARD_AVERMEDIA_307,
2292 .vendor = PCI_VENDOR_ID_PHILIPS,
2293 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2294 .subvendor = 0x185b,
2295 .subdevice = 0xc200,
2296 .driver_data = SAA7134_BOARD_VIDEOMATE_GOLD_PLUS,
2298 .vendor = PCI_VENDOR_ID_PHILIPS,
2299 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2300 .subvendor = 0x1540,
2301 .subdevice = 0x9524,
2302 .driver_data = SAA7134_BOARD_PROVIDEO_PV952,
2305 .vendor = PCI_VENDOR_ID_PHILIPS,
2306 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
2307 .subvendor = 0x5168,
2308 .subdevice = 0x0502, /* Cardbus version */
2309 .driver_data = SAA7134_BOARD_FLYDVBTDUO,
2311 .vendor = PCI_VENDOR_ID_PHILIPS,
2312 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
2313 .subvendor = 0x5168,
2314 .subdevice = 0x0306, /* PCI version */
2315 .driver_data = SAA7134_BOARD_FLYDVBTDUO,
2317 .vendor = PCI_VENDOR_ID_PHILIPS,
2318 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
2319 .subvendor = 0x1461, /* Avermedia Technologies Inc */
2320 .subdevice = 0xf31f,
2321 .driver_data = SAA7134_BOARD_AVERMEDIA_GO_007_FM,
2324 .vendor = PCI_VENDOR_ID_PHILIPS,
2325 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
2326 .subvendor = PCI_VENDOR_ID_PHILIPS,
2327 .subdevice = 0x2004,
2328 .driver_data = SAA7134_BOARD_PHILIPS_TOUGH,
2330 .vendor = PCI_VENDOR_ID_PHILIPS,
2331 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
2332 .subvendor = 0x1421,
2333 .subdevice = 0x0350, /* PCI version */
2334 .driver_data = SAA7134_BOARD_ADS_INSTANT_TV,
2337 .vendor = PCI_VENDOR_ID_PHILIPS,
2338 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
2339 .subvendor = 0x1421,
2340 .subdevice = 0x0370, /* cardbus version */
2341 .driver_data = SAA7134_BOARD_ADS_INSTANT_TV,
2343 },{ /* Typhoon DVB-T Duo Digital/Analog Cardbus */
2344 .vendor = PCI_VENDOR_ID_PHILIPS,
2345 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
2346 .subvendor = 0x4e42,
2347 .subdevice = 0x0502,
2348 .driver_data = SAA7134_BOARD_THYPHOON_DVBT_DUO_CARDBUS,
2351 /* --- boards without eeprom + subsystem ID --- */
2352 .vendor = PCI_VENDOR_ID_PHILIPS,
2353 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2354 .subvendor = PCI_VENDOR_ID_PHILIPS,
2356 .driver_data = SAA7134_BOARD_NOAUTO,
2358 .vendor = PCI_VENDOR_ID_PHILIPS,
2359 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
2360 .subvendor = PCI_VENDOR_ID_PHILIPS,
2362 .driver_data = SAA7134_BOARD_NOAUTO,
2365 /* --- default catch --- */
2366 .vendor = PCI_VENDOR_ID_PHILIPS,
2367 .device = PCI_DEVICE_ID_PHILIPS_SAA7130,
2368 .subvendor = PCI_ANY_ID,
2369 .subdevice = PCI_ANY_ID,
2370 .driver_data = SAA7134_BOARD_UNKNOWN,
2372 .vendor = PCI_VENDOR_ID_PHILIPS,
2373 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
2374 .subvendor = PCI_ANY_ID,
2375 .subdevice = PCI_ANY_ID,
2376 .driver_data = SAA7134_BOARD_UNKNOWN,
2378 .vendor = PCI_VENDOR_ID_PHILIPS,
2379 .device = PCI_DEVICE_ID_PHILIPS_SAA7134,
2380 .subvendor = PCI_ANY_ID,
2381 .subdevice = PCI_ANY_ID,
2382 .driver_data = SAA7134_BOARD_UNKNOWN,
2384 .vendor = PCI_VENDOR_ID_PHILIPS,
2385 .device = PCI_DEVICE_ID_PHILIPS_SAA7135,
2386 .subvendor = PCI_ANY_ID,
2387 .subdevice = PCI_ANY_ID,
2388 .driver_data = SAA7134_BOARD_UNKNOWN,
2390 /* --- end of list --- */
2393 MODULE_DEVICE_TABLE(pci, saa7134_pci_tbl);
2395 /* ----------------------------------------------------------- */
2396 /* flyvideo tweaks */
2399 static void board_flyvideo(struct saa7134_dev *dev)
2401 printk("%s: there are different flyvideo cards with different tuners\n"
2402 "%s: out there, you might have to use the tuner=<nr> insmod\n"
2403 "%s: option to override the default value.\n",
2404 dev->name, dev->name, dev->name);
2407 /* ----------------------------------------------------------- */
2409 int saa7134_board_init1(struct saa7134_dev *dev)
2411 /* Always print gpio, often manufacturers encode tuner type and other info. */
2412 saa_writel(SAA7134_GPIO_GPMODE0 >> 2, 0);
2413 dev->gpio_value = saa_readl(SAA7134_GPIO_GPSTATUS0 >> 2);
2414 printk(KERN_INFO "%s: board init: gpio is %x\n", dev->name, dev->gpio_value);
2416 switch (dev->board) {
2417 case SAA7134_BOARD_FLYVIDEO2000:
2418 case SAA7134_BOARD_FLYVIDEO3000:
2419 dev->has_remote = 1;
2420 board_flyvideo(dev);
2422 case SAA7134_BOARD_FLYTVPLATINUM_FM:
2423 case SAA7134_BOARD_CINERGY400:
2424 case SAA7134_BOARD_CINERGY600:
2425 case SAA7134_BOARD_CINERGY600_MK3:
2426 case SAA7134_BOARD_ECS_TVP3XP:
2427 case SAA7134_BOARD_ECS_TVP3XP_4CB5:
2428 case SAA7134_BOARD_MD2819:
2429 case SAA7134_BOARD_KWORLD_VSTREAM_XPERT:
2430 case SAA7134_BOARD_KWORLD_XPERT:
2431 case SAA7134_BOARD_AVERMEDIA_STUDIO_305:
2432 case SAA7134_BOARD_AVERMEDIA_305:
2433 case SAA7134_BOARD_AVERMEDIA_STUDIO_307:
2434 case SAA7134_BOARD_AVERMEDIA_307:
2435 case SAA7134_BOARD_AVERMEDIA_GO_007_FM:
2436 /* case SAA7134_BOARD_SABRENT_SBTTVFM: */ /* not finished yet */
2437 case SAA7134_BOARD_VIDEOMATE_TV_PVR:
2438 case SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUSII:
2439 case SAA7134_BOARD_MANLI_MTV001:
2440 case SAA7134_BOARD_MANLI_MTV002:
2441 case SAA7134_BOARD_AVACSSMARTTV:
2442 dev->has_remote = 1;
2444 case SAA7134_BOARD_MD5044:
2445 printk("%s: seems there are two different versions of the MD5044\n"
2446 "%s: (with the same ID) out there. If sound doesn't work for\n"
2447 "%s: you try the audio_clock_override=0x200000 insmod option.\n",
2448 dev->name,dev->name,dev->name);
2450 case SAA7134_BOARD_CINERGY400_CARDBUS:
2451 /* power-up tuner chip */
2452 saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0x00040000, 0x00040000);
2453 saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x00040000, 0x00000000);
2456 case SAA7134_BOARD_FLYDVBTDUO:
2457 case SAA7134_BOARD_THYPHOON_DVBT_DUO_CARDBUS:
2458 /* turn the fan on Hac: static for the time being */
2459 saa_writeb(SAA7134_GPIO_GPMODE3, 0x08);
2460 saa_writeb(SAA7134_GPIO_GPSTATUS3, 0x06);
2462 case SAA7134_BOARD_AVERMEDIA_CARDBUS:
2463 /* power-up tuner chip */
2464 saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0xffffffff, 0xffffffff);
2465 saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0xffffffff, 0xffffffff);
2472 /* stuff which needs working i2c */
2473 int saa7134_board_init2(struct saa7134_dev *dev)
2478 switch (dev->board) {
2479 case SAA7134_BOARD_BMK_MPEX_NOTUNER:
2480 case SAA7134_BOARD_BMK_MPEX_TUNER:
2481 dev->i2c_client.addr = 0x60;
2482 board = (i2c_master_recv(&dev->i2c_client,&buf,0) < 0)
2483 ? SAA7134_BOARD_BMK_MPEX_NOTUNER
2484 : SAA7134_BOARD_BMK_MPEX_TUNER;
2485 if (board == dev->board)
2488 printk("%s: board type fixup: %s\n", dev->name,
2489 saa7134_boards[dev->board].name);
2490 dev->tuner_type = saa7134_boards[dev->board].tuner_type;
2492 if (TUNER_ABSENT != dev->tuner_type) {
2493 struct tuner_setup tun_setup;
2495 tun_setup.mode_mask = T_RADIO | T_ANALOG_TV | T_DIGITAL_TV;
2496 tun_setup.type = dev->tuner_type;
2497 tun_setup.addr = ADDR_UNSET;
2499 saa7134_i2c_call_clients (dev, TUNER_SET_TYPE_ADDR, &tun_setup);
2502 case SAA7134_BOARD_MD7134:
2504 struct tuner_setup tun_setup;
2509 struct i2c_msg msg[] = {{.addr=0x50, .flags=0, .buf=&subaddr, .len = 1},
2510 {.addr=0x50, .flags=I2C_M_RD, .buf=data, .len = 3}};
2513 ret = i2c_transfer(&dev->i2c_adap, msg, 2);
2515 printk(KERN_ERR "EEPROM read failure\n");
2516 } else if ((data[0] != 0) && (data[0] != 0xff)) {
2517 /* old config structure */
2518 subaddr = data[0] + 2;
2520 i2c_transfer(&dev->i2c_adap, msg, 2);
2521 tuner_t = (data[0] << 8) + data[1];
2524 dev->tuner_type = TUNER_PHILIPS_PAL;
2527 dev->tuner_type = TUNER_PHILIPS_FM1216ME_MK3;
2530 printk(KERN_ERR "%s Cant determine tuner type %x from EEPROM\n", dev->name, tuner_t);
2532 } else if ((data[1] != 0) && (data[1] != 0xff)) {
2533 /* new config structure */
2534 subaddr = data[1] + 1;
2536 i2c_transfer(&dev->i2c_adap, msg, 2);
2537 subaddr = data[0] + 1;
2539 i2c_transfer(&dev->i2c_adap, msg, 2);
2540 tuner_t = (data[1] << 8) + data[0];
2543 dev->tuner_type = TUNER_PHILIPS_FM1216ME_MK3;
2546 dev->tuner_type = TUNER_PHILIPS_FMD1216ME_MK3;
2547 printk(KERN_INFO "%s Board has DVB-T\n", dev->name);
2550 printk(KERN_ERR "%s Cant determine tuner type %x from EEPROM\n", dev->name, tuner_t);
2553 printk(KERN_ERR "%s unexpected config structure\n", dev->name);
2556 printk(KERN_INFO "%s Tuner type is %d\n", dev->name, dev->tuner_type);
2557 if (dev->tuner_type == TUNER_PHILIPS_FMD1216ME_MK3) {
2558 dev->tda9887_conf = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE | TDA9887_PORT2_ACTIVE;
2559 saa7134_i2c_call_clients(dev,TDA9887_SET_CONFIG, &dev->tda9887_conf);
2562 tun_setup.mode_mask = T_RADIO | T_ANALOG_TV | T_DIGITAL_TV;
2563 tun_setup.type = dev->tuner_type;
2564 tun_setup.addr = ADDR_UNSET;
2566 saa7134_i2c_call_clients (dev, TUNER_SET_TYPE_ADDR,&tun_setup);
2573 /* ----------------------------------------------------------- */