vserver 1.9.5.x5
[linux-2.6.git] / drivers / media / video / saa7134 / saa7134-cards.c
1 /*
2  * $Id: saa7134-cards.c,v 1.35 2004/11/07 14:44:59 kraxel Exp $
3  *
4  * device driver for philips saa7134 based TV cards
5  * card-specific stuff.
6  *
7  * (c) 2001-04 Gerd Knorr <kraxel@bytesex.org> [SuSE Labs]
8  *
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.
13  *
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.
18  *
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.
22  */
23
24 #include <linux/init.h>
25 #include <linux/module.h>
26
27 #include "saa7134-reg.h"
28 #include "saa7134.h"
29
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";
40
41 /* ------------------------------------------------------------------ */
42 /* board config info                                                  */
43
44 struct saa7134_board saa7134_boards[] = {
45         [SAA7134_BOARD_UNKNOWN] = {
46                 .name           = "UNKNOWN/GENERIC",
47                 .audio_clock    = 0x00187de7,
48                 .tuner_type     = TUNER_ABSENT,
49                 .inputs         = {{
50                         .name = "default",
51                         .vmux = 0,
52                         .amux = LINE1,
53                 }},
54         },
55         [SAA7134_BOARD_PROTEUS_PRO] = {
56                 /* /me */
57                 .name           = "Proteus Pro [philips reference design]",
58                 .audio_clock    = 0x00187de7,
59                 .tuner_type     = TUNER_PHILIPS_PAL,
60                 .inputs         = {{
61                         .name = name_comp1,
62                         .vmux = 0,
63                         .amux = LINE1,
64                 },{
65                         .name = name_tv,
66                         .vmux = 1,
67                         .amux = TV,
68                         .tv   = 1,
69                 },{
70                         .name = name_tv_mono,
71                         .vmux = 1,
72                         .amux = LINE2,
73                         .tv   = 1,
74                 }},
75                 .radio = {
76                         .name = name_radio,
77                         .amux = LINE2,
78                 },
79         },
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,
85                 .gpiomask       = 0xe000,
86                 .inputs         = {{
87                         .name = name_tv,
88                         .vmux = 1,
89                         .amux = TV,
90                         .gpio = 0x8000,
91                         .tv   = 1,
92                 },{
93                         .name = name_tv_mono,
94                         .vmux = 1,
95                         .amux = LINE2,
96                         .gpio = 0x0000,
97                         .tv   = 1,
98                 },{
99                         .name = name_comp1,
100                         .vmux = 0,
101                         .amux = LINE2,
102                         .gpio = 0x4000,
103                 },{
104                         .name = name_comp2,
105                         .vmux = 3,
106                         .amux = LINE2,
107                         .gpio = 0x4000,
108                 },{
109                         .name = name_svideo,
110                         .vmux = 8,
111                         .amux = LINE2,
112                         .gpio = 0x4000,
113                 }},
114                 .radio = {
115                         .name = name_radio,
116                         .amux = LINE2,
117                         .gpio = 0x2000,
118                 },
119         },
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,
125                 .gpiomask       = 0xe000,
126                 .inputs         = {{
127                         .name = name_tv,
128                         .vmux = 1,
129                         .amux = LINE2,
130                         .gpio = 0x0000,
131                         .tv   = 1,
132                 },{
133                         .name = name_comp1,
134                         .vmux = 0,
135                         .amux = LINE2,
136                         .gpio = 0x4000,
137                 },{
138                         .name = name_comp2,
139                         .vmux = 3,
140                         .amux = LINE2,
141                         .gpio = 0x4000,
142                 },{
143                         .name = name_svideo,
144                         .vmux = 8,
145                         .amux = LINE2,
146                         .gpio = 0x4000,
147                 }},
148                 .radio = {
149                         .name = name_radio,
150                         .amux = LINE2,
151                         .gpio = 0x2000,
152                 },
153                 .mute = {
154                         .name = name_mute,
155                         .amux = LINE2,
156                         .gpio = 0x8000,
157                 },
158         },
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,
164                 .inputs         = {{
165                         .name = name_tv,
166                         .vmux = 1,
167                         .amux = LINE2,
168                         .tv   = 1,
169                 },{
170                         .name = name_comp1,
171                         .vmux = 0,
172                         .amux = LINE2,
173                 },{
174                         .name = name_svideo,
175                         .vmux = 8,
176                         .amux = LINE2,
177                 }},
178         },
179         [SAA7134_BOARD_EMPRESS] = {
180                 /* "Gert Vervoort" <gert.vervoort@philips.com> */
181                 .name           = "EMPRESS",
182                 .audio_clock    = 0x00187de7,
183                 .tuner_type     = TUNER_PHILIPS_PAL,
184                 .inputs         = {{
185                         .name = name_comp1,
186                         .vmux = 0,
187                         .amux = LINE1,
188                 },{
189                         .name = name_svideo,
190                         .vmux = 8,
191                         .amux = LINE1,
192                 },{
193                         .name = name_tv,
194                         .vmux = 1,
195                         .amux = LINE2,
196                         .tv   = 1,
197                 }},
198                 .radio = {
199                         .name = name_radio,
200                         .amux = LINE2,
201                 },
202                 .mpeg      = SAA7134_MPEG_EMPRESS,
203                 .video_out = CCIR656,
204         },
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,
210                .inputs         = {{
211                        .name = name_tv,
212                        .vmux = 1,
213                        .amux = TV,
214                        .tv   = 1,
215                },{
216                        .name = name_comp1,
217                        .vmux = 0,
218                        .amux = LINE1,
219                },{
220                        .name = name_svideo,
221                        .vmux = 8,
222                        .amux = LINE1,
223                }},
224                .radio = {
225                        .name = name_radio,
226                        .amux = LINE2,
227                },
228         },
229         [SAA7134_BOARD_MD9717] = {
230                 .name           = "Tevion MD 9717",
231                 .audio_clock    = 0x00200000,
232                 .tuner_type     = TUNER_PHILIPS_PAL,
233                 .inputs         = {{
234                         .name = name_tv,
235                         .vmux = 1,
236                         .amux = TV,
237                         .tv   = 1,
238                 },{
239                         /* workaround for problems with normal TV sound */
240                         .name = name_tv_mono,
241                         .vmux = 1,
242                         .amux = LINE2,
243                         .tv   = 1,
244                 },{
245                         .name = name_comp1,
246                         .vmux = 2,
247                         .amux = LINE1,
248                 },{
249                         .name = name_comp2,
250                         .vmux = 3,
251                         .amux = LINE1,
252                 },{
253                         .name = name_svideo,
254                         .vmux = 8,
255                         .amux = LINE1,
256                 }},
257                 .radio = {
258                         .name = name_radio,
259                         .amux = LINE2,
260                 },
261         },
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,
268                 .inputs         = {{
269                         .name = name_tv,
270                         .vmux = 1,
271                         .amux = TV,
272                         .tv   = 1,
273                 },{
274                         .name = name_tv_mono,
275                         .vmux = 1,
276                         .amux   = LINE2,
277                         .tv   = 1,
278                 },{
279
280                         .name = name_svideo,
281                         .vmux = 8,
282                         .amux = LINE1,
283                 },{
284                         .name = name_comp1,
285                         .vmux = 3,
286                         .amux = LINE1,
287                 },{
288
289                         .name = "CVid over SVid",
290                         .vmux = 0,
291                         .amux = LINE1,
292                 }},
293                 .radio = {
294                         .name = name_radio,
295                         .amux = LINE2,
296                 },
297         },
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,
304                 .inputs         = {{
305                         .name = name_tv,
306                         .vmux = 1,
307                         .amux = LINE2,
308                         .tv   = 1,
309                         .gpio = 0x20000,
310                 },{
311                         .name = name_svideo,
312                         .vmux = 8,
313                         .amux = LINE1,
314                         .gpio = 0x20000,
315                 },{
316                         .name = name_comp1,
317                         .vmux = 3,
318                         .amux = LINE1,
319                         .gpio = 0x20000,
320                 }},
321                 .radio          = {
322                         .name = name_radio,
323                         .amux = LINE2,
324                         .gpio = 0x20000,
325                 },
326                 .mpeg           = SAA7134_MPEG_EMPRESS,
327                 .video_out      = CCIR656,
328         },
329         [SAA7134_BOARD_CINERGY400] = {
330                 .name           = "Terratec Cinergy 400 TV",
331                 .audio_clock    = 0x00200000,
332                 .tuner_type     = TUNER_PHILIPS_PAL,
333                 .inputs         = {{
334                         .name = name_tv,
335                         .vmux = 1,
336                         .amux = TV,
337                         .tv   = 1,
338                 },{
339                         .name = name_comp1,
340                         .vmux = 4,
341                         .amux = LINE1,
342                 },{
343                         .name = name_svideo,
344                         .vmux = 8,
345                         .amux = LINE1,
346                 },{
347                         .name = name_comp2, // CVideo over SVideo Connector
348                         .vmux = 0,
349                         .amux = LINE1,
350                 }}
351         },
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,
357                 .inputs         = {{
358                         .name = name_tv,
359                         .vmux = 1,
360                         .amux = TV,
361                         .tv   = 1,
362                 },{
363                         /* workaround for problems with normal TV sound */
364                         .name = name_tv_mono,
365                         .vmux = 1,
366                         .amux = LINE2,
367                         .tv   = 1,
368                 },{
369                         .name = name_comp1,
370                         .vmux = 0,
371                         .amux = LINE2,
372                 },{
373                         .name = name_comp2,
374                         .vmux = 3,
375                         .amux = LINE2,
376                 },{
377                         .name = name_svideo,
378                         .vmux = 8,
379                         .amux = LINE2,
380                 }},
381                 .radio = {
382                         .name = name_radio,
383                         .amux = LINE2,
384                 },
385         },
386         [SAA7134_BOARD_KWORLD] = {
387                 .name           = "Kworld/KuroutoShikou SAA7130-TVPCI",
388                 .audio_clock    = 0x00187de7,
389                 .tuner_type     = TUNER_PHILIPS_NTSC_M,
390                 .inputs         = {{
391                         .name = name_svideo,
392                         .vmux = 8,
393                         .amux = LINE1,
394                 },{
395                         .name = name_comp1,
396                         .vmux = 3,
397                         .amux = LINE1,
398                 },{
399                         .name = name_tv,
400                         .vmux = 1,
401                         .amux = LINE2,
402                         .tv   = 1,
403                 }},
404         },
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,
410                 .inputs         = {{
411                         .name = name_tv,
412                         .vmux = 1,
413                         .amux = TV,
414                         .tv   = 1,
415                 },{
416                         .name = name_comp1,
417                         .vmux = 4,
418                         .amux = LINE1,
419                 },{
420                         .name = name_svideo,
421                         .vmux = 8,
422                         .amux = LINE1,
423                 },{
424                         .name = name_comp2, // CVideo over SVideo Connector
425                         .vmux = 0,
426                         .amux = LINE1,
427                 }},
428                 .radio = {
429                         .name = name_radio,
430                         .amux = LINE2,
431                },
432         },
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,
439                 .inputs = {{
440                         .name   = name_tv,
441                         .vmux   = 1,
442                         .amux   = TV,
443                         .tv     = 1,
444                 },{
445                         .name   = name_comp1,
446                         .vmux   = 0,
447                         .amux   = LINE2,
448                 },{
449                         .name   = name_svideo,
450                         .vmux   = 8,
451                         .amux   = LINE2,
452                 }},
453                 .radio = {
454                         .name   = name_radio,
455                         .amux   = LINE2,
456                 },
457         },
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,
465                 .inputs         = {{
466                         .name   = name_tv,
467                         .vmux   = 1,
468                         .amux   = TV,
469                         .tv     = 1,
470                 },{
471                         .name   = name_comp1,
472                         .vmux   = 3,
473                         .amux   = LINE1,
474                 },{
475                         .name   = name_svideo,
476                         .vmux   = 8,
477                         .amux   = LINE1,
478                 }},
479                 .radio = {
480                         .name   = name_radio,
481                         .amux   = LINE2,
482                 },
483         },
484         [SAA7134_BOARD_ELSA] = {
485                 .name           = "ELSA EX-VISION 300TV",
486                 .audio_clock    = 0x00187de7,
487                 .tuner_type     = TUNER_HITACHI_NTSC,
488                 .inputs         = {{
489                         .name = name_svideo,
490                         .vmux = 8,
491                         .amux = LINE1,
492                 },{
493                         .name   = name_comp1,
494                         .vmux   = 0,
495                         .amux   = LINE1,
496                 },{
497                         .name = name_tv,
498                         .vmux = 4,
499                         .amux = LINE2,
500                         .tv   = 1,
501                 }},
502         },
503         [SAA7134_BOARD_ELSA_500TV] = {
504                 .name           = "ELSA EX-VISION 500TV",
505                 .audio_clock    = 0x00187de7,
506                 .tuner_type     = TUNER_HITACHI_NTSC,
507                 .inputs         = {{
508                         .name = name_svideo,
509                         .vmux = 7,
510                         .amux = LINE1,
511                 },{
512                         .name = name_tv,
513                         .vmux = 8,
514                         .amux = TV,
515                         .tv   = 1,
516                 },{
517                         .name = name_tv_mono,
518                         .vmux = 8,
519                         .amux = LINE2,
520                         .tv   = 1,
521                 }},
522         },
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,
528                 .inputs         = {{
529                         .name = name_tv,
530                         .vmux = 1,
531                         .amux = TV,
532                         .tv   = 1,
533                 },{
534                         .name = name_comp1,
535                         .vmux = 4,
536                         .amux = LINE2,
537                 },{
538                         .name = name_svideo,
539                         .vmux = 6,
540                         .amux = LINE2,
541                 }},
542                 .radio = {
543                         .name = name_radio,
544                         .amux = LINE1,
545                 },
546         },
547         [SAA7134_BOARD_VA1000POWER] = {
548                 .name           = "AOPEN VA1000 POWER",
549                 .audio_clock    = 0x00187de7,
550                 .tuner_type     = TUNER_PHILIPS_NTSC,
551                 .inputs         = {{
552                         .name = name_svideo,
553                         .vmux = 8,
554                         .amux = LINE1,
555                 },{
556                         .name = name_comp1,
557                         .vmux = 3,
558                         .amux = LINE1,
559                 },{
560                         .name = name_tv,
561                         .vmux = 1,
562                         .amux = LINE2,
563                         .tv   = 1,
564                 }},
565         },
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,
571                 .gpiomask       = 0xe000,
572                 .inputs         = {{
573                         .name = name_tv,
574                         .vmux = 1,
575                         .amux = LINE2,
576                         .gpio = 0x0000,
577                         .tv   = 1,
578                 },{
579                         .name = name_comp1,
580                         .vmux = 0,
581                         .amux = LINE2,
582                         .gpio = 0x4000,
583                 },{
584                         .name = name_comp2,
585                         .vmux = 3,
586                         .amux = LINE2,
587                         .gpio = 0x4000,
588                 },{
589                         .name = name_svideo,
590                         .vmux = 8,
591                         .amux = LINE2,
592                         .gpio = 0x4000,
593                 }},
594                 .radio = {
595                         .name = name_radio,
596                         .amux = LINE2,
597                         .gpio = 0x2000,
598                 },
599                 .mute = {
600                         .name = name_mute,
601                         .amux = LINE2,
602                         .gpio = 0x8000,
603                 },
604         },
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,
610                 .inputs         = {{
611                         .name = name_comp1,
612                         .vmux = 4,
613                         .amux = LINE1,
614                 },{
615                         .name = name_comp2,
616                         .vmux = 3,
617                         .amux = LINE1,
618                 },{
619                         .name = name_comp3,
620                         .vmux = 0,
621                         .amux = LINE1,
622                 },{
623                         .name = name_comp4,
624                         .vmux = 1,
625                         .amux = LINE1,
626                 },{
627                         .name = name_svideo,
628                         .vmux = 8,
629                         .amux = LINE1,
630                 }},
631                 .mpeg      = SAA7134_MPEG_EMPRESS,
632                 .video_out = CCIR656,
633         },
634         [SAA7134_BOARD_VIDEOMATE_TV] = {
635                 .name           = "Compro VideoMate TV",
636                 .audio_clock    = 0x00187de7,
637                 .tuner_type     = TUNER_PHILIPS_NTSC_M,
638                 .inputs         = {{
639                         .name = name_svideo,
640                         .vmux = 8,
641                         .amux = LINE1,
642                 },{
643                         .name = name_comp1,
644                         .vmux = 3,
645                         .amux = LINE1,
646                 },{
647                         .name = name_tv,
648                         .vmux = 1,
649                         .amux = LINE2,
650                         .tv   = 1,
651                 }},
652         },
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,
658                 .inputs         = {{
659                         .name = name_svideo,
660                         .vmux = 8,
661                         .amux = LINE1,
662                         .gpio = 0x06c00012,
663                 },{
664                         .name = name_comp1,
665                         .vmux = 3,
666                         .amux = LINE1,
667                         .gpio = 0x0ac20012,
668                 },{
669                         .name = name_tv,
670                         .vmux = 1,
671                         .amux = LINE2,
672                         .gpio = 0x08c20012,
673                         .tv   = 1,
674                 }},
675         },
676         [SAA7134_BOARD_CRONOS_PLUS] = {
677                 /* gpio pins:
678                    0  .. 3   BASE_ID
679                    4  .. 7   PROTECT_ID
680                    8  .. 11  USER_OUT
681                    12 .. 13  USER_IN
682                    14 .. 15  VIDIN_SEL */
683                 .name           = "Matrox CronosPlus",
684                 .tuner_type     = TUNER_ABSENT,
685                 .gpiomask       = 0xcf00,
686                 .inputs         = {{
687                         .name = name_comp1,
688                         .vmux = 0,
689                         .gpio = 2 << 14,
690                 },{
691                         .name = name_comp2,
692                         .vmux = 0,
693                         .gpio = 1 << 14,
694                 },{
695                         .name = name_comp3,
696                         .vmux = 0,
697                         .gpio = 0 << 14,
698                 },{
699                         .name = name_comp4,
700                         .vmux = 0,
701                         .gpio = 3 << 14,
702                 },{
703                         .name = name_svideo,
704                         .vmux = 8,
705                         .gpio = 2 << 14,
706                 }},
707         },
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,
713                 .inputs         = {{
714                         .name = name_tv,
715                         .vmux = 1,
716                         .amux = TV,
717                         .tv   = 1,
718                 },{
719                         .name = name_comp1,
720                         .vmux = 0,
721                         .amux = LINE2,
722                 },{
723                         .name = name_comp2,
724                         .vmux = 3,
725                         .amux = LINE2,
726                 },{
727                         .name = name_svideo,
728                         .vmux = 8,
729                         .amux = LINE2,
730                 }},
731                 .radio = {
732                         .name = name_radio,
733                         .amux = LINE2,
734                 },
735         },
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,
741                 .inputs         = {{
742                         .name = name_comp1,
743                         .vmux = 1,
744                         .amux = LINE1,
745                 },{
746                         .name = name_svideo,
747                         .vmux = 8,
748                         .amux = LINE1,
749                 },{
750                         .name = name_tv,
751                         .vmux = 3,
752                         .amux = LINE2,
753                         .tv   = 1,
754                 }},
755                 .mpeg      = SAA7134_MPEG_EMPRESS,
756                 .video_out = CCIR656,
757         },
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,
765                 .inputs         = {{
766                         .name = name_tv,
767                         .vmux = 1,
768                         .amux = TV,
769                         .tv   = 1,
770                 },{
771                         .name = name_comp1,
772                         .vmux = 4,
773                         .amux = LINE2,
774                 },{
775                         .name = name_svideo,
776                         .vmux = 6,
777                         .amux = LINE2,
778                 }},
779                 .radio = {
780                         .name = name_radio,
781                         .amux = LINE1,
782                 },
783         },
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,
789                 .inputs         = {{
790                         .name = name_tv,
791                         .vmux = 3,
792                         .amux = TV,
793                         .tv   = 1,
794                 },{
795                         .name = name_comp1,
796                         .vmux = 0,
797                         .amux = LINE2,
798                 },{
799                         .name = name_comp2,
800                         .vmux = 1,
801                         .amux = LINE2,
802                 },{
803                         .name = name_svideo,
804                         .vmux = 8,
805                         .amux = LINE2,
806                 }},
807         },
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,
813                 .inputs         = {{
814                         .name = name_svideo,
815                         .vmux = 8,
816                         .amux = LINE1,
817                 },{
818                         .name   = name_comp1,
819                         .vmux   = 1,
820                         .amux   = LINE1,
821                 },{
822                         .name = name_tv,
823                         .vmux = 3,
824                         .amux = LINE2,
825                         .tv   = 1,
826                 }},
827                 .radio = {
828                         .name = name_radio,
829                         .amux = LINE2,
830                 },
831         },
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,
837                 .inputs         = {{
838                         .name = name_svideo,
839                         .vmux = 8,
840                         .amux = LINE1,
841                 },{
842                         .name = name_comp1,
843                         .vmux = 1,
844                         .amux = LINE1,
845                 },{
846                         .name = name_tv,
847                         .vmux = 3,
848                         .amux = LINE2,
849                         .tv   = 1,
850                 }},
851         },
852         [SAA7134_BOARD_TG3000TV] = {
853                 /* TransGear 3000TV */
854                 .name           = "Nagase Sangyo TransGear 3000TV",
855                 .audio_clock    = 0x00187de7,
856                 .tuner_type     = TUNER_PHILIPS_NTSC_M,
857                 .inputs         = {{
858                         .name = name_tv,
859                         .vmux = 1,
860                         .amux = LINE2,
861                         .tv   = 1,
862                 },{
863                         .name = name_comp1,
864                         .vmux = 3,
865                         .amux = LINE2,
866                 },{
867                         .name = name_svideo,
868                         .vmux = 8,
869                         .amux = LINE2,
870                 }},
871         },
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,
876                 .inputs         = {{
877                         .name   = name_tv,
878                         .vmux   = 1,
879                         .amux   = TV,
880                         .tv     = 1,
881                 },{
882                         .name   = name_tv_mono,
883                         .vmux   = 1,
884                         .amux   = LINE2,
885                         .tv     = 1,
886                 },{
887                         .name   = name_comp1,
888                         .vmux   = 3,
889                         .amux   = LINE1,
890                 },{
891                         .name   = name_svideo,
892                         .vmux   = 8,
893                         .amux   = LINE1,
894                 },{
895                         .name   = "CVid over SVid",
896                         .vmux   = 0,
897                         .amux   = LINE1,
898                 }},
899                 .radio = {
900                         .name   = name_radio,
901                         .amux   = LINE2,
902                 },
903         },
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,
908                 .inputs         = {{
909                         .name   = name_tv,
910                         .vmux   = 1,
911                         .amux   = TV,
912                         .tv     = 1,
913                 },{
914                         .name   = name_tv_mono,
915                         .vmux   = 1,
916                         .amux   = LINE2,
917                         .tv     = 1,
918                 },{
919                         .name   = name_comp1,
920                         .vmux   = 3,
921                         .amux   = LINE1,
922                 },{
923                         .name   = name_svideo,
924                         .vmux   = 8,
925                         .amux   = LINE1,
926                 },{
927                         .name   = "CVid over SVid",
928                         .vmux   = 0,
929                         .amux   = LINE1,
930                 }},
931                 .radio = {
932                         .name   = name_radio,
933                         .amux   = LINE2,
934                 },
935         },
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,
941                 .inputs         = {{
942                         .name = name_tv,
943                         .vmux = 1,
944                         .amux = TV,
945                         .tv   = 1,
946                 },{
947                         .name = name_tv_mono,
948                         .vmux = 1,
949                         .amux = LINE2,
950                         .tv   = 1,
951                 },{
952                         .name = name_comp1,
953                         .vmux = 0,
954                         .amux = LINE2,
955                 },{
956                         .name = name_comp2,
957                         .vmux = 3,
958                         .amux = LINE2,
959                 },{
960                         .name = name_svideo,
961                         .vmux = 8,
962                         .amux = LINE2,
963                 }},
964                 .radio = {
965                         .name = name_radio,
966                         .amux = LINE2,
967                         .gpio = 0x200000,
968                 },
969         },
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,
975                 .inputs         = {{
976                         .name = name_comp1,
977                         .vmux = 3,
978                 }},
979         },
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,
985                 .inputs         = {{
986                         .name = name_comp1,
987                         .vmux = 3,
988                 },{
989                         .name = name_tv,
990                         .vmux = 1,
991                         .amux = TV,
992                         .tv   = 1,
993                 },{
994                         .name = name_svideo,
995                         .vmux = 8,
996                 }},
997         },
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,
1003                 .inputs         = {{
1004                         .name = name_tv,
1005                         .vmux = 1,
1006                         .amux = LINE2,
1007                         .tv   = 1,
1008                 },{
1009                         .name = name_comp1,
1010                         .vmux = 0,
1011                         .amux = LINE2,
1012                 },{
1013                         .name = name_comp2,
1014                         .vmux = 3,
1015                         .amux = LINE2,
1016                 },{
1017                         .name = name_svideo,
1018                         .vmux = 8,
1019                         .amux = LINE2,
1020                 }},
1021                 .radio = {
1022                          .name = name_radio,
1023                          .amux = LINE2,
1024                  },
1025                 .mute = {
1026                          .name = name_mute,
1027                          .amux = LINE1,
1028                 },
1029         },
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,
1035                 .inputs         = {{
1036                         .name = name_tv,
1037                         .vmux = 7,
1038                         .amux = TV,
1039                         .tv   = 1,
1040                 },{
1041                         .name = name_svideo,
1042                         .vmux = 7,
1043                         .amux = LINE1,
1044                 }},
1045         },
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,
1051                 .inputs         = {{
1052                         .name = name_tv,
1053                         .vmux = 3,
1054                         .amux = TV,
1055                         .tv   = 1,
1056                 },{
1057                         .name   = name_comp1,
1058                         .vmux   = 1,
1059                         .amux   = LINE1,
1060                 },{
1061                         .name = name_svideo,
1062                         .vmux = 8,
1063                         .amux = LINE1,
1064                 }},
1065                 .radio = {
1066                         .name = name_radio,
1067                         .amux = LINE2,
1068                 },
1069         },
1070         [SAA7134_BOARD_CINERGY200] = {
1071                 .name           = "Terratec Cinergy 200 TV",
1072                 .audio_clock    = 0x00200000,
1073                 .tuner_type     = TUNER_PHILIPS_PAL,
1074                 .inputs         = {{
1075                         .name = name_tv,
1076                         .vmux = 1,
1077                         .amux = LINE2,
1078                         .tv   = 1,
1079                 },{
1080                         .name = name_comp1,
1081                         .vmux = 4,
1082                         .amux = LINE1,
1083                 },{
1084                         .name = name_svideo,
1085                         .vmux = 8,
1086                         .amux = LINE1,
1087                 },{
1088                         .name = name_comp2, // CVideo over SVideo Connector
1089                         .vmux = 0,
1090                         .amux = LINE1,
1091                 }},
1092                 .mute = {
1093                          .name = name_mute,
1094                          .amux = LINE2,
1095                 },
1096         },
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,
1103                 .inputs         = {{
1104                         .name = name_svideo,
1105                         .vmux = 8,
1106                         .amux = LINE1,
1107                         .gpio = 0x00080
1108                 },{
1109                         .name = name_comp1,
1110                         .vmux = 3,
1111                         .amux = LINE1,
1112                         .gpio = 0x00080
1113                 },{
1114                         .name = name_tv,
1115                         .vmux = 1,
1116                         .amux = LINE2,
1117                         .tv   = 1,
1118                         .gpio = 0x00080
1119                 }},
1120                 .radio = {
1121                          .name = name_radio,
1122                          .amux = LINE2,
1123                         .gpio = 0x80000
1124                  },
1125                 .mute = {
1126                         .name = name_mute,
1127                         .amux = LINE2,
1128                         .gpio = 0x40000,
1129                 },
1130         },
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,
1137                 .inputs         = {{
1138                         .name = name_tv,
1139                         .vmux = 3,
1140                         .amux = LINE2,
1141                         .tv   = 1,
1142                 },{
1143                         .name = name_comp1,
1144                         .vmux = 1,
1145                         .amux = LINE2,
1146                 },{
1147                         .name = name_svideo,
1148                         .vmux = 8,
1149                         .amux = LINE2,
1150                 }},
1151                 .radio = {
1152                         .name   = name_radio,
1153                         .amux   = LINE2,
1154                 },
1155         },
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,
1161                 .inputs         = {{
1162                         .name = name_svideo,
1163                         .vmux = 8,
1164                         .amux = LINE1,
1165                 },{
1166                         .name = name_comp1,
1167                         .vmux = 3,
1168                         .amux = LINE1,
1169                 },{
1170                         .name = name_tv,
1171                         .vmux = 1,
1172                         .amux = LINE2,
1173                         .tv   = 1,
1174                 }},
1175         },
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,
1181                 .gpiomask       = 0x4000,
1182                 .inputs         = {{
1183                         .name = name_tv_mono,
1184                         .vmux = 1,
1185                         .amux = LINE2,
1186                         .gpio = 0x8000,
1187                         .tv   = 1,
1188                 },{
1189                         .name = name_comp1,
1190                         .vmux = 3,
1191                         .amux = LINE1,
1192                         .gpio = 0x8000,
1193                 },{
1194                         .name = name_svideo,
1195                         .vmux = 6,
1196                         .amux = LINE1,
1197                         .gpio = 0x8000,
1198                 }},
1199                 .radio = {
1200                          .name = name_radio,
1201                          .amux = LINE1,
1202                          .gpio = 0x8000,
1203                  },
1204                 .mute = {
1205                          .name = name_mute,
1206                          .amux = TV,
1207                          .gpio =0x8000,
1208                  }
1209         },
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,
1216                 .inputs         = {{
1217                         .name = name_tv,
1218                         .vmux = 1,
1219                         .amux = TV,
1220                         .tv   = 1,
1221                 },{
1222                         .name = name_comp1,
1223                         .vmux = 0,
1224                         .amux = LINE2,
1225                 },{
1226                         .name = name_comp2,
1227                         .vmux = 3,
1228                         .amux = LINE2,
1229                 },{
1230                         .name = name_svideo,
1231                         .vmux = 8,
1232                         .amux = LINE2,
1233                 }},
1234                 .radio = {
1235                         .name = name_radio,
1236                         .amux = TV,
1237                 },
1238         },
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,
1244                 .inputs         = {{
1245                         .name = name_tv,
1246                         .vmux = 1,
1247                         .amux = LINE2,
1248                         .tv   = 1,
1249                 },{
1250                         .name = name_comp1,
1251                         .vmux = 3,
1252                         .amux = LINE2,
1253                 },{
1254                         .name = name_svideo,
1255                         .vmux = 8,
1256                         .amux = LINE2,
1257                 }},
1258                 .radio = {
1259                         .name = name_radio,
1260                         .amux = LINE1,
1261                 },
1262         },
1263         [SAA7134_BOARD_CINERGY400_CARDBUS] = {
1264                 .name           = "Terratec Cinergy 400 mobile",
1265                 .audio_clock    = 0x187de7,
1266                 .tuner_type     = UNSET /* not supported yet :/ */,
1267                 .inputs         = {{
1268                         .name = name_tv,
1269                         .vmux = 5,
1270                         .tv   = 1,
1271                 },{
1272                         .name = name_comp1,
1273                         .vmux = 3,
1274                         .amux = LINE1,
1275                 },{
1276                         .name = name_svideo,
1277                         .vmux = 4,
1278                         .amux = LINE1,
1279                 }},
1280         },
1281 };
1282 const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards);
1283
1284 /* ------------------------------------------------------------------ */
1285 /* PCI ids + subsystem IDs                                            */
1286
1287 struct pci_device_id saa7134_pci_tbl[] = {
1288         {
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,
1294         },{
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,
1300         },{
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,
1306         },{
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,
1312         },{
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,
1318         },{
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,
1324         },{
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,
1330         },{
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,
1336         },{
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,
1342         },{
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,
1348         },{
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,
1354         },{
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,
1360         },{
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,
1366         },{
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,
1372         },{
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,
1378         },{
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,
1384         },{
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,
1390         },{
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,
1396         },{
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,
1402         },{
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,
1408         },{
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,
1414         },{
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,
1420         },{
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,
1426         },{
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,
1432         },{
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,
1438         },{
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,
1444         },{
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,
1450         },{
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,
1456         },{
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,
1462         },{
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,
1469         },{
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,
1476         },{
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,
1482         },{
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,
1488         },{
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,
1494         },{
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,
1500         },{
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,
1506         },{
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,
1512
1513         },{
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,
1519
1520         },{
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,
1526
1527         },{
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,
1532                 .subdevice    = 0,
1533                 .driver_data  = SAA7134_BOARD_NOAUTO,
1534         },{
1535                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1536                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7130,
1537                 .subvendor    = PCI_VENDOR_ID_PHILIPS,
1538                 .subdevice    = 0,
1539                 .driver_data  = SAA7134_BOARD_NOAUTO,
1540         },{
1541
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,
1548         },{
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,
1554         },{
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,
1560         },{
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,
1566         },{
1567                 /* --- end of list --- */
1568         }
1569 };
1570 MODULE_DEVICE_TABLE(pci, saa7134_pci_tbl);
1571
1572 /* ----------------------------------------------------------- */
1573 /* flyvideo tweaks                                             */
1574
1575 #if 0
1576 static struct {
1577         char  *model;
1578         int   tuner_type;
1579 } fly_list[0x20] = {
1580         /* default catch ... */
1581         [ 0 ... 0x1f ] = {
1582                 .model      = "UNKNOWN",
1583                 .tuner_type = TUNER_ABSENT,
1584         },
1585         /* ... the ones known so far */
1586         [ 0x05 ] = {
1587                 .model      = "PAL-BG",
1588                 .tuner_type = TUNER_LG_PAL_NEW_TAPC,
1589         },
1590         [ 0x10 ] = {
1591                 .model      = "PAL-BG / PAL-DK",
1592                 .tuner_type = TUNER_PHILIPS_PAL,
1593         },
1594         [ 0x15 ] = {
1595                 .model      = "NTSC",
1596                 .tuner_type = TUNER_ABSENT /* FIXME */,
1597         },
1598 };
1599 #endif
1600
1601 static void board_flyvideo(struct saa7134_dev *dev)
1602 {
1603 #if 0
1604         /* non-working attempt to detect the correct tuner type ... */
1605         u32 value;
1606         int index;
1607
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;
1614 #endif
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);
1619 }
1620
1621 /* ----------------------------------------------------------- */
1622
1623 int saa7134_board_init1(struct saa7134_dev *dev)
1624 {
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);
1629
1630         switch (dev->board) {
1631         case SAA7134_BOARD_FLYVIDEO2000:
1632         case SAA7134_BOARD_FLYVIDEO3000:
1633                 dev->has_remote = 1;
1634                 /* fall throuth */
1635         case SAA7134_BOARD_FLYTVPLATINUM:
1636                 board_flyvideo(dev);
1637                 break;
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;
1645                 break;
1646         case SAA7134_BOARD_AVACSSMARTTV:
1647                 dev->has_remote = 1;
1648                 break;
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);
1654                 break;
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);
1659                 break;
1660         }
1661         return 0;
1662 }
1663
1664 /* stuff which needs working i2c */
1665 int saa7134_board_init2(struct saa7134_dev *dev)
1666 {
1667         unsigned char buf;
1668         int board;
1669
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)
1678                         break;
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);
1684                 break;
1685         }
1686         return 0;
1687 }
1688
1689 /* ----------------------------------------------------------- */
1690 /*
1691  * Local variables:
1692  * c-basic-offset: 8
1693  * End:
1694  */