ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.6.tar.bz2
[linux-2.6.git] / drivers / media / video / saa7134 / saa7134-cards.c
1 /*
2  * device driver for philips saa7134 based TV cards
3  * card-specific stuff.
4  *
5  * (c) 2001-04 Gerd Knorr <kraxel@bytesex.org> [SuSE Labs]
6  *
7  *  This program is free software; you can redistribute it and/or modify
8  *  it under the terms of the GNU General Public License as published by
9  *  the Free Software Foundation; either version 2 of the License, or
10  *  (at your option) any later version.
11  *
12  *  This program is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  *  GNU General Public License for more details.
16  *
17  *  You should have received a copy of the GNU General Public License
18  *  along with this program; if not, write to the Free Software
19  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20  */
21
22 #include <linux/init.h>
23 #include <linux/module.h>
24
25 #include "saa7134-reg.h"
26 #include "saa7134.h"
27
28 /* commly used strings */
29 static char name_mute[]    = "mute";
30 static char name_radio[]   = "Radio";
31 static char name_tv[]      = "Television";
32 static char name_tv_mono[] = "TV (mono only)";
33 static char name_comp1[]   = "Composite1";
34 static char name_comp2[]   = "Composite2";
35 static char name_comp3[]   = "Composite3";
36 static char name_comp4[]   = "Composite4";
37 static char name_svideo[]  = "S-Video";
38
39 /* ------------------------------------------------------------------ */
40 /* board config info                                                  */
41
42 struct saa7134_board saa7134_boards[] = {
43         [SAA7134_BOARD_UNKNOWN] = {
44                 .name           = "UNKNOWN/GENERIC",
45                 .audio_clock    = 0x00187de7,
46                 .tuner_type     = TUNER_ABSENT,
47                 .inputs         = {{
48                         .name = "default",
49                         .vmux = 0,
50                         .amux = LINE1,
51                 }},
52         },
53         [SAA7134_BOARD_PROTEUS_PRO] = {
54                 /* /me */
55                 .name           = "Proteus Pro [philips reference design]",
56                 .audio_clock    = 0x00187de7,
57                 .tuner_type     = TUNER_PHILIPS_PAL,
58                 .inputs         = {{
59                         .name = name_comp1,
60                         .vmux = 0,
61                         .amux = LINE1,
62                 },{
63                         .name = name_tv,
64                         .vmux = 1,
65                         .amux = TV,
66                         .tv   = 1,
67                 },{
68                         .name = name_tv_mono,
69                         .vmux = 1,
70                         .amux = LINE2,
71                         .tv   = 1,
72                 }},
73                 .radio = {
74                         .name = name_radio,
75                         .amux = LINE2,
76                 },
77         },
78         [SAA7134_BOARD_FLYVIDEO3000] = {
79                 /* "Marco d'Itri" <md@Linux.IT> */
80                 .name           = "LifeView FlyVIDEO3000",
81                 .audio_clock    = 0x00200000,
82                 .tuner_type     = TUNER_PHILIPS_PAL,
83                 .gpiomask       = 0xe000,
84                 .inputs         = {{
85                         .name = name_tv,
86                         .vmux = 1,
87                         .amux = TV,
88                         .gpio = 0x8000,
89                         .tv   = 1,
90                 },{
91                         .name = name_tv_mono,
92                         .vmux = 1,
93                         .amux = LINE2,
94                         .gpio = 0x0000,
95                         .tv   = 1,
96                 },{
97                         .name = name_comp1,
98                         .vmux = 0,
99                         .amux = LINE2,
100                         .gpio = 0x4000,
101                 },{
102                         .name = name_comp2,
103                         .vmux = 3,
104                         .amux = LINE2,
105                         .gpio = 0x4000,
106                 },{
107                         .name = name_svideo,
108                         .vmux = 8,
109                         .amux = LINE2,
110                         .gpio = 0x4000,
111                 }},
112                 .radio = {
113                         .name = name_radio,
114                         .amux = LINE2,
115                         .gpio = 0x2000,
116                 },
117         },
118         [SAA7134_BOARD_FLYVIDEO2000] = {
119                 /* "TC Wan" <tcwan@cs.usm.my> */
120                 .name           = "LifeView FlyVIDEO2000",
121                 .audio_clock    = 0x00200000,
122                 .tuner_type     = TUNER_LG_PAL_NEW_TAPC,
123                 .gpiomask       = 0xe000,
124                 .inputs         = {{
125                         .name = name_tv,
126                         .vmux = 1,
127                         .amux = LINE2,
128                         .gpio = 0x0000,
129                         .tv   = 1,
130                 },{
131                         .name = name_comp1,
132                         .vmux = 0,
133                         .amux = LINE2,
134                         .gpio = 0x4000,
135                 },{
136                         .name = name_comp2,
137                         .vmux = 3,
138                         .amux = LINE2,
139                         .gpio = 0x4000,
140                 },{
141                         .name = name_svideo,
142                         .vmux = 8,
143                         .amux = LINE2,
144                         .gpio = 0x4000,
145                 }},
146                 .radio = {
147                         .name = name_radio,
148                         .amux = LINE2,
149                         .gpio = 0x2000,
150                 },
151                 .mute = {
152                         .name = name_mute,
153                         .amux = LINE2,
154                         .gpio = 0x8000,
155                 },
156         },
157         [SAA7134_BOARD_EMPRESS] = {
158                 /* "Gert Vervoort" <gert.vervoort@philips.com> */
159                 .name           = "EMPRESS",
160                 .audio_clock    = 0x00187de7,
161                 .tuner_type     = TUNER_PHILIPS_PAL,
162                 .inputs         = {{
163                         .name = name_comp1,
164                         .vmux = 0,
165                         .amux = LINE1,
166                 },{
167                         .name = name_svideo,
168                         .vmux = 8,
169                         .amux = LINE1,
170                 },{
171                         .name = name_tv,
172                         .vmux = 1,
173                         .amux = LINE2,
174                         .tv   = 1,
175                 }},
176                 .radio = {
177                         .name = name_radio,
178                         .amux = LINE2,
179                 },
180                 .i2s_rate  = 48000,
181                 .has_ts    = 1,
182                 .video_out = CCIR656,
183         },
184         [SAA7134_BOARD_MONSTERTV] = {
185                /* "K.Ohta" <alpha292@bremen.or.jp> */
186                .name           = "SKNet Monster TV",
187                .audio_clock    = 0x00187de7,
188                .tuner_type     = TUNER_PHILIPS_NTSC_M,
189                .inputs         = {{
190                        .name = name_tv,
191                        .vmux = 1,
192                        .amux = TV,
193                        .tv   = 1,
194                },{
195                        .name = name_comp1,
196                        .vmux = 0,
197                        .amux = LINE1,
198                },{
199                        .name = name_svideo,
200                        .vmux = 8,
201                        .amux = LINE1,
202                }},
203                .radio = {
204                        .name = name_radio,
205                        .amux = LINE2,
206                },
207         },
208         [SAA7134_BOARD_MD9717] = {
209                 .name           = "Tevion MD 9717",
210                 .audio_clock    = 0x00200000,
211                 .tuner_type     = TUNER_PHILIPS_PAL,
212                 .inputs         = {{
213                         .name = name_tv,
214                         .vmux = 1,
215                         .amux = TV,
216                         .tv   = 1,
217                 },{
218                         /* workaround for problems with normal TV sound */
219                         .name = name_tv_mono,
220                         .vmux = 1,
221                         .amux = LINE2,
222                         .tv   = 1,
223                 },{
224                         .name = name_comp1,
225                         .vmux = 2,
226                         .amux = LINE1,
227                 },{
228                         .name = name_comp2,
229                         .vmux = 3,
230                         .amux = LINE1,
231                 },{
232                         .name = name_svideo,
233                         .vmux = 8,
234                         .amux = LINE1,
235                 }},
236                 .radio = {
237                         .name = name_radio,
238                         .amux = LINE2,
239                 },
240         },
241         [SAA7134_BOARD_TVSTATION_RDS] = {
242                 /* Typhoon TV Tuner RDS: Art.Nr. 50694 */
243                 .name           = "KNC One TV-Station RDS / Typhoon TV Tuner RDS",
244                 .audio_clock    = 0x00200000,
245                 .tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
246                 .need_tda9887   = 1,
247                 .inputs         = {{
248                         .name = name_tv,
249                         .vmux = 1,
250                         .amux = TV,
251                         .tv   = 1,
252                 },{
253                         .name = name_tv_mono,
254                         .vmux = 1,
255                         .amux   = LINE2,
256                         .tv   = 1,
257                 },{
258
259                         .name = name_svideo,
260                         .vmux = 8,
261                         .amux = LINE1,
262                 },{
263                         .name = name_comp1,
264                         .vmux = 3,
265                         .amux = LINE1,
266                 },{
267
268                         .name = "CVid over SVid",
269                         .vmux = 0,
270                         .amux = LINE1,
271                 }},
272                 .radio = {
273                         .name = name_radio,
274                         .amux = LINE2,
275                 },
276         },
277         [SAA7134_BOARD_TVSTATION_DVR] = {
278                 .name           = "KNC One TV-Station DVR",
279                 .audio_clock    = 0x00200000,
280                 .tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
281                 .need_tda9887   = 1,
282                 .gpiomask       = 0x820000,
283                 .inputs         = {{
284                         .name = name_tv,
285                         .vmux = 1,
286                         .amux = LINE2,
287                         .tv   = 1,
288                         .gpio = 0x20000,
289                 },{
290                         .name = name_svideo,
291                         .vmux = 8,
292                         .amux = LINE1,
293                         .gpio = 0x20000,
294                 },{
295                         .name = name_comp1,
296                         .vmux = 3,
297                         .amux = LINE1,
298                         .gpio = 0x20000,
299                 }},
300                 .radio          = {
301                         .name = name_radio,
302                         .amux = LINE2,
303                         .gpio = 0x20000,
304                 },
305                 .i2s_rate       = 48000,
306                 .has_ts         = 1,
307                 .video_out      = CCIR656,
308         },
309         [SAA7134_BOARD_CINERGY400] = {
310                 .name           = "Terratec Cinergy 400 TV",
311                 .audio_clock    = 0x00200000,
312                 .tuner_type     = TUNER_PHILIPS_PAL,
313                 .inputs         = {{
314                         .name = name_tv,
315                         .vmux = 1,
316                         .amux = TV,
317                         .tv   = 1,
318                 },{
319                         .name = name_comp1,
320                         .vmux = 4,
321                         .amux = LINE1,
322                 },{
323                         .name = name_svideo,
324                         .vmux = 8,
325                         .amux = LINE1,
326                 },{
327                         .name = name_comp2, // CVideo over SVideo Connector
328                         .vmux = 0,
329                         .amux = LINE1,
330                 }}
331         },
332         [SAA7134_BOARD_MD5044] = {
333                 .name           = "Medion 5044",
334                 .audio_clock    = 0x00187de7, // was: 0x00200000,
335                 .tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
336                 .need_tda9887   = 1,
337                 .inputs         = {{
338                         .name = name_tv,
339                         .vmux = 1,
340                         .amux = TV,
341                         .tv   = 1,
342                 },{
343                         /* workaround for problems with normal TV sound */
344                         .name = name_tv_mono,
345                         .vmux = 1,
346                         .amux = LINE2,
347                         .tv   = 1,
348                 },{
349                         .name = name_comp1,
350                         .vmux = 0,
351                         .amux = LINE2,
352                 },{
353                         .name = name_comp2,
354                         .vmux = 3,
355                         .amux = LINE2,
356                 },{
357                         .name = name_svideo,
358                         .vmux = 8,
359                         .amux = LINE2,
360                 }},
361                 .radio = {
362                         .name = name_radio,
363                         .amux = LINE2,
364                 },
365         },
366         [SAA7134_BOARD_KWORLD] = {
367                 .name           = "Kworld/KuroutoShikou SAA7130-TVPCI",
368                 .audio_clock    = 0x00187de7,
369                 .tuner_type     = TUNER_PHILIPS_NTSC_M,
370                 .inputs         = {{
371                         .name = name_svideo,
372                         .vmux = 8,
373                         .amux = LINE1,
374                 },{
375                         .name = name_comp1,
376                         .vmux = 3,
377                         .amux = LINE1,
378                 },{
379                         .name = name_tv,
380                         .vmux = 1,
381                         .amux = LINE2,
382                         .tv   = 1,
383                 }},
384         },
385         [SAA7134_BOARD_CINERGY600] = {
386                 .name           = "Terratec Cinergy 600 TV",
387                 .audio_clock    = 0x00200000,
388                 .tuner_type     = TUNER_PHILIPS_PAL,
389                 .inputs         = {{
390                         .name = name_tv,
391                         .vmux = 1,
392                         .amux = TV,
393                         .tv   = 1,
394                 },{
395                         .name = name_comp1,
396                         .vmux = 4,
397                         .amux = LINE1,
398                 },{
399                         .name = name_svideo,
400                         .vmux = 8,
401                         .amux = LINE1,
402                 },{
403                         .name = name_comp2, // CVideo over SVideo Connector
404                         .vmux = 0,
405                         .amux = LINE1,
406                 }},
407                 .radio = {
408                         .name = name_radio,
409                         .amux = LINE2,
410                },
411         },
412         [SAA7134_BOARD_MD7134] = {
413                 .name           = "Medion 7134",
414                 //.audio_clock    = 0x00200000,
415                 .audio_clock    = 0x00187de7,
416                 .tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
417                 .need_tda9887   = 1,
418                 .inputs = {{
419                         .name   = name_tv,
420                         .vmux   = 1,
421                         .amux   = TV,
422                         .tv     = 1,
423 #if 0
424                 },{
425                         .name   = name_comp1,
426                         .vmux   = 0,
427                         .amux   = LINE2,
428                 },{
429                         .name   = name_comp2,
430                         .vmux   = 3,
431                         .amux   = LINE2,
432                 },{
433                         .name   = name_svideo,
434                         .vmux   = 8,
435                         .amux   = LINE2,
436 #endif
437                 }},
438                 .radio = {
439                         .name   = name_radio,
440                         .amux   = LINE2,
441                 },
442         },
443         [SAA7134_BOARD_TYPHOON_90031] = {
444                 /* aka Typhoon "TV+Radio", Art.Nr 90031 */
445                 /* Tom Zoerner <tomzo at users sourceforge net> */
446                 .name           = "Typhoon TV+Radio 90031",
447                 .audio_clock    = 0x00200000,
448                 .tuner_type     = TUNER_PHILIPS_PAL,
449                 .need_tda9887   = 1,
450                 .inputs         = {{
451                         .name   = name_tv,
452                         .vmux   = 1,
453                         .amux   = TV,
454                         .tv     = 1,
455                 },{
456                         .name   = name_comp1,
457                         .vmux   = 3,
458                         .amux   = LINE1,
459                 },{
460                         .name   = name_svideo,
461                         .vmux   = 8,
462                         .amux   = LINE1,
463                 }},
464                 .radio = {
465                         .name   = name_radio,
466                         .amux   = LINE2,
467                 },
468         },
469         [SAA7134_BOARD_ELSA] = {
470                 .name           = "ELSA EX-VISION 300TV",
471                 .audio_clock    = 0x00187de7,
472                 .tuner_type     = TUNER_HITACHI_NTSC,
473                 .inputs         = {{
474                         .name = name_svideo,
475                         .vmux = 8,
476                         .amux = LINE1,
477                 },{
478                         .name   = name_comp1,
479                         .vmux   = 0,
480                         .amux   = LINE1,
481                 },{
482                         .name = name_tv,
483                         .vmux = 4,
484                         .amux = LINE2,
485                         .tv   = 1,
486                 }},
487         },
488         [SAA7134_BOARD_ELSA_500TV] = {
489                 .name           = "ELSA EX-VISION 500TV",
490                 .audio_clock    = 0x00187de7,
491                 .tuner_type     = TUNER_HITACHI_NTSC,
492                 .inputs         = {{
493                         .name = name_svideo,
494                         .vmux = 7,
495                         .amux = LINE1,
496                 },{
497                         .name = name_tv,
498                         .vmux = 8,
499                         .amux = TV,
500                         .tv   = 1,
501                 },{
502                         .name = name_tv_mono,
503                         .vmux = 8,
504                         .amux = LINE2,
505                         .tv   = 1,
506                 }},
507         },
508         [SAA7134_BOARD_ASUSTeK_TVFM7134] = {
509                 .name           = "ASUS TV-FM 7134",
510                 .audio_clock    = 0x00187de7,
511                 .tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
512                 .need_tda9887   = 1,
513                 .inputs         = {{
514                         .name = name_tv,
515                         .vmux = 1,
516                         .amux = TV,
517                         .tv   = 1,
518 #if 0 /* untested */
519                 },{
520                         .name = name_comp1,
521                         .vmux = 4,
522                         .amux = LINE2,
523                 },{
524                         .name = name_comp2,
525                         .vmux = 2,
526                         .amux = LINE2,
527                 },{
528                         .name = name_svideo,
529                         .vmux = 6,
530                         .amux = LINE2,
531                 },{
532                         .name = "S-Video2",
533                         .vmux = 7,
534                         .amux = LINE2,
535 #endif
536                 }},
537                 .radio = {
538                         .name = name_radio,
539                         .amux = LINE1,
540                 },
541         },
542         [SAA7134_BOARD_VA1000POWER] = {
543                 .name           = "AOPEN VA1000 POWER",
544                 .audio_clock    = 0x00187de7,
545                 .tuner_type     = TUNER_PHILIPS_NTSC,
546                 .inputs         = {{
547                         .name = name_svideo,
548                         .vmux = 8,
549                         .amux = LINE1,
550                 },{
551                         .name = name_comp1,
552                         .vmux = 3,
553                         .amux = LINE1,
554                 },{
555                         .name = name_tv,
556                         .vmux = 1,
557                         .amux = LINE2,
558                         .tv   = 1,
559                 }},
560         },
561         [SAA7134_BOARD_10MOONSTVMASTER] = {
562                 /* "lilicheng" <llc@linuxfans.org> */
563                 .name           = "10MOONS PCI TV CAPTURE CARD",
564                 .audio_clock    = 0x00200000,
565                 .tuner_type     = TUNER_LG_PAL_NEW_TAPC,
566                 .gpiomask       = 0xe000,
567                 .inputs         = {{
568                         .name = name_tv,
569                         .vmux = 1,
570                         .amux = LINE2,
571                         .gpio = 0x0000,
572                         .tv   = 1,
573                 },{
574                         .name = name_comp1,
575                         .vmux = 0,
576                         .amux = LINE2,
577                         .gpio = 0x4000,
578                 },{
579                         .name = name_comp2,
580                         .vmux = 3,
581                         .amux = LINE2,
582                         .gpio = 0x4000,
583                 },{
584                         .name = name_svideo,
585                         .vmux = 8,
586                         .amux = LINE2,
587                         .gpio = 0x4000,
588                 }},
589                 .radio = {
590                         .name = name_radio,
591                         .amux = LINE2,
592                         .gpio = 0x2000,
593                 },
594                 .mute = {
595                         .name = name_mute,
596                         .amux = LINE2,
597                         .gpio = 0x8000,
598                 },
599         },
600         [SAA7134_BOARD_BMK_MPEX_NOTUNER] = {
601                 /* "Andrew de Quincey" <adq@lidskialf.net> */
602                 .name           = "BMK MPEX No Tuner",
603                 .audio_clock    = 0x200000,
604                 .tuner_type     = TUNER_ABSENT,
605                 .inputs         = {{
606                         .name = name_comp1,
607                         .vmux = 4,
608                         .amux = LINE1,
609                 },{
610                         .name = name_comp2,
611                         .vmux = 3,
612                         .amux = LINE1,
613                 },{
614                         .name = name_comp3,
615                         .vmux = 0,
616                         .amux = LINE1,
617                 },{
618                         .name = name_comp4,
619                         .vmux = 1,
620                         .amux = LINE1,
621                 },{
622                         .name = name_svideo,
623                         .vmux = 8,
624                         .amux = LINE1,
625                 }},
626                 .i2s_rate  = 48000,
627                 .has_ts    = 1,
628                 .video_out = CCIR656,
629         },
630         [SAA7134_BOARD_VIDEOMATE_TV] = {
631                 .name           = "Compro VideoMate TV",
632                 .audio_clock    = 0x00187de7,
633                 .tuner_type     = TUNER_PHILIPS_NTSC_M,
634                 .inputs         = {{
635                         .name = name_svideo,
636                         .vmux = 8,
637                         .amux = LINE1,
638                 },{
639                         .name = name_comp1,
640                         .vmux = 3,
641                         .amux = LINE1,
642                 },{
643                         .name = name_tv,
644                         .vmux = 1,
645                         .amux = LINE2,
646                         .tv   = 1,
647                 }},
648         },
649         [SAA7134_BOARD_CRONOS_PLUS] = {
650                 /* gpio pins:
651                    0  .. 3   BASE_ID
652                    4  .. 7   PROTECT_ID
653                    8  .. 11  USER_OUT
654                    12 .. 13  USER_IN
655                    14 .. 15  VIDIN_SEL */
656                 .name           = "Matrox CronosPlus",
657                 .tuner_type     = TUNER_ABSENT,
658                 .gpiomask       = 0xcf00,
659                 .inputs         = {{
660                         .name = name_comp1,
661                         .vmux = 0,
662                         .gpio = 2 << 14,
663                 },{
664                         .name = name_comp2,
665                         .vmux = 0,
666                         .gpio = 1 << 14,
667                 },{
668                         .name = name_comp3,
669                         .vmux = 0,
670                         .gpio = 0 << 14,
671                 },{
672                         .name = name_comp4,
673                         .vmux = 0,
674                         .gpio = 3 << 14,
675                 },{
676                         .name = name_svideo,
677                         .vmux = 8,
678                         .gpio = 2 << 14,
679                 }},
680         },
681         [SAA7134_BOARD_MD2819] = {
682                 .name           = "Medion 2819/ AverMedia M156",
683                 .audio_clock    = 0x00187de7,
684                 .tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
685                 .need_tda9887   = 1,
686                 .inputs         = {{
687                         .name = name_tv,
688                         .vmux = 1,
689                         .amux = TV,
690                         .tv   = 1,
691                 },{
692                         .name = name_comp1,
693                         .vmux = 0,
694                         .amux = LINE2,
695                 },{
696                         .name = name_comp2,
697                         .vmux = 3,
698                         .amux = LINE2,
699                 },{
700                         .name = name_svideo,
701                         .vmux = 8,
702                         .amux = LINE2,
703                 }},
704                 .radio = {
705                         .name = name_radio,
706                         .amux = LINE2,
707                 },
708         },
709         [SAA7134_BOARD_BMK_MPEX_TUNER] = {
710                 /* "Greg Wickham <greg.wickham@grangenet.net> */
711                 .name           = "BMK MPEX Tuner",
712                 .audio_clock    = 0x200000,
713                 .tuner_type     = TUNER_PHILIPS_PAL,
714                 .inputs         = {{
715                         .name = name_comp1,
716                         .vmux = 1,
717                         .amux = LINE1,
718                 },{
719                         .name = name_svideo,
720                         .vmux = 8,
721                         .amux = LINE1,
722                 },{
723                         .name = name_tv,
724                         .vmux = 3,
725                         .amux = LINE2,
726                         .tv   = 1,
727                 }},
728                 .i2s_rate  = 48000,
729                 .has_ts    = 1,
730                 .video_out = CCIR656,
731         },
732         [SAA7134_BOARD_ASUSTEK_TVFM7133] = {
733                 .name           = "ASUS TV-FM 7133",
734                 .audio_clock    = 0x00187de7,
735                 // probably wrong, the 7133 one is the NTSC version ...
736                 // .tuner_type     = TUNER_PHILIPS_FM1236_MK3
737                 .tuner_type     = TUNER_LG_NTSC_NEW_TAPC,
738                 .need_tda9887   = 1,
739                 .inputs         = {{
740                         .name = name_tv,
741                         .vmux = 1,
742                         .amux = TV,
743                         .tv   = 1,
744                 },{
745                         .name = name_comp1,
746                         .vmux = 4,
747                         .amux = LINE2,
748                 },{
749                         .name = name_svideo,
750                         .vmux = 6,
751                         .amux = LINE2,
752                 }},
753                 .radio = {
754                         .name = name_radio,
755                         .amux = LINE1,
756                 },
757         },
758         [SAA7134_BOARD_PINNACLE_PCTV_STEREO] = {
759                 .name           = "Pinnacle PCTV Stereo (saa7134)",
760                 .audio_clock    = 0x00187de7,
761                 .tuner_type     = TUNER_MT2032,
762                 .need_tda9887   = 1,
763                 .inputs         = {{
764                         .name = name_tv,
765                         .vmux = 3,
766                         .amux = TV,
767                         .tv   = 1,
768                 },{
769                         .name = name_comp1,
770                         .vmux = 0,
771                         .amux = LINE2,
772                 },{
773                         .name = name_comp2,
774                         .vmux = 1,
775                         .amux = LINE2,
776                 },{
777                         .name = name_svideo,
778                         .vmux = 8,
779                         .amux = LINE2,
780                 }},
781         },
782         [SAA7134_BOARD_MANLI_MTV002] = {
783                 /* Ognjen Nastic <ognjen@logosoft.ba> */
784                 .name           = "Manli MuchTV M-TV002",
785                 .audio_clock    = 0x00200000,
786                 .tuner_type     = TUNER_PHILIPS_PAL,
787                 .inputs         = {{
788                         .name = name_svideo,
789                         .vmux = 8,
790                         .amux = LINE1,
791                 },{
792                         .name   = name_comp1,
793                         .vmux   = 1,
794                         .amux   = LINE1,
795                 },{
796                         .name = name_tv,
797                         .vmux = 3,
798                         .amux = LINE2,
799                         .tv   = 1,
800                 }},
801                 .radio = {
802                         .name = name_radio,
803                         .amux = LINE2,
804                 },
805         },
806         [SAA7134_BOARD_MANLI_MTV001] = {
807                 /* Ognjen Nastic <ognjen@logosoft.ba> UNTESTED */
808                 .name           = "Manli MuchTV M-TV001",
809                 .audio_clock    = 0x00200000,
810                 .tuner_type     = TUNER_PHILIPS_PAL,
811                 .inputs         = {{
812                         .name = name_svideo,
813                         .vmux = 8,
814                         .amux = LINE1,
815                 },{                     
816                         .name = name_comp1,
817                         .vmux = 1,
818                         .amux = LINE1,
819                 },{
820                         .name = name_tv,
821                         .vmux = 3,
822                         .amux = LINE2,
823                         .tv   = 1,
824                 }},
825         },
826         [SAA7134_BOARD_TG3000TV] = {
827                 /* TransGear 3000TV */
828                 .name           = "Nagase Sangyo TransGear 3000TV",
829                 .audio_clock    = 0x00187de7,
830                 .tuner_type     = TUNER_PHILIPS_NTSC_M,
831                 .inputs         = {{
832                         .name = name_tv,
833                         .vmux = 1,
834                         .amux = LINE2,
835                         .tv   = 1,
836                 },{
837                         .name = name_comp1,
838                         .vmux = 3,
839                         .amux = LINE2,
840                 },{
841                         .name = name_svideo,
842                         .vmux = 8,
843                         .amux = LINE2,
844                 }},
845         },
846         [SAA7134_BOARD_ECS_TVP3XP] = {
847                 .name           = "Elitegroup ECS TVP3XP FM1216 Tuner Card(PAL-BG,FM) ",
848                 .audio_clock    = 0x187de7,  // xtal 32.1 MHz
849                 .tuner_type     = TUNER_PHILIPS_PAL,
850                 .inputs         = {{
851                         .name   = name_tv,
852                         .vmux   = 1,
853                         .amux   = TV,
854                         .tv     = 1,
855                 },{
856                         .name   = name_tv_mono,
857                         .vmux   = 1,
858                         .amux   = LINE2,
859                         .tv     = 1,
860                 },{
861                         .name   = name_comp1,
862                         .vmux   = 3,
863                         .amux   = LINE1,
864                 },{
865                         .name   = name_svideo,
866                         .vmux   = 8,
867                         .amux   = LINE1,
868                 },{
869                         .name   = "CVid over SVid",
870                         .vmux   = 0,
871                         .amux   = LINE1,
872                 }},
873                 .radio = {
874                         .name   = name_radio,
875                         .amux   = LINE2,
876                 },
877         },
878         [SAA7134_BOARD_ECS_TVP3XP_4CB5] = {
879                 .name           = "Elitegroup ECS TVP3XP FM1236 Tuner Card (NTSC,FM)",
880                 .audio_clock    = 0x187de7,
881                 .tuner_type     = TUNER_PHILIPS_NTSC,
882                 .inputs         = {{
883                         .name   = name_tv,
884                         .vmux   = 1,
885                         .amux   = TV,
886                         .tv     = 1,
887                 },{
888                         .name   = name_tv_mono,
889                         .vmux   = 1,
890                         .amux   = LINE2,
891                         .tv     = 1,
892                 },{
893                         .name   = name_comp1,
894                         .vmux   = 3,
895                         .amux   = LINE1,
896                 },{
897                         .name   = name_svideo,
898                         .vmux   = 8,
899                         .amux   = LINE1,
900                 },{
901                         .name   = "CVid over SVid",
902                         .vmux   = 0,
903                         .amux   = LINE1,
904                 }},
905                 .radio = {
906                         .name   = name_radio,
907                         .amux   = LINE2,
908                 },
909         },
910         [SAA7134_BOARD_AVACSSMARTTV] = {
911                 /* Roman Pszonczenko <romka@kolos.math.uni.lodz.pl> */
912                 .name           = "AVACS SmartTV",
913                 .audio_clock    = 0x00187de7,
914                 .tuner_type     = TUNER_PHILIPS_PAL,
915                 .inputs         = {{
916                         .name = name_tv,
917                         .vmux = 1,
918                         .amux = TV,
919                         .tv   = 1,
920                 },{
921                         .name = name_tv_mono,
922                         .vmux = 1,
923                         .amux = LINE2,
924                         .tv   = 1,
925                 },{
926                         .name = name_comp1,
927                         .vmux = 0,
928                         .amux = LINE2,
929                 },{
930                         .name = name_comp2,
931                         .vmux = 3,
932                         .amux = LINE2,
933                 },{
934                         .name = name_svideo,
935                         .vmux = 8,
936                         .amux = LINE2,
937                 }},
938                 .radio = {
939                         .name = name_radio,
940                         .amux = LINE2,
941                         .gpio = 0x200000,
942                 },
943         },
944         [SAA7134_BOARD_AVERMEDIA_DVD_EZMAKER] = {
945                 /* Michael Smith <msmith@cbnco.com> */
946                 .name           = "AVerMedia DVD EZMaker",
947                 .audio_clock    = 0x00187de7,
948                 .tuner_type     = TUNER_ABSENT,
949                 .inputs         = {{
950                         .name = name_comp1,
951                         .vmux = 3,
952                 }},
953         },
954 };
955 const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards);
956
957 /* ------------------------------------------------------------------ */
958 /* PCI ids + subsystem IDs                                            */
959
960 struct pci_device_id saa7134_pci_tbl[] = {
961         {
962                 .vendor       = PCI_VENDOR_ID_PHILIPS,
963                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
964                 .subvendor    = PCI_VENDOR_ID_PHILIPS,
965                 .subdevice    = 0x2001,
966                 .driver_data  = SAA7134_BOARD_PROTEUS_PRO,
967         },{
968                 .vendor       = PCI_VENDOR_ID_PHILIPS,
969                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7133,
970                 .subvendor    = PCI_VENDOR_ID_PHILIPS,
971                 .subdevice    = 0x2001,
972                 .driver_data  = SAA7134_BOARD_PROTEUS_PRO,
973         },{
974                 .vendor       = PCI_VENDOR_ID_PHILIPS,
975                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
976                 .subvendor    = PCI_VENDOR_ID_PHILIPS,
977                 .subdevice    = 0x6752,
978                 .driver_data  = SAA7134_BOARD_EMPRESS,
979         },{
980                 .vendor       = PCI_VENDOR_ID_PHILIPS,
981                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
982                 .subvendor    = 0x1131,
983                 .subdevice    = 0x4e85,
984                 .driver_data  = SAA7134_BOARD_MONSTERTV,
985         },{
986                 .vendor       = PCI_VENDOR_ID_PHILIPS,
987                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
988                 .subvendor    = 0x153B,
989                 .subdevice    = 0x1142,
990                 .driver_data  = SAA7134_BOARD_CINERGY400,
991         },{
992                 .vendor       = PCI_VENDOR_ID_PHILIPS,
993                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
994                 .subvendor    = 0x153B,
995                 .subdevice    = 0x1143,
996                 .driver_data  = SAA7134_BOARD_CINERGY600,
997         },{
998                 .vendor       = PCI_VENDOR_ID_PHILIPS,
999                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
1000                 .subvendor    = 0x5168,
1001                 .subdevice    = 0x0138,
1002                 .driver_data  = SAA7134_BOARD_FLYVIDEO3000,
1003         },{
1004                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1005                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
1006                 .subvendor    = 0x4e42,                         //"Typhoon PCI Capture TV Card" Art.No. 50673
1007                 .subdevice    = 0x0138,
1008                 .driver_data  = SAA7134_BOARD_FLYVIDEO3000,
1009         },{
1010                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1011                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7130,
1012                 .subvendor    = 0x5168,
1013                 .subdevice    = 0x0138,
1014                 .driver_data  = SAA7134_BOARD_FLYVIDEO2000,
1015         },{
1016                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1017                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
1018                 .subvendor    = 0x16be,
1019                 .subdevice    = 0x0003,
1020                 .driver_data  = SAA7134_BOARD_MD7134,
1021         },{
1022                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1023                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7130,
1024                 .subvendor    = 0x1048,
1025                 .subdevice    = 0x226b,
1026                 .driver_data  = SAA7134_BOARD_ELSA,
1027         },{
1028                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1029                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7130,
1030                 .subvendor    = 0x1048,
1031                 .subdevice    = 0x226b,
1032                 .driver_data  = SAA7134_BOARD_ELSA_500TV,
1033         },{
1034                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1035                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
1036                 .subvendor    = PCI_VENDOR_ID_ASUSTEK,
1037                 .subdevice    = 0x4842,
1038                 .driver_data  = SAA7134_BOARD_ASUSTeK_TVFM7134,
1039         },{
1040                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1041                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
1042                 .subvendor    = PCI_VENDOR_ID_ASUSTEK,
1043                 .subdevice    = 0x4830,
1044                 .driver_data  = SAA7134_BOARD_ASUSTeK_TVFM7134,
1045         },{
1046                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1047                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7133,
1048                 .subvendor    = PCI_VENDOR_ID_ASUSTEK,
1049                 .subdevice    = 0x4843,
1050                 .driver_data  = SAA7134_BOARD_ASUSTEK_TVFM7133,
1051         },{
1052                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1053                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
1054                 .subvendor    = PCI_VENDOR_ID_ASUSTEK,
1055                 .subdevice    = 0x4840,
1056                 .driver_data  = SAA7134_BOARD_ASUSTeK_TVFM7134,
1057         },{
1058                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1059                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
1060                 .subvendor    = PCI_VENDOR_ID_PHILIPS,
1061                 .subdevice    = 0xfe01,
1062                 .driver_data  = SAA7134_BOARD_TVSTATION_RDS,
1063         },{
1064                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1065                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
1066                 .subvendor    = 0x1894,
1067                 .subdevice    = 0xfe01,
1068                 .driver_data  = SAA7134_BOARD_TVSTATION_RDS,
1069         },{
1070                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1071                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
1072                 .subvendor    = 0x1894,
1073                 .subdevice    = 0xa006,
1074                 .driver_data  = SAA7134_BOARD_TVSTATION_DVR,
1075         },{
1076                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1077                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
1078                 .subvendor    = 0x1131,
1079                 .subdevice    = 0x7133,
1080                 .driver_data  = SAA7134_BOARD_VA1000POWER,
1081         },{
1082                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1083                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7130,
1084                 .subvendor    = PCI_VENDOR_ID_PHILIPS,
1085                 .subdevice    = 0x2001,
1086                 .driver_data  = SAA7134_BOARD_10MOONSTVMASTER,
1087         },{
1088                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1089                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7133,
1090                 .subvendor    = 0x185b,
1091                 .subdevice    = 0xc100,
1092                 .driver_data  = SAA7134_BOARD_VIDEOMATE_TV,
1093         },{
1094                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1095                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7130,
1096                 .subvendor    = PCI_VENDOR_ID_MATROX,
1097                 .subdevice    = 0x48d0,
1098                 .driver_data  = SAA7134_BOARD_CRONOS_PLUS,
1099         },{
1100                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1101                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
1102                 .subvendor    = 0x1461, /* Avermedia Technologies Inc */
1103                 .subdevice    = 0xa70b,
1104                 .driver_data  = SAA7134_BOARD_MD2819,
1105         },{
1106                 /* AverMedia Studio 305, using AverMedia M156 entry for now */
1107                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1108                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
1109                 .subvendor    = 0x1461, /* Avermedia Technologies Inc */
1110                 .subdevice    = 0x2115,
1111                 .driver_data  = SAA7134_BOARD_MD2819,
1112         },{
1113                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1114                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7130,
1115                 .subvendor    = 0x1461, /* Avermedia Technologies Inc */
1116                 .subdevice    = 0x10ff,
1117                 .driver_data  = SAA7134_BOARD_AVERMEDIA_DVD_EZMAKER,
1118         },{
1119                 /* TransGear 3000TV */
1120                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1121                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7130,
1122                 .subvendor    = 0x1461, /* Avermedia Technologies Inc */
1123                 .subdevice    = 0x050c,
1124                 .driver_data  = SAA7134_BOARD_TG3000TV,
1125         },{
1126                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1127                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
1128                 .subvendor    = 0x11bd,
1129                 .subdevice    = 0x002b,
1130                 .driver_data  = SAA7134_BOARD_PINNACLE_PCTV_STEREO,
1131         },{
1132                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1133                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
1134                 .subvendor    = 0x1019,
1135                 .subdevice    = 0x4cb4,
1136                 .driver_data  = SAA7134_BOARD_ECS_TVP3XP,
1137         },{
1138                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1139                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7133,
1140                 .subvendor    = 0x1019,
1141                 .subdevice    = 0x4cb5,
1142                 .driver_data  = SAA7134_BOARD_ECS_TVP3XP_4CB5,
1143         },{
1144                 
1145                 /* --- boards without eeprom + subsystem ID --- */
1146                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1147                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
1148                 .subvendor    = PCI_VENDOR_ID_PHILIPS,
1149                 .subdevice    = 0,
1150                 .driver_data  = SAA7134_BOARD_NOAUTO,
1151         },{
1152                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1153                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7130,
1154                 .subvendor    = PCI_VENDOR_ID_PHILIPS,
1155                 .subdevice    = 0,
1156                 .driver_data  = SAA7134_BOARD_NOAUTO,
1157         },{
1158                 
1159                 /* --- default catch --- */
1160                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1161                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7130,
1162                 .subvendor    = PCI_ANY_ID,
1163                 .subdevice    = PCI_ANY_ID,
1164                 .driver_data  = SAA7134_BOARD_UNKNOWN,
1165         },{
1166                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1167                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7133,
1168                 .subvendor    = PCI_ANY_ID,
1169                 .subdevice    = PCI_ANY_ID,
1170                 .driver_data  = SAA7134_BOARD_UNKNOWN,
1171         },{
1172                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1173                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
1174                 .subvendor    = PCI_ANY_ID,
1175                 .subdevice    = PCI_ANY_ID,
1176                 .driver_data  = SAA7134_BOARD_UNKNOWN,
1177         },{
1178                 .vendor       = PCI_VENDOR_ID_PHILIPS,
1179                 .device       = PCI_DEVICE_ID_PHILIPS_SAA7135,
1180                 .subvendor    = PCI_ANY_ID,
1181                 .subdevice    = PCI_ANY_ID,
1182                 .driver_data  = SAA7134_BOARD_UNKNOWN,
1183         },{
1184                 /* --- end of list --- */
1185         }
1186 };
1187 MODULE_DEVICE_TABLE(pci, saa7134_pci_tbl);
1188
1189 /* ----------------------------------------------------------- */
1190 /* flyvideo tweaks                                             */
1191
1192 #if 0
1193 static struct {
1194         char  *model;
1195         int   tuner_type;
1196 } fly_list[0x20] = {
1197         /* default catch ... */
1198         [ 0 ... 0x1f ] = {
1199                 .model      = "UNKNOWN",
1200                 .tuner_type = TUNER_ABSENT,
1201         },
1202         /* ... the ones known so far */
1203         [ 0x05 ] = {
1204                 .model      = "PAL-BG",
1205                 .tuner_type = TUNER_LG_PAL_NEW_TAPC,
1206         },
1207         [ 0x10 ] = {
1208                 .model      = "PAL-BG / PAL-DK",
1209                 .tuner_type = TUNER_PHILIPS_PAL,
1210         },
1211         [ 0x15 ] = {
1212                 .model      = "NTSC",
1213                 .tuner_type = TUNER_ABSENT /* FIXME */,
1214         },
1215 };
1216 #endif
1217
1218 static void board_flyvideo(struct saa7134_dev *dev)
1219 {
1220 #if 0
1221         u32 value;
1222         int index;
1223
1224         value = dev->gpio_value;
1225         index = (value & 0x1f00) >> 8;
1226         printk(KERN_INFO "%s: flyvideo: gpio is 0x%x [model=%s,tuner=%d]\n",
1227                dev->name, value, fly_list[index].model,
1228                fly_list[index].tuner_type);
1229         dev->tuner_type = fly_list[index].tuner_type;
1230 #endif
1231 }
1232
1233 /* ----------------------------------------------------------- */
1234
1235 int saa7134_board_init(struct saa7134_dev *dev)
1236 {
1237         // Always print gpio, often manufacturers encode tuner type and other info.
1238         saa_writel(SAA7134_GPIO_GPMODE0 >> 2, 0);
1239         dev->gpio_value = saa_readl(SAA7134_GPIO_GPSTATUS0 >> 2);
1240         printk(KERN_INFO "%s: board init: gpio is %x\n", dev->name, dev->gpio_value);
1241
1242         switch (dev->board) {
1243         case SAA7134_BOARD_FLYVIDEO2000:
1244         case SAA7134_BOARD_FLYVIDEO3000:
1245                 board_flyvideo(dev);
1246                 dev->has_remote = 1;
1247                 break;
1248         case SAA7134_BOARD_CINERGY400:
1249         case SAA7134_BOARD_CINERGY600:
1250         case SAA7134_BOARD_ECS_TVP3XP:
1251         case SAA7134_BOARD_ECS_TVP3XP_4CB5:
1252                 dev->has_remote = 1;
1253                 break;
1254         }
1255         return 0;
1256 }
1257
1258 /* ----------------------------------------------------------- */
1259 /*
1260  * Local variables:
1261  * c-basic-offset: 8
1262  * End:
1263  */