3 * $Id: saa7134-cards.c,v 1.54 2005/03/07 12:01:51 kraxel Exp $
5 * device driver for philips saa7134 based TV cards
8 * (c) 2001-04 Gerd Knorr <kraxel@bytesex.org> [SuSE Labs]
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 #include <linux/init.h>
26 #include <linux/module.h>
28 #include "saa7134-reg.h"
31 /* commly used strings */
32 static char name_mute
[] = "mute";
33 static char name_radio
[] = "Radio";
34 static char name_tv
[] = "Television";
35 static char name_tv_mono
[] = "TV (mono only)";
36 static char name_comp1
[] = "Composite1";
37 static char name_comp2
[] = "Composite2";
38 static char name_comp3
[] = "Composite3";
39 static char name_comp4
[] = "Composite4";
40 static char name_svideo
[] = "S-Video";
42 /* ------------------------------------------------------------------ */
43 /* board config info */
45 struct saa7134_board saa7134_boards
[] = {
46 [SAA7134_BOARD_UNKNOWN
] = {
47 .name
= "UNKNOWN/GENERIC",
48 .audio_clock
= 0x00187de7,
49 .tuner_type
= TUNER_ABSENT
,
56 [SAA7134_BOARD_PROTEUS_PRO
] = {
58 .name
= "Proteus Pro [philips reference design]",
59 .audio_clock
= 0x00187de7,
60 .tuner_type
= TUNER_PHILIPS_PAL
,
81 [SAA7134_BOARD_FLYVIDEO3000
] = {
82 /* "Marco d'Itri" <md@Linux.IT> */
83 .name
= "LifeView FlyVIDEO3000",
84 .audio_clock
= 0x00200000,
85 .tuner_type
= TUNER_PHILIPS_PAL
,
121 [SAA7134_BOARD_FLYVIDEO2000
] = {
122 /* "TC Wan" <tcwan@cs.usm.my> */
123 .name
= "LifeView FlyVIDEO2000",
124 .audio_clock
= 0x00200000,
125 .tuner_type
= TUNER_LG_PAL_NEW_TAPC
,
160 [SAA7134_BOARD_FLYTVPLATINUM_MINI
] = {
161 /* "Arnaud Quette" <aquette@free.fr> */
162 .name
= "LifeView FlyTV Platinum Mini",
163 .audio_clock
= 0x00200000,
164 .tuner_type
= TUNER_PHILIPS_TDA8290
,
180 [SAA7134_BOARD_FLYTVPLATINUM_FM
] = {
181 /* LifeView FlyTV Platinum FM (LR214WF) */
182 /* "Peter Missel <peter.missel@onlinehome.de> */
183 .name
= "LifeView FlyTV Platinum FM",
184 .audio_clock
= 0x00200000,
185 .tuner_type
= TUNER_PHILIPS_TDA8290
,
186 .gpiomask
= 0x1E000, /* Set GP16 and unused 15,14,13 to Output */
191 .gpio
= 0x10000, /* GP16=1 selects TV input */
194 /* .name = name_tv_mono,
200 */ .name
= name_comp1
, /* Composite signal on S-Video input */
205 .name
= name_comp2
, /* Composite input */
210 .name
= name_svideo
, /* S-Video signal on S-Video input */
218 .gpio
= 0x00000, /* GP16=0 selects FM radio antenna */
221 [SAA7134_BOARD_EMPRESS
] = {
222 /* "Gert Vervoort" <gert.vervoort@philips.com> */
224 .audio_clock
= 0x00187de7,
225 .tuner_type
= TUNER_PHILIPS_PAL
,
244 .mpeg
= SAA7134_MPEG_EMPRESS
,
245 .video_out
= CCIR656
,
247 [SAA7134_BOARD_MONSTERTV
] = {
248 /* "K.Ohta" <alpha292@bremen.or.jp> */
249 .name
= "SKNet Monster TV",
250 .audio_clock
= 0x00187de7,
251 .tuner_type
= TUNER_PHILIPS_NTSC_M
,
271 [SAA7134_BOARD_MD9717
] = {
272 .name
= "Tevion MD 9717",
273 .audio_clock
= 0x00200000,
274 .tuner_type
= TUNER_PHILIPS_PAL
,
281 /* workaround for problems with normal TV sound */
282 .name
= name_tv_mono
,
304 [SAA7134_BOARD_TVSTATION_RDS
] = {
305 /* Typhoon TV Tuner RDS: Art.Nr. 50694 */
306 .name
= "KNC One TV-Station RDS / Typhoon TV Tuner RDS",
307 .audio_clock
= 0x00200000,
308 .tuner_type
= TUNER_PHILIPS_FM1216ME_MK3
,
309 .tda9887_conf
= TDA9887_PRESENT
,
316 .name
= name_tv_mono
,
331 .name
= "CVid over SVid",
340 [SAA7134_BOARD_TVSTATION_DVR
] = {
341 .name
= "KNC One TV-Station DVR",
342 .audio_clock
= 0x00200000,
343 .tuner_type
= TUNER_PHILIPS_FM1216ME_MK3
,
344 .tda9887_conf
= TDA9887_PRESENT
,
345 .gpiomask
= 0x820000,
368 .mpeg
= SAA7134_MPEG_EMPRESS
,
369 .video_out
= CCIR656
,
371 [SAA7134_BOARD_CINERGY400
] = {
372 .name
= "Terratec Cinergy 400 TV",
373 .audio_clock
= 0x00200000,
374 .tuner_type
= TUNER_PHILIPS_PAL
,
389 .name
= name_comp2
, // CVideo over SVideo Connector
394 [SAA7134_BOARD_MD5044
] = {
395 .name
= "Medion 5044",
396 .audio_clock
= 0x00187de7, // was: 0x00200000,
397 .tuner_type
= TUNER_PHILIPS_FM1216ME_MK3
,
398 .tda9887_conf
= TDA9887_PRESENT
,
405 /* workaround for problems with normal TV sound */
406 .name
= name_tv_mono
,
428 [SAA7134_BOARD_KWORLD
] = {
429 .name
= "Kworld/KuroutoShikou SAA7130-TVPCI",
430 .audio_clock
= 0x00187de7,
431 .tuner_type
= TUNER_PHILIPS_NTSC_M
,
447 [SAA7134_BOARD_CINERGY600
] = {
448 .name
= "Terratec Cinergy 600 TV",
449 .audio_clock
= 0x00200000,
450 .tuner_type
= TUNER_PHILIPS_PAL
,
451 .tda9887_conf
= TDA9887_PRESENT
,
466 .name
= name_comp2
, // CVideo over SVideo Connector
475 [SAA7134_BOARD_MD7134
] = {
476 .name
= "Medion 7134",
477 //.audio_clock = 0x00200000,
478 .audio_clock
= 0x00187de7,
479 .tuner_type
= TUNER_PHILIPS_FM1216ME_MK3
,
480 .tda9887_conf
= TDA9887_PRESENT
,
481 .mpeg
= SAA7134_MPEG_DVB
,
501 [SAA7134_BOARD_TYPHOON_90031
] = {
502 /* aka Typhoon "TV+Radio", Art.Nr 90031 */
503 /* Tom Zoerner <tomzo at users sourceforge net> */
504 .name
= "Typhoon TV+Radio 90031",
505 .audio_clock
= 0x00200000,
506 .tuner_type
= TUNER_PHILIPS_PAL
,
507 .tda9887_conf
= TDA9887_PRESENT
,
527 [SAA7134_BOARD_ELSA
] = {
528 .name
= "ELSA EX-VISION 300TV",
529 .audio_clock
= 0x00187de7,
530 .tuner_type
= TUNER_HITACHI_NTSC
,
546 [SAA7134_BOARD_ELSA_500TV
] = {
547 .name
= "ELSA EX-VISION 500TV",
548 .audio_clock
= 0x00187de7,
549 .tuner_type
= TUNER_HITACHI_NTSC
,
560 .name
= name_tv_mono
,
566 [SAA7134_BOARD_ASUSTeK_TVFM7134
] = {
567 .name
= "ASUS TV-FM 7134",
568 .audio_clock
= 0x00187de7,
569 .tuner_type
= TUNER_PHILIPS_FM1216ME_MK3
,
570 .tda9887_conf
= TDA9887_PRESENT
,
590 [SAA7135_BOARD_ASUSTeK_TVFM7135
] = {
591 .name
= "ASUS TV-FM 7135",
592 .audio_clock
= 0x00187de7,
593 .tuner_type
= TUNER_PHILIPS_TDA8290
,
594 .gpiomask
= 0x200000,
618 [SAA7134_BOARD_VA1000POWER
] = {
619 .name
= "AOPEN VA1000 POWER",
620 .audio_clock
= 0x00187de7,
621 .tuner_type
= TUNER_PHILIPS_NTSC
,
637 [SAA7134_BOARD_10MOONSTVMASTER
] = {
638 /* "lilicheng" <llc@linuxfans.org> */
639 .name
= "10MOONS PCI TV CAPTURE CARD",
640 .audio_clock
= 0x00200000,
641 .tuner_type
= TUNER_LG_PAL_NEW_TAPC
,
676 [SAA7134_BOARD_BMK_MPEX_NOTUNER
] = {
677 /* "Andrew de Quincey" <adq@lidskialf.net> */
678 .name
= "BMK MPEX No Tuner",
679 .audio_clock
= 0x200000,
680 .tuner_type
= TUNER_ABSENT
,
702 .mpeg
= SAA7134_MPEG_EMPRESS
,
703 .video_out
= CCIR656
,
705 [SAA7134_BOARD_VIDEOMATE_TV
] = {
706 .name
= "Compro VideoMate TV",
707 .audio_clock
= 0x00187de7,
708 .tuner_type
= TUNER_PHILIPS_NTSC_M
,
724 [SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUS
] = {
725 .name
= "Compro VideoMate TV Gold+",
726 .audio_clock
= 0x00187de7,
727 .tuner_type
= TUNER_PHILIPS_NTSC_M
,
728 .gpiomask
= 0x800c0000,
747 [SAA7134_BOARD_CRONOS_PLUS
] = {
753 14 .. 15 VIDIN_SEL */
754 .name
= "Matrox CronosPlus",
755 .tuner_type
= TUNER_ABSENT
,
779 [SAA7134_BOARD_MD2819
] = {
780 .name
= "AverMedia M156 / Medion 2819",
781 .audio_clock
= 0x00187de7,
782 .tuner_type
= TUNER_PHILIPS_FM1216ME_MK3
,
783 .tda9887_conf
= TDA9887_PRESENT
,
807 [SAA7134_BOARD_BMK_MPEX_TUNER
] = {
808 /* "Greg Wickham <greg.wickham@grangenet.net> */
809 .name
= "BMK MPEX Tuner",
810 .audio_clock
= 0x200000,
811 .tuner_type
= TUNER_PHILIPS_PAL
,
826 .mpeg
= SAA7134_MPEG_EMPRESS
,
827 .video_out
= CCIR656
,
829 [SAA7134_BOARD_ASUSTEK_TVFM7133
] = {
830 .name
= "ASUS TV-FM 7133",
831 .audio_clock
= 0x00187de7,
832 // probably wrong, the 7133 one is the NTSC version ...
833 // .tuner_type = TUNER_PHILIPS_FM1236_MK3
834 .tuner_type
= TUNER_LG_NTSC_NEW_TAPC
,
835 .tda9887_conf
= TDA9887_PRESENT
,
855 [SAA7134_BOARD_PINNACLE_PCTV_STEREO
] = {
856 .name
= "Pinnacle PCTV Stereo (saa7134)",
857 .audio_clock
= 0x00187de7,
858 .tuner_type
= TUNER_MT2032
,
859 .tda9887_conf
= TDA9887_PRESENT
| TDA9887_INTERCARRIER
,
879 [SAA7134_BOARD_MANLI_MTV002
] = {
880 /* Ognjen Nastic <ognjen@logosoft.ba> */
881 .name
= "Manli MuchTV M-TV002",
882 .audio_clock
= 0x00200000,
883 .tuner_type
= TUNER_PHILIPS_PAL
,
907 [SAA7134_BOARD_MANLI_MTV001
] = {
908 /* Ognjen Nastic <ognjen@logosoft.ba> UNTESTED */
909 .name
= "Manli MuchTV M-TV001",
910 .audio_clock
= 0x00200000,
911 .tuner_type
= TUNER_PHILIPS_PAL
,
927 [SAA7134_BOARD_TG3000TV
] = {
928 /* TransGear 3000TV */
929 .name
= "Nagase Sangyo TransGear 3000TV",
930 .audio_clock
= 0x00187de7,
931 .tuner_type
= TUNER_PHILIPS_NTSC_M
,
947 [SAA7134_BOARD_ECS_TVP3XP
] = {
948 .name
= "Elitegroup ECS TVP3XP FM1216 Tuner Card(PAL-BG,FM) ",
949 .audio_clock
= 0x187de7, // xtal 32.1 MHz
950 .tuner_type
= TUNER_PHILIPS_PAL
,
957 .name
= name_tv_mono
,
970 .name
= "CVid over SVid",
979 [SAA7134_BOARD_ECS_TVP3XP_4CB5
] = {
980 .name
= "Elitegroup ECS TVP3XP FM1236 Tuner Card (NTSC,FM)",
981 .audio_clock
= 0x187de7,
982 .tuner_type
= TUNER_PHILIPS_NTSC
,
989 .name
= name_tv_mono
,
1002 .name
= "CVid over SVid",
1011 [SAA7134_BOARD_AVACSSMARTTV
] = {
1012 /* Roman Pszonczenko <romka@kolos.math.uni.lodz.pl> */
1013 .name
= "AVACS SmartTV",
1014 .audio_clock
= 0x00187de7,
1015 .tuner_type
= TUNER_PHILIPS_PAL
,
1022 .name
= name_tv_mono
,
1035 .name
= name_svideo
,
1045 [SAA7134_BOARD_AVERMEDIA_DVD_EZMAKER
] = {
1046 /* Michael Smith <msmith@cbnco.com> */
1047 .name
= "AVerMedia DVD EZMaker",
1048 .audio_clock
= 0x00187de7,
1049 .tuner_type
= TUNER_ABSENT
,
1054 .name
= name_svideo
,
1058 [SAA7134_BOARD_NOVAC_PRIMETV7133
] = {
1059 /* toshii@netbsd.org */
1060 .name
= "Noval Prime TV 7133",
1061 .audio_clock
= 0x00200000,
1062 .tuner_type
= TUNER_ALPS_TSBH1_NTSC
,
1072 .name
= name_svideo
,
1076 [SAA7134_BOARD_AVERMEDIA_STUDIO_305
] = {
1077 .name
= "AverMedia AverTV Studio 305",
1078 .audio_clock
= 0x00187de7,
1079 .tuner_type
= TUNER_PHILIPS_FM1256_IH3
,
1080 .tda9887_conf
= TDA9887_PRESENT
,
1096 .name
= name_svideo
,
1109 [SAA7133_BOARD_UPMOST_PURPLE_TV
] = {
1110 .name
= "UPMOST PURPLE TV",
1111 .audio_clock
= 0x00187de7,
1112 .tuner_type
= TUNER_PHILIPS_FM1236_MK3
,
1113 .tda9887_conf
= TDA9887_PRESENT
,
1120 .name
= name_svideo
,
1125 [SAA7134_BOARD_ITEMS_MTV005
] = {
1126 /* Norman Jonas <normanjonas@arcor.de> */
1127 .name
= "Items MuchTV Plus / IT-005",
1128 .audio_clock
= 0x00187de7,
1129 .tuner_type
= TUNER_PHILIPS_PAL
,
1140 .name
= name_svideo
,
1149 [SAA7134_BOARD_CINERGY200
] = {
1150 .name
= "Terratec Cinergy 200 TV",
1151 .audio_clock
= 0x00200000,
1152 .tuner_type
= TUNER_PHILIPS_PAL
,
1163 .name
= name_svideo
,
1167 .name
= name_comp2
, // CVideo over SVideo Connector
1176 [SAA7134_BOARD_VIDEOMATE_TV_PVR
] = {
1177 /* Alain St-Denis <alain@topaze.homeip.net> */
1178 .name
= "Compro VideoMate TV PVR/FM",
1179 .audio_clock
= 0x00187de7,
1180 .tuner_type
= TUNER_PHILIPS_NTSC_M
,
1181 .gpiomask
= 0x808c0080,
1183 .name
= name_svideo
,
1210 [SAA7134_BOARD_SABRENT_SBTTVFM
] = {
1211 /* Michael Rodriguez-Torrent <mrtorrent@asu.edu> */
1212 .name
= "Sabrent SBT-TVFM (saa7130)",
1213 .audio_clock
= 0x00187de7,
1214 .tuner_type
= TUNER_PHILIPS_NTSC_M
,
1225 .name
= name_svideo
,
1234 [SAA7134_BOARD_ZOLID_XPERT_TV7134
] = {
1235 /* Helge Jensen <helge.jensen@slog.dk> */
1236 .name
= ":Zolid Xpert TV7134",
1237 .audio_clock
= 0x00187de7,
1238 .tuner_type
= TUNER_PHILIPS_NTSC
,
1240 .name
= name_svideo
,
1254 [SAA7134_BOARD_EMPIRE_PCI_TV_RADIO_LE
] = {
1255 /* "Matteo Az" <matte.az@nospam.libero.it> ;-) */
1256 .name
= "Empire PCI TV-Radio LE",
1257 .audio_clock
= 0x00187de7,
1258 .tuner_type
= TUNER_PHILIPS_PAL
,
1261 .name
= name_tv_mono
,
1272 .name
= name_svideo
,
1288 [SAA7134_BOARD_AVERMEDIA_307
] = {
1290 Nickolay V. Shmyrev <nshmyrev@yandex.ru>
1291 Lots of thanks to Andrey Zolotarev <zolotarev_andrey@mail.ru>
1293 .name
= "Avermedia AVerTV Studio 307",
1294 .audio_clock
= 0x00187de7,
1295 .tuner_type
= TUNER_PHILIPS_FM1256_IH3
,
1296 .tda9887_conf
= TDA9887_PRESENT
,
1315 .name
= name_svideo
,
1326 [SAA7134_BOARD_AVERMEDIA_CARDBUS
] = {
1327 /* Jon Westgate <oryn@oryn.fsck.tv> */
1328 .name
= "AVerMedia Cardbus TV/Radio",
1329 .audio_clock
= 0x00200000,
1330 .tuner_type
= TUNER_PHILIPS_PAL
,
1341 .name
= name_svideo
,
1350 [SAA7134_BOARD_CINERGY400_CARDBUS
] = {
1351 .name
= "Terratec Cinergy 400 mobile",
1352 .audio_clock
= 0x187de7,
1353 .tuner_type
= TUNER_ALPS_TSBE5_PAL
,
1354 .tda9887_conf
= TDA9887_PRESENT
,
1361 .name
= name_tv_mono
,
1370 .name
= name_svideo
,
1375 [SAA7134_BOARD_CINERGY600_MK3
] = {
1376 .name
= "Terratec Cinergy 600 TV MK3",
1377 .audio_clock
= 0x00200000,
1378 .tuner_type
= TUNER_PHILIPS_FM1216ME_MK3
,
1379 .tda9887_conf
= TDA9887_PRESENT
,
1390 .name
= name_svideo
,
1394 .name
= name_comp2
, // CVideo over SVideo Connector
1403 [SAA7134_BOARD_VIDEOMATE_GOLD_PLUS
] = {
1404 /* Dylan Walkden <dylan_walkden@hotmail.com> */
1405 .name
= "Compro VideoMate Gold+ Pal",
1406 .audio_clock
= 0x00187de7,
1407 .tuner_type
= TUNER_PHILIPS_PAL
,
1408 .gpiomask
= 0x1ce780,
1410 .name
= name_svideo
,
1411 .vmux
= 0, // CVideo over SVideo Connector - ok?
1437 [SAA7134_BOARD_PINNACLE_300I_DVBT_PAL
] = {
1438 .name
= "Pinnacle PCTV 300i DVB-T + PAL",
1439 .audio_clock
= 0x00187de7,
1440 .tuner_type
= TUNER_MT2032
,
1441 .tda9887_conf
= TDA9887_PRESENT
| TDA9887_INTERCARRIER
,
1442 .mpeg
= SAA7134_MPEG_DVB
,
1457 .name
= name_svideo
,
1462 [SAA7134_BOARD_PROVIDEO_PV952
] = {
1463 /* andreas.kretschmer@web.de */
1464 .name
= "ProVideo PV952",
1465 .audio_clock
= 0x00187de7,
1466 .tuner_type
= TUNER_PHILIPS_FM1216ME_MK3
,
1467 .tda9887_conf
= TDA9887_PRESENT
,
1478 .name
= name_tv_mono
,
1488 [SAA7134_BOARD_AVERMEDIA_305
] = {
1489 /* much like the "studio" version but without radio
1490 * and another tuner (sirspiritus@yandex.ru) */
1491 .name
= "AverMedia AverTV/305",
1492 .audio_clock
= 0x00187de7,
1493 .tuner_type
= TUNER_PHILIPS_FQ1216ME
,
1494 .tda9887_conf
= TDA9887_PRESENT
,
1510 .name
= name_svideo
,
1519 [SAA7134_BOARD_FLYDVBTDUO
] = {
1520 /* LifeView FlyDVB-T DUO */
1521 /* "Nico Sabbi <nsabbi@tiscali.it> */
1522 .name
= "LifeView FlyDVB-T DUO",
1523 .audio_clock
= 0x00200000,
1524 .tuner_type
= TUNER_PHILIPS_TDA8290
,
1525 // .gpiomask = 0xe000,
1533 .name
= name_comp1
, /* Composite signal on S-Video input */
1538 .name
= name_comp2
, /* Composite input */
1543 .name
= name_svideo
, /* S-Video signal on S-Video input */
1550 const unsigned int saa7134_bcount
= ARRAY_SIZE(saa7134_boards
);
1552 /* ------------------------------------------------------------------ */
1553 /* PCI ids + subsystem IDs */
1555 struct pci_device_id saa7134_pci_tbl
[] = {
1557 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1558 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1559 .subvendor
= PCI_VENDOR_ID_PHILIPS
,
1560 .subdevice
= 0x2001,
1561 .driver_data
= SAA7134_BOARD_PROTEUS_PRO
,
1563 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1564 .device
= PCI_DEVICE_ID_PHILIPS_SAA7133
,
1565 .subvendor
= PCI_VENDOR_ID_PHILIPS
,
1566 .subdevice
= 0x2001,
1567 .driver_data
= SAA7134_BOARD_PROTEUS_PRO
,
1569 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1570 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1571 .subvendor
= PCI_VENDOR_ID_PHILIPS
,
1572 .subdevice
= 0x6752,
1573 .driver_data
= SAA7134_BOARD_EMPRESS
,
1575 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1576 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1577 .subvendor
= 0x1131,
1578 .subdevice
= 0x4e85,
1579 .driver_data
= SAA7134_BOARD_MONSTERTV
,
1581 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1582 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1583 .subvendor
= 0x153B,
1584 .subdevice
= 0x1142,
1585 .driver_data
= SAA7134_BOARD_CINERGY400
,
1587 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1588 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1589 .subvendor
= 0x153B,
1590 .subdevice
= 0x1143,
1591 .driver_data
= SAA7134_BOARD_CINERGY600
,
1593 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1594 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1595 .subvendor
= 0x153B,
1596 .subdevice
= 0x1158,
1597 .driver_data
= SAA7134_BOARD_CINERGY600_MK3
,
1599 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1600 .device
= PCI_DEVICE_ID_PHILIPS_SAA7133
,
1601 .subvendor
= 0x153b,
1602 .subdevice
= 0x1162,
1603 .driver_data
= SAA7134_BOARD_CINERGY400_CARDBUS
,
1605 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1606 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1607 .subvendor
= 0x5168,
1608 .subdevice
= 0x0138,
1609 .driver_data
= SAA7134_BOARD_FLYVIDEO3000
,
1611 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1612 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1613 .subvendor
= 0x4e42, //"Typhoon PCI Capture TV Card" Art.No. 50673
1614 .subdevice
= 0x0138,
1615 .driver_data
= SAA7134_BOARD_FLYVIDEO3000
,
1617 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1618 .device
= PCI_DEVICE_ID_PHILIPS_SAA7130
,
1619 .subvendor
= 0x5168,
1620 .subdevice
= 0x0138,
1621 .driver_data
= SAA7134_BOARD_FLYVIDEO2000
,
1623 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1624 .device
= PCI_DEVICE_ID_PHILIPS_SAA7135
,
1625 .subvendor
= 0x5168,
1626 .subdevice
= 0x0212, /* minipci, LR212 */
1627 .driver_data
= SAA7134_BOARD_FLYTVPLATINUM_MINI
,
1629 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1630 .device
= PCI_DEVICE_ID_PHILIPS_SAA7133
,
1631 .subvendor
= 0x5168, /* Animation Technologies (LifeView) */
1632 .subdevice
= 0x0214, /* Standard PCI, LR214WF */
1633 .driver_data
= SAA7134_BOARD_FLYTVPLATINUM_FM
,
1635 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1636 .device
= PCI_DEVICE_ID_PHILIPS_SAA7133
,
1637 .subvendor
= 0x1489, /* KYE */
1638 .subdevice
= 0x0214, /* Genius VideoWonder ProTV */
1639 .driver_data
= SAA7134_BOARD_FLYTVPLATINUM_FM
, /* is an LR214WF actually */
1641 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1642 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1643 .subvendor
= 0x16be,
1644 .subdevice
= 0x0003,
1645 .driver_data
= SAA7134_BOARD_MD7134
,
1647 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1648 .device
= PCI_DEVICE_ID_PHILIPS_SAA7130
,
1649 .subvendor
= 0x1048,
1650 .subdevice
= 0x226b,
1651 .driver_data
= SAA7134_BOARD_ELSA
,
1653 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1654 .device
= PCI_DEVICE_ID_PHILIPS_SAA7130
,
1655 .subvendor
= 0x1048,
1656 .subdevice
= 0x226b,
1657 .driver_data
= SAA7134_BOARD_ELSA_500TV
,
1659 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1660 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1661 .subvendor
= PCI_VENDOR_ID_ASUSTEK
,
1662 .subdevice
= 0x4842,
1663 .driver_data
= SAA7134_BOARD_ASUSTeK_TVFM7134
,
1665 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1666 .device
= PCI_DEVICE_ID_PHILIPS_SAA7133
,
1667 .subvendor
= PCI_VENDOR_ID_ASUSTEK
,
1668 .subdevice
= 0x4845,
1669 .driver_data
= SAA7135_BOARD_ASUSTeK_TVFM7135
,
1671 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1672 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1673 .subvendor
= PCI_VENDOR_ID_ASUSTEK
,
1674 .subdevice
= 0x4830,
1675 .driver_data
= SAA7134_BOARD_ASUSTeK_TVFM7134
,
1677 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1678 .device
= PCI_DEVICE_ID_PHILIPS_SAA7133
,
1679 .subvendor
= PCI_VENDOR_ID_ASUSTEK
,
1680 .subdevice
= 0x4843,
1681 .driver_data
= SAA7134_BOARD_ASUSTEK_TVFM7133
,
1683 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1684 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1685 .subvendor
= PCI_VENDOR_ID_ASUSTEK
,
1686 .subdevice
= 0x4840,
1687 .driver_data
= SAA7134_BOARD_ASUSTeK_TVFM7134
,
1689 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1690 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1691 .subvendor
= PCI_VENDOR_ID_PHILIPS
,
1692 .subdevice
= 0xfe01,
1693 .driver_data
= SAA7134_BOARD_TVSTATION_RDS
,
1695 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1696 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1697 .subvendor
= 0x1894,
1698 .subdevice
= 0xfe01,
1699 .driver_data
= SAA7134_BOARD_TVSTATION_RDS
,
1701 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1702 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1703 .subvendor
= 0x1894,
1704 .subdevice
= 0xa006,
1705 .driver_data
= SAA7134_BOARD_TVSTATION_DVR
,
1707 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1708 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1709 .subvendor
= 0x1131,
1710 .subdevice
= 0x7133,
1711 .driver_data
= SAA7134_BOARD_VA1000POWER
,
1713 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1714 .device
= PCI_DEVICE_ID_PHILIPS_SAA7130
,
1715 .subvendor
= PCI_VENDOR_ID_PHILIPS
,
1716 .subdevice
= 0x2001,
1717 .driver_data
= SAA7134_BOARD_10MOONSTVMASTER
,
1719 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1720 .device
= PCI_DEVICE_ID_PHILIPS_SAA7133
,
1721 .subvendor
= 0x185b,
1722 .subdevice
= 0xc100,
1723 .driver_data
= SAA7134_BOARD_VIDEOMATE_TV
,
1725 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1726 .device
= PCI_DEVICE_ID_PHILIPS_SAA7133
,
1727 .subvendor
= 0x185b,
1728 .subdevice
= 0xc100,
1729 .driver_data
= SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUS
,
1731 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1732 .device
= PCI_DEVICE_ID_PHILIPS_SAA7130
,
1733 .subvendor
= PCI_VENDOR_ID_MATROX
,
1734 .subdevice
= 0x48d0,
1735 .driver_data
= SAA7134_BOARD_CRONOS_PLUS
,
1737 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1738 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1739 .subvendor
= 0x1461, /* Avermedia Technologies Inc */
1740 .subdevice
= 0xa70b,
1741 .driver_data
= SAA7134_BOARD_MD2819
,
1743 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1744 .device
= PCI_DEVICE_ID_PHILIPS_SAA7130
,
1745 .subvendor
= 0x1461, /* Avermedia Technologies Inc */
1746 .subdevice
= 0x2115,
1747 .driver_data
= SAA7134_BOARD_AVERMEDIA_STUDIO_305
,
1749 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1750 .device
= PCI_DEVICE_ID_PHILIPS_SAA7130
,
1751 .subvendor
= 0x1461, /* Avermedia Technologies Inc */
1752 .subdevice
= 0x2108,
1753 .driver_data
= SAA7134_BOARD_AVERMEDIA_305
,
1755 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1756 .device
= PCI_DEVICE_ID_PHILIPS_SAA7130
,
1757 .subvendor
= 0x1461, /* Avermedia Technologies Inc */
1758 .subdevice
= 0x10ff,
1759 .driver_data
= SAA7134_BOARD_AVERMEDIA_DVD_EZMAKER
,
1761 /* AVerMedia CardBus */
1762 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1763 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1764 .subvendor
= 0x1461, /* Avermedia Technologies Inc */
1765 .subdevice
= 0xd6ee,
1766 .driver_data
= SAA7134_BOARD_AVERMEDIA_CARDBUS
,
1768 /* TransGear 3000TV */
1769 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1770 .device
= PCI_DEVICE_ID_PHILIPS_SAA7130
,
1771 .subvendor
= 0x1461, /* Avermedia Technologies Inc */
1772 .subdevice
= 0x050c,
1773 .driver_data
= SAA7134_BOARD_TG3000TV
,
1775 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1776 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1777 .subvendor
= 0x11bd,
1778 .subdevice
= 0x002b,
1779 .driver_data
= SAA7134_BOARD_PINNACLE_PCTV_STEREO
,
1781 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1782 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1783 .subvendor
= 0x11bd,
1784 .subdevice
= 0x002d,
1785 .driver_data
= SAA7134_BOARD_PINNACLE_300I_DVBT_PAL
,
1787 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1788 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1789 .subvendor
= 0x1019,
1790 .subdevice
= 0x4cb4,
1791 .driver_data
= SAA7134_BOARD_ECS_TVP3XP
,
1793 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1794 .device
= PCI_DEVICE_ID_PHILIPS_SAA7133
,
1795 .subvendor
= 0x1019,
1796 .subdevice
= 0x4cb5,
1797 .driver_data
= SAA7134_BOARD_ECS_TVP3XP_4CB5
,
1799 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1800 .device
= PCI_DEVICE_ID_PHILIPS_SAA7133
,
1801 .subvendor
= 0x12ab,
1802 .subdevice
= 0x0800,
1803 .driver_data
= SAA7133_BOARD_UPMOST_PURPLE_TV
,
1805 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1806 .device
= PCI_DEVICE_ID_PHILIPS_SAA7130
,
1807 .subvendor
= 0x153B,
1808 .subdevice
= 0x1152,
1809 .driver_data
= SAA7134_BOARD_CINERGY200
,
1811 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1812 .device
= PCI_DEVICE_ID_PHILIPS_SAA7130
,
1813 .subvendor
= 0x185b,
1814 .subdevice
= 0xc100,
1815 .driver_data
= SAA7134_BOARD_VIDEOMATE_TV_PVR
,
1817 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1818 .device
= PCI_DEVICE_ID_PHILIPS_SAA7130
,
1819 .subvendor
= 0x1131,
1821 .driver_data
= SAA7134_BOARD_SABRENT_SBTTVFM
,
1823 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1824 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1825 .subvendor
= 0x1461, /* Avermedia Technologies Inc */
1826 .subdevice
= 0x9715,
1827 .driver_data
= SAA7134_BOARD_AVERMEDIA_307
,
1829 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1830 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1831 .subvendor
= 0x185b,
1832 .subdevice
= 0xc200,
1833 .driver_data
= SAA7134_BOARD_VIDEOMATE_GOLD_PLUS
,
1835 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1836 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1837 .subvendor
= 0x1540,
1838 .subdevice
= 0x9524,
1839 .driver_data
= SAA7134_BOARD_PROVIDEO_PV952
,
1842 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1843 .device
= PCI_DEVICE_ID_PHILIPS_SAA7133
,
1844 .subvendor
= 0x5168,
1845 .subdevice
= 0x0306,
1846 .driver_data
= SAA7134_BOARD_FLYDVBTDUO
,
1849 /* --- boards without eeprom + subsystem ID --- */
1850 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1851 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1852 .subvendor
= PCI_VENDOR_ID_PHILIPS
,
1854 .driver_data
= SAA7134_BOARD_NOAUTO
,
1856 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1857 .device
= PCI_DEVICE_ID_PHILIPS_SAA7130
,
1858 .subvendor
= PCI_VENDOR_ID_PHILIPS
,
1860 .driver_data
= SAA7134_BOARD_NOAUTO
,
1863 /* --- default catch --- */
1864 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1865 .device
= PCI_DEVICE_ID_PHILIPS_SAA7130
,
1866 .subvendor
= PCI_ANY_ID
,
1867 .subdevice
= PCI_ANY_ID
,
1868 .driver_data
= SAA7134_BOARD_UNKNOWN
,
1870 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1871 .device
= PCI_DEVICE_ID_PHILIPS_SAA7133
,
1872 .subvendor
= PCI_ANY_ID
,
1873 .subdevice
= PCI_ANY_ID
,
1874 .driver_data
= SAA7134_BOARD_UNKNOWN
,
1876 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1877 .device
= PCI_DEVICE_ID_PHILIPS_SAA7134
,
1878 .subvendor
= PCI_ANY_ID
,
1879 .subdevice
= PCI_ANY_ID
,
1880 .driver_data
= SAA7134_BOARD_UNKNOWN
,
1882 .vendor
= PCI_VENDOR_ID_PHILIPS
,
1883 .device
= PCI_DEVICE_ID_PHILIPS_SAA7135
,
1884 .subvendor
= PCI_ANY_ID
,
1885 .subdevice
= PCI_ANY_ID
,
1886 .driver_data
= SAA7134_BOARD_UNKNOWN
,
1888 /* --- end of list --- */
1891 MODULE_DEVICE_TABLE(pci
, saa7134_pci_tbl
);
1893 /* ----------------------------------------------------------- */
1894 /* flyvideo tweaks */
1900 } fly_list
[0x20] = {
1901 /* default catch ... */
1904 .tuner_type
= TUNER_ABSENT
,
1906 /* ... the ones known so far */
1909 .tuner_type
= TUNER_LG_PAL_NEW_TAPC
,
1912 .model
= "PAL-BG / PAL-DK",
1913 .tuner_type
= TUNER_PHILIPS_PAL
,
1917 .tuner_type
= TUNER_ABSENT
/* FIXME */,
1922 static void board_flyvideo(struct saa7134_dev
*dev
)
1925 /* non-working attempt to detect the correct tuner type ... */
1929 value
= dev
->gpio_value
;
1930 index
= (value
& 0x1f00) >> 8;
1931 printk(KERN_INFO
"%s: flyvideo: gpio is 0x%x [model=%s,tuner=%d]\n",
1932 dev
->name
, value
, fly_list
[index
].model
,
1933 fly_list
[index
].tuner_type
);
1934 dev
->tuner_type
= fly_list
[index
].tuner_type
;
1936 printk("%s: there are different flyvideo cards with different tuners\n"
1937 "%s: out there, you might have to use the tuner=<nr> insmod\n"
1938 "%s: option to override the default value.\n",
1939 dev
->name
, dev
->name
, dev
->name
);
1942 /* ----------------------------------------------------------- */
1944 int saa7134_board_init1(struct saa7134_dev
*dev
)
1946 // Always print gpio, often manufacturers encode tuner type and other info.
1947 saa_writel(SAA7134_GPIO_GPMODE0
>> 2, 0);
1948 dev
->gpio_value
= saa_readl(SAA7134_GPIO_GPSTATUS0
>> 2);
1949 printk(KERN_INFO
"%s: board init: gpio is %x\n", dev
->name
, dev
->gpio_value
);
1951 switch (dev
->board
) {
1952 case SAA7134_BOARD_FLYVIDEO2000
:
1953 case SAA7134_BOARD_FLYVIDEO3000
:
1954 dev
->has_remote
= 1;
1955 board_flyvideo(dev
);
1957 case SAA7134_BOARD_FLYTVPLATINUM_FM
:
1958 case SAA7134_BOARD_CINERGY400
:
1959 case SAA7134_BOARD_CINERGY600
:
1960 case SAA7134_BOARD_CINERGY600_MK3
:
1961 case SAA7134_BOARD_ECS_TVP3XP
:
1962 case SAA7134_BOARD_ECS_TVP3XP_4CB5
:
1963 case SAA7134_BOARD_MD2819
:
1964 case SAA7134_BOARD_AVERMEDIA_STUDIO_305
:
1965 case SAA7134_BOARD_AVERMEDIA_305
:
1966 case SAA7134_BOARD_AVERMEDIA_307
:
1967 // case SAA7134_BOARD_SABRENT_SBTTVFM: /* not finished yet */
1968 case SAA7134_BOARD_VIDEOMATE_TV_PVR
:
1969 dev
->has_remote
= 1;
1971 case SAA7134_BOARD_AVACSSMARTTV
:
1972 dev
->has_remote
= 1;
1974 case SAA7134_BOARD_MD5044
:
1975 printk("%s: seems there are two different versions of the MD5044\n"
1976 "%s: (with the same ID) out there. If sound doesn't work for\n"
1977 "%s: you try the audio_clock_override=0x200000 insmod option.\n",
1978 dev
->name
,dev
->name
,dev
->name
);
1980 case SAA7134_BOARD_CINERGY400_CARDBUS
:
1981 /* power-up tuner chip */
1982 saa_andorl(SAA7134_GPIO_GPMODE0
>> 2, 0x00040000, 0x00040000);
1983 saa_andorl(SAA7134_GPIO_GPSTATUS0
>> 2, 0x00040000, 0x00000000);
1987 if (dev
->has_remote
)
1988 dev
->irq2_mask
|= (SAA7134_IRQ2_INTE_GPIO18
|
1989 SAA7134_IRQ2_INTE_GPIO18A
|
1990 SAA7134_IRQ2_INTE_GPIO16
);
1994 /* stuff which needs working i2c */
1995 int saa7134_board_init2(struct saa7134_dev
*dev
)
2000 switch (dev
->board
) {
2001 case SAA7134_BOARD_BMK_MPEX_NOTUNER
:
2002 case SAA7134_BOARD_BMK_MPEX_TUNER
:
2003 dev
->i2c_client
.addr
= 0x60;
2004 board
= (i2c_master_recv(&dev
->i2c_client
,&buf
,0) < 0)
2005 ? SAA7134_BOARD_BMK_MPEX_NOTUNER
2006 : SAA7134_BOARD_BMK_MPEX_TUNER
;
2007 if (board
== dev
->board
)
2010 printk("%s: board type fixup: %s\n", dev
->name
,
2011 saa7134_boards
[dev
->board
].name
);
2012 dev
->tuner_type
= saa7134_boards
[dev
->board
].tuner_type
;
2013 if (TUNER_ABSENT
!= dev
->tuner_type
)
2014 saa7134_i2c_call_clients(dev
,TUNER_SET_TYPE
,&dev
->tuner_type
);
2020 /* ----------------------------------------------------------- */