treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157
[sfrench/cifs-2.6.git] / drivers / media / pci / cx88 / cx88-cards.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * device driver for Conexant 2388x based TV cards
4  * card-specific stuff.
5  *
6  * (c) 2003 Gerd Knorr <kraxel@bytesex.org> [SuSE Labs]
7  */
8
9 #include "cx88.h"
10 #include "tea5767.h"
11 #include "xc4000.h"
12
13 #include <linux/init.h>
14 #include <linux/module.h>
15 #include <linux/pci.h>
16 #include <linux/delay.h>
17 #include <linux/slab.h>
18
19 static unsigned int tuner[] = {[0 ... (CX88_MAXBOARDS - 1)] = UNSET };
20 static unsigned int radio[] = {[0 ... (CX88_MAXBOARDS - 1)] = UNSET };
21 static unsigned int card[]  = {[0 ... (CX88_MAXBOARDS - 1)] = UNSET };
22
23 module_param_array(tuner, int, NULL, 0444);
24 module_param_array(radio, int, NULL, 0444);
25 module_param_array(card,  int, NULL, 0444);
26
27 MODULE_PARM_DESC(tuner, "tuner type");
28 MODULE_PARM_DESC(radio, "radio tuner type");
29 MODULE_PARM_DESC(card, "card type");
30
31 static unsigned int latency = UNSET;
32 module_param(latency, int, 0444);
33 MODULE_PARM_DESC(latency, "pci latency timer");
34
35 static int disable_ir;
36 module_param(disable_ir, int, 0444);
37 MODULE_PARM_DESC(disable_ir, "Disable IR support");
38
39 #define dprintk(level, fmt, arg...)     do {                            \
40         if (cx88_core_debug >= level)                                   \
41                 printk(KERN_DEBUG pr_fmt("%s: core:" fmt),              \
42                         __func__, ##arg);                               \
43 } while (0)
44
45 /* ------------------------------------------------------------------ */
46 /* board config info                                                  */
47
48 /* If radio_type !=UNSET, radio_addr should be specified
49  */
50
51 static const struct cx88_board cx88_boards[] = {
52         [CX88_BOARD_UNKNOWN] = {
53                 .name           = "UNKNOWN/GENERIC",
54                 .tuner_type     = UNSET,
55                 .radio_type     = UNSET,
56                 .tuner_addr     = ADDR_UNSET,
57                 .radio_addr     = ADDR_UNSET,
58                 .input          = { {
59                         .type   = CX88_VMUX_COMPOSITE1,
60                         .vmux   = 0,
61                 }, {
62                         .type   = CX88_VMUX_COMPOSITE2,
63                         .vmux   = 1,
64                 }, {
65                         .type   = CX88_VMUX_COMPOSITE3,
66                         .vmux   = 2,
67                 }, {
68                         .type   = CX88_VMUX_COMPOSITE4,
69                         .vmux   = 3,
70                 } },
71         },
72         [CX88_BOARD_HAUPPAUGE] = {
73                 .name           = "Hauppauge WinTV 34xxx models",
74                 .tuner_type     = UNSET,
75                 .radio_type     = UNSET,
76                 .tuner_addr     = ADDR_UNSET,
77                 .radio_addr     = ADDR_UNSET,
78                 .tda9887_conf   = TDA9887_PRESENT,
79                 .input          = { {
80                         .type   = CX88_VMUX_TELEVISION,
81                         .vmux   = 0,
82                         .gpio0  = 0xff00,  // internal decoder
83                 }, {
84                         .type   = CX88_VMUX_DEBUG,
85                         .vmux   = 0,
86                         .gpio0  = 0xff01,  // mono from tuner chip
87                 }, {
88                         .type   = CX88_VMUX_COMPOSITE1,
89                         .vmux   = 1,
90                         .gpio0  = 0xff02,
91                 }, {
92                         .type   = CX88_VMUX_SVIDEO,
93                         .vmux   = 2,
94                         .gpio0  = 0xff02,
95                 } },
96                 .radio = {
97                         .type   = CX88_RADIO,
98                         .gpio0  = 0xff01,
99                 },
100         },
101         [CX88_BOARD_GDI] = {
102                 .name           = "GDI Black Gold",
103                 .tuner_type     = UNSET,
104                 .radio_type     = UNSET,
105                 .tuner_addr     = ADDR_UNSET,
106                 .radio_addr     = ADDR_UNSET,
107                 .input          = { {
108                         .type   = CX88_VMUX_TELEVISION,
109                         .vmux   = 0,
110                 }, {
111                         .type   = CX88_VMUX_SVIDEO,
112                         .vmux   = 2,
113                 } },
114         },
115         [CX88_BOARD_PIXELVIEW] = {
116                 .name           = "PixelView",
117                 .tuner_type     = TUNER_PHILIPS_PAL,
118                 .radio_type     = UNSET,
119                 .tuner_addr     = ADDR_UNSET,
120                 .radio_addr     = ADDR_UNSET,
121                 .input          = { {
122                         .type   = CX88_VMUX_TELEVISION,
123                         .vmux   = 0,
124                         .gpio0  = 0xff00,  // internal decoder
125                 }, {
126                         .type   = CX88_VMUX_COMPOSITE1,
127                         .vmux   = 1,
128                 }, {
129                         .type   = CX88_VMUX_SVIDEO,
130                         .vmux   = 2,
131                 } },
132                 .radio = {
133                          .type  = CX88_RADIO,
134                          .gpio0 = 0xff10,
135                 },
136         },
137         [CX88_BOARD_ATI_WONDER_PRO] = {
138                 .name           = "ATI TV Wonder Pro",
139                 .tuner_type     = TUNER_PHILIPS_4IN1,
140                 .radio_type     = UNSET,
141                 .tuner_addr     = ADDR_UNSET,
142                 .radio_addr     = ADDR_UNSET,
143                 .tda9887_conf   = TDA9887_PRESENT | TDA9887_INTERCARRIER,
144                 .input          = { {
145                         .type   = CX88_VMUX_TELEVISION,
146                         .vmux   = 0,
147                         .gpio0  = 0x03ff,
148                 }, {
149                         .type   = CX88_VMUX_COMPOSITE1,
150                         .vmux   = 1,
151                         .gpio0  = 0x03fe,
152                 }, {
153                         .type   = CX88_VMUX_SVIDEO,
154                         .vmux   = 2,
155                         .gpio0  = 0x03fe,
156                 } },
157         },
158         [CX88_BOARD_WINFAST2000XP_EXPERT] = {
159                 .name           = "Leadtek Winfast 2000XP Expert",
160                 .tuner_type     = TUNER_PHILIPS_4IN1,
161                 .radio_type     = UNSET,
162                 .tuner_addr     = ADDR_UNSET,
163                 .radio_addr     = ADDR_UNSET,
164                 .tda9887_conf   = TDA9887_PRESENT,
165                 .input          = { {
166                         .type   = CX88_VMUX_TELEVISION,
167                         .vmux   = 0,
168                         .gpio0  = 0x00F5e700,
169                         .gpio1  = 0x00003004,
170                         .gpio2  = 0x00F5e700,
171                         .gpio3  = 0x02000000,
172                 }, {
173                         .type   = CX88_VMUX_COMPOSITE1,
174                         .vmux   = 1,
175                         .gpio0  = 0x00F5c700,
176                         .gpio1  = 0x00003004,
177                         .gpio2  = 0x00F5c700,
178                         .gpio3  = 0x02000000,
179                 }, {
180                         .type   = CX88_VMUX_SVIDEO,
181                         .vmux   = 2,
182                         .gpio0  = 0x00F5c700,
183                         .gpio1  = 0x00003004,
184                         .gpio2  = 0x00F5c700,
185                         .gpio3  = 0x02000000,
186                 } },
187                 .radio = {
188                         .type   = CX88_RADIO,
189                         .gpio0  = 0x00F5d700,
190                         .gpio1  = 0x00003004,
191                         .gpio2  = 0x00F5d700,
192                         .gpio3  = 0x02000000,
193                 },
194         },
195         [CX88_BOARD_AVERTV_STUDIO_303] = {
196                 .name           = "AverTV Studio 303 (M126)",
197                 .tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
198                 .radio_type     = UNSET,
199                 .tuner_addr     = ADDR_UNSET,
200                 .radio_addr     = ADDR_UNSET,
201                 .tda9887_conf   = TDA9887_PRESENT,
202                 .input          = { {
203                         .type   = CX88_VMUX_TELEVISION,
204                         .vmux   = 0,
205                         .gpio1  = 0xe09f,
206                 }, {
207                         .type   = CX88_VMUX_COMPOSITE1,
208                         .vmux   = 1,
209                         .gpio1  = 0xe05f,
210                 }, {
211                         .type   = CX88_VMUX_SVIDEO,
212                         .vmux   = 2,
213                         .gpio1  = 0xe05f,
214                 } },
215                 .radio = {
216                         .gpio1  = 0xe0df,
217                         .type   = CX88_RADIO,
218                 },
219         },
220         [CX88_BOARD_MSI_TVANYWHERE_MASTER] = {
221                 // added gpio values thanks to Michal
222                 // values for PAL from DScaler
223                 .name           = "MSI TV-@nywhere Master",
224                 .tuner_type     = TUNER_MT2032,
225                 .radio_type     = UNSET,
226                 .tuner_addr     = ADDR_UNSET,
227                 .radio_addr     = ADDR_UNSET,
228                 .tda9887_conf   = TDA9887_PRESENT | TDA9887_INTERCARRIER_NTSC,
229                 .input          = { {
230                         .type   = CX88_VMUX_TELEVISION,
231                         .vmux   = 0,
232                         .gpio0  = 0x000040bf,
233                         .gpio1  = 0x000080c0,
234                         .gpio2  = 0x0000ff40,
235                 }, {
236                         .type   = CX88_VMUX_COMPOSITE1,
237                         .vmux   = 1,
238                         .gpio0  = 0x000040bf,
239                         .gpio1  = 0x000080c0,
240                         .gpio2  = 0x0000ff40,
241                 }, {
242                         .type   = CX88_VMUX_SVIDEO,
243                         .vmux   = 2,
244                         .gpio0  = 0x000040bf,
245                         .gpio1  = 0x000080c0,
246                         .gpio2  = 0x0000ff40,
247                 } },
248                 .radio = {
249                          .type   = CX88_RADIO,
250                          .vmux   = 3,
251                          .gpio0  = 0x000040bf,
252                          .gpio1  = 0x000080c0,
253                          .gpio2  = 0x0000ff20,
254                 },
255         },
256         [CX88_BOARD_WINFAST_DV2000] = {
257                 .name           = "Leadtek Winfast DV2000",
258                 .tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
259                 .radio_type     = UNSET,
260                 .tuner_addr     = ADDR_UNSET,
261                 .radio_addr     = ADDR_UNSET,
262                 .tda9887_conf   = TDA9887_PRESENT,
263                 .input          = { {
264                         .type   = CX88_VMUX_TELEVISION,
265                         .vmux   = 0,
266                         .gpio0  = 0x0035e700,
267                         .gpio1  = 0x00003004,
268                         .gpio2  = 0x0035e700,
269                         .gpio3  = 0x02000000,
270                 }, {
271                         .type   = CX88_VMUX_COMPOSITE1,
272                         .vmux   = 1,
273                         .gpio0  = 0x0035c700,
274                         .gpio1  = 0x00003004,
275                         .gpio2  = 0x0035c700,
276                         .gpio3  = 0x02000000,
277                 }, {
278                         .type   = CX88_VMUX_SVIDEO,
279                         .vmux   = 2,
280                         .gpio0  = 0x0035c700,
281                         .gpio1  = 0x0035c700,
282                         .gpio2  = 0x02000000,
283                         .gpio3  = 0x02000000,
284                 } },
285                 .radio = {
286                         .type   = CX88_RADIO,
287                         .gpio0  = 0x0035d700,
288                         .gpio1  = 0x00007004,
289                         .gpio2  = 0x0035d700,
290                         .gpio3  = 0x02000000,
291                 },
292         },
293         [CX88_BOARD_LEADTEK_PVR2000] = {
294                 // gpio values for PAL version from regspy by DScaler
295                 .name           = "Leadtek PVR 2000",
296                 .tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
297                 .radio_type     = UNSET,
298                 .tuner_addr     = ADDR_UNSET,
299                 .radio_addr     = ADDR_UNSET,
300                 .tda9887_conf   = TDA9887_PRESENT,
301                 .input          = { {
302                         .type   = CX88_VMUX_TELEVISION,
303                         .vmux   = 0,
304                         .gpio0  = 0x0000bde2,
305                         .audioroute = 1,
306                 }, {
307                         .type   = CX88_VMUX_COMPOSITE1,
308                         .vmux   = 1,
309                         .gpio0  = 0x0000bde6,
310                         .audioroute = 1,
311                 }, {
312                         .type   = CX88_VMUX_SVIDEO,
313                         .vmux   = 2,
314                         .gpio0  = 0x0000bde6,
315                         .audioroute = 1,
316                 } },
317                 .radio = {
318                         .type   = CX88_RADIO,
319                         .gpio0  = 0x0000bd62,
320                         .audioroute = 1,
321                 },
322                 .mpeg           = CX88_MPEG_BLACKBIRD,
323         },
324         [CX88_BOARD_IODATA_GVVCP3PCI] = {
325                 .name           = "IODATA GV-VCP3/PCI",
326                 .tuner_type     = UNSET,
327                 .radio_type     = UNSET,
328                 .tuner_addr     = ADDR_UNSET,
329                 .radio_addr     = ADDR_UNSET,
330                 .input          = { {
331                         .type   = CX88_VMUX_COMPOSITE1,
332                         .vmux   = 0,
333                 }, {
334                         .type   = CX88_VMUX_COMPOSITE2,
335                         .vmux   = 1,
336                 }, {
337                         .type   = CX88_VMUX_SVIDEO,
338                         .vmux   = 2,
339                 } },
340         },
341         [CX88_BOARD_PROLINK_PLAYTVPVR] = {
342                 .name           = "Prolink PlayTV PVR",
343                 .tuner_type     = TUNER_PHILIPS_FM1236_MK3,
344                 .radio_type     = UNSET,
345                 .tuner_addr     = ADDR_UNSET,
346                 .radio_addr     = ADDR_UNSET,
347                 .tda9887_conf   = TDA9887_PRESENT,
348                 .input          = { {
349                         .type   = CX88_VMUX_TELEVISION,
350                         .vmux   = 0,
351                         .gpio0  = 0xbff0,
352                 }, {
353                         .type   = CX88_VMUX_COMPOSITE1,
354                         .vmux   = 1,
355                         .gpio0  = 0xbff3,
356                 }, {
357                         .type   = CX88_VMUX_SVIDEO,
358                         .vmux   = 2,
359                         .gpio0  = 0xbff3,
360                 } },
361                 .radio = {
362                         .type   = CX88_RADIO,
363                         .gpio0  = 0xbff0,
364                 },
365         },
366         [CX88_BOARD_ASUS_PVR_416] = {
367                 .name           = "ASUS PVR-416",
368                 .tuner_type     = TUNER_PHILIPS_FM1236_MK3,
369                 .radio_type     = UNSET,
370                 .tuner_addr     = ADDR_UNSET,
371                 .radio_addr     = ADDR_UNSET,
372                 .tda9887_conf   = TDA9887_PRESENT,
373                 .input          = { {
374                         .type   = CX88_VMUX_TELEVISION,
375                         .vmux   = 0,
376                         .gpio0  = 0x0000fde6,
377                 }, {
378                         .type   = CX88_VMUX_SVIDEO,
379                         .vmux   = 2,
380                         .gpio0  = 0x0000fde6, // 0x0000fda6 L,R RCA audio in?
381                         .audioroute = 1,
382                 } },
383                 .radio = {
384                         .type   = CX88_RADIO,
385                         .gpio0  = 0x0000fde2,
386                 },
387                 .mpeg           = CX88_MPEG_BLACKBIRD,
388         },
389         [CX88_BOARD_MSI_TVANYWHERE] = {
390                 .name           = "MSI TV-@nywhere",
391                 .tuner_type     = TUNER_MT2032,
392                 .radio_type     = UNSET,
393                 .tuner_addr     = ADDR_UNSET,
394                 .radio_addr     = ADDR_UNSET,
395                 .tda9887_conf   = TDA9887_PRESENT,
396                 .input          = { {
397                         .type   = CX88_VMUX_TELEVISION,
398                         .vmux   = 0,
399                         .gpio0  = 0x00000fbf,
400                         .gpio2  = 0x0000fc08,
401                 }, {
402                         .type   = CX88_VMUX_COMPOSITE1,
403                         .vmux   = 1,
404                         .gpio0  = 0x00000fbf,
405                         .gpio2  = 0x0000fc68,
406                 }, {
407                         .type   = CX88_VMUX_SVIDEO,
408                         .vmux   = 2,
409                         .gpio0  = 0x00000fbf,
410                         .gpio2  = 0x0000fc68,
411                 } },
412         },
413         [CX88_BOARD_KWORLD_DVB_T] = {
414                 .name           = "KWorld/VStream XPert DVB-T",
415                 .tuner_type     = UNSET,
416                 .radio_type     = UNSET,
417                 .tuner_addr     = ADDR_UNSET,
418                 .radio_addr     = ADDR_UNSET,
419                 .input          = { {
420                         .type   = CX88_VMUX_COMPOSITE1,
421                         .vmux   = 1,
422                         .gpio0  = 0x0700,
423                         .gpio2  = 0x0101,
424                 }, {
425                         .type   = CX88_VMUX_SVIDEO,
426                         .vmux   = 2,
427                         .gpio0  = 0x0700,
428                         .gpio2  = 0x0101,
429                 } },
430                 .mpeg           = CX88_MPEG_DVB,
431         },
432         [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1] = {
433                 .name           = "DViCO FusionHDTV DVB-T1",
434                 .tuner_type     = UNSET, /* No analog tuner */
435                 .radio_type     = UNSET,
436                 .tuner_addr     = ADDR_UNSET,
437                 .radio_addr     = ADDR_UNSET,
438                 .input          = { {
439                         .type   = CX88_VMUX_COMPOSITE1,
440                         .vmux   = 1,
441                         .gpio0  = 0x000027df,
442                 }, {
443                         .type   = CX88_VMUX_SVIDEO,
444                         .vmux   = 2,
445                         .gpio0  = 0x000027df,
446                 } },
447                 .mpeg           = CX88_MPEG_DVB,
448         },
449         [CX88_BOARD_KWORLD_LTV883] = {
450                 .name           = "KWorld LTV883RF",
451                 .tuner_type     = TUNER_TNF_8831BGFF,
452                 .radio_type     = UNSET,
453                 .tuner_addr     = ADDR_UNSET,
454                 .radio_addr     = ADDR_UNSET,
455                 .input          = { {
456                         .type   = CX88_VMUX_TELEVISION,
457                         .vmux   = 0,
458                         .gpio0  = 0x07f8,
459                 }, {
460                         .type   = CX88_VMUX_DEBUG,
461                         .vmux   = 0,
462                         .gpio0  = 0x07f9,  // mono from tuner chip
463                 }, {
464                         .type   = CX88_VMUX_COMPOSITE1,
465                         .vmux   = 1,
466                         .gpio0  = 0x000007fa,
467                 }, {
468                         .type   = CX88_VMUX_SVIDEO,
469                         .vmux   = 2,
470                         .gpio0  = 0x000007fa,
471                 } },
472                 .radio = {
473                         .type   = CX88_RADIO,
474                         .gpio0  = 0x000007f8,
475                 },
476         },
477         [CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q] = {
478                 .name           = "DViCO FusionHDTV 3 Gold-Q",
479                 .tuner_type     = TUNER_MICROTUNE_4042FI5,
480                 .radio_type     = UNSET,
481                 .tuner_addr     = ADDR_UNSET,
482                 .radio_addr     = ADDR_UNSET,
483                 /*
484                  * GPIO[0] resets DT3302 DTV receiver
485                  *     0 - reset asserted
486                  *     1 - normal operation
487                  * GPIO[1] mutes analog audio output connector
488                  *     0 - enable selected source
489                  *     1 - mute
490                  * GPIO[2] selects source for analog audio output connector
491                  *     0 - analog audio input connector on tab
492                  *     1 - analog DAC output from CX23881 chip
493                  * GPIO[3] selects RF input connector on tuner module
494                  *     0 - RF connector labeled CABLE
495                  *     1 - RF connector labeled ANT
496                  * GPIO[4] selects high RF for QAM256 mode
497                  *     0 - normal RF
498                  *     1 - high RF
499                  */
500                 .input          = { {
501                         .type   = CX88_VMUX_TELEVISION,
502                         .vmux   = 0,
503                         .gpio0  = 0x0f0d,
504                 }, {
505                         .type   = CX88_VMUX_CABLE,
506                         .vmux   = 0,
507                         .gpio0  = 0x0f05,
508                 }, {
509                         .type   = CX88_VMUX_COMPOSITE1,
510                         .vmux   = 1,
511                         .gpio0  = 0x0f00,
512                 }, {
513                         .type   = CX88_VMUX_SVIDEO,
514                         .vmux   = 2,
515                         .gpio0  = 0x0f00,
516                 } },
517                 .mpeg           = CX88_MPEG_DVB,
518         },
519         [CX88_BOARD_HAUPPAUGE_DVB_T1] = {
520                 .name           = "Hauppauge Nova-T DVB-T",
521                 .tuner_type     = UNSET,
522                 .radio_type     = UNSET,
523                 .tuner_addr     = ADDR_UNSET,
524                 .radio_addr     = ADDR_UNSET,
525                 .input          = { {
526                         .type   = CX88_VMUX_DVB,
527                         .vmux   = 0,
528                 } },
529                 .mpeg           = CX88_MPEG_DVB,
530         },
531         [CX88_BOARD_CONEXANT_DVB_T1] = {
532                 .name           = "Conexant DVB-T reference design",
533                 .tuner_type     = UNSET,
534                 .radio_type     = UNSET,
535                 .tuner_addr     = ADDR_UNSET,
536                 .radio_addr     = ADDR_UNSET,
537                 .input          = { {
538                         .type   = CX88_VMUX_DVB,
539                         .vmux   = 0,
540                 } },
541                 .mpeg           = CX88_MPEG_DVB,
542         },
543         [CX88_BOARD_PROVIDEO_PV259] = {
544                 .name           = "Provideo PV259",
545                 .tuner_type     = TUNER_PHILIPS_FQ1216ME,
546                 .radio_type     = UNSET,
547                 .tuner_addr     = ADDR_UNSET,
548                 .radio_addr     = ADDR_UNSET,
549                 .input          = { {
550                         .type   = CX88_VMUX_TELEVISION,
551                         .vmux   = 0,
552                         .audioroute = 1,
553                 } },
554                 .mpeg           = CX88_MPEG_BLACKBIRD,
555         },
556         [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS] = {
557                 .name           = "DViCO FusionHDTV DVB-T Plus",
558                 .tuner_type     = UNSET, /* No analog tuner */
559                 .radio_type     = UNSET,
560                 .tuner_addr     = ADDR_UNSET,
561                 .radio_addr     = ADDR_UNSET,
562                 .input          = { {
563                         .type   = CX88_VMUX_COMPOSITE1,
564                         .vmux   = 1,
565                         .gpio0  = 0x000027df,
566                 }, {
567                         .type   = CX88_VMUX_SVIDEO,
568                         .vmux   = 2,
569                         .gpio0  = 0x000027df,
570                 } },
571                 .mpeg           = CX88_MPEG_DVB,
572         },
573         [CX88_BOARD_DNTV_LIVE_DVB_T] = {
574                 .name           = "digitalnow DNTV Live! DVB-T",
575                 .tuner_type     = UNSET,
576                 .radio_type     = UNSET,
577                 .tuner_addr     = ADDR_UNSET,
578                 .radio_addr     = ADDR_UNSET,
579                 .input          = { {
580                         .type   = CX88_VMUX_COMPOSITE1,
581                         .vmux   = 1,
582                         .gpio0  = 0x00000700,
583                         .gpio2  = 0x00000101,
584                 }, {
585                         .type   = CX88_VMUX_SVIDEO,
586                         .vmux   = 2,
587                         .gpio0  = 0x00000700,
588                         .gpio2  = 0x00000101,
589                 } },
590                 .mpeg           = CX88_MPEG_DVB,
591         },
592         [CX88_BOARD_PCHDTV_HD3000] = {
593                 .name           = "pcHDTV HD3000 HDTV",
594                 .tuner_type     = TUNER_THOMSON_DTT761X,
595                 .radio_type     = UNSET,
596                 .tuner_addr     = ADDR_UNSET,
597                 .radio_addr     = ADDR_UNSET,
598                 .tda9887_conf   = TDA9887_PRESENT,
599                 /* GPIO[2] = audio source for analog audio out connector
600                  *  0 = analog audio input connector
601                  *  1 = CX88 audio DACs
602                  *
603                  * GPIO[7] = input to CX88's audio/chroma ADC
604                  *  0 = FM 10.7 MHz IF
605                  *  1 = Sound 4.5 MHz IF
606                  *
607                  * GPIO[1,5,6] = Oren 51132 pins 27,35,28 respectively
608                  *
609                  * GPIO[16] = Remote control input
610                  */
611                 .input          = { {
612                         .type   = CX88_VMUX_TELEVISION,
613                         .vmux   = 0,
614                         .gpio0  = 0x00008484,
615                 }, {
616                         .type   = CX88_VMUX_COMPOSITE1,
617                         .vmux   = 1,
618                         .gpio0  = 0x00008400,
619                 }, {
620                         .type   = CX88_VMUX_SVIDEO,
621                         .vmux   = 2,
622                         .gpio0  = 0x00008400,
623                 } },
624                 .radio = {
625                         .type   = CX88_RADIO,
626                         .gpio0  = 0x00008404,
627                 },
628                 .mpeg           = CX88_MPEG_DVB,
629         },
630         [CX88_BOARD_HAUPPAUGE_ROSLYN] = {
631                 // entry added by Kaustubh D. Bhalerao <bhalerao.1@osu.edu>
632                 // GPIO values obtained from regspy, courtesy Sean Covel
633                 .name           = "Hauppauge WinTV 28xxx (Roslyn) models",
634                 .tuner_type     = UNSET,
635                 .radio_type     = UNSET,
636                 .tuner_addr     = ADDR_UNSET,
637                 .radio_addr     = ADDR_UNSET,
638                 .input          = { {
639                         .type   = CX88_VMUX_TELEVISION,
640                         .vmux   = 0,
641                         .gpio0  = 0xed1a,
642                         .gpio2  = 0x00ff,
643                 }, {
644                         .type   = CX88_VMUX_DEBUG,
645                         .vmux   = 0,
646                         .gpio0  = 0xff01,
647                 }, {
648                         .type   = CX88_VMUX_COMPOSITE1,
649                         .vmux   = 1,
650                         .gpio0  = 0xff02,
651                 }, {
652                         .type   = CX88_VMUX_SVIDEO,
653                         .vmux   = 2,
654                         .gpio0  = 0xed92,
655                         .gpio2  = 0x00ff,
656                 } },
657                 .radio = {
658                          .type   = CX88_RADIO,
659                          .gpio0  = 0xed96,
660                          .gpio2  = 0x00ff,
661                  },
662                 .mpeg           = CX88_MPEG_BLACKBIRD,
663         },
664         [CX88_BOARD_DIGITALLOGIC_MEC] = {
665                 .name           = "Digital-Logic MICROSPACE Entertainment Center (MEC)",
666                 .tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
667                 .radio_type     = UNSET,
668                 .tuner_addr     = ADDR_UNSET,
669                 .radio_addr     = ADDR_UNSET,
670                 .tda9887_conf   = TDA9887_PRESENT,
671                 .input          = { {
672                         .type   = CX88_VMUX_TELEVISION,
673                         .vmux   = 0,
674                         .gpio0  = 0x00009d80,
675                         .audioroute = 1,
676                 }, {
677                         .type   = CX88_VMUX_COMPOSITE1,
678                         .vmux   = 1,
679                         .gpio0  = 0x00009d76,
680                         .audioroute = 1,
681                 }, {
682                         .type   = CX88_VMUX_SVIDEO,
683                         .vmux   = 2,
684                         .gpio0  = 0x00009d76,
685                         .audioroute = 1,
686                 } },
687                 .radio = {
688                         .type   = CX88_RADIO,
689                         .gpio0  = 0x00009d00,
690                         .audioroute = 1,
691                 },
692                 .mpeg           = CX88_MPEG_BLACKBIRD,
693         },
694         [CX88_BOARD_IODATA_GVBCTV7E] = {
695                 .name           = "IODATA GV/BCTV7E",
696                 .tuner_type     = TUNER_PHILIPS_FQ1286,
697                 .radio_type     = UNSET,
698                 .tuner_addr     = ADDR_UNSET,
699                 .radio_addr     = ADDR_UNSET,
700                 .tda9887_conf   = TDA9887_PRESENT,
701                 .input          = { {
702                         .type   = CX88_VMUX_TELEVISION,
703                         .vmux   = 1,
704                         .gpio1  = 0x0000e03f,
705                 }, {
706                         .type   = CX88_VMUX_COMPOSITE1,
707                         .vmux   = 2,
708                         .gpio1  = 0x0000e07f,
709                 }, {
710                         .type   = CX88_VMUX_SVIDEO,
711                         .vmux   = 3,
712                         .gpio1  = 0x0000e07f,
713                 } }
714         },
715         [CX88_BOARD_PIXELVIEW_PLAYTV_ULTRA_PRO] = {
716                 .name           = "PixelView PlayTV Ultra Pro (Stereo)",
717                 /* May be also TUNER_YMEC_TVF_5533MF for NTSC/M or PAL/M */
718                 .tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
719                 .radio_type     = UNSET,
720                 .tuner_addr     = ADDR_UNSET,
721                 .radio_addr     = ADDR_UNSET,
722                 /*
723                  * Some variants use a tda9874 and so need the
724                  * tvaudio module.
725                  */
726                 .audio_chip     = CX88_AUDIO_TVAUDIO,
727                 .input          = { {
728                         .type   = CX88_VMUX_TELEVISION,
729                         .vmux   = 0,
730                         .gpio0  = 0xbf61,  /* internal decoder */
731                 }, {
732                         .type   = CX88_VMUX_COMPOSITE1,
733                         .vmux   = 1,
734                         .gpio0  = 0xbf63,
735                 }, {
736                         .type   = CX88_VMUX_SVIDEO,
737                         .vmux   = 2,
738                         .gpio0  = 0xbf63,
739                 } },
740                 .radio = {
741                          .type  = CX88_RADIO,
742                          .gpio0 = 0xbf60,
743                  },
744         },
745         [CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_T] = {
746                 .name           = "DViCO FusionHDTV 3 Gold-T",
747                 .tuner_type     = TUNER_THOMSON_DTT761X,
748                 .radio_type     = UNSET,
749                 .tuner_addr     = ADDR_UNSET,
750                 .radio_addr     = ADDR_UNSET,
751                 .tda9887_conf   = TDA9887_PRESENT,
752                 .input          = { {
753                         .type   = CX88_VMUX_TELEVISION,
754                         .vmux   = 0,
755                         .gpio0  = 0x97ed,
756                 }, {
757                         .type   = CX88_VMUX_COMPOSITE1,
758                         .vmux   = 1,
759                         .gpio0  = 0x97e9,
760                 }, {
761                         .type   = CX88_VMUX_SVIDEO,
762                         .vmux   = 2,
763                         .gpio0  = 0x97e9,
764                 } },
765                 .mpeg           = CX88_MPEG_DVB,
766         },
767         [CX88_BOARD_ADSTECH_DVB_T_PCI] = {
768                 .name           = "ADS Tech Instant TV DVB-T PCI",
769                 .tuner_type     = UNSET,
770                 .radio_type     = UNSET,
771                 .tuner_addr     = ADDR_UNSET,
772                 .radio_addr     = ADDR_UNSET,
773                 .input          = { {
774                         .type   = CX88_VMUX_COMPOSITE1,
775                         .vmux   = 1,
776                         .gpio0  = 0x0700,
777                         .gpio2  = 0x0101,
778                 }, {
779                         .type   = CX88_VMUX_SVIDEO,
780                         .vmux   = 2,
781                         .gpio0  = 0x0700,
782                         .gpio2  = 0x0101,
783                 } },
784                 .mpeg           = CX88_MPEG_DVB,
785         },
786         [CX88_BOARD_TERRATEC_CINERGY_1400_DVB_T1] = {
787                 .name           = "TerraTec Cinergy 1400 DVB-T",
788                 .tuner_type     = UNSET,
789                 .input          = { {
790                         .type   = CX88_VMUX_DVB,
791                         .vmux   = 0,
792                 }, {
793                         .type   = CX88_VMUX_COMPOSITE1,
794                         .vmux   = 2,
795                 }, {
796                         .type   = CX88_VMUX_SVIDEO,
797                         .vmux   = 2,
798                 } },
799                 .mpeg           = CX88_MPEG_DVB,
800         },
801         [CX88_BOARD_DVICO_FUSIONHDTV_5_GOLD] = {
802                 .name           = "DViCO FusionHDTV 5 Gold",
803                 .tuner_type     = TUNER_LG_TDVS_H06XF, /* TDVS-H062F */
804                 .radio_type     = UNSET,
805                 .tuner_addr     = ADDR_UNSET,
806                 .radio_addr     = ADDR_UNSET,
807                 .tda9887_conf   = TDA9887_PRESENT,
808                 .input          = { {
809                         .type   = CX88_VMUX_TELEVISION,
810                         .vmux   = 0,
811                         .gpio0  = 0x87fd,
812                 }, {
813                         .type   = CX88_VMUX_COMPOSITE1,
814                         .vmux   = 1,
815                         .gpio0  = 0x87f9,
816                 }, {
817                         .type   = CX88_VMUX_SVIDEO,
818                         .vmux   = 2,
819                         .gpio0  = 0x87f9,
820                 } },
821                 .mpeg           = CX88_MPEG_DVB,
822         },
823         [CX88_BOARD_AVERMEDIA_ULTRATV_MC_550] = {
824                 .name           = "AverMedia UltraTV Media Center PCI 550",
825                 .tuner_type     = TUNER_PHILIPS_FM1236_MK3,
826                 .radio_type     = UNSET,
827                 .tuner_addr     = ADDR_UNSET,
828                 .radio_addr     = ADDR_UNSET,
829                 .tda9887_conf   = TDA9887_PRESENT,
830                 .input          = { {
831                         .type   = CX88_VMUX_COMPOSITE1,
832                         .vmux   = 0,
833                         .gpio0  = 0x0000cd73,
834                         .audioroute = 1,
835                 }, {
836                         .type   = CX88_VMUX_SVIDEO,
837                         .vmux   = 1,
838                         .gpio0  = 0x0000cd73,
839                         .audioroute = 1,
840                 }, {
841                         .type   = CX88_VMUX_TELEVISION,
842                         .vmux   = 3,
843                         .gpio0  = 0x0000cdb3,
844                         .audioroute = 1,
845                 } },
846                 .radio = {
847                         .type   = CX88_RADIO,
848                         .vmux   = 2,
849                         .gpio0  = 0x0000cdf3,
850                         .audioroute = 1,
851                 },
852                 .mpeg           = CX88_MPEG_BLACKBIRD,
853         },
854         [CX88_BOARD_KWORLD_VSTREAM_EXPERT_DVD] = {
855                  /* Alexander Wold <awold@bigfoot.com> */
856                  .name           = "Kworld V-Stream Xpert DVD",
857                  .tuner_type     = UNSET,
858                  .input          = { {
859                          .type   = CX88_VMUX_COMPOSITE1,
860                          .vmux   = 1,
861                          .gpio0  = 0x03000000,
862                          .gpio1  = 0x01000000,
863                          .gpio2  = 0x02000000,
864                          .gpio3  = 0x00100000,
865                  }, {
866                          .type   = CX88_VMUX_SVIDEO,
867                          .vmux   = 2,
868                          .gpio0  = 0x03000000,
869                          .gpio1  = 0x01000000,
870                          .gpio2  = 0x02000000,
871                          .gpio3  = 0x00100000,
872                  } },
873         },
874         [CX88_BOARD_ATI_HDTVWONDER] = {
875                 .name           = "ATI HDTV Wonder",
876                 .tuner_type     = TUNER_PHILIPS_TUV1236D,
877                 .radio_type     = UNSET,
878                 .tuner_addr     = ADDR_UNSET,
879                 .radio_addr     = ADDR_UNSET,
880                 .input          = { {
881                         .type   = CX88_VMUX_TELEVISION,
882                         .vmux   = 0,
883                         .gpio0  = 0x00000ff7,
884                         .gpio1  = 0x000000ff,
885                         .gpio2  = 0x00000001,
886                         .gpio3  = 0x00000000,
887                 }, {
888                         .type   = CX88_VMUX_COMPOSITE1,
889                         .vmux   = 1,
890                         .gpio0  = 0x00000ffe,
891                         .gpio1  = 0x000000ff,
892                         .gpio2  = 0x00000001,
893                         .gpio3  = 0x00000000,
894                 }, {
895                         .type   = CX88_VMUX_SVIDEO,
896                         .vmux   = 2,
897                         .gpio0  = 0x00000ffe,
898                         .gpio1  = 0x000000ff,
899                         .gpio2  = 0x00000001,
900                         .gpio3  = 0x00000000,
901                 } },
902                 .mpeg           = CX88_MPEG_DVB,
903         },
904         [CX88_BOARD_WINFAST_DTV1000] = {
905                 .name           = "WinFast DTV1000-T",
906                 .tuner_type     = UNSET,
907                 .radio_type     = UNSET,
908                 .tuner_addr     = ADDR_UNSET,
909                 .radio_addr     = ADDR_UNSET,
910                 .input          = { {
911                         .type   = CX88_VMUX_DVB,
912                         .vmux   = 0,
913                 }, {
914                         .type   = CX88_VMUX_COMPOSITE1,
915                         .vmux   = 1,
916                 }, {
917                         .type   = CX88_VMUX_SVIDEO,
918                         .vmux   = 2,
919                 } },
920                 .mpeg           = CX88_MPEG_DVB,
921         },
922         [CX88_BOARD_AVERTV_303] = {
923                 .name           = "AVerTV 303 (M126)",
924                 .tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
925                 .radio_type     = UNSET,
926                 .tuner_addr     = ADDR_UNSET,
927                 .radio_addr     = ADDR_UNSET,
928                 .tda9887_conf   = TDA9887_PRESENT,
929                 .input          = { {
930                         .type   = CX88_VMUX_TELEVISION,
931                         .vmux   = 0,
932                         .gpio0  = 0x00ff,
933                         .gpio1  = 0xe09f,
934                         .gpio2  = 0x0010,
935                         .gpio3  = 0x0000,
936                 }, {
937                         .type   = CX88_VMUX_COMPOSITE1,
938                         .vmux   = 1,
939                         .gpio0  = 0x00ff,
940                         .gpio1  = 0xe05f,
941                         .gpio2  = 0x0010,
942                         .gpio3  = 0x0000,
943                 }, {
944                         .type   = CX88_VMUX_SVIDEO,
945                         .vmux   = 2,
946                         .gpio0  = 0x00ff,
947                         .gpio1  = 0xe05f,
948                         .gpio2  = 0x0010,
949                         .gpio3  = 0x0000,
950                 } },
951         },
952         [CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1] = {
953                 .name           = "Hauppauge Nova-S-Plus DVB-S",
954                 .tuner_type     = UNSET,
955                 .radio_type     = UNSET,
956                 .tuner_addr     = ADDR_UNSET,
957                 .radio_addr     = ADDR_UNSET,
958                 .audio_chip     = CX88_AUDIO_WM8775,
959                 .i2sinputcntl   = 2,
960                 .input          = { {
961                         .type   = CX88_VMUX_DVB,
962                         .vmux   = 0,
963                         /* 2: Line-In */
964                         .audioroute = 2,
965                 }, {
966                         .type   = CX88_VMUX_COMPOSITE1,
967                         .vmux   = 1,
968                         /* 2: Line-In */
969                         .audioroute = 2,
970                 }, {
971                         .type   = CX88_VMUX_SVIDEO,
972                         .vmux   = 2,
973                         /* 2: Line-In */
974                         .audioroute = 2,
975                 } },
976                 .mpeg           = CX88_MPEG_DVB,
977         },
978         [CX88_BOARD_HAUPPAUGE_NOVASE2_S1] = {
979                 .name           = "Hauppauge Nova-SE2 DVB-S",
980                 .tuner_type     = UNSET,
981                 .radio_type     = UNSET,
982                 .tuner_addr     = ADDR_UNSET,
983                 .radio_addr     = ADDR_UNSET,
984                 .input          = { {
985                         .type   = CX88_VMUX_DVB,
986                         .vmux   = 0,
987                 } },
988                 .mpeg           = CX88_MPEG_DVB,
989         },
990         [CX88_BOARD_KWORLD_DVBS_100] = {
991                 .name           = "KWorld DVB-S 100",
992                 .tuner_type     = UNSET,
993                 .radio_type     = UNSET,
994                 .tuner_addr     = ADDR_UNSET,
995                 .radio_addr     = ADDR_UNSET,
996                 .audio_chip = CX88_AUDIO_WM8775,
997                 .input          = { {
998                         .type   = CX88_VMUX_DVB,
999                         .vmux   = 0,
1000                         /* 2: Line-In */
1001                         .audioroute = 2,
1002                 }, {
1003                         .type   = CX88_VMUX_COMPOSITE1,
1004                         .vmux   = 1,
1005                         /* 2: Line-In */
1006                         .audioroute = 2,
1007                 }, {
1008                         .type   = CX88_VMUX_SVIDEO,
1009                         .vmux   = 2,
1010                         /* 2: Line-In */
1011                         .audioroute = 2,
1012                 } },
1013                 .mpeg           = CX88_MPEG_DVB,
1014         },
1015         [CX88_BOARD_HAUPPAUGE_HVR1100] = {
1016                 .name           = "Hauppauge WinTV-HVR1100 DVB-T/Hybrid",
1017                 .tuner_type     = TUNER_PHILIPS_FMD1216ME_MK3,
1018                 .radio_type     = UNSET,
1019                 .tuner_addr     = ADDR_UNSET,
1020                 .radio_addr     = ADDR_UNSET,
1021                 .tda9887_conf   = TDA9887_PRESENT,
1022                 .input          = { {
1023                         .type   = CX88_VMUX_TELEVISION,
1024                         .vmux   = 0,
1025                 }, {
1026                         .type   = CX88_VMUX_COMPOSITE1,
1027                         .vmux   = 1,
1028                 }, {
1029                         .type   = CX88_VMUX_SVIDEO,
1030                         .vmux   = 2,
1031                 } },
1032                 /* fixme: Add radio support */
1033                 .mpeg           = CX88_MPEG_DVB,
1034         },
1035         [CX88_BOARD_HAUPPAUGE_HVR1100LP] = {
1036                 .name           = "Hauppauge WinTV-HVR1100 DVB-T/Hybrid (Low Profile)",
1037                 .tuner_type     = TUNER_PHILIPS_FMD1216ME_MK3,
1038                 .radio_type     = UNSET,
1039                 .tuner_addr     = ADDR_UNSET,
1040                 .radio_addr     = ADDR_UNSET,
1041                 .tda9887_conf   = TDA9887_PRESENT,
1042                 .input          = { {
1043                         .type   = CX88_VMUX_TELEVISION,
1044                         .vmux   = 0,
1045                 }, {
1046                         .type   = CX88_VMUX_COMPOSITE1,
1047                         .vmux   = 1,
1048                 } },
1049                 /* fixme: Add radio support */
1050                 .mpeg           = CX88_MPEG_DVB,
1051         },
1052         [CX88_BOARD_DNTV_LIVE_DVB_T_PRO] = {
1053                 .name           = "digitalnow DNTV Live! DVB-T Pro",
1054                 .tuner_type     = TUNER_PHILIPS_FMD1216ME_MK3,
1055                 .radio_type     = UNSET,
1056                 .tuner_addr     = ADDR_UNSET,
1057                 .radio_addr     = ADDR_UNSET,
1058                 .tda9887_conf   = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE |
1059                                   TDA9887_PORT2_ACTIVE,
1060                 .input          = { {
1061                         .type   = CX88_VMUX_TELEVISION,
1062                         .vmux   = 0,
1063                         .gpio0  = 0xf80808,
1064                 }, {
1065                         .type   = CX88_VMUX_COMPOSITE1,
1066                         .vmux   = 1,
1067                         .gpio0  = 0xf80808,
1068                 }, {
1069                         .type   = CX88_VMUX_SVIDEO,
1070                         .vmux   = 2,
1071                         .gpio0  = 0xf80808,
1072                 } },
1073                 .radio = {
1074                          .type  = CX88_RADIO,
1075                          .gpio0 = 0xf80808,
1076                 },
1077                 .mpeg           = CX88_MPEG_DVB,
1078         },
1079         [CX88_BOARD_KWORLD_DVB_T_CX22702] = {
1080                 /* Kworld V-stream Xpert DVB-T with Thomson tuner */
1081                 /* DTT 7579 Conexant CX22702-19 Conexant CX2388x  */
1082                 /* Manenti Marco <marco_manenti@colman.it> */
1083                 .name           = "KWorld/VStream XPert DVB-T with cx22702",
1084                 .tuner_type     = UNSET,
1085                 .radio_type     = UNSET,
1086                 .tuner_addr     = ADDR_UNSET,
1087                 .radio_addr     = ADDR_UNSET,
1088                 .input          = { {
1089                         .type   = CX88_VMUX_COMPOSITE1,
1090                         .vmux   = 1,
1091                         .gpio0  = 0x0700,
1092                         .gpio2  = 0x0101,
1093                 }, {
1094                         .type   = CX88_VMUX_SVIDEO,
1095                         .vmux   = 2,
1096                         .gpio0  = 0x0700,
1097                         .gpio2  = 0x0101,
1098                 } },
1099                 .mpeg           = CX88_MPEG_DVB,
1100         },
1101         [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL] = {
1102                 .name           = "DViCO FusionHDTV DVB-T Dual Digital",
1103                 .tuner_type     = UNSET, /* No analog tuner */
1104                 .radio_type     = UNSET,
1105                 .tuner_addr     = ADDR_UNSET,
1106                 .radio_addr     = ADDR_UNSET,
1107                 .input          = { {
1108                         .type   = CX88_VMUX_COMPOSITE1,
1109                         .vmux   = 1,
1110                         .gpio0  = 0x000067df,
1111                  }, {
1112                         .type   = CX88_VMUX_SVIDEO,
1113                         .vmux   = 2,
1114                         .gpio0  = 0x000067df,
1115                 } },
1116                 .mpeg           = CX88_MPEG_DVB,
1117         },
1118         [CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT] = {
1119                 .name           = "KWorld HardwareMpegTV XPert",
1120                 .tuner_type     = TUNER_PHILIPS_TDA8290,
1121                 .radio_type     = UNSET,
1122                 .tuner_addr     = ADDR_UNSET,
1123                 .radio_addr     = ADDR_UNSET,
1124                 .input          = { {
1125                         .type   = CX88_VMUX_TELEVISION,
1126                         .vmux   = 0,
1127                         .gpio0  = 0x3de2,
1128                         .gpio2  = 0x00ff,
1129                 }, {
1130                         .type   = CX88_VMUX_COMPOSITE1,
1131                         .vmux   = 1,
1132                         .gpio0  = 0x3de6,
1133                         .audioroute = 1,
1134                 }, {
1135                         .type   = CX88_VMUX_SVIDEO,
1136                         .vmux   = 2,
1137                         .gpio0  = 0x3de6,
1138                         .audioroute = 1,
1139                 } },
1140                 .radio = {
1141                         .type   = CX88_RADIO,
1142                         .gpio0  = 0x3de6,
1143                         .gpio2  = 0x00ff,
1144                 },
1145                 .mpeg           = CX88_MPEG_BLACKBIRD,
1146         },
1147         [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID] = {
1148                 .name           = "DViCO FusionHDTV DVB-T Hybrid",
1149                 .tuner_type     = TUNER_THOMSON_FE6600,
1150                 .radio_type     = UNSET,
1151                 .tuner_addr     = ADDR_UNSET,
1152                 .radio_addr     = ADDR_UNSET,
1153                 .input          = { {
1154                         .type   = CX88_VMUX_TELEVISION,
1155                         .vmux   = 0,
1156                         .gpio0  = 0x0000a75f,
1157                 }, {
1158                         .type   = CX88_VMUX_COMPOSITE1,
1159                         .vmux   = 1,
1160                         .gpio0  = 0x0000a75b,
1161                 }, {
1162                         .type   = CX88_VMUX_SVIDEO,
1163                         .vmux   = 2,
1164                         .gpio0  = 0x0000a75b,
1165                 } },
1166                 .mpeg           = CX88_MPEG_DVB,
1167         },
1168         [CX88_BOARD_PCHDTV_HD5500] = {
1169                 .name           = "pcHDTV HD5500 HDTV",
1170                 .tuner_type     = TUNER_LG_TDVS_H06XF, /* TDVS-H064F */
1171                 .radio_type     = UNSET,
1172                 .tuner_addr     = ADDR_UNSET,
1173                 .radio_addr     = ADDR_UNSET,
1174                 .tda9887_conf   = TDA9887_PRESENT,
1175                 .input          = { {
1176                         .type   = CX88_VMUX_TELEVISION,
1177                         .vmux   = 0,
1178                         .gpio0  = 0x87fd,
1179                 }, {
1180                         .type   = CX88_VMUX_COMPOSITE1,
1181                         .vmux   = 1,
1182                         .gpio0  = 0x87f9,
1183                 }, {
1184                         .type   = CX88_VMUX_SVIDEO,
1185                         .vmux   = 2,
1186                         .gpio0  = 0x87f9,
1187                 } },
1188                 .mpeg           = CX88_MPEG_DVB,
1189         },
1190         [CX88_BOARD_KWORLD_MCE200_DELUXE] = {
1191                 /*
1192                  * FIXME: tested TV input only, disabled composite,
1193                  * svideo and radio until they can be tested also.
1194                  */
1195                 .name           = "Kworld MCE 200 Deluxe",
1196                 .tuner_type     = TUNER_TENA_9533_DI,
1197                 .radio_type     = UNSET,
1198                 .tda9887_conf   = TDA9887_PRESENT,
1199                 .tuner_addr     = ADDR_UNSET,
1200                 .radio_addr     = ADDR_UNSET,
1201                 .input          = { {
1202                         .type   = CX88_VMUX_TELEVISION,
1203                         .vmux   = 0,
1204                         .gpio0  = 0x0000BDE6
1205                 } },
1206                 .mpeg           = CX88_MPEG_BLACKBIRD,
1207         },
1208         [CX88_BOARD_PIXELVIEW_PLAYTV_P7000] = {
1209                 /* FIXME: SVideo, Composite and FM inputs are untested */
1210                 .name           = "PixelView PlayTV P7000",
1211                 .tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
1212                 .radio_type     = UNSET,
1213                 .tuner_addr     = ADDR_UNSET,
1214                 .radio_addr     = ADDR_UNSET,
1215                 .tda9887_conf   = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE |
1216                                   TDA9887_PORT2_ACTIVE,
1217                 .input          = { {
1218                         .type   = CX88_VMUX_TELEVISION,
1219                         .vmux   = 0,
1220                         .gpio0  = 0x5da6,
1221                 } },
1222                 .mpeg           = CX88_MPEG_BLACKBIRD,
1223         },
1224         [CX88_BOARD_NPGTECH_REALTV_TOP10FM] = {
1225                 .name           = "NPG Tech Real TV FM Top 10",
1226                 .tuner_type     = TUNER_TNF_5335MF, /* Actually a TNF9535 */
1227                 .radio_type     = UNSET,
1228                 .tuner_addr     = ADDR_UNSET,
1229                 .radio_addr     = ADDR_UNSET,
1230                 .input          = { {
1231                         .type   = CX88_VMUX_TELEVISION,
1232                         .vmux   = 0,
1233                         .gpio0  = 0x0788,
1234                 }, {
1235                         .type   = CX88_VMUX_COMPOSITE1,
1236                         .vmux   = 1,
1237                         .gpio0  = 0x078b,
1238                 }, {
1239                         .type   = CX88_VMUX_SVIDEO,
1240                         .vmux   = 2,
1241                         .gpio0  = 0x078b,
1242                 } },
1243                 .radio = {
1244                          .type  = CX88_RADIO,
1245                          .gpio0 = 0x074a,
1246                 },
1247         },
1248         [CX88_BOARD_WINFAST_DTV2000H] = {
1249                 .name           = "WinFast DTV2000 H",
1250                 .tuner_type     = TUNER_PHILIPS_FMD1216ME_MK3,
1251                 .radio_type     = UNSET,
1252                 .tuner_addr     = ADDR_UNSET,
1253                 .radio_addr     = ADDR_UNSET,
1254                 .tda9887_conf   = TDA9887_PRESENT,
1255                 .input          = { {
1256                         .type   = CX88_VMUX_TELEVISION,
1257                         .vmux   = 0,
1258                         .gpio0  = 0x00017304,
1259                         .gpio1  = 0x00008203,
1260                         .gpio2  = 0x00017304,
1261                         .gpio3  = 0x02000000,
1262                 }, {
1263                         .type   = CX88_VMUX_COMPOSITE1,
1264                         .vmux   = 1,
1265                         .gpio0  = 0x0001d701,
1266                         .gpio1  = 0x0000b207,
1267                         .gpio2  = 0x0001d701,
1268                         .gpio3  = 0x02000000,
1269                 }, {
1270                         .type   = CX88_VMUX_COMPOSITE2,
1271                         .vmux   = 2,
1272                         .gpio0  = 0x0001d503,
1273                         .gpio1  = 0x0000b207,
1274                         .gpio2  = 0x0001d503,
1275                         .gpio3  = 0x02000000,
1276                 }, {
1277                         .type   = CX88_VMUX_SVIDEO,
1278                         .vmux   = 3,
1279                         .gpio0  = 0x0001d701,
1280                         .gpio1  = 0x0000b207,
1281                         .gpio2  = 0x0001d701,
1282                         .gpio3  = 0x02000000,
1283                 } },
1284                 .radio = {
1285                          .type  = CX88_RADIO,
1286                          .gpio0 = 0x00015702,
1287                          .gpio1 = 0x0000f207,
1288                          .gpio2 = 0x00015702,
1289                          .gpio3 = 0x02000000,
1290                 },
1291                 .mpeg           = CX88_MPEG_DVB,
1292         },
1293         [CX88_BOARD_WINFAST_DTV2000H_J] = {
1294                 .name           = "WinFast DTV2000 H rev. J",
1295                 .tuner_type     = TUNER_PHILIPS_FMD1216MEX_MK3,
1296                 .radio_type     = UNSET,
1297                 .tuner_addr     = ADDR_UNSET,
1298                 .radio_addr     = ADDR_UNSET,
1299                 .tda9887_conf   = TDA9887_PRESENT,
1300                 .input          = { {
1301                         .type   = CX88_VMUX_TELEVISION,
1302                         .vmux   = 0,
1303                         .gpio0  = 0x00017300,
1304                         .gpio1  = 0x00008207,
1305                         .gpio2  = 0x00000000,
1306                         .gpio3  = 0x02000000,
1307                 }, {
1308                         .type   = CX88_VMUX_TELEVISION,
1309                         .vmux   = 0,
1310                         .gpio0  = 0x00018300,
1311                         .gpio1  = 0x0000f207,
1312                         .gpio2  = 0x00017304,
1313                         .gpio3  = 0x02000000,
1314                 }, {
1315                         .type   = CX88_VMUX_COMPOSITE1,
1316                         .vmux   = 1,
1317                         .gpio0  = 0x00018301,
1318                         .gpio1  = 0x0000f207,
1319                         .gpio2  = 0x00017304,
1320                         .gpio3  = 0x02000000,
1321                 }, {
1322                         .type   = CX88_VMUX_SVIDEO,
1323                         .vmux   = 2,
1324                         .gpio0  = 0x00018301,
1325                         .gpio1  = 0x0000f207,
1326                         .gpio2  = 0x00017304,
1327                         .gpio3  = 0x02000000,
1328                 } },
1329                 .radio = {
1330                          .type  = CX88_RADIO,
1331                          .gpio0 = 0x00015702,
1332                          .gpio1 = 0x0000f207,
1333                          .gpio2 = 0x00015702,
1334                          .gpio3 = 0x02000000,
1335                 },
1336                 .mpeg           = CX88_MPEG_DVB,
1337         },
1338         [CX88_BOARD_GENIATECH_DVBS] = {
1339                 .name          = "Geniatech DVB-S",
1340                 .tuner_type    = UNSET,
1341                 .radio_type    = UNSET,
1342                 .tuner_addr    = ADDR_UNSET,
1343                 .radio_addr    = ADDR_UNSET,
1344                 .input  = { {
1345                         .type  = CX88_VMUX_DVB,
1346                         .vmux  = 0,
1347                 }, {
1348                         .type  = CX88_VMUX_COMPOSITE1,
1349                         .vmux  = 1,
1350                 } },
1351                 .mpeg           = CX88_MPEG_DVB,
1352         },
1353         [CX88_BOARD_HAUPPAUGE_HVR3000] = {
1354                 .name           = "Hauppauge WinTV-HVR3000 TriMode Analog/DVB-S/DVB-T",
1355                 .tuner_type     = TUNER_PHILIPS_FMD1216ME_MK3,
1356                 .radio_type     = UNSET,
1357                 .tuner_addr     = ADDR_UNSET,
1358                 .radio_addr     = ADDR_UNSET,
1359                 .tda9887_conf   = TDA9887_PRESENT,
1360                 .audio_chip     = CX88_AUDIO_WM8775,
1361                 .input          = { {
1362                         .type   = CX88_VMUX_TELEVISION,
1363                         .vmux   = 0,
1364                         .gpio0  = 0x84bf,
1365                         /* 1: TV Audio / FM Mono */
1366                         .audioroute = 1,
1367                 }, {
1368                         .type   = CX88_VMUX_COMPOSITE1,
1369                         .vmux   = 1,
1370                         .gpio0  = 0x84bf,
1371                         /* 2: Line-In */
1372                         .audioroute = 2,
1373                 }, {
1374                         .type   = CX88_VMUX_SVIDEO,
1375                         .vmux   = 2,
1376                         .gpio0  = 0x84bf,
1377                         /* 2: Line-In */
1378                         .audioroute = 2,
1379                 } },
1380                 .radio = {
1381                         .type   = CX88_RADIO,
1382                         .gpio0  = 0x84bf,
1383                         /* 4: FM Stereo (untested) */
1384                         .audioroute = 8,
1385                 },
1386                 .mpeg           = CX88_MPEG_DVB,
1387                 .num_frontends  = 2,
1388         },
1389         [CX88_BOARD_NORWOOD_MICRO] = {
1390                 .name           = "Norwood Micro TV Tuner",
1391                 .tuner_type     = TUNER_TNF_5335MF,
1392                 .radio_type     = UNSET,
1393                 .tuner_addr     = ADDR_UNSET,
1394                 .radio_addr     = ADDR_UNSET,
1395                 .input          = { {
1396                         .type   = CX88_VMUX_TELEVISION,
1397                         .vmux   = 0,
1398                         .gpio0  = 0x0709,
1399                 }, {
1400                         .type   = CX88_VMUX_COMPOSITE1,
1401                         .vmux   = 1,
1402                         .gpio0  = 0x070b,
1403                 }, {
1404                         .type   = CX88_VMUX_SVIDEO,
1405                         .vmux   = 2,
1406                         .gpio0  = 0x070b,
1407                 } },
1408         },
1409         [CX88_BOARD_TE_DTV_250_OEM_SWANN] = {
1410                 .name           = "Shenzhen Tungsten Ages Tech TE-DTV-250 / Swann OEM",
1411                 .tuner_type     = TUNER_LG_PAL_NEW_TAPC,
1412                 .radio_type     = UNSET,
1413                 .tuner_addr     = ADDR_UNSET,
1414                 .radio_addr     = ADDR_UNSET,
1415                 .input          = { {
1416                         .type   = CX88_VMUX_TELEVISION,
1417                         .vmux   = 0,
1418                         .gpio0  = 0x003fffff,
1419                         .gpio1  = 0x00e00000,
1420                         .gpio2  = 0x003fffff,
1421                         .gpio3  = 0x02000000,
1422                 }, {
1423                         .type   = CX88_VMUX_COMPOSITE1,
1424                         .vmux   = 1,
1425                         .gpio0  = 0x003fffff,
1426                         .gpio1  = 0x00e00000,
1427                         .gpio2  = 0x003fffff,
1428                         .gpio3  = 0x02000000,
1429                 }, {
1430                         .type   = CX88_VMUX_SVIDEO,
1431                         .vmux   = 2,
1432                         .gpio0  = 0x003fffff,
1433                         .gpio1  = 0x00e00000,
1434                         .gpio2  = 0x003fffff,
1435                         .gpio3  = 0x02000000,
1436                 } },
1437         },
1438         [CX88_BOARD_HAUPPAUGE_HVR1300] = {
1439                 .name           = "Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder",
1440                 .tuner_type     = TUNER_PHILIPS_FMD1216ME_MK3,
1441                 .radio_type     = UNSET,
1442                 .tuner_addr     = ADDR_UNSET,
1443                 .radio_addr     = ADDR_UNSET,
1444                 .tda9887_conf   = TDA9887_PRESENT,
1445                 .audio_chip     = CX88_AUDIO_WM8775,
1446                 /*
1447                  * gpio0 as reported by Mike Crash <mike AT mikecrash.com>
1448                  */
1449                 .input          = { {
1450                         .type   = CX88_VMUX_TELEVISION,
1451                         .vmux   = 0,
1452                         .gpio0  = 0xef88,
1453                         /* 1: TV Audio / FM Mono */
1454                         .audioroute = 1,
1455                 }, {
1456                         .type   = CX88_VMUX_COMPOSITE1,
1457                         .vmux   = 1,
1458                         .gpio0  = 0xef88,
1459                         /* 2: Line-In */
1460                         .audioroute = 2,
1461                 }, {
1462                         .type   = CX88_VMUX_SVIDEO,
1463                         .vmux   = 2,
1464                         .gpio0  = 0xef88,
1465                         /* 2: Line-In */
1466                         .audioroute = 2,
1467                 } },
1468                 .mpeg           = CX88_MPEG_DVB | CX88_MPEG_BLACKBIRD,
1469                 .radio = {
1470                         .type   = CX88_RADIO,
1471                         .gpio0  = 0xef88,
1472                         /* 4: FM Stereo (untested) */
1473                         .audioroute = 8,
1474                 },
1475         },
1476         [CX88_BOARD_SAMSUNG_SMT_7020] = {
1477                 .name           = "Samsung SMT 7020 DVB-S",
1478                 .tuner_type     = UNSET,
1479                 .radio_type     = UNSET,
1480                 .tuner_addr     = ADDR_UNSET,
1481                 .radio_addr     = ADDR_UNSET,
1482                 .input          = { {
1483                         .type   = CX88_VMUX_DVB,
1484                         .vmux   = 0,
1485                 } },
1486                 .mpeg           = CX88_MPEG_DVB,
1487         },
1488         [CX88_BOARD_ADSTECH_PTV_390] = {
1489                 .name           = "ADS Tech Instant Video PCI",
1490                 .tuner_type     = UNSET,
1491                 .radio_type     = UNSET,
1492                 .tuner_addr     = ADDR_UNSET,
1493                 .radio_addr     = ADDR_UNSET,
1494                 .input          = { {
1495                         .type   = CX88_VMUX_DEBUG,
1496                         .vmux   = 3,
1497                         .gpio0  = 0x04ff,
1498                 }, {
1499                         .type   = CX88_VMUX_COMPOSITE1,
1500                         .vmux   = 1,
1501                         .gpio0  = 0x07fa,
1502                 }, {
1503                         .type   = CX88_VMUX_SVIDEO,
1504                         .vmux   = 2,
1505                         .gpio0  = 0x07fa,
1506                 } },
1507         },
1508         [CX88_BOARD_PINNACLE_PCTV_HD_800i] = {
1509                 .name           = "Pinnacle PCTV HD 800i",
1510                 .tuner_type     = TUNER_XC5000,
1511                 .radio_type     = UNSET,
1512                 .tuner_addr     = ADDR_UNSET,
1513                 .radio_addr     = ADDR_UNSET,
1514                 .input          = { {
1515                         .type   = CX88_VMUX_TELEVISION,
1516                         .vmux   = 0,
1517                         .gpio0  = 0x04fb,
1518                         .gpio1  = 0x10ff,
1519                 }, {
1520                         .type   = CX88_VMUX_COMPOSITE1,
1521                         .vmux   = 1,
1522                         .gpio0  = 0x04fb,
1523                         .gpio1  = 0x10ef,
1524                         .audioroute = 1,
1525                 }, {
1526                         .type   = CX88_VMUX_SVIDEO,
1527                         .vmux   = 2,
1528                         .gpio0  = 0x04fb,
1529                         .gpio1  = 0x10ef,
1530                         .audioroute = 1,
1531                 } },
1532                 .mpeg           = CX88_MPEG_DVB,
1533         },
1534         [CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO] = {
1535                 .name           = "DViCO FusionHDTV 5 PCI nano",
1536                 /* xc3008 tuner, digital only for now */
1537                 .tuner_type     = UNSET,
1538                 .radio_type     = UNSET,
1539                 .tuner_addr     = ADDR_UNSET,
1540                 .radio_addr     = ADDR_UNSET,
1541                 .input          = { {
1542                         .type   = CX88_VMUX_TELEVISION,
1543                         .vmux   = 0,
1544                         .gpio0  = 0x000027df, /* Unconfirmed */
1545                 }, {
1546                         .type   = CX88_VMUX_COMPOSITE1,
1547                         .vmux   = 1,
1548                         .gpio0  = 0x000027df, /* Unconfirmed */
1549                         .audioroute = 1,
1550                 }, {
1551                         .type   = CX88_VMUX_SVIDEO,
1552                         .vmux   = 2,
1553                         .gpio0  = 0x000027df, /* Unconfirmed */
1554                         .audioroute = 1,
1555                 } },
1556                 .mpeg           = CX88_MPEG_DVB,
1557         },
1558         [CX88_BOARD_PINNACLE_HYBRID_PCTV] = {
1559                 .name           = "Pinnacle Hybrid PCTV",
1560                 .tuner_type     = TUNER_XC2028,
1561                 .tuner_addr     = 0x61,
1562                 .radio_type     = UNSET,
1563                 .radio_addr     = ADDR_UNSET,
1564                 .input          = { {
1565                         .type   = CX88_VMUX_TELEVISION,
1566                         .vmux   = 0,
1567                         .gpio0  = 0x004ff,
1568                         .gpio1  = 0x010ff,
1569                         .gpio2  = 0x00001,
1570                 }, {
1571                         .type   = CX88_VMUX_COMPOSITE1,
1572                         .vmux   = 1,
1573                         .gpio0  = 0x004fb,
1574                         .gpio1  = 0x010ef,
1575                         .audioroute = 1,
1576                 }, {
1577                         .type   = CX88_VMUX_SVIDEO,
1578                         .vmux   = 2,
1579                         .gpio0  = 0x004fb,
1580                         .gpio1  = 0x010ef,
1581                         .audioroute = 1,
1582                 } },
1583                 .radio = {
1584                         .type   = CX88_RADIO,
1585                         .gpio0  = 0x004ff,
1586                         .gpio1  = 0x010ff,
1587                         .gpio2  = 0x0ff,
1588                 },
1589                 .mpeg           = CX88_MPEG_DVB,
1590         },
1591         /* Terry Wu <terrywu2009@gmail.com> */
1592         /* TV Audio :      set GPIO 2, 18, 19 value to 0, 1, 0 */
1593         /* FM Audio :      set GPIO 2, 18, 19 value to 0, 0, 0 */
1594         /* Line-in Audio : set GPIO 2, 18, 19 value to 0, 1, 1 */
1595         /* Mute Audio :    set GPIO 2 value to 1               */
1596         [CX88_BOARD_WINFAST_TV2000_XP_GLOBAL] = {
1597                 .name           = "Leadtek TV2000 XP Global",
1598                 .tuner_type     = TUNER_XC2028,
1599                 .tuner_addr     = 0x61,
1600                 .radio_type     = UNSET,
1601                 .radio_addr     = ADDR_UNSET,
1602                 .input          = { {
1603                         .type   = CX88_VMUX_TELEVISION,
1604                         .vmux   = 0,
1605                         .gpio0  = 0x0400,       /* pin 2 = 0 */
1606                         .gpio1  = 0x0000,
1607                         .gpio2  = 0x0C04,       /* pin 18 = 1, pin 19 = 0 */
1608                         .gpio3  = 0x0000,
1609                 }, {
1610                         .type   = CX88_VMUX_COMPOSITE1,
1611                         .vmux   = 1,
1612                         .gpio0  = 0x0400,       /* pin 2 = 0 */
1613                         .gpio1  = 0x0000,
1614                         .gpio2  = 0x0C0C,       /* pin 18 = 1, pin 19 = 1 */
1615                         .gpio3  = 0x0000,
1616                 }, {
1617                         .type   = CX88_VMUX_SVIDEO,
1618                         .vmux   = 2,
1619                         .gpio0  = 0x0400,       /* pin 2 = 0 */
1620                         .gpio1  = 0x0000,
1621                         .gpio2  = 0x0C0C,       /* pin 18 = 1, pin 19 = 1 */
1622                         .gpio3  = 0x0000,
1623                 } },
1624                 .radio = {
1625                         .type   = CX88_RADIO,
1626                         .gpio0  = 0x0400,        /* pin 2 = 0 */
1627                         .gpio1  = 0x0000,
1628                         .gpio2  = 0x0C00,       /* pin 18 = 0, pin 19 = 0 */
1629                         .gpio3  = 0x0000,
1630                 },
1631         },
1632         [CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F36] = {
1633                 .name           = "Leadtek TV2000 XP Global (SC4100)",
1634                 .tuner_type     = TUNER_XC4000,
1635                 .tuner_addr     = 0x61,
1636                 .radio_type     = UNSET,
1637                 .radio_addr     = ADDR_UNSET,
1638                 .input          = { {
1639                         .type   = CX88_VMUX_TELEVISION,
1640                         .vmux   = 0,
1641                         .gpio0  = 0x0400,       /* pin 2 = 0 */
1642                         .gpio1  = 0x0000,
1643                         .gpio2  = 0x0C04,       /* pin 18 = 1, pin 19 = 0 */
1644                         .gpio3  = 0x0000,
1645                 }, {
1646                         .type   = CX88_VMUX_COMPOSITE1,
1647                         .vmux   = 1,
1648                         .gpio0  = 0x0400,       /* pin 2 = 0 */
1649                         .gpio1  = 0x0000,
1650                         .gpio2  = 0x0C0C,       /* pin 18 = 1, pin 19 = 1 */
1651                         .gpio3  = 0x0000,
1652                 }, {
1653                         .type   = CX88_VMUX_SVIDEO,
1654                         .vmux   = 2,
1655                         .gpio0  = 0x0400,       /* pin 2 = 0 */
1656                         .gpio1  = 0x0000,
1657                         .gpio2  = 0x0C0C,       /* pin 18 = 1, pin 19 = 1 */
1658                         .gpio3  = 0x0000,
1659                 } },
1660                 .radio = {
1661                         .type   = CX88_RADIO,
1662                         .gpio0  = 0x0400,        /* pin 2 = 0 */
1663                         .gpio1  = 0x0000,
1664                         .gpio2  = 0x0C00,       /* pin 18 = 0, pin 19 = 0 */
1665                         .gpio3  = 0x0000,
1666                 },
1667         },
1668         [CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F43] = {
1669                 .name           = "Leadtek TV2000 XP Global (XC4100)",
1670                 .tuner_type     = TUNER_XC4000,
1671                 .tuner_addr     = 0x61,
1672                 .radio_type     = UNSET,
1673                 .radio_addr     = ADDR_UNSET,
1674                 .input          = { {
1675                         .type   = CX88_VMUX_TELEVISION,
1676                         .vmux   = 0,
1677                         .gpio0  = 0x0400,       /* pin 2 = 0 */
1678                         .gpio1  = 0x6040,       /* pin 14 = 1, pin 13 = 0 */
1679                         .gpio2  = 0x0000,
1680                         .gpio3  = 0x0000,
1681                 }, {
1682                         .type   = CX88_VMUX_COMPOSITE1,
1683                         .vmux   = 1,
1684                         .gpio0  = 0x0400,       /* pin 2 = 0 */
1685                         .gpio1  = 0x6060,       /* pin 14 = 1, pin 13 = 1 */
1686                         .gpio2  = 0x0000,
1687                         .gpio3  = 0x0000,
1688                 }, {
1689                         .type   = CX88_VMUX_SVIDEO,
1690                         .vmux   = 2,
1691                         .gpio0  = 0x0400,       /* pin 2 = 0 */
1692                         .gpio1  = 0x6060,       /* pin 14 = 1, pin 13 = 1 */
1693                         .gpio2  = 0x0000,
1694                         .gpio3  = 0x0000,
1695                 } },
1696                 .radio = {
1697                         .type   = CX88_RADIO,
1698                         .gpio0  = 0x0400,        /* pin 2 = 0 */
1699                         .gpio1  = 0x6000,        /* pin 14 = 1, pin 13 = 0 */
1700                         .gpio2  = 0x0000,
1701                         .gpio3  = 0x0000,
1702                 },
1703         },
1704         [CX88_BOARD_POWERCOLOR_REAL_ANGEL] = {
1705                 /* Long names may confuse LIRC. */
1706                 .name           = "PowerColor RA330",
1707                 .tuner_type     = TUNER_XC2028,
1708                 .tuner_addr     = 0x61,
1709                 .input          = { {
1710                         /*
1711                          * Due to the way the cx88 driver is written,
1712                          * there is no way to deactivate audio pass-
1713                          * through without this entry. Furthermore, if
1714                          * the TV mux entry is first, you get audio
1715                          * from the tuner on boot for a little while.
1716                          */
1717                         .type   = CX88_VMUX_DEBUG,
1718                         .vmux   = 3,
1719                         .gpio0 = 0x00ff,
1720                         .gpio1 = 0xf39d,
1721                         .gpio3 = 0x0000,
1722                 }, {
1723                         .type   = CX88_VMUX_TELEVISION,
1724                         .vmux   = 0,
1725                         .gpio0 = 0x00ff,
1726                         .gpio1 = 0xf35d,
1727                         .gpio3 = 0x0000,
1728                 }, {
1729                         .type   = CX88_VMUX_COMPOSITE1,
1730                         .vmux   = 1,
1731                         .gpio0 = 0x00ff,
1732                         .gpio1 = 0xf37d,
1733                         .gpio3 = 0x0000,
1734                 }, {
1735                         .type   = CX88_VMUX_SVIDEO,
1736                         .vmux   = 2,
1737                         .gpio0  = 0x000ff,
1738                         .gpio1  = 0x0f37d,
1739                         .gpio3  = 0x00000,
1740                 } },
1741                 .radio = {
1742                         .type   = CX88_RADIO,
1743                         .gpio0  = 0x000ff,
1744                         .gpio1  = 0x0f35d,
1745                         .gpio3  = 0x00000,
1746                 },
1747         },
1748         [CX88_BOARD_GENIATECH_X8000_MT] = {
1749                 /* Also PowerColor Real Angel 330 and Geniatech X800 OEM */
1750                 .name           = "Geniatech X8000-MT DVBT",
1751                 .tuner_type     = TUNER_XC2028,
1752                 .tuner_addr     = 0x61,
1753                 .input          = { {
1754                         .type   = CX88_VMUX_TELEVISION,
1755                         .vmux   = 0,
1756                         .gpio0  = 0x00000000,
1757                         .gpio1  = 0x00e3e341,
1758                         .gpio2  = 0x00000000,
1759                         .gpio3  = 0x00000000,
1760                 }, {
1761                         .type   = CX88_VMUX_COMPOSITE1,
1762                         .vmux   = 1,
1763                         .gpio0  = 0x00000000,
1764                         .gpio1  = 0x00e3e361,
1765                         .gpio2  = 0x00000000,
1766                         .gpio3  = 0x00000000,
1767                 }, {
1768                         .type   = CX88_VMUX_SVIDEO,
1769                         .vmux   = 2,
1770                         .gpio0  = 0x00000000,
1771                         .gpio1  = 0x00e3e361,
1772                         .gpio2  = 0x00000000,
1773                         .gpio3  = 0x00000000,
1774                 } },
1775                 .radio = {
1776                         .type   = CX88_RADIO,
1777                         .gpio0  = 0x00000000,
1778                         .gpio1  = 0x00e3e341,
1779                         .gpio2  = 0x00000000,
1780                         .gpio3  = 0x00000000,
1781                 },
1782                 .mpeg           = CX88_MPEG_DVB,
1783         },
1784         [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO] = {
1785                 .name           = "DViCO FusionHDTV DVB-T PRO",
1786                 .tuner_type     = TUNER_XC2028,
1787                 .tuner_addr     = 0x61,
1788                 .radio_type     = UNSET,
1789                 .radio_addr     = ADDR_UNSET,
1790                 .input          = { {
1791                         .type   = CX88_VMUX_COMPOSITE1,
1792                         .vmux   = 1,
1793                         .gpio0  = 0x000067df,
1794                 }, {
1795                         .type   = CX88_VMUX_SVIDEO,
1796                         .vmux   = 2,
1797                         .gpio0  = 0x000067df,
1798                 } },
1799                 .mpeg           = CX88_MPEG_DVB,
1800         },
1801         [CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD] = {
1802                 .name           = "DViCO FusionHDTV 7 Gold",
1803                 .tuner_type     = TUNER_XC5000,
1804                 .radio_type     = UNSET,
1805                 .tuner_addr     = ADDR_UNSET,
1806                 .radio_addr     = ADDR_UNSET,
1807                 .input          = { {
1808                         .type   = CX88_VMUX_TELEVISION,
1809                         .vmux   = 0,
1810                         .gpio0  = 0x10df,
1811                 }, {
1812                         .type   = CX88_VMUX_COMPOSITE1,
1813                         .vmux   = 1,
1814                         .gpio0  = 0x16d9,
1815                 }, {
1816                         .type   = CX88_VMUX_SVIDEO,
1817                         .vmux   = 2,
1818                         .gpio0  = 0x16d9,
1819                 } },
1820                 .mpeg           = CX88_MPEG_DVB,
1821         },
1822         [CX88_BOARD_PROLINK_PV_8000GT] = {
1823                 .name           = "Prolink Pixelview MPEG 8000GT",
1824                 .tuner_type     = TUNER_XC2028,
1825                 .tuner_addr     = 0x61,
1826                 .input          = { {
1827                         .type   = CX88_VMUX_TELEVISION,
1828                         .vmux   = 0,
1829                         .gpio0 = 0x0ff,
1830                         .gpio2 = 0x0cfb,
1831                 }, {
1832                         .type   = CX88_VMUX_COMPOSITE1,
1833                         .vmux   = 1,
1834                         .gpio2 = 0x0cfb,
1835                 }, {
1836                         .type   = CX88_VMUX_SVIDEO,
1837                         .vmux   = 2,
1838                         .gpio2 = 0x0cfb,
1839                 } },
1840                 .radio = {
1841                         .type   = CX88_RADIO,
1842                         .gpio2 = 0x0cfb,
1843                 },
1844         },
1845         [CX88_BOARD_PROLINK_PV_GLOBAL_XTREME] = {
1846                 .name           = "Prolink Pixelview Global Extreme",
1847                 .tuner_type     = TUNER_XC2028,
1848                 .tuner_addr     = 0x61,
1849                 .input          = { {
1850                         .type   = CX88_VMUX_TELEVISION,
1851                         .vmux   = 0,
1852                         .gpio0 = 0x04fb,
1853                         .gpio1 = 0x04080,
1854                         .gpio2 = 0x0cf7,
1855                 }, {
1856                         .type   = CX88_VMUX_COMPOSITE1,
1857                         .vmux   = 1,
1858                         .gpio0 = 0x04fb,
1859                         .gpio1 = 0x04080,
1860                         .gpio2 = 0x0cfb,
1861                 }, {
1862                         .type   = CX88_VMUX_SVIDEO,
1863                         .vmux   = 2,
1864                         .gpio0 = 0x04fb,
1865                         .gpio1 = 0x04080,
1866                         .gpio2 = 0x0cfb,
1867                 } },
1868                 .radio = {
1869                         .type   = CX88_RADIO,
1870                         .gpio0 = 0x04ff,
1871                         .gpio1 = 0x04080,
1872                         .gpio2 = 0x0cf7,
1873                 },
1874         },
1875         /*
1876          * Both radio, analog and ATSC work with this board.
1877          * However, for analog to work, s5h1409 gate should be open,
1878          * otherwise, tuner-xc3028 won't be detected.
1879          * A proper fix require using the newer i2c methods to add
1880          * tuner-xc3028 without doing an i2c probe.
1881          */
1882         [CX88_BOARD_KWORLD_ATSC_120] = {
1883                 .name           = "Kworld PlusTV HD PCI 120 (ATSC 120)",
1884                 .tuner_type     = TUNER_XC2028,
1885                 .radio_type     = UNSET,
1886                 .tuner_addr     = ADDR_UNSET,
1887                 .radio_addr     = ADDR_UNSET,
1888                 .input          = { {
1889                         .type   = CX88_VMUX_TELEVISION,
1890                         .vmux   = 0,
1891                         .gpio0  = 0x000000ff,
1892                         .gpio1  = 0x0000f35d,
1893                         .gpio2  = 0x00000000,
1894                 }, {
1895                         .type   = CX88_VMUX_COMPOSITE1,
1896                         .vmux   = 1,
1897                         .gpio0  = 0x000000ff,
1898                         .gpio1  = 0x0000f37e,
1899                         .gpio2  = 0x00000000,
1900                 }, {
1901                         .type   = CX88_VMUX_SVIDEO,
1902                         .vmux   = 2,
1903                         .gpio0  = 0x000000ff,
1904                         .gpio1  = 0x0000f37e,
1905                         .gpio2  = 0x00000000,
1906                 } },
1907                 .radio = {
1908                         .type   = CX88_RADIO,
1909                         .gpio0  = 0x000000ff,
1910                         .gpio1  = 0x0000f35d,
1911                         .gpio2  = 0x00000000,
1912                 },
1913                 .mpeg           = CX88_MPEG_DVB,
1914         },
1915         [CX88_BOARD_HAUPPAUGE_HVR4000] = {
1916                 .name           = "Hauppauge WinTV-HVR4000 DVB-S/S2/T/Hybrid",
1917                 .tuner_type     = TUNER_PHILIPS_FMD1216ME_MK3,
1918                 .radio_type     = UNSET,
1919                 .tuner_addr     = ADDR_UNSET,
1920                 .radio_addr     = ADDR_UNSET,
1921                 .tda9887_conf   = TDA9887_PRESENT,
1922                 .audio_chip     = CX88_AUDIO_WM8775,
1923                 /*
1924                  * GPIO0 (WINTV2000)
1925                  *
1926                  * Analogue     SAT     DVB-T
1927                  * Antenna      0xc4bf  0xc4bb
1928                  * Composite    0xc4bf  0xc4bb
1929                  * S-Video      0xc4bf  0xc4bb
1930                  * Composite1   0xc4ff  0xc4fb
1931                  * S-Video1     0xc4ff  0xc4fb
1932                  *
1933                  * BIT  VALUE   FUNCTION GP{x}_IO
1934                  * 0    1       I:?
1935                  * 1    1       I:?
1936                  * 2    1       O:MPEG PORT 0=DVB-T 1=DVB-S
1937                  * 3    1       I:?
1938                  * 4    1       I:?
1939                  * 5    1       I:?
1940                  * 6    0       O:INPUT SELECTOR 0=INTERNAL 1=EXPANSION
1941                  * 7    1       O:DVB-T DEMOD RESET LOW
1942                  *
1943                  * BIT  VALUE   FUNCTION GP{x}_OE
1944                  * 8    0       I
1945                  * 9    0       I
1946                  * a    1       O
1947                  * b    0       I
1948                  * c    0       I
1949                  * d    0       I
1950                  * e    1       O
1951                  * f    1       O
1952                  *
1953                  * WM8775 ADC
1954                  *
1955                  * 1: TV Audio / FM Mono
1956                  * 2: Line-In
1957                  * 3: Line-In Expansion
1958                  * 4: FM Stereo
1959                  */
1960                 .input          = { {
1961                         .type   = CX88_VMUX_TELEVISION,
1962                         .vmux   = 0,
1963                         .gpio0  = 0xc4bf,
1964                         /* 1: TV Audio / FM Mono */
1965                         .audioroute = 1,
1966                 }, {
1967                         .type   = CX88_VMUX_COMPOSITE1,
1968                         .vmux   = 1,
1969                         .gpio0  = 0xc4bf,
1970                         /* 2: Line-In */
1971                         .audioroute = 2,
1972                 }, {
1973                         .type   = CX88_VMUX_SVIDEO,
1974                         .vmux   = 2,
1975                         .gpio0  = 0xc4bf,
1976                         /* 2: Line-In */
1977                         .audioroute = 2,
1978                 } },
1979                 .radio = {
1980                         .type   = CX88_RADIO,
1981                         .gpio0  = 0xc4bf,
1982                         /* 4: FM Stereo */
1983                         .audioroute = 8,
1984                 },
1985                 .mpeg           = CX88_MPEG_DVB,
1986                 .num_frontends  = 2,
1987         },
1988         [CX88_BOARD_HAUPPAUGE_HVR4000LITE] = {
1989                 .name           = "Hauppauge WinTV-HVR4000(Lite) DVB-S/S2",
1990                 .tuner_type     = UNSET,
1991                 .radio_type     = UNSET,
1992                 .tuner_addr     = ADDR_UNSET,
1993                 .radio_addr     = ADDR_UNSET,
1994                 .input          = { {
1995                         .type   = CX88_VMUX_DVB,
1996                         .vmux   = 0,
1997                 } },
1998                 .mpeg           = CX88_MPEG_DVB,
1999         },
2000         [CX88_BOARD_TEVII_S420] = {
2001                 .name           = "TeVii S420 DVB-S",
2002                 .tuner_type     = UNSET,
2003                 .radio_type     = UNSET,
2004                 .tuner_addr     = ADDR_UNSET,
2005                 .radio_addr     = ADDR_UNSET,
2006                 .input          = { {
2007                         .type   = CX88_VMUX_DVB,
2008                         .vmux   = 0,
2009                 } },
2010                 .mpeg           = CX88_MPEG_DVB,
2011         },
2012         [CX88_BOARD_TEVII_S460] = {
2013                 .name           = "TeVii S460 DVB-S/S2",
2014                 .tuner_type     = UNSET,
2015                 .radio_type     = UNSET,
2016                 .tuner_addr     = ADDR_UNSET,
2017                 .radio_addr     = ADDR_UNSET,
2018                 .input          = { {
2019                         .type   = CX88_VMUX_DVB,
2020                         .vmux   = 0,
2021                 } },
2022                 .mpeg           = CX88_MPEG_DVB,
2023         },
2024         [CX88_BOARD_TEVII_S464] = {
2025                 .name           = "TeVii S464 DVB-S/S2",
2026                 .tuner_type     = UNSET,
2027                 .radio_type     = UNSET,
2028                 .tuner_addr     = ADDR_UNSET,
2029                 .radio_addr     = ADDR_UNSET,
2030                 .input          = { {
2031                         .type   = CX88_VMUX_DVB,
2032                         .vmux   = 0,
2033                 } },
2034                 .mpeg           = CX88_MPEG_DVB,
2035         },
2036         [CX88_BOARD_OMICOM_SS4_PCI] = {
2037                 .name           = "Omicom SS4 DVB-S/S2 PCI",
2038                 .tuner_type     = UNSET,
2039                 .radio_type     = UNSET,
2040                 .tuner_addr     = ADDR_UNSET,
2041                 .radio_addr     = ADDR_UNSET,
2042                 .input          = { {
2043                         .type   = CX88_VMUX_DVB,
2044                         .vmux   = 0,
2045                 } },
2046                 .mpeg           = CX88_MPEG_DVB,
2047         },
2048         [CX88_BOARD_TBS_8910] = {
2049                 .name           = "TBS 8910 DVB-S",
2050                 .tuner_type     = UNSET,
2051                 .radio_type     = UNSET,
2052                 .tuner_addr     = ADDR_UNSET,
2053                 .radio_addr     = ADDR_UNSET,
2054                 .input          = { {
2055                         .type   = CX88_VMUX_DVB,
2056                         .vmux   = 0,
2057                 } },
2058                 .mpeg           = CX88_MPEG_DVB,
2059         },
2060         [CX88_BOARD_TBS_8920] = {
2061                 .name           = "TBS 8920 DVB-S/S2",
2062                 .tuner_type     = UNSET,
2063                 .radio_type     = UNSET,
2064                 .tuner_addr     = ADDR_UNSET,
2065                 .radio_addr     = ADDR_UNSET,
2066                 .input          = { {
2067                         .type   = CX88_VMUX_DVB,
2068                         .vmux   = 0,
2069                         .gpio0  = 0x8080,
2070                 } },
2071                 .mpeg           = CX88_MPEG_DVB,
2072         },
2073         [CX88_BOARD_PROF_6200] = {
2074                 .name           = "Prof 6200 DVB-S",
2075                 .tuner_type     = UNSET,
2076                 .radio_type     = UNSET,
2077                 .tuner_addr     = ADDR_UNSET,
2078                 .radio_addr     = ADDR_UNSET,
2079                 .input          = { {
2080                         .type   = CX88_VMUX_DVB,
2081                         .vmux   = 0,
2082                 } },
2083                 .mpeg           = CX88_MPEG_DVB,
2084         },
2085         [CX88_BOARD_PROF_7300] = {
2086                 .name           = "PROF 7300 DVB-S/S2",
2087                 .tuner_type     = UNSET,
2088                 .radio_type     = UNSET,
2089                 .tuner_addr     = ADDR_UNSET,
2090                 .radio_addr     = ADDR_UNSET,
2091                 .input          = { {
2092                         .type   = CX88_VMUX_DVB,
2093                         .vmux   = 0,
2094                 } },
2095                 .mpeg           = CX88_MPEG_DVB,
2096         },
2097         [CX88_BOARD_SATTRADE_ST4200] = {
2098                 .name           = "SATTRADE ST4200 DVB-S/S2",
2099                 .tuner_type     = UNSET,
2100                 .radio_type     = UNSET,
2101                 .tuner_addr     = ADDR_UNSET,
2102                 .radio_addr     = ADDR_UNSET,
2103                 .input          = { {
2104                         .type   = CX88_VMUX_DVB,
2105                         .vmux   = 0,
2106                 } },
2107                 .mpeg           = CX88_MPEG_DVB,
2108         },
2109         [CX88_BOARD_TERRATEC_CINERGY_HT_PCI_MKII] = {
2110                 .name           = "Terratec Cinergy HT PCI MKII",
2111                 .tuner_type     = TUNER_XC2028,
2112                 .tuner_addr     = 0x61,
2113                 .radio_type     = UNSET,
2114                 .radio_addr     = ADDR_UNSET,
2115                 .input          = { {
2116                         .type   = CX88_VMUX_TELEVISION,
2117                         .vmux   = 0,
2118                         .gpio0  = 0x004ff,
2119                         .gpio1  = 0x010ff,
2120                         .gpio2  = 0x00001,
2121                 }, {
2122                         .type   = CX88_VMUX_COMPOSITE1,
2123                         .vmux   = 1,
2124                         .gpio0  = 0x004fb,
2125                         .gpio1  = 0x010ef,
2126                         .audioroute = 1,
2127                 }, {
2128                         .type   = CX88_VMUX_SVIDEO,
2129                         .vmux   = 2,
2130                         .gpio0  = 0x004fb,
2131                         .gpio1  = 0x010ef,
2132                         .audioroute = 1,
2133                 } },
2134                 .radio = {
2135                         .type   = CX88_RADIO,
2136                         .gpio0  = 0x004ff,
2137                         .gpio1  = 0x010ff,
2138                         .gpio2  = 0x0ff,
2139                 },
2140                 .mpeg           = CX88_MPEG_DVB,
2141         },
2142         [CX88_BOARD_HAUPPAUGE_IRONLY] = {
2143                 .name           = "Hauppauge WinTV-IR Only",
2144                 .tuner_type     = UNSET,
2145                 .radio_type     = UNSET,
2146                 .tuner_addr     = ADDR_UNSET,
2147                 .radio_addr     = ADDR_UNSET,
2148         },
2149         [CX88_BOARD_WINFAST_DTV1800H] = {
2150                 .name           = "Leadtek WinFast DTV1800 Hybrid",
2151                 .tuner_type     = TUNER_XC2028,
2152                 .radio_type     = UNSET,
2153                 .tuner_addr     = 0x61,
2154                 .radio_addr     = ADDR_UNSET,
2155                 /*
2156                  * GPIO setting
2157                  *
2158                  *  2: mute (0=off,1=on)
2159                  * 12: tuner reset pin
2160                  * 13: audio source (0=tuner audio,1=line in)
2161                  * 14: FM (0=on,1=off ???)
2162                  */
2163                 .input          = { {
2164                         .type   = CX88_VMUX_TELEVISION,
2165                         .vmux   = 0,
2166                         .gpio0  = 0x0400,       /* pin 2 = 0 */
2167                         .gpio1  = 0x6040,       /* pin 13 = 0, pin 14 = 1 */
2168                         .gpio2  = 0x0000,
2169                 }, {
2170                         .type   = CX88_VMUX_COMPOSITE1,
2171                         .vmux   = 1,
2172                         .gpio0  = 0x0400,       /* pin 2 = 0 */
2173                         .gpio1  = 0x6060,       /* pin 13 = 1, pin 14 = 1 */
2174                         .gpio2  = 0x0000,
2175                 }, {
2176                         .type   = CX88_VMUX_SVIDEO,
2177                         .vmux   = 2,
2178                         .gpio0  = 0x0400,       /* pin 2 = 0 */
2179                         .gpio1  = 0x6060,       /* pin 13 = 1, pin 14 = 1 */
2180                         .gpio2  = 0x0000,
2181                 } },
2182                 .radio = {
2183                         .type   = CX88_RADIO,
2184                         .gpio0  = 0x0400,       /* pin 2 = 0 */
2185                         .gpio1  = 0x6000,       /* pin 13 = 0, pin 14 = 0 */
2186                         .gpio2  = 0x0000,
2187                 },
2188                 .mpeg           = CX88_MPEG_DVB,
2189         },
2190         [CX88_BOARD_WINFAST_DTV1800H_XC4000] = {
2191                 .name           = "Leadtek WinFast DTV1800 H (XC4000)",
2192                 .tuner_type     = TUNER_XC4000,
2193                 .radio_type     = UNSET,
2194                 .tuner_addr     = 0x61,
2195                 .radio_addr     = ADDR_UNSET,
2196                 /*
2197                  * GPIO setting
2198                  *
2199                  *  2: mute (0=off,1=on)
2200                  * 12: tuner reset pin
2201                  * 13: audio source (0=tuner audio,1=line in)
2202                  * 14: FM (0=on,1=off ???)
2203                  */
2204                 .input          = { {
2205                         .type   = CX88_VMUX_TELEVISION,
2206                         .vmux   = 0,
2207                         .gpio0  = 0x0400,       /* pin 2 = 0 */
2208                         .gpio1  = 0x6040,       /* pin 13 = 0, pin 14 = 1 */
2209                         .gpio2  = 0x0000,
2210                 }, {
2211                         .type   = CX88_VMUX_COMPOSITE1,
2212                         .vmux   = 1,
2213                         .gpio0  = 0x0400,       /* pin 2 = 0 */
2214                         .gpio1  = 0x6060,       /* pin 13 = 1, pin 14 = 1 */
2215                         .gpio2  = 0x0000,
2216                 }, {
2217                         .type   = CX88_VMUX_SVIDEO,
2218                         .vmux   = 2,
2219                         .gpio0  = 0x0400,       /* pin 2 = 0 */
2220                         .gpio1  = 0x6060,       /* pin 13 = 1, pin 14 = 1 */
2221                         .gpio2  = 0x0000,
2222                 } },
2223                 .radio = {
2224                         .type   = CX88_RADIO,
2225                         .gpio0  = 0x0400,       /* pin 2 = 0 */
2226                         .gpio1  = 0x6000,       /* pin 13 = 0, pin 14 = 0 */
2227                         .gpio2  = 0x0000,
2228                 },
2229                 .mpeg           = CX88_MPEG_DVB,
2230         },
2231         [CX88_BOARD_WINFAST_DTV2000H_PLUS] = {
2232                 .name           = "Leadtek WinFast DTV2000 H PLUS",
2233                 .tuner_type     = TUNER_XC4000,
2234                 .radio_type     = UNSET,
2235                 .tuner_addr     = 0x61,
2236                 .radio_addr     = ADDR_UNSET,
2237                 /*
2238                  * GPIO
2239                  *   2: 1: mute audio
2240                  *  12: 0: reset XC4000
2241                  *  13: 1: audio input is line in (0: tuner)
2242                  *  14: 0: FM radio
2243                  *  16: 0: RF input is cable
2244                  */
2245                 .input          = { {
2246                         .type   = CX88_VMUX_TELEVISION,
2247                         .vmux   = 0,
2248                         .gpio0  = 0x0403,
2249                         .gpio1  = 0xF0D7,
2250                         .gpio2  = 0x0101,
2251                         .gpio3  = 0x0000,
2252                 }, {
2253                         .type   = CX88_VMUX_CABLE,
2254                         .vmux   = 0,
2255                         .gpio0  = 0x0403,
2256                         .gpio1  = 0xF0D7,
2257                         .gpio2  = 0x0100,
2258                         .gpio3  = 0x0000,
2259                 }, {
2260                         .type   = CX88_VMUX_COMPOSITE1,
2261                         .vmux   = 1,
2262                         .gpio0  = 0x0403,       /* was 0x0407 */
2263                         .gpio1  = 0xF0F7,
2264                         .gpio2  = 0x0101,
2265                         .gpio3  = 0x0000,
2266                 }, {
2267                         .type   = CX88_VMUX_SVIDEO,
2268                         .vmux   = 2,
2269                         .gpio0  = 0x0403,       /* was 0x0407 */
2270                         .gpio1  = 0xF0F7,
2271                         .gpio2  = 0x0101,
2272                         .gpio3  = 0x0000,
2273                 } },
2274                 .radio = {
2275                         .type   = CX88_RADIO,
2276                         .gpio0  = 0x0403,
2277                         .gpio1  = 0xF097,
2278                         .gpio2  = 0x0100,
2279                         .gpio3  = 0x0000,
2280                 },
2281                 .mpeg           = CX88_MPEG_DVB,
2282         },
2283         [CX88_BOARD_PROF_7301] = {
2284                 .name           = "Prof 7301 DVB-S/S2",
2285                 .tuner_type     = UNSET,
2286                 .radio_type     = UNSET,
2287                 .tuner_addr     = ADDR_UNSET,
2288                 .radio_addr     = ADDR_UNSET,
2289                 .input          = { {
2290                         .type   = CX88_VMUX_DVB,
2291                         .vmux   = 0,
2292                 } },
2293                 .mpeg           = CX88_MPEG_DVB,
2294         },
2295         [CX88_BOARD_TWINHAN_VP1027_DVBS] = {
2296                 .name           = "Twinhan VP-1027 DVB-S",
2297                 .tuner_type     = UNSET,
2298                 .radio_type     = UNSET,
2299                 .tuner_addr     = ADDR_UNSET,
2300                 .radio_addr     = ADDR_UNSET,
2301                 .input          = { {
2302                        .type   = CX88_VMUX_DVB,
2303                        .vmux   = 0,
2304                 } },
2305                 .mpeg           = CX88_MPEG_DVB,
2306         },
2307 };
2308
2309 /* ------------------------------------------------------------------ */
2310 /* PCI subsystem IDs                                                  */
2311
2312 static const struct cx88_subid cx88_subids[] = {
2313         {
2314                 .subvendor = 0x0070,
2315                 .subdevice = 0x3400,
2316                 .card      = CX88_BOARD_HAUPPAUGE,
2317         }, {
2318                 .subvendor = 0x0070,
2319                 .subdevice = 0x3401,
2320                 .card      = CX88_BOARD_HAUPPAUGE,
2321         }, {
2322                 .subvendor = 0x14c7,
2323                 .subdevice = 0x0106,
2324                 .card      = CX88_BOARD_GDI,
2325         }, {
2326                 .subvendor = 0x14c7,
2327                 .subdevice = 0x0107, /* with mpeg encoder */
2328                 .card      = CX88_BOARD_GDI,
2329         }, {
2330                 .subvendor = PCI_VENDOR_ID_ATI,
2331                 .subdevice = 0x00f8,
2332                 .card      = CX88_BOARD_ATI_WONDER_PRO,
2333         }, {
2334                 .subvendor = PCI_VENDOR_ID_ATI,
2335                 .subdevice = 0x00f9,
2336                 .card      = CX88_BOARD_ATI_WONDER_PRO,
2337         }, {
2338                 .subvendor = 0x107d,
2339                 .subdevice = 0x6611,
2340                 .card      = CX88_BOARD_WINFAST2000XP_EXPERT,
2341         }, {
2342                 .subvendor = 0x107d,
2343                 .subdevice = 0x6613,    /* NTSC */
2344                 .card      = CX88_BOARD_WINFAST2000XP_EXPERT,
2345         }, {
2346                 .subvendor = 0x107d,
2347                 .subdevice = 0x6620,
2348                 .card      = CX88_BOARD_WINFAST_DV2000,
2349         }, {
2350                 .subvendor = 0x107d,
2351                 .subdevice = 0x663b,
2352                 .card      = CX88_BOARD_LEADTEK_PVR2000,
2353         }, {
2354                 .subvendor = 0x107d,
2355                 .subdevice = 0x663c,
2356                 .card      = CX88_BOARD_LEADTEK_PVR2000,
2357         }, {
2358                 .subvendor = 0x1461,
2359                 .subdevice = 0x000b,
2360                 .card      = CX88_BOARD_AVERTV_STUDIO_303,
2361         }, {
2362                 .subvendor = 0x1462,
2363                 .subdevice = 0x8606,
2364                 .card      = CX88_BOARD_MSI_TVANYWHERE_MASTER,
2365         }, {
2366                 .subvendor = 0x10fc,
2367                 .subdevice = 0xd003,
2368                 .card      = CX88_BOARD_IODATA_GVVCP3PCI,
2369         }, {
2370                 .subvendor = 0x1043,
2371                 .subdevice = 0x4823,  /* with mpeg encoder */
2372                 .card      = CX88_BOARD_ASUS_PVR_416,
2373         }, {
2374                 .subvendor = 0x17de,
2375                 .subdevice = 0x08a6,
2376                 .card      = CX88_BOARD_KWORLD_DVB_T,
2377         }, {
2378                 .subvendor = 0x18ac,
2379                 .subdevice = 0xd810,
2380                 .card      = CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q,
2381         }, {
2382                 .subvendor = 0x18ac,
2383                 .subdevice = 0xd820,
2384                 .card      = CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_T,
2385         }, {
2386                 .subvendor = 0x18ac,
2387                 .subdevice = 0xdb00,
2388                 .card      = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1,
2389         }, {
2390                 .subvendor = 0x0070,
2391                 .subdevice = 0x9002,
2392                 .card      = CX88_BOARD_HAUPPAUGE_DVB_T1,
2393         }, {
2394                 .subvendor = 0x14f1,
2395                 .subdevice = 0x0187,
2396                 .card      = CX88_BOARD_CONEXANT_DVB_T1,
2397         }, {
2398                 .subvendor = 0x1540,
2399                 .subdevice = 0x2580,
2400                 .card      = CX88_BOARD_PROVIDEO_PV259,
2401         }, {
2402                 .subvendor = 0x18ac,
2403                 .subdevice = 0xdb10,
2404                 .card      = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS,
2405         }, {
2406                 .subvendor = 0x1554,
2407                 .subdevice = 0x4811,
2408                 .card      = CX88_BOARD_PIXELVIEW,
2409         }, {
2410                 .subvendor = 0x7063,
2411                 .subdevice = 0x3000, /* HD-3000 card */
2412                 .card      = CX88_BOARD_PCHDTV_HD3000,
2413         }, {
2414                 .subvendor = 0x17de,
2415                 .subdevice = 0xa8a6,
2416                 .card      = CX88_BOARD_DNTV_LIVE_DVB_T,
2417         }, {
2418                 .subvendor = 0x0070,
2419                 .subdevice = 0x2801,
2420                 .card      = CX88_BOARD_HAUPPAUGE_ROSLYN,
2421         }, {
2422                 .subvendor = 0x14f1,
2423                 .subdevice = 0x0342,
2424                 .card      = CX88_BOARD_DIGITALLOGIC_MEC,
2425         }, {
2426                 .subvendor = 0x10fc,
2427                 .subdevice = 0xd035,
2428                 .card      = CX88_BOARD_IODATA_GVBCTV7E,
2429         }, {
2430                 .subvendor = 0x1421,
2431                 .subdevice = 0x0334,
2432                 .card      = CX88_BOARD_ADSTECH_DVB_T_PCI,
2433         }, {
2434                 .subvendor = 0x153b,
2435                 .subdevice = 0x1166,
2436                 .card      = CX88_BOARD_TERRATEC_CINERGY_1400_DVB_T1,
2437         }, {
2438                 .subvendor = 0x18ac,
2439                 .subdevice = 0xd500,
2440                 .card      = CX88_BOARD_DVICO_FUSIONHDTV_5_GOLD,
2441         }, {
2442                 .subvendor = 0x1461,
2443                 .subdevice = 0x8011,
2444                 .card      = CX88_BOARD_AVERMEDIA_ULTRATV_MC_550,
2445         }, {
2446                 .subvendor = PCI_VENDOR_ID_ATI,
2447                 .subdevice = 0xa101,
2448                 .card      = CX88_BOARD_ATI_HDTVWONDER,
2449         }, {
2450                 .subvendor = 0x107d,
2451                 .subdevice = 0x665f,
2452                 .card      = CX88_BOARD_WINFAST_DTV1000,
2453         }, {
2454                 .subvendor = 0x1461,
2455                 .subdevice = 0x000a,
2456                 .card      = CX88_BOARD_AVERTV_303,
2457         }, {
2458                 .subvendor = 0x0070,
2459                 .subdevice = 0x9200,
2460                 .card      = CX88_BOARD_HAUPPAUGE_NOVASE2_S1,
2461         }, {
2462                 .subvendor = 0x0070,
2463                 .subdevice = 0x9201,
2464                 .card      = CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1,
2465         }, {
2466                 .subvendor = 0x0070,
2467                 .subdevice = 0x9202,
2468                 .card      = CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1,
2469         }, {
2470                 .subvendor = 0x17de,
2471                 .subdevice = 0x08b2,
2472                 .card      = CX88_BOARD_KWORLD_DVBS_100,
2473         }, {
2474                 .subvendor = 0x0070,
2475                 .subdevice = 0x9400,
2476                 .card      = CX88_BOARD_HAUPPAUGE_HVR1100,
2477         }, {
2478                 .subvendor = 0x0070,
2479                 .subdevice = 0x9402,
2480                 .card      = CX88_BOARD_HAUPPAUGE_HVR1100,
2481         }, {
2482                 .subvendor = 0x0070,
2483                 .subdevice = 0x9800,
2484                 .card      = CX88_BOARD_HAUPPAUGE_HVR1100LP,
2485         }, {
2486                 .subvendor = 0x0070,
2487                 .subdevice = 0x9802,
2488                 .card      = CX88_BOARD_HAUPPAUGE_HVR1100LP,
2489         }, {
2490                 .subvendor = 0x0070,
2491                 .subdevice = 0x9001,
2492                 .card      = CX88_BOARD_HAUPPAUGE_DVB_T1,
2493         }, {
2494                 .subvendor = 0x1822,
2495                 .subdevice = 0x0025,
2496                 .card      = CX88_BOARD_DNTV_LIVE_DVB_T_PRO,
2497         }, {
2498                 .subvendor = 0x17de,
2499                 .subdevice = 0x08a1,
2500                 .card      = CX88_BOARD_KWORLD_DVB_T_CX22702,
2501         }, {
2502                 .subvendor = 0x18ac,
2503                 .subdevice = 0xdb50,
2504                 .card      = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL,
2505         }, {
2506                 .subvendor = 0x18ac,
2507                 .subdevice = 0xdb54,
2508                 .card      = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL,
2509                 /* Re-branded DViCO: DigitalNow DVB-T Dual */
2510         }, {
2511                 .subvendor = 0x18ac,
2512                 .subdevice = 0xdb11,
2513                 .card      = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS,
2514                 /* Re-branded DViCO: UltraView DVB-T Plus */
2515         }, {
2516                 .subvendor = 0x18ac,
2517                 .subdevice = 0xdb30,
2518                 .card      = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO,
2519         }, {
2520                 .subvendor = 0x17de,
2521                 .subdevice = 0x0840,
2522                 .card      = CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT,
2523         }, {
2524                 .subvendor = 0x1421,
2525                 .subdevice = 0x0305,
2526                 .card      = CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT,
2527         }, {
2528                 .subvendor = 0x18ac,
2529                 .subdevice = 0xdb40,
2530                 .card      = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID,
2531         }, {
2532                 .subvendor = 0x18ac,
2533                 .subdevice = 0xdb44,
2534                 .card      = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID,
2535         }, {
2536                 .subvendor = 0x7063,
2537                 .subdevice = 0x5500,
2538                 .card      = CX88_BOARD_PCHDTV_HD5500,
2539         }, {
2540                 .subvendor = 0x17de,
2541                 .subdevice = 0x0841,
2542                 .card      = CX88_BOARD_KWORLD_MCE200_DELUXE,
2543         }, {
2544                 .subvendor = 0x1822,
2545                 .subdevice = 0x0019,
2546                 .card      = CX88_BOARD_DNTV_LIVE_DVB_T_PRO,
2547         }, {
2548                 .subvendor = 0x1554,
2549                 .subdevice = 0x4813,
2550                 .card      = CX88_BOARD_PIXELVIEW_PLAYTV_P7000,
2551         }, {
2552                 .subvendor = 0x14f1,
2553                 .subdevice = 0x0842,
2554                 .card      = CX88_BOARD_NPGTECH_REALTV_TOP10FM,
2555         }, {
2556                 .subvendor = 0x107d,
2557                 .subdevice = 0x665e,
2558                 .card      = CX88_BOARD_WINFAST_DTV2000H,
2559         }, {
2560                 .subvendor = 0x107d,
2561                 .subdevice = 0x6f2b,
2562                 .card      = CX88_BOARD_WINFAST_DTV2000H_J,
2563         }, {
2564                 .subvendor = 0x18ac,
2565                 .subdevice = 0xd800, /* FusionHDTV 3 Gold (original revision) */
2566                 .card      = CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q,
2567         }, {
2568                 .subvendor = 0x14f1,
2569                 .subdevice = 0x0084,
2570                 .card      = CX88_BOARD_GENIATECH_DVBS,
2571         }, {
2572                 .subvendor = 0x0070,
2573                 .subdevice = 0x1404,
2574                 .card      = CX88_BOARD_HAUPPAUGE_HVR3000,
2575         }, {
2576                 .subvendor = 0x18ac,
2577                 .subdevice = 0xdc00,
2578                 .card      = CX88_BOARD_SAMSUNG_SMT_7020,
2579         }, {
2580                 .subvendor = 0x18ac,
2581                 .subdevice = 0xdccd,
2582                 .card      = CX88_BOARD_SAMSUNG_SMT_7020,
2583         }, {
2584                 .subvendor = 0x1461,
2585                 .subdevice = 0xc111, /* AverMedia M150-D */
2586                 /* This board is known to work with the ASUS PVR416 config */
2587                 .card      = CX88_BOARD_ASUS_PVR_416,
2588         }, {
2589                 .subvendor = 0xc180,
2590                 .subdevice = 0xc980,
2591                 .card      = CX88_BOARD_TE_DTV_250_OEM_SWANN,
2592         }, {
2593                 .subvendor = 0x0070,
2594                 .subdevice = 0x9600,
2595                 .card      = CX88_BOARD_HAUPPAUGE_HVR1300,
2596         }, {
2597                 .subvendor = 0x0070,
2598                 .subdevice = 0x9601,
2599                 .card      = CX88_BOARD_HAUPPAUGE_HVR1300,
2600         }, {
2601                 .subvendor = 0x0070,
2602                 .subdevice = 0x9602,
2603                 .card      = CX88_BOARD_HAUPPAUGE_HVR1300,
2604         }, {
2605                 .subvendor = 0x107d,
2606                 .subdevice = 0x6632,
2607                 .card      = CX88_BOARD_LEADTEK_PVR2000,
2608         }, {
2609                 .subvendor = 0x12ab,
2610                 .subdevice = 0x2300, /* Club3D Zap TV2100 */
2611                 .card      = CX88_BOARD_KWORLD_DVB_T_CX22702,
2612         }, {
2613                 .subvendor = 0x0070,
2614                 .subdevice = 0x9000,
2615                 .card      = CX88_BOARD_HAUPPAUGE_DVB_T1,
2616         }, {
2617                 .subvendor = 0x0070,
2618                 .subdevice = 0x1400,
2619                 .card      = CX88_BOARD_HAUPPAUGE_HVR3000,
2620         }, {
2621                 .subvendor = 0x0070,
2622                 .subdevice = 0x1401,
2623                 .card      = CX88_BOARD_HAUPPAUGE_HVR3000,
2624         }, {
2625                 .subvendor = 0x0070,
2626                 .subdevice = 0x1402,
2627                 .card      = CX88_BOARD_HAUPPAUGE_HVR3000,
2628         }, {
2629                 .subvendor = 0x1421,
2630                 .subdevice = 0x0341, /* ADS Tech InstantTV DVB-S */
2631                 .card      = CX88_BOARD_KWORLD_DVBS_100,
2632         }, {
2633                 .subvendor = 0x1421,
2634                 .subdevice = 0x0390,
2635                 .card      = CX88_BOARD_ADSTECH_PTV_390,
2636         }, {
2637                 .subvendor = 0x11bd,
2638                 .subdevice = 0x0051,
2639                 .card      = CX88_BOARD_PINNACLE_PCTV_HD_800i,
2640         }, {
2641                 .subvendor = 0x18ac,
2642                 .subdevice = 0xd530,
2643                 .card      = CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO,
2644         }, {