1c942fddfSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-or-later
21da177e4SLinus Torvalds /*
31da177e4SLinus Torvalds * device driver for Conexant 2388x based TV cards
41da177e4SLinus Torvalds * card-specific stuff.
51da177e4SLinus Torvalds *
61da177e4SLinus Torvalds * (c) 2003 Gerd Knorr <kraxel@bytesex.org> [SuSE Labs]
71da177e4SLinus Torvalds */
81da177e4SLinus Torvalds
965bc2fe8SMauro Carvalho Chehab #include "cx88.h"
1065bc2fe8SMauro Carvalho Chehab #include "tea5767.h"
1165bc2fe8SMauro Carvalho Chehab #include "xc4000.h"
1265bc2fe8SMauro Carvalho Chehab
131da177e4SLinus Torvalds #include <linux/init.h>
141da177e4SLinus Torvalds #include <linux/module.h>
151da177e4SLinus Torvalds #include <linux/pci.h>
161da177e4SLinus Torvalds #include <linux/delay.h>
175a0e3ad6STejun Heo #include <linux/slab.h>
181da177e4SLinus Torvalds
19bbc83597STrent Piepho static unsigned int tuner[] = {[0 ... (CX88_MAXBOARDS - 1)] = UNSET };
20bbc83597STrent Piepho static unsigned int radio[] = {[0 ... (CX88_MAXBOARDS - 1)] = UNSET };
21bbc83597STrent Piepho static unsigned int card[] = {[0 ... (CX88_MAXBOARDS - 1)] = UNSET };
22bbc83597STrent Piepho
23bbc83597STrent Piepho module_param_array(tuner, int, NULL, 0444);
24bbc83597STrent Piepho module_param_array(radio, int, NULL, 0444);
25bbc83597STrent Piepho module_param_array(card, int, NULL, 0444);
26bbc83597STrent Piepho
27bbc83597STrent Piepho MODULE_PARM_DESC(tuner, "tuner type");
28bbc83597STrent Piepho MODULE_PARM_DESC(radio, "radio tuner type");
29bbc83597STrent Piepho MODULE_PARM_DESC(card, "card type");
30bbc83597STrent Piepho
31bbc83597STrent Piepho static unsigned int latency = UNSET;
32bbc83597STrent Piepho module_param(latency, int, 0444);
33bbc83597STrent Piepho MODULE_PARM_DESC(latency, "pci latency timer");
34bbc83597STrent Piepho
3589c3bc78SJean Delvare static int disable_ir;
3689c3bc78SJean Delvare module_param(disable_ir, int, 0444);
3797108cf6SMauro Carvalho Chehab MODULE_PARM_DESC(disable_ir, "Disable IR support");
3889c3bc78SJean Delvare
3902615ed5SMauro Carvalho Chehab #define dprintk(level, fmt, arg...) do { \
4002615ed5SMauro Carvalho Chehab if (cx88_core_debug >= level) \
4165bc2fe8SMauro Carvalho Chehab printk(KERN_DEBUG pr_fmt("%s: core:" fmt), \
4265bc2fe8SMauro Carvalho Chehab __func__, ##arg); \
4302615ed5SMauro Carvalho Chehab } while (0)
4402615ed5SMauro Carvalho Chehab
451da177e4SLinus Torvalds /* ------------------------------------------------------------------ */
461da177e4SLinus Torvalds /* board config info */
471da177e4SLinus Torvalds
484bf1226aSMauro Carvalho Chehab /* If radio_type !=UNSET, radio_addr should be specified
494bf1226aSMauro Carvalho Chehab */
504bf1226aSMauro Carvalho Chehab
51bbc83597STrent Piepho static const struct cx88_board cx88_boards[] = {
521da177e4SLinus Torvalds [CX88_BOARD_UNKNOWN] = {
531da177e4SLinus Torvalds .name = "UNKNOWN/GENERIC",
541da177e4SLinus Torvalds .tuner_type = UNSET,
55b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
56b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
57b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
581da177e4SLinus Torvalds .input = { {
591da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1,
601da177e4SLinus Torvalds .vmux = 0,
611da177e4SLinus Torvalds }, {
621da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE2,
631da177e4SLinus Torvalds .vmux = 1,
641da177e4SLinus Torvalds }, {
651da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE3,
661da177e4SLinus Torvalds .vmux = 2,
671da177e4SLinus Torvalds }, {
681da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE4,
691da177e4SLinus Torvalds .vmux = 3,
701da177e4SLinus Torvalds } },
711da177e4SLinus Torvalds },
721da177e4SLinus Torvalds [CX88_BOARD_HAUPPAUGE] = {
731da177e4SLinus Torvalds .name = "Hauppauge WinTV 34xxx models",
741da177e4SLinus Torvalds .tuner_type = UNSET,
75b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
76b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
77b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
781da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT,
791da177e4SLinus Torvalds .input = { {
801da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION,
811da177e4SLinus Torvalds .vmux = 0,
821da177e4SLinus Torvalds .gpio0 = 0xff00, // internal decoder
831da177e4SLinus Torvalds }, {
841da177e4SLinus Torvalds .type = CX88_VMUX_DEBUG,
851da177e4SLinus Torvalds .vmux = 0,
861da177e4SLinus Torvalds .gpio0 = 0xff01, // mono from tuner chip
871da177e4SLinus Torvalds }, {
881da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1,
891da177e4SLinus Torvalds .vmux = 1,
901da177e4SLinus Torvalds .gpio0 = 0xff02,
911da177e4SLinus Torvalds }, {
921da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO,
931da177e4SLinus Torvalds .vmux = 2,
941da177e4SLinus Torvalds .gpio0 = 0xff02,
951da177e4SLinus Torvalds } },
961da177e4SLinus Torvalds .radio = {
971da177e4SLinus Torvalds .type = CX88_RADIO,
981da177e4SLinus Torvalds .gpio0 = 0xff01,
991da177e4SLinus Torvalds },
1001da177e4SLinus Torvalds },
1011da177e4SLinus Torvalds [CX88_BOARD_GDI] = {
1021da177e4SLinus Torvalds .name = "GDI Black Gold",
1031da177e4SLinus Torvalds .tuner_type = UNSET,
104b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
105b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
106b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
1071da177e4SLinus Torvalds .input = { {
1081da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION,
1091da177e4SLinus Torvalds .vmux = 0,
110fd3113e8SMauro Carvalho Chehab }, {
111fd3113e8SMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO,
112fd3113e8SMauro Carvalho Chehab .vmux = 2,
1131da177e4SLinus Torvalds } },
1141da177e4SLinus Torvalds },
1151da177e4SLinus Torvalds [CX88_BOARD_PIXELVIEW] = {
1161da177e4SLinus Torvalds .name = "PixelView",
117b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_PAL,
118b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
119b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
120b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
1211da177e4SLinus Torvalds .input = { {
1221da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION,
1231da177e4SLinus Torvalds .vmux = 0,
1241da177e4SLinus Torvalds .gpio0 = 0xff00, // internal decoder
1251da177e4SLinus Torvalds }, {
1261da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1,
1271da177e4SLinus Torvalds .vmux = 1,
1281da177e4SLinus Torvalds }, {
1291da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO,
1301da177e4SLinus Torvalds .vmux = 2,
1311da177e4SLinus Torvalds } },
1321da177e4SLinus Torvalds .radio = {
1331da177e4SLinus Torvalds .type = CX88_RADIO,
1341da177e4SLinus Torvalds .gpio0 = 0xff10,
1351da177e4SLinus Torvalds },
1361da177e4SLinus Torvalds },
1371da177e4SLinus Torvalds [CX88_BOARD_ATI_WONDER_PRO] = {
1381da177e4SLinus Torvalds .name = "ATI TV Wonder Pro",
139b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_4IN1,
140b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
141b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
142b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
1431da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT | TDA9887_INTERCARRIER,
1441da177e4SLinus Torvalds .input = { {
1451da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION,
1461da177e4SLinus Torvalds .vmux = 0,
1471da177e4SLinus Torvalds .gpio0 = 0x03ff,
1481da177e4SLinus Torvalds }, {
1491da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1,
1501da177e4SLinus Torvalds .vmux = 1,
1511da177e4SLinus Torvalds .gpio0 = 0x03fe,
1521da177e4SLinus Torvalds }, {
1531da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO,
1541da177e4SLinus Torvalds .vmux = 2,
1551da177e4SLinus Torvalds .gpio0 = 0x03fe,
1561da177e4SLinus Torvalds } },
1571da177e4SLinus Torvalds },
1581da177e4SLinus Torvalds [CX88_BOARD_WINFAST2000XP_EXPERT] = {
1591da177e4SLinus Torvalds .name = "Leadtek Winfast 2000XP Expert",
160b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_4IN1,
161b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
162b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
163b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
1641da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT,
1651da177e4SLinus Torvalds .input = { {
1661da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION,
1671da177e4SLinus Torvalds .vmux = 0,
1681da177e4SLinus Torvalds .gpio0 = 0x00F5e700,
1691da177e4SLinus Torvalds .gpio1 = 0x00003004,
1701da177e4SLinus Torvalds .gpio2 = 0x00F5e700,
1711da177e4SLinus Torvalds .gpio3 = 0x02000000,
1721da177e4SLinus Torvalds }, {
1731da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1,
1741da177e4SLinus Torvalds .vmux = 1,
1751da177e4SLinus Torvalds .gpio0 = 0x00F5c700,
1761da177e4SLinus Torvalds .gpio1 = 0x00003004,
1771da177e4SLinus Torvalds .gpio2 = 0x00F5c700,
1781da177e4SLinus Torvalds .gpio3 = 0x02000000,
1791da177e4SLinus Torvalds }, {
1801da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO,
1811da177e4SLinus Torvalds .vmux = 2,
1821da177e4SLinus Torvalds .gpio0 = 0x00F5c700,
1831da177e4SLinus Torvalds .gpio1 = 0x00003004,
1841da177e4SLinus Torvalds .gpio2 = 0x00F5c700,
1851da177e4SLinus Torvalds .gpio3 = 0x02000000,
1861da177e4SLinus Torvalds } },
1871da177e4SLinus Torvalds .radio = {
1881da177e4SLinus Torvalds .type = CX88_RADIO,
1891da177e4SLinus Torvalds .gpio0 = 0x00F5d700,
1901da177e4SLinus Torvalds .gpio1 = 0x00003004,
1911da177e4SLinus Torvalds .gpio2 = 0x00F5d700,
1921da177e4SLinus Torvalds .gpio3 = 0x02000000,
1931da177e4SLinus Torvalds },
1941da177e4SLinus Torvalds },
1957418f346SLubomir Bulej [CX88_BOARD_AVERTV_STUDIO_303] = {
1961da177e4SLinus Torvalds .name = "AverTV Studio 303 (M126)",
197b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
198b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
199b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
200b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
2011da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT,
2021da177e4SLinus Torvalds .input = { {
2031da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION,
2041da177e4SLinus Torvalds .vmux = 0,
2054aca4831SMarcin Rudowski .gpio1 = 0xe09f,
2061da177e4SLinus Torvalds }, {
2071da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1,
2081da177e4SLinus Torvalds .vmux = 1,
2094aca4831SMarcin Rudowski .gpio1 = 0xe05f,
2101da177e4SLinus Torvalds }, {
2111da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO,
2121da177e4SLinus Torvalds .vmux = 2,
2134aca4831SMarcin Rudowski .gpio1 = 0xe05f,
2141da177e4SLinus Torvalds } },
2151da177e4SLinus Torvalds .radio = {
2164aca4831SMarcin Rudowski .gpio1 = 0xe0df,
2171da177e4SLinus Torvalds .type = CX88_RADIO,
2181da177e4SLinus Torvalds },
2191da177e4SLinus Torvalds },
2201da177e4SLinus Torvalds [CX88_BOARD_MSI_TVANYWHERE_MASTER] = {
2211da177e4SLinus Torvalds // added gpio values thanks to Michal
2221da177e4SLinus Torvalds // values for PAL from DScaler
2231da177e4SLinus Torvalds .name = "MSI TV-@nywhere Master",
224b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_MT2032,
225b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
226b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
227b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
2283ae1adc6SNickolay V. Shmyrev .tda9887_conf = TDA9887_PRESENT | TDA9887_INTERCARRIER_NTSC,
2291da177e4SLinus Torvalds .input = { {
2301da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION,
2311da177e4SLinus Torvalds .vmux = 0,
2321da177e4SLinus Torvalds .gpio0 = 0x000040bf,
2331da177e4SLinus Torvalds .gpio1 = 0x000080c0,
2341da177e4SLinus Torvalds .gpio2 = 0x0000ff40,
2351da177e4SLinus Torvalds }, {
2361da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1,
2371da177e4SLinus Torvalds .vmux = 1,
2381da177e4SLinus Torvalds .gpio0 = 0x000040bf,
2391da177e4SLinus Torvalds .gpio1 = 0x000080c0,
2401da177e4SLinus Torvalds .gpio2 = 0x0000ff40,
2411da177e4SLinus Torvalds }, {
2421da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO,
2431da177e4SLinus Torvalds .vmux = 2,
2441da177e4SLinus Torvalds .gpio0 = 0x000040bf,
2451da177e4SLinus Torvalds .gpio1 = 0x000080c0,
2461da177e4SLinus Torvalds .gpio2 = 0x0000ff40,
2471da177e4SLinus Torvalds } },
2481da177e4SLinus Torvalds .radio = {
2491da177e4SLinus Torvalds .type = CX88_RADIO,
25055c88610SMauro Carvalho Chehab .vmux = 3,
25155c88610SMauro Carvalho Chehab .gpio0 = 0x000040bf,
25255c88610SMauro Carvalho Chehab .gpio1 = 0x000080c0,
25355c88610SMauro Carvalho Chehab .gpio2 = 0x0000ff20,
2541da177e4SLinus Torvalds },
2551da177e4SLinus Torvalds },
2561da177e4SLinus Torvalds [CX88_BOARD_WINFAST_DV2000] = {
2571da177e4SLinus Torvalds .name = "Leadtek Winfast DV2000",
258b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
259b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
260b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
261b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
2621da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT,
2631da177e4SLinus Torvalds .input = { {
2641da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION,
2651da177e4SLinus Torvalds .vmux = 0,
2661da177e4SLinus Torvalds .gpio0 = 0x0035e700,
2671da177e4SLinus Torvalds .gpio1 = 0x00003004,
2681da177e4SLinus Torvalds .gpio2 = 0x0035e700,
2691da177e4SLinus Torvalds .gpio3 = 0x02000000,
2701da177e4SLinus Torvalds }, {
2711da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1,
2721da177e4SLinus Torvalds .vmux = 1,
2731da177e4SLinus Torvalds .gpio0 = 0x0035c700,
2741da177e4SLinus Torvalds .gpio1 = 0x00003004,
2751da177e4SLinus Torvalds .gpio2 = 0x0035c700,
2761da177e4SLinus Torvalds .gpio3 = 0x02000000,
2771da177e4SLinus Torvalds }, {
2781da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO,
2791da177e4SLinus Torvalds .vmux = 2,
2801da177e4SLinus Torvalds .gpio0 = 0x0035c700,
2811da177e4SLinus Torvalds .gpio1 = 0x0035c700,
2821da177e4SLinus Torvalds .gpio2 = 0x02000000,
2831da177e4SLinus Torvalds .gpio3 = 0x02000000,
2841da177e4SLinus Torvalds } },
2851da177e4SLinus Torvalds .radio = {
2861da177e4SLinus Torvalds .type = CX88_RADIO,
2871da177e4SLinus Torvalds .gpio0 = 0x0035d700,
2881da177e4SLinus Torvalds .gpio1 = 0x00007004,
2891da177e4SLinus Torvalds .gpio2 = 0x0035d700,
2901da177e4SLinus Torvalds .gpio3 = 0x02000000,
2911da177e4SLinus Torvalds },
2921da177e4SLinus Torvalds },
2931da177e4SLinus Torvalds [CX88_BOARD_LEADTEK_PVR2000] = {
2941da177e4SLinus Torvalds // gpio values for PAL version from regspy by DScaler
2951da177e4SLinus Torvalds .name = "Leadtek PVR 2000",
296b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
297b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
298b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
299b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
3001da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT,
3011da177e4SLinus Torvalds .input = { {
3021da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION,
3031da177e4SLinus Torvalds .vmux = 0,
304b45009b0SMauro Carvalho Chehab .gpio0 = 0x0000bde2,
3057b27d45bSRicardo Cerqueira .audioroute = 1,
3061da177e4SLinus Torvalds }, {
3071da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1,
3081da177e4SLinus Torvalds .vmux = 1,
3091da177e4SLinus Torvalds .gpio0 = 0x0000bde6,
3107b27d45bSRicardo Cerqueira .audioroute = 1,
3111da177e4SLinus Torvalds }, {
3121da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO,
3131da177e4SLinus Torvalds .vmux = 2,
3141da177e4SLinus Torvalds .gpio0 = 0x0000bde6,
3157b27d45bSRicardo Cerqueira .audioroute = 1,
3161da177e4SLinus Torvalds } },
3171da177e4SLinus Torvalds .radio = {
3181da177e4SLinus Torvalds .type = CX88_RADIO,
3191da177e4SLinus Torvalds .gpio0 = 0x0000bd62,
3207b27d45bSRicardo Cerqueira .audioroute = 1,
3211da177e4SLinus Torvalds },
32248d5e803SMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD,
3231da177e4SLinus Torvalds },
3241da177e4SLinus Torvalds [CX88_BOARD_IODATA_GVVCP3PCI] = {
3251da177e4SLinus Torvalds .name = "IODATA GV-VCP3/PCI",
326c39ba330SHans Verkuil .tuner_type = UNSET,
327b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
328b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
329b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
3301da177e4SLinus Torvalds .input = { {
3311da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1,
3321da177e4SLinus Torvalds .vmux = 0,
3331da177e4SLinus Torvalds }, {
3341da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE2,
3351da177e4SLinus Torvalds .vmux = 1,
3361da177e4SLinus Torvalds }, {
3371da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO,
3381da177e4SLinus Torvalds .vmux = 2,
3391da177e4SLinus Torvalds } },
3401da177e4SLinus Torvalds },
3411da177e4SLinus Torvalds [CX88_BOARD_PROLINK_PLAYTVPVR] = {
3421da177e4SLinus Torvalds .name = "Prolink PlayTV PVR",
343b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_FM1236_MK3,
344b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
345b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
346b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
3471da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT,
3481da177e4SLinus Torvalds .input = { {
3491da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION,
3501da177e4SLinus Torvalds .vmux = 0,
35149239c35SMatheus Izvekov .gpio0 = 0xbff0,
3521da177e4SLinus Torvalds }, {
3531da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1,
3541da177e4SLinus Torvalds .vmux = 1,
35549239c35SMatheus Izvekov .gpio0 = 0xbff3,
3561da177e4SLinus Torvalds }, {
3571da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO,
3581da177e4SLinus Torvalds .vmux = 2,
35949239c35SMatheus Izvekov .gpio0 = 0xbff3,
3601da177e4SLinus Torvalds } },
3611da177e4SLinus Torvalds .radio = {
3621da177e4SLinus Torvalds .type = CX88_RADIO,
36349239c35SMatheus Izvekov .gpio0 = 0xbff0,
3641da177e4SLinus Torvalds },
3651da177e4SLinus Torvalds },
3661da177e4SLinus Torvalds [CX88_BOARD_ASUS_PVR_416] = {
3671da177e4SLinus Torvalds .name = "ASUS PVR-416",
368b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_FM1236_MK3,
369b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
370b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
371b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
3721da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT,
3731da177e4SLinus Torvalds .input = { {
3741da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION,
3751da177e4SLinus Torvalds .vmux = 0,
3761da177e4SLinus Torvalds .gpio0 = 0x0000fde6,
3771da177e4SLinus Torvalds }, {
3781da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO,
3791da177e4SLinus Torvalds .vmux = 2,
3801da177e4SLinus Torvalds .gpio0 = 0x0000fde6, // 0x0000fda6 L,R RCA audio in?
3817b27d45bSRicardo Cerqueira .audioroute = 1,
3821da177e4SLinus Torvalds } },
3831da177e4SLinus Torvalds .radio = {
3841da177e4SLinus Torvalds .type = CX88_RADIO,
3851da177e4SLinus Torvalds .gpio0 = 0x0000fde2,
3861da177e4SLinus Torvalds },
38748d5e803SMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD,
3881da177e4SLinus Torvalds },
3891da177e4SLinus Torvalds [CX88_BOARD_MSI_TVANYWHERE] = {
3901da177e4SLinus Torvalds .name = "MSI TV-@nywhere",
391b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_MT2032,
392b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
393b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
394b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
3951da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT,
3961da177e4SLinus Torvalds .input = { {
3971da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION,
3981da177e4SLinus Torvalds .vmux = 0,
3991da177e4SLinus Torvalds .gpio0 = 0x00000fbf,
4001da177e4SLinus Torvalds .gpio2 = 0x0000fc08,
4011da177e4SLinus Torvalds }, {
4021da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1,
4031da177e4SLinus Torvalds .vmux = 1,
4041da177e4SLinus Torvalds .gpio0 = 0x00000fbf,
4051da177e4SLinus Torvalds .gpio2 = 0x0000fc68,
4061da177e4SLinus Torvalds }, {
4071da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO,
4081da177e4SLinus Torvalds .vmux = 2,
4091da177e4SLinus Torvalds .gpio0 = 0x00000fbf,
4101da177e4SLinus Torvalds .gpio2 = 0x0000fc68,
4111da177e4SLinus Torvalds } },
4121da177e4SLinus Torvalds },
4131da177e4SLinus Torvalds [CX88_BOARD_KWORLD_DVB_T] = {
4141da177e4SLinus Torvalds .name = "KWorld/VStream XPert DVB-T",
415c39ba330SHans Verkuil .tuner_type = UNSET,
416b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
417b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
418b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
4191da177e4SLinus Torvalds .input = { {
4201da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1,
4211da177e4SLinus Torvalds .vmux = 1,
4221da177e4SLinus Torvalds .gpio0 = 0x0700,
4231da177e4SLinus Torvalds .gpio2 = 0x0101,
4241da177e4SLinus Torvalds }, {
4251da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO,
4261da177e4SLinus Torvalds .vmux = 2,
4271da177e4SLinus Torvalds .gpio0 = 0x0700,
4281da177e4SLinus Torvalds .gpio2 = 0x0101,
4291da177e4SLinus Torvalds } },
43048d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
4311da177e4SLinus Torvalds },
4321da177e4SLinus Torvalds [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1] = {
433a82decf6SMauro Carvalho Chehab .name = "DViCO FusionHDTV DVB-T1",
434c39ba330SHans Verkuil .tuner_type = UNSET, /* No analog tuner */
435b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
436b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
437b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
4381da177e4SLinus Torvalds .input = { {
4391da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1,
4401da177e4SLinus Torvalds .vmux = 1,
4411da177e4SLinus Torvalds .gpio0 = 0x000027df,
4421da177e4SLinus Torvalds }, {
4431da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO,
4441da177e4SLinus Torvalds .vmux = 2,
4451da177e4SLinus Torvalds .gpio0 = 0x000027df,
4461da177e4SLinus Torvalds } },
44748d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
4481da177e4SLinus Torvalds },
4491da177e4SLinus Torvalds [CX88_BOARD_KWORLD_LTV883] = {
4501da177e4SLinus Torvalds .name = "KWorld LTV883RF",
451b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_TNF_8831BGFF,
452b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
453b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
454b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
4551da177e4SLinus Torvalds .input = { {
4561da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION,
4571da177e4SLinus Torvalds .vmux = 0,
4581da177e4SLinus Torvalds .gpio0 = 0x07f8,
4591da177e4SLinus Torvalds }, {
4601da177e4SLinus Torvalds .type = CX88_VMUX_DEBUG,
4611da177e4SLinus Torvalds .vmux = 0,
4621da177e4SLinus Torvalds .gpio0 = 0x07f9, // mono from tuner chip
4631da177e4SLinus Torvalds }, {
4641da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1,
4651da177e4SLinus Torvalds .vmux = 1,
4661da177e4SLinus Torvalds .gpio0 = 0x000007fa,
4671da177e4SLinus Torvalds }, {
4681da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO,
4691da177e4SLinus Torvalds .vmux = 2,
4701da177e4SLinus Torvalds .gpio0 = 0x000007fa,
4711da177e4SLinus Torvalds } },
4721da177e4SLinus Torvalds .radio = {
4731da177e4SLinus Torvalds .type = CX88_RADIO,
4741da177e4SLinus Torvalds .gpio0 = 0x000007f8,
4751da177e4SLinus Torvalds },
4761da177e4SLinus Torvalds },
477a82decf6SMauro Carvalho Chehab [CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q] = {
478a82decf6SMauro Carvalho Chehab .name = "DViCO FusionHDTV 3 Gold-Q",
4791da177e4SLinus Torvalds .tuner_type = TUNER_MICROTUNE_4042FI5,
480b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
481b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
482b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
4831da177e4SLinus Torvalds /*
484399426caSMauro Carvalho Chehab * GPIO[0] resets DT3302 DTV receiver
485399426caSMauro Carvalho Chehab * 0 - reset asserted
486399426caSMauro Carvalho Chehab * 1 - normal operation
487399426caSMauro Carvalho Chehab * GPIO[1] mutes analog audio output connector
488399426caSMauro Carvalho Chehab * 0 - enable selected source
489399426caSMauro Carvalho Chehab * 1 - mute
490399426caSMauro Carvalho Chehab * GPIO[2] selects source for analog audio output connector
491399426caSMauro Carvalho Chehab * 0 - analog audio input connector on tab
492399426caSMauro Carvalho Chehab * 1 - analog DAC output from CX23881 chip
493399426caSMauro Carvalho Chehab * GPIO[3] selects RF input connector on tuner module
494399426caSMauro Carvalho Chehab * 0 - RF connector labeled CABLE
495399426caSMauro Carvalho Chehab * 1 - RF connector labeled ANT
496399426caSMauro Carvalho Chehab * GPIO[4] selects high RF for QAM256 mode
497399426caSMauro Carvalho Chehab * 0 - normal RF
498399426caSMauro Carvalho Chehab * 1 - high RF
4991da177e4SLinus Torvalds */
5001da177e4SLinus Torvalds .input = { {
5011da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION,
5021da177e4SLinus Torvalds .vmux = 0,
5031da177e4SLinus Torvalds .gpio0 = 0x0f0d,
5041da177e4SLinus Torvalds }, {
5051da177e4SLinus Torvalds .type = CX88_VMUX_CABLE,
5061da177e4SLinus Torvalds .vmux = 0,
5071da177e4SLinus Torvalds .gpio0 = 0x0f05,
5081da177e4SLinus Torvalds }, {
5091da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1,
5101da177e4SLinus Torvalds .vmux = 1,
5111da177e4SLinus Torvalds .gpio0 = 0x0f00,
5121da177e4SLinus Torvalds }, {
5131da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO,
5141da177e4SLinus Torvalds .vmux = 2,
5151da177e4SLinus Torvalds .gpio0 = 0x0f00,
5161da177e4SLinus Torvalds } },
51748d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
5181da177e4SLinus Torvalds },
5191da177e4SLinus Torvalds [CX88_BOARD_HAUPPAUGE_DVB_T1] = {
5201da177e4SLinus Torvalds .name = "Hauppauge Nova-T DVB-T",
521c39ba330SHans Verkuil .tuner_type = UNSET,
522b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
523b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
524b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
5251da177e4SLinus Torvalds .input = { {
5261da177e4SLinus Torvalds .type = CX88_VMUX_DVB,
5271da177e4SLinus Torvalds .vmux = 0,
5281da177e4SLinus Torvalds } },
52948d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
5301da177e4SLinus Torvalds },
5311da177e4SLinus Torvalds [CX88_BOARD_CONEXANT_DVB_T1] = {
5321da177e4SLinus Torvalds .name = "Conexant DVB-T reference design",
533c39ba330SHans Verkuil .tuner_type = UNSET,
534b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
535b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
536b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
5371da177e4SLinus Torvalds .input = { {
5381da177e4SLinus Torvalds .type = CX88_VMUX_DVB,
5391da177e4SLinus Torvalds .vmux = 0,
5401da177e4SLinus Torvalds } },
54148d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
5421da177e4SLinus Torvalds },
5431da177e4SLinus Torvalds [CX88_BOARD_PROVIDEO_PV259] = {
5441da177e4SLinus Torvalds .name = "Provideo PV259",
5451da177e4SLinus Torvalds .tuner_type = TUNER_PHILIPS_FQ1216ME,
546b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
547b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
548b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
5491da177e4SLinus Torvalds .input = { {
5501da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION,
5511da177e4SLinus Torvalds .vmux = 0,
5527b27d45bSRicardo Cerqueira .audioroute = 1,
5531da177e4SLinus Torvalds } },
55448d5e803SMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD,
5551da177e4SLinus Torvalds },
5561da177e4SLinus Torvalds [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS] = {
557a82decf6SMauro Carvalho Chehab .name = "DViCO FusionHDTV DVB-T Plus",
558c39ba330SHans Verkuil .tuner_type = UNSET, /* No analog tuner */
559b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
560b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
561b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
5621da177e4SLinus Torvalds .input = { {
5631da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1,
5641da177e4SLinus Torvalds .vmux = 1,
5651da177e4SLinus Torvalds .gpio0 = 0x000027df,
5661da177e4SLinus Torvalds }, {
5671da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO,
5681da177e4SLinus Torvalds .vmux = 2,
5691da177e4SLinus Torvalds .gpio0 = 0x000027df,
5701da177e4SLinus Torvalds } },
57148d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
5721da177e4SLinus Torvalds },
5731da177e4SLinus Torvalds [CX88_BOARD_DNTV_LIVE_DVB_T] = {
5741da177e4SLinus Torvalds .name = "digitalnow DNTV Live! DVB-T",
575c39ba330SHans Verkuil .tuner_type = UNSET,
576b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
577b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
578b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
5791da177e4SLinus Torvalds .input = { {
5801da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1,
5811da177e4SLinus Torvalds .vmux = 1,
5821da177e4SLinus Torvalds .gpio0 = 0x00000700,
5831da177e4SLinus Torvalds .gpio2 = 0x00000101,
5841da177e4SLinus Torvalds }, {
5851da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO,
5861da177e4SLinus Torvalds .vmux = 2,
5871da177e4SLinus Torvalds .gpio0 = 0x00000700,
5881da177e4SLinus Torvalds .gpio2 = 0x00000101,
5891da177e4SLinus Torvalds } },
59048d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
5911da177e4SLinus Torvalds },
5921da177e4SLinus Torvalds [CX88_BOARD_PCHDTV_HD3000] = {
5931da177e4SLinus Torvalds .name = "pcHDTV HD3000 HDTV",
5949175b854STrent Piepho .tuner_type = TUNER_THOMSON_DTT761X,
595b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
596b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
597b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
598e4f5c82aSMauro Carvalho Chehab .tda9887_conf = TDA9887_PRESENT,
59919dc74b7STrent Piepho /* GPIO[2] = audio source for analog audio out connector
60019dc74b7STrent Piepho * 0 = analog audio input connector
60119dc74b7STrent Piepho * 1 = CX88 audio DACs
60219dc74b7STrent Piepho *
60319dc74b7STrent Piepho * GPIO[7] = input to CX88's audio/chroma ADC
60419dc74b7STrent Piepho * 0 = FM 10.7 MHz IF
60519dc74b7STrent Piepho * 1 = Sound 4.5 MHz IF
60619dc74b7STrent Piepho *
60719dc74b7STrent Piepho * GPIO[1,5,6] = Oren 51132 pins 27,35,28 respectively
60819dc74b7STrent Piepho *
60919dc74b7STrent Piepho * GPIO[16] = Remote control input
61019dc74b7STrent Piepho */
6111da177e4SLinus Torvalds .input = { {
6121da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION,
6131da177e4SLinus Torvalds .vmux = 0,
6141da177e4SLinus Torvalds .gpio0 = 0x00008484,
6151da177e4SLinus Torvalds }, {
6161da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1,
6171da177e4SLinus Torvalds .vmux = 1,
6181da177e4SLinus Torvalds .gpio0 = 0x00008400,
6191da177e4SLinus Torvalds }, {
6201da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO,
6211da177e4SLinus Torvalds .vmux = 2,
6221da177e4SLinus Torvalds .gpio0 = 0x00008400,
6231da177e4SLinus Torvalds } },
6241da177e4SLinus Torvalds .radio = {
6251da177e4SLinus Torvalds .type = CX88_RADIO,
62619dc74b7STrent Piepho .gpio0 = 0x00008404,
6271da177e4SLinus Torvalds },
62848d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
6291da177e4SLinus Torvalds },
6301da177e4SLinus Torvalds [CX88_BOARD_HAUPPAUGE_ROSLYN] = {
6311da177e4SLinus Torvalds // entry added by Kaustubh D. Bhalerao <bhalerao.1@osu.edu>
6321da177e4SLinus Torvalds // GPIO values obtained from regspy, courtesy Sean Covel
6331da177e4SLinus Torvalds .name = "Hauppauge WinTV 28xxx (Roslyn) models",
6341da177e4SLinus Torvalds .tuner_type = UNSET,
635b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
636b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
637b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
6381da177e4SLinus Torvalds .input = { {
6391da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION,
6401da177e4SLinus Torvalds .vmux = 0,
6410345c387SSteven Toth .gpio0 = 0xed1a,
6421da177e4SLinus Torvalds .gpio2 = 0x00ff,
6431da177e4SLinus Torvalds }, {
6441da177e4SLinus Torvalds .type = CX88_VMUX_DEBUG,
6451da177e4SLinus Torvalds .vmux = 0,
6460345c387SSteven Toth .gpio0 = 0xff01,
6471da177e4SLinus Torvalds }, {
6481da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1,
6491da177e4SLinus Torvalds .vmux = 1,
6501da177e4SLinus Torvalds .gpio0 = 0xff02,
6511da177e4SLinus Torvalds }, {
6521da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO,
6531da177e4SLinus Torvalds .vmux = 2,
6541da177e4SLinus Torvalds .gpio0 = 0xed92,
6551da177e4SLinus Torvalds .gpio2 = 0x00ff,
6561da177e4SLinus Torvalds } },
6571da177e4SLinus Torvalds .radio = {
6581da177e4SLinus Torvalds .type = CX88_RADIO,
6591da177e4SLinus Torvalds .gpio0 = 0xed96,
6601da177e4SLinus Torvalds .gpio2 = 0x00ff,
6611da177e4SLinus Torvalds },
66248d5e803SMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD,
6631da177e4SLinus Torvalds },
6641da177e4SLinus Torvalds [CX88_BOARD_DIGITALLOGIC_MEC] = {
6651da177e4SLinus Torvalds .name = "Digital-Logic MICROSPACE Entertainment Center (MEC)",
666b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
667b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
668b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
669b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
6701da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT,
6711da177e4SLinus Torvalds .input = { {
6721da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION,
6731da177e4SLinus Torvalds .vmux = 0,
674b45009b0SMauro Carvalho Chehab .gpio0 = 0x00009d80,
6757b27d45bSRicardo Cerqueira .audioroute = 1,
6761da177e4SLinus Torvalds }, {
6771da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1,
6781da177e4SLinus Torvalds .vmux = 1,
679b45009b0SMauro Carvalho Chehab .gpio0 = 0x00009d76,
6807b27d45bSRicardo Cerqueira .audioroute = 1,
6811da177e4SLinus Torvalds }, {
6821da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO,
6831da177e4SLinus Torvalds .vmux = 2,
684b45009b0SMauro Carvalho Chehab .gpio0 = 0x00009d76,
6857b27d45bSRicardo Cerqueira .audioroute = 1,
6861da177e4SLinus Torvalds } },
6871da177e4SLinus Torvalds .radio = {
6881da177e4SLinus Torvalds .type = CX88_RADIO,
689b45009b0SMauro Carvalho Chehab .gpio0 = 0x00009d00,
6907b27d45bSRicardo Cerqueira .audioroute = 1,
6911da177e4SLinus Torvalds },
69248d5e803SMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD,
6931da177e4SLinus Torvalds },
6941da177e4SLinus Torvalds [CX88_BOARD_IODATA_GVBCTV7E] = {
6951da177e4SLinus Torvalds .name = "IODATA GV/BCTV7E",
6961da177e4SLinus Torvalds .tuner_type = TUNER_PHILIPS_FQ1286,
697b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
698b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
699b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
7001da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT,
7011da177e4SLinus Torvalds .input = { {
7021da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION,
7031da177e4SLinus Torvalds .vmux = 1,
7041da177e4SLinus Torvalds .gpio1 = 0x0000e03f,
7051da177e4SLinus Torvalds }, {
7061da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1,
7071da177e4SLinus Torvalds .vmux = 2,
7081da177e4SLinus Torvalds .gpio1 = 0x0000e07f,
7091da177e4SLinus Torvalds }, {
7101da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO,
7111da177e4SLinus Torvalds .vmux = 3,
7121da177e4SLinus Torvalds .gpio1 = 0x0000e07f,
7131da177e4SLinus Torvalds } }
7141da177e4SLinus Torvalds },
715239df2e2SManuel Capinha [CX88_BOARD_PIXELVIEW_PLAYTV_ULTRA_PRO] = {
716239df2e2SManuel Capinha .name = "PixelView PlayTV Ultra Pro (Stereo)",
717b45009b0SMauro Carvalho Chehab /* May be also TUNER_YMEC_TVF_5533MF for NTSC/M or PAL/M */
718b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
719c5287ba1SMauro Carvalho Chehab .radio_type = UNSET,
720c5287ba1SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
721c5287ba1SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
722399426caSMauro Carvalho Chehab /*
723399426caSMauro Carvalho Chehab * Some variants use a tda9874 and so need the
724399426caSMauro Carvalho Chehab * tvaudio module.
725399426caSMauro Carvalho Chehab */
726facd2366SHans Verkuil .audio_chip = CX88_AUDIO_TVAUDIO,
727239df2e2SManuel Capinha .input = { {
728239df2e2SManuel Capinha .type = CX88_VMUX_TELEVISION,
729239df2e2SManuel Capinha .vmux = 0,
730b45009b0SMauro Carvalho Chehab .gpio0 = 0xbf61, /* internal decoder */
731239df2e2SManuel Capinha }, {
732239df2e2SManuel Capinha .type = CX88_VMUX_COMPOSITE1,
733239df2e2SManuel Capinha .vmux = 1,
734239df2e2SManuel Capinha .gpio0 = 0xbf63,
735239df2e2SManuel Capinha }, {
736239df2e2SManuel Capinha .type = CX88_VMUX_SVIDEO,
737239df2e2SManuel Capinha .vmux = 2,
738239df2e2SManuel Capinha .gpio0 = 0xbf63,
739239df2e2SManuel Capinha } },
740239df2e2SManuel Capinha .radio = {
741239df2e2SManuel Capinha .type = CX88_RADIO,
742239df2e2SManuel Capinha .gpio0 = 0xbf60,
743239df2e2SManuel Capinha },
744239df2e2SManuel Capinha },
745b45009b0SMauro Carvalho Chehab [CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_T] = {
746a82decf6SMauro Carvalho Chehab .name = "DViCO FusionHDTV 3 Gold-T",
74783ac8722SMichael Krufky .tuner_type = TUNER_THOMSON_DTT761X,
748b45009b0SMauro Carvalho Chehab .radio_type = UNSET,
749b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
750b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
751e4f5c82aSMauro Carvalho Chehab .tda9887_conf = TDA9887_PRESENT,
752b45009b0SMauro Carvalho Chehab .input = { {
753b45009b0SMauro Carvalho Chehab .type = CX88_VMUX_TELEVISION,
754b45009b0SMauro Carvalho Chehab .vmux = 0,
755e52e98a7SMauro Carvalho Chehab .gpio0 = 0x97ed,
756b45009b0SMauro Carvalho Chehab }, {
757b45009b0SMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1,
758b45009b0SMauro Carvalho Chehab .vmux = 1,
759e52e98a7SMauro Carvalho Chehab .gpio0 = 0x97e9,
760b45009b0SMauro Carvalho Chehab }, {
761b45009b0SMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO,
762b45009b0SMauro Carvalho Chehab .vmux = 2,
763e52e98a7SMauro Carvalho Chehab .gpio0 = 0x97e9,
764b45009b0SMauro Carvalho Chehab } },
76548d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
766b45009b0SMauro Carvalho Chehab },
767a82decf6SMauro Carvalho Chehab [CX88_BOARD_ADSTECH_DVB_T_PCI] = {
768a82decf6SMauro Carvalho Chehab .name = "ADS Tech Instant TV DVB-T PCI",
769c39ba330SHans Verkuil .tuner_type = UNSET,
770a82decf6SMauro Carvalho Chehab .radio_type = UNSET,
771a82decf6SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
772a82decf6SMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
773a82decf6SMauro Carvalho Chehab .input = { {
774a82decf6SMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1,
775a82decf6SMauro Carvalho Chehab .vmux = 1,
776a82decf6SMauro Carvalho Chehab .gpio0 = 0x0700,
777a82decf6SMauro Carvalho Chehab .gpio2 = 0x0101,
778a82decf6SMauro Carvalho Chehab }, {
779a82decf6SMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO,
780a82decf6SMauro Carvalho Chehab .vmux = 2,
781a82decf6SMauro Carvalho Chehab .gpio0 = 0x0700,
782a82decf6SMauro Carvalho Chehab .gpio2 = 0x0101,
783a82decf6SMauro Carvalho Chehab } },
78448d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
785a82decf6SMauro Carvalho Chehab },
786e057ee11SMichael Krufky [CX88_BOARD_TERRATEC_CINERGY_1400_DVB_T1] = {
787e057ee11SMichael Krufky .name = "TerraTec Cinergy 1400 DVB-T",
788c39ba330SHans Verkuil .tuner_type = UNSET,
789e057ee11SMichael Krufky .input = { {
790e057ee11SMichael Krufky .type = CX88_VMUX_DVB,
791e057ee11SMichael Krufky .vmux = 0,
79205eda249SHeiko Baums }, {
79305eda249SHeiko Baums .type = CX88_VMUX_COMPOSITE1,
79405eda249SHeiko Baums .vmux = 2,
79505eda249SHeiko Baums }, {
79605eda249SHeiko Baums .type = CX88_VMUX_SVIDEO,
79705eda249SHeiko Baums .vmux = 2,
798e057ee11SMichael Krufky } },
79948d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
800e057ee11SMichael Krufky },
8019fef07caSMichael Krufky [CX88_BOARD_DVICO_FUSIONHDTV_5_GOLD] = {
8029fef07caSMichael Krufky .name = "DViCO FusionHDTV 5 Gold",
8039c26c8b1SMichael Krufky .tuner_type = TUNER_LG_TDVS_H06XF, /* TDVS-H062F */
8049fef07caSMichael Krufky .radio_type = UNSET,
8059fef07caSMichael Krufky .tuner_addr = ADDR_UNSET,
8069fef07caSMichael Krufky .radio_addr = ADDR_UNSET,
807e52e98a7SMauro Carvalho Chehab .tda9887_conf = TDA9887_PRESENT,
8089fef07caSMichael Krufky .input = { {
8099fef07caSMichael Krufky .type = CX88_VMUX_TELEVISION,
8109fef07caSMichael Krufky .vmux = 0,
811e52e98a7SMauro Carvalho Chehab .gpio0 = 0x87fd,
8129fef07caSMichael Krufky }, {
8139fef07caSMichael Krufky .type = CX88_VMUX_COMPOSITE1,
8149fef07caSMichael Krufky .vmux = 1,
815e52e98a7SMauro Carvalho Chehab .gpio0 = 0x87f9,
8169fef07caSMichael Krufky }, {
8179fef07caSMichael Krufky .type = CX88_VMUX_SVIDEO,
8189fef07caSMichael Krufky .vmux = 2,
819e52e98a7SMauro Carvalho Chehab .gpio0 = 0x87f9,
8209fef07caSMichael Krufky } },
82148d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
8229fef07caSMichael Krufky },
823d45170edSNickolay V. Shmyrev [CX88_BOARD_AVERMEDIA_ULTRATV_MC_550] = {
824d45170edSNickolay V. Shmyrev .name = "AverMedia UltraTV Media Center PCI 550",
825d45170edSNickolay V. Shmyrev .tuner_type = TUNER_PHILIPS_FM1236_MK3,
826d45170edSNickolay V. Shmyrev .radio_type = UNSET,
827d45170edSNickolay V. Shmyrev .tuner_addr = ADDR_UNSET,
828d45170edSNickolay V. Shmyrev .radio_addr = ADDR_UNSET,
829d45170edSNickolay V. Shmyrev .tda9887_conf = TDA9887_PRESENT,
830d45170edSNickolay V. Shmyrev .input = { {
831d45170edSNickolay V. Shmyrev .type = CX88_VMUX_COMPOSITE1,
832d45170edSNickolay V. Shmyrev .vmux = 0,
833d45170edSNickolay V. Shmyrev .gpio0 = 0x0000cd73,
8347b27d45bSRicardo Cerqueira .audioroute = 1,
835d45170edSNickolay V. Shmyrev }, {
836d45170edSNickolay V. Shmyrev .type = CX88_VMUX_SVIDEO,
837d45170edSNickolay V. Shmyrev .vmux = 1,
838d45170edSNickolay V. Shmyrev .gpio0 = 0x0000cd73,
8397b27d45bSRicardo Cerqueira .audioroute = 1,
840d45170edSNickolay V. Shmyrev }, {
841d45170edSNickolay V. Shmyrev .type = CX88_VMUX_TELEVISION,
842d45170edSNickolay V. Shmyrev .vmux = 3,
843d45170edSNickolay V. Shmyrev .gpio0 = 0x0000cdb3,
8447b27d45bSRicardo Cerqueira .audioroute = 1,
845d45170edSNickolay V. Shmyrev } },
846d45170edSNickolay V. Shmyrev .radio = {
847d45170edSNickolay V. Shmyrev .type = CX88_RADIO,
848d45170edSNickolay V. Shmyrev .vmux = 2,
849d45170edSNickolay V. Shmyrev .gpio0 = 0x0000cdf3,
8507b27d45bSRicardo Cerqueira .audioroute = 1,
851d45170edSNickolay V. Shmyrev },
8525b26c82fSMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD,
853d45170edSNickolay V. Shmyrev },
8540bcc37c3SAlexander Wold [CX88_BOARD_KWORLD_VSTREAM_EXPERT_DVD] = {
8550bcc37c3SAlexander Wold /* Alexander Wold <awold@bigfoot.com> */
8560bcc37c3SAlexander Wold .name = "Kworld V-Stream Xpert DVD",
8570bcc37c3SAlexander Wold .tuner_type = UNSET,
8580bcc37c3SAlexander Wold .input = { {
8590bcc37c3SAlexander Wold .type = CX88_VMUX_COMPOSITE1,
8600bcc37c3SAlexander Wold .vmux = 1,
8610bcc37c3SAlexander Wold .gpio0 = 0x03000000,
8620bcc37c3SAlexander Wold .gpio1 = 0x01000000,
8630bcc37c3SAlexander Wold .gpio2 = 0x02000000,
8640bcc37c3SAlexander Wold .gpio3 = 0x00100000,
8650bcc37c3SAlexander Wold }, {
8660bcc37c3SAlexander Wold .type = CX88_VMUX_SVIDEO,
8670bcc37c3SAlexander Wold .vmux = 2,
8680bcc37c3SAlexander Wold .gpio0 = 0x03000000,
8690bcc37c3SAlexander Wold .gpio1 = 0x01000000,
8700bcc37c3SAlexander Wold .gpio2 = 0x02000000,
8710bcc37c3SAlexander Wold .gpio3 = 0x00100000,
8720bcc37c3SAlexander Wold } },
8730bcc37c3SAlexander Wold },
874e976f937SKirk Lapray [CX88_BOARD_ATI_HDTVWONDER] = {
875e976f937SKirk Lapray .name = "ATI HDTV Wonder",
876e976f937SKirk Lapray .tuner_type = TUNER_PHILIPS_TUV1236D,
877e976f937SKirk Lapray .radio_type = UNSET,
878e976f937SKirk Lapray .tuner_addr = ADDR_UNSET,
879e976f937SKirk Lapray .radio_addr = ADDR_UNSET,
880e976f937SKirk Lapray .input = { {
881e976f937SKirk Lapray .type = CX88_VMUX_TELEVISION,
882e976f937SKirk Lapray .vmux = 0,
883e976f937SKirk Lapray .gpio0 = 0x00000ff7,
884e976f937SKirk Lapray .gpio1 = 0x000000ff,
885e976f937SKirk Lapray .gpio2 = 0x00000001,
886e976f937SKirk Lapray .gpio3 = 0x00000000,
887e976f937SKirk Lapray }, {
888e976f937SKirk Lapray .type = CX88_VMUX_COMPOSITE1,
889e976f937SKirk Lapray .vmux = 1,
890e976f937SKirk Lapray .gpio0 = 0x00000ffe,
891e976f937SKirk Lapray .gpio1 = 0x000000ff,
892e976f937SKirk Lapray .gpio2 = 0x00000001,
893e976f937SKirk Lapray .gpio3 = 0x00000000,
894e976f937SKirk Lapray }, {
895e976f937SKirk Lapray .type = CX88_VMUX_SVIDEO,
896e976f937SKirk Lapray .vmux = 2,
897e976f937SKirk Lapray .gpio0 = 0x00000ffe,
898e976f937SKirk Lapray .gpio1 = 0x000000ff,
899e976f937SKirk Lapray .gpio2 = 0x00000001,
900e976f937SKirk Lapray .gpio3 = 0x00000000,
901e976f937SKirk Lapray } },
90248d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
903e976f937SKirk Lapray },
9042b5200a7SDavid Shirley [CX88_BOARD_WINFAST_DTV1000] = {
9052b5200a7SDavid Shirley .name = "WinFast DTV1000-T",
906c39ba330SHans Verkuil .tuner_type = UNSET,
9072b5200a7SDavid Shirley .radio_type = UNSET,
9082b5200a7SDavid Shirley .tuner_addr = ADDR_UNSET,
9092b5200a7SDavid Shirley .radio_addr = ADDR_UNSET,
9102b5200a7SDavid Shirley .input = { {
9112b5200a7SDavid Shirley .type = CX88_VMUX_DVB,
9122b5200a7SDavid Shirley .vmux = 0,
913e8f4e752SJean Delvare }, {
914e8f4e752SJean Delvare .type = CX88_VMUX_COMPOSITE1,
915e8f4e752SJean Delvare .vmux = 1,
916e8f4e752SJean Delvare }, {
917e8f4e752SJean Delvare .type = CX88_VMUX_SVIDEO,
918e8f4e752SJean Delvare .vmux = 2,
9192b5200a7SDavid Shirley } },
92048d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
9212b5200a7SDavid Shirley },
9227418f346SLubomir Bulej [CX88_BOARD_AVERTV_303] = {
9237418f346SLubomir Bulej .name = "AVerTV 303 (M126)",
9247418f346SLubomir Bulej .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
9257418f346SLubomir Bulej .radio_type = UNSET,
9267418f346SLubomir Bulej .tuner_addr = ADDR_UNSET,
9277418f346SLubomir Bulej .radio_addr = ADDR_UNSET,
9287418f346SLubomir Bulej .tda9887_conf = TDA9887_PRESENT,
9297418f346SLubomir Bulej .input = { {
9307418f346SLubomir Bulej .type = CX88_VMUX_TELEVISION,
9317418f346SLubomir Bulej .vmux = 0,
9327418f346SLubomir Bulej .gpio0 = 0x00ff,
9337418f346SLubomir Bulej .gpio1 = 0xe09f,
9347418f346SLubomir Bulej .gpio2 = 0x0010,
9357418f346SLubomir Bulej .gpio3 = 0x0000,
9367418f346SLubomir Bulej }, {
9377418f346SLubomir Bulej .type = CX88_VMUX_COMPOSITE1,
9387418f346SLubomir Bulej .vmux = 1,
9397418f346SLubomir Bulej .gpio0 = 0x00ff,
9407418f346SLubomir Bulej .gpio1 = 0xe05f,
9417418f346SLubomir Bulej .gpio2 = 0x0010,
9427418f346SLubomir Bulej .gpio3 = 0x0000,
9437418f346SLubomir Bulej }, {
9447418f346SLubomir Bulej .type = CX88_VMUX_SVIDEO,
9457418f346SLubomir Bulej .vmux = 2,
9467418f346SLubomir Bulej .gpio0 = 0x00ff,
9477418f346SLubomir Bulej .gpio1 = 0xe05f,
9487418f346SLubomir Bulej .gpio2 = 0x0010,
9497418f346SLubomir Bulej .gpio3 = 0x0000,
9507418f346SLubomir Bulej } },
9517418f346SLubomir Bulej },
9520fa14aa6SSteven Toth [CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1] = {
9530fa14aa6SSteven Toth .name = "Hauppauge Nova-S-Plus DVB-S",
954c39ba330SHans Verkuil .tuner_type = UNSET,
9550fa14aa6SSteven Toth .radio_type = UNSET,
9560fa14aa6SSteven Toth .tuner_addr = ADDR_UNSET,
9570fa14aa6SSteven Toth .radio_addr = ADDR_UNSET,
958facd2366SHans Verkuil .audio_chip = CX88_AUDIO_WM8775,
9596951803cSLawrence Rust .i2sinputcntl = 2,
9600fa14aa6SSteven Toth .input = { {
9610fa14aa6SSteven Toth .type = CX88_VMUX_DVB,
9620fa14aa6SSteven Toth .vmux = 0,
963fcb97573Slawrence rust /* 2: Line-In */
964fcb97573Slawrence rust .audioroute = 2,
9650fa14aa6SSteven Toth }, {
9660fa14aa6SSteven Toth .type = CX88_VMUX_COMPOSITE1,
9670fa14aa6SSteven Toth .vmux = 1,
968fcb97573Slawrence rust /* 2: Line-In */
969fcb97573Slawrence rust .audioroute = 2,
9700fa14aa6SSteven Toth }, {
9710fa14aa6SSteven Toth .type = CX88_VMUX_SVIDEO,
9720fa14aa6SSteven Toth .vmux = 2,
973fcb97573Slawrence rust /* 2: Line-In */
974fcb97573Slawrence rust .audioroute = 2,
9750fa14aa6SSteven Toth } },
97648d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
9770fa14aa6SSteven Toth },
9780fa14aa6SSteven Toth [CX88_BOARD_HAUPPAUGE_NOVASE2_S1] = {
9790fa14aa6SSteven Toth .name = "Hauppauge Nova-SE2 DVB-S",
980c39ba330SHans Verkuil .tuner_type = UNSET,
9810fa14aa6SSteven Toth .radio_type = UNSET,
9820fa14aa6SSteven Toth .tuner_addr = ADDR_UNSET,
9830fa14aa6SSteven Toth .radio_addr = ADDR_UNSET,
9840fa14aa6SSteven Toth .input = { {
9850fa14aa6SSteven Toth .type = CX88_VMUX_DVB,
9860fa14aa6SSteven Toth .vmux = 0,
9870fa14aa6SSteven Toth } },
98848d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
9890fa14aa6SSteven Toth },
9900e0351e3SVadim Catana [CX88_BOARD_KWORLD_DVBS_100] = {
9910e0351e3SVadim Catana .name = "KWorld DVB-S 100",
992c39ba330SHans Verkuil .tuner_type = UNSET,
9930e0351e3SVadim Catana .radio_type = UNSET,
9940e0351e3SVadim Catana .tuner_addr = ADDR_UNSET,
9950e0351e3SVadim Catana .radio_addr = ADDR_UNSET,
996facd2366SHans Verkuil .audio_chip = CX88_AUDIO_WM8775,
9970e0351e3SVadim Catana .input = { {
9980e0351e3SVadim Catana .type = CX88_VMUX_DVB,
9990e0351e3SVadim Catana .vmux = 0,
100046e67acdSMauro Carvalho Chehab /* 2: Line-In */
100146e67acdSMauro Carvalho Chehab .audioroute = 2,
10020e0351e3SVadim Catana }, {
10030e0351e3SVadim Catana .type = CX88_VMUX_COMPOSITE1,
10040e0351e3SVadim Catana .vmux = 1,
100546e67acdSMauro Carvalho Chehab /* 2: Line-In */
100646e67acdSMauro Carvalho Chehab .audioroute = 2,
10070e0351e3SVadim Catana }, {
10080e0351e3SVadim Catana .type = CX88_VMUX_SVIDEO,
10090e0351e3SVadim Catana .vmux = 2,
101046e67acdSMauro Carvalho Chehab /* 2: Line-In */
101146e67acdSMauro Carvalho Chehab .audioroute = 2,
10120e0351e3SVadim Catana } },
101348d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
10140e0351e3SVadim Catana },
1015611900c1SSteven Toth [CX88_BOARD_HAUPPAUGE_HVR1100] = {
1016611900c1SSteven Toth .name = "Hauppauge WinTV-HVR1100 DVB-T/Hybrid",
1017611900c1SSteven Toth .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3,
1018611900c1SSteven Toth .radio_type = UNSET,
1019611900c1SSteven Toth .tuner_addr = ADDR_UNSET,
1020611900c1SSteven Toth .radio_addr = ADDR_UNSET,
1021611900c1SSteven Toth .tda9887_conf = TDA9887_PRESENT,
1022611900c1SSteven Toth .input = { {
1023611900c1SSteven Toth .type = CX88_VMUX_TELEVISION,
1024611900c1SSteven Toth .vmux = 0,
1025611900c1SSteven Toth }, {
1026611900c1SSteven Toth .type = CX88_VMUX_COMPOSITE1,
1027611900c1SSteven Toth .vmux = 1,
1028611900c1SSteven Toth }, {
1029611900c1SSteven Toth .type = CX88_VMUX_SVIDEO,
1030611900c1SSteven Toth .vmux = 2,
1031611900c1SSteven Toth } },
1032611900c1SSteven Toth /* fixme: Add radio support */
103348d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
1034611900c1SSteven Toth },
1035611900c1SSteven Toth [CX88_BOARD_HAUPPAUGE_HVR1100LP] = {
1036611900c1SSteven Toth .name = "Hauppauge WinTV-HVR1100 DVB-T/Hybrid (Low Profile)",
1037611900c1SSteven Toth .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3,
1038611900c1SSteven Toth .radio_type = UNSET,
1039611900c1SSteven Toth .tuner_addr = ADDR_UNSET,
1040611900c1SSteven Toth .radio_addr = ADDR_UNSET,
1041611900c1SSteven Toth .tda9887_conf = TDA9887_PRESENT,
1042611900c1SSteven Toth .input = { {
1043611900c1SSteven Toth .type = CX88_VMUX_TELEVISION,
1044611900c1SSteven Toth .vmux = 0,
1045611900c1SSteven Toth }, {
1046611900c1SSteven Toth .type = CX88_VMUX_COMPOSITE1,
1047611900c1SSteven Toth .vmux = 1,
1048611900c1SSteven Toth } },
1049611900c1SSteven Toth /* fixme: Add radio support */
105048d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
1051611900c1SSteven Toth },
1052fc40b261SChris Pascoe [CX88_BOARD_DNTV_LIVE_DVB_T_PRO] = {
1053fc40b261SChris Pascoe .name = "digitalnow DNTV Live! DVB-T Pro",
1054fc40b261SChris Pascoe .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3,
1055fc40b261SChris Pascoe .radio_type = UNSET,
1056fc40b261SChris Pascoe .tuner_addr = ADDR_UNSET,
1057fc40b261SChris Pascoe .radio_addr = ADDR_UNSET,
1058fc40b261SChris Pascoe .tda9887_conf = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE |
1059fc40b261SChris Pascoe TDA9887_PORT2_ACTIVE,
1060fc40b261SChris Pascoe .input = { {
1061fc40b261SChris Pascoe .type = CX88_VMUX_TELEVISION,
1062fc40b261SChris Pascoe .vmux = 0,
1063fc40b261SChris Pascoe .gpio0 = 0xf80808,
1064fc40b261SChris Pascoe }, {
1065fc40b261SChris Pascoe .type = CX88_VMUX_COMPOSITE1,
1066fc40b261SChris Pascoe .vmux = 1,
1067fc40b261SChris Pascoe .gpio0 = 0xf80808,
1068fc40b261SChris Pascoe }, {
1069fc40b261SChris Pascoe .type = CX88_VMUX_SVIDEO,
1070fc40b261SChris Pascoe .vmux = 2,
1071fc40b261SChris Pascoe .gpio0 = 0xf80808,
1072fc40b261SChris Pascoe } },
1073fc40b261SChris Pascoe .radio = {
1074fc40b261SChris Pascoe .type = CX88_RADIO,
1075fc40b261SChris Pascoe .gpio0 = 0xf80808,
1076fc40b261SChris Pascoe },
107748d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
1078fc40b261SChris Pascoe },
1079f39624fdSManenti Marco [CX88_BOARD_KWORLD_DVB_T_CX22702] = {
1080f39624fdSManenti Marco /* Kworld V-stream Xpert DVB-T with Thomson tuner */
1081f39624fdSManenti Marco /* DTT 7579 Conexant CX22702-19 Conexant CX2388x */
1082f39624fdSManenti Marco /* Manenti Marco <marco_manenti@colman.it> */
1083f39624fdSManenti Marco .name = "KWorld/VStream XPert DVB-T with cx22702",
1084c39ba330SHans Verkuil .tuner_type = UNSET,
1085f39624fdSManenti Marco .radio_type = UNSET,
1086f39624fdSManenti Marco .tuner_addr = ADDR_UNSET,
1087f39624fdSManenti Marco .radio_addr = ADDR_UNSET,
1088f39624fdSManenti Marco .input = { {
1089f39624fdSManenti Marco .type = CX88_VMUX_COMPOSITE1,
1090f39624fdSManenti Marco .vmux = 1,
1091f39624fdSManenti Marco .gpio0 = 0x0700,
1092f39624fdSManenti Marco .gpio2 = 0x0101,
1093f39624fdSManenti Marco }, {
1094f39624fdSManenti Marco .type = CX88_VMUX_SVIDEO,
1095f39624fdSManenti Marco .vmux = 2,
1096f39624fdSManenti Marco .gpio0 = 0x0700,
1097f39624fdSManenti Marco .gpio2 = 0x0101,
1098f39624fdSManenti Marco } },
109948d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
1100f39624fdSManenti Marco },
110143eabb4eSChris Pascoe [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL] = {
110243eabb4eSChris Pascoe .name = "DViCO FusionHDTV DVB-T Dual Digital",
1103c39ba330SHans Verkuil .tuner_type = UNSET, /* No analog tuner */
110443eabb4eSChris Pascoe .radio_type = UNSET,
110543eabb4eSChris Pascoe .tuner_addr = ADDR_UNSET,
110643eabb4eSChris Pascoe .radio_addr = ADDR_UNSET,
110743eabb4eSChris Pascoe .input = { {
110843eabb4eSChris Pascoe .type = CX88_VMUX_COMPOSITE1,
110943eabb4eSChris Pascoe .vmux = 1,
1110d536e9c4SChris Pascoe .gpio0 = 0x000067df,
111143eabb4eSChris Pascoe }, {
111243eabb4eSChris Pascoe .type = CX88_VMUX_SVIDEO,
111343eabb4eSChris Pascoe .vmux = 2,
1114d536e9c4SChris Pascoe .gpio0 = 0x000067df,
111543eabb4eSChris Pascoe } },
111648d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
111743eabb4eSChris Pascoe },
111844256de1SMichael Krufky [CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT] = {
111944256de1SMichael Krufky .name = "KWorld HardwareMpegTV XPert",
112044256de1SMichael Krufky .tuner_type = TUNER_PHILIPS_TDA8290,
112144256de1SMichael Krufky .radio_type = UNSET,
112244256de1SMichael Krufky .tuner_addr = ADDR_UNSET,
112344256de1SMichael Krufky .radio_addr = ADDR_UNSET,
112444256de1SMichael Krufky .input = { {
112544256de1SMichael Krufky .type = CX88_VMUX_TELEVISION,
112644256de1SMichael Krufky .vmux = 0,
1127e2798212SMichael Krufky .gpio0 = 0x3de2,
112824da4e4bSMichael Krufky .gpio2 = 0x00ff,
1129bc53f783SMichael Krufky }, {
1130bc53f783SMichael Krufky .type = CX88_VMUX_COMPOSITE1,
1131bc53f783SMichael Krufky .vmux = 1,
1132bc53f783SMichael Krufky .gpio0 = 0x3de6,
11337b27d45bSRicardo Cerqueira .audioroute = 1,
1134bc53f783SMichael Krufky }, {
1135bc53f783SMichael Krufky .type = CX88_VMUX_SVIDEO,
1136bc53f783SMichael Krufky .vmux = 2,
1137bc53f783SMichael Krufky .gpio0 = 0x3de6,
11387b27d45bSRicardo Cerqueira .audioroute = 1,
113944256de1SMichael Krufky } },
1140e2798212SMichael Krufky .radio = {
1141e2798212SMichael Krufky .type = CX88_RADIO,
1142e2798212SMichael Krufky .gpio0 = 0x3de6,
114324da4e4bSMichael Krufky .gpio2 = 0x00ff,
1144e2798212SMichael Krufky },
114548d5e803SMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD,
114644256de1SMichael Krufky },
1147780dfef3SChris Pascoe [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID] = {
1148780dfef3SChris Pascoe .name = "DViCO FusionHDTV DVB-T Hybrid",
114991ae3299SMichael Krufky .tuner_type = TUNER_THOMSON_FE6600,
1150780dfef3SChris Pascoe .radio_type = UNSET,
1151780dfef3SChris Pascoe .tuner_addr = ADDR_UNSET,
1152780dfef3SChris Pascoe .radio_addr = ADDR_UNSET,
1153780dfef3SChris Pascoe .input = { {
1154780dfef3SChris Pascoe .type = CX88_VMUX_TELEVISION,
1155780dfef3SChris Pascoe .vmux = 0,
1156780dfef3SChris Pascoe .gpio0 = 0x0000a75f,
1157780dfef3SChris Pascoe }, {
1158780dfef3SChris Pascoe .type = CX88_VMUX_COMPOSITE1,
1159780dfef3SChris Pascoe .vmux = 1,
1160780dfef3SChris Pascoe .gpio0 = 0x0000a75b,
1161780dfef3SChris Pascoe }, {
1162780dfef3SChris Pascoe .type = CX88_VMUX_SVIDEO,
1163780dfef3SChris Pascoe .vmux = 2,
1164780dfef3SChris Pascoe .gpio0 = 0x0000a75b,
1165780dfef3SChris Pascoe } },
116648d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
1167780dfef3SChris Pascoe },
1168e142e7c4SMichael Krufky [CX88_BOARD_PCHDTV_HD5500] = {
1169e142e7c4SMichael Krufky .name = "pcHDTV HD5500 HDTV",
11709c26c8b1SMichael Krufky .tuner_type = TUNER_LG_TDVS_H06XF, /* TDVS-H064F */
1171e142e7c4SMichael Krufky .radio_type = UNSET,
1172e142e7c4SMichael Krufky .tuner_addr = ADDR_UNSET,
1173e142e7c4SMichael Krufky .radio_addr = ADDR_UNSET,
1174e142e7c4SMichael Krufky .tda9887_conf = TDA9887_PRESENT,
1175e142e7c4SMichael Krufky .input = { {
1176e142e7c4SMichael Krufky .type = CX88_VMUX_TELEVISION,
1177e142e7c4SMichael Krufky .vmux = 0,
1178e142e7c4SMichael Krufky .gpio0 = 0x87fd,
1179e142e7c4SMichael Krufky }, {
1180e142e7c4SMichael Krufky .type = CX88_VMUX_COMPOSITE1,
1181e142e7c4SMichael Krufky .vmux = 1,
1182e142e7c4SMichael Krufky .gpio0 = 0x87f9,
1183e142e7c4SMichael Krufky }, {
1184e142e7c4SMichael Krufky .type = CX88_VMUX_SVIDEO,
1185e142e7c4SMichael Krufky .vmux = 2,
1186e142e7c4SMichael Krufky .gpio0 = 0x87f9,
1187e142e7c4SMichael Krufky } },
118848d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
1189e142e7c4SMichael Krufky },
1190b3038304SValentin Zagura [CX88_BOARD_KWORLD_MCE200_DELUXE] = {
1191399426caSMauro Carvalho Chehab /*
1192399426caSMauro Carvalho Chehab * FIXME: tested TV input only, disabled composite,
1193399426caSMauro Carvalho Chehab * svideo and radio until they can be tested also.
1194399426caSMauro Carvalho Chehab */
1195b3038304SValentin Zagura .name = "Kworld MCE 200 Deluxe",
1196b3038304SValentin Zagura .tuner_type = TUNER_TENA_9533_DI,
1197b3038304SValentin Zagura .radio_type = UNSET,
1198b3038304SValentin Zagura .tda9887_conf = TDA9887_PRESENT,
1199b3038304SValentin Zagura .tuner_addr = ADDR_UNSET,
1200b3038304SValentin Zagura .radio_addr = ADDR_UNSET,
1201b3038304SValentin Zagura .input = { {
1202b3038304SValentin Zagura .type = CX88_VMUX_TELEVISION,
1203b3038304SValentin Zagura .vmux = 0,
1204b3038304SValentin Zagura .gpio0 = 0x0000BDE6
1205b3038304SValentin Zagura } },
120648d5e803SMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD,
1207b3038304SValentin Zagura },
1208a3124622SAngelo Marconi [CX88_BOARD_PIXELVIEW_PLAYTV_P7000] = {
1209a3124622SAngelo Marconi /* FIXME: SVideo, Composite and FM inputs are untested */
1210a3124622SAngelo Marconi .name = "PixelView PlayTV P7000",
1211a3124622SAngelo Marconi .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
1212a3124622SAngelo Marconi .radio_type = UNSET,
1213a3124622SAngelo Marconi .tuner_addr = ADDR_UNSET,
1214a3124622SAngelo Marconi .radio_addr = ADDR_UNSET,
1215a3124622SAngelo Marconi .tda9887_conf = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE |
1216a3124622SAngelo Marconi TDA9887_PORT2_ACTIVE,
1217a3124622SAngelo Marconi .input = { {
1218a3124622SAngelo Marconi .type = CX88_VMUX_TELEVISION,
1219a3124622SAngelo Marconi .vmux = 0,
1220a3124622SAngelo Marconi .gpio0 = 0x5da6,
1221a3124622SAngelo Marconi } },
122248d5e803SMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD,
1223a3124622SAngelo Marconi },
1224be4f4519SRicardo Cerqueira [CX88_BOARD_NPGTECH_REALTV_TOP10FM] = {
1225be4f4519SRicardo Cerqueira .name = "NPG Tech Real TV FM Top 10",
1226be4f4519SRicardo Cerqueira .tuner_type = TUNER_TNF_5335MF, /* Actually a TNF9535 */
1227680543c5SRicardo Cerqueira .radio_type = UNSET,
1228680543c5SRicardo Cerqueira .tuner_addr = ADDR_UNSET,
1229680543c5SRicardo Cerqueira .radio_addr = ADDR_UNSET,
1230680543c5SRicardo Cerqueira .input = { {
1231680543c5SRicardo Cerqueira .type = CX88_VMUX_TELEVISION,
1232680543c5SRicardo Cerqueira .vmux = 0,
1233680543c5SRicardo Cerqueira .gpio0 = 0x0788,
1234680543c5SRicardo Cerqueira }, {
1235680543c5SRicardo Cerqueira .type = CX88_VMUX_COMPOSITE1,
1236680543c5SRicardo Cerqueira .vmux = 1,
1237680543c5SRicardo Cerqueira .gpio0 = 0x078b,
1238680543c5SRicardo Cerqueira }, {
1239680543c5SRicardo Cerqueira .type = CX88_VMUX_SVIDEO,
1240680543c5SRicardo Cerqueira .vmux = 2,
1241be4f4519SRicardo Cerqueira .gpio0 = 0x078b,
1242680543c5SRicardo Cerqueira } },
1243680543c5SRicardo Cerqueira .radio = {
1244680543c5SRicardo Cerqueira .type = CX88_RADIO,
1245680543c5SRicardo Cerqueira .gpio0 = 0x074a,
1246680543c5SRicardo Cerqueira },
1247680543c5SRicardo Cerqueira },
12484bd6e9d9SMalcolm Valentine [CX88_BOARD_WINFAST_DTV2000H] = {
12494bd6e9d9SMalcolm Valentine .name = "WinFast DTV2000 H",
12504bd6e9d9SMalcolm Valentine .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3,
12514bd6e9d9SMalcolm Valentine .radio_type = UNSET,
12524bd6e9d9SMalcolm Valentine .tuner_addr = ADDR_UNSET,
12534bd6e9d9SMalcolm Valentine .radio_addr = ADDR_UNSET,
12544bd6e9d9SMalcolm Valentine .tda9887_conf = TDA9887_PRESENT,
12554bd6e9d9SMalcolm Valentine .input = { {
12564bd6e9d9SMalcolm Valentine .type = CX88_VMUX_TELEVISION,
12574bd6e9d9SMalcolm Valentine .vmux = 0,
12584bd6e9d9SMalcolm Valentine .gpio0 = 0x00017304,
12594bd6e9d9SMalcolm Valentine .gpio1 = 0x00008203,
12604bd6e9d9SMalcolm Valentine .gpio2 = 0x00017304,
12614bd6e9d9SMalcolm Valentine .gpio3 = 0x02000000,
12625cff91a0SVincent Pelletier }, {
12635cff91a0SVincent Pelletier .type = CX88_VMUX_COMPOSITE1,
12645cff91a0SVincent Pelletier .vmux = 1,
12655cff91a0SVincent Pelletier .gpio0 = 0x0001d701,
12665cff91a0SVincent Pelletier .gpio1 = 0x0000b207,
12675cff91a0SVincent Pelletier .gpio2 = 0x0001d701,
12685cff91a0SVincent Pelletier .gpio3 = 0x02000000,
12695cff91a0SVincent Pelletier }, {
12705cff91a0SVincent Pelletier .type = CX88_VMUX_COMPOSITE2,
12715cff91a0SVincent Pelletier .vmux = 2,
12725cff91a0SVincent Pelletier .gpio0 = 0x0001d503,
12735cff91a0SVincent Pelletier .gpio1 = 0x0000b207,
12745cff91a0SVincent Pelletier .gpio2 = 0x0001d503,
12755cff91a0SVincent Pelletier .gpio3 = 0x02000000,
12765cff91a0SVincent Pelletier }, {
12775cff91a0SVincent Pelletier .type = CX88_VMUX_SVIDEO,
12785cff91a0SVincent Pelletier .vmux = 3,
12795cff91a0SVincent Pelletier .gpio0 = 0x0001d701,
12805cff91a0SVincent Pelletier .gpio1 = 0x0000b207,
12815cff91a0SVincent Pelletier .gpio2 = 0x0001d701,
12825cff91a0SVincent Pelletier .gpio3 = 0x02000000,
12834bd6e9d9SMalcolm Valentine } },
12845cff91a0SVincent Pelletier .radio = {
12855cff91a0SVincent Pelletier .type = CX88_RADIO,
12865cff91a0SVincent Pelletier .gpio0 = 0x00015702,
12875cff91a0SVincent Pelletier .gpio1 = 0x0000f207,
12885cff91a0SVincent Pelletier .gpio2 = 0x00015702,
12895cff91a0SVincent Pelletier .gpio3 = 0x02000000,
12905cff91a0SVincent Pelletier },
129148d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
12924bd6e9d9SMalcolm Valentine },
12934d14c833SVlastimil Labsky [CX88_BOARD_WINFAST_DTV2000H_J] = {
12944d14c833SVlastimil Labsky .name = "WinFast DTV2000 H rev. J",
129527b93d8aSMiroslav Slugen .tuner_type = TUNER_PHILIPS_FMD1216MEX_MK3,
12964d14c833SVlastimil Labsky .radio_type = UNSET,
12974d14c833SVlastimil Labsky .tuner_addr = ADDR_UNSET,
12984d14c833SVlastimil Labsky .radio_addr = ADDR_UNSET,
12994d14c833SVlastimil Labsky .tda9887_conf = TDA9887_PRESENT,
13004d14c833SVlastimil Labsky .input = { {
13014d14c833SVlastimil Labsky .type = CX88_VMUX_TELEVISION,
13024d14c833SVlastimil Labsky .vmux = 0,
13034d14c833SVlastimil Labsky .gpio0 = 0x00017300,
13044d14c833SVlastimil Labsky .gpio1 = 0x00008207,
13054d14c833SVlastimil Labsky .gpio2 = 0x00000000,
13064d14c833SVlastimil Labsky .gpio3 = 0x02000000,
13074d14c833SVlastimil Labsky }, {
13084d14c833SVlastimil Labsky .type = CX88_VMUX_TELEVISION,
13094d14c833SVlastimil Labsky .vmux = 0,
13104d14c833SVlastimil Labsky .gpio0 = 0x00018300,
13114d14c833SVlastimil Labsky .gpio1 = 0x0000f207,
13124d14c833SVlastimil Labsky .gpio2 = 0x00017304,
13134d14c833SVlastimil Labsky .gpio3 = 0x02000000,
13144d14c833SVlastimil Labsky }, {
13154d14c833SVlastimil Labsky .type = CX88_VMUX_COMPOSITE1,
13164d14c833SVlastimil Labsky .vmux = 1,
13174d14c833SVlastimil Labsky .gpio0 = 0x00018301,
13184d14c833SVlastimil Labsky .gpio1 = 0x0000f207,
13194d14c833SVlastimil Labsky .gpio2 = 0x00017304,
13204d14c833SVlastimil Labsky .gpio3 = 0x02000000,
13214d14c833SVlastimil Labsky }, {
13224d14c833SVlastimil Labsky .type = CX88_VMUX_SVIDEO,
13234d14c833SVlastimil Labsky .vmux = 2,
13244d14c833SVlastimil Labsky .gpio0 = 0x00018301,
13254d14c833SVlastimil Labsky .gpio1 = 0x0000f207,
13264d14c833SVlastimil Labsky .gpio2 = 0x00017304,
13274d14c833SVlastimil Labsky .gpio3 = 0x02000000,
13284d14c833SVlastimil Labsky } },
13294d14c833SVlastimil Labsky .radio = {
13304d14c833SVlastimil Labsky .type = CX88_RADIO,
13314d14c833SVlastimil Labsky .gpio0 = 0x00015702,
13324d14c833SVlastimil Labsky .gpio1 = 0x0000f207,
13334d14c833SVlastimil Labsky .gpio2 = 0x00015702,
13344d14c833SVlastimil Labsky .gpio3 = 0x02000000,
13354d14c833SVlastimil Labsky },
13364d14c833SVlastimil Labsky .mpeg = CX88_MPEG_DVB,
13374d14c833SVlastimil Labsky },
1338c02a34f4SSaqeb Akhter [CX88_BOARD_GENIATECH_DVBS] = {
1339c02a34f4SSaqeb Akhter .name = "Geniatech DVB-S",
1340c39ba330SHans Verkuil .tuner_type = UNSET,
1341c02a34f4SSaqeb Akhter .radio_type = UNSET,
1342c02a34f4SSaqeb Akhter .tuner_addr = ADDR_UNSET,
1343c02a34f4SSaqeb Akhter .radio_addr = ADDR_UNSET,
1344c02a34f4SSaqeb Akhter .input = { {
1345c02a34f4SSaqeb Akhter .type = CX88_VMUX_DVB,
1346c02a34f4SSaqeb Akhter .vmux = 0,
1347c02a34f4SSaqeb Akhter }, {
1348c02a34f4SSaqeb Akhter .type = CX88_VMUX_COMPOSITE1,
1349c02a34f4SSaqeb Akhter .vmux = 1,
1350c02a34f4SSaqeb Akhter } },
135148d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB,
1352c02a34f4SSaqeb Akhter },
1353ad10c930SEric Thomas [CX88_BOARD_HAUPPAUGE_HVR3000] = {
1354ad10c930SEric Thomas .name = "Hauppauge WinTV-HVR3000 TriMode Analog/DVB-S/DVB-T",
1355ad10c930SEric Thomas .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3,
1356ad10c930SEric Thomas .radio_type = UNSET,
1357ad10c930SEric Thomas .tuner_addr = ADDR_UNSET,
1358ad10c930SEric Thomas .radio_addr = ADDR_UNSET,
1359ad10c930SEric Thomas .tda9887_conf = TDA9887_PRESENT,
1360facd2366SHans Verkuil .audio_chip = CX88_AUDIO_WM8775,
1361ad10c930SEric Thomas .input = { {
1362ad10c930SEric Thomas .type = CX88_VMUX_TELEVISION,
1363ad10c930SEric Thomas .vmux = 0,
1364ad10c930SEric Thomas .gpio0 = 0x84bf,
1365649e13a9SDarron Broad /* 1: TV Audio / FM Mono */
1366923ac7f7SDarron Broad .audioroute = 1,
1367ad10c930SEric Thomas }, {
1368ad10c930SEric Thomas .type = CX88_VMUX_COMPOSITE1,
1369ad10c930SEric Thomas .vmux = 1,
1370ad10c930SEric Thomas .gpio0 = 0x84bf,
1371649e13a9SDarron Broad /* 2: Line-In */
1372923ac7f7SDarron Broad .audioroute = 2,
1373ad10c930SEric Thomas }, {
1374ad10c930SEric Thomas .type = CX88_VMUX_SVIDEO,
1375ad10c930SEric Thomas .vmux = 2,
1376ad10c930SEric Thomas .gpio0 = 0x84bf,
1377649e13a9SDarron Broad /* 2: Line-In */
1378923ac7f7SDarron Broad .audioroute = 2,
1379ad10c930SEric Thomas } },
138063248f26SDarron Broad .radio = {
138163248f26SDarron Broad .type = CX88_RADIO,
138263248f26SDarron Broad .gpio0 = 0x84bf,
1383649e13a9SDarron Broad /* 4: FM Stereo (untested) */
1384649e13a9SDarron Broad .audioroute = 8,
138563248f26SDarron Broad },
138676dc82abSSteven Toth .mpeg = CX88_MPEG_DVB,
1387363c35fcSSteven Toth .num_frontends = 2,
1388ad10c930SEric Thomas },
1389d1009bd7SPeter Naulls [CX88_BOARD_NORWOOD_MICRO] = {
1390d1009bd7SPeter Naulls .name = "Norwood Micro TV Tuner",
1391d1009bd7SPeter Naulls .tuner_type = TUNER_TNF_5335MF,
1392d1009bd7SPeter Naulls .radio_type = UNSET,
1393d1009bd7SPeter Naulls .tuner_addr = ADDR_UNSET,
1394d1009bd7SPeter Naulls .radio_addr = ADDR_UNSET,
1395d1009bd7SPeter Naulls .input = { {
1396d1009bd7SPeter Naulls .type = CX88_VMUX_TELEVISION,
1397d1009bd7SPeter Naulls .vmux = 0,
1398d1009bd7SPeter Naulls .gpio0 = 0x0709,
1399d1009bd7SPeter Naulls }, {
1400d1009bd7SPeter Naulls .type = CX88_VMUX_COMPOSITE1,
1401d1009bd7SPeter Naulls .vmux = 1,
1402d1009bd7SPeter Naulls .gpio0 = 0x070b,
1403d1009bd7SPeter Naulls }, {
1404d1009bd7SPeter Naulls .type = CX88_VMUX_SVIDEO,
1405d1009bd7SPeter Naulls .vmux = 2,
1406d1009bd7SPeter Naulls .gpio0 = 0x070b,
1407d1009bd7SPeter Naulls } },
1408d1009bd7SPeter Naulls },
14092acadefaSDavid Bussenschutt [CX88_BOARD_TE_DTV_250_OEM_SWANN] = {
14102acadefaSDavid Bussenschutt .name = "Shenzhen Tungsten Ages Tech TE-DTV-250 / Swann OEM",
14112acadefaSDavid Bussenschutt .tuner_type = TUNER_LG_PAL_NEW_TAPC,
14122acadefaSDavid Bussenschutt .radio_type = UNSET,
14132acadefaSDavid Bussenschutt .tuner_addr = ADDR_UNSET,
14142acadefaSDavid Bussenschutt .radio_addr = ADDR_UNSET,
14152acadefaSDavid Bussenschutt .input = { {
14162acadefaSDavid Bussenschutt .type = CX88_VMUX_TELEVISION,
14172acadefaSDavid Bussenschutt .vmux = 0,
14182acadefaSDavid Bussenschutt .gpio0 = 0x003fffff,
14192acadefaSDavid Bussenschutt .gpio1 = 0x00e00000,
14202acadefaSDavid Bussenschutt .gpio2 = 0x003fffff,
14212acadefaSDavid Bussenschutt .gpio3 = 0x02000000,
14222acadefaSDavid Bussenschutt }, {
14232acadefaSDavid Bussenschutt .type = CX88_VMUX_COMPOSITE1,
14242acadefaSDavid Bussenschutt .vmux = 1,
14252acadefaSDavid Bussenschutt .gpio0 = 0x003fffff,
14262acadefaSDavid Bussenschutt .gpio1 = 0x00e00000,
14272acadefaSDavid Bussenschutt .gpio2 = 0x003fffff,
14282acadefaSDavid Bussenschutt .gpio3 = 0x02000000,
14292acadefaSDavid Bussenschutt }, {
14302acadefaSDavid Bussenschutt .type = CX88_VMUX_SVIDEO,
14312acadefaSDavid Bussenschutt .vmux = 2,
14322acadefaSDavid Bussenschutt .gpio0 = 0x003fffff,
14332acadefaSDavid Bussenschutt .gpio1 = 0x00e00000,
14342acadefaSDavid Bussenschutt .gpio2 = 0x003fffff,
14352acadefaSDavid Bussenschutt .gpio3 = 0x02000000,
14362acadefaSDavid Bussenschutt } },
14372acadefaSDavid Bussenschutt },
1438aa481a65SSteven Toth [CX88_BOARD_HAUPPAUGE_HVR1300] = {
1439aa481a65SSteven Toth .name = "Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder",
1440aa481a65SSteven Toth .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3,
1441aa481a65SSteven Toth .radio_type = UNSET,
1442aa481a65SSteven Toth .tuner_addr = ADDR_UNSET,
1443aa481a65SSteven Toth .radio_addr = ADDR_UNSET,
1444aa481a65SSteven Toth .tda9887_conf = TDA9887_PRESENT,
1445facd2366SHans Verkuil .audio_chip = CX88_AUDIO_WM8775,
14462491fbb7SSteven Toth /*
14472491fbb7SSteven Toth * gpio0 as reported by Mike Crash <mike AT mikecrash.com>
14482491fbb7SSteven Toth */
1449aa481a65SSteven Toth .input = { {
1450aa481a65SSteven Toth .type = CX88_VMUX_TELEVISION,
1451aa481a65SSteven Toth .vmux = 0,
14522491fbb7SSteven Toth .gpio0 = 0xef88,
1453649e13a9SDarron Broad /* 1: TV Audio / FM Mono */
14547b27d45bSRicardo Cerqueira .audioroute = 1,
1455aa481a65SSteven Toth }, {
1456aa481a65SSteven Toth .type = CX88_VMUX_COMPOSITE1,
1457aa481a65SSteven Toth .vmux = 1,
14582491fbb7SSteven Toth .gpio0 = 0xef88,
1459649e13a9SDarron Broad /* 2: Line-In */
14607b27d45bSRicardo Cerqueira .audioroute = 2,
1461aa481a65SSteven Toth }, {
1462aa481a65SSteven Toth .type = CX88_VMUX_SVIDEO,
1463aa481a65SSteven Toth .vmux = 2,
14642491fbb7SSteven Toth .gpio0 = 0xef88,
1465649e13a9SDarron Broad /* 2: Line-In */
14667b27d45bSRicardo Cerqueira .audioroute = 2,
1467aa481a65SSteven Toth } },
14686c5be74cSSteven Toth .mpeg = CX88_MPEG_DVB | CX88_MPEG_BLACKBIRD,
14696b92b3bdSSteven Toth .radio = {
14706b92b3bdSSteven Toth .type = CX88_RADIO,
14712491fbb7SSteven Toth .gpio0 = 0xef88,
1472649e13a9SDarron Broad /* 4: FM Stereo (untested) */
1473649e13a9SDarron Broad .audioroute = 8,
14746b92b3bdSSteven Toth },
1475aa481a65SSteven Toth },
14764f3ca2f1SDirk Herrendoerfer [CX88_BOARD_SAMSUNG_SMT_7020] = {
14774f3ca2f1SDirk Herrendoerfer .name = "Samsung SMT 7020 DVB-S",
1478c39ba330SHans Verkuil .tuner_type = UNSET,
14794f3ca2f1SDirk Herrendoerfer .radio_type = UNSET,
14804f3ca2f1SDirk Herrendoerfer .tuner_addr = ADDR_UNSET,
14814f3ca2f1SDirk Herrendoerfer .radio_addr = ADDR_UNSET,
14824f3ca2f1SDirk Herrendoerfer .input = { {
14834f3ca2f1SDirk Herrendoerfer .type = CX88_VMUX_DVB,
14844f3ca2f1SDirk Herrendoerfer .vmux = 0,
14854f3ca2f1SDirk Herrendoerfer } },
14864f3ca2f1SDirk Herrendoerfer .mpeg = CX88_MPEG_DVB,
14874f3ca2f1SDirk Herrendoerfer },
14887cb47a14SDaniel Gimpelevich [CX88_BOARD_ADSTECH_PTV_390] = {
14897cb47a14SDaniel Gimpelevich .name = "ADS Tech Instant Video PCI",
1490c39ba330SHans Verkuil .tuner_type = UNSET,
14917cb47a14SDaniel Gimpelevich .radio_type = UNSET,
14927cb47a14SDaniel Gimpelevich .tuner_addr = ADDR_UNSET,
14937cb47a14SDaniel Gimpelevich .radio_addr = ADDR_UNSET,
14947cb47a14SDaniel Gimpelevich .input = { {
14957cb47a14SDaniel Gimpelevich .type = CX88_VMUX_DEBUG,
14967cb47a14SDaniel Gimpelevich .vmux = 3,
14977cb47a14SDaniel Gimpelevich .gpio0 = 0x04ff,
14987cb47a14SDaniel Gimpelevich }, {
14997cb47a14SDaniel Gimpelevich .type = CX88_VMUX_COMPOSITE1,
15007cb47a14SDaniel Gimpelevich .vmux = 1,
15017cb47a14SDaniel Gimpelevich .gpio0 = 0x07fa,
15027cb47a14SDaniel Gimpelevich }, {
15037cb47a14SDaniel Gimpelevich .type = CX88_VMUX_SVIDEO,
15047cb47a14SDaniel Gimpelevich .vmux = 2,
15057cb47a14SDaniel Gimpelevich .gpio0 = 0x07fa,
15067cb47a14SDaniel Gimpelevich } },
15077cb47a14SDaniel Gimpelevich },
150860464da8SSteven Toth [CX88_BOARD_PINNACLE_PCTV_HD_800i] = {
150960464da8SSteven Toth .name = "Pinnacle PCTV HD 800i",
151060464da8SSteven Toth .tuner_type = TUNER_XC5000,
151160464da8SSteven Toth .radio_type = UNSET,
151260464da8SSteven Toth .tuner_addr = ADDR_UNSET,
151360464da8SSteven Toth .radio_addr = ADDR_UNSET,
151460464da8SSteven Toth .input = { {
151560464da8SSteven Toth .type = CX88_VMUX_TELEVISION,
151660464da8SSteven Toth .vmux = 0,
151760464da8SSteven Toth .gpio0 = 0x04fb,
151860464da8SSteven Toth .gpio1 = 0x10ff,
151960464da8SSteven Toth }, {
152060464da8SSteven Toth .type = CX88_VMUX_COMPOSITE1,
152160464da8SSteven Toth .vmux = 1,
152260464da8SSteven Toth .gpio0 = 0x04fb,
152360464da8SSteven Toth .gpio1 = 0x10ef,
152460464da8SSteven Toth .audioroute = 1,
152560464da8SSteven Toth }, {
152660464da8SSteven Toth .type = CX88_VMUX_SVIDEO,
152760464da8SSteven Toth .vmux = 2,
152860464da8SSteven Toth .gpio0 = 0x04fb,
152960464da8SSteven Toth .gpio1 = 0x10ef,
153060464da8SSteven Toth .audioroute = 1,
153160464da8SSteven Toth } },
153260464da8SSteven Toth .mpeg = CX88_MPEG_DVB,
153360464da8SSteven Toth },
15345c00fac0SSteven Toth [CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO] = {
15358efd2e28SMichael Krufky .name = "DViCO FusionHDTV 5 PCI nano",
15368efd2e28SMichael Krufky /* xc3008 tuner, digital only for now */
1537c39ba330SHans Verkuil .tuner_type = UNSET,
15385c00fac0SSteven Toth .radio_type = UNSET,
15395c00fac0SSteven Toth .tuner_addr = ADDR_UNSET,
15405c00fac0SSteven Toth .radio_addr = ADDR_UNSET,
15415c00fac0SSteven Toth .input = { {
15425c00fac0SSteven Toth .type = CX88_VMUX_TELEVISION,
15435c00fac0SSteven Toth .vmux = 0,
15445c00fac0SSteven Toth .gpio0 = 0x000027df, /* Unconfirmed */
15455c00fac0SSteven Toth }, {
15465c00fac0SSteven Toth .type = CX88_VMUX_COMPOSITE1,
15475c00fac0SSteven Toth .vmux = 1,
15485c00fac0SSteven Toth .gpio0 = 0x000027df, /* Unconfirmed */
15495c00fac0SSteven Toth .audioroute = 1,
15505c00fac0SSteven Toth }, {
15515c00fac0SSteven Toth .type = CX88_VMUX_SVIDEO,
15525c00fac0SSteven Toth .vmux = 2,
15535c00fac0SSteven Toth .gpio0 = 0x000027df, /* Unconfirmed */
15545c00fac0SSteven Toth .audioroute = 1,
15555c00fac0SSteven Toth } },
15565c00fac0SSteven Toth .mpeg = CX88_MPEG_DVB,
15575c00fac0SSteven Toth },
15589507901eSMauro Carvalho Chehab [CX88_BOARD_PINNACLE_HYBRID_PCTV] = {
15599507901eSMauro Carvalho Chehab .name = "Pinnacle Hybrid PCTV",
15609507901eSMauro Carvalho Chehab .tuner_type = TUNER_XC2028,
15619507901eSMauro Carvalho Chehab .tuner_addr = 0x61,
1562b6854e3fSMiroslav Slugen .radio_type = UNSET,
1563b6854e3fSMiroslav Slugen .radio_addr = ADDR_UNSET,
15649507901eSMauro Carvalho Chehab .input = { {
15659507901eSMauro Carvalho Chehab .type = CX88_VMUX_TELEVISION,
15669507901eSMauro Carvalho Chehab .vmux = 0,
15673f6014fcSStéphane Voltz .gpio0 = 0x004ff,
15683f6014fcSStéphane Voltz .gpio1 = 0x010ff,
15693f6014fcSStéphane Voltz .gpio2 = 0x00001,
15709507901eSMauro Carvalho Chehab }, {
15719507901eSMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1,
15729507901eSMauro Carvalho Chehab .vmux = 1,
15733f6014fcSStéphane Voltz .gpio0 = 0x004fb,
15743f6014fcSStéphane Voltz .gpio1 = 0x010ef,
15753f6014fcSStéphane Voltz .audioroute = 1,
15769507901eSMauro Carvalho Chehab }, {
15779507901eSMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO,
15789507901eSMauro Carvalho Chehab .vmux = 2,
15793f6014fcSStéphane Voltz .gpio0 = 0x004fb,
15803f6014fcSStéphane Voltz .gpio1 = 0x010ef,
15813f6014fcSStéphane Voltz .audioroute = 1,
15829507901eSMauro Carvalho Chehab } },
15839507901eSMauro Carvalho Chehab .radio = {
15849507901eSMauro Carvalho Chehab .type = CX88_RADIO,
15859507901eSMauro Carvalho Chehab .gpio0 = 0x004ff,
15869507901eSMauro Carvalho Chehab .gpio1 = 0x010ff,
15879507901eSMauro Carvalho Chehab .gpio2 = 0x0ff,
15889507901eSMauro Carvalho Chehab },
15893f6014fcSStéphane Voltz .mpeg = CX88_MPEG_DVB,
15909507901eSMauro Carvalho Chehab },
159114422f9dSMauro Carvalho Chehab /* Terry Wu <terrywu2009@gmail.com> */
159214422f9dSMauro Carvalho Chehab /* TV Audio : set GPIO 2, 18, 19 value to 0, 1, 0 */
159314422f9dSMauro Carvalho Chehab /* FM Audio : set GPIO 2, 18, 19 value to 0, 0, 0 */
159414422f9dSMauro Carvalho Chehab /* Line-in Audio : set GPIO 2, 18, 19 value to 0, 1, 1 */
159514422f9dSMauro Carvalho Chehab /* Mute Audio : set GPIO 2 value to 1 */
15969507901eSMauro Carvalho Chehab [CX88_BOARD_WINFAST_TV2000_XP_GLOBAL] = {
159714422f9dSMauro Carvalho Chehab .name = "Leadtek TV2000 XP Global",
15989507901eSMauro Carvalho Chehab .tuner_type = TUNER_XC2028,
15999507901eSMauro Carvalho Chehab .tuner_addr = 0x61,
1600b6854e3fSMiroslav Slugen .radio_type = UNSET,
1601b6854e3fSMiroslav Slugen .radio_addr = ADDR_UNSET,
16029507901eSMauro Carvalho Chehab .input = { {
16039507901eSMauro Carvalho Chehab .type = CX88_VMUX_TELEVISION,
16049507901eSMauro Carvalho Chehab .vmux = 0,
160514422f9dSMauro Carvalho Chehab .gpio0 = 0x0400, /* pin 2 = 0 */
16069507901eSMauro Carvalho Chehab .gpio1 = 0x0000,
160714422f9dSMauro Carvalho Chehab .gpio2 = 0x0C04, /* pin 18 = 1, pin 19 = 0 */
160814422f9dSMauro Carvalho Chehab .gpio3 = 0x0000,
16099507901eSMauro Carvalho Chehab }, {
16109507901eSMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1,
16119507901eSMauro Carvalho Chehab .vmux = 1,
161214422f9dSMauro Carvalho Chehab .gpio0 = 0x0400, /* pin 2 = 0 */
16139507901eSMauro Carvalho Chehab .gpio1 = 0x0000,
161414422f9dSMauro Carvalho Chehab .gpio2 = 0x0C0C, /* pin 18 = 1, pin 19 = 1 */
161514422f9dSMauro Carvalho Chehab .gpio3 = 0x0000,
16169507901eSMauro Carvalho Chehab }, {
16179507901eSMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO,
16189507901eSMauro Carvalho Chehab .vmux = 2,
161914422f9dSMauro Carvalho Chehab .gpio0 = 0x0400, /* pin 2 = 0 */
162014422f9dSMauro Carvalho Chehab .gpio1 = 0x0000,
162114422f9dSMauro Carvalho Chehab .gpio2 = 0x0C0C, /* pin 18 = 1, pin 19 = 1 */
162214422f9dSMauro Carvalho Chehab .gpio3 = 0x0000,
16239507901eSMauro Carvalho Chehab } },
16249507901eSMauro Carvalho Chehab .radio = {
16259507901eSMauro Carvalho Chehab .type = CX88_RADIO,
162614422f9dSMauro Carvalho Chehab .gpio0 = 0x0400, /* pin 2 = 0 */
162714422f9dSMauro Carvalho Chehab .gpio1 = 0x0000,
162814422f9dSMauro Carvalho Chehab .gpio2 = 0x0C00, /* pin 18 = 0, pin 19 = 0 */
162914422f9dSMauro Carvalho Chehab .gpio3 = 0x0000,
16309507901eSMauro Carvalho Chehab },
16319507901eSMauro Carvalho Chehab },
163284463d5fSIstvan Varga [CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F36] = {
163384463d5fSIstvan Varga .name = "Leadtek TV2000 XP Global (SC4100)",
163484463d5fSIstvan Varga .tuner_type = TUNER_XC4000,
163584463d5fSIstvan Varga .tuner_addr = 0x61,
163684463d5fSIstvan Varga .radio_type = UNSET,
163784463d5fSIstvan Varga .radio_addr = ADDR_UNSET,
163884463d5fSIstvan Varga .input = { {
163984463d5fSIstvan Varga .type = CX88_VMUX_TELEVISION,
164084463d5fSIstvan Varga .vmux = 0,
164184463d5fSIstvan Varga .gpio0 = 0x0400, /* pin 2 = 0 */
164284463d5fSIstvan Varga .gpio1 = 0x0000,
164384463d5fSIstvan Varga .gpio2 = 0x0C04, /* pin 18 = 1, pin 19 = 0 */
164484463d5fSIstvan Varga .gpio3 = 0x0000,
164584463d5fSIstvan Varga }, {
164684463d5fSIstvan Varga .type = CX88_VMUX_COMPOSITE1,
164784463d5fSIstvan Varga .vmux = 1,
164884463d5fSIstvan Varga .gpio0 = 0x0400, /* pin 2 = 0 */
164984463d5fSIstvan Varga .gpio1 = 0x0000,
165084463d5fSIstvan Varga .gpio2 = 0x0C0C, /* pin 18 = 1, pin 19 = 1 */
165184463d5fSIstvan Varga .gpio3 = 0x0000,
165284463d5fSIstvan Varga }, {
165384463d5fSIstvan Varga .type = CX88_VMUX_SVIDEO,
165484463d5fSIstvan Varga .vmux = 2,
165584463d5fSIstvan Varga .gpio0 = 0x0400, /* pin 2 = 0 */
165684463d5fSIstvan Varga .gpio1 = 0x0000,
165784463d5fSIstvan Varga .gpio2 = 0x0C0C, /* pin 18 = 1, pin 19 = 1 */
165884463d5fSIstvan Varga .gpio3 = 0x0000,
165984463d5fSIstvan Varga } },
166084463d5fSIstvan Varga .radio = {
166184463d5fSIstvan Varga .type = CX88_RADIO,
166284463d5fSIstvan Varga .gpio0 = 0x0400, /* pin 2 = 0 */
166384463d5fSIstvan Varga .gpio1 = 0x0000,
166484463d5fSIstvan Varga .gpio2 = 0x0C00, /* pin 18 = 0, pin 19 = 0 */
166584463d5fSIstvan Varga .gpio3 = 0x0000,
166684463d5fSIstvan Varga },
166784463d5fSIstvan Varga },
166884463d5fSIstvan Varga [CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F43] = {
166984463d5fSIstvan Varga .name = "Leadtek TV2000 XP Global (XC4100)",
167084463d5fSIstvan Varga .tuner_type = TUNER_XC4000,
167184463d5fSIstvan Varga .tuner_addr = 0x61,
167284463d5fSIstvan Varga .radio_type = UNSET,
167384463d5fSIstvan Varga .radio_addr = ADDR_UNSET,
167484463d5fSIstvan Varga .input = { {
167584463d5fSIstvan Varga .type = CX88_VMUX_TELEVISION,
167684463d5fSIstvan Varga .vmux = 0,
167784463d5fSIstvan Varga .gpio0 = 0x0400, /* pin 2 = 0 */
167884463d5fSIstvan Varga .gpio1 = 0x6040, /* pin 14 = 1, pin 13 = 0 */
167984463d5fSIstvan Varga .gpio2 = 0x0000,
168084463d5fSIstvan Varga .gpio3 = 0x0000,
168184463d5fSIstvan Varga }, {
168284463d5fSIstvan Varga .type = CX88_VMUX_COMPOSITE1,
168384463d5fSIstvan Varga .vmux = 1,
168484463d5fSIstvan Varga .gpio0 = 0x0400, /* pin 2 = 0 */
168584463d5fSIstvan Varga .gpio1 = 0x6060, /* pin 14 = 1, pin 13 = 1 */
168684463d5fSIstvan Varga .gpio2 = 0x0000,
168784463d5fSIstvan Varga .gpio3 = 0x0000,
168884463d5fSIstvan Varga }, {
168984463d5fSIstvan Varga .type = CX88_VMUX_SVIDEO,
169084463d5fSIstvan Varga .vmux = 2,
169184463d5fSIstvan Varga .gpio0 = 0x0400, /* pin 2 = 0 */
169284463d5fSIstvan Varga .gpio1 = 0x6060, /* pin 14 = 1, pin 13 = 1 */
169384463d5fSIstvan Varga .gpio2 = 0x0000,
169484463d5fSIstvan Varga .gpio3 = 0x0000,
169584463d5fSIstvan Varga } },
169684463d5fSIstvan Varga .radio = {
169784463d5fSIstvan Varga .type = CX88_RADIO,
169884463d5fSIstvan Varga .gpio0 = 0x0400, /* pin 2 = 0 */
169984463d5fSIstvan Varga .gpio1 = 0x6000, /* pin 14 = 1, pin 13 = 0 */
170084463d5fSIstvan Varga .gpio2 = 0x0000,
170184463d5fSIstvan Varga .gpio3 = 0x0000,
170284463d5fSIstvan Varga },
170384463d5fSIstvan Varga },
17049507901eSMauro Carvalho Chehab [CX88_BOARD_POWERCOLOR_REAL_ANGEL] = {
1705399426caSMauro Carvalho Chehab /* Long names may confuse LIRC. */
1706399426caSMauro Carvalho Chehab .name = "PowerColor RA330",
17079507901eSMauro Carvalho Chehab .tuner_type = TUNER_XC2028,
17089507901eSMauro Carvalho Chehab .tuner_addr = 0x61,
17099507901eSMauro Carvalho Chehab .input = { {
1710399426caSMauro Carvalho Chehab /*
1711399426caSMauro Carvalho Chehab * Due to the way the cx88 driver is written,
1712399426caSMauro Carvalho Chehab * there is no way to deactivate audio pass-
1713399426caSMauro Carvalho Chehab * through without this entry. Furthermore, if
1714399426caSMauro Carvalho Chehab * the TV mux entry is first, you get audio
1715399426caSMauro Carvalho Chehab * from the tuner on boot for a little while.
1716399426caSMauro Carvalho Chehab */
1717a9606ce6SDaniel Gimpelevich .type = CX88_VMUX_DEBUG,
1718399426caSMauro Carvalho Chehab .vmux = 3,
1719399426caSMauro Carvalho Chehab .gpio0 = 0x00ff,
1720399426caSMauro Carvalho Chehab .gpio1 = 0xf39d,
1721399426caSMauro Carvalho Chehab .gpio3 = 0x0000,
1722399426caSMauro Carvalho Chehab }, {
17239507901eSMauro Carvalho Chehab .type = CX88_VMUX_TELEVISION,
17249507901eSMauro Carvalho Chehab .vmux = 0,
1725ab364983SDâniel Fraga .gpio0 = 0x00ff,
1726b573ea0aSMauro Carvalho Chehab .gpio1 = 0xf35d,
1727ab364983SDâniel Fraga .gpio3 = 0x0000,
17289507901eSMauro Carvalho Chehab }, {
17299507901eSMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1,
17309507901eSMauro Carvalho Chehab .vmux = 1,
1731ab364983SDâniel Fraga .gpio0 = 0x00ff,
1732ab364983SDâniel Fraga .gpio1 = 0xf37d,
1733ab364983SDâniel Fraga .gpio3 = 0x0000,
17349507901eSMauro Carvalho Chehab }, {
17359507901eSMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO,
17369507901eSMauro Carvalho Chehab .vmux = 2,
17379507901eSMauro Carvalho Chehab .gpio0 = 0x000ff,
17389507901eSMauro Carvalho Chehab .gpio1 = 0x0f37d,
17399507901eSMauro Carvalho Chehab .gpio3 = 0x00000,
17409507901eSMauro Carvalho Chehab } },
17419507901eSMauro Carvalho Chehab .radio = {
17429507901eSMauro Carvalho Chehab .type = CX88_RADIO,
17439507901eSMauro Carvalho Chehab .gpio0 = 0x000ff,
17449507901eSMauro Carvalho Chehab .gpio1 = 0x0f35d,
17459507901eSMauro Carvalho Chehab .gpio3 = 0x00000,
17469507901eSMauro Carvalho Chehab },
17479507901eSMauro Carvalho Chehab },
17489507901eSMauro Carvalho Chehab [CX88_BOARD_GENIATECH_X8000_MT] = {
17499507901eSMauro Carvalho Chehab /* Also PowerColor Real Angel 330 and Geniatech X800 OEM */
17509507901eSMauro Carvalho Chehab .name = "Geniatech X8000-MT DVBT",
17519507901eSMauro Carvalho Chehab .tuner_type = TUNER_XC2028,
17529507901eSMauro Carvalho Chehab .tuner_addr = 0x61,
17539507901eSMauro Carvalho Chehab .input = { {
17549507901eSMauro Carvalho Chehab .type = CX88_VMUX_TELEVISION,
17559507901eSMauro Carvalho Chehab .vmux = 0,
17569507901eSMauro Carvalho Chehab .gpio0 = 0x00000000,
17579507901eSMauro Carvalho Chehab .gpio1 = 0x00e3e341,
17589507901eSMauro Carvalho Chehab .gpio2 = 0x00000000,
17599507901eSMauro Carvalho Chehab .gpio3 = 0x00000000,
17609507901eSMauro Carvalho Chehab }, {
17619507901eSMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1,
17629507901eSMauro Carvalho Chehab .vmux = 1,
17639507901eSMauro Carvalho Chehab .gpio0 = 0x00000000,
17649507901eSMauro Carvalho Chehab .gpio1 = 0x00e3e361,
17659507901eSMauro Carvalho Chehab .gpio2 = 0x00000000,
17669507901eSMauro Carvalho Chehab .gpio3 = 0x00000000,
17679507901eSMauro Carvalho Chehab }, {
17689507901eSMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO,
17699507901eSMauro Carvalho Chehab .vmux = 2,
17709507901eSMauro Carvalho Chehab .gpio0 = 0x00000000,
17719507901eSMauro Carvalho Chehab .gpio1 = 0x00e3e361,
17729507901eSMauro Carvalho Chehab .gpio2 = 0x00000000,
17739507901eSMauro Carvalho Chehab .gpio3 = 0x00000000,
17749507901eSMauro Carvalho Chehab } },
17759507901eSMauro Carvalho Chehab .radio = {
17769507901eSMauro Carvalho Chehab .type = CX88_RADIO,
17779507901eSMauro Carvalho Chehab .gpio0 = 0x00000000,
17789507901eSMauro Carvalho Chehab .gpio1 = 0x00e3e341,
17799507901eSMauro Carvalho Chehab .gpio2 = 0x00000000,
17809507901eSMauro Carvalho Chehab .gpio3 = 0x00000000,
17819507901eSMauro Carvalho Chehab },
17829507901eSMauro Carvalho Chehab .mpeg = CX88_MPEG_DVB,
1783b3fb91d2SChris Pascoe },
1784e6f45ea2SDaniel Gonzalez Cabanelas [CX88_BOARD_NOTONLYTV_LV3H] = {
1785e6f45ea2SDaniel Gonzalez Cabanelas .name = "NotOnlyTV LV3H",
1786e6f45ea2SDaniel Gonzalez Cabanelas .tuner_type = TUNER_XC2028,
1787e6f45ea2SDaniel Gonzalez Cabanelas .radio_type = UNSET,
1788e6f45ea2SDaniel Gonzalez Cabanelas .tuner_addr = 0x61,
1789e6f45ea2SDaniel Gonzalez Cabanelas .radio_addr = ADDR_UNSET,
1790e6f45ea2SDaniel Gonzalez Cabanelas /* if gpio1:bit9 is enabled, DVB-T won't work */
1791e6f45ea2SDaniel Gonzalez Cabanelas
1792e6f45ea2SDaniel Gonzalez Cabanelas .input = { {
1793e6f45ea2SDaniel Gonzalez Cabanelas .type = CX88_VMUX_TELEVISION,
1794e6f45ea2SDaniel Gonzalez Cabanelas .vmux = 0,
1795e6f45ea2SDaniel Gonzalez Cabanelas .gpio0 = 0x0000,
1796e6f45ea2SDaniel Gonzalez Cabanelas .gpio1 = 0xa141,
1797e6f45ea2SDaniel Gonzalez Cabanelas .gpio2 = 0x0000,
1798e6f45ea2SDaniel Gonzalez Cabanelas }, {
1799e6f45ea2SDaniel Gonzalez Cabanelas .type = CX88_VMUX_COMPOSITE1,
1800e6f45ea2SDaniel Gonzalez Cabanelas .vmux = 1,
1801e6f45ea2SDaniel Gonzalez Cabanelas .gpio0 = 0x0000,
1802e6f45ea2SDaniel Gonzalez Cabanelas .gpio1 = 0xa161,
1803e6f45ea2SDaniel Gonzalez Cabanelas .gpio2 = 0x0000,
1804e6f45ea2SDaniel Gonzalez Cabanelas }, {
1805e6f45ea2SDaniel Gonzalez Cabanelas .type = CX88_VMUX_SVIDEO,
1806e6f45ea2SDaniel Gonzalez Cabanelas .vmux = 2,
1807e6f45ea2SDaniel Gonzalez Cabanelas .gpio0 = 0x0000,
1808e6f45ea2SDaniel Gonzalez Cabanelas .gpio1 = 0xa161,
1809e6f45ea2SDaniel Gonzalez Cabanelas .gpio2 = 0x0000,
1810e6f45ea2SDaniel Gonzalez Cabanelas } },
1811e6f45ea2SDaniel Gonzalez Cabanelas .radio = {
1812e6f45ea2SDaniel Gonzalez Cabanelas .type = CX88_RADIO,
1813e6f45ea2SDaniel Gonzalez Cabanelas .gpio0 = 0x0000,
1814e6f45ea2SDaniel Gonzalez Cabanelas .gpio1 = 0xa141,
1815e6f45ea2SDaniel Gonzalez Cabanelas .gpio2 = 0x0000,
1816e6f45ea2SDaniel Gonzalez Cabanelas },
1817e6f45ea2SDaniel Gonzalez Cabanelas .mpeg = CX88_MPEG_DVB,
1818e6f45ea2SDaniel Gonzalez Cabanelas },
1819b3fb91d2SChris Pascoe [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO] = {
1820b3fb91d2SChris Pascoe .name = "DViCO FusionHDTV DVB-T PRO",
182119c309e3STim Farrington .tuner_type = TUNER_XC2028,
182219c309e3STim Farrington .tuner_addr = 0x61,
1823b3fb91d2SChris Pascoe .radio_type = UNSET,
1824b3fb91d2SChris Pascoe .radio_addr = ADDR_UNSET,
1825b3fb91d2SChris Pascoe .input = { {
1826b3fb91d2SChris Pascoe .type = CX88_VMUX_COMPOSITE1,
1827b3fb91d2SChris Pascoe .vmux = 1,
1828b3fb91d2SChris Pascoe .gpio0 = 0x000067df,
1829b3fb91d2SChris Pascoe }, {
1830b3fb91d2SChris Pascoe .type = CX88_VMUX_SVIDEO,
1831b3fb91d2SChris Pascoe .vmux = 2,
1832b3fb91d2SChris Pascoe .gpio0 = 0x000067df,
1833b3fb91d2SChris Pascoe } },
1834b3fb91d2SChris Pascoe .mpeg = CX88_MPEG_DVB,
1835b3fb91d2SChris Pascoe },
18361117d6baSSteven Toth [CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD] = {
183776464d41SMichael Krufky .name = "DViCO FusionHDTV 7 Gold",
18381117d6baSSteven Toth .tuner_type = TUNER_XC5000,
18391117d6baSSteven Toth .radio_type = UNSET,
18401117d6baSSteven Toth .tuner_addr = ADDR_UNSET,
18411117d6baSSteven Toth .radio_addr = ADDR_UNSET,
18421117d6baSSteven Toth .input = { {
18431117d6baSSteven Toth .type = CX88_VMUX_TELEVISION,
18441117d6baSSteven Toth .vmux = 0,
184576464d41SMichael Krufky .gpio0 = 0x10df,
18461117d6baSSteven Toth }, {
18471117d6baSSteven Toth .type = CX88_VMUX_COMPOSITE1,
18481117d6baSSteven Toth .vmux = 1,
184976464d41SMichael Krufky .gpio0 = 0x16d9,
18501117d6baSSteven Toth }, {
18511117d6baSSteven Toth .type = CX88_VMUX_SVIDEO,
18521117d6baSSteven Toth .vmux = 2,
185376464d41SMichael Krufky .gpio0 = 0x16d9,
18541117d6baSSteven Toth } },
1855d893d5dcSSteven Toth .mpeg = CX88_MPEG_DVB,
18561117d6baSSteven Toth },
18572422a9b3SMauro Carvalho Chehab [CX88_BOARD_PROLINK_PV_8000GT] = {
18582422a9b3SMauro Carvalho Chehab .name = "Prolink Pixelview MPEG 8000GT",
18592422a9b3SMauro Carvalho Chehab .tuner_type = TUNER_XC2028,
18602422a9b3SMauro Carvalho Chehab .tuner_addr = 0x61,
18612422a9b3SMauro Carvalho Chehab .input = { {
18622422a9b3SMauro Carvalho Chehab .type = CX88_VMUX_TELEVISION,
18632422a9b3SMauro Carvalho Chehab .vmux = 0,
18642422a9b3SMauro Carvalho Chehab .gpio0 = 0x0ff,
18652422a9b3SMauro Carvalho Chehab .gpio2 = 0x0cfb,
18662422a9b3SMauro Carvalho Chehab }, {
18672422a9b3SMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1,
18682422a9b3SMauro Carvalho Chehab .vmux = 1,
18692422a9b3SMauro Carvalho Chehab .gpio2 = 0x0cfb,
18702422a9b3SMauro Carvalho Chehab }, {
18712422a9b3SMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO,
18722422a9b3SMauro Carvalho Chehab .vmux = 2,
18732422a9b3SMauro Carvalho Chehab .gpio2 = 0x0cfb,
18742422a9b3SMauro Carvalho Chehab } },
18752422a9b3SMauro Carvalho Chehab .radio = {
18762422a9b3SMauro Carvalho Chehab .type = CX88_RADIO,
18772422a9b3SMauro Carvalho Chehab .gpio2 = 0x0cfb,
18782422a9b3SMauro Carvalho Chehab },
18792422a9b3SMauro Carvalho Chehab },
1880a31d2bb7SMauro Carvalho Chehab [CX88_BOARD_PROLINK_PV_GLOBAL_XTREME] = {
1881a31d2bb7SMauro Carvalho Chehab .name = "Prolink Pixelview Global Extreme",
1882a31d2bb7SMauro Carvalho Chehab .tuner_type = TUNER_XC2028,
1883a31d2bb7SMauro Carvalho Chehab .tuner_addr = 0x61,
1884a31d2bb7SMauro Carvalho Chehab .input = { {
1885a31d2bb7SMauro Carvalho Chehab .type = CX88_VMUX_TELEVISION,
1886a31d2bb7SMauro Carvalho Chehab .vmux = 0,
1887a31d2bb7SMauro Carvalho Chehab .gpio0 = 0x04fb,
1888a31d2bb7SMauro Carvalho Chehab .gpio1 = 0x04080,
1889a31d2bb7SMauro Carvalho Chehab .gpio2 = 0x0cf7,
1890a31d2bb7SMauro Carvalho Chehab }, {
1891a31d2bb7SMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1,
1892a31d2bb7SMauro Carvalho Chehab .vmux = 1,
1893a31d2bb7SMauro Carvalho Chehab .gpio0 = 0x04fb,
1894a31d2bb7SMauro Carvalho Chehab .gpio1 = 0x04080,
1895a31d2bb7SMauro Carvalho Chehab .gpio2 = 0x0cfb,
1896a31d2bb7SMauro Carvalho Chehab }, {
1897a31d2bb7SMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO,
1898a31d2bb7SMauro Carvalho Chehab .vmux = 2,
1899a31d2bb7SMauro Carvalho Chehab .gpio0 = 0x04fb,
1900a31d2bb7SMauro Carvalho Chehab .gpio1 = 0x04080,
1901a31d2bb7SMauro Carvalho Chehab .gpio2 = 0x0cfb,
1902a31d2bb7SMauro Carvalho Chehab } },
1903a31d2bb7SMauro Carvalho Chehab .radio = {
1904a31d2bb7SMauro Carvalho Chehab .type = CX88_RADIO,
1905a31d2bb7SMauro Carvalho Chehab .gpio0 = 0x04ff,
1906a31d2bb7SMauro Carvalho Chehab .gpio1 = 0x04080,
1907a31d2bb7SMauro Carvalho Chehab .gpio2 = 0x0cf7,
1908a31d2bb7SMauro Carvalho Chehab },
1909a31d2bb7SMauro Carvalho Chehab },
1910399426caSMauro Carvalho Chehab /*
1911399426caSMauro Carvalho Chehab * Both radio, analog and ATSC work with this board.
1912399426caSMauro Carvalho Chehab * However, for analog to work, s5h1409 gate should be open,
1913399426caSMauro Carvalho Chehab * otherwise, tuner-xc3028 won't be detected.
1914399426caSMauro Carvalho Chehab * A proper fix require using the newer i2c methods to add
1915399426caSMauro Carvalho Chehab * tuner-xc3028 without doing an i2c probe.
191699e09eacSMauro Carvalho Chehab */
191799e09eacSMauro Carvalho Chehab [CX88_BOARD_KWORLD_ATSC_120] = {
191899e09eacSMauro Carvalho Chehab .name = "Kworld PlusTV HD PCI 120 (ATSC 120)",
191999e09eacSMauro Carvalho Chehab .tuner_type = TUNER_XC2028,
192099e09eacSMauro Carvalho Chehab .radio_type = UNSET,
192199e09eacSMauro Carvalho Chehab .tuner_addr = ADDR_UNSET,
192299e09eacSMauro Carvalho Chehab .radio_addr = ADDR_UNSET,
192399e09eacSMauro Carvalho Chehab .input = { {
192499e09eacSMauro Carvalho Chehab .type = CX88_VMUX_TELEVISION,
192599e09eacSMauro Carvalho Chehab .vmux = 0,
192699e09eacSMauro Carvalho Chehab .gpio0 = 0x000000ff,
192799e09eacSMauro Carvalho Chehab .gpio1 = 0x0000f35d,
192899e09eacSMauro Carvalho Chehab .gpio2 = 0x00000000,
192999e09eacSMauro Carvalho Chehab }, {
193099e09eacSMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1,
193199e09eacSMauro Carvalho Chehab .vmux = 1,
193299e09eacSMauro Carvalho Chehab .gpio0 = 0x000000ff,
193399e09eacSMauro Carvalho Chehab .gpio1 = 0x0000f37e,
193499e09eacSMauro Carvalho Chehab .gpio2 = 0x00000000,
193599e09eacSMauro Carvalho Chehab }, {
193699e09eacSMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO,
193799e09eacSMauro Carvalho Chehab .vmux = 2,
193899e09eacSMauro Carvalho Chehab .gpio0 = 0x000000ff,
193999e09eacSMauro Carvalho Chehab .gpio1 = 0x0000f37e,
194099e09eacSMauro Carvalho Chehab .gpio2 = 0x00000000,
194199e09eacSMauro Carvalho Chehab } },
194299e09eacSMauro Carvalho Chehab .radio = {
194399e09eacSMauro Carvalho Chehab .type = CX88_RADIO,
194499e09eacSMauro Carvalho Chehab .gpio0 = 0x000000ff,
194599e09eacSMauro Carvalho Chehab .gpio1 = 0x0000f35d,
194699e09eacSMauro Carvalho Chehab .gpio2 = 0x00000000,
194799e09eacSMauro Carvalho Chehab },
194899e09eacSMauro Carvalho Chehab .mpeg = CX88_MPEG_DVB,
194999e09eacSMauro Carvalho Chehab },
19505bd1b663SSteven Toth [CX88_BOARD_HAUPPAUGE_HVR4000] = {
19515bd1b663SSteven Toth .name = "Hauppauge WinTV-HVR4000 DVB-S/S2/T/Hybrid",
19525bd1b663SSteven Toth .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3,
19535bd1b663SSteven Toth .radio_type = UNSET,
19545bd1b663SSteven Toth .tuner_addr = ADDR_UNSET,
19555bd1b663SSteven Toth .radio_addr = ADDR_UNSET,
19565bd1b663SSteven Toth .tda9887_conf = TDA9887_PRESENT,
1957facd2366SHans Verkuil .audio_chip = CX88_AUDIO_WM8775,
19585bd1b663SSteven Toth /*
19595bd1b663SSteven Toth * GPIO0 (WINTV2000)
19605bd1b663SSteven Toth *
19615bd1b663SSteven Toth * Analogue SAT DVB-T
19625bd1b663SSteven Toth * Antenna 0xc4bf 0xc4bb
19635bd1b663SSteven Toth * Composite 0xc4bf 0xc4bb
19645bd1b663SSteven Toth * S-Video 0xc4bf 0xc4bb
19655bd1b663SSteven Toth * Composite1 0xc4ff 0xc4fb
19665bd1b663SSteven Toth * S-Video1 0xc4ff 0xc4fb
19672491fbb7SSteven Toth *
19682491fbb7SSteven Toth * BIT VALUE FUNCTION GP{x}_IO
19692491fbb7SSteven Toth * 0 1 I:?
19702491fbb7SSteven Toth * 1 1 I:?
197163248f26SDarron Broad * 2 1 O:MPEG PORT 0=DVB-T 1=DVB-S
19722491fbb7SSteven Toth * 3 1 I:?
19732491fbb7SSteven Toth * 4 1 I:?
19742491fbb7SSteven Toth * 5 1 I:?
19752491fbb7SSteven Toth * 6 0 O:INPUT SELECTOR 0=INTERNAL 1=EXPANSION
19762491fbb7SSteven Toth * 7 1 O:DVB-T DEMOD RESET LOW
19772491fbb7SSteven Toth *
19782491fbb7SSteven Toth * BIT VALUE FUNCTION GP{x}_OE
19792491fbb7SSteven Toth * 8 0 I
19802491fbb7SSteven Toth * 9 0 I
19812491fbb7SSteven Toth * a 1 O
19822491fbb7SSteven Toth * b 0 I
19832491fbb7SSteven Toth * c 0 I
19842491fbb7SSteven Toth * d 0 I
19852491fbb7SSteven Toth * e 1 O
19862491fbb7SSteven Toth * f 1 O
1987649e13a9SDarron Broad *
1988649e13a9SDarron Broad * WM8775 ADC
1989649e13a9SDarron Broad *
1990649e13a9SDarron Broad * 1: TV Audio / FM Mono
1991649e13a9SDarron Broad * 2: Line-In
1992649e13a9SDarron Broad * 3: Line-In Expansion
1993649e13a9SDarron Broad * 4: FM Stereo
19945bd1b663SSteven Toth */
19955bd1b663SSteven Toth .input = { {
19965bd1b663SSteven Toth .type = CX88_VMUX_TELEVISION,
19975bd1b663SSteven Toth .vmux = 0,
19985bd1b663SSteven Toth .gpio0 = 0xc4bf,
1999649e13a9SDarron Broad /* 1: TV Audio / FM Mono */
2000923ac7f7SDarron Broad .audioroute = 1,
20015bd1b663SSteven Toth }, {
20025bd1b663SSteven Toth .type = CX88_VMUX_COMPOSITE1,
20035bd1b663SSteven Toth .vmux = 1,
20045bd1b663SSteven Toth .gpio0 = 0xc4bf,
2005649e13a9SDarron Broad /* 2: Line-In */
2006923ac7f7SDarron Broad .audioroute = 2,
20075bd1b663SSteven Toth }, {
20085bd1b663SSteven Toth .type = CX88_VMUX_SVIDEO,
20095bd1b663SSteven Toth .vmux = 2,
20105bd1b663SSteven Toth .gpio0 = 0xc4bf,
2011649e13a9SDarron Broad /* 2: Line-In */
2012923ac7f7SDarron Broad .audioroute = 2,
20135bd1b663SSteven Toth } },
201463248f26SDarron Broad .radio = {
201563248f26SDarron Broad .type = CX88_RADIO,
201663248f26SDarron Broad .gpio0 = 0xc4bf,
2017649e13a9SDarron Broad /* 4: FM Stereo */
2018649e13a9SDarron Broad .audioroute = 8,
201963248f26SDarron Broad },
20205bd1b663SSteven Toth .mpeg = CX88_MPEG_DVB,
2021363c35fcSSteven Toth .num_frontends = 2,
20225bd1b663SSteven Toth },
20235bd1b663SSteven Toth [CX88_BOARD_HAUPPAUGE_HVR4000LITE] = {
20245bd1b663SSteven Toth .name = "Hauppauge WinTV-HVR4000(Lite) DVB-S/S2",
20255bd1b663SSteven Toth .tuner_type = UNSET,
20265bd1b663SSteven Toth .radio_type = UNSET,
20275bd1b663SSteven Toth .tuner_addr = ADDR_UNSET,
20285bd1b663SSteven Toth .radio_addr = ADDR_UNSET,
20295bd1b663SSteven Toth .input = { {
20305bd1b663SSteven Toth .type = CX88_VMUX_DVB,
20315bd1b663SSteven Toth .vmux = 0,
20325bd1b663SSteven Toth } },
20335bd1b663SSteven Toth .mpeg = CX88_MPEG_DVB,
20345bd1b663SSteven Toth },
2035e4aab64cSIgor M. Liplianin [CX88_BOARD_TEVII_S420] = {
2036e4aab64cSIgor M. Liplianin .name = "TeVii S420 DVB-S",
2037e4aab64cSIgor M. Liplianin .tuner_type = UNSET,
2038e4aab64cSIgor M. Liplianin .radio_type = UNSET,
2039e4aab64cSIgor M. Liplianin .tuner_addr = ADDR_UNSET,
2040e4aab64cSIgor M. Liplianin .radio_addr = ADDR_UNSET,
2041e4aab64cSIgor M. Liplianin .input = { {
2042e4aab64cSIgor M. Liplianin .type = CX88_VMUX_DVB,
2043e4aab64cSIgor M. Liplianin .vmux = 0,
2044e4aab64cSIgor M. Liplianin } },
2045e4aab64cSIgor M. Liplianin .mpeg = CX88_MPEG_DVB,
2046e4aab64cSIgor M. Liplianin },
2047af832623SIgor M. Liplianin [CX88_BOARD_TEVII_S460] = {
2048af832623SIgor M. Liplianin .name = "TeVii S460 DVB-S/S2",
2049af832623SIgor M. Liplianin .tuner_type = UNSET,
2050af832623SIgor M. Liplianin .radio_type = UNSET,
2051af832623SIgor M. Liplianin .tuner_addr = ADDR_UNSET,
2052af832623SIgor M. Liplianin .radio_addr = ADDR_UNSET,
2053af832623SIgor M. Liplianin .input = { {
2054af832623SIgor M. Liplianin .type = CX88_VMUX_DVB,
2055af832623SIgor M. Liplianin .vmux = 0,
2056af832623SIgor M. Liplianin } },
2057af832623SIgor M. Liplianin .mpeg = CX88_MPEG_DVB,
2058af832623SIgor M. Liplianin },
20590cb73639SIgor M. Liplianin [CX88_BOARD_TEVII_S464] = {
20600cb73639SIgor M. Liplianin .name = "TeVii S464 DVB-S/S2",
20610cb73639SIgor M. Liplianin .tuner_type = UNSET,
20620cb73639SIgor M. Liplianin .radio_type = UNSET,
20630cb73639SIgor M. Liplianin .tuner_addr = ADDR_UNSET,
20640cb73639SIgor M. Liplianin .radio_addr = ADDR_UNSET,
20650cb73639SIgor M. Liplianin .input = { {
20660cb73639SIgor M. Liplianin .type = CX88_VMUX_DVB,
20670cb73639SIgor M. Liplianin .vmux = 0,
20680cb73639SIgor M. Liplianin } },
20690cb73639SIgor M. Liplianin .mpeg = CX88_MPEG_DVB,
20700cb73639SIgor M. Liplianin },
20714cd7fb87SOleg Roitburd [CX88_BOARD_OMICOM_SS4_PCI] = {
20724cd7fb87SOleg Roitburd .name = "Omicom SS4 DVB-S/S2 PCI",
20734cd7fb87SOleg Roitburd .tuner_type = UNSET,
20744cd7fb87SOleg Roitburd .radio_type = UNSET,
20754cd7fb87SOleg Roitburd .tuner_addr = ADDR_UNSET,
20764cd7fb87SOleg Roitburd .radio_addr = ADDR_UNSET,
20774cd7fb87SOleg Roitburd .input = { {
20784cd7fb87SOleg Roitburd .type = CX88_VMUX_DVB,
20794cd7fb87SOleg Roitburd .vmux = 0,
20804cd7fb87SOleg Roitburd } },
20814cd7fb87SOleg Roitburd .mpeg = CX88_MPEG_DVB,
20824cd7fb87SOleg Roitburd },
20834b29631dSIgor M. Liplianin [CX88_BOARD_TBS_8910] = {
20844b29631dSIgor M. Liplianin .name = "TBS 8910 DVB-S",
20854b29631dSIgor M. Liplianin .tuner_type = UNSET,
20864b29631dSIgor M. Liplianin .radio_type = UNSET,
20874b29631dSIgor M. Liplianin .tuner_addr = ADDR_UNSET,
20884b29631dSIgor M. Liplianin .radio_addr = ADDR_UNSET,
20894b29631dSIgor M. Liplianin .input = { {
20904b29631dSIgor M. Liplianin .type = CX88_VMUX_DVB,
20914b29631dSIgor M. Liplianin .vmux = 0,
20924b29631dSIgor M. Liplianin } },
20934b29631dSIgor M. Liplianin .mpeg = CX88_MPEG_DVB,
20944b29631dSIgor M. Liplianin },
2095ee73042cSOleg Roitburd [CX88_BOARD_TBS_8920] = {
2096ee73042cSOleg Roitburd .name = "TBS 8920 DVB-S/S2",
2097c39ba330SHans Verkuil .tuner_type = UNSET,
2098ee73042cSOleg Roitburd .radio_type = UNSET,
2099ee73042cSOleg Roitburd .tuner_addr = ADDR_UNSET,
2100ee73042cSOleg Roitburd .radio_addr = ADDR_UNSET,
2101ee73042cSOleg Roitburd .input = { {
2102ee73042cSOleg Roitburd .type = CX88_VMUX_DVB,
2103ad5f74c0SIgor M. Liplianin .vmux = 0,
2104ad5f74c0SIgor M. Liplianin .gpio0 = 0x8080,
2105ee73042cSOleg Roitburd } },
2106ee73042cSOleg Roitburd .mpeg = CX88_MPEG_DVB,
2107ee73042cSOleg Roitburd },
2108cd3cde12SIgor M. Liplianin [CX88_BOARD_PROF_6200] = {
2109cd3cde12SIgor M. Liplianin .name = "Prof 6200 DVB-S",
2110cd3cde12SIgor M. Liplianin .tuner_type = UNSET,
2111cd3cde12SIgor M. Liplianin .radio_type = UNSET,
2112cd3cde12SIgor M. Liplianin .tuner_addr = ADDR_UNSET,
2113cd3cde12SIgor M. Liplianin .radio_addr = ADDR_UNSET,
2114cd3cde12SIgor M. Liplianin .input = { {
2115cd3cde12SIgor M. Liplianin .type = CX88_VMUX_DVB,
2116cd3cde12SIgor M. Liplianin .vmux = 0,
2117cd3cde12SIgor M. Liplianin } },
2118cd3cde12SIgor M. Liplianin .mpeg = CX88_MPEG_DVB,
2119cd3cde12SIgor M. Liplianin },
212057f51dbcSOleg Roitburd [CX88_BOARD_PROF_7300] = {
212157f51dbcSOleg Roitburd .name = "PROF 7300 DVB-S/S2",
212257f51dbcSOleg Roitburd .tuner_type = UNSET,
212357f51dbcSOleg Roitburd .radio_type = UNSET,
212457f51dbcSOleg Roitburd .tuner_addr = ADDR_UNSET,
212557f51dbcSOleg Roitburd .radio_addr = ADDR_UNSET,
212657f51dbcSOleg Roitburd .input = { {
212757f51dbcSOleg Roitburd .type = CX88_VMUX_DVB,
212857f51dbcSOleg Roitburd .vmux = 0,
212957f51dbcSOleg Roitburd } },
213057f51dbcSOleg Roitburd .mpeg = CX88_MPEG_DVB,
213157f51dbcSOleg Roitburd },
21324b29631dSIgor M. Liplianin [CX88_BOARD_SATTRADE_ST4200] = {
21334b29631dSIgor M. Liplianin .name = "SATTRADE ST4200 DVB-S/S2",
21344b29631dSIgor M. Liplianin .tuner_type = UNSET,
21354b29631dSIgor M. Liplianin .radio_type = UNSET,
21364b29631dSIgor M. Liplianin .tuner_addr = ADDR_UNSET,
21374b29631dSIgor M. Liplianin .radio_addr = ADDR_UNSET,
21384b29631dSIgor M. Liplianin .input = { {
21394b29631dSIgor M. Liplianin .type = CX88_VMUX_DVB,
21404b29631dSIgor M. Liplianin .vmux = 0,
21414b29631dSIgor M. Liplianin } },
21424b29631dSIgor M. Liplianin .mpeg = CX88_MPEG_DVB,
21434b29631dSIgor M. Liplianin },
214470101a27SStephan Wienczny [CX88_BOARD_TERRATEC_CINERGY_HT_PCI_MKII] = {
214570101a27SStephan Wienczny .name = "Terratec Cinergy HT PCI MKII",
214670101a27SStephan Wienczny .tuner_type = TUNER_XC2028,
214770101a27SStephan Wienczny .tuner_addr = 0x61,
2148b6854e3fSMiroslav Slugen .radio_type = UNSET,
2149b6854e3fSMiroslav Slugen .radio_addr = ADDR_UNSET,
215070101a27SStephan Wienczny .input = { {
215170101a27SStephan Wienczny .type = CX88_VMUX_TELEVISION,
215270101a27SStephan Wienczny .vmux = 0,
215370101a27SStephan Wienczny .gpio0 = 0x004ff,
215470101a27SStephan Wienczny .gpio1 = 0x010ff,
215570101a27SStephan Wienczny .gpio2 = 0x00001,
215670101a27SStephan Wienczny }, {
215770101a27SStephan Wienczny .type = CX88_VMUX_COMPOSITE1,
215870101a27SStephan Wienczny .vmux = 1,
215970101a27SStephan Wienczny .gpio0 = 0x004fb,
216070101a27SStephan Wienczny .gpio1 = 0x010ef,
216170101a27SStephan Wienczny .audioroute = 1,
216270101a27SStephan Wienczny }, {
216370101a27SStephan Wienczny .type = CX88_VMUX_SVIDEO,
216470101a27SStephan Wienczny .vmux = 2,
216570101a27SStephan Wienczny .gpio0 = 0x004fb,
216670101a27SStephan Wienczny .gpio1 = 0x010ef,
216770101a27SStephan Wienczny .audioroute = 1,
216870101a27SStephan Wienczny } },
216970101a27SStephan Wienczny .radio = {
217070101a27SStephan Wienczny .type = CX88_RADIO,
217170101a27SStephan Wienczny .gpio0 = 0x004ff,
217270101a27SStephan Wienczny .gpio1 = 0x010ff,
217370101a27SStephan Wienczny .gpio2 = 0x0ff,
217470101a27SStephan Wienczny },
217570101a27SStephan Wienczny .mpeg = CX88_MPEG_DVB,
217670101a27SStephan Wienczny },
2177501d8cd4SSteven Toth [CX88_BOARD_HAUPPAUGE_IRONLY] = {
2178501d8cd4SSteven Toth .name = "Hauppauge WinTV-IR Only",
2179501d8cd4SSteven Toth .tuner_type = UNSET,
2180501d8cd4SSteven Toth .radio_type = UNSET,
2181501d8cd4SSteven Toth .tuner_addr = ADDR_UNSET,
2182501d8cd4SSteven Toth .radio_addr = ADDR_UNSET,
2183501d8cd4SSteven Toth },
21843047a176SMiroslav Sustek [CX88_BOARD_WINFAST_DTV1800H] = {
21853047a176SMiroslav Sustek .name = "Leadtek WinFast DTV1800 Hybrid",
21863047a176SMiroslav Sustek .tuner_type = TUNER_XC2028,
2187b6854e3fSMiroslav Slugen .radio_type = UNSET,
21883047a176SMiroslav Sustek .tuner_addr = 0x61,
2189b6854e3fSMiroslav Slugen .radio_addr = ADDR_UNSET,
21903047a176SMiroslav Sustek /*
21913047a176SMiroslav Sustek * GPIO setting
21923047a176SMiroslav Sustek *
21933047a176SMiroslav Sustek * 2: mute (0=off,1=on)
21943047a176SMiroslav Sustek * 12: tuner reset pin
21953047a176SMiroslav Sustek * 13: audio source (0=tuner audio,1=line in)
21963047a176SMiroslav Sustek * 14: FM (0=on,1=off ???)
21973047a176SMiroslav Sustek */
21983047a176SMiroslav Sustek .input = { {
21993047a176SMiroslav Sustek .type = CX88_VMUX_TELEVISION,
22003047a176SMiroslav Sustek .vmux = 0,
22013047a176SMiroslav Sustek .gpio0 = 0x0400, /* pin 2 = 0 */
22023047a176SMiroslav Sustek .gpio1 = 0x6040, /* pin 13 = 0, pin 14 = 1 */
22033047a176SMiroslav Sustek .gpio2 = 0x0000,
22043047a176SMiroslav Sustek }, {
22053047a176SMiroslav Sustek .type = CX88_VMUX_COMPOSITE1,
22063047a176SMiroslav Sustek .vmux = 1,
22073047a176SMiroslav Sustek .gpio0 = 0x0400, /* pin 2 = 0 */
22083047a176SMiroslav Sustek .gpio1 = 0x6060, /* pin 13 = 1, pin 14 = 1 */
22093047a176SMiroslav Sustek .gpio2 = 0x0000,
22103047a176SMiroslav Sustek }, {
22113047a176SMiroslav Sustek .type = CX88_VMUX_SVIDEO,
22123047a176SMiroslav Sustek .vmux = 2,
22133047a176SMiroslav Sustek .gpio0 = 0x0400, /* pin 2 = 0 */
22143047a176SMiroslav Sustek .gpio1 = 0x6060, /* pin 13 = 1, pin 14 = 1 */
22153047a176SMiroslav Sustek .gpio2 = 0x0000,
22163047a176SMiroslav Sustek } },
22173047a176SMiroslav Sustek .radio = {
22183047a176SMiroslav Sustek .type = CX88_RADIO,
22193047a176SMiroslav Sustek .gpio0 = 0x0400, /* pin 2 = 0 */
22203047a176SMiroslav Sustek .gpio1 = 0x6000, /* pin 13 = 0, pin 14 = 0 */
22213047a176SMiroslav Sustek .gpio2 = 0x0000,
22223047a176SMiroslav Sustek },
22233047a176SMiroslav Sustek .mpeg = CX88_MPEG_DVB,
22243047a176SMiroslav Sustek },
22258eb79c0bSistvan_v@mailbox.hu [CX88_BOARD_WINFAST_DTV1800H_XC4000] = {
22268eb79c0bSistvan_v@mailbox.hu .name = "Leadtek WinFast DTV1800 H (XC4000)",
22278eb79c0bSistvan_v@mailbox.hu .tuner_type = TUNER_XC4000,
2228b6854e3fSMiroslav Slugen .radio_type = UNSET,
22298eb79c0bSistvan_v@mailbox.hu .tuner_addr = 0x61,
2230b6854e3fSMiroslav Slugen .radio_addr = ADDR_UNSET,
22318eb79c0bSistvan_v@mailbox.hu /*
22328eb79c0bSistvan_v@mailbox.hu * GPIO setting
22338eb79c0bSistvan_v@mailbox.hu *
22348eb79c0bSistvan_v@mailbox.hu * 2: mute (0=off,1=on)
22358eb79c0bSistvan_v@mailbox.hu * 12: tuner reset pin
22368eb79c0bSistvan_v@mailbox.hu * 13: audio source (0=tuner audio,1=line in)
22378eb79c0bSistvan_v@mailbox.hu * 14: FM (0=on,1=off ???)
22388eb79c0bSistvan_v@mailbox.hu */
22398eb79c0bSistvan_v@mailbox.hu .input = { {
22408eb79c0bSistvan_v@mailbox.hu .type = CX88_VMUX_TELEVISION,
22418eb79c0bSistvan_v@mailbox.hu .vmux = 0,
22428eb79c0bSistvan_v@mailbox.hu .gpio0 = 0x0400, /* pin 2 = 0 */
22438eb79c0bSistvan_v@mailbox.hu .gpio1 = 0x6040, /* pin 13 = 0, pin 14 = 1 */
22448eb79c0bSistvan_v@mailbox.hu .gpio2 = 0x0000,
22458eb79c0bSistvan_v@mailbox.hu }, {
22468eb79c0bSistvan_v@mailbox.hu .type = CX88_VMUX_COMPOSITE1,
22478eb79c0bSistvan_v@mailbox.hu .vmux = 1,
22488eb79c0bSistvan_v@mailbox.hu .gpio0 = 0x0400, /* pin 2 = 0 */
22498eb79c0bSistvan_v@mailbox.hu .gpio1 = 0x6060, /* pin 13 = 1, pin 14 = 1 */
22508eb79c0bSistvan_v@mailbox.hu .gpio2 = 0x0000,
22518eb79c0bSistvan_v@mailbox.hu }, {
22528eb79c0bSistvan_v@mailbox.hu .type = CX88_VMUX_SVIDEO,
22538eb79c0bSistvan_v@mailbox.hu .vmux = 2,
22548eb79c0bSistvan_v@mailbox.hu .gpio0 = 0x0400, /* pin 2 = 0 */
22558eb79c0bSistvan_v@mailbox.hu .gpio1 = 0x6060, /* pin 13 = 1, pin 14 = 1 */
22568eb79c0bSistvan_v@mailbox.hu .gpio2 = 0x0000,
22578eb79c0bSistvan_v@mailbox.hu } },
22588eb79c0bSistvan_v@mailbox.hu .radio = {
22598eb79c0bSistvan_v@mailbox.hu .type = CX88_RADIO,
22608eb79c0bSistvan_v@mailbox.hu .gpio0 = 0x0400, /* pin 2 = 0 */
22618eb79c0bSistvan_v@mailbox.hu .gpio1 = 0x6000, /* pin 13 = 0, pin 14 = 0 */
22628eb79c0bSistvan_v@mailbox.hu .gpio2 = 0x0000,
22638eb79c0bSistvan_v@mailbox.hu },
22648eb79c0bSistvan_v@mailbox.hu .mpeg = CX88_MPEG_DVB,
22658eb79c0bSistvan_v@mailbox.hu },
2266f271a3afSistvan_v@mailbox.hu [CX88_BOARD_WINFAST_DTV2000H_PLUS] = {
2267f271a3afSistvan_v@mailbox.hu .name = "Leadtek WinFast DTV2000 H PLUS",
2268f271a3afSistvan_v@mailbox.hu .tuner_type = TUNER_XC4000,
2269b6854e3fSMiroslav Slugen .radio_type = UNSET,
2270f271a3afSistvan_v@mailbox.hu .tuner_addr = 0x61,
2271b6854e3fSMiroslav Slugen .radio_addr = ADDR_UNSET,
2272f271a3afSistvan_v@mailbox.hu /*
2273f271a3afSistvan_v@mailbox.hu * GPIO
2274f271a3afSistvan_v@mailbox.hu * 2: 1: mute audio
2275f271a3afSistvan_v@mailbox.hu * 12: 0: reset XC4000
2276f271a3afSistvan_v@mailbox.hu * 13: 1: audio input is line in (0: tuner)
2277f271a3afSistvan_v@mailbox.hu * 14: 0: FM radio
2278f271a3afSistvan_v@mailbox.hu * 16: 0: RF input is cable
2279f271a3afSistvan_v@mailbox.hu */
2280f271a3afSistvan_v@mailbox.hu .input = { {
2281f271a3afSistvan_v@mailbox.hu .type = CX88_VMUX_TELEVISION,
2282f271a3afSistvan_v@mailbox.hu .vmux = 0,
2283f271a3afSistvan_v@mailbox.hu .gpio0 = 0x0403,
2284f271a3afSistvan_v@mailbox.hu .gpio1 = 0xF0D7,
2285f271a3afSistvan_v@mailbox.hu .gpio2 = 0x0101,
2286f271a3afSistvan_v@mailbox.hu .gpio3 = 0x0000,
2287f271a3afSistvan_v@mailbox.hu }, {
2288f271a3afSistvan_v@mailbox.hu .type = CX88_VMUX_CABLE,
2289f271a3afSistvan_v@mailbox.hu .vmux = 0,
2290f271a3afSistvan_v@mailbox.hu .gpio0 = 0x0403,
2291f271a3afSistvan_v@mailbox.hu .gpio1 = 0xF0D7,
2292f271a3afSistvan_v@mailbox.hu .gpio2 = 0x0100,
2293f271a3afSistvan_v@mailbox.hu .gpio3 = 0x0000,
2294f271a3afSistvan_v@mailbox.hu }, {
2295f271a3afSistvan_v@mailbox.hu .type = CX88_VMUX_COMPOSITE1,
2296f271a3afSistvan_v@mailbox.hu .vmux = 1,
2297f271a3afSistvan_v@mailbox.hu .gpio0 = 0x0403, /* was 0x0407 */
2298f271a3afSistvan_v@mailbox.hu .gpio1 = 0xF0F7,
2299f271a3afSistvan_v@mailbox.hu .gpio2 = 0x0101,
2300f271a3afSistvan_v@mailbox.hu .gpio3 = 0x0000,
2301f271a3afSistvan_v@mailbox.hu }, {
2302f271a3afSistvan_v@mailbox.hu .type = CX88_VMUX_SVIDEO,
2303f271a3afSistvan_v@mailbox.hu .vmux = 2,
2304f271a3afSistvan_v@mailbox.hu .gpio0 = 0x0403, /* was 0x0407 */
2305f271a3afSistvan_v@mailbox.hu .gpio1 = 0xF0F7,
2306f271a3afSistvan_v@mailbox.hu .gpio2 = 0x0101,
2307f271a3afSistvan_v@mailbox.hu .gpio3 = 0x0000,
2308f271a3afSistvan_v@mailbox.hu } },
2309f271a3afSistvan_v@mailbox.hu .radio = {
2310f271a3afSistvan_v@mailbox.hu .type = CX88_RADIO,
2311f271a3afSistvan_v@mailbox.hu .gpio0 = 0x0403,
2312f271a3afSistvan_v@mailbox.hu .gpio1 = 0xF097,
2313f271a3afSistvan_v@mailbox.hu .gpio2 = 0x0100,
2314f271a3afSistvan_v@mailbox.hu .gpio3 = 0x0000,
2315f271a3afSistvan_v@mailbox.hu },
2316f271a3afSistvan_v@mailbox.hu .mpeg = CX88_MPEG_DVB,
2317f271a3afSistvan_v@mailbox.hu },
2318b699c271SIgor M. Liplianin [CX88_BOARD_PROF_7301] = {
2319b699c271SIgor M. Liplianin .name = "Prof 7301 DVB-S/S2",
2320b699c271SIgor M. Liplianin .tuner_type = UNSET,
2321b699c271SIgor M. Liplianin .radio_type = UNSET,
2322b699c271SIgor M. Liplianin .tuner_addr = ADDR_UNSET,
2323b699c271SIgor M. Liplianin .radio_addr = ADDR_UNSET,
2324b699c271SIgor M. Liplianin .input = { {
2325b699c271SIgor M. Liplianin .type = CX88_VMUX_DVB,
2326b699c271SIgor M. Liplianin .vmux = 0,
2327b699c271SIgor M. Liplianin } },
2328b699c271SIgor M. Liplianin .mpeg = CX88_MPEG_DVB,
2329b699c271SIgor M. Liplianin },
2330111ac84aSSergey Ivanov [CX88_BOARD_TWINHAN_VP1027_DVBS] = {
2331111ac84aSSergey Ivanov .name = "Twinhan VP-1027 DVB-S",
2332c39ba330SHans Verkuil .tuner_type = UNSET,
2333111ac84aSSergey Ivanov .radio_type = UNSET,
2334111ac84aSSergey Ivanov .tuner_addr = ADDR_UNSET,
2335111ac84aSSergey Ivanov .radio_addr = ADDR_UNSET,
2336111ac84aSSergey Ivanov .input = { {
2337111ac84aSSergey Ivanov .type = CX88_VMUX_DVB,
2338111ac84aSSergey Ivanov .vmux = 0,
2339111ac84aSSergey Ivanov } },
2340111ac84aSSergey Ivanov .mpeg = CX88_MPEG_DVB,
2341111ac84aSSergey Ivanov },
23421da177e4SLinus Torvalds };
23431da177e4SLinus Torvalds
23441da177e4SLinus Torvalds /* ------------------------------------------------------------------ */
23451da177e4SLinus Torvalds /* PCI subsystem IDs */
23461da177e4SLinus Torvalds
2347bbc83597STrent Piepho static const struct cx88_subid cx88_subids[] = {
23481da177e4SLinus Torvalds {
23491da177e4SLinus Torvalds .subvendor = 0x0070,
23501da177e4SLinus Torvalds .subdevice = 0x3400,
23511da177e4SLinus Torvalds .card = CX88_BOARD_HAUPPAUGE,
23521da177e4SLinus Torvalds }, {
23531da177e4SLinus Torvalds .subvendor = 0x0070,
23541da177e4SLinus Torvalds .subdevice = 0x3401,
23551da177e4SLinus Torvalds .card = CX88_BOARD_HAUPPAUGE,
23561da177e4SLinus Torvalds }, {
23571da177e4SLinus Torvalds .subvendor = 0x14c7,
23581da177e4SLinus Torvalds .subdevice = 0x0106,
23591da177e4SLinus Torvalds .card = CX88_BOARD_GDI,
23601da177e4SLinus Torvalds }, {
23611da177e4SLinus Torvalds .subvendor = 0x14c7,
23621da177e4SLinus Torvalds .subdevice = 0x0107, /* with mpeg encoder */
23631da177e4SLinus Torvalds .card = CX88_BOARD_GDI,
23641da177e4SLinus Torvalds }, {
23651da177e4SLinus Torvalds .subvendor = PCI_VENDOR_ID_ATI,
23661da177e4SLinus Torvalds .subdevice = 0x00f8,
23671da177e4SLinus Torvalds .card = CX88_BOARD_ATI_WONDER_PRO,
23681da177e4SLinus Torvalds }, {
2369bc13ae11SPatrice Levesque .subvendor = PCI_VENDOR_ID_ATI,
2370bc13ae11SPatrice Levesque .subdevice = 0x00f9,
2371bc13ae11SPatrice Levesque .card = CX88_BOARD_ATI_WONDER_PRO,
2372bc13ae11SPatrice Levesque }, {
23731da177e4SLinus Torvalds .subvendor = 0x107d,
23741da177e4SLinus Torvalds .subdevice = 0x6611,
23751da177e4SLinus Torvalds .card = CX88_BOARD_WINFAST2000XP_EXPERT,
23761da177e4SLinus Torvalds }, {
23771da177e4SLinus Torvalds .subvendor = 0x107d,
23781da177e4SLinus Torvalds .subdevice = 0x6613, /* NTSC */
23791da177e4SLinus Torvalds .card = CX88_BOARD_WINFAST2000XP_EXPERT,
23801da177e4SLinus Torvalds }, {
23811da177e4SLinus Torvalds .subvendor = 0x107d,
23821da177e4SLinus Torvalds .subdevice = 0x6620,
23831da177e4SLinus Torvalds .card = CX88_BOARD_WINFAST_DV2000,
23841da177e4SLinus Torvalds }, {
23851da177e4SLinus Torvalds .subvendor = 0x107d,
23861da177e4SLinus Torvalds .subdevice = 0x663b,
23871da177e4SLinus Torvalds .card = CX88_BOARD_LEADTEK_PVR2000,
23881da177e4SLinus Torvalds }, {
23891da177e4SLinus Torvalds .subvendor = 0x107d,
23908dd86eebSMichael Krufky .subdevice = 0x663c,
23911da177e4SLinus Torvalds .card = CX88_BOARD_LEADTEK_PVR2000,
23921da177e4SLinus Torvalds }, {
23931da177e4SLinus Torvalds .subvendor = 0x1461,
23941da177e4SLinus Torvalds .subdevice = 0x000b,
23957418f346SLubomir Bulej .card = CX88_BOARD_AVERTV_STUDIO_303,
23961da177e4SLinus Torvalds }, {
23971da177e4SLinus Torvalds .subvendor = 0x1462,
23981da177e4SLinus Torvalds .subdevice = 0x8606,
23991da177e4SLinus Torvalds .card = CX88_BOARD_MSI_TVANYWHERE_MASTER,
24001da177e4SLinus Torvalds }, {
24011da177e4SLinus Torvalds .subvendor = 0x10fc,
24021da177e4SLinus Torvalds .subdevice = 0xd003,
24031da177e4SLinus Torvalds .card = CX88_BOARD_IODATA_GVVCP3PCI,
24041da177e4SLinus Torvalds }, {
24051da177e4SLinus Torvalds .subvendor = 0x1043,
24061da177e4SLinus Torvalds .subdevice = 0x4823, /* with mpeg encoder */
24071da177e4SLinus Torvalds .card = CX88_BOARD_ASUS_PVR_416,
24081da177e4SLinus Torvalds }, {
24091da177e4SLinus Torvalds .subvendor = 0x17de,
24101da177e4SLinus Torvalds .subdevice = 0x08a6,
24111da177e4SLinus Torvalds .card = CX88_BOARD_KWORLD_DVB_T,
24121da177e4SLinus Torvalds }, {
24131da177e4SLinus Torvalds .subvendor = 0x18ac,
24141da177e4SLinus Torvalds .subdevice = 0xd810,
2415a82decf6SMauro Carvalho Chehab .card = CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q,
24161da177e4SLinus Torvalds }, {
2417097b750eSMichael Krufky .subvendor = 0x18ac,
2418097b750eSMichael Krufky .subdevice = 0xd820,
241980d34362SMichael Krufky .card = CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_T,
2420097b750eSMichael Krufky }, {
24217df64e8cSMichael Krufky .subvendor = 0x18ac,
24227df64e8cSMichael Krufky .subdevice = 0xdb00,
24231da177e4SLinus Torvalds .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1,
24241da177e4SLinus Torvalds }, {
24251da177e4SLinus Torvalds .subvendor = 0x0070,
24261da177e4SLinus Torvalds .subdevice = 0x9002,
24271da177e4SLinus Torvalds .card = CX88_BOARD_HAUPPAUGE_DVB_T1,
24281da177e4SLinus Torvalds }, {
24291da177e4SLinus Torvalds .subvendor = 0x14f1,
24301da177e4SLinus Torvalds .subdevice = 0x0187,
24311da177e4SLinus Torvalds .card = CX88_BOARD_CONEXANT_DVB_T1,
24321da177e4SLinus Torvalds }, {
24331da177e4SLinus Torvalds .subvendor = 0x1540,
24341da177e4SLinus Torvalds .subdevice = 0x2580,
24351da177e4SLinus Torvalds .card = CX88_BOARD_PROVIDEO_PV259,
24361da177e4SLinus Torvalds }, {
24377df64e8cSMichael Krufky .subvendor = 0x18ac,
24387df64e8cSMichael Krufky .subdevice = 0xdb10,
24391da177e4SLinus Torvalds .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS,
24401da177e4SLinus Torvalds }, {
24411da177e4SLinus Torvalds .subvendor = 0x1554,
24421da177e4SLinus Torvalds .subdevice = 0x4811,
24431da177e4SLinus Torvalds .card = CX88_BOARD_PIXELVIEW,
24441da177e4SLinus Torvalds }, {
24451da177e4SLinus Torvalds .subvendor = 0x7063,
24461da177e4SLinus Torvalds .subdevice = 0x3000, /* HD-3000 card */
24471da177e4SLinus Torvalds .card = CX88_BOARD_PCHDTV_HD3000,
24481da177e4SLinus Torvalds }, {
24497df64e8cSMichael Krufky .subvendor = 0x17de,
24507df64e8cSMichael Krufky .subdevice = 0xa8a6,
24511da177e4SLinus Torvalds .card = CX88_BOARD_DNTV_LIVE_DVB_T,
24521da177e4SLinus Torvalds }, {
24531da177e4SLinus Torvalds .subvendor = 0x0070,
24541da177e4SLinus Torvalds .subdevice = 0x2801,
24551da177e4SLinus Torvalds .card = CX88_BOARD_HAUPPAUGE_ROSLYN,
24561da177e4SLinus Torvalds }, {
24577df64e8cSMichael Krufky .subvendor = 0x14f1,
24581da177e4SLinus Torvalds .subdevice = 0x0342,
24591da177e4SLinus Torvalds .card = CX88_BOARD_DIGITALLOGIC_MEC,
24601da177e4SLinus Torvalds }, {
24611da177e4SLinus Torvalds .subvendor = 0x10fc,
24621da177e4SLinus Torvalds .subdevice = 0xd035,
24631da177e4SLinus Torvalds .card = CX88_BOARD_IODATA_GVBCTV7E,
2464a82decf6SMauro Carvalho Chehab }, {
2465a82decf6SMauro Carvalho Chehab .subvendor = 0x1421,
2466a82decf6SMauro Carvalho Chehab .subdevice = 0x0334,
2467a82decf6SMauro Carvalho Chehab .card = CX88_BOARD_ADSTECH_DVB_T_PCI,
2468e057ee11SMichael Krufky }, {
2469e057ee11SMichael Krufky .subvendor = 0x153b,
2470e057ee11SMichael Krufky .subdevice = 0x1166,
2471e057ee11SMichael Krufky .card = CX88_BOARD_TERRATEC_CINERGY_1400_DVB_T1,
24729fef07caSMichael Krufky }, {
24739fef07caSMichael Krufky .subvendor = 0x18ac,
24749fef07caSMichael Krufky .subdevice = 0xd500,
24759fef07caSMichael Krufky .card = CX88_BOARD_DVICO_FUSIONHDTV_5_GOLD,
2476d45170edSNickolay V. Shmyrev }, {
2477d45170edSNickolay V. Shmyrev .subvendor = 0x1461,
2478d45170edSNickolay V. Shmyrev .subdevice = 0x8011,
2479d45170edSNickolay V. Shmyrev .card = CX88_BOARD_AVERMEDIA_ULTRATV_MC_550,
2480e976f937SKirk Lapray }, {
2481e976f937SKirk Lapray .subvendor = PCI_VENDOR_ID_ATI,
2482e976f937SKirk Lapray .subdevice = 0xa101,
2483e976f937SKirk Lapray .card = CX88_BOARD_ATI_HDTVWONDER,
24842b5200a7SDavid Shirley }, {
24852b5200a7SDavid Shirley .subvendor = 0x107d,
24862b5200a7SDavid Shirley .subdevice = 0x665f,
24872b5200a7SDavid Shirley .card = CX88_BOARD_WINFAST_DTV1000,
24887418f346SLubomir Bulej }, {
24897418f346SLubomir Bulej .subvendor = 0x1461,
24907418f346SLubomir Bulej .subdevice = 0x000a,
24917418f346SLubomir Bulej .card = CX88_BOARD_AVERTV_303,
24920fa14aa6SSteven Toth }, {
24930fa14aa6SSteven Toth .subvendor = 0x0070,
24940fa14aa6SSteven Toth .subdevice = 0x9200,
2495fb56cb65SSteven Toth .card = CX88_BOARD_HAUPPAUGE_NOVASE2_S1,
2496fb56cb65SSteven Toth }, {
2497fb56cb65SSteven Toth .subvendor = 0x0070,
2498fb56cb65SSteven Toth .subdevice = 0x9201,
24990fa14aa6SSteven Toth .card = CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1,
25000fa14aa6SSteven Toth }, {
25010fa14aa6SSteven Toth .subvendor = 0x0070,
25020fa14aa6SSteven Toth .subdevice = 0x9202,
2503fb56cb65SSteven Toth .card = CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1,
25040e0351e3SVadim Catana }, {
25050e0351e3SVadim Catana .subvendor = 0x17de,
25060e0351e3SVadim Catana .subdevice = 0x08b2,
25070e0351e3SVadim Catana .card = CX88_BOARD_KWORLD_DVBS_100,
2508611900c1SSteven Toth }, {
2509611900c1SSteven Toth .subvendor = 0x0070,
2510611900c1SSteven Toth .subdevice = 0x9400,
2511611900c1SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR1100,
2512611900c1SSteven Toth }, {
2513611900c1SSteven Toth .subvendor = 0x0070,
2514611900c1SSteven Toth .subdevice = 0x9402,
2515611900c1SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR1100,
2516611900c1SSteven Toth }, {
2517611900c1SSteven Toth .subvendor = 0x0070,
2518611900c1SSteven Toth .subdevice = 0x9800,
2519611900c1SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR1100LP,
2520611900c1SSteven Toth }, {
2521611900c1SSteven Toth .subvendor = 0x0070,
2522611900c1SSteven Toth .subdevice = 0x9802,
2523611900c1SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR1100LP,
2524c432a072SSteven Toth }, {
2525c432a072SSteven Toth .subvendor = 0x0070,
2526c432a072SSteven Toth .subdevice = 0x9001,
2527c432a072SSteven Toth .card = CX88_BOARD_HAUPPAUGE_DVB_T1,
2528fc40b261SChris Pascoe }, {
2529fc40b261SChris Pascoe .subvendor = 0x1822,
2530fc40b261SChris Pascoe .subdevice = 0x0025,
2531fc40b261SChris Pascoe .card = CX88_BOARD_DNTV_LIVE_DVB_T_PRO,
2532f39624fdSManenti Marco }, {
2533f39624fdSManenti Marco .subvendor = 0x17de,
2534f39624fdSManenti Marco .subdevice = 0x08a1,
2535f39624fdSManenti Marco .card = CX88_BOARD_KWORLD_DVB_T_CX22702,
253643eabb4eSChris Pascoe }, {
253743eabb4eSChris Pascoe .subvendor = 0x18ac,
253843eabb4eSChris Pascoe .subdevice = 0xdb50,
253943eabb4eSChris Pascoe .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL,
25406bfb2e1fSMichael Krufky }, {
25416bfb2e1fSMichael Krufky .subvendor = 0x18ac,
2542f74a6b39SMichael Krufky .subdevice = 0xdb54,
2543f74a6b39SMichael Krufky .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL,
2544f74a6b39SMichael Krufky /* Re-branded DViCO: DigitalNow DVB-T Dual */
2545f74a6b39SMichael Krufky }, {
2546f74a6b39SMichael Krufky .subvendor = 0x18ac,
25476bfb2e1fSMichael Krufky .subdevice = 0xdb11,
25486bfb2e1fSMichael Krufky .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS,
25496bfb2e1fSMichael Krufky /* Re-branded DViCO: UltraView DVB-T Plus */
255044256de1SMichael Krufky }, {
2551b3fb91d2SChris Pascoe .subvendor = 0x18ac,
2552b3fb91d2SChris Pascoe .subdevice = 0xdb30,
2553b3fb91d2SChris Pascoe .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO,
2554b3fb91d2SChris Pascoe }, {
255544256de1SMichael Krufky .subvendor = 0x17de,
255644256de1SMichael Krufky .subdevice = 0x0840,
255744256de1SMichael Krufky .card = CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT,
25582d90fa44SJelle Foks }, {
25592d90fa44SJelle Foks .subvendor = 0x1421,
25602d90fa44SJelle Foks .subdevice = 0x0305,
25612d90fa44SJelle Foks .card = CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT,
2562780dfef3SChris Pascoe }, {
2563780dfef3SChris Pascoe .subvendor = 0x18ac,
2564780dfef3SChris Pascoe .subdevice = 0xdb40,
2565780dfef3SChris Pascoe .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID,
2566780dfef3SChris Pascoe }, {
2567780dfef3SChris Pascoe .subvendor = 0x18ac,
2568780dfef3SChris Pascoe .subdevice = 0xdb44,
2569780dfef3SChris Pascoe .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID,
2570da215d22SRusty Scott }, {
2571da215d22SRusty Scott .subvendor = 0x7063,
2572da215d22SRusty Scott .subdevice = 0x5500,
2573da215d22SRusty Scott .card = CX88_BOARD_PCHDTV_HD5500,
2574b3038304SValentin Zagura }, {
2575b3038304SValentin Zagura .subvendor = 0x17de,
2576b3038304SValentin Zagura .subdevice = 0x0841,
2577b3038304SValentin Zagura .card = CX88_BOARD_KWORLD_MCE200_DELUXE,
2578fc066478SMichael Krufky }, {
2579fc066478SMichael Krufky .subvendor = 0x1822,
2580fc066478SMichael Krufky .subdevice = 0x0019,
2581fc066478SMichael Krufky .card = CX88_BOARD_DNTV_LIVE_DVB_T_PRO,
2582a3124622SAngelo Marconi }, {
2583a3124622SAngelo Marconi .subvendor = 0x1554,
2584a3124622SAngelo Marconi .subdevice = 0x4813,
2585a3124622SAngelo Marconi .card = CX88_BOARD_PIXELVIEW_PLAYTV_P7000,
2586680543c5SRicardo Cerqueira }, {
2587680543c5SRicardo Cerqueira .subvendor = 0x14f1,
2588680543c5SRicardo Cerqueira .subdevice = 0x0842,
2589be4f4519SRicardo Cerqueira .card = CX88_BOARD_NPGTECH_REALTV_TOP10FM,
25904bd6e9d9SMalcolm Valentine }, {
25914bd6e9d9SMalcolm Valentine .subvendor = 0x107d,
25924bd6e9d9SMalcolm Valentine .subdevice = 0x665e,
25934bd6e9d9SMalcolm Valentine .card = CX88_BOARD_WINFAST_DTV2000H,
259465271bffSMichael Krufky }, {
25954d14c833SVlastimil Labsky .subvendor = 0x107d,
25964d14c833SVlastimil Labsky .subdevice = 0x6f2b,
25974d14c833SVlastimil Labsky .card = CX88_BOARD_WINFAST_DTV2000H_J,
25984d14c833SVlastimil Labsky }, {
259965271bffSMichael Krufky .subvendor = 0x18ac,
260065271bffSMichael Krufky .subdevice = 0xd800, /* FusionHDTV 3 Gold (original revision) */
260165271bffSMichael Krufky .card = CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q,
2602c02a34f4SSaqeb Akhter }, {
2603c02a34f4SSaqeb Akhter .subvendor = 0x14f1,
2604c02a34f4SSaqeb Akhter .subdevice = 0x0084,
2605c02a34f4SSaqeb Akhter .card = CX88_BOARD_GENIATECH_DVBS,
2606ad10c930SEric Thomas }, {
2607ad10c930SEric Thomas .subvendor = 0x0070,
2608ad10c930SEric Thomas .subdevice = 0x1404,
2609ad10c930SEric Thomas .card = CX88_BOARD_HAUPPAUGE_HVR3000,
26105dbaa2cbSMichael Krufky }, {
26114f3ca2f1SDirk Herrendoerfer .subvendor = 0x18ac,
26124f3ca2f1SDirk Herrendoerfer .subdevice = 0xdc00,
26134f3ca2f1SDirk Herrendoerfer .card = CX88_BOARD_SAMSUNG_SMT_7020,
26144f3ca2f1SDirk Herrendoerfer }, {
26154f3ca2f1SDirk Herrendoerfer .subvendor = 0x18ac,
26164f3ca2f1SDirk Herrendoerfer .subdevice = 0xdccd,
26174f3ca2f1SDirk Herrendoerfer .card = CX88_BOARD_SAMSUNG_SMT_7020,
26184f3ca2f1SDirk Herrendoerfer }, {
26195dbaa2cbSMichael Krufky .subvendor = 0x1461,
26205dbaa2cbSMichael Krufky .subdevice = 0xc111, /* AverMedia M150-D */
26215dbaa2cbSMichael Krufky /* This board is known to work with the ASUS PVR416 config */
26225dbaa2cbSMichael Krufky .card = CX88_BOARD_ASUS_PVR_416,
26232acadefaSDavid Bussenschutt }, {
26242acadefaSDavid Bussenschutt .subvendor = 0xc180,
26252acadefaSDavid Bussenschutt .subdevice = 0xc980,
26262acadefaSDavid Bussenschutt .card = CX88_BOARD_TE_DTV_250_OEM_SWANN,
2627aa481a65SSteven Toth }, {
2628aa481a65SSteven Toth .subvendor = 0x0070,
2629aa481a65SSteven Toth .subdevice = 0x9600,
2630aa481a65SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR1300,
2631aa481a65SSteven Toth }, {
2632aa481a65SSteven Toth .subvendor = 0x0070,
2633aa481a65SSteven Toth .subdevice = 0x9601,
2634aa481a65SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR1300,
2635aa481a65SSteven Toth }, {
2636aa481a65SSteven Toth .subvendor = 0x0070,
2637aa481a65SSteven Toth .subdevice = 0x9602,
2638aa481a65SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR1300,
2639dab489dfSMichael Krufky }, {
2640dab489dfSMichael Krufky .subvendor = 0x107d,
2641dab489dfSMichael Krufky .subdevice = 0x6632,
2642dab489dfSMichael Krufky .card = CX88_BOARD_LEADTEK_PVR2000,
26434508f598SMichael Krufky }, {
26444508f598SMichael Krufky .subvendor = 0x12ab,
26454508f598SMichael Krufky .subdevice = 0x2300, /* Club3D Zap TV2100 */
26464508f598SMichael Krufky .card = CX88_BOARD_KWORLD_DVB_T_CX22702,
26473979ecc7SSteven Toth }, {
26483979ecc7SSteven Toth .subvendor = 0x0070,
26493979ecc7SSteven Toth .subdevice = 0x9000,
26503979ecc7SSteven Toth .card = CX88_BOARD_HAUPPAUGE_DVB_T1,
265176dc82abSSteven Toth }, {
265276dc82abSSteven Toth .subvendor = 0x0070,
265376dc82abSSteven Toth .subdevice = 0x1400,
265476dc82abSSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR3000,
265576dc82abSSteven Toth }, {
265676dc82abSSteven Toth .subvendor = 0x0070,
265776dc82abSSteven Toth .subdevice = 0x1401,
265876dc82abSSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR3000,
265976dc82abSSteven Toth }, {
266076dc82abSSteven Toth .subvendor = 0x0070,
266176dc82abSSteven Toth .subdevice = 0x1402,
266276dc82abSSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR3000,
2663733aeaf4SMichael Krufky }, {
2664733aeaf4SMichael Krufky .subvendor = 0x1421,
2665733aeaf4SMichael Krufky .subdevice = 0x0341, /* ADS Tech InstantTV DVB-S */
2666733aeaf4SMichael Krufky .card = CX88_BOARD_KWORLD_DVBS_100,
26677cb47a14SDaniel Gimpelevich }, {
26687cb47a14SDaniel Gimpelevich .subvendor = 0x1421,
26697cb47a14SDaniel Gimpelevich .subdevice = 0x0390,
26707cb47a14SDaniel Gimpelevich .card = CX88_BOARD_ADSTECH_PTV_390,
267160464da8SSteven Toth }, {
267260464da8SSteven Toth .subvendor = 0x11bd,
267360464da8SSteven Toth .subdevice = 0x0051,
267460464da8SSteven Toth .card = CX88_BOARD_PINNACLE_PCTV_HD_800i,
26755c00fac0SSteven Toth }, {
26765c00fac0SSteven Toth .subvendor = 0x18ac,
26775c00fac0SSteven Toth .subdevice = 0xd530,
26785c00fac0SSteven Toth .card = CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO,
26799507901eSMauro Carvalho Chehab }, {
26809507901eSMauro Carvalho Chehab .subvendor = 0x12ab,
26819507901eSMauro Carvalho Chehab .subdevice = 0x1788,
26829507901eSMauro Carvalho Chehab .card = CX88_BOARD_PINNACLE_HYBRID_PCTV,
26839507901eSMauro Carvalho Chehab }, {
26849507901eSMauro Carvalho Chehab .subvendor = 0x14f1,
26859507901eSMauro Carvalho Chehab .subdevice = 0xea3d,
26869507901eSMauro Carvalho Chehab .card = CX88_BOARD_POWERCOLOR_REAL_ANGEL,
26879507901eSMauro Carvalho Chehab }, {
26889507901eSMauro Carvalho Chehab .subvendor = 0x107d,
26899507901eSMauro Carvalho Chehab .subdevice = 0x6f18,
26909507901eSMauro Carvalho Chehab .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL,
26919507901eSMauro Carvalho Chehab }, {
2692e6f45ea2SDaniel Gonzalez Cabanelas /* Also NotOnlyTV LV3H (version 1.11 is silkscreened on the board) */
26939507901eSMauro Carvalho Chehab .subvendor = 0x14f1,
26949507901eSMauro Carvalho Chehab .subdevice = 0x8852,
26959507901eSMauro Carvalho Chehab .card = CX88_BOARD_GENIATECH_X8000_MT,
26961117d6baSSteven Toth }, {
26971117d6baSSteven Toth .subvendor = 0x18ac,
26981117d6baSSteven Toth .subdevice = 0xd610,
26991117d6baSSteven Toth .card = CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD,
27002422a9b3SMauro Carvalho Chehab }, {
27012422a9b3SMauro Carvalho Chehab .subvendor = 0x1554,
27022422a9b3SMauro Carvalho Chehab .subdevice = 0x4935,
27032422a9b3SMauro Carvalho Chehab .card = CX88_BOARD_PROLINK_PV_8000GT,
270499e09eacSMauro Carvalho Chehab }, {
2705a31d2bb7SMauro Carvalho Chehab .subvendor = 0x1554,
2706a31d2bb7SMauro Carvalho Chehab .subdevice = 0x4976,
2707a31d2bb7SMauro Carvalho Chehab .card = CX88_BOARD_PROLINK_PV_GLOBAL_XTREME,
2708a31d2bb7SMauro Carvalho Chehab }, {
270999e09eacSMauro Carvalho Chehab .subvendor = 0x17de,
271099e09eacSMauro Carvalho Chehab .subdevice = 0x08c1,
271199e09eacSMauro Carvalho Chehab .card = CX88_BOARD_KWORLD_ATSC_120,
27125bd1b663SSteven Toth }, {
27135bd1b663SSteven Toth .subvendor = 0x0070,
27145bd1b663SSteven Toth .subdevice = 0x6900,
27155bd1b663SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR4000,
27165bd1b663SSteven Toth }, {
27175bd1b663SSteven Toth .subvendor = 0x0070,
27185bd1b663SSteven Toth .subdevice = 0x6904,
27195bd1b663SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR4000,
27205bd1b663SSteven Toth }, {
27215bd1b663SSteven Toth .subvendor = 0x0070,
27225bd1b663SSteven Toth .subdevice = 0x6902,
27235bd1b663SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR4000,
27245bd1b663SSteven Toth }, {
27255bd1b663SSteven Toth .subvendor = 0x0070,
27265bd1b663SSteven Toth .subdevice = 0x6905,
27275bd1b663SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR4000LITE,
27285bd1b663SSteven Toth }, {
27295bd1b663SSteven Toth .subvendor = 0x0070,
27305bd1b663SSteven Toth .subdevice = 0x6906,
27315bd1b663SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR4000LITE,
2732af832623SIgor M. Liplianin }, {
2733e4aab64cSIgor M. Liplianin .subvendor = 0xd420,
2734e4aab64cSIgor M. Liplianin .subdevice = 0x9022,
2735e4aab64cSIgor M. Liplianin .card = CX88_BOARD_TEVII_S420,
2736e4aab64cSIgor M. Liplianin }, {
2737e4aab64cSIgor M. Liplianin .subvendor = 0xd460,
2738af832623SIgor M. Liplianin .subdevice = 0x9022,
2739af832623SIgor M. Liplianin .card = CX88_BOARD_TEVII_S460,
27404cd7fb87SOleg Roitburd }, {
27410cb73639SIgor M. Liplianin .subvendor = 0xd464,
27420cb73639SIgor M. Liplianin .subdevice = 0x9022,
27430cb73639SIgor M. Liplianin .card = CX88_BOARD_TEVII_S464,
27440cb73639SIgor M. Liplianin }, {
27454cd7fb87SOleg Roitburd .subvendor = 0xA044,
27464cd7fb87SOleg Roitburd .subdevice = 0x2011,
27474cd7fb87SOleg Roitburd .card = CX88_BOARD_OMICOM_SS4_PCI,
2748ee73042cSOleg Roitburd }, {
27494b29631dSIgor M. Liplianin .subvendor = 0x8910,
27504b29631dSIgor M. Liplianin .subdevice = 0x8888,
27514b29631dSIgor M. Liplianin .card = CX88_BOARD_TBS_8910,
27524b29631dSIgor M. Liplianin }, {
2753ee73042cSOleg Roitburd .subvendor = 0x8920,
2754ee73042cSOleg Roitburd .subdevice = 0x8888,
2755ee73042cSOleg Roitburd .card = CX88_BOARD_TBS_8920,
275657f51dbcSOleg Roitburd }, {
2757cd3cde12SIgor M. Liplianin .subvendor = 0xb022,
2758cd3cde12SIgor M. Liplianin .subdevice = 0x3022,
2759cd3cde12SIgor M. Liplianin .card = CX88_BOARD_PROF_6200,
2760cd3cde12SIgor M. Liplianin }, {
276157f51dbcSOleg Roitburd .subvendor = 0xB033,
276257f51dbcSOleg Roitburd .subdevice = 0x3033,
276357f51dbcSOleg Roitburd .card = CX88_BOARD_PROF_7300,
27644b29631dSIgor M. Liplianin }, {
27654b29631dSIgor M. Liplianin .subvendor = 0xb200,
27664b29631dSIgor M. Liplianin .subdevice = 0x4200,
27674b29631dSIgor M. Liplianin .card = CX88_BOARD_SATTRADE_ST4200,
276870101a27SStephan Wienczny }, {
276970101a27SStephan Wienczny .subvendor = 0x153b,
277070101a27SStephan Wienczny .subdevice = 0x1177,
277170101a27SStephan Wienczny .card = CX88_BOARD_TERRATEC_CINERGY_HT_PCI_MKII,
2772501d8cd4SSteven Toth }, {
2773501d8cd4SSteven Toth .subvendor = 0x0070,
2774501d8cd4SSteven Toth .subdevice = 0x9290,
2775501d8cd4SSteven Toth .card = CX88_BOARD_HAUPPAUGE_IRONLY,
27763047a176SMiroslav Sustek }, {
27773047a176SMiroslav Sustek .subvendor = 0x107d,
27783047a176SMiroslav Sustek .subdevice = 0x6654,
27793047a176SMiroslav Sustek .card = CX88_BOARD_WINFAST_DTV1800H,
278014422f9dSMauro Carvalho Chehab }, {
27818eb79c0bSistvan_v@mailbox.hu /* WinFast DTV1800 H with XC4000 tuner */
27828eb79c0bSistvan_v@mailbox.hu .subvendor = 0x107d,
27838eb79c0bSistvan_v@mailbox.hu .subdevice = 0x6f38,
27848eb79c0bSistvan_v@mailbox.hu .card = CX88_BOARD_WINFAST_DTV1800H_XC4000,
27858eb79c0bSistvan_v@mailbox.hu }, {
2786f271a3afSistvan_v@mailbox.hu .subvendor = 0x107d,
2787f271a3afSistvan_v@mailbox.hu .subdevice = 0x6f42,
2788f271a3afSistvan_v@mailbox.hu .card = CX88_BOARD_WINFAST_DTV2000H_PLUS,
2789f271a3afSistvan_v@mailbox.hu }, {
279014422f9dSMauro Carvalho Chehab /* PVR2000 PAL Model [107d:6630] */
279114422f9dSMauro Carvalho Chehab .subvendor = 0x107d,
279214422f9dSMauro Carvalho Chehab .subdevice = 0x6630,
279314422f9dSMauro Carvalho Chehab .card = CX88_BOARD_LEADTEK_PVR2000,
279414422f9dSMauro Carvalho Chehab }, {
279514422f9dSMauro Carvalho Chehab /* PVR2000 PAL Model [107d:6638] */
279614422f9dSMauro Carvalho Chehab .subvendor = 0x107d,
279714422f9dSMauro Carvalho Chehab .subdevice = 0x6638,
279814422f9dSMauro Carvalho Chehab .card = CX88_BOARD_LEADTEK_PVR2000,
279914422f9dSMauro Carvalho Chehab }, {
280014422f9dSMauro Carvalho Chehab /* PVR2000 NTSC Model [107d:6631] */
280114422f9dSMauro Carvalho Chehab .subvendor = 0x107d,
280214422f9dSMauro Carvalho Chehab .subdevice = 0x6631,
280314422f9dSMauro Carvalho Chehab .card = CX88_BOARD_LEADTEK_PVR2000,
280414422f9dSMauro Carvalho Chehab }, {
280514422f9dSMauro Carvalho Chehab /* PVR2000 NTSC Model [107d:6637] */
280614422f9dSMauro Carvalho Chehab .subvendor = 0x107d,
280714422f9dSMauro Carvalho Chehab .subdevice = 0x6637,
280814422f9dSMauro Carvalho Chehab .card = CX88_BOARD_LEADTEK_PVR2000,
280914422f9dSMauro Carvalho Chehab }, {
281014422f9dSMauro Carvalho Chehab /* PVR2000 NTSC Model [107d:663d] */
281114422f9dSMauro Carvalho Chehab .subvendor = 0x107d,
281214422f9dSMauro Carvalho Chehab .subdevice = 0x663d,
281314422f9dSMauro Carvalho Chehab .card = CX88_BOARD_LEADTEK_PVR2000,
281414422f9dSMauro Carvalho Chehab }, {
281514422f9dSMauro Carvalho Chehab /* DV2000 NTSC Model [107d:6621] */
281614422f9dSMauro Carvalho Chehab .subvendor = 0x107d,
281714422f9dSMauro Carvalho Chehab .subdevice = 0x6621,
281814422f9dSMauro Carvalho Chehab .card = CX88_BOARD_WINFAST_DV2000,
281914422f9dSMauro Carvalho Chehab }, {
282014422f9dSMauro Carvalho Chehab /* TV2000 XP Global [107d:6618] */
282114422f9dSMauro Carvalho Chehab .subvendor = 0x107d,
282214422f9dSMauro Carvalho Chehab .subdevice = 0x6618,
282314422f9dSMauro Carvalho Chehab .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL,
2824b699c271SIgor M. Liplianin }, {
282584463d5fSIstvan Varga /* TV2000 XP Global [107d:6618] */
282684463d5fSIstvan Varga .subvendor = 0x107d,
282784463d5fSIstvan Varga .subdevice = 0x6619,
282884463d5fSIstvan Varga .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL,
282984463d5fSIstvan Varga }, {
283084463d5fSIstvan Varga /* WinFast TV2000 XP Global with XC4000 tuner */
283184463d5fSIstvan Varga .subvendor = 0x107d,
283284463d5fSIstvan Varga .subdevice = 0x6f36,
283384463d5fSIstvan Varga .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F36,
283484463d5fSIstvan Varga }, {
283584463d5fSIstvan Varga /* WinFast TV2000 XP Global with XC4000 tuner and different GPIOs */
283684463d5fSIstvan Varga .subvendor = 0x107d,
283784463d5fSIstvan Varga .subdevice = 0x6f43,
283884463d5fSIstvan Varga .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F43,
283984463d5fSIstvan Varga }, {
2840b699c271SIgor M. Liplianin .subvendor = 0xb034,
2841b699c271SIgor M. Liplianin .subdevice = 0x3034,
2842b699c271SIgor M. Liplianin .card = CX88_BOARD_PROF_7301,
2843111ac84aSSergey Ivanov }, {
2844111ac84aSSergey Ivanov .subvendor = 0x1822,
2845111ac84aSSergey Ivanov .subdevice = 0x0023,
2846111ac84aSSergey Ivanov .card = CX88_BOARD_TWINHAN_VP1027_DVBS,
28472422a9b3SMauro Carvalho Chehab },
28481da177e4SLinus Torvalds };
28491da177e4SLinus Torvalds
2850399426caSMauro Carvalho Chehab /*
2851399426caSMauro Carvalho Chehab * some leadtek specific stuff
2852399426caSMauro Carvalho Chehab */
leadtek_eeprom(struct cx88_core * core,u8 * eeprom_data)285369f7e75aSJean Delvare static void leadtek_eeprom(struct cx88_core *core, u8 *eeprom_data)
28541da177e4SLinus Torvalds {
28551da177e4SLinus Torvalds if (eeprom_data[4] != 0x7d ||
28561da177e4SLinus Torvalds eeprom_data[5] != 0x10 ||
28571da177e4SLinus Torvalds eeprom_data[7] != 0x66) {
285865bc2fe8SMauro Carvalho Chehab pr_warn("Leadtek eeprom invalid.\n");
28591da177e4SLinus Torvalds return;
28601da177e4SLinus Torvalds }
28611da177e4SLinus Torvalds
286214422f9dSMauro Carvalho Chehab /* Terry Wu <terrywu2009@gmail.com> */
286314422f9dSMauro Carvalho Chehab switch (eeprom_data[6]) {
286414422f9dSMauro Carvalho Chehab case 0x13: /* SSID 6613 for TV2000 XP Expert NTSC Model */
286514422f9dSMauro Carvalho Chehab case 0x21: /* SSID 6621 for DV2000 NTSC Model */
286614422f9dSMauro Carvalho Chehab case 0x31: /* SSID 6631 for PVR2000 NTSC Model */
286714422f9dSMauro Carvalho Chehab case 0x37: /* SSID 6637 for PVR2000 NTSC Model */
286814422f9dSMauro Carvalho Chehab case 0x3d: /* SSID 6637 for PVR2000 NTSC Model */
286914422f9dSMauro Carvalho Chehab core->board.tuner_type = TUNER_PHILIPS_FM1236_MK3;
287014422f9dSMauro Carvalho Chehab break;
287114422f9dSMauro Carvalho Chehab default:
287214422f9dSMauro Carvalho Chehab core->board.tuner_type = TUNER_PHILIPS_FM1216ME_MK3;
287314422f9dSMauro Carvalho Chehab break;
287414422f9dSMauro Carvalho Chehab }
28751da177e4SLinus Torvalds
287665bc2fe8SMauro Carvalho Chehab pr_info("Leadtek Winfast 2000XP Expert config: tuner=%d, eeprom[0]=0x%02x\n",
28770f19e65bSMauro Carvalho Chehab core->board.tuner_type, eeprom_data[0]);
28781da177e4SLinus Torvalds }
28791da177e4SLinus Torvalds
hauppauge_eeprom(struct cx88_core * core,u8 * eeprom_data)28801da177e4SLinus Torvalds static void hauppauge_eeprom(struct cx88_core *core, u8 *eeprom_data)
28811da177e4SLinus Torvalds {
28821da177e4SLinus Torvalds struct tveeprom tv;
28831da177e4SLinus Torvalds
2884446aba66SMauro Carvalho Chehab tveeprom_hauppauge_analog(&tv, eeprom_data);
28856a59d64cSTrent Piepho core->board.tuner_type = tv.tuner_type;
28860345c387SSteven Toth core->tuner_formats = tv.tuner_formats;
28876a59d64cSTrent Piepho core->board.radio.type = tv.has_radio ? CX88_RADIO : 0;
288848a8a03bSMauro Carvalho Chehab core->model = tv.model;
28891da177e4SLinus Torvalds
28901da177e4SLinus Torvalds /* Make sure we support the board model */
2891399426caSMauro Carvalho Chehab switch (tv.model) {
289276dc82abSSteven Toth case 14009: /* WinTV-HVR3000 (Retail, IR, b/panel video, 3.5mm audio in) */
289376dc82abSSteven Toth case 14019: /* WinTV-HVR3000 (Retail, IR Blaster, b/panel video, 3.5mm audio in) */
289476dc82abSSteven Toth case 14029: /* WinTV-HVR3000 (Retail, IR, b/panel video, 3.5mm audio in - 880 bridge) */
289576dc82abSSteven Toth case 14109: /* WinTV-HVR3000 (Retail, IR, b/panel video, 3.5mm audio in - low profile) */
289676dc82abSSteven Toth case 14129: /* WinTV-HVR3000 (Retail, IR, b/panel video, 3.5mm audio in - 880 bridge - LP) */
289776dc82abSSteven Toth case 14559: /* WinTV-HVR3000 (OEM, no IR, b/panel video, 3.5mm audio in) */
2898ad10c930SEric Thomas case 14569: /* WinTV-HVR3000 (OEM, no IR, no back panel video) */
289976dc82abSSteven Toth case 14659: /* WinTV-HVR3000 (OEM, no IR, b/panel video, RCA audio in - Low profile) */
290076dc82abSSteven Toth case 14669: /* WinTV-HVR3000 (OEM, no IR, no b/panel video - Low profile) */
29010345c387SSteven Toth case 28552: /* WinTV-PVR 'Roslyn' (No IR) */
290242d2b6efSIan Pickworth case 34519: /* WinTV-PCI-FM */
29035bd1b663SSteven Toth case 69009:
29045bd1b663SSteven Toth /* WinTV-HVR4000 (DVBS/S2/T, Video and IR, back panel inputs) */
29055bd1b663SSteven Toth case 69100: /* WinTV-HVR4000LITE (DVBS/S2, IR) */
29065bd1b663SSteven Toth case 69500: /* WinTV-HVR4000LITE (DVBS/S2, No IR) */
29075bd1b663SSteven Toth case 69559:
29085bd1b663SSteven Toth /* WinTV-HVR4000 (DVBS/S2/T, Video no IR, back panel inputs) */
29095bd1b663SSteven Toth case 69569: /* WinTV-HVR4000 (DVBS/S2/T, Video no IR) */
2910759324c3SSteven Toth case 90002: /* Nova-T-PCI (9002) */
29110fe22865SSteven Toth case 92001: /* Nova-S-Plus (Video and IR) */
29120fe22865SSteven Toth case 92002: /* Nova-S-Plus (Video and IR) */
29130fe22865SSteven Toth case 90003: /* Nova-T-PCI (9002 No RF out) */
2914759324c3SSteven Toth case 90500: /* Nova-T-PCI (oem) */
2915759324c3SSteven Toth case 90501: /* Nova-T-PCI (oem/IR) */
29163ca0ea98SSteven Toth case 92000: /* Nova-SE2 (OEM, No Video or IR) */
2917501d8cd4SSteven Toth case 92900: /* WinTV-IROnly (No analog or digital Video inputs) */
2918611900c1SSteven Toth case 94009: /* WinTV-HVR1100 (Video and IR Retail) */
2919611900c1SSteven Toth case 94501: /* WinTV-HVR1100 (Video and IR OEM) */
2920aa481a65SSteven Toth case 96009: /* WinTV-HVR1300 (PAL Video, MPEG Video and IR RX) */
2921aa481a65SSteven Toth case 96019: /* WinTV-HVR1300 (PAL Video, MPEG Video and IR RX/TX) */
2922aa481a65SSteven Toth case 96559: /* WinTV-HVR1300 (PAL Video, MPEG Video no IR) */
2923aa481a65SSteven Toth case 96569: /* WinTV-HVR1300 () */
2924aa481a65SSteven Toth case 96659: /* WinTV-HVR1300 () */
2925611900c1SSteven Toth case 98559: /* WinTV-HVR1100LP (Video no IR, Retail - Low Profile) */
29261da177e4SLinus Torvalds /* known */
29271da177e4SLinus Torvalds break;
29284f3ca2f1SDirk Herrendoerfer case CX88_BOARD_SAMSUNG_SMT_7020:
29294f3ca2f1SDirk Herrendoerfer cx_set(MO_GP0_IO, 0x008989FF);
29304f3ca2f1SDirk Herrendoerfer break;
29311da177e4SLinus Torvalds default:
293265bc2fe8SMauro Carvalho Chehab pr_warn("warning: unknown hauppauge model #%d\n", tv.model);
29331da177e4SLinus Torvalds break;
29341da177e4SLinus Torvalds }
29351da177e4SLinus Torvalds
293665bc2fe8SMauro Carvalho Chehab pr_info("hauppauge eeprom: model=%d\n", tv.model);
29371da177e4SLinus Torvalds }
29381da177e4SLinus Torvalds
2939399426caSMauro Carvalho Chehab /*
2940399426caSMauro Carvalho Chehab * some GDI (was: Modular Technology) specific stuff
2941399426caSMauro Carvalho Chehab */
29421da177e4SLinus Torvalds
29432e4e98e7Slawrence rust static const struct {
29441da177e4SLinus Torvalds int id;
29451da177e4SLinus Torvalds int fm;
29462e4e98e7Slawrence rust const char *name;
29471da177e4SLinus Torvalds } gdi_tuner[] = {
2948c39ba330SHans Verkuil [0x01] = { .id = UNSET,
29491da177e4SLinus Torvalds .name = "NTSC_M" },
2950c39ba330SHans Verkuil [0x02] = { .id = UNSET,
29511da177e4SLinus Torvalds .name = "PAL_B" },
2952c39ba330SHans Verkuil [0x03] = { .id = UNSET,
29531da177e4SLinus Torvalds .name = "PAL_I" },
2954c39ba330SHans Verkuil [0x04] = { .id = UNSET,
29551da177e4SLinus Torvalds .name = "PAL_D" },
2956c39ba330SHans Verkuil [0x05] = { .id = UNSET,
29571da177e4SLinus Torvalds .name = "SECAM" },
29581da177e4SLinus Torvalds
2959c39ba330SHans Verkuil [0x10] = { .id = UNSET,
29601da177e4SLinus Torvalds .fm = 1,
29611da177e4SLinus Torvalds .name = "TEMIC_4049" },
29621da177e4SLinus Torvalds [0x11] = { .id = TUNER_TEMIC_4136FY5,
29631da177e4SLinus Torvalds .name = "TEMIC_4136" },
2964c39ba330SHans Verkuil [0x12] = { .id = UNSET,
29651da177e4SLinus Torvalds .name = "TEMIC_4146" },
29661da177e4SLinus Torvalds
29671da177e4SLinus Torvalds [0x20] = { .id = TUNER_PHILIPS_FQ1216ME,
29681da177e4SLinus Torvalds .fm = 1,
29691da177e4SLinus Torvalds .name = "PHILIPS_FQ1216_MK3" },
2970c39ba330SHans Verkuil [0x21] = { .id = UNSET, .fm = 1,
29711da177e4SLinus Torvalds .name = "PHILIPS_FQ1236_MK3" },
2972c39ba330SHans Verkuil [0x22] = { .id = UNSET,
29731da177e4SLinus Torvalds .name = "PHILIPS_FI1236_MK3" },
2974c39ba330SHans Verkuil [0x23] = { .id = UNSET,
29751da177e4SLinus Torvalds .name = "PHILIPS_FI1216_MK3" },
29761da177e4SLinus Torvalds };
29771da177e4SLinus Torvalds
gdi_eeprom(struct cx88_core * core,u8 * eeprom_data)29781da177e4SLinus Torvalds static void gdi_eeprom(struct cx88_core *core, u8 *eeprom_data)
29791da177e4SLinus Torvalds {
29802e4e98e7Slawrence rust const char *name = (eeprom_data[0x0d] < ARRAY_SIZE(gdi_tuner))
29811da177e4SLinus Torvalds ? gdi_tuner[eeprom_data[0x0d]].name : NULL;
29821da177e4SLinus Torvalds
298365bc2fe8SMauro Carvalho Chehab pr_info("GDI: tuner=%s\n", name ? name : "unknown");
2984399426caSMauro Carvalho Chehab if (!name)
29851da177e4SLinus Torvalds return;
29866a59d64cSTrent Piepho core->board.tuner_type = gdi_tuner[eeprom_data[0x0d]].id;
29876a59d64cSTrent Piepho core->board.radio.type = gdi_tuner[eeprom_data[0x0d]].fm ?
29886a59d64cSTrent Piepho CX88_RADIO : 0;
29891da177e4SLinus Torvalds }
29901da177e4SLinus Torvalds
2991399426caSMauro Carvalho Chehab /*
2992399426caSMauro Carvalho Chehab * some Divco specific stuff
2993399426caSMauro Carvalho Chehab */
cx88_dvico_xc2028_callback(struct cx88_core * core,int command,int arg)29940be51b46SMauro Carvalho Chehab static int cx88_dvico_xc2028_callback(struct cx88_core *core,
29950be51b46SMauro Carvalho Chehab int command, int arg)
2996b3fb91d2SChris Pascoe {
2997b3fb91d2SChris Pascoe switch (command) {
2998b3fb91d2SChris Pascoe case XC2028_TUNER_RESET:
2999d7cba043SMichael Krufky switch (core->boardnr) {
3000d7cba043SMichael Krufky case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO:
3001d7cba043SMichael Krufky /* GPIO-4 xc3028 tuner */
3002d7cba043SMichael Krufky
3003d7cba043SMichael Krufky cx_set(MO_GP0_IO, 0x00001000);
3004d7cba043SMichael Krufky cx_clear(MO_GP0_IO, 0x00000010);
3005d7cba043SMichael Krufky msleep(100);
3006d7cba043SMichael Krufky cx_set(MO_GP0_IO, 0x00000010);
3007d7cba043SMichael Krufky msleep(100);
3008d7cba043SMichael Krufky break;
3009d7cba043SMichael Krufky default:
30108765561fSChris Pascoe cx_write(MO_GP0_IO, 0x101000);
30118765561fSChris Pascoe mdelay(5);
30128765561fSChris Pascoe cx_set(MO_GP0_IO, 0x101010);
3013d7cba043SMichael Krufky }
3014b3fb91d2SChris Pascoe break;
3015b3fb91d2SChris Pascoe default:
3016b3fb91d2SChris Pascoe return -EINVAL;
3017b3fb91d2SChris Pascoe }
3018b3fb91d2SChris Pascoe
3019b3fb91d2SChris Pascoe return 0;
3020b3fb91d2SChris Pascoe }
3021b3fb91d2SChris Pascoe
3022399426caSMauro Carvalho Chehab /*
3023399426caSMauro Carvalho Chehab * some Geniatech specific stuff
3024399426caSMauro Carvalho Chehab */
30259507901eSMauro Carvalho Chehab
cx88_xc3028_geniatech_tuner_callback(struct cx88_core * core,int command,int mode)30260be51b46SMauro Carvalho Chehab static int cx88_xc3028_geniatech_tuner_callback(struct cx88_core *core,
30270be51b46SMauro Carvalho Chehab int command, int mode)
30289507901eSMauro Carvalho Chehab {
30299507901eSMauro Carvalho Chehab switch (command) {
30309507901eSMauro Carvalho Chehab case XC2028_TUNER_RESET:
30319507901eSMauro Carvalho Chehab switch (INPUT(core->input).type) {
30329507901eSMauro Carvalho Chehab case CX88_RADIO:
3033c450e50eSMauro Carvalho Chehab break;
30349507901eSMauro Carvalho Chehab case CX88_VMUX_DVB:
30359507901eSMauro Carvalho Chehab cx_write(MO_GP1_IO, 0x030302);
30369507901eSMauro Carvalho Chehab mdelay(50);
3037c450e50eSMauro Carvalho Chehab break;
30389507901eSMauro Carvalho Chehab default:
30399507901eSMauro Carvalho Chehab cx_write(MO_GP1_IO, 0x030301);
30409507901eSMauro Carvalho Chehab mdelay(50);
3041c450e50eSMauro Carvalho Chehab }
30429507901eSMauro Carvalho Chehab cx_write(MO_GP1_IO, 0x101010);
30439507901eSMauro Carvalho Chehab mdelay(50);
30449507901eSMauro Carvalho Chehab cx_write(MO_GP1_IO, 0x101000);
30459507901eSMauro Carvalho Chehab mdelay(50);
30469507901eSMauro Carvalho Chehab cx_write(MO_GP1_IO, 0x101010);
30479507901eSMauro Carvalho Chehab mdelay(50);
30489507901eSMauro Carvalho Chehab return 0;
30499507901eSMauro Carvalho Chehab }
30509507901eSMauro Carvalho Chehab return -EINVAL;
30519507901eSMauro Carvalho Chehab }
30529507901eSMauro Carvalho Chehab
cx88_xc3028_winfast1800h_callback(struct cx88_core * core,int command,int arg)30533047a176SMiroslav Sustek static int cx88_xc3028_winfast1800h_callback(struct cx88_core *core,
30543047a176SMiroslav Sustek int command, int arg)
30553047a176SMiroslav Sustek {
30563047a176SMiroslav Sustek switch (command) {
30573047a176SMiroslav Sustek case XC2028_TUNER_RESET:
30583047a176SMiroslav Sustek /* GPIO 12 (xc3028 tuner reset) */
30593047a176SMiroslav Sustek cx_set(MO_GP1_IO, 0x1010);
30603047a176SMiroslav Sustek mdelay(50);
30613047a176SMiroslav Sustek cx_clear(MO_GP1_IO, 0x10);
30624699903eSAlan Cox mdelay(75);
30633047a176SMiroslav Sustek cx_set(MO_GP1_IO, 0x10);
30644699903eSAlan Cox mdelay(75);
30653047a176SMiroslav Sustek return 0;
30663047a176SMiroslav Sustek }
30673047a176SMiroslav Sustek return -EINVAL;
30683047a176SMiroslav Sustek }
30693047a176SMiroslav Sustek
cx88_xc4000_winfast2000h_plus_callback(struct cx88_core * core,int command,int arg)3070f271a3afSistvan_v@mailbox.hu static int cx88_xc4000_winfast2000h_plus_callback(struct cx88_core *core,
3071f271a3afSistvan_v@mailbox.hu int command, int arg)
3072f271a3afSistvan_v@mailbox.hu {
3073f271a3afSistvan_v@mailbox.hu switch (command) {
3074f271a3afSistvan_v@mailbox.hu case XC4000_TUNER_RESET:
3075f271a3afSistvan_v@mailbox.hu /* GPIO 12 (xc4000 tuner reset) */
3076f271a3afSistvan_v@mailbox.hu cx_set(MO_GP1_IO, 0x1010);
3077f271a3afSistvan_v@mailbox.hu mdelay(50);
3078f271a3afSistvan_v@mailbox.hu cx_clear(MO_GP1_IO, 0x10);
3079f271a3afSistvan_v@mailbox.hu mdelay(75);
3080f271a3afSistvan_v@mailbox.hu cx_set(MO_GP1_IO, 0x10);
3081f271a3afSistvan_v@mailbox.hu mdelay(75);
3082f271a3afSistvan_v@mailbox.hu return 0;
3083f271a3afSistvan_v@mailbox.hu }
3084f271a3afSistvan_v@mailbox.hu return -EINVAL;
3085f271a3afSistvan_v@mailbox.hu }
3086f271a3afSistvan_v@mailbox.hu
3087399426caSMauro Carvalho Chehab /*
3088399426caSMauro Carvalho Chehab * some Divco specific stuff
3089399426caSMauro Carvalho Chehab */
cx88_pv_8000gt_callback(struct cx88_core * core,int command,int arg)30900be51b46SMauro Carvalho Chehab static int cx88_pv_8000gt_callback(struct cx88_core *core,
30910be51b46SMauro Carvalho Chehab int command, int arg)
30922422a9b3SMauro Carvalho Chehab {
30932422a9b3SMauro Carvalho Chehab switch (command) {
30942422a9b3SMauro Carvalho Chehab case XC2028_TUNER_RESET:
30952422a9b3SMauro Carvalho Chehab cx_write(MO_GP2_IO, 0xcf7);
30962422a9b3SMauro Carvalho Chehab mdelay(50);
30972422a9b3SMauro Carvalho Chehab cx_write(MO_GP2_IO, 0xef5);
30982422a9b3SMauro Carvalho Chehab mdelay(50);
30992422a9b3SMauro Carvalho Chehab cx_write(MO_GP2_IO, 0xcf7);
31002422a9b3SMauro Carvalho Chehab break;
31012422a9b3SMauro Carvalho Chehab default:
31022422a9b3SMauro Carvalho Chehab return -EINVAL;
31032422a9b3SMauro Carvalho Chehab }
31042422a9b3SMauro Carvalho Chehab
31052422a9b3SMauro Carvalho Chehab return 0;
31062422a9b3SMauro Carvalho Chehab }
31072422a9b3SMauro Carvalho Chehab
3108399426caSMauro Carvalho Chehab /*
3109399426caSMauro Carvalho Chehab * some DViCO specific stuff
3110399426caSMauro Carvalho Chehab */
3111780dfef3SChris Pascoe
dvico_fusionhdtv_hybrid_init(struct cx88_core * core)3112780dfef3SChris Pascoe static void dvico_fusionhdtv_hybrid_init(struct cx88_core *core)
3113780dfef3SChris Pascoe {
3114780dfef3SChris Pascoe struct i2c_msg msg = { .addr = 0x45, .flags = 0 };
3115780dfef3SChris Pascoe int i, err;
311669b27e3dSChris Pascoe static u8 init_bufs[13][5] = {
3117780dfef3SChris Pascoe { 0x10, 0x00, 0x20, 0x01, 0x03 },
3118780dfef3SChris Pascoe { 0x10, 0x10, 0x01, 0x00, 0x21 },
3119780dfef3SChris Pascoe { 0x10, 0x10, 0x10, 0x00, 0xCA },
3120780dfef3SChris Pascoe { 0x10, 0x10, 0x12, 0x00, 0x08 },
3121780dfef3SChris Pascoe { 0x10, 0x10, 0x13, 0x00, 0x0A },
3122780dfef3SChris Pascoe { 0x10, 0x10, 0x16, 0x01, 0xC0 },
3123780dfef3SChris Pascoe { 0x10, 0x10, 0x22, 0x01, 0x3D },
3124780dfef3SChris Pascoe { 0x10, 0x10, 0x73, 0x01, 0x2E },
3125780dfef3SChris Pascoe { 0x10, 0x10, 0x72, 0x00, 0xC5 },
3126780dfef3SChris Pascoe { 0x10, 0x10, 0x71, 0x01, 0x97 },
3127780dfef3SChris Pascoe { 0x10, 0x10, 0x70, 0x00, 0x0F },
3128780dfef3SChris Pascoe { 0x10, 0x10, 0xB0, 0x00, 0x01 },
3129780dfef3SChris Pascoe { 0x03, 0x0C },
3130780dfef3SChris Pascoe };
3131780dfef3SChris Pascoe
31325b9c4e6dSMauro Carvalho Chehab for (i = 0; i < ARRAY_SIZE(init_bufs); i++) {
3133780dfef3SChris Pascoe msg.buf = init_bufs[i];
3134780dfef3SChris Pascoe msg.len = (i != 12 ? 5 : 2);
3135780dfef3SChris Pascoe err = i2c_transfer(&core->i2c_adap, &msg, 1);
3136780dfef3SChris Pascoe if (err != 1) {
313765bc2fe8SMauro Carvalho Chehab pr_warn("dvico_fusionhdtv_hybrid_init buf %d failed (err = %d)!\n",
3138e318e584SMauro Carvalho Chehab i, err);
3139780dfef3SChris Pascoe return;
3140780dfef3SChris Pascoe }
3141780dfef3SChris Pascoe }
3142780dfef3SChris Pascoe }
3143780dfef3SChris Pascoe
cx88_xc2028_tuner_callback(struct cx88_core * core,int command,int arg)31440be51b46SMauro Carvalho Chehab static int cx88_xc2028_tuner_callback(struct cx88_core *core,
31450be51b46SMauro Carvalho Chehab int command, int arg)
3146c2cb8fccSMauro Carvalho Chehab {
31479507901eSMauro Carvalho Chehab /* Board-specific callbacks */
31489507901eSMauro Carvalho Chehab switch (core->boardnr) {
31499507901eSMauro Carvalho Chehab case CX88_BOARD_POWERCOLOR_REAL_ANGEL:
31509507901eSMauro Carvalho Chehab case CX88_BOARD_GENIATECH_X8000_MT:
315199e09eacSMauro Carvalho Chehab case CX88_BOARD_KWORLD_ATSC_120:
31520be51b46SMauro Carvalho Chehab return cx88_xc3028_geniatech_tuner_callback(core,
31530be51b46SMauro Carvalho Chehab command, arg);
31542422a9b3SMauro Carvalho Chehab case CX88_BOARD_PROLINK_PV_8000GT:
3155a31d2bb7SMauro Carvalho Chehab case CX88_BOARD_PROLINK_PV_GLOBAL_XTREME:
31560be51b46SMauro Carvalho Chehab return cx88_pv_8000gt_callback(core, command, arg);
3157b3fb91d2SChris Pascoe case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO:
3158d7cba043SMichael Krufky case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO:
31590be51b46SMauro Carvalho Chehab return cx88_dvico_xc2028_callback(core, command, arg);
3160e6f45ea2SDaniel Gonzalez Cabanelas case CX88_BOARD_NOTONLYTV_LV3H:
316114422f9dSMauro Carvalho Chehab case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL:
31623047a176SMiroslav Sustek case CX88_BOARD_WINFAST_DTV1800H:
31633047a176SMiroslav Sustek return cx88_xc3028_winfast1800h_callback(core, command, arg);
31649507901eSMauro Carvalho Chehab }
31659507901eSMauro Carvalho Chehab
3166c2cb8fccSMauro Carvalho Chehab switch (command) {
3167c2cb8fccSMauro Carvalho Chehab case XC2028_TUNER_RESET:
3168c2cb8fccSMauro Carvalho Chehab switch (INPUT(core->input).type) {
3169c2cb8fccSMauro Carvalho Chehab case CX88_RADIO:
317002615ed5SMauro Carvalho Chehab dprintk(1, "setting GPIO to radio!\n");
3171c2cb8fccSMauro Carvalho Chehab cx_write(MO_GP0_IO, 0x4ff);
3172c2cb8fccSMauro Carvalho Chehab mdelay(250);
3173c2cb8fccSMauro Carvalho Chehab cx_write(MO_GP2_IO, 0xff);
3174c2cb8fccSMauro Carvalho Chehab mdelay(250);
3175c450e50eSMauro Carvalho Chehab break;
3176c2cb8fccSMauro Carvalho Chehab case CX88_VMUX_DVB: /* Digital TV*/
3177c2cb8fccSMauro Carvalho Chehab default: /* Analog TV */
317802615ed5SMauro Carvalho Chehab dprintk(1, "setting GPIO to TV!\n");
3179c450e50eSMauro Carvalho Chehab break;
3180c450e50eSMauro Carvalho Chehab }
3181c2cb8fccSMauro Carvalho Chehab cx_write(MO_GP1_IO, 0x101010);
3182c2cb8fccSMauro Carvalho Chehab mdelay(250);
3183c2cb8fccSMauro Carvalho Chehab cx_write(MO_GP1_IO, 0x101000);
3184c2cb8fccSMauro Carvalho Chehab mdelay(250);
3185c2cb8fccSMauro Carvalho Chehab cx_write(MO_GP1_IO, 0x101010);
3186c2cb8fccSMauro Carvalho Chehab mdelay(250);
3187c2cb8fccSMauro Carvalho Chehab return 0;
3188c2cb8fccSMauro Carvalho Chehab }
3189c2cb8fccSMauro Carvalho Chehab return -EINVAL;
3190c2cb8fccSMauro Carvalho Chehab }
3191c2cb8fccSMauro Carvalho Chehab
cx88_xc4000_tuner_callback(struct cx88_core * core,int command,int arg)3192c21973e8Sistvan_v@mailbox.hu static int cx88_xc4000_tuner_callback(struct cx88_core *core,
3193c21973e8Sistvan_v@mailbox.hu int command, int arg)
3194c21973e8Sistvan_v@mailbox.hu {
3195c21973e8Sistvan_v@mailbox.hu /* Board-specific callbacks */
3196c21973e8Sistvan_v@mailbox.hu switch (core->boardnr) {
31978eb79c0bSistvan_v@mailbox.hu case CX88_BOARD_WINFAST_DTV1800H_XC4000:
3198f271a3afSistvan_v@mailbox.hu case CX88_BOARD_WINFAST_DTV2000H_PLUS:
319984463d5fSIstvan Varga case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F36:
320084463d5fSIstvan Varga case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F43:
3201f271a3afSistvan_v@mailbox.hu return cx88_xc4000_winfast2000h_plus_callback(core,
3202f271a3afSistvan_v@mailbox.hu command, arg);
3203c21973e8Sistvan_v@mailbox.hu }
3204c21973e8Sistvan_v@mailbox.hu return -EINVAL;
3205c21973e8Sistvan_v@mailbox.hu }
3206c21973e8Sistvan_v@mailbox.hu
3207399426caSMauro Carvalho Chehab /*
3208399426caSMauro Carvalho Chehab * Tuner callback function. Currently only needed for the Pinnacle
320973c9a3f3SBhaskar Chowdhury * PCTV HD 800i with an xc5000 silicon tuner. This is used for both
3210399426caSMauro Carvalho Chehab * analog tuner attach (tuner-core.c) and dvb tuner attach (cx88-dvb.c)
3211399426caSMauro Carvalho Chehab */
cx88_xc5000_tuner_callback(struct cx88_core * core,int command,int arg)32120be51b46SMauro Carvalho Chehab static int cx88_xc5000_tuner_callback(struct cx88_core *core,
32130be51b46SMauro Carvalho Chehab int command, int arg)
321460464da8SSteven Toth {
321560464da8SSteven Toth switch (core->boardnr) {
321660464da8SSteven Toth case CX88_BOARD_PINNACLE_PCTV_HD_800i:
321760464da8SSteven Toth if (command == 0) { /* This is the reset command from xc5000 */
3218b8d91986SDevin Heitmueller
3219399426caSMauro Carvalho Chehab /*
3220399426caSMauro Carvalho Chehab * djh - According to the engineer at PCTV Systems,
3221399426caSMauro Carvalho Chehab * the xc5000 reset pin is supposed to be on GPIO12.
3222399426caSMauro Carvalho Chehab * However, despite three nights of effort, pulling
3223399426caSMauro Carvalho Chehab * that GPIO low didn't reset the xc5000. While
3224399426caSMauro Carvalho Chehab * pulling MO_SRST_IO low does reset the xc5000, this
3225399426caSMauro Carvalho Chehab * also resets in the s5h1409 being reset as well.
3226399426caSMauro Carvalho Chehab * This causes tuning to always fail since the internal
3227399426caSMauro Carvalho Chehab * state of the s5h1409 does not match the driver's
3228399426caSMauro Carvalho Chehab * state. Given that the only two conditions in which
3229399426caSMauro Carvalho Chehab * the driver performs a reset is during firmware load
3230399426caSMauro Carvalho Chehab * and powering down the chip, I am taking out the
3231399426caSMauro Carvalho Chehab * reset. We know that the chip is being reset
3232399426caSMauro Carvalho Chehab * when the cx88 comes online, and not being able to
3233399426caSMauro Carvalho Chehab * do power management for this board is worse than
3234399426caSMauro Carvalho Chehab * not having any tuning at all.
3235399426caSMauro Carvalho Chehab */
323660464da8SSteven Toth return 0;
3237399426caSMauro Carvalho Chehab }
3238399426caSMauro Carvalho Chehab
323902615ed5SMauro Carvalho Chehab dprintk(1, "xc5000: unknown tuner callback command.\n");
324060464da8SSteven Toth return -EINVAL;
32411117d6baSSteven Toth case CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD:
32421117d6baSSteven Toth if (command == 0) { /* This is the reset command from xc5000 */
32431117d6baSSteven Toth cx_clear(MO_GP0_IO, 0x00000010);
3244399426caSMauro Carvalho Chehab usleep_range(10000, 20000);
32451117d6baSSteven Toth cx_set(MO_GP0_IO, 0x00000010);
32461117d6baSSteven Toth return 0;
3247399426caSMauro Carvalho Chehab }
3248399426caSMauro Carvalho Chehab
324902615ed5SMauro Carvalho Chehab dprintk(1, "xc5000: unknown tuner callback command.\n");
32501117d6baSSteven Toth return -EINVAL;
32511117d6baSSteven Toth }
325260464da8SSteven Toth return 0; /* Should never be here */
325360464da8SSteven Toth }
3254c2cb8fccSMauro Carvalho Chehab
cx88_tuner_callback(void * priv,int component,int command,int arg)3255d7cba043SMichael Krufky int cx88_tuner_callback(void *priv, int component, int command, int arg)
3256c2cb8fccSMauro Carvalho Chehab {
3257c2cb8fccSMauro Carvalho Chehab struct i2c_algo_bit_data *i2c_algo = priv;
32580be51b46SMauro Carvalho Chehab struct cx88_core *core;
32590be51b46SMauro Carvalho Chehab
32600be51b46SMauro Carvalho Chehab if (!i2c_algo) {
326165bc2fe8SMauro Carvalho Chehab pr_err("Error - i2c private data undefined.\n");
32620be51b46SMauro Carvalho Chehab return -EINVAL;
32630be51b46SMauro Carvalho Chehab }
32640be51b46SMauro Carvalho Chehab
32650be51b46SMauro Carvalho Chehab core = i2c_algo->data;
32660be51b46SMauro Carvalho Chehab
32670be51b46SMauro Carvalho Chehab if (!core) {
326865bc2fe8SMauro Carvalho Chehab pr_err("Error - device struct undefined.\n");
32690be51b46SMauro Carvalho Chehab return -EINVAL;
32700be51b46SMauro Carvalho Chehab }
3271c2cb8fccSMauro Carvalho Chehab
3272d7cba043SMichael Krufky if (component != DVB_FRONTEND_COMPONENT_TUNER)
3273d7cba043SMichael Krufky return -EINVAL;
3274d7cba043SMichael Krufky
3275c2cb8fccSMauro Carvalho Chehab switch (core->board.tuner_type) {
3276c2cb8fccSMauro Carvalho Chehab case TUNER_XC2028:
327702615ed5SMauro Carvalho Chehab dprintk(1, "Calling XC2028/3028 callback\n");
32780be51b46SMauro Carvalho Chehab return cx88_xc2028_tuner_callback(core, command, arg);
3279c21973e8Sistvan_v@mailbox.hu case TUNER_XC4000:
328002615ed5SMauro Carvalho Chehab dprintk(1, "Calling XC4000 callback\n");
3281c21973e8Sistvan_v@mailbox.hu return cx88_xc4000_tuner_callback(core, command, arg);
3282c2cb8fccSMauro Carvalho Chehab case TUNER_XC5000:
328302615ed5SMauro Carvalho Chehab dprintk(1, "Calling XC5000 callback\n");
32840be51b46SMauro Carvalho Chehab return cx88_xc5000_tuner_callback(core, command, arg);
3285c2cb8fccSMauro Carvalho Chehab }
328665bc2fe8SMauro Carvalho Chehab pr_err("Error: Calling callback for tuner %d\n",
32870f19e65bSMauro Carvalho Chehab core->board.tuner_type);
3288c2cb8fccSMauro Carvalho Chehab return -EINVAL;
3289c2cb8fccSMauro Carvalho Chehab }
329060464da8SSteven Toth EXPORT_SYMBOL(cx88_tuner_callback);
329160464da8SSteven Toth
329260464da8SSteven Toth /* ----------------------------------------------------------------------- */
32931da177e4SLinus Torvalds
cx88_card_list(struct cx88_core * core,struct pci_dev * pci)3294bbc83597STrent Piepho static void cx88_card_list(struct cx88_core *core, struct pci_dev *pci)
32951da177e4SLinus Torvalds {
32961da177e4SLinus Torvalds int i;
32971da177e4SLinus Torvalds
3298399426caSMauro Carvalho Chehab if (!pci->subsystem_vendor && !pci->subsystem_device) {
329965bc2fe8SMauro Carvalho Chehab pr_err("Your board has no valid PCI Subsystem ID and thus can't\n");
330065bc2fe8SMauro Carvalho Chehab pr_err("be autodetected. Please pass card=<n> insmod option to\n");
330165bc2fe8SMauro Carvalho Chehab pr_err("workaround that. Redirect complaints to the vendor of\n");
330265bc2fe8SMauro Carvalho Chehab pr_err("the TV card\n");
33031da177e4SLinus Torvalds } else {
330465bc2fe8SMauro Carvalho Chehab pr_err("Your board isn't known (yet) to the driver. You can\n");
330565bc2fe8SMauro Carvalho Chehab pr_err("try to pick one of the existing card configs via\n");
330665bc2fe8SMauro Carvalho Chehab pr_err("card=<n> insmod option. Updating to the latest\n");
330765bc2fe8SMauro Carvalho Chehab pr_err("version might help as well.\n");
33081da177e4SLinus Torvalds }
330965bc2fe8SMauro Carvalho Chehab pr_err("Here is a list of valid choices for the card=<n> insmod option:\n");
3310bbc83597STrent Piepho for (i = 0; i < ARRAY_SIZE(cx88_boards); i++)
331165bc2fe8SMauro Carvalho Chehab pr_err(" card=%d -> %s\n", i, cx88_boards[i].name);
33121da177e4SLinus Torvalds }
33131da177e4SLinus Torvalds
cx88_card_setup_pre_i2c(struct cx88_core * core)3314bbc83597STrent Piepho static void cx88_card_setup_pre_i2c(struct cx88_core *core)
3315aa481a65SSteven Toth {
33166a59d64cSTrent Piepho switch (core->boardnr) {
3317aa481a65SSteven Toth case CX88_BOARD_HAUPPAUGE_HVR1300:
33182491fbb7SSteven Toth /*
3319399426caSMauro Carvalho Chehab * Bring the 702 demod up before i2c scanning/attach or
3320399426caSMauro Carvalho Chehab * devices are hidden.
3321399426caSMauro Carvalho Chehab *
33222491fbb7SSteven Toth * We leave here with the 702 on the bus
33232491fbb7SSteven Toth *
33242491fbb7SSteven Toth * "reset the IR receiver on GPIO[3]"
33252491fbb7SSteven Toth * Reported by Mike Crash <mike AT mikecrash.com>
33262491fbb7SSteven Toth */
33272491fbb7SSteven Toth cx_write(MO_GP0_IO, 0x0000ef88);
3328aa481a65SSteven Toth udelay(1000);
33292491fbb7SSteven Toth cx_clear(MO_GP0_IO, 0x00000088);
3330aa481a65SSteven Toth udelay(50);
33312491fbb7SSteven Toth cx_set(MO_GP0_IO, 0x00000088); /* 702 out of reset */
3332aa481a65SSteven Toth udelay(1000);
3333aa481a65SSteven Toth break;
33342422a9b3SMauro Carvalho Chehab
3335a31d2bb7SMauro Carvalho Chehab case CX88_BOARD_PROLINK_PV_GLOBAL_XTREME:
33362422a9b3SMauro Carvalho Chehab case CX88_BOARD_PROLINK_PV_8000GT:
33372422a9b3SMauro Carvalho Chehab cx_write(MO_GP2_IO, 0xcf7);
3338dddaf754SJia-Ju Bai msleep(50);
33392422a9b3SMauro Carvalho Chehab cx_write(MO_GP2_IO, 0xef5);
3340dddaf754SJia-Ju Bai msleep(50);
33412422a9b3SMauro Carvalho Chehab cx_write(MO_GP2_IO, 0xcf7);
3342399426caSMauro Carvalho Chehab usleep_range(10000, 20000);
33432422a9b3SMauro Carvalho Chehab break;
33442422a9b3SMauro Carvalho Chehab
33451117d6baSSteven Toth case CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD:
33461117d6baSSteven Toth /* Enable the xc5000 tuner */
33471117d6baSSteven Toth cx_set(MO_GP0_IO, 0x00001010);
33481117d6baSSteven Toth break;
33492491fbb7SSteven Toth
335027b93d8aSMiroslav Slugen case CX88_BOARD_WINFAST_DTV2000H_J:
33512491fbb7SSteven Toth case CX88_BOARD_HAUPPAUGE_HVR3000:
33525bd1b663SSteven Toth case CX88_BOARD_HAUPPAUGE_HVR4000:
33532491fbb7SSteven Toth /* Init GPIO */
33542491fbb7SSteven Toth cx_write(MO_GP0_IO, core->board.input[0].gpio0);
33555bd1b663SSteven Toth udelay(1000);
33562f3af9e6SDarron Broad cx_clear(MO_GP0_IO, 0x00000080);
33572f3af9e6SDarron Broad udelay(50);
33582f3af9e6SDarron Broad cx_set(MO_GP0_IO, 0x00000080); /* 702 out of reset */
33592f3af9e6SDarron Broad udelay(1000);
33602491fbb7SSteven Toth break;
33613047a176SMiroslav Sustek
3362e6f45ea2SDaniel Gonzalez Cabanelas case CX88_BOARD_NOTONLYTV_LV3H:
336314422f9dSMauro Carvalho Chehab case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL:
33643047a176SMiroslav Sustek case CX88_BOARD_WINFAST_DTV1800H:
336579a5b9a2Sistvan_v@mailbox.hu cx88_xc3028_winfast1800h_callback(core, XC2028_TUNER_RESET, 0);
33663047a176SMiroslav Sustek break;
3367111ac84aSSergey Ivanov
33688eb79c0bSistvan_v@mailbox.hu case CX88_BOARD_WINFAST_DTV1800H_XC4000:
3369f271a3afSistvan_v@mailbox.hu case CX88_BOARD_WINFAST_DTV2000H_PLUS:
337084463d5fSIstvan Varga case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F36:
337184463d5fSIstvan Varga case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F43:
3372f271a3afSistvan_v@mailbox.hu cx88_xc4000_winfast2000h_plus_callback(core,
3373f271a3afSistvan_v@mailbox.hu XC4000_TUNER_RESET, 0);
3374f271a3afSistvan_v@mailbox.hu break;
3375f271a3afSistvan_v@mailbox.hu
3376111ac84aSSergey Ivanov case CX88_BOARD_TWINHAN_VP1027_DVBS:
3377111ac84aSSergey Ivanov cx_write(MO_GP0_IO, 0x00003230);
3378111ac84aSSergey Ivanov cx_write(MO_GP0_IO, 0x00003210);
3379399426caSMauro Carvalho Chehab usleep_range(10000, 20000);
3380111ac84aSSergey Ivanov cx_write(MO_GP0_IO, 0x00001230);
3381111ac84aSSergey Ivanov break;
3382aa481a65SSteven Toth }
3383aa481a65SSteven Toth }
3384aa481a65SSteven Toth
338599e09eacSMauro Carvalho Chehab /*
338699e09eacSMauro Carvalho Chehab * Sets board-dependent xc3028 configuration
338799e09eacSMauro Carvalho Chehab */
cx88_setup_xc3028(struct cx88_core * core,struct xc2028_ctrl * ctl)338899e09eacSMauro Carvalho Chehab void cx88_setup_xc3028(struct cx88_core *core, struct xc2028_ctrl *ctl)
338999e09eacSMauro Carvalho Chehab {
339099e09eacSMauro Carvalho Chehab memset(ctl, 0, sizeof(*ctl));
339199e09eacSMauro Carvalho Chehab
339299e09eacSMauro Carvalho Chehab ctl->fname = XC2028_DEFAULT_FIRMWARE;
339399e09eacSMauro Carvalho Chehab ctl->max_len = 64;
339499e09eacSMauro Carvalho Chehab
339599e09eacSMauro Carvalho Chehab switch (core->boardnr) {
339699e09eacSMauro Carvalho Chehab case CX88_BOARD_POWERCOLOR_REAL_ANGEL:
3397a9606ce6SDaniel Gimpelevich /* Now works with firmware version 2.7 */
3398a9606ce6SDaniel Gimpelevich if (core->i2c_algo.udelay < 16)
3399a9606ce6SDaniel Gimpelevich core->i2c_algo.udelay = 16;
340099e09eacSMauro Carvalho Chehab break;
340199e09eacSMauro Carvalho Chehab case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO:
34023047a176SMiroslav Sustek case CX88_BOARD_WINFAST_DTV1800H:
340319c309e3STim Farrington ctl->demod = XC3028_FE_ZARLINK456;
340499e09eacSMauro Carvalho Chehab break;
340599e09eacSMauro Carvalho Chehab case CX88_BOARD_KWORLD_ATSC_120:
340699e09eacSMauro Carvalho Chehab case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO:
340799e09eacSMauro Carvalho Chehab ctl->demod = XC3028_FE_OREN538;
340899e09eacSMauro Carvalho Chehab break;
340993b99923SDevin Heitmueller case CX88_BOARD_GENIATECH_X8000_MT:
3410399426caSMauro Carvalho Chehab /*
3411399426caSMauro Carvalho Chehab * FIXME: For this board, the xc3028 never recovers after being
3412399426caSMauro Carvalho Chehab * powered down (the reset GPIO probably is not set properly).
3413399426caSMauro Carvalho Chehab * We don't have access to the hardware so we cannot determine
3414399426caSMauro Carvalho Chehab * which GPIO is used for xc3028, so just disable power xc3028
3415399426caSMauro Carvalho Chehab * power management for now
3416399426caSMauro Carvalho Chehab */
341793b99923SDevin Heitmueller ctl->disable_power_mgmt = 1;
341893b99923SDevin Heitmueller break;
3419e6f45ea2SDaniel Gonzalez Cabanelas case CX88_BOARD_NOTONLYTV_LV3H:
3420e6f45ea2SDaniel Gonzalez Cabanelas ctl->demod = XC3028_FE_ZARLINK456;
3421e6f45ea2SDaniel Gonzalez Cabanelas ctl->fname = XC3028L_DEFAULT_FIRMWARE;
3422e6f45ea2SDaniel Gonzalez Cabanelas ctl->read_not_reliable = 1;
3423e6f45ea2SDaniel Gonzalez Cabanelas break;
342414422f9dSMauro Carvalho Chehab case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL:
3425a31d2bb7SMauro Carvalho Chehab case CX88_BOARD_PROLINK_PV_GLOBAL_XTREME:
342699e09eacSMauro Carvalho Chehab case CX88_BOARD_PROLINK_PV_8000GT:
342799e09eacSMauro Carvalho Chehab /*
3428a31d2bb7SMauro Carvalho Chehab * Those boards uses non-MTS firmware
342999e09eacSMauro Carvalho Chehab */
343099e09eacSMauro Carvalho Chehab break;
34313f6014fcSStéphane Voltz case CX88_BOARD_PINNACLE_HYBRID_PCTV:
343270101a27SStephan Wienczny case CX88_BOARD_TERRATEC_CINERGY_HT_PCI_MKII:
34333f6014fcSStéphane Voltz ctl->demod = XC3028_FE_ZARLINK456;
34343f6014fcSStéphane Voltz ctl->mts = 1;
34353f6014fcSStéphane Voltz break;
343699e09eacSMauro Carvalho Chehab default:
343799e09eacSMauro Carvalho Chehab ctl->demod = XC3028_FE_OREN538;
343899e09eacSMauro Carvalho Chehab ctl->mts = 1;
343999e09eacSMauro Carvalho Chehab }
344099e09eacSMauro Carvalho Chehab }
344199e09eacSMauro Carvalho Chehab EXPORT_SYMBOL_GPL(cx88_setup_xc3028);
344299e09eacSMauro Carvalho Chehab
cx88_card_setup(struct cx88_core * core)3443bbc83597STrent Piepho static void cx88_card_setup(struct cx88_core *core)
34441da177e4SLinus Torvalds {
34453ca0ea98SSteven Toth static u8 eeprom[256];
34464bf1226aSMauro Carvalho Chehab struct tuner_setup tun_setup;
3447ad020dc2SMauro Carvalho Chehab unsigned int mode_mask = T_RADIO | T_ANALOG_TV;
34484bf1226aSMauro Carvalho Chehab
34494bf1226aSMauro Carvalho Chehab memset(&tun_setup, 0, sizeof(tun_setup));
34501da177e4SLinus Torvalds
3451399426caSMauro Carvalho Chehab if (!core->i2c_rc) {
34521da177e4SLinus Torvalds core->i2c_client.addr = 0xa0 >> 1;
34531da177e4SLinus Torvalds tveeprom_read(&core->i2c_client, eeprom, sizeof(eeprom));
34541da177e4SLinus Torvalds }
34551da177e4SLinus Torvalds
34566a59d64cSTrent Piepho switch (core->boardnr) {
34571da177e4SLinus Torvalds case CX88_BOARD_HAUPPAUGE:
34581da177e4SLinus Torvalds case CX88_BOARD_HAUPPAUGE_ROSLYN:
3459399426caSMauro Carvalho Chehab if (!core->i2c_rc)
34601da177e4SLinus Torvalds hauppauge_eeprom(core, eeprom + 8);
34611da177e4SLinus Torvalds break;
34621da177e4SLinus Torvalds case CX88_BOARD_GDI:
3463399426caSMauro Carvalho Chehab if (!core->i2c_rc)
34641da177e4SLinus Torvalds gdi_eeprom(core, eeprom);
34651da177e4SLinus Torvalds break;
346614422f9dSMauro Carvalho Chehab case CX88_BOARD_LEADTEK_PVR2000:
346714422f9dSMauro Carvalho Chehab case CX88_BOARD_WINFAST_DV2000:
34681da177e4SLinus Torvalds case CX88_BOARD_WINFAST2000XP_EXPERT:
3469399426caSMauro Carvalho Chehab if (!core->i2c_rc)
34701da177e4SLinus Torvalds leadtek_eeprom(core, eeprom);
34711da177e4SLinus Torvalds break;
34720fa14aa6SSteven Toth case CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1:
34730fa14aa6SSteven Toth case CX88_BOARD_HAUPPAUGE_NOVASE2_S1:
34741da177e4SLinus Torvalds case CX88_BOARD_HAUPPAUGE_DVB_T1:
3475611900c1SSteven Toth case CX88_BOARD_HAUPPAUGE_HVR1100:
3476611900c1SSteven Toth case CX88_BOARD_HAUPPAUGE_HVR1100LP:
3477ad10c930SEric Thomas case CX88_BOARD_HAUPPAUGE_HVR3000:
3478aa481a65SSteven Toth case CX88_BOARD_HAUPPAUGE_HVR1300:
34795bd1b663SSteven Toth case CX88_BOARD_HAUPPAUGE_HVR4000:
34805bd1b663SSteven Toth case CX88_BOARD_HAUPPAUGE_HVR4000LITE:
3481501d8cd4SSteven Toth case CX88_BOARD_HAUPPAUGE_IRONLY:
3482399426caSMauro Carvalho Chehab if (!core->i2c_rc)
34833ca0ea98SSteven Toth hauppauge_eeprom(core, eeprom);
34841da177e4SLinus Torvalds break;
34850e0351e3SVadim Catana case CX88_BOARD_KWORLD_DVBS_100:
34860e0351e3SVadim Catana cx_write(MO_GP0_IO, 0x000007f8);
34870e0351e3SVadim Catana cx_write(MO_GP1_IO, 0x00000001);
34880e0351e3SVadim Catana break;
34898765561fSChris Pascoe case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO:
34908765561fSChris Pascoe /* GPIO0:0 is hooked to demod reset */
34918765561fSChris Pascoe /* GPIO0:4 is hooked to xc3028 reset */
34928765561fSChris Pascoe cx_write(MO_GP0_IO, 0x00111100);
3493399426caSMauro Carvalho Chehab usleep_range(10000, 20000);
34948765561fSChris Pascoe cx_write(MO_GP0_IO, 0x00111111);
34958765561fSChris Pascoe break;
3496d536e9c4SChris Pascoe case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL:
3497d536e9c4SChris Pascoe /* GPIO0:6 is hooked to FX2 reset pin */
3498d536e9c4SChris Pascoe cx_set(MO_GP0_IO, 0x00004040);
3499d536e9c4SChris Pascoe cx_clear(MO_GP0_IO, 0x00000040);
3500d536e9c4SChris Pascoe msleep(1000);
3501d536e9c4SChris Pascoe cx_set(MO_GP0_IO, 0x00004040);
35021771e9fbSGustavo A. R. Silva fallthrough;
35031da177e4SLinus Torvalds case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1:
35041da177e4SLinus Torvalds case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS:
3505780dfef3SChris Pascoe case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID:
35061da177e4SLinus Torvalds /* GPIO0:0 is hooked to mt352 reset pin */
35071da177e4SLinus Torvalds cx_set(MO_GP0_IO, 0x00000101);
35081da177e4SLinus Torvalds cx_clear(MO_GP0_IO, 0x00000001);
3509399426caSMauro Carvalho Chehab usleep_range(10000, 20000);
35101da177e4SLinus Torvalds cx_set(MO_GP0_IO, 0x00000101);
3511399426caSMauro Carvalho Chehab if (!core->i2c_rc &&
35126a59d64cSTrent Piepho core->boardnr == CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID)
3513780dfef3SChris Pascoe dvico_fusionhdtv_hybrid_init(core);
35141da177e4SLinus Torvalds break;
35151da177e4SLinus Torvalds case CX88_BOARD_KWORLD_DVB_T:
35161da177e4SLinus Torvalds case CX88_BOARD_DNTV_LIVE_DVB_T:
35171da177e4SLinus Torvalds cx_set(MO_GP0_IO, 0x00000707);
35181da177e4SLinus Torvalds cx_set(MO_GP2_IO, 0x00000101);
35191da177e4SLinus Torvalds cx_clear(MO_GP2_IO, 0x00000001);
3520399426caSMauro Carvalho Chehab usleep_range(10000, 20000);
35211da177e4SLinus Torvalds cx_clear(MO_GP0_IO, 0x00000007);
35221da177e4SLinus Torvalds cx_set(MO_GP2_IO, 0x00000101);
35231da177e4SLinus Torvalds break;
3524fc40b261SChris Pascoe case CX88_BOARD_DNTV_LIVE_DVB_T_PRO:
3525fc40b261SChris Pascoe cx_write(MO_GP0_IO, 0x00080808);
3526fc40b261SChris Pascoe break;
3527e976f937SKirk Lapray case CX88_BOARD_ATI_HDTVWONDER:
3528399426caSMauro Carvalho Chehab if (!core->i2c_rc) {
3529e976f937SKirk Lapray /* enable tuner */
3530e976f937SKirk Lapray int i;
35315b9c4e6dSMauro Carvalho Chehab static const u8 buffer[][2] = {
35325b9c4e6dSMauro Carvalho Chehab {0x10, 0x12},
35335b9c4e6dSMauro Carvalho Chehab {0x13, 0x04},
35345b9c4e6dSMauro Carvalho Chehab {0x16, 0x00},
35355b9c4e6dSMauro Carvalho Chehab {0x14, 0x04},
35365b9c4e6dSMauro Carvalho Chehab {0x17, 0x00}
35375b9c4e6dSMauro Carvalho Chehab };
3538e976f937SKirk Lapray core->i2c_client.addr = 0x0a;
3539e976f937SKirk Lapray
35405b9c4e6dSMauro Carvalho Chehab for (i = 0; i < ARRAY_SIZE(buffer); i++)
3541399426caSMauro Carvalho Chehab if (i2c_master_send(&core->i2c_client,
3542399426caSMauro Carvalho Chehab buffer[i], 2) != 2)
354365bc2fe8SMauro Carvalho Chehab pr_warn("Unable to enable tuner(%i).\n",
3544e318e584SMauro Carvalho Chehab i);
3545e976f937SKirk Lapray }
3546e976f937SKirk Lapray break;
354755c88610SMauro Carvalho Chehab case CX88_BOARD_MSI_TVANYWHERE_MASTER:
354855c88610SMauro Carvalho Chehab {
354955c88610SMauro Carvalho Chehab struct v4l2_priv_tun_config tea5767_cfg;
355055c88610SMauro Carvalho Chehab struct tea5767_ctrl ctl;
355155c88610SMauro Carvalho Chehab
355255c88610SMauro Carvalho Chehab memset(&ctl, 0, sizeof(ctl));
355355c88610SMauro Carvalho Chehab
355455c88610SMauro Carvalho Chehab ctl.high_cut = 1;
355555c88610SMauro Carvalho Chehab ctl.st_noise = 1;
355655c88610SMauro Carvalho Chehab ctl.deemph_75 = 1;
355755c88610SMauro Carvalho Chehab ctl.xtal_freq = TEA5767_HIGH_LO_13MHz;
355855c88610SMauro Carvalho Chehab
355955c88610SMauro Carvalho Chehab tea5767_cfg.tuner = TUNER_TEA5767;
356055c88610SMauro Carvalho Chehab tea5767_cfg.priv = &ctl;
356155c88610SMauro Carvalho Chehab
3562b8341e1dSHans Verkuil call_all(core, tuner, s_config, &tea5767_cfg);
3563af832623SIgor M. Liplianin break;
356455c88610SMauro Carvalho Chehab }
3565e4aab64cSIgor M. Liplianin case CX88_BOARD_TEVII_S420:
3566af832623SIgor M. Liplianin case CX88_BOARD_TEVII_S460:
35670cb73639SIgor M. Liplianin case CX88_BOARD_TEVII_S464:
35684cd7fb87SOleg Roitburd case CX88_BOARD_OMICOM_SS4_PCI:
35694b29631dSIgor M. Liplianin case CX88_BOARD_TBS_8910:
3570ee73042cSOleg Roitburd case CX88_BOARD_TBS_8920:
3571cd3cde12SIgor M. Liplianin case CX88_BOARD_PROF_6200:
357257f51dbcSOleg Roitburd case CX88_BOARD_PROF_7300:
3573b699c271SIgor M. Liplianin case CX88_BOARD_PROF_7301:
35744b29631dSIgor M. Liplianin case CX88_BOARD_SATTRADE_ST4200:
3575ad5f74c0SIgor M. Liplianin cx_write(MO_GP0_IO, 0x8000);
3576ad5f74c0SIgor M. Liplianin msleep(100);
3577ee73042cSOleg Roitburd cx_write(MO_SRST_IO, 0);
3578399426caSMauro Carvalho Chehab usleep_range(10000, 20000);
3579ad5f74c0SIgor M. Liplianin cx_write(MO_GP0_IO, 0x8080);
3580ee73042cSOleg Roitburd msleep(100);
3581ee73042cSOleg Roitburd cx_write(MO_SRST_IO, 1);
3582ee73042cSOleg Roitburd msleep(100);
3583ee73042cSOleg Roitburd break;
35844bf1226aSMauro Carvalho Chehab } /*end switch() */
35854bf1226aSMauro Carvalho Chehab
35864bf1226aSMauro Carvalho Chehab /* Setup tuners */
3587399426caSMauro Carvalho Chehab if (core->board.radio_type != UNSET) {
35884bf1226aSMauro Carvalho Chehab tun_setup.mode_mask = T_RADIO;
35894bf1226aSMauro Carvalho Chehab tun_setup.type = core->board.radio_type;
35904bf1226aSMauro Carvalho Chehab tun_setup.addr = core->board.radio_addr;
35914bf1226aSMauro Carvalho Chehab tun_setup.tuner_callback = cx88_tuner_callback;
3592b8341e1dSHans Verkuil call_all(core, tuner, s_type_addr, &tun_setup);
35934bf1226aSMauro Carvalho Chehab mode_mask &= ~T_RADIO;
35944bf1226aSMauro Carvalho Chehab }
35954bf1226aSMauro Carvalho Chehab
3596c39ba330SHans Verkuil if (core->board.tuner_type != UNSET) {
35974bf1226aSMauro Carvalho Chehab tun_setup.mode_mask = mode_mask;
35984bf1226aSMauro Carvalho Chehab tun_setup.type = core->board.tuner_type;
35994bf1226aSMauro Carvalho Chehab tun_setup.addr = core->board.tuner_addr;
36004bf1226aSMauro Carvalho Chehab tun_setup.tuner_callback = cx88_tuner_callback;
36014bf1226aSMauro Carvalho Chehab
3602b8341e1dSHans Verkuil call_all(core, tuner, s_type_addr, &tun_setup);
36034bf1226aSMauro Carvalho Chehab }
36044bf1226aSMauro Carvalho Chehab
36054bf1226aSMauro Carvalho Chehab if (core->board.tda9887_conf) {
36064bf1226aSMauro Carvalho Chehab struct v4l2_priv_tun_config tda9887_cfg;
36074bf1226aSMauro Carvalho Chehab
36084bf1226aSMauro Carvalho Chehab tda9887_cfg.tuner = TUNER_TDA9887;
36094bf1226aSMauro Carvalho Chehab tda9887_cfg.priv = &core->board.tda9887_conf;
36104bf1226aSMauro Carvalho Chehab
3611b8341e1dSHans Verkuil call_all(core, tuner, s_config, &tda9887_cfg);
36121da177e4SLinus Torvalds }
3613c2cb8fccSMauro Carvalho Chehab
3614c2cb8fccSMauro Carvalho Chehab if (core->board.tuner_type == TUNER_XC2028) {
3615c2cb8fccSMauro Carvalho Chehab struct v4l2_priv_tun_config xc2028_cfg;
3616c2cb8fccSMauro Carvalho Chehab struct xc2028_ctrl ctl;
3617c2cb8fccSMauro Carvalho Chehab
361899e09eacSMauro Carvalho Chehab /* Fills device-dependent initialization parameters */
361999e09eacSMauro Carvalho Chehab cx88_setup_xc3028(core, &ctl);
362099e09eacSMauro Carvalho Chehab
362199e09eacSMauro Carvalho Chehab /* Sends parameters to xc2028/3028 tuner */
3622a9317abfSMauro Carvalho Chehab memset(&xc2028_cfg, 0, sizeof(xc2028_cfg));
3623c2cb8fccSMauro Carvalho Chehab xc2028_cfg.tuner = TUNER_XC2028;
3624c2cb8fccSMauro Carvalho Chehab xc2028_cfg.priv = &ctl;
362502615ed5SMauro Carvalho Chehab dprintk(1, "Asking xc2028/3028 to load firmware %s\n",
362664016330SMauro Carvalho Chehab ctl.fname);
3627b8341e1dSHans Verkuil call_all(core, tuner, s_config, &xc2028_cfg);
3628c2cb8fccSMauro Carvalho Chehab }
36293aab15afSHans Verkuil call_all(core, tuner, standby);
36301da177e4SLinus Torvalds }
36311da177e4SLinus Torvalds
36321da177e4SLinus Torvalds /* ------------------------------------------------------------------ */
36331da177e4SLinus Torvalds
cx88_pci_quirks(const char * name,struct pci_dev * pci)3634bbc83597STrent Piepho static int cx88_pci_quirks(const char *name, struct pci_dev *pci)
3635bbc83597STrent Piepho {
3636bbc83597STrent Piepho unsigned int lat = UNSET;
3637bbc83597STrent Piepho u8 ctrl = 0;
3638bbc83597STrent Piepho u8 value;
3639bbc83597STrent Piepho
3640bbc83597STrent Piepho /* check pci quirks */
3641bbc83597STrent Piepho if (pci_pci_problems & PCIPCI_TRITON) {
364265bc2fe8SMauro Carvalho Chehab pr_info("quirk: PCIPCI_TRITON -- set TBFX\n");
3643bbc83597STrent Piepho ctrl |= CX88X_EN_TBFX;
3644bbc83597STrent Piepho }
3645bbc83597STrent Piepho if (pci_pci_problems & PCIPCI_NATOMA) {
364665bc2fe8SMauro Carvalho Chehab pr_info("quirk: PCIPCI_NATOMA -- set TBFX\n");
3647bbc83597STrent Piepho ctrl |= CX88X_EN_TBFX;
3648bbc83597STrent Piepho }
3649bbc83597STrent Piepho if (pci_pci_problems & PCIPCI_VIAETBF) {
365065bc2fe8SMauro Carvalho Chehab pr_info("quirk: PCIPCI_VIAETBF -- set TBFX\n");
3651bbc83597STrent Piepho ctrl |= CX88X_EN_TBFX;
3652bbc83597STrent Piepho }
3653bbc83597STrent Piepho if (pci_pci_problems & PCIPCI_VSFX) {
365465bc2fe8SMauro Carvalho Chehab pr_info("quirk: PCIPCI_VSFX -- set VSFX\n");
3655bbc83597STrent Piepho ctrl |= CX88X_EN_VSFX;
3656bbc83597STrent Piepho }
3657bbc83597STrent Piepho #ifdef PCIPCI_ALIMAGIK
3658bbc83597STrent Piepho if (pci_pci_problems & PCIPCI_ALIMAGIK) {
365965bc2fe8SMauro Carvalho Chehab pr_info("quirk: PCIPCI_ALIMAGIK -- latency fixup\n");
3660bbc83597STrent Piepho lat = 0x0A;
3661bbc83597STrent Piepho }
3662bbc83597STrent Piepho #endif
3663bbc83597STrent Piepho
3664bbc83597STrent Piepho /* check insmod options */
36657b61ba8fSMauro Carvalho Chehab if (latency != UNSET)
3666bbc83597STrent Piepho lat = latency;
3667bbc83597STrent Piepho
3668bbc83597STrent Piepho /* apply stuff */
3669bbc83597STrent Piepho if (ctrl) {
3670bbc83597STrent Piepho pci_read_config_byte(pci, CX88X_DEVCTRL, &value);
3671bbc83597STrent Piepho value |= ctrl;
3672bbc83597STrent Piepho pci_write_config_byte(pci, CX88X_DEVCTRL, value);
3673bbc83597STrent Piepho }
36747b61ba8fSMauro Carvalho Chehab if (lat != UNSET) {
3675399426caSMauro Carvalho Chehab pr_info("setting pci latency timer to %d\n", latency);
3676bbc83597STrent Piepho pci_write_config_byte(pci, PCI_LATENCY_TIMER, latency);
3677bbc83597STrent Piepho }
3678bbc83597STrent Piepho return 0;
3679bbc83597STrent Piepho }
3680bbc83597STrent Piepho
cx88_get_resources(const struct cx88_core * core,struct pci_dev * pci)3681bbc83597STrent Piepho int cx88_get_resources(const struct cx88_core *core, struct pci_dev *pci)
3682bbc83597STrent Piepho {
3683bbc83597STrent Piepho if (request_mem_region(pci_resource_start(pci, 0),
3684bbc83597STrent Piepho pci_resource_len(pci, 0),
3685bbc83597STrent Piepho core->name))
3686bbc83597STrent Piepho return 0;
368765bc2fe8SMauro Carvalho Chehab pr_err("func %d: Can't get MMIO memory @ 0x%llx, subsystem: %04x:%04x\n",
368865bc2fe8SMauro Carvalho Chehab PCI_FUNC(pci->devfn),
3689bbc83597STrent Piepho (unsigned long long)pci_resource_start(pci, 0),
3690bbc83597STrent Piepho pci->subsystem_vendor, pci->subsystem_device);
3691bbc83597STrent Piepho return -EBUSY;
3692bbc83597STrent Piepho }
3693bbc83597STrent Piepho
3694399426caSMauro Carvalho Chehab /*
3695399426caSMauro Carvalho Chehab * Allocate and initialize the cx88 core struct. One should hold the
3696399426caSMauro Carvalho Chehab * devlist mutex before calling this.
3697399426caSMauro Carvalho Chehab */
cx88_core_create(struct pci_dev * pci,int nr)3698bbc83597STrent Piepho struct cx88_core *cx88_core_create(struct pci_dev *pci, int nr)
3699bbc83597STrent Piepho {
3700bbc83597STrent Piepho struct cx88_core *core;
3701bbc83597STrent Piepho int i;
3702bbc83597STrent Piepho
3703bbc83597STrent Piepho core = kzalloc(sizeof(*core), GFP_KERNEL);
3704399426caSMauro Carvalho Chehab if (!core)
3705fbc0ae20SAlan Cox return NULL;
3706bbc83597STrent Piepho
3707a8d8e38aSElena Reshetova refcount_set(&core->refcount, 1);
3708bbc83597STrent Piepho core->pci_bus = pci->bus->number;
3709bbc83597STrent Piepho core->pci_slot = PCI_SLOT(pci->devfn);
37108ddac9eeSTrent Piepho core->pci_irqmask = PCI_INT_RISC_RD_BERRINT | PCI_INT_RISC_WR_BERRINT |
37118ddac9eeSTrent Piepho PCI_INT_BRDG_BERRINT | PCI_INT_SRC_DMA_BERRINT |
37128ddac9eeSTrent Piepho PCI_INT_DST_DMA_BERRINT | PCI_INT_IPB_DMA_BERRINT;
3713bbc83597STrent Piepho mutex_init(&core->lock);
3714bbc83597STrent Piepho
3715bbc83597STrent Piepho core->nr = nr;
3716bbc83597STrent Piepho sprintf(core->name, "cx88[%d]", core->nr);
37179467fe12SHans Verkuil
37184e0973a9SDevin Heitmueller /*
37194e0973a9SDevin Heitmueller * Note: Setting initial standard here would cause first call to
37204e0973a9SDevin Heitmueller * cx88_set_tvnorm() to return without programming any registers. Leave
37214e0973a9SDevin Heitmueller * it blank for at this point and it will get set later in
37224e0973a9SDevin Heitmueller * cx8800_initdev()
37234e0973a9SDevin Heitmueller */
37244e0973a9SDevin Heitmueller core->tvnorm = 0;
37254e0973a9SDevin Heitmueller
3726ccd6f1d4SHans Verkuil core->width = 320;
3727ccd6f1d4SHans Verkuil core->height = 240;
3728ccd6f1d4SHans Verkuil core->field = V4L2_FIELD_INTERLACED;
3729ccd6f1d4SHans Verkuil
3730cc1e6315SMauro Carvalho Chehab strscpy(core->v4l2_dev.name, core->name, sizeof(core->v4l2_dev.name));
37319467fe12SHans Verkuil if (v4l2_device_register(NULL, &core->v4l2_dev)) {
37329467fe12SHans Verkuil kfree(core);
37339467fe12SHans Verkuil return NULL;
37349467fe12SHans Verkuil }
37359467fe12SHans Verkuil
37368c7cb12aSHans Verkuil if (v4l2_ctrl_handler_init(&core->video_hdl, 13)) {
37378c7cb12aSHans Verkuil v4l2_device_unregister(&core->v4l2_dev);
37388c7cb12aSHans Verkuil kfree(core);
37398c7cb12aSHans Verkuil return NULL;
37408c7cb12aSHans Verkuil }
37418c7cb12aSHans Verkuil
37428c7cb12aSHans Verkuil if (v4l2_ctrl_handler_init(&core->audio_hdl, 13)) {
37438c7cb12aSHans Verkuil v4l2_ctrl_handler_free(&core->video_hdl);
3744bac63981SHans Verkuil v4l2_device_unregister(&core->v4l2_dev);
3745bac63981SHans Verkuil kfree(core);
3746bac63981SHans Verkuil return NULL;
3747bac63981SHans Verkuil }
3748bac63981SHans Verkuil
37497b61ba8fSMauro Carvalho Chehab if (cx88_get_resources(core, pci) != 0) {
37508c7cb12aSHans Verkuil v4l2_ctrl_handler_free(&core->video_hdl);
37518c7cb12aSHans Verkuil v4l2_ctrl_handler_free(&core->audio_hdl);
37529467fe12SHans Verkuil v4l2_device_unregister(&core->v4l2_dev);
3753bbc83597STrent Piepho kfree(core);
3754bbc83597STrent Piepho return NULL;
3755bbc83597STrent Piepho }
3756bbc83597STrent Piepho
3757bbc83597STrent Piepho /* PCI stuff */
3758bbc83597STrent Piepho cx88_pci_quirks(core->name, pci);
3759bbc83597STrent Piepho core->lmmio = ioremap(pci_resource_start(pci, 0),
3760bbc83597STrent Piepho pci_resource_len(pci, 0));
3761bbc83597STrent Piepho core->bmmio = (u8 __iomem *)core->lmmio;
3762bbc83597STrent Piepho
3763399426caSMauro Carvalho Chehab if (!core->lmmio) {
3764bac63981SHans Verkuil release_mem_region(pci_resource_start(pci, 0),
3765bac63981SHans Verkuil pci_resource_len(pci, 0));
37668c7cb12aSHans Verkuil v4l2_ctrl_handler_free(&core->video_hdl);
37678c7cb12aSHans Verkuil v4l2_ctrl_handler_free(&core->audio_hdl);
3768bac63981SHans Verkuil v4l2_device_unregister(&core->v4l2_dev);
3769fbc0ae20SAlan Cox kfree(core);
3770fbc0ae20SAlan Cox return NULL;
3771fbc0ae20SAlan Cox }
3772fbc0ae20SAlan Cox
3773bbc83597STrent Piepho /* board config */
3774bbc83597STrent Piepho core->boardnr = UNSET;
3775bbc83597STrent Piepho if (card[core->nr] < ARRAY_SIZE(cx88_boards))
3776bbc83597STrent Piepho core->boardnr = card[core->nr];
3777399426caSMauro Carvalho Chehab for (i = 0; core->boardnr == UNSET && i < ARRAY_SIZE(cx88_subids); i++)
3778bbc83597STrent Piepho if (pci->subsystem_vendor == cx88_subids[i].subvendor &&
3779bbc83597STrent Piepho pci->subsystem_device == cx88_subids[i].subdevice)
3780bbc83597STrent Piepho core->boardnr = cx88_subids[i].card;
37817b61ba8fSMauro Carvalho Chehab if (core->boardnr == UNSET) {
3782bbc83597STrent Piepho core->boardnr = CX88_BOARD_UNKNOWN;
3783bbc83597STrent Piepho cx88_card_list(core, pci);
3784bbc83597STrent Piepho }
3785bbc83597STrent Piepho
3786b5237747SEzequiel Garcia core->board = cx88_boards[core->boardnr];
3787bbc83597STrent Piepho
37883007703dSMauro Carvalho Chehab if (!core->board.num_frontends && (core->board.mpeg & CX88_MPEG_DVB))
3789363c35fcSSteven Toth core->board.num_frontends = 1;
3790363c35fcSSteven Toth
379165bc2fe8SMauro Carvalho Chehab pr_info("subsystem: %04x:%04x, board: %s [card=%d,%s], frontend(s): %d\n",
37920f19e65bSMauro Carvalho Chehab pci->subsystem_vendor, pci->subsystem_device, core->board.name,
3793bbc83597STrent Piepho core->boardnr, card[core->nr] == core->boardnr ?
3794363c35fcSSteven Toth "insmod option" : "autodetected",
3795363c35fcSSteven Toth core->board.num_frontends);
3796bbc83597STrent Piepho
3797bbc83597STrent Piepho if (tuner[core->nr] != UNSET)
3798bbc83597STrent Piepho core->board.tuner_type = tuner[core->nr];
3799bbc83597STrent Piepho if (radio[core->nr] != UNSET)
3800bbc83597STrent Piepho core->board.radio_type = radio[core->nr];
3801bbc83597STrent Piepho
380202615ed5SMauro Carvalho Chehab dprintk(1, "TV tuner type %d, Radio tuner type %d\n",
38030f19e65bSMauro Carvalho Chehab core->board.tuner_type, core->board.radio_type);
3804bbc83597STrent Piepho
3805bbc83597STrent Piepho /* init hardware */
3806bbc83597STrent Piepho cx88_reset(core);
3807bbc83597STrent Piepho cx88_card_setup_pre_i2c(core);
3808bbc83597STrent Piepho cx88_i2c_init(core, pci);
3809189bf5f0SMauro Carvalho Chehab
3810189bf5f0SMauro Carvalho Chehab /* load tuner module, if needed */
38117b61ba8fSMauro Carvalho Chehab if (core->board.tuner_type != UNSET) {
3812399426caSMauro Carvalho Chehab /*
3813399426caSMauro Carvalho Chehab * Ignore 0x6b and 0x6f on cx88 boards.
381443d5eab7SHans Verkuil * FusionHDTV5 RT Gold has an ir receiver at 0x6b
3815399426caSMauro Carvalho Chehab * and an RTC at 0x6f which can get corrupted if probed.
3816399426caSMauro Carvalho Chehab */
381743d5eab7SHans Verkuil static const unsigned short tv_addrs[] = {
381843d5eab7SHans Verkuil 0x42, 0x43, 0x4a, 0x4b, /* tda8290 */
381943d5eab7SHans Verkuil 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
382043d5eab7SHans Verkuil 0x68, 0x69, 0x6a, 0x6c, 0x6d, 0x6e,
382143d5eab7SHans Verkuil I2C_CLIENT_END
382243d5eab7SHans Verkuil };
3823b8341e1dSHans Verkuil int has_demod = (core->board.tda9887_conf & TDA9887_PRESENT);
3824b8341e1dSHans Verkuil
3825399426caSMauro Carvalho Chehab /*
3826399426caSMauro Carvalho Chehab * I don't trust the radio_type as is stored in the card
3827399426caSMauro Carvalho Chehab * definitions, so we just probe for it.
3828399426caSMauro Carvalho Chehab * The radio_type is sometimes missing, or set to UNSET but
3829399426caSMauro Carvalho Chehab * later code configures a tea5767.
3830b8341e1dSHans Verkuil */
383153dacb15SHans Verkuil v4l2_i2c_new_subdev(&core->v4l2_dev, &core->i2c_adap,
3832399426caSMauro Carvalho Chehab "tuner", 0,
3833399426caSMauro Carvalho Chehab v4l2_i2c_tuner_addrs(ADDRS_RADIO));
3834b8341e1dSHans Verkuil if (has_demod)
383553dacb15SHans Verkuil v4l2_i2c_new_subdev(&core->v4l2_dev,
38369a1f8b34SLaurent Pinchart &core->i2c_adap, "tuner",
383753dacb15SHans Verkuil 0, v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
3838b8341e1dSHans Verkuil if (core->board.tuner_addr == ADDR_UNSET) {
383953dacb15SHans Verkuil v4l2_i2c_new_subdev(&core->v4l2_dev,
38409a1f8b34SLaurent Pinchart &core->i2c_adap, "tuner",
384153dacb15SHans Verkuil 0, has_demod ? tv_addrs + 4 : tv_addrs);
3842b8341e1dSHans Verkuil } else {
3843e6574f2fSHans Verkuil v4l2_i2c_new_subdev(&core->v4l2_dev, &core->i2c_adap,
3844399426caSMauro Carvalho Chehab "tuner", core->board.tuner_addr,
3845399426caSMauro Carvalho Chehab NULL);
3846b8341e1dSHans Verkuil }
3847b8341e1dSHans Verkuil }
3848189bf5f0SMauro Carvalho Chehab
3849bbc83597STrent Piepho cx88_card_setup(core);
385089c3bc78SJean Delvare if (!disable_ir) {
385115ceb6b1SJean Delvare cx88_i2c_init_ir(core);
3852bbc83597STrent Piepho cx88_ir_init(core, pci);
385389c3bc78SJean Delvare }
3854bbc83597STrent Piepho
3855bbc83597STrent Piepho return core;
3856bbc83597STrent Piepho }
3857