11da177e4SLinus Torvalds /* 21da177e4SLinus Torvalds * device driver for Conexant 2388x based TV cards 31da177e4SLinus Torvalds * card-specific stuff. 41da177e4SLinus Torvalds * 51da177e4SLinus Torvalds * (c) 2003 Gerd Knorr <kraxel@bytesex.org> [SuSE Labs] 61da177e4SLinus Torvalds * 71da177e4SLinus Torvalds * This program is free software; you can redistribute it and/or modify 81da177e4SLinus Torvalds * it under the terms of the GNU General Public License as published by 91da177e4SLinus Torvalds * the Free Software Foundation; either version 2 of the License, or 101da177e4SLinus Torvalds * (at your option) any later version. 111da177e4SLinus Torvalds * 121da177e4SLinus Torvalds * This program is distributed in the hope that it will be useful, 131da177e4SLinus Torvalds * but WITHOUT ANY WARRANTY; without even the implied warranty of 141da177e4SLinus Torvalds * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 151da177e4SLinus Torvalds * GNU General Public License for more details. 161da177e4SLinus Torvalds */ 171da177e4SLinus Torvalds 1865bc2fe8SMauro Carvalho Chehab #include "cx88.h" 1965bc2fe8SMauro Carvalho Chehab #include "tea5767.h" 2065bc2fe8SMauro Carvalho Chehab #include "xc4000.h" 2165bc2fe8SMauro Carvalho Chehab 221da177e4SLinus Torvalds #include <linux/init.h> 231da177e4SLinus Torvalds #include <linux/module.h> 241da177e4SLinus Torvalds #include <linux/pci.h> 251da177e4SLinus Torvalds #include <linux/delay.h> 265a0e3ad6STejun Heo #include <linux/slab.h> 271da177e4SLinus Torvalds 28bbc83597STrent Piepho static unsigned int tuner[] = {[0 ... (CX88_MAXBOARDS - 1)] = UNSET }; 29bbc83597STrent Piepho static unsigned int radio[] = {[0 ... (CX88_MAXBOARDS - 1)] = UNSET }; 30bbc83597STrent Piepho static unsigned int card[] = {[0 ... (CX88_MAXBOARDS - 1)] = UNSET }; 31bbc83597STrent Piepho 32bbc83597STrent Piepho module_param_array(tuner, int, NULL, 0444); 33bbc83597STrent Piepho module_param_array(radio, int, NULL, 0444); 34bbc83597STrent Piepho module_param_array(card, int, NULL, 0444); 35bbc83597STrent Piepho 36bbc83597STrent Piepho MODULE_PARM_DESC(tuner, "tuner type"); 37bbc83597STrent Piepho MODULE_PARM_DESC(radio, "radio tuner type"); 38bbc83597STrent Piepho MODULE_PARM_DESC(card, "card type"); 39bbc83597STrent Piepho 40bbc83597STrent Piepho static unsigned int latency = UNSET; 41bbc83597STrent Piepho module_param(latency, int, 0444); 42bbc83597STrent Piepho MODULE_PARM_DESC(latency, "pci latency timer"); 43bbc83597STrent Piepho 4489c3bc78SJean Delvare static int disable_ir; 4589c3bc78SJean Delvare module_param(disable_ir, int, 0444); 4697108cf6SMauro Carvalho Chehab MODULE_PARM_DESC(disable_ir, "Disable IR support"); 4789c3bc78SJean Delvare 4802615ed5SMauro Carvalho Chehab #define dprintk(level, fmt, arg...) do { \ 4902615ed5SMauro Carvalho Chehab if (cx88_core_debug >= level) \ 5065bc2fe8SMauro Carvalho Chehab printk(KERN_DEBUG pr_fmt("%s: core:" fmt), \ 5165bc2fe8SMauro Carvalho Chehab __func__, ##arg); \ 5202615ed5SMauro Carvalho Chehab } while (0) 5302615ed5SMauro Carvalho Chehab 541da177e4SLinus Torvalds /* ------------------------------------------------------------------ */ 551da177e4SLinus Torvalds /* board config info */ 561da177e4SLinus Torvalds 574bf1226aSMauro Carvalho Chehab /* If radio_type !=UNSET, radio_addr should be specified 584bf1226aSMauro Carvalho Chehab */ 594bf1226aSMauro Carvalho Chehab 60bbc83597STrent Piepho static const struct cx88_board cx88_boards[] = { 611da177e4SLinus Torvalds [CX88_BOARD_UNKNOWN] = { 621da177e4SLinus Torvalds .name = "UNKNOWN/GENERIC", 631da177e4SLinus Torvalds .tuner_type = UNSET, 64b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 65b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 66b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 671da177e4SLinus Torvalds .input = { { 681da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 691da177e4SLinus Torvalds .vmux = 0, 701da177e4SLinus Torvalds }, { 711da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE2, 721da177e4SLinus Torvalds .vmux = 1, 731da177e4SLinus Torvalds }, { 741da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE3, 751da177e4SLinus Torvalds .vmux = 2, 761da177e4SLinus Torvalds }, { 771da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE4, 781da177e4SLinus Torvalds .vmux = 3, 791da177e4SLinus Torvalds } }, 801da177e4SLinus Torvalds }, 811da177e4SLinus Torvalds [CX88_BOARD_HAUPPAUGE] = { 821da177e4SLinus Torvalds .name = "Hauppauge WinTV 34xxx models", 831da177e4SLinus Torvalds .tuner_type = UNSET, 84b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 85b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 86b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 871da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT, 881da177e4SLinus Torvalds .input = { { 891da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 901da177e4SLinus Torvalds .vmux = 0, 911da177e4SLinus Torvalds .gpio0 = 0xff00, // internal decoder 921da177e4SLinus Torvalds }, { 931da177e4SLinus Torvalds .type = CX88_VMUX_DEBUG, 941da177e4SLinus Torvalds .vmux = 0, 951da177e4SLinus Torvalds .gpio0 = 0xff01, // mono from tuner chip 961da177e4SLinus Torvalds }, { 971da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 981da177e4SLinus Torvalds .vmux = 1, 991da177e4SLinus Torvalds .gpio0 = 0xff02, 1001da177e4SLinus Torvalds }, { 1011da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 1021da177e4SLinus Torvalds .vmux = 2, 1031da177e4SLinus Torvalds .gpio0 = 0xff02, 1041da177e4SLinus Torvalds } }, 1051da177e4SLinus Torvalds .radio = { 1061da177e4SLinus Torvalds .type = CX88_RADIO, 1071da177e4SLinus Torvalds .gpio0 = 0xff01, 1081da177e4SLinus Torvalds }, 1091da177e4SLinus Torvalds }, 1101da177e4SLinus Torvalds [CX88_BOARD_GDI] = { 1111da177e4SLinus Torvalds .name = "GDI Black Gold", 1121da177e4SLinus Torvalds .tuner_type = UNSET, 113b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 114b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 115b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 1161da177e4SLinus Torvalds .input = { { 1171da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 1181da177e4SLinus Torvalds .vmux = 0, 119fd3113e8SMauro Carvalho Chehab }, { 120fd3113e8SMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO, 121fd3113e8SMauro Carvalho Chehab .vmux = 2, 1221da177e4SLinus Torvalds } }, 1231da177e4SLinus Torvalds }, 1241da177e4SLinus Torvalds [CX88_BOARD_PIXELVIEW] = { 1251da177e4SLinus Torvalds .name = "PixelView", 126b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_PAL, 127b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 128b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 129b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 1301da177e4SLinus Torvalds .input = { { 1311da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 1321da177e4SLinus Torvalds .vmux = 0, 1331da177e4SLinus Torvalds .gpio0 = 0xff00, // internal decoder 1341da177e4SLinus Torvalds }, { 1351da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 1361da177e4SLinus Torvalds .vmux = 1, 1371da177e4SLinus Torvalds }, { 1381da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 1391da177e4SLinus Torvalds .vmux = 2, 1401da177e4SLinus Torvalds } }, 1411da177e4SLinus Torvalds .radio = { 1421da177e4SLinus Torvalds .type = CX88_RADIO, 1431da177e4SLinus Torvalds .gpio0 = 0xff10, 1441da177e4SLinus Torvalds }, 1451da177e4SLinus Torvalds }, 1461da177e4SLinus Torvalds [CX88_BOARD_ATI_WONDER_PRO] = { 1471da177e4SLinus Torvalds .name = "ATI TV Wonder Pro", 148b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_4IN1, 149b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 150b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 151b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 1521da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT | TDA9887_INTERCARRIER, 1531da177e4SLinus Torvalds .input = { { 1541da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 1551da177e4SLinus Torvalds .vmux = 0, 1561da177e4SLinus Torvalds .gpio0 = 0x03ff, 1571da177e4SLinus Torvalds }, { 1581da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 1591da177e4SLinus Torvalds .vmux = 1, 1601da177e4SLinus Torvalds .gpio0 = 0x03fe, 1611da177e4SLinus Torvalds }, { 1621da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 1631da177e4SLinus Torvalds .vmux = 2, 1641da177e4SLinus Torvalds .gpio0 = 0x03fe, 1651da177e4SLinus Torvalds } }, 1661da177e4SLinus Torvalds }, 1671da177e4SLinus Torvalds [CX88_BOARD_WINFAST2000XP_EXPERT] = { 1681da177e4SLinus Torvalds .name = "Leadtek Winfast 2000XP Expert", 169b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_4IN1, 170b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 171b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 172b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 1731da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT, 1741da177e4SLinus Torvalds .input = { { 1751da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 1761da177e4SLinus Torvalds .vmux = 0, 1771da177e4SLinus Torvalds .gpio0 = 0x00F5e700, 1781da177e4SLinus Torvalds .gpio1 = 0x00003004, 1791da177e4SLinus Torvalds .gpio2 = 0x00F5e700, 1801da177e4SLinus Torvalds .gpio3 = 0x02000000, 1811da177e4SLinus Torvalds }, { 1821da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 1831da177e4SLinus Torvalds .vmux = 1, 1841da177e4SLinus Torvalds .gpio0 = 0x00F5c700, 1851da177e4SLinus Torvalds .gpio1 = 0x00003004, 1861da177e4SLinus Torvalds .gpio2 = 0x00F5c700, 1871da177e4SLinus Torvalds .gpio3 = 0x02000000, 1881da177e4SLinus Torvalds }, { 1891da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 1901da177e4SLinus Torvalds .vmux = 2, 1911da177e4SLinus Torvalds .gpio0 = 0x00F5c700, 1921da177e4SLinus Torvalds .gpio1 = 0x00003004, 1931da177e4SLinus Torvalds .gpio2 = 0x00F5c700, 1941da177e4SLinus Torvalds .gpio3 = 0x02000000, 1951da177e4SLinus Torvalds } }, 1961da177e4SLinus Torvalds .radio = { 1971da177e4SLinus Torvalds .type = CX88_RADIO, 1981da177e4SLinus Torvalds .gpio0 = 0x00F5d700, 1991da177e4SLinus Torvalds .gpio1 = 0x00003004, 2001da177e4SLinus Torvalds .gpio2 = 0x00F5d700, 2011da177e4SLinus Torvalds .gpio3 = 0x02000000, 2021da177e4SLinus Torvalds }, 2031da177e4SLinus Torvalds }, 2047418f346SLubomir Bulej [CX88_BOARD_AVERTV_STUDIO_303] = { 2051da177e4SLinus Torvalds .name = "AverTV Studio 303 (M126)", 206b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 207b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 208b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 209b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 2101da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT, 2111da177e4SLinus Torvalds .input = { { 2121da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 2131da177e4SLinus Torvalds .vmux = 0, 2144aca4831SMarcin Rudowski .gpio1 = 0xe09f, 2151da177e4SLinus Torvalds }, { 2161da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 2171da177e4SLinus Torvalds .vmux = 1, 2184aca4831SMarcin Rudowski .gpio1 = 0xe05f, 2191da177e4SLinus Torvalds }, { 2201da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 2211da177e4SLinus Torvalds .vmux = 2, 2224aca4831SMarcin Rudowski .gpio1 = 0xe05f, 2231da177e4SLinus Torvalds } }, 2241da177e4SLinus Torvalds .radio = { 2254aca4831SMarcin Rudowski .gpio1 = 0xe0df, 2261da177e4SLinus Torvalds .type = CX88_RADIO, 2271da177e4SLinus Torvalds }, 2281da177e4SLinus Torvalds }, 2291da177e4SLinus Torvalds [CX88_BOARD_MSI_TVANYWHERE_MASTER] = { 2301da177e4SLinus Torvalds // added gpio values thanks to Michal 2311da177e4SLinus Torvalds // values for PAL from DScaler 2321da177e4SLinus Torvalds .name = "MSI TV-@nywhere Master", 233b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_MT2032, 234b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 235b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 236b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 2373ae1adc6SNickolay V. Shmyrev .tda9887_conf = TDA9887_PRESENT | TDA9887_INTERCARRIER_NTSC, 2381da177e4SLinus Torvalds .input = { { 2391da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 2401da177e4SLinus Torvalds .vmux = 0, 2411da177e4SLinus Torvalds .gpio0 = 0x000040bf, 2421da177e4SLinus Torvalds .gpio1 = 0x000080c0, 2431da177e4SLinus Torvalds .gpio2 = 0x0000ff40, 2441da177e4SLinus Torvalds }, { 2451da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 2461da177e4SLinus Torvalds .vmux = 1, 2471da177e4SLinus Torvalds .gpio0 = 0x000040bf, 2481da177e4SLinus Torvalds .gpio1 = 0x000080c0, 2491da177e4SLinus Torvalds .gpio2 = 0x0000ff40, 2501da177e4SLinus Torvalds }, { 2511da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 2521da177e4SLinus Torvalds .vmux = 2, 2531da177e4SLinus Torvalds .gpio0 = 0x000040bf, 2541da177e4SLinus Torvalds .gpio1 = 0x000080c0, 2551da177e4SLinus Torvalds .gpio2 = 0x0000ff40, 2561da177e4SLinus Torvalds } }, 2571da177e4SLinus Torvalds .radio = { 2581da177e4SLinus Torvalds .type = CX88_RADIO, 25955c88610SMauro Carvalho Chehab .vmux = 3, 26055c88610SMauro Carvalho Chehab .gpio0 = 0x000040bf, 26155c88610SMauro Carvalho Chehab .gpio1 = 0x000080c0, 26255c88610SMauro Carvalho Chehab .gpio2 = 0x0000ff20, 2631da177e4SLinus Torvalds }, 2641da177e4SLinus Torvalds }, 2651da177e4SLinus Torvalds [CX88_BOARD_WINFAST_DV2000] = { 2661da177e4SLinus Torvalds .name = "Leadtek Winfast DV2000", 267b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 268b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 269b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 270b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 2711da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT, 2721da177e4SLinus Torvalds .input = { { 2731da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 2741da177e4SLinus Torvalds .vmux = 0, 2751da177e4SLinus Torvalds .gpio0 = 0x0035e700, 2761da177e4SLinus Torvalds .gpio1 = 0x00003004, 2771da177e4SLinus Torvalds .gpio2 = 0x0035e700, 2781da177e4SLinus Torvalds .gpio3 = 0x02000000, 2791da177e4SLinus Torvalds }, { 2801da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 2811da177e4SLinus Torvalds .vmux = 1, 2821da177e4SLinus Torvalds .gpio0 = 0x0035c700, 2831da177e4SLinus Torvalds .gpio1 = 0x00003004, 2841da177e4SLinus Torvalds .gpio2 = 0x0035c700, 2851da177e4SLinus Torvalds .gpio3 = 0x02000000, 2861da177e4SLinus Torvalds }, { 2871da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 2881da177e4SLinus Torvalds .vmux = 2, 2891da177e4SLinus Torvalds .gpio0 = 0x0035c700, 2901da177e4SLinus Torvalds .gpio1 = 0x0035c700, 2911da177e4SLinus Torvalds .gpio2 = 0x02000000, 2921da177e4SLinus Torvalds .gpio3 = 0x02000000, 2931da177e4SLinus Torvalds } }, 2941da177e4SLinus Torvalds .radio = { 2951da177e4SLinus Torvalds .type = CX88_RADIO, 2961da177e4SLinus Torvalds .gpio0 = 0x0035d700, 2971da177e4SLinus Torvalds .gpio1 = 0x00007004, 2981da177e4SLinus Torvalds .gpio2 = 0x0035d700, 2991da177e4SLinus Torvalds .gpio3 = 0x02000000, 3001da177e4SLinus Torvalds }, 3011da177e4SLinus Torvalds }, 3021da177e4SLinus Torvalds [CX88_BOARD_LEADTEK_PVR2000] = { 3031da177e4SLinus Torvalds // gpio values for PAL version from regspy by DScaler 3041da177e4SLinus Torvalds .name = "Leadtek PVR 2000", 305b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 306b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 307b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 308b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 3091da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT, 3101da177e4SLinus Torvalds .input = { { 3111da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 3121da177e4SLinus Torvalds .vmux = 0, 313b45009b0SMauro Carvalho Chehab .gpio0 = 0x0000bde2, 3147b27d45bSRicardo Cerqueira .audioroute = 1, 3151da177e4SLinus Torvalds }, { 3161da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 3171da177e4SLinus Torvalds .vmux = 1, 3181da177e4SLinus Torvalds .gpio0 = 0x0000bde6, 3197b27d45bSRicardo Cerqueira .audioroute = 1, 3201da177e4SLinus Torvalds }, { 3211da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 3221da177e4SLinus Torvalds .vmux = 2, 3231da177e4SLinus Torvalds .gpio0 = 0x0000bde6, 3247b27d45bSRicardo Cerqueira .audioroute = 1, 3251da177e4SLinus Torvalds } }, 3261da177e4SLinus Torvalds .radio = { 3271da177e4SLinus Torvalds .type = CX88_RADIO, 3281da177e4SLinus Torvalds .gpio0 = 0x0000bd62, 3297b27d45bSRicardo Cerqueira .audioroute = 1, 3301da177e4SLinus Torvalds }, 33148d5e803SMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD, 3321da177e4SLinus Torvalds }, 3331da177e4SLinus Torvalds [CX88_BOARD_IODATA_GVVCP3PCI] = { 3341da177e4SLinus Torvalds .name = "IODATA GV-VCP3/PCI", 335c39ba330SHans Verkuil .tuner_type = UNSET, 336b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 337b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 338b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 3391da177e4SLinus Torvalds .input = { { 3401da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 3411da177e4SLinus Torvalds .vmux = 0, 3421da177e4SLinus Torvalds }, { 3431da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE2, 3441da177e4SLinus Torvalds .vmux = 1, 3451da177e4SLinus Torvalds }, { 3461da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 3471da177e4SLinus Torvalds .vmux = 2, 3481da177e4SLinus Torvalds } }, 3491da177e4SLinus Torvalds }, 3501da177e4SLinus Torvalds [CX88_BOARD_PROLINK_PLAYTVPVR] = { 3511da177e4SLinus Torvalds .name = "Prolink PlayTV PVR", 352b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_FM1236_MK3, 353b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 354b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 355b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 3561da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT, 3571da177e4SLinus Torvalds .input = { { 3581da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 3591da177e4SLinus Torvalds .vmux = 0, 36049239c35SMatheus Izvekov .gpio0 = 0xbff0, 3611da177e4SLinus Torvalds }, { 3621da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 3631da177e4SLinus Torvalds .vmux = 1, 36449239c35SMatheus Izvekov .gpio0 = 0xbff3, 3651da177e4SLinus Torvalds }, { 3661da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 3671da177e4SLinus Torvalds .vmux = 2, 36849239c35SMatheus Izvekov .gpio0 = 0xbff3, 3691da177e4SLinus Torvalds } }, 3701da177e4SLinus Torvalds .radio = { 3711da177e4SLinus Torvalds .type = CX88_RADIO, 37249239c35SMatheus Izvekov .gpio0 = 0xbff0, 3731da177e4SLinus Torvalds }, 3741da177e4SLinus Torvalds }, 3751da177e4SLinus Torvalds [CX88_BOARD_ASUS_PVR_416] = { 3761da177e4SLinus Torvalds .name = "ASUS PVR-416", 377b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_FM1236_MK3, 378b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 379b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 380b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 3811da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT, 3821da177e4SLinus Torvalds .input = { { 3831da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 3841da177e4SLinus Torvalds .vmux = 0, 3851da177e4SLinus Torvalds .gpio0 = 0x0000fde6, 3861da177e4SLinus Torvalds }, { 3871da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 3881da177e4SLinus Torvalds .vmux = 2, 3891da177e4SLinus Torvalds .gpio0 = 0x0000fde6, // 0x0000fda6 L,R RCA audio in? 3907b27d45bSRicardo Cerqueira .audioroute = 1, 3911da177e4SLinus Torvalds } }, 3921da177e4SLinus Torvalds .radio = { 3931da177e4SLinus Torvalds .type = CX88_RADIO, 3941da177e4SLinus Torvalds .gpio0 = 0x0000fde2, 3951da177e4SLinus Torvalds }, 39648d5e803SMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD, 3971da177e4SLinus Torvalds }, 3981da177e4SLinus Torvalds [CX88_BOARD_MSI_TVANYWHERE] = { 3991da177e4SLinus Torvalds .name = "MSI TV-@nywhere", 400b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_MT2032, 401b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 402b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 403b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 4041da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT, 4051da177e4SLinus Torvalds .input = { { 4061da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 4071da177e4SLinus Torvalds .vmux = 0, 4081da177e4SLinus Torvalds .gpio0 = 0x00000fbf, 4091da177e4SLinus Torvalds .gpio2 = 0x0000fc08, 4101da177e4SLinus Torvalds }, { 4111da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 4121da177e4SLinus Torvalds .vmux = 1, 4131da177e4SLinus Torvalds .gpio0 = 0x00000fbf, 4141da177e4SLinus Torvalds .gpio2 = 0x0000fc68, 4151da177e4SLinus Torvalds }, { 4161da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 4171da177e4SLinus Torvalds .vmux = 2, 4181da177e4SLinus Torvalds .gpio0 = 0x00000fbf, 4191da177e4SLinus Torvalds .gpio2 = 0x0000fc68, 4201da177e4SLinus Torvalds } }, 4211da177e4SLinus Torvalds }, 4221da177e4SLinus Torvalds [CX88_BOARD_KWORLD_DVB_T] = { 4231da177e4SLinus Torvalds .name = "KWorld/VStream XPert DVB-T", 424c39ba330SHans Verkuil .tuner_type = UNSET, 425b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 426b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 427b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 4281da177e4SLinus Torvalds .input = { { 4291da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 4301da177e4SLinus Torvalds .vmux = 1, 4311da177e4SLinus Torvalds .gpio0 = 0x0700, 4321da177e4SLinus Torvalds .gpio2 = 0x0101, 4331da177e4SLinus Torvalds }, { 4341da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 4351da177e4SLinus Torvalds .vmux = 2, 4361da177e4SLinus Torvalds .gpio0 = 0x0700, 4371da177e4SLinus Torvalds .gpio2 = 0x0101, 4381da177e4SLinus Torvalds } }, 43948d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 4401da177e4SLinus Torvalds }, 4411da177e4SLinus Torvalds [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1] = { 442a82decf6SMauro Carvalho Chehab .name = "DViCO FusionHDTV DVB-T1", 443c39ba330SHans Verkuil .tuner_type = UNSET, /* No analog tuner */ 444b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 445b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 446b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 4471da177e4SLinus Torvalds .input = { { 4481da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 4491da177e4SLinus Torvalds .vmux = 1, 4501da177e4SLinus Torvalds .gpio0 = 0x000027df, 4511da177e4SLinus Torvalds }, { 4521da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 4531da177e4SLinus Torvalds .vmux = 2, 4541da177e4SLinus Torvalds .gpio0 = 0x000027df, 4551da177e4SLinus Torvalds } }, 45648d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 4571da177e4SLinus Torvalds }, 4581da177e4SLinus Torvalds [CX88_BOARD_KWORLD_LTV883] = { 4591da177e4SLinus Torvalds .name = "KWorld LTV883RF", 460b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_TNF_8831BGFF, 461b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 462b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 463b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 4641da177e4SLinus Torvalds .input = { { 4651da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 4661da177e4SLinus Torvalds .vmux = 0, 4671da177e4SLinus Torvalds .gpio0 = 0x07f8, 4681da177e4SLinus Torvalds }, { 4691da177e4SLinus Torvalds .type = CX88_VMUX_DEBUG, 4701da177e4SLinus Torvalds .vmux = 0, 4711da177e4SLinus Torvalds .gpio0 = 0x07f9, // mono from tuner chip 4721da177e4SLinus Torvalds }, { 4731da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 4741da177e4SLinus Torvalds .vmux = 1, 4751da177e4SLinus Torvalds .gpio0 = 0x000007fa, 4761da177e4SLinus Torvalds }, { 4771da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 4781da177e4SLinus Torvalds .vmux = 2, 4791da177e4SLinus Torvalds .gpio0 = 0x000007fa, 4801da177e4SLinus Torvalds } }, 4811da177e4SLinus Torvalds .radio = { 4821da177e4SLinus Torvalds .type = CX88_RADIO, 4831da177e4SLinus Torvalds .gpio0 = 0x000007f8, 4841da177e4SLinus Torvalds }, 4851da177e4SLinus Torvalds }, 486a82decf6SMauro Carvalho Chehab [CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q] = { 487a82decf6SMauro Carvalho Chehab .name = "DViCO FusionHDTV 3 Gold-Q", 4881da177e4SLinus Torvalds .tuner_type = TUNER_MICROTUNE_4042FI5, 489b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 490b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 491b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 4921da177e4SLinus Torvalds /* 493399426caSMauro Carvalho Chehab * GPIO[0] resets DT3302 DTV receiver 494399426caSMauro Carvalho Chehab * 0 - reset asserted 495399426caSMauro Carvalho Chehab * 1 - normal operation 496399426caSMauro Carvalho Chehab * GPIO[1] mutes analog audio output connector 497399426caSMauro Carvalho Chehab * 0 - enable selected source 498399426caSMauro Carvalho Chehab * 1 - mute 499399426caSMauro Carvalho Chehab * GPIO[2] selects source for analog audio output connector 500399426caSMauro Carvalho Chehab * 0 - analog audio input connector on tab 501399426caSMauro Carvalho Chehab * 1 - analog DAC output from CX23881 chip 502399426caSMauro Carvalho Chehab * GPIO[3] selects RF input connector on tuner module 503399426caSMauro Carvalho Chehab * 0 - RF connector labeled CABLE 504399426caSMauro Carvalho Chehab * 1 - RF connector labeled ANT 505399426caSMauro Carvalho Chehab * GPIO[4] selects high RF for QAM256 mode 506399426caSMauro Carvalho Chehab * 0 - normal RF 507399426caSMauro Carvalho Chehab * 1 - high RF 5081da177e4SLinus Torvalds */ 5091da177e4SLinus Torvalds .input = { { 5101da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 5111da177e4SLinus Torvalds .vmux = 0, 5121da177e4SLinus Torvalds .gpio0 = 0x0f0d, 5131da177e4SLinus Torvalds }, { 5141da177e4SLinus Torvalds .type = CX88_VMUX_CABLE, 5151da177e4SLinus Torvalds .vmux = 0, 5161da177e4SLinus Torvalds .gpio0 = 0x0f05, 5171da177e4SLinus Torvalds }, { 5181da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 5191da177e4SLinus Torvalds .vmux = 1, 5201da177e4SLinus Torvalds .gpio0 = 0x0f00, 5211da177e4SLinus Torvalds }, { 5221da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 5231da177e4SLinus Torvalds .vmux = 2, 5241da177e4SLinus Torvalds .gpio0 = 0x0f00, 5251da177e4SLinus Torvalds } }, 52648d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 5271da177e4SLinus Torvalds }, 5281da177e4SLinus Torvalds [CX88_BOARD_HAUPPAUGE_DVB_T1] = { 5291da177e4SLinus Torvalds .name = "Hauppauge Nova-T DVB-T", 530c39ba330SHans Verkuil .tuner_type = UNSET, 531b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 532b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 533b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 5341da177e4SLinus Torvalds .input = { { 5351da177e4SLinus Torvalds .type = CX88_VMUX_DVB, 5361da177e4SLinus Torvalds .vmux = 0, 5371da177e4SLinus Torvalds } }, 53848d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 5391da177e4SLinus Torvalds }, 5401da177e4SLinus Torvalds [CX88_BOARD_CONEXANT_DVB_T1] = { 5411da177e4SLinus Torvalds .name = "Conexant DVB-T reference design", 542c39ba330SHans Verkuil .tuner_type = UNSET, 543b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 544b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 545b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 5461da177e4SLinus Torvalds .input = { { 5471da177e4SLinus Torvalds .type = CX88_VMUX_DVB, 5481da177e4SLinus Torvalds .vmux = 0, 5491da177e4SLinus Torvalds } }, 55048d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 5511da177e4SLinus Torvalds }, 5521da177e4SLinus Torvalds [CX88_BOARD_PROVIDEO_PV259] = { 5531da177e4SLinus Torvalds .name = "Provideo PV259", 5541da177e4SLinus Torvalds .tuner_type = TUNER_PHILIPS_FQ1216ME, 555b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 556b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 557b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 5581da177e4SLinus Torvalds .input = { { 5591da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 5601da177e4SLinus Torvalds .vmux = 0, 5617b27d45bSRicardo Cerqueira .audioroute = 1, 5621da177e4SLinus Torvalds } }, 56348d5e803SMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD, 5641da177e4SLinus Torvalds }, 5651da177e4SLinus Torvalds [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS] = { 566a82decf6SMauro Carvalho Chehab .name = "DViCO FusionHDTV DVB-T Plus", 567c39ba330SHans Verkuil .tuner_type = UNSET, /* No analog tuner */ 568b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 569b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 570b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 5711da177e4SLinus Torvalds .input = { { 5721da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 5731da177e4SLinus Torvalds .vmux = 1, 5741da177e4SLinus Torvalds .gpio0 = 0x000027df, 5751da177e4SLinus Torvalds }, { 5761da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 5771da177e4SLinus Torvalds .vmux = 2, 5781da177e4SLinus Torvalds .gpio0 = 0x000027df, 5791da177e4SLinus Torvalds } }, 58048d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 5811da177e4SLinus Torvalds }, 5821da177e4SLinus Torvalds [CX88_BOARD_DNTV_LIVE_DVB_T] = { 5831da177e4SLinus Torvalds .name = "digitalnow DNTV Live! DVB-T", 584c39ba330SHans Verkuil .tuner_type = UNSET, 585b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 586b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 587b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 5881da177e4SLinus Torvalds .input = { { 5891da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 5901da177e4SLinus Torvalds .vmux = 1, 5911da177e4SLinus Torvalds .gpio0 = 0x00000700, 5921da177e4SLinus Torvalds .gpio2 = 0x00000101, 5931da177e4SLinus Torvalds }, { 5941da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 5951da177e4SLinus Torvalds .vmux = 2, 5961da177e4SLinus Torvalds .gpio0 = 0x00000700, 5971da177e4SLinus Torvalds .gpio2 = 0x00000101, 5981da177e4SLinus Torvalds } }, 59948d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 6001da177e4SLinus Torvalds }, 6011da177e4SLinus Torvalds [CX88_BOARD_PCHDTV_HD3000] = { 6021da177e4SLinus Torvalds .name = "pcHDTV HD3000 HDTV", 6039175b854STrent Piepho .tuner_type = TUNER_THOMSON_DTT761X, 604b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 605b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 606b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 607e4f5c82aSMauro Carvalho Chehab .tda9887_conf = TDA9887_PRESENT, 60819dc74b7STrent Piepho /* GPIO[2] = audio source for analog audio out connector 60919dc74b7STrent Piepho * 0 = analog audio input connector 61019dc74b7STrent Piepho * 1 = CX88 audio DACs 61119dc74b7STrent Piepho * 61219dc74b7STrent Piepho * GPIO[7] = input to CX88's audio/chroma ADC 61319dc74b7STrent Piepho * 0 = FM 10.7 MHz IF 61419dc74b7STrent Piepho * 1 = Sound 4.5 MHz IF 61519dc74b7STrent Piepho * 61619dc74b7STrent Piepho * GPIO[1,5,6] = Oren 51132 pins 27,35,28 respectively 61719dc74b7STrent Piepho * 61819dc74b7STrent Piepho * GPIO[16] = Remote control input 61919dc74b7STrent Piepho */ 6201da177e4SLinus Torvalds .input = { { 6211da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 6221da177e4SLinus Torvalds .vmux = 0, 6231da177e4SLinus Torvalds .gpio0 = 0x00008484, 6241da177e4SLinus Torvalds }, { 6251da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 6261da177e4SLinus Torvalds .vmux = 1, 6271da177e4SLinus Torvalds .gpio0 = 0x00008400, 6281da177e4SLinus Torvalds }, { 6291da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 6301da177e4SLinus Torvalds .vmux = 2, 6311da177e4SLinus Torvalds .gpio0 = 0x00008400, 6321da177e4SLinus Torvalds } }, 6331da177e4SLinus Torvalds .radio = { 6341da177e4SLinus Torvalds .type = CX88_RADIO, 63519dc74b7STrent Piepho .gpio0 = 0x00008404, 6361da177e4SLinus Torvalds }, 63748d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 6381da177e4SLinus Torvalds }, 6391da177e4SLinus Torvalds [CX88_BOARD_HAUPPAUGE_ROSLYN] = { 6401da177e4SLinus Torvalds // entry added by Kaustubh D. Bhalerao <bhalerao.1@osu.edu> 6411da177e4SLinus Torvalds // GPIO values obtained from regspy, courtesy Sean Covel 6421da177e4SLinus Torvalds .name = "Hauppauge WinTV 28xxx (Roslyn) models", 6431da177e4SLinus Torvalds .tuner_type = UNSET, 644b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 645b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 646b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 6471da177e4SLinus Torvalds .input = { { 6481da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 6491da177e4SLinus Torvalds .vmux = 0, 6500345c387SSteven Toth .gpio0 = 0xed1a, 6511da177e4SLinus Torvalds .gpio2 = 0x00ff, 6521da177e4SLinus Torvalds }, { 6531da177e4SLinus Torvalds .type = CX88_VMUX_DEBUG, 6541da177e4SLinus Torvalds .vmux = 0, 6550345c387SSteven Toth .gpio0 = 0xff01, 6561da177e4SLinus Torvalds }, { 6571da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 6581da177e4SLinus Torvalds .vmux = 1, 6591da177e4SLinus Torvalds .gpio0 = 0xff02, 6601da177e4SLinus Torvalds }, { 6611da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 6621da177e4SLinus Torvalds .vmux = 2, 6631da177e4SLinus Torvalds .gpio0 = 0xed92, 6641da177e4SLinus Torvalds .gpio2 = 0x00ff, 6651da177e4SLinus Torvalds } }, 6661da177e4SLinus Torvalds .radio = { 6671da177e4SLinus Torvalds .type = CX88_RADIO, 6681da177e4SLinus Torvalds .gpio0 = 0xed96, 6691da177e4SLinus Torvalds .gpio2 = 0x00ff, 6701da177e4SLinus Torvalds }, 67148d5e803SMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD, 6721da177e4SLinus Torvalds }, 6731da177e4SLinus Torvalds [CX88_BOARD_DIGITALLOGIC_MEC] = { 6741da177e4SLinus Torvalds .name = "Digital-Logic MICROSPACE Entertainment Center (MEC)", 675b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 676b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 677b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 678b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 6791da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT, 6801da177e4SLinus Torvalds .input = { { 6811da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 6821da177e4SLinus Torvalds .vmux = 0, 683b45009b0SMauro Carvalho Chehab .gpio0 = 0x00009d80, 6847b27d45bSRicardo Cerqueira .audioroute = 1, 6851da177e4SLinus Torvalds }, { 6861da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 6871da177e4SLinus Torvalds .vmux = 1, 688b45009b0SMauro Carvalho Chehab .gpio0 = 0x00009d76, 6897b27d45bSRicardo Cerqueira .audioroute = 1, 6901da177e4SLinus Torvalds }, { 6911da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 6921da177e4SLinus Torvalds .vmux = 2, 693b45009b0SMauro Carvalho Chehab .gpio0 = 0x00009d76, 6947b27d45bSRicardo Cerqueira .audioroute = 1, 6951da177e4SLinus Torvalds } }, 6961da177e4SLinus Torvalds .radio = { 6971da177e4SLinus Torvalds .type = CX88_RADIO, 698b45009b0SMauro Carvalho Chehab .gpio0 = 0x00009d00, 6997b27d45bSRicardo Cerqueira .audioroute = 1, 7001da177e4SLinus Torvalds }, 70148d5e803SMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD, 7021da177e4SLinus Torvalds }, 7031da177e4SLinus Torvalds [CX88_BOARD_IODATA_GVBCTV7E] = { 7041da177e4SLinus Torvalds .name = "IODATA GV/BCTV7E", 7051da177e4SLinus Torvalds .tuner_type = TUNER_PHILIPS_FQ1286, 706b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 707b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 708b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 7091da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT, 7101da177e4SLinus Torvalds .input = { { 7111da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 7121da177e4SLinus Torvalds .vmux = 1, 7131da177e4SLinus Torvalds .gpio1 = 0x0000e03f, 7141da177e4SLinus Torvalds }, { 7151da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 7161da177e4SLinus Torvalds .vmux = 2, 7171da177e4SLinus Torvalds .gpio1 = 0x0000e07f, 7181da177e4SLinus Torvalds }, { 7191da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 7201da177e4SLinus Torvalds .vmux = 3, 7211da177e4SLinus Torvalds .gpio1 = 0x0000e07f, 7221da177e4SLinus Torvalds } } 7231da177e4SLinus Torvalds }, 724239df2e2SManuel Capinha [CX88_BOARD_PIXELVIEW_PLAYTV_ULTRA_PRO] = { 725239df2e2SManuel Capinha .name = "PixelView PlayTV Ultra Pro (Stereo)", 726b45009b0SMauro Carvalho Chehab /* May be also TUNER_YMEC_TVF_5533MF for NTSC/M or PAL/M */ 727b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 728c5287ba1SMauro Carvalho Chehab .radio_type = UNSET, 729c5287ba1SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 730c5287ba1SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 731399426caSMauro Carvalho Chehab /* 732399426caSMauro Carvalho Chehab * Some variants use a tda9874 and so need the 733399426caSMauro Carvalho Chehab * tvaudio module. 734399426caSMauro Carvalho Chehab */ 735facd2366SHans Verkuil .audio_chip = CX88_AUDIO_TVAUDIO, 736239df2e2SManuel Capinha .input = { { 737239df2e2SManuel Capinha .type = CX88_VMUX_TELEVISION, 738239df2e2SManuel Capinha .vmux = 0, 739b45009b0SMauro Carvalho Chehab .gpio0 = 0xbf61, /* internal decoder */ 740239df2e2SManuel Capinha }, { 741239df2e2SManuel Capinha .type = CX88_VMUX_COMPOSITE1, 742239df2e2SManuel Capinha .vmux = 1, 743239df2e2SManuel Capinha .gpio0 = 0xbf63, 744239df2e2SManuel Capinha }, { 745239df2e2SManuel Capinha .type = CX88_VMUX_SVIDEO, 746239df2e2SManuel Capinha .vmux = 2, 747239df2e2SManuel Capinha .gpio0 = 0xbf63, 748239df2e2SManuel Capinha } }, 749239df2e2SManuel Capinha .radio = { 750239df2e2SManuel Capinha .type = CX88_RADIO, 751239df2e2SManuel Capinha .gpio0 = 0xbf60, 752239df2e2SManuel Capinha }, 753239df2e2SManuel Capinha }, 754b45009b0SMauro Carvalho Chehab [CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_T] = { 755a82decf6SMauro Carvalho Chehab .name = "DViCO FusionHDTV 3 Gold-T", 75683ac8722SMichael Krufky .tuner_type = TUNER_THOMSON_DTT761X, 757b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 758b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 759b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 760e4f5c82aSMauro Carvalho Chehab .tda9887_conf = TDA9887_PRESENT, 761b45009b0SMauro Carvalho Chehab .input = { { 762b45009b0SMauro Carvalho Chehab .type = CX88_VMUX_TELEVISION, 763b45009b0SMauro Carvalho Chehab .vmux = 0, 764e52e98a7SMauro Carvalho Chehab .gpio0 = 0x97ed, 765b45009b0SMauro Carvalho Chehab }, { 766b45009b0SMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1, 767b45009b0SMauro Carvalho Chehab .vmux = 1, 768e52e98a7SMauro Carvalho Chehab .gpio0 = 0x97e9, 769b45009b0SMauro Carvalho Chehab }, { 770b45009b0SMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO, 771b45009b0SMauro Carvalho Chehab .vmux = 2, 772e52e98a7SMauro Carvalho Chehab .gpio0 = 0x97e9, 773b45009b0SMauro Carvalho Chehab } }, 77448d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 775b45009b0SMauro Carvalho Chehab }, 776a82decf6SMauro Carvalho Chehab [CX88_BOARD_ADSTECH_DVB_T_PCI] = { 777a82decf6SMauro Carvalho Chehab .name = "ADS Tech Instant TV DVB-T PCI", 778c39ba330SHans Verkuil .tuner_type = UNSET, 779a82decf6SMauro Carvalho Chehab .radio_type = UNSET, 780a82decf6SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 781a82decf6SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 782a82decf6SMauro Carvalho Chehab .input = { { 783a82decf6SMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1, 784a82decf6SMauro Carvalho Chehab .vmux = 1, 785a82decf6SMauro Carvalho Chehab .gpio0 = 0x0700, 786a82decf6SMauro Carvalho Chehab .gpio2 = 0x0101, 787a82decf6SMauro Carvalho Chehab }, { 788a82decf6SMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO, 789a82decf6SMauro Carvalho Chehab .vmux = 2, 790a82decf6SMauro Carvalho Chehab .gpio0 = 0x0700, 791a82decf6SMauro Carvalho Chehab .gpio2 = 0x0101, 792a82decf6SMauro Carvalho Chehab } }, 79348d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 794a82decf6SMauro Carvalho Chehab }, 795e057ee11SMichael Krufky [CX88_BOARD_TERRATEC_CINERGY_1400_DVB_T1] = { 796e057ee11SMichael Krufky .name = "TerraTec Cinergy 1400 DVB-T", 797c39ba330SHans Verkuil .tuner_type = UNSET, 798e057ee11SMichael Krufky .input = { { 799e057ee11SMichael Krufky .type = CX88_VMUX_DVB, 800e057ee11SMichael Krufky .vmux = 0, 80105eda249SHeiko Baums }, { 80205eda249SHeiko Baums .type = CX88_VMUX_COMPOSITE1, 80305eda249SHeiko Baums .vmux = 2, 80405eda249SHeiko Baums }, { 80505eda249SHeiko Baums .type = CX88_VMUX_SVIDEO, 80605eda249SHeiko Baums .vmux = 2, 807e057ee11SMichael Krufky } }, 80848d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 809e057ee11SMichael Krufky }, 8109fef07caSMichael Krufky [CX88_BOARD_DVICO_FUSIONHDTV_5_GOLD] = { 8119fef07caSMichael Krufky .name = "DViCO FusionHDTV 5 Gold", 8129c26c8b1SMichael Krufky .tuner_type = TUNER_LG_TDVS_H06XF, /* TDVS-H062F */ 8139fef07caSMichael Krufky .radio_type = UNSET, 8149fef07caSMichael Krufky .tuner_addr = ADDR_UNSET, 8159fef07caSMichael Krufky .radio_addr = ADDR_UNSET, 816e52e98a7SMauro Carvalho Chehab .tda9887_conf = TDA9887_PRESENT, 8179fef07caSMichael Krufky .input = { { 8189fef07caSMichael Krufky .type = CX88_VMUX_TELEVISION, 8199fef07caSMichael Krufky .vmux = 0, 820e52e98a7SMauro Carvalho Chehab .gpio0 = 0x87fd, 8219fef07caSMichael Krufky }, { 8229fef07caSMichael Krufky .type = CX88_VMUX_COMPOSITE1, 8239fef07caSMichael Krufky .vmux = 1, 824e52e98a7SMauro Carvalho Chehab .gpio0 = 0x87f9, 8259fef07caSMichael Krufky }, { 8269fef07caSMichael Krufky .type = CX88_VMUX_SVIDEO, 8279fef07caSMichael Krufky .vmux = 2, 828e52e98a7SMauro Carvalho Chehab .gpio0 = 0x87f9, 8299fef07caSMichael Krufky } }, 83048d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 8319fef07caSMichael Krufky }, 832d45170edSNickolay V. Shmyrev [CX88_BOARD_AVERMEDIA_ULTRATV_MC_550] = { 833d45170edSNickolay V. Shmyrev .name = "AverMedia UltraTV Media Center PCI 550", 834d45170edSNickolay V. Shmyrev .tuner_type = TUNER_PHILIPS_FM1236_MK3, 835d45170edSNickolay V. Shmyrev .radio_type = UNSET, 836d45170edSNickolay V. Shmyrev .tuner_addr = ADDR_UNSET, 837d45170edSNickolay V. Shmyrev .radio_addr = ADDR_UNSET, 838d45170edSNickolay V. Shmyrev .tda9887_conf = TDA9887_PRESENT, 839d45170edSNickolay V. Shmyrev .input = { { 840d45170edSNickolay V. Shmyrev .type = CX88_VMUX_COMPOSITE1, 841d45170edSNickolay V. Shmyrev .vmux = 0, 842d45170edSNickolay V. Shmyrev .gpio0 = 0x0000cd73, 8437b27d45bSRicardo Cerqueira .audioroute = 1, 844d45170edSNickolay V. Shmyrev }, { 845d45170edSNickolay V. Shmyrev .type = CX88_VMUX_SVIDEO, 846d45170edSNickolay V. Shmyrev .vmux = 1, 847d45170edSNickolay V. Shmyrev .gpio0 = 0x0000cd73, 8487b27d45bSRicardo Cerqueira .audioroute = 1, 849d45170edSNickolay V. Shmyrev }, { 850d45170edSNickolay V. Shmyrev .type = CX88_VMUX_TELEVISION, 851d45170edSNickolay V. Shmyrev .vmux = 3, 852d45170edSNickolay V. Shmyrev .gpio0 = 0x0000cdb3, 8537b27d45bSRicardo Cerqueira .audioroute = 1, 854d45170edSNickolay V. Shmyrev } }, 855d45170edSNickolay V. Shmyrev .radio = { 856d45170edSNickolay V. Shmyrev .type = CX88_RADIO, 857d45170edSNickolay V. Shmyrev .vmux = 2, 858d45170edSNickolay V. Shmyrev .gpio0 = 0x0000cdf3, 8597b27d45bSRicardo Cerqueira .audioroute = 1, 860d45170edSNickolay V. Shmyrev }, 8615b26c82fSMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD, 862d45170edSNickolay V. Shmyrev }, 8630bcc37c3SAlexander Wold [CX88_BOARD_KWORLD_VSTREAM_EXPERT_DVD] = { 8640bcc37c3SAlexander Wold /* Alexander Wold <awold@bigfoot.com> */ 8650bcc37c3SAlexander Wold .name = "Kworld V-Stream Xpert DVD", 8660bcc37c3SAlexander Wold .tuner_type = UNSET, 8670bcc37c3SAlexander Wold .input = { { 8680bcc37c3SAlexander Wold .type = CX88_VMUX_COMPOSITE1, 8690bcc37c3SAlexander Wold .vmux = 1, 8700bcc37c3SAlexander Wold .gpio0 = 0x03000000, 8710bcc37c3SAlexander Wold .gpio1 = 0x01000000, 8720bcc37c3SAlexander Wold .gpio2 = 0x02000000, 8730bcc37c3SAlexander Wold .gpio3 = 0x00100000, 8740bcc37c3SAlexander Wold }, { 8750bcc37c3SAlexander Wold .type = CX88_VMUX_SVIDEO, 8760bcc37c3SAlexander Wold .vmux = 2, 8770bcc37c3SAlexander Wold .gpio0 = 0x03000000, 8780bcc37c3SAlexander Wold .gpio1 = 0x01000000, 8790bcc37c3SAlexander Wold .gpio2 = 0x02000000, 8800bcc37c3SAlexander Wold .gpio3 = 0x00100000, 8810bcc37c3SAlexander Wold } }, 8820bcc37c3SAlexander Wold }, 883e976f937SKirk Lapray [CX88_BOARD_ATI_HDTVWONDER] = { 884e976f937SKirk Lapray .name = "ATI HDTV Wonder", 885e976f937SKirk Lapray .tuner_type = TUNER_PHILIPS_TUV1236D, 886e976f937SKirk Lapray .radio_type = UNSET, 887e976f937SKirk Lapray .tuner_addr = ADDR_UNSET, 888e976f937SKirk Lapray .radio_addr = ADDR_UNSET, 889e976f937SKirk Lapray .input = { { 890e976f937SKirk Lapray .type = CX88_VMUX_TELEVISION, 891e976f937SKirk Lapray .vmux = 0, 892e976f937SKirk Lapray .gpio0 = 0x00000ff7, 893e976f937SKirk Lapray .gpio1 = 0x000000ff, 894e976f937SKirk Lapray .gpio2 = 0x00000001, 895e976f937SKirk Lapray .gpio3 = 0x00000000, 896e976f937SKirk Lapray }, { 897e976f937SKirk Lapray .type = CX88_VMUX_COMPOSITE1, 898e976f937SKirk Lapray .vmux = 1, 899e976f937SKirk Lapray .gpio0 = 0x00000ffe, 900e976f937SKirk Lapray .gpio1 = 0x000000ff, 901e976f937SKirk Lapray .gpio2 = 0x00000001, 902e976f937SKirk Lapray .gpio3 = 0x00000000, 903e976f937SKirk Lapray }, { 904e976f937SKirk Lapray .type = CX88_VMUX_SVIDEO, 905e976f937SKirk Lapray .vmux = 2, 906e976f937SKirk Lapray .gpio0 = 0x00000ffe, 907e976f937SKirk Lapray .gpio1 = 0x000000ff, 908e976f937SKirk Lapray .gpio2 = 0x00000001, 909e976f937SKirk Lapray .gpio3 = 0x00000000, 910e976f937SKirk Lapray } }, 91148d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 912e976f937SKirk Lapray }, 9132b5200a7SDavid Shirley [CX88_BOARD_WINFAST_DTV1000] = { 9142b5200a7SDavid Shirley .name = "WinFast DTV1000-T", 915c39ba330SHans Verkuil .tuner_type = UNSET, 9162b5200a7SDavid Shirley .radio_type = UNSET, 9172b5200a7SDavid Shirley .tuner_addr = ADDR_UNSET, 9182b5200a7SDavid Shirley .radio_addr = ADDR_UNSET, 9192b5200a7SDavid Shirley .input = { { 9202b5200a7SDavid Shirley .type = CX88_VMUX_DVB, 9212b5200a7SDavid Shirley .vmux = 0, 922e8f4e752SJean Delvare }, { 923e8f4e752SJean Delvare .type = CX88_VMUX_COMPOSITE1, 924e8f4e752SJean Delvare .vmux = 1, 925e8f4e752SJean Delvare }, { 926e8f4e752SJean Delvare .type = CX88_VMUX_SVIDEO, 927e8f4e752SJean Delvare .vmux = 2, 9282b5200a7SDavid Shirley } }, 92948d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 9302b5200a7SDavid Shirley }, 9317418f346SLubomir Bulej [CX88_BOARD_AVERTV_303] = { 9327418f346SLubomir Bulej .name = "AVerTV 303 (M126)", 9337418f346SLubomir Bulej .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 9347418f346SLubomir Bulej .radio_type = UNSET, 9357418f346SLubomir Bulej .tuner_addr = ADDR_UNSET, 9367418f346SLubomir Bulej .radio_addr = ADDR_UNSET, 9377418f346SLubomir Bulej .tda9887_conf = TDA9887_PRESENT, 9387418f346SLubomir Bulej .input = { { 9397418f346SLubomir Bulej .type = CX88_VMUX_TELEVISION, 9407418f346SLubomir Bulej .vmux = 0, 9417418f346SLubomir Bulej .gpio0 = 0x00ff, 9427418f346SLubomir Bulej .gpio1 = 0xe09f, 9437418f346SLubomir Bulej .gpio2 = 0x0010, 9447418f346SLubomir Bulej .gpio3 = 0x0000, 9457418f346SLubomir Bulej }, { 9467418f346SLubomir Bulej .type = CX88_VMUX_COMPOSITE1, 9477418f346SLubomir Bulej .vmux = 1, 9487418f346SLubomir Bulej .gpio0 = 0x00ff, 9497418f346SLubomir Bulej .gpio1 = 0xe05f, 9507418f346SLubomir Bulej .gpio2 = 0x0010, 9517418f346SLubomir Bulej .gpio3 = 0x0000, 9527418f346SLubomir Bulej }, { 9537418f346SLubomir Bulej .type = CX88_VMUX_SVIDEO, 9547418f346SLubomir Bulej .vmux = 2, 9557418f346SLubomir Bulej .gpio0 = 0x00ff, 9567418f346SLubomir Bulej .gpio1 = 0xe05f, 9577418f346SLubomir Bulej .gpio2 = 0x0010, 9587418f346SLubomir Bulej .gpio3 = 0x0000, 9597418f346SLubomir Bulej } }, 9607418f346SLubomir Bulej }, 9610fa14aa6SSteven Toth [CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1] = { 9620fa14aa6SSteven Toth .name = "Hauppauge Nova-S-Plus DVB-S", 963c39ba330SHans Verkuil .tuner_type = UNSET, 9640fa14aa6SSteven Toth .radio_type = UNSET, 9650fa14aa6SSteven Toth .tuner_addr = ADDR_UNSET, 9660fa14aa6SSteven Toth .radio_addr = ADDR_UNSET, 967facd2366SHans Verkuil .audio_chip = CX88_AUDIO_WM8775, 9686951803cSLawrence Rust .i2sinputcntl = 2, 9690fa14aa6SSteven Toth .input = { { 9700fa14aa6SSteven Toth .type = CX88_VMUX_DVB, 9710fa14aa6SSteven Toth .vmux = 0, 972fcb97573Slawrence rust /* 2: Line-In */ 973fcb97573Slawrence rust .audioroute = 2, 9740fa14aa6SSteven Toth }, { 9750fa14aa6SSteven Toth .type = CX88_VMUX_COMPOSITE1, 9760fa14aa6SSteven Toth .vmux = 1, 977fcb97573Slawrence rust /* 2: Line-In */ 978fcb97573Slawrence rust .audioroute = 2, 9790fa14aa6SSteven Toth }, { 9800fa14aa6SSteven Toth .type = CX88_VMUX_SVIDEO, 9810fa14aa6SSteven Toth .vmux = 2, 982fcb97573Slawrence rust /* 2: Line-In */ 983fcb97573Slawrence rust .audioroute = 2, 9840fa14aa6SSteven Toth } }, 98548d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 9860fa14aa6SSteven Toth }, 9870fa14aa6SSteven Toth [CX88_BOARD_HAUPPAUGE_NOVASE2_S1] = { 9880fa14aa6SSteven Toth .name = "Hauppauge Nova-SE2 DVB-S", 989c39ba330SHans Verkuil .tuner_type = UNSET, 9900fa14aa6SSteven Toth .radio_type = UNSET, 9910fa14aa6SSteven Toth .tuner_addr = ADDR_UNSET, 9920fa14aa6SSteven Toth .radio_addr = ADDR_UNSET, 9930fa14aa6SSteven Toth .input = { { 9940fa14aa6SSteven Toth .type = CX88_VMUX_DVB, 9950fa14aa6SSteven Toth .vmux = 0, 9960fa14aa6SSteven Toth } }, 99748d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 9980fa14aa6SSteven Toth }, 9990e0351e3SVadim Catana [CX88_BOARD_KWORLD_DVBS_100] = { 10000e0351e3SVadim Catana .name = "KWorld DVB-S 100", 1001c39ba330SHans Verkuil .tuner_type = UNSET, 10020e0351e3SVadim Catana .radio_type = UNSET, 10030e0351e3SVadim Catana .tuner_addr = ADDR_UNSET, 10040e0351e3SVadim Catana .radio_addr = ADDR_UNSET, 1005facd2366SHans Verkuil .audio_chip = CX88_AUDIO_WM8775, 10060e0351e3SVadim Catana .input = { { 10070e0351e3SVadim Catana .type = CX88_VMUX_DVB, 10080e0351e3SVadim Catana .vmux = 0, 100946e67acdSMauro Carvalho Chehab /* 2: Line-In */ 101046e67acdSMauro Carvalho Chehab .audioroute = 2, 10110e0351e3SVadim Catana }, { 10120e0351e3SVadim Catana .type = CX88_VMUX_COMPOSITE1, 10130e0351e3SVadim Catana .vmux = 1, 101446e67acdSMauro Carvalho Chehab /* 2: Line-In */ 101546e67acdSMauro Carvalho Chehab .audioroute = 2, 10160e0351e3SVadim Catana }, { 10170e0351e3SVadim Catana .type = CX88_VMUX_SVIDEO, 10180e0351e3SVadim Catana .vmux = 2, 101946e67acdSMauro Carvalho Chehab /* 2: Line-In */ 102046e67acdSMauro Carvalho Chehab .audioroute = 2, 10210e0351e3SVadim Catana } }, 102248d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 10230e0351e3SVadim Catana }, 1024611900c1SSteven Toth [CX88_BOARD_HAUPPAUGE_HVR1100] = { 1025611900c1SSteven Toth .name = "Hauppauge WinTV-HVR1100 DVB-T/Hybrid", 1026611900c1SSteven Toth .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, 1027611900c1SSteven Toth .radio_type = UNSET, 1028611900c1SSteven Toth .tuner_addr = ADDR_UNSET, 1029611900c1SSteven Toth .radio_addr = ADDR_UNSET, 1030611900c1SSteven Toth .tda9887_conf = TDA9887_PRESENT, 1031611900c1SSteven Toth .input = { { 1032611900c1SSteven Toth .type = CX88_VMUX_TELEVISION, 1033611900c1SSteven Toth .vmux = 0, 1034611900c1SSteven Toth }, { 1035611900c1SSteven Toth .type = CX88_VMUX_COMPOSITE1, 1036611900c1SSteven Toth .vmux = 1, 1037611900c1SSteven Toth }, { 1038611900c1SSteven Toth .type = CX88_VMUX_SVIDEO, 1039611900c1SSteven Toth .vmux = 2, 1040611900c1SSteven Toth } }, 1041611900c1SSteven Toth /* fixme: Add radio support */ 104248d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 1043611900c1SSteven Toth }, 1044611900c1SSteven Toth [CX88_BOARD_HAUPPAUGE_HVR1100LP] = { 1045611900c1SSteven Toth .name = "Hauppauge WinTV-HVR1100 DVB-T/Hybrid (Low Profile)", 1046611900c1SSteven Toth .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, 1047611900c1SSteven Toth .radio_type = UNSET, 1048611900c1SSteven Toth .tuner_addr = ADDR_UNSET, 1049611900c1SSteven Toth .radio_addr = ADDR_UNSET, 1050611900c1SSteven Toth .tda9887_conf = TDA9887_PRESENT, 1051611900c1SSteven Toth .input = { { 1052611900c1SSteven Toth .type = CX88_VMUX_TELEVISION, 1053611900c1SSteven Toth .vmux = 0, 1054611900c1SSteven Toth }, { 1055611900c1SSteven Toth .type = CX88_VMUX_COMPOSITE1, 1056611900c1SSteven Toth .vmux = 1, 1057611900c1SSteven Toth } }, 1058611900c1SSteven Toth /* fixme: Add radio support */ 105948d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 1060611900c1SSteven Toth }, 1061fc40b261SChris Pascoe [CX88_BOARD_DNTV_LIVE_DVB_T_PRO] = { 1062fc40b261SChris Pascoe .name = "digitalnow DNTV Live! DVB-T Pro", 1063fc40b261SChris Pascoe .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, 1064fc40b261SChris Pascoe .radio_type = UNSET, 1065fc40b261SChris Pascoe .tuner_addr = ADDR_UNSET, 1066fc40b261SChris Pascoe .radio_addr = ADDR_UNSET, 1067fc40b261SChris Pascoe .tda9887_conf = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE | 1068fc40b261SChris Pascoe TDA9887_PORT2_ACTIVE, 1069fc40b261SChris Pascoe .input = { { 1070fc40b261SChris Pascoe .type = CX88_VMUX_TELEVISION, 1071fc40b261SChris Pascoe .vmux = 0, 1072fc40b261SChris Pascoe .gpio0 = 0xf80808, 1073fc40b261SChris Pascoe }, { 1074fc40b261SChris Pascoe .type = CX88_VMUX_COMPOSITE1, 1075fc40b261SChris Pascoe .vmux = 1, 1076fc40b261SChris Pascoe .gpio0 = 0xf80808, 1077fc40b261SChris Pascoe }, { 1078fc40b261SChris Pascoe .type = CX88_VMUX_SVIDEO, 1079fc40b261SChris Pascoe .vmux = 2, 1080fc40b261SChris Pascoe .gpio0 = 0xf80808, 1081fc40b261SChris Pascoe } }, 1082fc40b261SChris Pascoe .radio = { 1083fc40b261SChris Pascoe .type = CX88_RADIO, 1084fc40b261SChris Pascoe .gpio0 = 0xf80808, 1085fc40b261SChris Pascoe }, 108648d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 1087fc40b261SChris Pascoe }, 1088f39624fdSManenti Marco [CX88_BOARD_KWORLD_DVB_T_CX22702] = { 1089f39624fdSManenti Marco /* Kworld V-stream Xpert DVB-T with Thomson tuner */ 1090f39624fdSManenti Marco /* DTT 7579 Conexant CX22702-19 Conexant CX2388x */ 1091f39624fdSManenti Marco /* Manenti Marco <marco_manenti@colman.it> */ 1092f39624fdSManenti Marco .name = "KWorld/VStream XPert DVB-T with cx22702", 1093c39ba330SHans Verkuil .tuner_type = UNSET, 1094f39624fdSManenti Marco .radio_type = UNSET, 1095f39624fdSManenti Marco .tuner_addr = ADDR_UNSET, 1096f39624fdSManenti Marco .radio_addr = ADDR_UNSET, 1097f39624fdSManenti Marco .input = { { 1098f39624fdSManenti Marco .type = CX88_VMUX_COMPOSITE1, 1099f39624fdSManenti Marco .vmux = 1, 1100f39624fdSManenti Marco .gpio0 = 0x0700, 1101f39624fdSManenti Marco .gpio2 = 0x0101, 1102f39624fdSManenti Marco }, { 1103f39624fdSManenti Marco .type = CX88_VMUX_SVIDEO, 1104f39624fdSManenti Marco .vmux = 2, 1105f39624fdSManenti Marco .gpio0 = 0x0700, 1106f39624fdSManenti Marco .gpio2 = 0x0101, 1107f39624fdSManenti Marco } }, 110848d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 1109f39624fdSManenti Marco }, 111043eabb4eSChris Pascoe [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL] = { 111143eabb4eSChris Pascoe .name = "DViCO FusionHDTV DVB-T Dual Digital", 1112c39ba330SHans Verkuil .tuner_type = UNSET, /* No analog tuner */ 111343eabb4eSChris Pascoe .radio_type = UNSET, 111443eabb4eSChris Pascoe .tuner_addr = ADDR_UNSET, 111543eabb4eSChris Pascoe .radio_addr = ADDR_UNSET, 111643eabb4eSChris Pascoe .input = { { 111743eabb4eSChris Pascoe .type = CX88_VMUX_COMPOSITE1, 111843eabb4eSChris Pascoe .vmux = 1, 1119d536e9c4SChris Pascoe .gpio0 = 0x000067df, 112043eabb4eSChris Pascoe }, { 112143eabb4eSChris Pascoe .type = CX88_VMUX_SVIDEO, 112243eabb4eSChris Pascoe .vmux = 2, 1123d536e9c4SChris Pascoe .gpio0 = 0x000067df, 112443eabb4eSChris Pascoe } }, 112548d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 112643eabb4eSChris Pascoe }, 112744256de1SMichael Krufky [CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT] = { 112844256de1SMichael Krufky .name = "KWorld HardwareMpegTV XPert", 112944256de1SMichael Krufky .tuner_type = TUNER_PHILIPS_TDA8290, 113044256de1SMichael Krufky .radio_type = UNSET, 113144256de1SMichael Krufky .tuner_addr = ADDR_UNSET, 113244256de1SMichael Krufky .radio_addr = ADDR_UNSET, 113344256de1SMichael Krufky .input = { { 113444256de1SMichael Krufky .type = CX88_VMUX_TELEVISION, 113544256de1SMichael Krufky .vmux = 0, 1136e2798212SMichael Krufky .gpio0 = 0x3de2, 113724da4e4bSMichael Krufky .gpio2 = 0x00ff, 1138bc53f783SMichael Krufky }, { 1139bc53f783SMichael Krufky .type = CX88_VMUX_COMPOSITE1, 1140bc53f783SMichael Krufky .vmux = 1, 1141bc53f783SMichael Krufky .gpio0 = 0x3de6, 11427b27d45bSRicardo Cerqueira .audioroute = 1, 1143bc53f783SMichael Krufky }, { 1144bc53f783SMichael Krufky .type = CX88_VMUX_SVIDEO, 1145bc53f783SMichael Krufky .vmux = 2, 1146bc53f783SMichael Krufky .gpio0 = 0x3de6, 11477b27d45bSRicardo Cerqueira .audioroute = 1, 114844256de1SMichael Krufky } }, 1149e2798212SMichael Krufky .radio = { 1150e2798212SMichael Krufky .type = CX88_RADIO, 1151e2798212SMichael Krufky .gpio0 = 0x3de6, 115224da4e4bSMichael Krufky .gpio2 = 0x00ff, 1153e2798212SMichael Krufky }, 115448d5e803SMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD, 115544256de1SMichael Krufky }, 1156780dfef3SChris Pascoe [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID] = { 1157780dfef3SChris Pascoe .name = "DViCO FusionHDTV DVB-T Hybrid", 115891ae3299SMichael Krufky .tuner_type = TUNER_THOMSON_FE6600, 1159780dfef3SChris Pascoe .radio_type = UNSET, 1160780dfef3SChris Pascoe .tuner_addr = ADDR_UNSET, 1161780dfef3SChris Pascoe .radio_addr = ADDR_UNSET, 1162780dfef3SChris Pascoe .input = { { 1163780dfef3SChris Pascoe .type = CX88_VMUX_TELEVISION, 1164780dfef3SChris Pascoe .vmux = 0, 1165780dfef3SChris Pascoe .gpio0 = 0x0000a75f, 1166780dfef3SChris Pascoe }, { 1167780dfef3SChris Pascoe .type = CX88_VMUX_COMPOSITE1, 1168780dfef3SChris Pascoe .vmux = 1, 1169780dfef3SChris Pascoe .gpio0 = 0x0000a75b, 1170780dfef3SChris Pascoe }, { 1171780dfef3SChris Pascoe .type = CX88_VMUX_SVIDEO, 1172780dfef3SChris Pascoe .vmux = 2, 1173780dfef3SChris Pascoe .gpio0 = 0x0000a75b, 1174780dfef3SChris Pascoe } }, 117548d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 1176780dfef3SChris Pascoe }, 1177e142e7c4SMichael Krufky [CX88_BOARD_PCHDTV_HD5500] = { 1178e142e7c4SMichael Krufky .name = "pcHDTV HD5500 HDTV", 11799c26c8b1SMichael Krufky .tuner_type = TUNER_LG_TDVS_H06XF, /* TDVS-H064F */ 1180e142e7c4SMichael Krufky .radio_type = UNSET, 1181e142e7c4SMichael Krufky .tuner_addr = ADDR_UNSET, 1182e142e7c4SMichael Krufky .radio_addr = ADDR_UNSET, 1183e142e7c4SMichael Krufky .tda9887_conf = TDA9887_PRESENT, 1184e142e7c4SMichael Krufky .input = { { 1185e142e7c4SMichael Krufky .type = CX88_VMUX_TELEVISION, 1186e142e7c4SMichael Krufky .vmux = 0, 1187e142e7c4SMichael Krufky .gpio0 = 0x87fd, 1188e142e7c4SMichael Krufky }, { 1189e142e7c4SMichael Krufky .type = CX88_VMUX_COMPOSITE1, 1190e142e7c4SMichael Krufky .vmux = 1, 1191e142e7c4SMichael Krufky .gpio0 = 0x87f9, 1192e142e7c4SMichael Krufky }, { 1193e142e7c4SMichael Krufky .type = CX88_VMUX_SVIDEO, 1194e142e7c4SMichael Krufky .vmux = 2, 1195e142e7c4SMichael Krufky .gpio0 = 0x87f9, 1196e142e7c4SMichael Krufky } }, 119748d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 1198e142e7c4SMichael Krufky }, 1199b3038304SValentin Zagura [CX88_BOARD_KWORLD_MCE200_DELUXE] = { 1200399426caSMauro Carvalho Chehab /* 1201399426caSMauro Carvalho Chehab * FIXME: tested TV input only, disabled composite, 1202399426caSMauro Carvalho Chehab * svideo and radio until they can be tested also. 1203399426caSMauro Carvalho Chehab */ 1204b3038304SValentin Zagura .name = "Kworld MCE 200 Deluxe", 1205b3038304SValentin Zagura .tuner_type = TUNER_TENA_9533_DI, 1206b3038304SValentin Zagura .radio_type = UNSET, 1207b3038304SValentin Zagura .tda9887_conf = TDA9887_PRESENT, 1208b3038304SValentin Zagura .tuner_addr = ADDR_UNSET, 1209b3038304SValentin Zagura .radio_addr = ADDR_UNSET, 1210b3038304SValentin Zagura .input = { { 1211b3038304SValentin Zagura .type = CX88_VMUX_TELEVISION, 1212b3038304SValentin Zagura .vmux = 0, 1213b3038304SValentin Zagura .gpio0 = 0x0000BDE6 1214b3038304SValentin Zagura } }, 121548d5e803SMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD, 1216b3038304SValentin Zagura }, 1217a3124622SAngelo Marconi [CX88_BOARD_PIXELVIEW_PLAYTV_P7000] = { 1218a3124622SAngelo Marconi /* FIXME: SVideo, Composite and FM inputs are untested */ 1219a3124622SAngelo Marconi .name = "PixelView PlayTV P7000", 1220a3124622SAngelo Marconi .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 1221a3124622SAngelo Marconi .radio_type = UNSET, 1222a3124622SAngelo Marconi .tuner_addr = ADDR_UNSET, 1223a3124622SAngelo Marconi .radio_addr = ADDR_UNSET, 1224a3124622SAngelo Marconi .tda9887_conf = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE | 1225a3124622SAngelo Marconi TDA9887_PORT2_ACTIVE, 1226a3124622SAngelo Marconi .input = { { 1227a3124622SAngelo Marconi .type = CX88_VMUX_TELEVISION, 1228a3124622SAngelo Marconi .vmux = 0, 1229a3124622SAngelo Marconi .gpio0 = 0x5da6, 1230a3124622SAngelo Marconi } }, 123148d5e803SMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD, 1232a3124622SAngelo Marconi }, 1233be4f4519SRicardo Cerqueira [CX88_BOARD_NPGTECH_REALTV_TOP10FM] = { 1234be4f4519SRicardo Cerqueira .name = "NPG Tech Real TV FM Top 10", 1235be4f4519SRicardo Cerqueira .tuner_type = TUNER_TNF_5335MF, /* Actually a TNF9535 */ 1236680543c5SRicardo Cerqueira .radio_type = UNSET, 1237680543c5SRicardo Cerqueira .tuner_addr = ADDR_UNSET, 1238680543c5SRicardo Cerqueira .radio_addr = ADDR_UNSET, 1239680543c5SRicardo Cerqueira .input = { { 1240680543c5SRicardo Cerqueira .type = CX88_VMUX_TELEVISION, 1241680543c5SRicardo Cerqueira .vmux = 0, 1242680543c5SRicardo Cerqueira .gpio0 = 0x0788, 1243680543c5SRicardo Cerqueira }, { 1244680543c5SRicardo Cerqueira .type = CX88_VMUX_COMPOSITE1, 1245680543c5SRicardo Cerqueira .vmux = 1, 1246680543c5SRicardo Cerqueira .gpio0 = 0x078b, 1247680543c5SRicardo Cerqueira }, { 1248680543c5SRicardo Cerqueira .type = CX88_VMUX_SVIDEO, 1249680543c5SRicardo Cerqueira .vmux = 2, 1250be4f4519SRicardo Cerqueira .gpio0 = 0x078b, 1251680543c5SRicardo Cerqueira } }, 1252680543c5SRicardo Cerqueira .radio = { 1253680543c5SRicardo Cerqueira .type = CX88_RADIO, 1254680543c5SRicardo Cerqueira .gpio0 = 0x074a, 1255680543c5SRicardo Cerqueira }, 1256680543c5SRicardo Cerqueira }, 12574bd6e9d9SMalcolm Valentine [CX88_BOARD_WINFAST_DTV2000H] = { 12584bd6e9d9SMalcolm Valentine .name = "WinFast DTV2000 H", 12594bd6e9d9SMalcolm Valentine .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, 12604bd6e9d9SMalcolm Valentine .radio_type = UNSET, 12614bd6e9d9SMalcolm Valentine .tuner_addr = ADDR_UNSET, 12624bd6e9d9SMalcolm Valentine .radio_addr = ADDR_UNSET, 12634bd6e9d9SMalcolm Valentine .tda9887_conf = TDA9887_PRESENT, 12644bd6e9d9SMalcolm Valentine .input = { { 12654bd6e9d9SMalcolm Valentine .type = CX88_VMUX_TELEVISION, 12664bd6e9d9SMalcolm Valentine .vmux = 0, 12674bd6e9d9SMalcolm Valentine .gpio0 = 0x00017304, 12684bd6e9d9SMalcolm Valentine .gpio1 = 0x00008203, 12694bd6e9d9SMalcolm Valentine .gpio2 = 0x00017304, 12704bd6e9d9SMalcolm Valentine .gpio3 = 0x02000000, 12715cff91a0SVincent Pelletier }, { 12725cff91a0SVincent Pelletier .type = CX88_VMUX_COMPOSITE1, 12735cff91a0SVincent Pelletier .vmux = 1, 12745cff91a0SVincent Pelletier .gpio0 = 0x0001d701, 12755cff91a0SVincent Pelletier .gpio1 = 0x0000b207, 12765cff91a0SVincent Pelletier .gpio2 = 0x0001d701, 12775cff91a0SVincent Pelletier .gpio3 = 0x02000000, 12785cff91a0SVincent Pelletier }, { 12795cff91a0SVincent Pelletier .type = CX88_VMUX_COMPOSITE2, 12805cff91a0SVincent Pelletier .vmux = 2, 12815cff91a0SVincent Pelletier .gpio0 = 0x0001d503, 12825cff91a0SVincent Pelletier .gpio1 = 0x0000b207, 12835cff91a0SVincent Pelletier .gpio2 = 0x0001d503, 12845cff91a0SVincent Pelletier .gpio3 = 0x02000000, 12855cff91a0SVincent Pelletier }, { 12865cff91a0SVincent Pelletier .type = CX88_VMUX_SVIDEO, 12875cff91a0SVincent Pelletier .vmux = 3, 12885cff91a0SVincent Pelletier .gpio0 = 0x0001d701, 12895cff91a0SVincent Pelletier .gpio1 = 0x0000b207, 12905cff91a0SVincent Pelletier .gpio2 = 0x0001d701, 12915cff91a0SVincent Pelletier .gpio3 = 0x02000000, 12924bd6e9d9SMalcolm Valentine } }, 12935cff91a0SVincent Pelletier .radio = { 12945cff91a0SVincent Pelletier .type = CX88_RADIO, 12955cff91a0SVincent Pelletier .gpio0 = 0x00015702, 12965cff91a0SVincent Pelletier .gpio1 = 0x0000f207, 12975cff91a0SVincent Pelletier .gpio2 = 0x00015702, 12985cff91a0SVincent Pelletier .gpio3 = 0x02000000, 12995cff91a0SVincent Pelletier }, 130048d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 13014bd6e9d9SMalcolm Valentine }, 13024d14c833SVlastimil Labsky [CX88_BOARD_WINFAST_DTV2000H_J] = { 13034d14c833SVlastimil Labsky .name = "WinFast DTV2000 H rev. J", 130427b93d8aSMiroslav Slugen .tuner_type = TUNER_PHILIPS_FMD1216MEX_MK3, 13054d14c833SVlastimil Labsky .radio_type = UNSET, 13064d14c833SVlastimil Labsky .tuner_addr = ADDR_UNSET, 13074d14c833SVlastimil Labsky .radio_addr = ADDR_UNSET, 13084d14c833SVlastimil Labsky .tda9887_conf = TDA9887_PRESENT, 13094d14c833SVlastimil Labsky .input = { { 13104d14c833SVlastimil Labsky .type = CX88_VMUX_TELEVISION, 13114d14c833SVlastimil Labsky .vmux = 0, 13124d14c833SVlastimil Labsky .gpio0 = 0x00017300, 13134d14c833SVlastimil Labsky .gpio1 = 0x00008207, 13144d14c833SVlastimil Labsky .gpio2 = 0x00000000, 13154d14c833SVlastimil Labsky .gpio3 = 0x02000000, 13164d14c833SVlastimil Labsky }, { 13174d14c833SVlastimil Labsky .type = CX88_VMUX_TELEVISION, 13184d14c833SVlastimil Labsky .vmux = 0, 13194d14c833SVlastimil Labsky .gpio0 = 0x00018300, 13204d14c833SVlastimil Labsky .gpio1 = 0x0000f207, 13214d14c833SVlastimil Labsky .gpio2 = 0x00017304, 13224d14c833SVlastimil Labsky .gpio3 = 0x02000000, 13234d14c833SVlastimil Labsky }, { 13244d14c833SVlastimil Labsky .type = CX88_VMUX_COMPOSITE1, 13254d14c833SVlastimil Labsky .vmux = 1, 13264d14c833SVlastimil Labsky .gpio0 = 0x00018301, 13274d14c833SVlastimil Labsky .gpio1 = 0x0000f207, 13284d14c833SVlastimil Labsky .gpio2 = 0x00017304, 13294d14c833SVlastimil Labsky .gpio3 = 0x02000000, 13304d14c833SVlastimil Labsky }, { 13314d14c833SVlastimil Labsky .type = CX88_VMUX_SVIDEO, 13324d14c833SVlastimil Labsky .vmux = 2, 13334d14c833SVlastimil Labsky .gpio0 = 0x00018301, 13344d14c833SVlastimil Labsky .gpio1 = 0x0000f207, 13354d14c833SVlastimil Labsky .gpio2 = 0x00017304, 13364d14c833SVlastimil Labsky .gpio3 = 0x02000000, 13374d14c833SVlastimil Labsky } }, 13384d14c833SVlastimil Labsky .radio = { 13394d14c833SVlastimil Labsky .type = CX88_RADIO, 13404d14c833SVlastimil Labsky .gpio0 = 0x00015702, 13414d14c833SVlastimil Labsky .gpio1 = 0x0000f207, 13424d14c833SVlastimil Labsky .gpio2 = 0x00015702, 13434d14c833SVlastimil Labsky .gpio3 = 0x02000000, 13444d14c833SVlastimil Labsky }, 13454d14c833SVlastimil Labsky .mpeg = CX88_MPEG_DVB, 13464d14c833SVlastimil Labsky }, 1347c02a34f4SSaqeb Akhter [CX88_BOARD_GENIATECH_DVBS] = { 1348c02a34f4SSaqeb Akhter .name = "Geniatech DVB-S", 1349c39ba330SHans Verkuil .tuner_type = UNSET, 1350c02a34f4SSaqeb Akhter .radio_type = UNSET, 1351c02a34f4SSaqeb Akhter .tuner_addr = ADDR_UNSET, 1352c02a34f4SSaqeb Akhter .radio_addr = ADDR_UNSET, 1353c02a34f4SSaqeb Akhter .input = { { 1354c02a34f4SSaqeb Akhter .type = CX88_VMUX_DVB, 1355c02a34f4SSaqeb Akhter .vmux = 0, 1356c02a34f4SSaqeb Akhter }, { 1357c02a34f4SSaqeb Akhter .type = CX88_VMUX_COMPOSITE1, 1358c02a34f4SSaqeb Akhter .vmux = 1, 1359c02a34f4SSaqeb Akhter } }, 136048d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 1361c02a34f4SSaqeb Akhter }, 1362ad10c930SEric Thomas [CX88_BOARD_HAUPPAUGE_HVR3000] = { 1363ad10c930SEric Thomas .name = "Hauppauge WinTV-HVR3000 TriMode Analog/DVB-S/DVB-T", 1364ad10c930SEric Thomas .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, 1365ad10c930SEric Thomas .radio_type = UNSET, 1366ad10c930SEric Thomas .tuner_addr = ADDR_UNSET, 1367ad10c930SEric Thomas .radio_addr = ADDR_UNSET, 1368ad10c930SEric Thomas .tda9887_conf = TDA9887_PRESENT, 1369facd2366SHans Verkuil .audio_chip = CX88_AUDIO_WM8775, 1370ad10c930SEric Thomas .input = { { 1371ad10c930SEric Thomas .type = CX88_VMUX_TELEVISION, 1372ad10c930SEric Thomas .vmux = 0, 1373ad10c930SEric Thomas .gpio0 = 0x84bf, 1374649e13a9SDarron Broad /* 1: TV Audio / FM Mono */ 1375923ac7f7SDarron Broad .audioroute = 1, 1376ad10c930SEric Thomas }, { 1377ad10c930SEric Thomas .type = CX88_VMUX_COMPOSITE1, 1378ad10c930SEric Thomas .vmux = 1, 1379ad10c930SEric Thomas .gpio0 = 0x84bf, 1380649e13a9SDarron Broad /* 2: Line-In */ 1381923ac7f7SDarron Broad .audioroute = 2, 1382ad10c930SEric Thomas }, { 1383ad10c930SEric Thomas .type = CX88_VMUX_SVIDEO, 1384ad10c930SEric Thomas .vmux = 2, 1385ad10c930SEric Thomas .gpio0 = 0x84bf, 1386649e13a9SDarron Broad /* 2: Line-In */ 1387923ac7f7SDarron Broad .audioroute = 2, 1388ad10c930SEric Thomas } }, 138963248f26SDarron Broad .radio = { 139063248f26SDarron Broad .type = CX88_RADIO, 139163248f26SDarron Broad .gpio0 = 0x84bf, 1392649e13a9SDarron Broad /* 4: FM Stereo (untested) */ 1393649e13a9SDarron Broad .audioroute = 8, 139463248f26SDarron Broad }, 139576dc82abSSteven Toth .mpeg = CX88_MPEG_DVB, 1396363c35fcSSteven Toth .num_frontends = 2, 1397ad10c930SEric Thomas }, 1398d1009bd7SPeter Naulls [CX88_BOARD_NORWOOD_MICRO] = { 1399d1009bd7SPeter Naulls .name = "Norwood Micro TV Tuner", 1400d1009bd7SPeter Naulls .tuner_type = TUNER_TNF_5335MF, 1401d1009bd7SPeter Naulls .radio_type = UNSET, 1402d1009bd7SPeter Naulls .tuner_addr = ADDR_UNSET, 1403d1009bd7SPeter Naulls .radio_addr = ADDR_UNSET, 1404d1009bd7SPeter Naulls .input = { { 1405d1009bd7SPeter Naulls .type = CX88_VMUX_TELEVISION, 1406d1009bd7SPeter Naulls .vmux = 0, 1407d1009bd7SPeter Naulls .gpio0 = 0x0709, 1408d1009bd7SPeter Naulls }, { 1409d1009bd7SPeter Naulls .type = CX88_VMUX_COMPOSITE1, 1410d1009bd7SPeter Naulls .vmux = 1, 1411d1009bd7SPeter Naulls .gpio0 = 0x070b, 1412d1009bd7SPeter Naulls }, { 1413d1009bd7SPeter Naulls .type = CX88_VMUX_SVIDEO, 1414d1009bd7SPeter Naulls .vmux = 2, 1415d1009bd7SPeter Naulls .gpio0 = 0x070b, 1416d1009bd7SPeter Naulls } }, 1417d1009bd7SPeter Naulls }, 14182acadefaSDavid Bussenschutt [CX88_BOARD_TE_DTV_250_OEM_SWANN] = { 14192acadefaSDavid Bussenschutt .name = "Shenzhen Tungsten Ages Tech TE-DTV-250 / Swann OEM", 14202acadefaSDavid Bussenschutt .tuner_type = TUNER_LG_PAL_NEW_TAPC, 14212acadefaSDavid Bussenschutt .radio_type = UNSET, 14222acadefaSDavid Bussenschutt .tuner_addr = ADDR_UNSET, 14232acadefaSDavid Bussenschutt .radio_addr = ADDR_UNSET, 14242acadefaSDavid Bussenschutt .input = { { 14252acadefaSDavid Bussenschutt .type = CX88_VMUX_TELEVISION, 14262acadefaSDavid Bussenschutt .vmux = 0, 14272acadefaSDavid Bussenschutt .gpio0 = 0x003fffff, 14282acadefaSDavid Bussenschutt .gpio1 = 0x00e00000, 14292acadefaSDavid Bussenschutt .gpio2 = 0x003fffff, 14302acadefaSDavid Bussenschutt .gpio3 = 0x02000000, 14312acadefaSDavid Bussenschutt }, { 14322acadefaSDavid Bussenschutt .type = CX88_VMUX_COMPOSITE1, 14332acadefaSDavid Bussenschutt .vmux = 1, 14342acadefaSDavid Bussenschutt .gpio0 = 0x003fffff, 14352acadefaSDavid Bussenschutt .gpio1 = 0x00e00000, 14362acadefaSDavid Bussenschutt .gpio2 = 0x003fffff, 14372acadefaSDavid Bussenschutt .gpio3 = 0x02000000, 14382acadefaSDavid Bussenschutt }, { 14392acadefaSDavid Bussenschutt .type = CX88_VMUX_SVIDEO, 14402acadefaSDavid Bussenschutt .vmux = 2, 14412acadefaSDavid Bussenschutt .gpio0 = 0x003fffff, 14422acadefaSDavid Bussenschutt .gpio1 = 0x00e00000, 14432acadefaSDavid Bussenschutt .gpio2 = 0x003fffff, 14442acadefaSDavid Bussenschutt .gpio3 = 0x02000000, 14452acadefaSDavid Bussenschutt } }, 14462acadefaSDavid Bussenschutt }, 1447aa481a65SSteven Toth [CX88_BOARD_HAUPPAUGE_HVR1300] = { 1448aa481a65SSteven Toth .name = "Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder", 1449aa481a65SSteven Toth .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, 1450aa481a65SSteven Toth .radio_type = UNSET, 1451aa481a65SSteven Toth .tuner_addr = ADDR_UNSET, 1452aa481a65SSteven Toth .radio_addr = ADDR_UNSET, 1453aa481a65SSteven Toth .tda9887_conf = TDA9887_PRESENT, 1454facd2366SHans Verkuil .audio_chip = CX88_AUDIO_WM8775, 14552491fbb7SSteven Toth /* 14562491fbb7SSteven Toth * gpio0 as reported by Mike Crash <mike AT mikecrash.com> 14572491fbb7SSteven Toth */ 1458aa481a65SSteven Toth .input = { { 1459aa481a65SSteven Toth .type = CX88_VMUX_TELEVISION, 1460aa481a65SSteven Toth .vmux = 0, 14612491fbb7SSteven Toth .gpio0 = 0xef88, 1462649e13a9SDarron Broad /* 1: TV Audio / FM Mono */ 14637b27d45bSRicardo Cerqueira .audioroute = 1, 1464aa481a65SSteven Toth }, { 1465aa481a65SSteven Toth .type = CX88_VMUX_COMPOSITE1, 1466aa481a65SSteven Toth .vmux = 1, 14672491fbb7SSteven Toth .gpio0 = 0xef88, 1468649e13a9SDarron Broad /* 2: Line-In */ 14697b27d45bSRicardo Cerqueira .audioroute = 2, 1470aa481a65SSteven Toth }, { 1471aa481a65SSteven Toth .type = CX88_VMUX_SVIDEO, 1472aa481a65SSteven Toth .vmux = 2, 14732491fbb7SSteven Toth .gpio0 = 0xef88, 1474649e13a9SDarron Broad /* 2: Line-In */ 14757b27d45bSRicardo Cerqueira .audioroute = 2, 1476aa481a65SSteven Toth } }, 14776c5be74cSSteven Toth .mpeg = CX88_MPEG_DVB | CX88_MPEG_BLACKBIRD, 14786b92b3bdSSteven Toth .radio = { 14796b92b3bdSSteven Toth .type = CX88_RADIO, 14802491fbb7SSteven Toth .gpio0 = 0xef88, 1481649e13a9SDarron Broad /* 4: FM Stereo (untested) */ 1482649e13a9SDarron Broad .audioroute = 8, 14836b92b3bdSSteven Toth }, 1484aa481a65SSteven Toth }, 14854f3ca2f1SDirk Herrendoerfer [CX88_BOARD_SAMSUNG_SMT_7020] = { 14864f3ca2f1SDirk Herrendoerfer .name = "Samsung SMT 7020 DVB-S", 1487c39ba330SHans Verkuil .tuner_type = UNSET, 14884f3ca2f1SDirk Herrendoerfer .radio_type = UNSET, 14894f3ca2f1SDirk Herrendoerfer .tuner_addr = ADDR_UNSET, 14904f3ca2f1SDirk Herrendoerfer .radio_addr = ADDR_UNSET, 14914f3ca2f1SDirk Herrendoerfer .input = { { 14924f3ca2f1SDirk Herrendoerfer .type = CX88_VMUX_DVB, 14934f3ca2f1SDirk Herrendoerfer .vmux = 0, 14944f3ca2f1SDirk Herrendoerfer } }, 14954f3ca2f1SDirk Herrendoerfer .mpeg = CX88_MPEG_DVB, 14964f3ca2f1SDirk Herrendoerfer }, 14977cb47a14SDaniel Gimpelevich [CX88_BOARD_ADSTECH_PTV_390] = { 14987cb47a14SDaniel Gimpelevich .name = "ADS Tech Instant Video PCI", 1499c39ba330SHans Verkuil .tuner_type = UNSET, 15007cb47a14SDaniel Gimpelevich .radio_type = UNSET, 15017cb47a14SDaniel Gimpelevich .tuner_addr = ADDR_UNSET, 15027cb47a14SDaniel Gimpelevich .radio_addr = ADDR_UNSET, 15037cb47a14SDaniel Gimpelevich .input = { { 15047cb47a14SDaniel Gimpelevich .type = CX88_VMUX_DEBUG, 15057cb47a14SDaniel Gimpelevich .vmux = 3, 15067cb47a14SDaniel Gimpelevich .gpio0 = 0x04ff, 15077cb47a14SDaniel Gimpelevich }, { 15087cb47a14SDaniel Gimpelevich .type = CX88_VMUX_COMPOSITE1, 15097cb47a14SDaniel Gimpelevich .vmux = 1, 15107cb47a14SDaniel Gimpelevich .gpio0 = 0x07fa, 15117cb47a14SDaniel Gimpelevich }, { 15127cb47a14SDaniel Gimpelevich .type = CX88_VMUX_SVIDEO, 15137cb47a14SDaniel Gimpelevich .vmux = 2, 15147cb47a14SDaniel Gimpelevich .gpio0 = 0x07fa, 15157cb47a14SDaniel Gimpelevich } }, 15167cb47a14SDaniel Gimpelevich }, 151760464da8SSteven Toth [CX88_BOARD_PINNACLE_PCTV_HD_800i] = { 151860464da8SSteven Toth .name = "Pinnacle PCTV HD 800i", 151960464da8SSteven Toth .tuner_type = TUNER_XC5000, 152060464da8SSteven Toth .radio_type = UNSET, 152160464da8SSteven Toth .tuner_addr = ADDR_UNSET, 152260464da8SSteven Toth .radio_addr = ADDR_UNSET, 152360464da8SSteven Toth .input = { { 152460464da8SSteven Toth .type = CX88_VMUX_TELEVISION, 152560464da8SSteven Toth .vmux = 0, 152660464da8SSteven Toth .gpio0 = 0x04fb, 152760464da8SSteven Toth .gpio1 = 0x10ff, 152860464da8SSteven Toth }, { 152960464da8SSteven Toth .type = CX88_VMUX_COMPOSITE1, 153060464da8SSteven Toth .vmux = 1, 153160464da8SSteven Toth .gpio0 = 0x04fb, 153260464da8SSteven Toth .gpio1 = 0x10ef, 153360464da8SSteven Toth .audioroute = 1, 153460464da8SSteven Toth }, { 153560464da8SSteven Toth .type = CX88_VMUX_SVIDEO, 153660464da8SSteven Toth .vmux = 2, 153760464da8SSteven Toth .gpio0 = 0x04fb, 153860464da8SSteven Toth .gpio1 = 0x10ef, 153960464da8SSteven Toth .audioroute = 1, 154060464da8SSteven Toth } }, 154160464da8SSteven Toth .mpeg = CX88_MPEG_DVB, 154260464da8SSteven Toth }, 15435c00fac0SSteven Toth [CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO] = { 15448efd2e28SMichael Krufky .name = "DViCO FusionHDTV 5 PCI nano", 15458efd2e28SMichael Krufky /* xc3008 tuner, digital only for now */ 1546c39ba330SHans Verkuil .tuner_type = UNSET, 15475c00fac0SSteven Toth .radio_type = UNSET, 15485c00fac0SSteven Toth .tuner_addr = ADDR_UNSET, 15495c00fac0SSteven Toth .radio_addr = ADDR_UNSET, 15505c00fac0SSteven Toth .input = { { 15515c00fac0SSteven Toth .type = CX88_VMUX_TELEVISION, 15525c00fac0SSteven Toth .vmux = 0, 15535c00fac0SSteven Toth .gpio0 = 0x000027df, /* Unconfirmed */ 15545c00fac0SSteven Toth }, { 15555c00fac0SSteven Toth .type = CX88_VMUX_COMPOSITE1, 15565c00fac0SSteven Toth .vmux = 1, 15575c00fac0SSteven Toth .gpio0 = 0x000027df, /* Unconfirmed */ 15585c00fac0SSteven Toth .audioroute = 1, 15595c00fac0SSteven Toth }, { 15605c00fac0SSteven Toth .type = CX88_VMUX_SVIDEO, 15615c00fac0SSteven Toth .vmux = 2, 15625c00fac0SSteven Toth .gpio0 = 0x000027df, /* Unconfirmed */ 15635c00fac0SSteven Toth .audioroute = 1, 15645c00fac0SSteven Toth } }, 15655c00fac0SSteven Toth .mpeg = CX88_MPEG_DVB, 15665c00fac0SSteven Toth }, 15679507901eSMauro Carvalho Chehab [CX88_BOARD_PINNACLE_HYBRID_PCTV] = { 15689507901eSMauro Carvalho Chehab .name = "Pinnacle Hybrid PCTV", 15699507901eSMauro Carvalho Chehab .tuner_type = TUNER_XC2028, 15709507901eSMauro Carvalho Chehab .tuner_addr = 0x61, 1571b6854e3fSMiroslav Slugen .radio_type = UNSET, 1572b6854e3fSMiroslav Slugen .radio_addr = ADDR_UNSET, 15739507901eSMauro Carvalho Chehab .input = { { 15749507901eSMauro Carvalho Chehab .type = CX88_VMUX_TELEVISION, 15759507901eSMauro Carvalho Chehab .vmux = 0, 15763f6014fcSStéphane Voltz .gpio0 = 0x004ff, 15773f6014fcSStéphane Voltz .gpio1 = 0x010ff, 15783f6014fcSStéphane Voltz .gpio2 = 0x00001, 15799507901eSMauro Carvalho Chehab }, { 15809507901eSMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1, 15819507901eSMauro Carvalho Chehab .vmux = 1, 15823f6014fcSStéphane Voltz .gpio0 = 0x004fb, 15833f6014fcSStéphane Voltz .gpio1 = 0x010ef, 15843f6014fcSStéphane Voltz .audioroute = 1, 15859507901eSMauro Carvalho Chehab }, { 15869507901eSMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO, 15879507901eSMauro Carvalho Chehab .vmux = 2, 15883f6014fcSStéphane Voltz .gpio0 = 0x004fb, 15893f6014fcSStéphane Voltz .gpio1 = 0x010ef, 15903f6014fcSStéphane Voltz .audioroute = 1, 15919507901eSMauro Carvalho Chehab } }, 15929507901eSMauro Carvalho Chehab .radio = { 15939507901eSMauro Carvalho Chehab .type = CX88_RADIO, 15949507901eSMauro Carvalho Chehab .gpio0 = 0x004ff, 15959507901eSMauro Carvalho Chehab .gpio1 = 0x010ff, 15969507901eSMauro Carvalho Chehab .gpio2 = 0x0ff, 15979507901eSMauro Carvalho Chehab }, 15983f6014fcSStéphane Voltz .mpeg = CX88_MPEG_DVB, 15999507901eSMauro Carvalho Chehab }, 160014422f9dSMauro Carvalho Chehab /* Terry Wu <terrywu2009@gmail.com> */ 160114422f9dSMauro Carvalho Chehab /* TV Audio : set GPIO 2, 18, 19 value to 0, 1, 0 */ 160214422f9dSMauro Carvalho Chehab /* FM Audio : set GPIO 2, 18, 19 value to 0, 0, 0 */ 160314422f9dSMauro Carvalho Chehab /* Line-in Audio : set GPIO 2, 18, 19 value to 0, 1, 1 */ 160414422f9dSMauro Carvalho Chehab /* Mute Audio : set GPIO 2 value to 1 */ 16059507901eSMauro Carvalho Chehab [CX88_BOARD_WINFAST_TV2000_XP_GLOBAL] = { 160614422f9dSMauro Carvalho Chehab .name = "Leadtek TV2000 XP Global", 16079507901eSMauro Carvalho Chehab .tuner_type = TUNER_XC2028, 16089507901eSMauro Carvalho Chehab .tuner_addr = 0x61, 1609b6854e3fSMiroslav Slugen .radio_type = UNSET, 1610b6854e3fSMiroslav Slugen .radio_addr = ADDR_UNSET, 16119507901eSMauro Carvalho Chehab .input = { { 16129507901eSMauro Carvalho Chehab .type = CX88_VMUX_TELEVISION, 16139507901eSMauro Carvalho Chehab .vmux = 0, 161414422f9dSMauro Carvalho Chehab .gpio0 = 0x0400, /* pin 2 = 0 */ 16159507901eSMauro Carvalho Chehab .gpio1 = 0x0000, 161614422f9dSMauro Carvalho Chehab .gpio2 = 0x0C04, /* pin 18 = 1, pin 19 = 0 */ 161714422f9dSMauro Carvalho Chehab .gpio3 = 0x0000, 16189507901eSMauro Carvalho Chehab }, { 16199507901eSMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1, 16209507901eSMauro Carvalho Chehab .vmux = 1, 162114422f9dSMauro Carvalho Chehab .gpio0 = 0x0400, /* pin 2 = 0 */ 16229507901eSMauro Carvalho Chehab .gpio1 = 0x0000, 162314422f9dSMauro Carvalho Chehab .gpio2 = 0x0C0C, /* pin 18 = 1, pin 19 = 1 */ 162414422f9dSMauro Carvalho Chehab .gpio3 = 0x0000, 16259507901eSMauro Carvalho Chehab }, { 16269507901eSMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO, 16279507901eSMauro Carvalho Chehab .vmux = 2, 162814422f9dSMauro Carvalho Chehab .gpio0 = 0x0400, /* pin 2 = 0 */ 162914422f9dSMauro Carvalho Chehab .gpio1 = 0x0000, 163014422f9dSMauro Carvalho Chehab .gpio2 = 0x0C0C, /* pin 18 = 1, pin 19 = 1 */ 163114422f9dSMauro Carvalho Chehab .gpio3 = 0x0000, 16329507901eSMauro Carvalho Chehab } }, 16339507901eSMauro Carvalho Chehab .radio = { 16349507901eSMauro Carvalho Chehab .type = CX88_RADIO, 163514422f9dSMauro Carvalho Chehab .gpio0 = 0x0400, /* pin 2 = 0 */ 163614422f9dSMauro Carvalho Chehab .gpio1 = 0x0000, 163714422f9dSMauro Carvalho Chehab .gpio2 = 0x0C00, /* pin 18 = 0, pin 19 = 0 */ 163814422f9dSMauro Carvalho Chehab .gpio3 = 0x0000, 16399507901eSMauro Carvalho Chehab }, 16409507901eSMauro Carvalho Chehab }, 164184463d5fSIstvan Varga [CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F36] = { 164284463d5fSIstvan Varga .name = "Leadtek TV2000 XP Global (SC4100)", 164384463d5fSIstvan Varga .tuner_type = TUNER_XC4000, 164484463d5fSIstvan Varga .tuner_addr = 0x61, 164584463d5fSIstvan Varga .radio_type = UNSET, 164684463d5fSIstvan Varga .radio_addr = ADDR_UNSET, 164784463d5fSIstvan Varga .input = { { 164884463d5fSIstvan Varga .type = CX88_VMUX_TELEVISION, 164984463d5fSIstvan Varga .vmux = 0, 165084463d5fSIstvan Varga .gpio0 = 0x0400, /* pin 2 = 0 */ 165184463d5fSIstvan Varga .gpio1 = 0x0000, 165284463d5fSIstvan Varga .gpio2 = 0x0C04, /* pin 18 = 1, pin 19 = 0 */ 165384463d5fSIstvan Varga .gpio3 = 0x0000, 165484463d5fSIstvan Varga }, { 165584463d5fSIstvan Varga .type = CX88_VMUX_COMPOSITE1, 165684463d5fSIstvan Varga .vmux = 1, 165784463d5fSIstvan Varga .gpio0 = 0x0400, /* pin 2 = 0 */ 165884463d5fSIstvan Varga .gpio1 = 0x0000, 165984463d5fSIstvan Varga .gpio2 = 0x0C0C, /* pin 18 = 1, pin 19 = 1 */ 166084463d5fSIstvan Varga .gpio3 = 0x0000, 166184463d5fSIstvan Varga }, { 166284463d5fSIstvan Varga .type = CX88_VMUX_SVIDEO, 166384463d5fSIstvan Varga .vmux = 2, 166484463d5fSIstvan Varga .gpio0 = 0x0400, /* pin 2 = 0 */ 166584463d5fSIstvan Varga .gpio1 = 0x0000, 166684463d5fSIstvan Varga .gpio2 = 0x0C0C, /* pin 18 = 1, pin 19 = 1 */ 166784463d5fSIstvan Varga .gpio3 = 0x0000, 166884463d5fSIstvan Varga } }, 166984463d5fSIstvan Varga .radio = { 167084463d5fSIstvan Varga .type = CX88_RADIO, 167184463d5fSIstvan Varga .gpio0 = 0x0400, /* pin 2 = 0 */ 167284463d5fSIstvan Varga .gpio1 = 0x0000, 167384463d5fSIstvan Varga .gpio2 = 0x0C00, /* pin 18 = 0, pin 19 = 0 */ 167484463d5fSIstvan Varga .gpio3 = 0x0000, 167584463d5fSIstvan Varga }, 167684463d5fSIstvan Varga }, 167784463d5fSIstvan Varga [CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F43] = { 167884463d5fSIstvan Varga .name = "Leadtek TV2000 XP Global (XC4100)", 167984463d5fSIstvan Varga .tuner_type = TUNER_XC4000, 168084463d5fSIstvan Varga .tuner_addr = 0x61, 168184463d5fSIstvan Varga .radio_type = UNSET, 168284463d5fSIstvan Varga .radio_addr = ADDR_UNSET, 168384463d5fSIstvan Varga .input = { { 168484463d5fSIstvan Varga .type = CX88_VMUX_TELEVISION, 168584463d5fSIstvan Varga .vmux = 0, 168684463d5fSIstvan Varga .gpio0 = 0x0400, /* pin 2 = 0 */ 168784463d5fSIstvan Varga .gpio1 = 0x6040, /* pin 14 = 1, pin 13 = 0 */ 168884463d5fSIstvan Varga .gpio2 = 0x0000, 168984463d5fSIstvan Varga .gpio3 = 0x0000, 169084463d5fSIstvan Varga }, { 169184463d5fSIstvan Varga .type = CX88_VMUX_COMPOSITE1, 169284463d5fSIstvan Varga .vmux = 1, 169384463d5fSIstvan Varga .gpio0 = 0x0400, /* pin 2 = 0 */ 169484463d5fSIstvan Varga .gpio1 = 0x6060, /* pin 14 = 1, pin 13 = 1 */ 169584463d5fSIstvan Varga .gpio2 = 0x0000, 169684463d5fSIstvan Varga .gpio3 = 0x0000, 169784463d5fSIstvan Varga }, { 169884463d5fSIstvan Varga .type = CX88_VMUX_SVIDEO, 169984463d5fSIstvan Varga .vmux = 2, 170084463d5fSIstvan Varga .gpio0 = 0x0400, /* pin 2 = 0 */ 170184463d5fSIstvan Varga .gpio1 = 0x6060, /* pin 14 = 1, pin 13 = 1 */ 170284463d5fSIstvan Varga .gpio2 = 0x0000, 170384463d5fSIstvan Varga .gpio3 = 0x0000, 170484463d5fSIstvan Varga } }, 170584463d5fSIstvan Varga .radio = { 170684463d5fSIstvan Varga .type = CX88_RADIO, 170784463d5fSIstvan Varga .gpio0 = 0x0400, /* pin 2 = 0 */ 170884463d5fSIstvan Varga .gpio1 = 0x6000, /* pin 14 = 1, pin 13 = 0 */ 170984463d5fSIstvan Varga .gpio2 = 0x0000, 171084463d5fSIstvan Varga .gpio3 = 0x0000, 171184463d5fSIstvan Varga }, 171284463d5fSIstvan Varga }, 17139507901eSMauro Carvalho Chehab [CX88_BOARD_POWERCOLOR_REAL_ANGEL] = { 1714399426caSMauro Carvalho Chehab /* Long names may confuse LIRC. */ 1715399426caSMauro Carvalho Chehab .name = "PowerColor RA330", 17169507901eSMauro Carvalho Chehab .tuner_type = TUNER_XC2028, 17179507901eSMauro Carvalho Chehab .tuner_addr = 0x61, 17189507901eSMauro Carvalho Chehab .input = { { 1719399426caSMauro Carvalho Chehab /* 1720399426caSMauro Carvalho Chehab * Due to the way the cx88 driver is written, 1721399426caSMauro Carvalho Chehab * there is no way to deactivate audio pass- 1722399426caSMauro Carvalho Chehab * through without this entry. Furthermore, if 1723399426caSMauro Carvalho Chehab * the TV mux entry is first, you get audio 1724399426caSMauro Carvalho Chehab * from the tuner on boot for a little while. 1725399426caSMauro Carvalho Chehab */ 1726a9606ce6SDaniel Gimpelevich .type = CX88_VMUX_DEBUG, 1727399426caSMauro Carvalho Chehab .vmux = 3, 1728399426caSMauro Carvalho Chehab .gpio0 = 0x00ff, 1729399426caSMauro Carvalho Chehab .gpio1 = 0xf39d, 1730399426caSMauro Carvalho Chehab .gpio3 = 0x0000, 1731399426caSMauro Carvalho Chehab }, { 17329507901eSMauro Carvalho Chehab .type = CX88_VMUX_TELEVISION, 17339507901eSMauro Carvalho Chehab .vmux = 0, 1734ab364983SDâniel Fraga .gpio0 = 0x00ff, 1735b573ea0aSMauro Carvalho Chehab .gpio1 = 0xf35d, 1736ab364983SDâniel Fraga .gpio3 = 0x0000, 17379507901eSMauro Carvalho Chehab }, { 17389507901eSMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1, 17399507901eSMauro Carvalho Chehab .vmux = 1, 1740ab364983SDâniel Fraga .gpio0 = 0x00ff, 1741ab364983SDâniel Fraga .gpio1 = 0xf37d, 1742ab364983SDâniel Fraga .gpio3 = 0x0000, 17439507901eSMauro Carvalho Chehab }, { 17449507901eSMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO, 17459507901eSMauro Carvalho Chehab .vmux = 2, 17469507901eSMauro Carvalho Chehab .gpio0 = 0x000ff, 17479507901eSMauro Carvalho Chehab .gpio1 = 0x0f37d, 17489507901eSMauro Carvalho Chehab .gpio3 = 0x00000, 17499507901eSMauro Carvalho Chehab } }, 17509507901eSMauro Carvalho Chehab .radio = { 17519507901eSMauro Carvalho Chehab .type = CX88_RADIO, 17529507901eSMauro Carvalho Chehab .gpio0 = 0x000ff, 17539507901eSMauro Carvalho Chehab .gpio1 = 0x0f35d, 17549507901eSMauro Carvalho Chehab .gpio3 = 0x00000, 17559507901eSMauro Carvalho Chehab }, 17569507901eSMauro Carvalho Chehab }, 17579507901eSMauro Carvalho Chehab [CX88_BOARD_GENIATECH_X8000_MT] = { 17589507901eSMauro Carvalho Chehab /* Also PowerColor Real Angel 330 and Geniatech X800 OEM */ 17599507901eSMauro Carvalho Chehab .name = "Geniatech X8000-MT DVBT", 17609507901eSMauro Carvalho Chehab .tuner_type = TUNER_XC2028, 17619507901eSMauro Carvalho Chehab .tuner_addr = 0x61, 17629507901eSMauro Carvalho Chehab .input = { { 17639507901eSMauro Carvalho Chehab .type = CX88_VMUX_TELEVISION, 17649507901eSMauro Carvalho Chehab .vmux = 0, 17659507901eSMauro Carvalho Chehab .gpio0 = 0x00000000, 17669507901eSMauro Carvalho Chehab .gpio1 = 0x00e3e341, 17679507901eSMauro Carvalho Chehab .gpio2 = 0x00000000, 17689507901eSMauro Carvalho Chehab .gpio3 = 0x00000000, 17699507901eSMauro Carvalho Chehab }, { 17709507901eSMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1, 17719507901eSMauro Carvalho Chehab .vmux = 1, 17729507901eSMauro Carvalho Chehab .gpio0 = 0x00000000, 17739507901eSMauro Carvalho Chehab .gpio1 = 0x00e3e361, 17749507901eSMauro Carvalho Chehab .gpio2 = 0x00000000, 17759507901eSMauro Carvalho Chehab .gpio3 = 0x00000000, 17769507901eSMauro Carvalho Chehab }, { 17779507901eSMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO, 17789507901eSMauro Carvalho Chehab .vmux = 2, 17799507901eSMauro Carvalho Chehab .gpio0 = 0x00000000, 17809507901eSMauro Carvalho Chehab .gpio1 = 0x00e3e361, 17819507901eSMauro Carvalho Chehab .gpio2 = 0x00000000, 17829507901eSMauro Carvalho Chehab .gpio3 = 0x00000000, 17839507901eSMauro Carvalho Chehab } }, 17849507901eSMauro Carvalho Chehab .radio = { 17859507901eSMauro Carvalho Chehab .type = CX88_RADIO, 17869507901eSMauro Carvalho Chehab .gpio0 = 0x00000000, 17879507901eSMauro Carvalho Chehab .gpio1 = 0x00e3e341, 17889507901eSMauro Carvalho Chehab .gpio2 = 0x00000000, 17899507901eSMauro Carvalho Chehab .gpio3 = 0x00000000, 17909507901eSMauro Carvalho Chehab }, 17919507901eSMauro Carvalho Chehab .mpeg = CX88_MPEG_DVB, 1792b3fb91d2SChris Pascoe }, 1793b3fb91d2SChris Pascoe [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO] = { 1794b3fb91d2SChris Pascoe .name = "DViCO FusionHDTV DVB-T PRO", 179519c309e3STim Farrington .tuner_type = TUNER_XC2028, 179619c309e3STim Farrington .tuner_addr = 0x61, 1797b3fb91d2SChris Pascoe .radio_type = UNSET, 1798b3fb91d2SChris Pascoe .radio_addr = ADDR_UNSET, 1799b3fb91d2SChris Pascoe .input = { { 1800b3fb91d2SChris Pascoe .type = CX88_VMUX_COMPOSITE1, 1801b3fb91d2SChris Pascoe .vmux = 1, 1802b3fb91d2SChris Pascoe .gpio0 = 0x000067df, 1803b3fb91d2SChris Pascoe }, { 1804b3fb91d2SChris Pascoe .type = CX88_VMUX_SVIDEO, 1805b3fb91d2SChris Pascoe .vmux = 2, 1806b3fb91d2SChris Pascoe .gpio0 = 0x000067df, 1807b3fb91d2SChris Pascoe } }, 1808b3fb91d2SChris Pascoe .mpeg = CX88_MPEG_DVB, 1809b3fb91d2SChris Pascoe }, 18101117d6baSSteven Toth [CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD] = { 181176464d41SMichael Krufky .name = "DViCO FusionHDTV 7 Gold", 18121117d6baSSteven Toth .tuner_type = TUNER_XC5000, 18131117d6baSSteven Toth .radio_type = UNSET, 18141117d6baSSteven Toth .tuner_addr = ADDR_UNSET, 18151117d6baSSteven Toth .radio_addr = ADDR_UNSET, 18161117d6baSSteven Toth .input = { { 18171117d6baSSteven Toth .type = CX88_VMUX_TELEVISION, 18181117d6baSSteven Toth .vmux = 0, 181976464d41SMichael Krufky .gpio0 = 0x10df, 18201117d6baSSteven Toth }, { 18211117d6baSSteven Toth .type = CX88_VMUX_COMPOSITE1, 18221117d6baSSteven Toth .vmux = 1, 182376464d41SMichael Krufky .gpio0 = 0x16d9, 18241117d6baSSteven Toth }, { 18251117d6baSSteven Toth .type = CX88_VMUX_SVIDEO, 18261117d6baSSteven Toth .vmux = 2, 182776464d41SMichael Krufky .gpio0 = 0x16d9, 18281117d6baSSteven Toth } }, 1829d893d5dcSSteven Toth .mpeg = CX88_MPEG_DVB, 18301117d6baSSteven Toth }, 18312422a9b3SMauro Carvalho Chehab [CX88_BOARD_PROLINK_PV_8000GT] = { 18322422a9b3SMauro Carvalho Chehab .name = "Prolink Pixelview MPEG 8000GT", 18332422a9b3SMauro Carvalho Chehab .tuner_type = TUNER_XC2028, 18342422a9b3SMauro Carvalho Chehab .tuner_addr = 0x61, 18352422a9b3SMauro Carvalho Chehab .input = { { 18362422a9b3SMauro Carvalho Chehab .type = CX88_VMUX_TELEVISION, 18372422a9b3SMauro Carvalho Chehab .vmux = 0, 18382422a9b3SMauro Carvalho Chehab .gpio0 = 0x0ff, 18392422a9b3SMauro Carvalho Chehab .gpio2 = 0x0cfb, 18402422a9b3SMauro Carvalho Chehab }, { 18412422a9b3SMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1, 18422422a9b3SMauro Carvalho Chehab .vmux = 1, 18432422a9b3SMauro Carvalho Chehab .gpio2 = 0x0cfb, 18442422a9b3SMauro Carvalho Chehab }, { 18452422a9b3SMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO, 18462422a9b3SMauro Carvalho Chehab .vmux = 2, 18472422a9b3SMauro Carvalho Chehab .gpio2 = 0x0cfb, 18482422a9b3SMauro Carvalho Chehab } }, 18492422a9b3SMauro Carvalho Chehab .radio = { 18502422a9b3SMauro Carvalho Chehab .type = CX88_RADIO, 18512422a9b3SMauro Carvalho Chehab .gpio2 = 0x0cfb, 18522422a9b3SMauro Carvalho Chehab }, 18532422a9b3SMauro Carvalho Chehab }, 1854a31d2bb7SMauro Carvalho Chehab [CX88_BOARD_PROLINK_PV_GLOBAL_XTREME] = { 1855a31d2bb7SMauro Carvalho Chehab .name = "Prolink Pixelview Global Extreme", 1856a31d2bb7SMauro Carvalho Chehab .tuner_type = TUNER_XC2028, 1857a31d2bb7SMauro Carvalho Chehab .tuner_addr = 0x61, 1858a31d2bb7SMauro Carvalho Chehab .input = { { 1859a31d2bb7SMauro Carvalho Chehab .type = CX88_VMUX_TELEVISION, 1860a31d2bb7SMauro Carvalho Chehab .vmux = 0, 1861a31d2bb7SMauro Carvalho Chehab .gpio0 = 0x04fb, 1862a31d2bb7SMauro Carvalho Chehab .gpio1 = 0x04080, 1863a31d2bb7SMauro Carvalho Chehab .gpio2 = 0x0cf7, 1864a31d2bb7SMauro Carvalho Chehab }, { 1865a31d2bb7SMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1, 1866a31d2bb7SMauro Carvalho Chehab .vmux = 1, 1867a31d2bb7SMauro Carvalho Chehab .gpio0 = 0x04fb, 1868a31d2bb7SMauro Carvalho Chehab .gpio1 = 0x04080, 1869a31d2bb7SMauro Carvalho Chehab .gpio2 = 0x0cfb, 1870a31d2bb7SMauro Carvalho Chehab }, { 1871a31d2bb7SMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO, 1872a31d2bb7SMauro Carvalho Chehab .vmux = 2, 1873a31d2bb7SMauro Carvalho Chehab .gpio0 = 0x04fb, 1874a31d2bb7SMauro Carvalho Chehab .gpio1 = 0x04080, 1875a31d2bb7SMauro Carvalho Chehab .gpio2 = 0x0cfb, 1876a31d2bb7SMauro Carvalho Chehab } }, 1877a31d2bb7SMauro Carvalho Chehab .radio = { 1878a31d2bb7SMauro Carvalho Chehab .type = CX88_RADIO, 1879a31d2bb7SMauro Carvalho Chehab .gpio0 = 0x04ff, 1880a31d2bb7SMauro Carvalho Chehab .gpio1 = 0x04080, 1881a31d2bb7SMauro Carvalho Chehab .gpio2 = 0x0cf7, 1882a31d2bb7SMauro Carvalho Chehab }, 1883a31d2bb7SMauro Carvalho Chehab }, 1884399426caSMauro Carvalho Chehab /* 1885399426caSMauro Carvalho Chehab * Both radio, analog and ATSC work with this board. 1886399426caSMauro Carvalho Chehab * However, for analog to work, s5h1409 gate should be open, 1887399426caSMauro Carvalho Chehab * otherwise, tuner-xc3028 won't be detected. 1888399426caSMauro Carvalho Chehab * A proper fix require using the newer i2c methods to add 1889399426caSMauro Carvalho Chehab * tuner-xc3028 without doing an i2c probe. 189099e09eacSMauro Carvalho Chehab */ 189199e09eacSMauro Carvalho Chehab [CX88_BOARD_KWORLD_ATSC_120] = { 189299e09eacSMauro Carvalho Chehab .name = "Kworld PlusTV HD PCI 120 (ATSC 120)", 189399e09eacSMauro Carvalho Chehab .tuner_type = TUNER_XC2028, 189499e09eacSMauro Carvalho Chehab .radio_type = UNSET, 189599e09eacSMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 189699e09eacSMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 189799e09eacSMauro Carvalho Chehab .input = { { 189899e09eacSMauro Carvalho Chehab .type = CX88_VMUX_TELEVISION, 189999e09eacSMauro Carvalho Chehab .vmux = 0, 190099e09eacSMauro Carvalho Chehab .gpio0 = 0x000000ff, 190199e09eacSMauro Carvalho Chehab .gpio1 = 0x0000f35d, 190299e09eacSMauro Carvalho Chehab .gpio2 = 0x00000000, 190399e09eacSMauro Carvalho Chehab }, { 190499e09eacSMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1, 190599e09eacSMauro Carvalho Chehab .vmux = 1, 190699e09eacSMauro Carvalho Chehab .gpio0 = 0x000000ff, 190799e09eacSMauro Carvalho Chehab .gpio1 = 0x0000f37e, 190899e09eacSMauro Carvalho Chehab .gpio2 = 0x00000000, 190999e09eacSMauro Carvalho Chehab }, { 191099e09eacSMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO, 191199e09eacSMauro Carvalho Chehab .vmux = 2, 191299e09eacSMauro Carvalho Chehab .gpio0 = 0x000000ff, 191399e09eacSMauro Carvalho Chehab .gpio1 = 0x0000f37e, 191499e09eacSMauro Carvalho Chehab .gpio2 = 0x00000000, 191599e09eacSMauro Carvalho Chehab } }, 191699e09eacSMauro Carvalho Chehab .radio = { 191799e09eacSMauro Carvalho Chehab .type = CX88_RADIO, 191899e09eacSMauro Carvalho Chehab .gpio0 = 0x000000ff, 191999e09eacSMauro Carvalho Chehab .gpio1 = 0x0000f35d, 192099e09eacSMauro Carvalho Chehab .gpio2 = 0x00000000, 192199e09eacSMauro Carvalho Chehab }, 192299e09eacSMauro Carvalho Chehab .mpeg = CX88_MPEG_DVB, 192399e09eacSMauro Carvalho Chehab }, 19245bd1b663SSteven Toth [CX88_BOARD_HAUPPAUGE_HVR4000] = { 19255bd1b663SSteven Toth .name = "Hauppauge WinTV-HVR4000 DVB-S/S2/T/Hybrid", 19265bd1b663SSteven Toth .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, 19275bd1b663SSteven Toth .radio_type = UNSET, 19285bd1b663SSteven Toth .tuner_addr = ADDR_UNSET, 19295bd1b663SSteven Toth .radio_addr = ADDR_UNSET, 19305bd1b663SSteven Toth .tda9887_conf = TDA9887_PRESENT, 1931facd2366SHans Verkuil .audio_chip = CX88_AUDIO_WM8775, 19325bd1b663SSteven Toth /* 19335bd1b663SSteven Toth * GPIO0 (WINTV2000) 19345bd1b663SSteven Toth * 19355bd1b663SSteven Toth * Analogue SAT DVB-T 19365bd1b663SSteven Toth * Antenna 0xc4bf 0xc4bb 19375bd1b663SSteven Toth * Composite 0xc4bf 0xc4bb 19385bd1b663SSteven Toth * S-Video 0xc4bf 0xc4bb 19395bd1b663SSteven Toth * Composite1 0xc4ff 0xc4fb 19405bd1b663SSteven Toth * S-Video1 0xc4ff 0xc4fb 19412491fbb7SSteven Toth * 19422491fbb7SSteven Toth * BIT VALUE FUNCTION GP{x}_IO 19432491fbb7SSteven Toth * 0 1 I:? 19442491fbb7SSteven Toth * 1 1 I:? 194563248f26SDarron Broad * 2 1 O:MPEG PORT 0=DVB-T 1=DVB-S 19462491fbb7SSteven Toth * 3 1 I:? 19472491fbb7SSteven Toth * 4 1 I:? 19482491fbb7SSteven Toth * 5 1 I:? 19492491fbb7SSteven Toth * 6 0 O:INPUT SELECTOR 0=INTERNAL 1=EXPANSION 19502491fbb7SSteven Toth * 7 1 O:DVB-T DEMOD RESET LOW 19512491fbb7SSteven Toth * 19522491fbb7SSteven Toth * BIT VALUE FUNCTION GP{x}_OE 19532491fbb7SSteven Toth * 8 0 I 19542491fbb7SSteven Toth * 9 0 I 19552491fbb7SSteven Toth * a 1 O 19562491fbb7SSteven Toth * b 0 I 19572491fbb7SSteven Toth * c 0 I 19582491fbb7SSteven Toth * d 0 I 19592491fbb7SSteven Toth * e 1 O 19602491fbb7SSteven Toth * f 1 O 1961649e13a9SDarron Broad * 1962649e13a9SDarron Broad * WM8775 ADC 1963649e13a9SDarron Broad * 1964649e13a9SDarron Broad * 1: TV Audio / FM Mono 1965649e13a9SDarron Broad * 2: Line-In 1966649e13a9SDarron Broad * 3: Line-In Expansion 1967649e13a9SDarron Broad * 4: FM Stereo 19685bd1b663SSteven Toth */ 19695bd1b663SSteven Toth .input = { { 19705bd1b663SSteven Toth .type = CX88_VMUX_TELEVISION, 19715bd1b663SSteven Toth .vmux = 0, 19725bd1b663SSteven Toth .gpio0 = 0xc4bf, 1973649e13a9SDarron Broad /* 1: TV Audio / FM Mono */ 1974923ac7f7SDarron Broad .audioroute = 1, 19755bd1b663SSteven Toth }, { 19765bd1b663SSteven Toth .type = CX88_VMUX_COMPOSITE1, 19775bd1b663SSteven Toth .vmux = 1, 19785bd1b663SSteven Toth .gpio0 = 0xc4bf, 1979649e13a9SDarron Broad /* 2: Line-In */ 1980923ac7f7SDarron Broad .audioroute = 2, 19815bd1b663SSteven Toth }, { 19825bd1b663SSteven Toth .type = CX88_VMUX_SVIDEO, 19835bd1b663SSteven Toth .vmux = 2, 19845bd1b663SSteven Toth .gpio0 = 0xc4bf, 1985649e13a9SDarron Broad /* 2: Line-In */ 1986923ac7f7SDarron Broad .audioroute = 2, 19875bd1b663SSteven Toth } }, 198863248f26SDarron Broad .radio = { 198963248f26SDarron Broad .type = CX88_RADIO, 199063248f26SDarron Broad .gpio0 = 0xc4bf, 1991649e13a9SDarron Broad /* 4: FM Stereo */ 1992649e13a9SDarron Broad .audioroute = 8, 199363248f26SDarron Broad }, 19945bd1b663SSteven Toth .mpeg = CX88_MPEG_DVB, 1995363c35fcSSteven Toth .num_frontends = 2, 19965bd1b663SSteven Toth }, 19975bd1b663SSteven Toth [CX88_BOARD_HAUPPAUGE_HVR4000LITE] = { 19985bd1b663SSteven Toth .name = "Hauppauge WinTV-HVR4000(Lite) DVB-S/S2", 19995bd1b663SSteven Toth .tuner_type = UNSET, 20005bd1b663SSteven Toth .radio_type = UNSET, 20015bd1b663SSteven Toth .tuner_addr = ADDR_UNSET, 20025bd1b663SSteven Toth .radio_addr = ADDR_UNSET, 20035bd1b663SSteven Toth .input = { { 20045bd1b663SSteven Toth .type = CX88_VMUX_DVB, 20055bd1b663SSteven Toth .vmux = 0, 20065bd1b663SSteven Toth } }, 20075bd1b663SSteven Toth .mpeg = CX88_MPEG_DVB, 20085bd1b663SSteven Toth }, 2009e4aab64cSIgor M. Liplianin [CX88_BOARD_TEVII_S420] = { 2010e4aab64cSIgor M. Liplianin .name = "TeVii S420 DVB-S", 2011e4aab64cSIgor M. Liplianin .tuner_type = UNSET, 2012e4aab64cSIgor M. Liplianin .radio_type = UNSET, 2013e4aab64cSIgor M. Liplianin .tuner_addr = ADDR_UNSET, 2014e4aab64cSIgor M. Liplianin .radio_addr = ADDR_UNSET, 2015e4aab64cSIgor M. Liplianin .input = { { 2016e4aab64cSIgor M. Liplianin .type = CX88_VMUX_DVB, 2017e4aab64cSIgor M. Liplianin .vmux = 0, 2018e4aab64cSIgor M. Liplianin } }, 2019e4aab64cSIgor M. Liplianin .mpeg = CX88_MPEG_DVB, 2020e4aab64cSIgor M. Liplianin }, 2021af832623SIgor M. Liplianin [CX88_BOARD_TEVII_S460] = { 2022af832623SIgor M. Liplianin .name = "TeVii S460 DVB-S/S2", 2023af832623SIgor M. Liplianin .tuner_type = UNSET, 2024af832623SIgor M. Liplianin .radio_type = UNSET, 2025af832623SIgor M. Liplianin .tuner_addr = ADDR_UNSET, 2026af832623SIgor M. Liplianin .radio_addr = ADDR_UNSET, 2027af832623SIgor M. Liplianin .input = { { 2028af832623SIgor M. Liplianin .type = CX88_VMUX_DVB, 2029af832623SIgor M. Liplianin .vmux = 0, 2030af832623SIgor M. Liplianin } }, 2031af832623SIgor M. Liplianin .mpeg = CX88_MPEG_DVB, 2032af832623SIgor M. Liplianin }, 20330cb73639SIgor M. Liplianin [CX88_BOARD_TEVII_S464] = { 20340cb73639SIgor M. Liplianin .name = "TeVii S464 DVB-S/S2", 20350cb73639SIgor M. Liplianin .tuner_type = UNSET, 20360cb73639SIgor M. Liplianin .radio_type = UNSET, 20370cb73639SIgor M. Liplianin .tuner_addr = ADDR_UNSET, 20380cb73639SIgor M. Liplianin .radio_addr = ADDR_UNSET, 20390cb73639SIgor M. Liplianin .input = { { 20400cb73639SIgor M. Liplianin .type = CX88_VMUX_DVB, 20410cb73639SIgor M. Liplianin .vmux = 0, 20420cb73639SIgor M. Liplianin } }, 20430cb73639SIgor M. Liplianin .mpeg = CX88_MPEG_DVB, 20440cb73639SIgor M. Liplianin }, 20454cd7fb87SOleg Roitburd [CX88_BOARD_OMICOM_SS4_PCI] = { 20464cd7fb87SOleg Roitburd .name = "Omicom SS4 DVB-S/S2 PCI", 20474cd7fb87SOleg Roitburd .tuner_type = UNSET, 20484cd7fb87SOleg Roitburd .radio_type = UNSET, 20494cd7fb87SOleg Roitburd .tuner_addr = ADDR_UNSET, 20504cd7fb87SOleg Roitburd .radio_addr = ADDR_UNSET, 20514cd7fb87SOleg Roitburd .input = { { 20524cd7fb87SOleg Roitburd .type = CX88_VMUX_DVB, 20534cd7fb87SOleg Roitburd .vmux = 0, 20544cd7fb87SOleg Roitburd } }, 20554cd7fb87SOleg Roitburd .mpeg = CX88_MPEG_DVB, 20564cd7fb87SOleg Roitburd }, 20574b29631dSIgor M. Liplianin [CX88_BOARD_TBS_8910] = { 20584b29631dSIgor M. Liplianin .name = "TBS 8910 DVB-S", 20594b29631dSIgor M. Liplianin .tuner_type = UNSET, 20604b29631dSIgor M. Liplianin .radio_type = UNSET, 20614b29631dSIgor M. Liplianin .tuner_addr = ADDR_UNSET, 20624b29631dSIgor M. Liplianin .radio_addr = ADDR_UNSET, 20634b29631dSIgor M. Liplianin .input = { { 20644b29631dSIgor M. Liplianin .type = CX88_VMUX_DVB, 20654b29631dSIgor M. Liplianin .vmux = 0, 20664b29631dSIgor M. Liplianin } }, 20674b29631dSIgor M. Liplianin .mpeg = CX88_MPEG_DVB, 20684b29631dSIgor M. Liplianin }, 2069ee73042cSOleg Roitburd [CX88_BOARD_TBS_8920] = { 2070ee73042cSOleg Roitburd .name = "TBS 8920 DVB-S/S2", 2071c39ba330SHans Verkuil .tuner_type = UNSET, 2072ee73042cSOleg Roitburd .radio_type = UNSET, 2073ee73042cSOleg Roitburd .tuner_addr = ADDR_UNSET, 2074ee73042cSOleg Roitburd .radio_addr = ADDR_UNSET, 2075ee73042cSOleg Roitburd .input = { { 2076ee73042cSOleg Roitburd .type = CX88_VMUX_DVB, 2077ad5f74c0SIgor M. Liplianin .vmux = 0, 2078ad5f74c0SIgor M. Liplianin .gpio0 = 0x8080, 2079ee73042cSOleg Roitburd } }, 2080ee73042cSOleg Roitburd .mpeg = CX88_MPEG_DVB, 2081ee73042cSOleg Roitburd }, 2082cd3cde12SIgor M. Liplianin [CX88_BOARD_PROF_6200] = { 2083cd3cde12SIgor M. Liplianin .name = "Prof 6200 DVB-S", 2084cd3cde12SIgor M. Liplianin .tuner_type = UNSET, 2085cd3cde12SIgor M. Liplianin .radio_type = UNSET, 2086cd3cde12SIgor M. Liplianin .tuner_addr = ADDR_UNSET, 2087cd3cde12SIgor M. Liplianin .radio_addr = ADDR_UNSET, 2088cd3cde12SIgor M. Liplianin .input = { { 2089cd3cde12SIgor M. Liplianin .type = CX88_VMUX_DVB, 2090cd3cde12SIgor M. Liplianin .vmux = 0, 2091cd3cde12SIgor M. Liplianin } }, 2092cd3cde12SIgor M. Liplianin .mpeg = CX88_MPEG_DVB, 2093cd3cde12SIgor M. Liplianin }, 209457f51dbcSOleg Roitburd [CX88_BOARD_PROF_7300] = { 209557f51dbcSOleg Roitburd .name = "PROF 7300 DVB-S/S2", 209657f51dbcSOleg Roitburd .tuner_type = UNSET, 209757f51dbcSOleg Roitburd .radio_type = UNSET, 209857f51dbcSOleg Roitburd .tuner_addr = ADDR_UNSET, 209957f51dbcSOleg Roitburd .radio_addr = ADDR_UNSET, 210057f51dbcSOleg Roitburd .input = { { 210157f51dbcSOleg Roitburd .type = CX88_VMUX_DVB, 210257f51dbcSOleg Roitburd .vmux = 0, 210357f51dbcSOleg Roitburd } }, 210457f51dbcSOleg Roitburd .mpeg = CX88_MPEG_DVB, 210557f51dbcSOleg Roitburd }, 21064b29631dSIgor M. Liplianin [CX88_BOARD_SATTRADE_ST4200] = { 21074b29631dSIgor M. Liplianin .name = "SATTRADE ST4200 DVB-S/S2", 21084b29631dSIgor M. Liplianin .tuner_type = UNSET, 21094b29631dSIgor M. Liplianin .radio_type = UNSET, 21104b29631dSIgor M. Liplianin .tuner_addr = ADDR_UNSET, 21114b29631dSIgor M. Liplianin .radio_addr = ADDR_UNSET, 21124b29631dSIgor M. Liplianin .input = { { 21134b29631dSIgor M. Liplianin .type = CX88_VMUX_DVB, 21144b29631dSIgor M. Liplianin .vmux = 0, 21154b29631dSIgor M. Liplianin } }, 21164b29631dSIgor M. Liplianin .mpeg = CX88_MPEG_DVB, 21174b29631dSIgor M. Liplianin }, 211870101a27SStephan Wienczny [CX88_BOARD_TERRATEC_CINERGY_HT_PCI_MKII] = { 211970101a27SStephan Wienczny .name = "Terratec Cinergy HT PCI MKII", 212070101a27SStephan Wienczny .tuner_type = TUNER_XC2028, 212170101a27SStephan Wienczny .tuner_addr = 0x61, 2122b6854e3fSMiroslav Slugen .radio_type = UNSET, 2123b6854e3fSMiroslav Slugen .radio_addr = ADDR_UNSET, 212470101a27SStephan Wienczny .input = { { 212570101a27SStephan Wienczny .type = CX88_VMUX_TELEVISION, 212670101a27SStephan Wienczny .vmux = 0, 212770101a27SStephan Wienczny .gpio0 = 0x004ff, 212870101a27SStephan Wienczny .gpio1 = 0x010ff, 212970101a27SStephan Wienczny .gpio2 = 0x00001, 213070101a27SStephan Wienczny }, { 213170101a27SStephan Wienczny .type = CX88_VMUX_COMPOSITE1, 213270101a27SStephan Wienczny .vmux = 1, 213370101a27SStephan Wienczny .gpio0 = 0x004fb, 213470101a27SStephan Wienczny .gpio1 = 0x010ef, 213570101a27SStephan Wienczny .audioroute = 1, 213670101a27SStephan Wienczny }, { 213770101a27SStephan Wienczny .type = CX88_VMUX_SVIDEO, 213870101a27SStephan Wienczny .vmux = 2, 213970101a27SStephan Wienczny .gpio0 = 0x004fb, 214070101a27SStephan Wienczny .gpio1 = 0x010ef, 214170101a27SStephan Wienczny .audioroute = 1, 214270101a27SStephan Wienczny } }, 214370101a27SStephan Wienczny .radio = { 214470101a27SStephan Wienczny .type = CX88_RADIO, 214570101a27SStephan Wienczny .gpio0 = 0x004ff, 214670101a27SStephan Wienczny .gpio1 = 0x010ff, 214770101a27SStephan Wienczny .gpio2 = 0x0ff, 214870101a27SStephan Wienczny }, 214970101a27SStephan Wienczny .mpeg = CX88_MPEG_DVB, 215070101a27SStephan Wienczny }, 2151501d8cd4SSteven Toth [CX88_BOARD_HAUPPAUGE_IRONLY] = { 2152501d8cd4SSteven Toth .name = "Hauppauge WinTV-IR Only", 2153501d8cd4SSteven Toth .tuner_type = UNSET, 2154501d8cd4SSteven Toth .radio_type = UNSET, 2155501d8cd4SSteven Toth .tuner_addr = ADDR_UNSET, 2156501d8cd4SSteven Toth .radio_addr = ADDR_UNSET, 2157501d8cd4SSteven Toth }, 21583047a176SMiroslav Sustek [CX88_BOARD_WINFAST_DTV1800H] = { 21593047a176SMiroslav Sustek .name = "Leadtek WinFast DTV1800 Hybrid", 21603047a176SMiroslav Sustek .tuner_type = TUNER_XC2028, 2161b6854e3fSMiroslav Slugen .radio_type = UNSET, 21623047a176SMiroslav Sustek .tuner_addr = 0x61, 2163b6854e3fSMiroslav Slugen .radio_addr = ADDR_UNSET, 21643047a176SMiroslav Sustek /* 21653047a176SMiroslav Sustek * GPIO setting 21663047a176SMiroslav Sustek * 21673047a176SMiroslav Sustek * 2: mute (0=off,1=on) 21683047a176SMiroslav Sustek * 12: tuner reset pin 21693047a176SMiroslav Sustek * 13: audio source (0=tuner audio,1=line in) 21703047a176SMiroslav Sustek * 14: FM (0=on,1=off ???) 21713047a176SMiroslav Sustek */ 21723047a176SMiroslav Sustek .input = { { 21733047a176SMiroslav Sustek .type = CX88_VMUX_TELEVISION, 21743047a176SMiroslav Sustek .vmux = 0, 21753047a176SMiroslav Sustek .gpio0 = 0x0400, /* pin 2 = 0 */ 21763047a176SMiroslav Sustek .gpio1 = 0x6040, /* pin 13 = 0, pin 14 = 1 */ 21773047a176SMiroslav Sustek .gpio2 = 0x0000, 21783047a176SMiroslav Sustek }, { 21793047a176SMiroslav Sustek .type = CX88_VMUX_COMPOSITE1, 21803047a176SMiroslav Sustek .vmux = 1, 21813047a176SMiroslav Sustek .gpio0 = 0x0400, /* pin 2 = 0 */ 21823047a176SMiroslav Sustek .gpio1 = 0x6060, /* pin 13 = 1, pin 14 = 1 */ 21833047a176SMiroslav Sustek .gpio2 = 0x0000, 21843047a176SMiroslav Sustek }, { 21853047a176SMiroslav Sustek .type = CX88_VMUX_SVIDEO, 21863047a176SMiroslav Sustek .vmux = 2, 21873047a176SMiroslav Sustek .gpio0 = 0x0400, /* pin 2 = 0 */ 21883047a176SMiroslav Sustek .gpio1 = 0x6060, /* pin 13 = 1, pin 14 = 1 */ 21893047a176SMiroslav Sustek .gpio2 = 0x0000, 21903047a176SMiroslav Sustek } }, 21913047a176SMiroslav Sustek .radio = { 21923047a176SMiroslav Sustek .type = CX88_RADIO, 21933047a176SMiroslav Sustek .gpio0 = 0x0400, /* pin 2 = 0 */ 21943047a176SMiroslav Sustek .gpio1 = 0x6000, /* pin 13 = 0, pin 14 = 0 */ 21953047a176SMiroslav Sustek .gpio2 = 0x0000, 21963047a176SMiroslav Sustek }, 21973047a176SMiroslav Sustek .mpeg = CX88_MPEG_DVB, 21983047a176SMiroslav Sustek }, 21998eb79c0bSistvan_v@mailbox.hu [CX88_BOARD_WINFAST_DTV1800H_XC4000] = { 22008eb79c0bSistvan_v@mailbox.hu .name = "Leadtek WinFast DTV1800 H (XC4000)", 22018eb79c0bSistvan_v@mailbox.hu .tuner_type = TUNER_XC4000, 2202b6854e3fSMiroslav Slugen .radio_type = UNSET, 22038eb79c0bSistvan_v@mailbox.hu .tuner_addr = 0x61, 2204b6854e3fSMiroslav Slugen .radio_addr = ADDR_UNSET, 22058eb79c0bSistvan_v@mailbox.hu /* 22068eb79c0bSistvan_v@mailbox.hu * GPIO setting 22078eb79c0bSistvan_v@mailbox.hu * 22088eb79c0bSistvan_v@mailbox.hu * 2: mute (0=off,1=on) 22098eb79c0bSistvan_v@mailbox.hu * 12: tuner reset pin 22108eb79c0bSistvan_v@mailbox.hu * 13: audio source (0=tuner audio,1=line in) 22118eb79c0bSistvan_v@mailbox.hu * 14: FM (0=on,1=off ???) 22128eb79c0bSistvan_v@mailbox.hu */ 22138eb79c0bSistvan_v@mailbox.hu .input = { { 22148eb79c0bSistvan_v@mailbox.hu .type = CX88_VMUX_TELEVISION, 22158eb79c0bSistvan_v@mailbox.hu .vmux = 0, 22168eb79c0bSistvan_v@mailbox.hu .gpio0 = 0x0400, /* pin 2 = 0 */ 22178eb79c0bSistvan_v@mailbox.hu .gpio1 = 0x6040, /* pin 13 = 0, pin 14 = 1 */ 22188eb79c0bSistvan_v@mailbox.hu .gpio2 = 0x0000, 22198eb79c0bSistvan_v@mailbox.hu }, { 22208eb79c0bSistvan_v@mailbox.hu .type = CX88_VMUX_COMPOSITE1, 22218eb79c0bSistvan_v@mailbox.hu .vmux = 1, 22228eb79c0bSistvan_v@mailbox.hu .gpio0 = 0x0400, /* pin 2 = 0 */ 22238eb79c0bSistvan_v@mailbox.hu .gpio1 = 0x6060, /* pin 13 = 1, pin 14 = 1 */ 22248eb79c0bSistvan_v@mailbox.hu .gpio2 = 0x0000, 22258eb79c0bSistvan_v@mailbox.hu }, { 22268eb79c0bSistvan_v@mailbox.hu .type = CX88_VMUX_SVIDEO, 22278eb79c0bSistvan_v@mailbox.hu .vmux = 2, 22288eb79c0bSistvan_v@mailbox.hu .gpio0 = 0x0400, /* pin 2 = 0 */ 22298eb79c0bSistvan_v@mailbox.hu .gpio1 = 0x6060, /* pin 13 = 1, pin 14 = 1 */ 22308eb79c0bSistvan_v@mailbox.hu .gpio2 = 0x0000, 22318eb79c0bSistvan_v@mailbox.hu } }, 22328eb79c0bSistvan_v@mailbox.hu .radio = { 22338eb79c0bSistvan_v@mailbox.hu .type = CX88_RADIO, 22348eb79c0bSistvan_v@mailbox.hu .gpio0 = 0x0400, /* pin 2 = 0 */ 22358eb79c0bSistvan_v@mailbox.hu .gpio1 = 0x6000, /* pin 13 = 0, pin 14 = 0 */ 22368eb79c0bSistvan_v@mailbox.hu .gpio2 = 0x0000, 22378eb79c0bSistvan_v@mailbox.hu }, 22388eb79c0bSistvan_v@mailbox.hu .mpeg = CX88_MPEG_DVB, 22398eb79c0bSistvan_v@mailbox.hu }, 2240f271a3afSistvan_v@mailbox.hu [CX88_BOARD_WINFAST_DTV2000H_PLUS] = { 2241f271a3afSistvan_v@mailbox.hu .name = "Leadtek WinFast DTV2000 H PLUS", 2242f271a3afSistvan_v@mailbox.hu .tuner_type = TUNER_XC4000, 2243b6854e3fSMiroslav Slugen .radio_type = UNSET, 2244f271a3afSistvan_v@mailbox.hu .tuner_addr = 0x61, 2245b6854e3fSMiroslav Slugen .radio_addr = ADDR_UNSET, 2246f271a3afSistvan_v@mailbox.hu /* 2247f271a3afSistvan_v@mailbox.hu * GPIO 2248f271a3afSistvan_v@mailbox.hu * 2: 1: mute audio 2249f271a3afSistvan_v@mailbox.hu * 12: 0: reset XC4000 2250f271a3afSistvan_v@mailbox.hu * 13: 1: audio input is line in (0: tuner) 2251f271a3afSistvan_v@mailbox.hu * 14: 0: FM radio 2252f271a3afSistvan_v@mailbox.hu * 16: 0: RF input is cable 2253f271a3afSistvan_v@mailbox.hu */ 2254f271a3afSistvan_v@mailbox.hu .input = { { 2255f271a3afSistvan_v@mailbox.hu .type = CX88_VMUX_TELEVISION, 2256f271a3afSistvan_v@mailbox.hu .vmux = 0, 2257f271a3afSistvan_v@mailbox.hu .gpio0 = 0x0403, 2258f271a3afSistvan_v@mailbox.hu .gpio1 = 0xF0D7, 2259f271a3afSistvan_v@mailbox.hu .gpio2 = 0x0101, 2260f271a3afSistvan_v@mailbox.hu .gpio3 = 0x0000, 2261f271a3afSistvan_v@mailbox.hu }, { 2262f271a3afSistvan_v@mailbox.hu .type = CX88_VMUX_CABLE, 2263f271a3afSistvan_v@mailbox.hu .vmux = 0, 2264f271a3afSistvan_v@mailbox.hu .gpio0 = 0x0403, 2265f271a3afSistvan_v@mailbox.hu .gpio1 = 0xF0D7, 2266f271a3afSistvan_v@mailbox.hu .gpio2 = 0x0100, 2267f271a3afSistvan_v@mailbox.hu .gpio3 = 0x0000, 2268f271a3afSistvan_v@mailbox.hu }, { 2269f271a3afSistvan_v@mailbox.hu .type = CX88_VMUX_COMPOSITE1, 2270f271a3afSistvan_v@mailbox.hu .vmux = 1, 2271f271a3afSistvan_v@mailbox.hu .gpio0 = 0x0403, /* was 0x0407 */ 2272f271a3afSistvan_v@mailbox.hu .gpio1 = 0xF0F7, 2273f271a3afSistvan_v@mailbox.hu .gpio2 = 0x0101, 2274f271a3afSistvan_v@mailbox.hu .gpio3 = 0x0000, 2275f271a3afSistvan_v@mailbox.hu }, { 2276f271a3afSistvan_v@mailbox.hu .type = CX88_VMUX_SVIDEO, 2277f271a3afSistvan_v@mailbox.hu .vmux = 2, 2278f271a3afSistvan_v@mailbox.hu .gpio0 = 0x0403, /* was 0x0407 */ 2279f271a3afSistvan_v@mailbox.hu .gpio1 = 0xF0F7, 2280f271a3afSistvan_v@mailbox.hu .gpio2 = 0x0101, 2281f271a3afSistvan_v@mailbox.hu .gpio3 = 0x0000, 2282f271a3afSistvan_v@mailbox.hu } }, 2283f271a3afSistvan_v@mailbox.hu .radio = { 2284f271a3afSistvan_v@mailbox.hu .type = CX88_RADIO, 2285f271a3afSistvan_v@mailbox.hu .gpio0 = 0x0403, 2286f271a3afSistvan_v@mailbox.hu .gpio1 = 0xF097, 2287f271a3afSistvan_v@mailbox.hu .gpio2 = 0x0100, 2288f271a3afSistvan_v@mailbox.hu .gpio3 = 0x0000, 2289f271a3afSistvan_v@mailbox.hu }, 2290f271a3afSistvan_v@mailbox.hu .mpeg = CX88_MPEG_DVB, 2291f271a3afSistvan_v@mailbox.hu }, 2292b699c271SIgor M. Liplianin [CX88_BOARD_PROF_7301] = { 2293b699c271SIgor M. Liplianin .name = "Prof 7301 DVB-S/S2", 2294b699c271SIgor M. Liplianin .tuner_type = UNSET, 2295b699c271SIgor M. Liplianin .radio_type = UNSET, 2296b699c271SIgor M. Liplianin .tuner_addr = ADDR_UNSET, 2297b699c271SIgor M. Liplianin .radio_addr = ADDR_UNSET, 2298b699c271SIgor M. Liplianin .input = { { 2299b699c271SIgor M. Liplianin .type = CX88_VMUX_DVB, 2300b699c271SIgor M. Liplianin .vmux = 0, 2301b699c271SIgor M. Liplianin } }, 2302b699c271SIgor M. Liplianin .mpeg = CX88_MPEG_DVB, 2303b699c271SIgor M. Liplianin }, 2304111ac84aSSergey Ivanov [CX88_BOARD_TWINHAN_VP1027_DVBS] = { 2305111ac84aSSergey Ivanov .name = "Twinhan VP-1027 DVB-S", 2306c39ba330SHans Verkuil .tuner_type = UNSET, 2307111ac84aSSergey Ivanov .radio_type = UNSET, 2308111ac84aSSergey Ivanov .tuner_addr = ADDR_UNSET, 2309111ac84aSSergey Ivanov .radio_addr = ADDR_UNSET, 2310111ac84aSSergey Ivanov .input = { { 2311111ac84aSSergey Ivanov .type = CX88_VMUX_DVB, 2312111ac84aSSergey Ivanov .vmux = 0, 2313111ac84aSSergey Ivanov } }, 2314111ac84aSSergey Ivanov .mpeg = CX88_MPEG_DVB, 2315111ac84aSSergey Ivanov }, 23161da177e4SLinus Torvalds }; 23171da177e4SLinus Torvalds 23181da177e4SLinus Torvalds /* ------------------------------------------------------------------ */ 23191da177e4SLinus Torvalds /* PCI subsystem IDs */ 23201da177e4SLinus Torvalds 2321bbc83597STrent Piepho static const struct cx88_subid cx88_subids[] = { 23221da177e4SLinus Torvalds { 23231da177e4SLinus Torvalds .subvendor = 0x0070, 23241da177e4SLinus Torvalds .subdevice = 0x3400, 23251da177e4SLinus Torvalds .card = CX88_BOARD_HAUPPAUGE, 23261da177e4SLinus Torvalds }, { 23271da177e4SLinus Torvalds .subvendor = 0x0070, 23281da177e4SLinus Torvalds .subdevice = 0x3401, 23291da177e4SLinus Torvalds .card = CX88_BOARD_HAUPPAUGE, 23301da177e4SLinus Torvalds }, { 23311da177e4SLinus Torvalds .subvendor = 0x14c7, 23321da177e4SLinus Torvalds .subdevice = 0x0106, 23331da177e4SLinus Torvalds .card = CX88_BOARD_GDI, 23341da177e4SLinus Torvalds }, { 23351da177e4SLinus Torvalds .subvendor = 0x14c7, 23361da177e4SLinus Torvalds .subdevice = 0x0107, /* with mpeg encoder */ 23371da177e4SLinus Torvalds .card = CX88_BOARD_GDI, 23381da177e4SLinus Torvalds }, { 23391da177e4SLinus Torvalds .subvendor = PCI_VENDOR_ID_ATI, 23401da177e4SLinus Torvalds .subdevice = 0x00f8, 23411da177e4SLinus Torvalds .card = CX88_BOARD_ATI_WONDER_PRO, 23421da177e4SLinus Torvalds }, { 2343bc13ae11SPatrice Levesque .subvendor = PCI_VENDOR_ID_ATI, 2344bc13ae11SPatrice Levesque .subdevice = 0x00f9, 2345bc13ae11SPatrice Levesque .card = CX88_BOARD_ATI_WONDER_PRO, 2346bc13ae11SPatrice Levesque }, { 23471da177e4SLinus Torvalds .subvendor = 0x107d, 23481da177e4SLinus Torvalds .subdevice = 0x6611, 23491da177e4SLinus Torvalds .card = CX88_BOARD_WINFAST2000XP_EXPERT, 23501da177e4SLinus Torvalds }, { 23511da177e4SLinus Torvalds .subvendor = 0x107d, 23521da177e4SLinus Torvalds .subdevice = 0x6613, /* NTSC */ 23531da177e4SLinus Torvalds .card = CX88_BOARD_WINFAST2000XP_EXPERT, 23541da177e4SLinus Torvalds }, { 23551da177e4SLinus Torvalds .subvendor = 0x107d, 23561da177e4SLinus Torvalds .subdevice = 0x6620, 23571da177e4SLinus Torvalds .card = CX88_BOARD_WINFAST_DV2000, 23581da177e4SLinus Torvalds }, { 23591da177e4SLinus Torvalds .subvendor = 0x107d, 23601da177e4SLinus Torvalds .subdevice = 0x663b, 23611da177e4SLinus Torvalds .card = CX88_BOARD_LEADTEK_PVR2000, 23621da177e4SLinus Torvalds }, { 23631da177e4SLinus Torvalds .subvendor = 0x107d, 23648dd86eebSMichael Krufky .subdevice = 0x663c, 23651da177e4SLinus Torvalds .card = CX88_BOARD_LEADTEK_PVR2000, 23661da177e4SLinus Torvalds }, { 23671da177e4SLinus Torvalds .subvendor = 0x1461, 23681da177e4SLinus Torvalds .subdevice = 0x000b, 23697418f346SLubomir Bulej .card = CX88_BOARD_AVERTV_STUDIO_303, 23701da177e4SLinus Torvalds }, { 23711da177e4SLinus Torvalds .subvendor = 0x1462, 23721da177e4SLinus Torvalds .subdevice = 0x8606, 23731da177e4SLinus Torvalds .card = CX88_BOARD_MSI_TVANYWHERE_MASTER, 23741da177e4SLinus Torvalds }, { 23751da177e4SLinus Torvalds .subvendor = 0x10fc, 23761da177e4SLinus Torvalds .subdevice = 0xd003, 23771da177e4SLinus Torvalds .card = CX88_BOARD_IODATA_GVVCP3PCI, 23781da177e4SLinus Torvalds }, { 23791da177e4SLinus Torvalds .subvendor = 0x1043, 23801da177e4SLinus Torvalds .subdevice = 0x4823, /* with mpeg encoder */ 23811da177e4SLinus Torvalds .card = CX88_BOARD_ASUS_PVR_416, 23821da177e4SLinus Torvalds }, { 23831da177e4SLinus Torvalds .subvendor = 0x17de, 23841da177e4SLinus Torvalds .subdevice = 0x08a6, 23851da177e4SLinus Torvalds .card = CX88_BOARD_KWORLD_DVB_T, 23861da177e4SLinus Torvalds }, { 23871da177e4SLinus Torvalds .subvendor = 0x18ac, 23881da177e4SLinus Torvalds .subdevice = 0xd810, 2389a82decf6SMauro Carvalho Chehab .card = CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q, 23901da177e4SLinus Torvalds }, { 2391097b750eSMichael Krufky .subvendor = 0x18ac, 2392097b750eSMichael Krufky .subdevice = 0xd820, 239380d34362SMichael Krufky .card = CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_T, 2394097b750eSMichael Krufky }, { 23957df64e8cSMichael Krufky .subvendor = 0x18ac, 23967df64e8cSMichael Krufky .subdevice = 0xdb00, 23971da177e4SLinus Torvalds .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1, 23981da177e4SLinus Torvalds }, { 23991da177e4SLinus Torvalds .subvendor = 0x0070, 24001da177e4SLinus Torvalds .subdevice = 0x9002, 24011da177e4SLinus Torvalds .card = CX88_BOARD_HAUPPAUGE_DVB_T1, 24021da177e4SLinus Torvalds }, { 24031da177e4SLinus Torvalds .subvendor = 0x14f1, 24041da177e4SLinus Torvalds .subdevice = 0x0187, 24051da177e4SLinus Torvalds .card = CX88_BOARD_CONEXANT_DVB_T1, 24061da177e4SLinus Torvalds }, { 24071da177e4SLinus Torvalds .subvendor = 0x1540, 24081da177e4SLinus Torvalds .subdevice = 0x2580, 24091da177e4SLinus Torvalds .card = CX88_BOARD_PROVIDEO_PV259, 24101da177e4SLinus Torvalds }, { 24117df64e8cSMichael Krufky .subvendor = 0x18ac, 24127df64e8cSMichael Krufky .subdevice = 0xdb10, 24131da177e4SLinus Torvalds .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS, 24141da177e4SLinus Torvalds }, { 24151da177e4SLinus Torvalds .subvendor = 0x1554, 24161da177e4SLinus Torvalds .subdevice = 0x4811, 24171da177e4SLinus Torvalds .card = CX88_BOARD_PIXELVIEW, 24181da177e4SLinus Torvalds }, { 24191da177e4SLinus Torvalds .subvendor = 0x7063, 24201da177e4SLinus Torvalds .subdevice = 0x3000, /* HD-3000 card */ 24211da177e4SLinus Torvalds .card = CX88_BOARD_PCHDTV_HD3000, 24221da177e4SLinus Torvalds }, { 24237df64e8cSMichael Krufky .subvendor = 0x17de, 24247df64e8cSMichael Krufky .subdevice = 0xa8a6, 24251da177e4SLinus Torvalds .card = CX88_BOARD_DNTV_LIVE_DVB_T, 24261da177e4SLinus Torvalds }, { 24271da177e4SLinus Torvalds .subvendor = 0x0070, 24281da177e4SLinus Torvalds .subdevice = 0x2801, 24291da177e4SLinus Torvalds .card = CX88_BOARD_HAUPPAUGE_ROSLYN, 24301da177e4SLinus Torvalds }, { 24317df64e8cSMichael Krufky .subvendor = 0x14f1, 24321da177e4SLinus Torvalds .subdevice = 0x0342, 24331da177e4SLinus Torvalds .card = CX88_BOARD_DIGITALLOGIC_MEC, 24341da177e4SLinus Torvalds }, { 24351da177e4SLinus Torvalds .subvendor = 0x10fc, 24361da177e4SLinus Torvalds .subdevice = 0xd035, 24371da177e4SLinus Torvalds .card = CX88_BOARD_IODATA_GVBCTV7E, 2438a82decf6SMauro Carvalho Chehab }, { 2439a82decf6SMauro Carvalho Chehab .subvendor = 0x1421, 2440a82decf6SMauro Carvalho Chehab .subdevice = 0x0334, 2441a82decf6SMauro Carvalho Chehab .card = CX88_BOARD_ADSTECH_DVB_T_PCI, 2442e057ee11SMichael Krufky }, { 2443e057ee11SMichael Krufky .subvendor = 0x153b, 2444e057ee11SMichael Krufky .subdevice = 0x1166, 2445e057ee11SMichael Krufky .card = CX88_BOARD_TERRATEC_CINERGY_1400_DVB_T1, 24469fef07caSMichael Krufky }, { 24479fef07caSMichael Krufky .subvendor = 0x18ac, 24489fef07caSMichael Krufky .subdevice = 0xd500, 24499fef07caSMichael Krufky .card = CX88_BOARD_DVICO_FUSIONHDTV_5_GOLD, 2450d45170edSNickolay V. Shmyrev }, { 2451d45170edSNickolay V. Shmyrev .subvendor = 0x1461, 2452d45170edSNickolay V. Shmyrev .subdevice = 0x8011, 2453d45170edSNickolay V. Shmyrev .card = CX88_BOARD_AVERMEDIA_ULTRATV_MC_550, 2454e976f937SKirk Lapray }, { 2455e976f937SKirk Lapray .subvendor = PCI_VENDOR_ID_ATI, 2456e976f937SKirk Lapray .subdevice = 0xa101, 2457e976f937SKirk Lapray .card = CX88_BOARD_ATI_HDTVWONDER, 24582b5200a7SDavid Shirley }, { 24592b5200a7SDavid Shirley .subvendor = 0x107d, 24602b5200a7SDavid Shirley .subdevice = 0x665f, 24612b5200a7SDavid Shirley .card = CX88_BOARD_WINFAST_DTV1000, 24627418f346SLubomir Bulej }, { 24637418f346SLubomir Bulej .subvendor = 0x1461, 24647418f346SLubomir Bulej .subdevice = 0x000a, 24657418f346SLubomir Bulej .card = CX88_BOARD_AVERTV_303, 24660fa14aa6SSteven Toth }, { 24670fa14aa6SSteven Toth .subvendor = 0x0070, 24680fa14aa6SSteven Toth .subdevice = 0x9200, 2469fb56cb65SSteven Toth .card = CX88_BOARD_HAUPPAUGE_NOVASE2_S1, 2470fb56cb65SSteven Toth }, { 2471fb56cb65SSteven Toth .subvendor = 0x0070, 2472fb56cb65SSteven Toth .subdevice = 0x9201, 24730fa14aa6SSteven Toth .card = CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1, 24740fa14aa6SSteven Toth }, { 24750fa14aa6SSteven Toth .subvendor = 0x0070, 24760fa14aa6SSteven Toth .subdevice = 0x9202, 2477fb56cb65SSteven Toth .card = CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1, 24780e0351e3SVadim Catana }, { 24790e0351e3SVadim Catana .subvendor = 0x17de, 24800e0351e3SVadim Catana .subdevice = 0x08b2, 24810e0351e3SVadim Catana .card = CX88_BOARD_KWORLD_DVBS_100, 2482611900c1SSteven Toth }, { 2483611900c1SSteven Toth .subvendor = 0x0070, 2484611900c1SSteven Toth .subdevice = 0x9400, 2485611900c1SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR1100, 2486611900c1SSteven Toth }, { 2487611900c1SSteven Toth .subvendor = 0x0070, 2488611900c1SSteven Toth .subdevice = 0x9402, 2489611900c1SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR1100, 2490611900c1SSteven Toth }, { 2491611900c1SSteven Toth .subvendor = 0x0070, 2492611900c1SSteven Toth .subdevice = 0x9800, 2493611900c1SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR1100LP, 2494611900c1SSteven Toth }, { 2495611900c1SSteven Toth .subvendor = 0x0070, 2496611900c1SSteven Toth .subdevice = 0x9802, 2497611900c1SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR1100LP, 2498c432a072SSteven Toth }, { 2499c432a072SSteven Toth .subvendor = 0x0070, 2500c432a072SSteven Toth .subdevice = 0x9001, 2501c432a072SSteven Toth .card = CX88_BOARD_HAUPPAUGE_DVB_T1, 2502fc40b261SChris Pascoe }, { 2503fc40b261SChris Pascoe .subvendor = 0x1822, 2504fc40b261SChris Pascoe .subdevice = 0x0025, 2505fc40b261SChris Pascoe .card = CX88_BOARD_DNTV_LIVE_DVB_T_PRO, 2506f39624fdSManenti Marco }, { 2507f39624fdSManenti Marco .subvendor = 0x17de, 2508f39624fdSManenti Marco .subdevice = 0x08a1, 2509f39624fdSManenti Marco .card = CX88_BOARD_KWORLD_DVB_T_CX22702, 251043eabb4eSChris Pascoe }, { 251143eabb4eSChris Pascoe .subvendor = 0x18ac, 251243eabb4eSChris Pascoe .subdevice = 0xdb50, 251343eabb4eSChris Pascoe .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL, 25146bfb2e1fSMichael Krufky }, { 25156bfb2e1fSMichael Krufky .subvendor = 0x18ac, 2516f74a6b39SMichael Krufky .subdevice = 0xdb54, 2517f74a6b39SMichael Krufky .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL, 2518f74a6b39SMichael Krufky /* Re-branded DViCO: DigitalNow DVB-T Dual */ 2519f74a6b39SMichael Krufky }, { 2520f74a6b39SMichael Krufky .subvendor = 0x18ac, 25216bfb2e1fSMichael Krufky .subdevice = 0xdb11, 25226bfb2e1fSMichael Krufky .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS, 25236bfb2e1fSMichael Krufky /* Re-branded DViCO: UltraView DVB-T Plus */ 252444256de1SMichael Krufky }, { 2525b3fb91d2SChris Pascoe .subvendor = 0x18ac, 2526b3fb91d2SChris Pascoe .subdevice = 0xdb30, 2527b3fb91d2SChris Pascoe .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO, 2528b3fb91d2SChris Pascoe }, { 252944256de1SMichael Krufky .subvendor = 0x17de, 253044256de1SMichael Krufky .subdevice = 0x0840, 253144256de1SMichael Krufky .card = CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT, 25322d90fa44SJelle Foks }, { 25332d90fa44SJelle Foks .subvendor = 0x1421, 25342d90fa44SJelle Foks .subdevice = 0x0305, 25352d90fa44SJelle Foks .card = CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT, 2536780dfef3SChris Pascoe }, { 2537780dfef3SChris Pascoe .subvendor = 0x18ac, 2538780dfef3SChris Pascoe .subdevice = 0xdb40, 2539780dfef3SChris Pascoe .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID, 2540780dfef3SChris Pascoe }, { 2541780dfef3SChris Pascoe .subvendor = 0x18ac, 2542780dfef3SChris Pascoe .subdevice = 0xdb44, 2543780dfef3SChris Pascoe .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID, 2544da215d22SRusty Scott }, { 2545da215d22SRusty Scott .subvendor = 0x7063, 2546da215d22SRusty Scott .subdevice = 0x5500, 2547da215d22SRusty Scott .card = CX88_BOARD_PCHDTV_HD5500, 2548b3038304SValentin Zagura }, { 2549b3038304SValentin Zagura .subvendor = 0x17de, 2550b3038304SValentin Zagura .subdevice = 0x0841, 2551b3038304SValentin Zagura .card = CX88_BOARD_KWORLD_MCE200_DELUXE, 2552fc066478SMichael Krufky }, { 2553fc066478SMichael Krufky .subvendor = 0x1822, 2554fc066478SMichael Krufky .subdevice = 0x0019, 2555fc066478SMichael Krufky .card = CX88_BOARD_DNTV_LIVE_DVB_T_PRO, 2556a3124622SAngelo Marconi }, { 2557a3124622SAngelo Marconi .subvendor = 0x1554, 2558a3124622SAngelo Marconi .subdevice = 0x4813, 2559a3124622SAngelo Marconi .card = CX88_BOARD_PIXELVIEW_PLAYTV_P7000, 2560680543c5SRicardo Cerqueira }, { 2561680543c5SRicardo Cerqueira .subvendor = 0x14f1, 2562680543c5SRicardo Cerqueira .subdevice = 0x0842, 2563be4f4519SRicardo Cerqueira .card = CX88_BOARD_NPGTECH_REALTV_TOP10FM, 25644bd6e9d9SMalcolm Valentine }, { 25654bd6e9d9SMalcolm Valentine .subvendor = 0x107d, 25664bd6e9d9SMalcolm Valentine .subdevice = 0x665e, 25674bd6e9d9SMalcolm Valentine .card = CX88_BOARD_WINFAST_DTV2000H, 256865271bffSMichael Krufky }, { 25694d14c833SVlastimil Labsky .subvendor = 0x107d, 25704d14c833SVlastimil Labsky .subdevice = 0x6f2b, 25714d14c833SVlastimil Labsky .card = CX88_BOARD_WINFAST_DTV2000H_J, 25724d14c833SVlastimil Labsky }, { 257365271bffSMichael Krufky .subvendor = 0x18ac, 257465271bffSMichael Krufky .subdevice = 0xd800, /* FusionHDTV 3 Gold (original revision) */ 257565271bffSMichael Krufky .card = CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q, 2576c02a34f4SSaqeb Akhter }, { 2577c02a34f4SSaqeb Akhter .subvendor = 0x14f1, 2578c02a34f4SSaqeb Akhter .subdevice = 0x0084, 2579c02a34f4SSaqeb Akhter .card = CX88_BOARD_GENIATECH_DVBS, 2580ad10c930SEric Thomas }, { 2581ad10c930SEric Thomas .subvendor = 0x0070, 2582ad10c930SEric Thomas .subdevice = 0x1404, 2583ad10c930SEric Thomas .card = CX88_BOARD_HAUPPAUGE_HVR3000, 25845dbaa2cbSMichael Krufky }, { 25854f3ca2f1SDirk Herrendoerfer .subvendor = 0x18ac, 25864f3ca2f1SDirk Herrendoerfer .subdevice = 0xdc00, 25874f3ca2f1SDirk Herrendoerfer .card = CX88_BOARD_SAMSUNG_SMT_7020, 25884f3ca2f1SDirk Herrendoerfer }, { 25894f3ca2f1SDirk Herrendoerfer .subvendor = 0x18ac, 25904f3ca2f1SDirk Herrendoerfer .subdevice = 0xdccd, 25914f3ca2f1SDirk Herrendoerfer .card = CX88_BOARD_SAMSUNG_SMT_7020, 25924f3ca2f1SDirk Herrendoerfer }, { 25935dbaa2cbSMichael Krufky .subvendor = 0x1461, 25945dbaa2cbSMichael Krufky .subdevice = 0xc111, /* AverMedia M150-D */ 25955dbaa2cbSMichael Krufky /* This board is known to work with the ASUS PVR416 config */ 25965dbaa2cbSMichael Krufky .card = CX88_BOARD_ASUS_PVR_416, 25972acadefaSDavid Bussenschutt }, { 25982acadefaSDavid Bussenschutt .subvendor = 0xc180, 25992acadefaSDavid Bussenschutt .subdevice = 0xc980, 26002acadefaSDavid Bussenschutt .card = CX88_BOARD_TE_DTV_250_OEM_SWANN, 2601aa481a65SSteven Toth }, { 2602aa481a65SSteven Toth .subvendor = 0x0070, 2603aa481a65SSteven Toth .subdevice = 0x9600, 2604aa481a65SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR1300, 2605aa481a65SSteven Toth }, { 2606aa481a65SSteven Toth .subvendor = 0x0070, 2607aa481a65SSteven Toth .subdevice = 0x9601, 2608aa481a65SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR1300, 2609aa481a65SSteven Toth }, { 2610aa481a65SSteven Toth .subvendor = 0x0070, 2611aa481a65SSteven Toth .subdevice = 0x9602, 2612aa481a65SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR1300, 2613dab489dfSMichael Krufky }, { 2614dab489dfSMichael Krufky .subvendor = 0x107d, 2615dab489dfSMichael Krufky .subdevice = 0x6632, 2616dab489dfSMichael Krufky .card = CX88_BOARD_LEADTEK_PVR2000, 26174508f598SMichael Krufky }, { 26184508f598SMichael Krufky .subvendor = 0x12ab, 26194508f598SMichael Krufky .subdevice = 0x2300, /* Club3D Zap TV2100 */ 26204508f598SMichael Krufky .card = CX88_BOARD_KWORLD_DVB_T_CX22702, 26213979ecc7SSteven Toth }, { 26223979ecc7SSteven Toth .subvendor = 0x0070, 26233979ecc7SSteven Toth .subdevice = 0x9000, 26243979ecc7SSteven Toth .card = CX88_BOARD_HAUPPAUGE_DVB_T1, 262576dc82abSSteven Toth }, { 262676dc82abSSteven Toth .subvendor = 0x0070, 262776dc82abSSteven Toth .subdevice = 0x1400, 262876dc82abSSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR3000, 262976dc82abSSteven Toth }, { 263076dc82abSSteven Toth .subvendor = 0x0070, 263176dc82abSSteven Toth .subdevice = 0x1401, 263276dc82abSSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR3000, 263376dc82abSSteven Toth }, { 263476dc82abSSteven Toth .subvendor = 0x0070, 263576dc82abSSteven Toth .subdevice = 0x1402, 263676dc82abSSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR3000, 2637733aeaf4SMichael Krufky }, { 2638733aeaf4SMichael Krufky .subvendor = 0x1421, 2639733aeaf4SMichael Krufky .subdevice = 0x0341, /* ADS Tech InstantTV DVB-S */ 2640733aeaf4SMichael Krufky .card = CX88_BOARD_KWORLD_DVBS_100, 26417cb47a14SDaniel Gimpelevich }, { 26427cb47a14SDaniel Gimpelevich .subvendor = 0x1421, 26437cb47a14SDaniel Gimpelevich .subdevice = 0x0390, 26447cb47a14SDaniel Gimpelevich .card = CX88_BOARD_ADSTECH_PTV_390, 264560464da8SSteven Toth }, { 264660464da8SSteven Toth .subvendor = 0x11bd, 264760464da8SSteven Toth .subdevice = 0x0051, 264860464da8SSteven Toth .card = CX88_BOARD_PINNACLE_PCTV_HD_800i, 26495c00fac0SSteven Toth }, { 26505c00fac0SSteven Toth .subvendor = 0x18ac, 26515c00fac0SSteven Toth .subdevice = 0xd530, 26525c00fac0SSteven Toth .card = CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO, 26539507901eSMauro Carvalho Chehab }, { 26549507901eSMauro Carvalho Chehab .subvendor = 0x12ab, 26559507901eSMauro Carvalho Chehab .subdevice = 0x1788, 26569507901eSMauro Carvalho Chehab .card = CX88_BOARD_PINNACLE_HYBRID_PCTV, 26579507901eSMauro Carvalho Chehab }, { 26589507901eSMauro Carvalho Chehab .subvendor = 0x14f1, 26599507901eSMauro Carvalho Chehab .subdevice = 0xea3d, 26609507901eSMauro Carvalho Chehab .card = CX88_BOARD_POWERCOLOR_REAL_ANGEL, 26619507901eSMauro Carvalho Chehab }, { 26629507901eSMauro Carvalho Chehab .subvendor = 0x107d, 26639507901eSMauro Carvalho Chehab .subdevice = 0x6f18, 26649507901eSMauro Carvalho Chehab .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL, 26659507901eSMauro Carvalho Chehab }, { 26669507901eSMauro Carvalho Chehab .subvendor = 0x14f1, 26679507901eSMauro Carvalho Chehab .subdevice = 0x8852, 26689507901eSMauro Carvalho Chehab .card = CX88_BOARD_GENIATECH_X8000_MT, 26691117d6baSSteven Toth }, { 26701117d6baSSteven Toth .subvendor = 0x18ac, 26711117d6baSSteven Toth .subdevice = 0xd610, 26721117d6baSSteven Toth .card = CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD, 26732422a9b3SMauro Carvalho Chehab }, { 26742422a9b3SMauro Carvalho Chehab .subvendor = 0x1554, 26752422a9b3SMauro Carvalho Chehab .subdevice = 0x4935, 26762422a9b3SMauro Carvalho Chehab .card = CX88_BOARD_PROLINK_PV_8000GT, 267799e09eacSMauro Carvalho Chehab }, { 2678a31d2bb7SMauro Carvalho Chehab .subvendor = 0x1554, 2679a31d2bb7SMauro Carvalho Chehab .subdevice = 0x4976, 2680a31d2bb7SMauro Carvalho Chehab .card = CX88_BOARD_PROLINK_PV_GLOBAL_XTREME, 2681a31d2bb7SMauro Carvalho Chehab }, { 268299e09eacSMauro Carvalho Chehab .subvendor = 0x17de, 268399e09eacSMauro Carvalho Chehab .subdevice = 0x08c1, 268499e09eacSMauro Carvalho Chehab .card = CX88_BOARD_KWORLD_ATSC_120, 26855bd1b663SSteven Toth }, { 26865bd1b663SSteven Toth .subvendor = 0x0070, 26875bd1b663SSteven Toth .subdevice = 0x6900, 26885bd1b663SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR4000, 26895bd1b663SSteven Toth }, { 26905bd1b663SSteven Toth .subvendor = 0x0070, 26915bd1b663SSteven Toth .subdevice = 0x6904, 26925bd1b663SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR4000, 26935bd1b663SSteven Toth }, { 26945bd1b663SSteven Toth .subvendor = 0x0070, 26955bd1b663SSteven Toth .subdevice = 0x6902, 26965bd1b663SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR4000, 26975bd1b663SSteven Toth }, { 26985bd1b663SSteven Toth .subvendor = 0x0070, 26995bd1b663SSteven Toth .subdevice = 0x6905, 27005bd1b663SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR4000LITE, 27015bd1b663SSteven Toth }, { 27025bd1b663SSteven Toth .subvendor = 0x0070, 27035bd1b663SSteven Toth .subdevice = 0x6906, 27045bd1b663SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR4000LITE, 2705af832623SIgor M. Liplianin }, { 2706e4aab64cSIgor M. Liplianin .subvendor = 0xd420, 2707e4aab64cSIgor M. Liplianin .subdevice = 0x9022, 2708e4aab64cSIgor M. Liplianin .card = CX88_BOARD_TEVII_S420, 2709e4aab64cSIgor M. Liplianin }, { 2710e4aab64cSIgor M. Liplianin .subvendor = 0xd460, 2711af832623SIgor M. Liplianin .subdevice = 0x9022, 2712af832623SIgor M. Liplianin .card = CX88_BOARD_TEVII_S460, 27134cd7fb87SOleg Roitburd }, { 27140cb73639SIgor M. Liplianin .subvendor = 0xd464, 27150cb73639SIgor M. Liplianin .subdevice = 0x9022, 27160cb73639SIgor M. Liplianin .card = CX88_BOARD_TEVII_S464, 27170cb73639SIgor M. Liplianin }, { 27184cd7fb87SOleg Roitburd .subvendor = 0xA044, 27194cd7fb87SOleg Roitburd .subdevice = 0x2011, 27204cd7fb87SOleg Roitburd .card = CX88_BOARD_OMICOM_SS4_PCI, 2721ee73042cSOleg Roitburd }, { 27224b29631dSIgor M. Liplianin .subvendor = 0x8910, 27234b29631dSIgor M. Liplianin .subdevice = 0x8888, 27244b29631dSIgor M. Liplianin .card = CX88_BOARD_TBS_8910, 27254b29631dSIgor M. Liplianin }, { 2726ee73042cSOleg Roitburd .subvendor = 0x8920, 2727ee73042cSOleg Roitburd .subdevice = 0x8888, 2728ee73042cSOleg Roitburd .card = CX88_BOARD_TBS_8920, 272957f51dbcSOleg Roitburd }, { 2730cd3cde12SIgor M. Liplianin .subvendor = 0xb022, 2731cd3cde12SIgor M. Liplianin .subdevice = 0x3022, 2732cd3cde12SIgor M. Liplianin .card = CX88_BOARD_PROF_6200, 2733cd3cde12SIgor M. Liplianin }, { 273457f51dbcSOleg Roitburd .subvendor = 0xB033, 273557f51dbcSOleg Roitburd .subdevice = 0x3033, 273657f51dbcSOleg Roitburd .card = CX88_BOARD_PROF_7300, 27374b29631dSIgor M. Liplianin }, { 27384b29631dSIgor M. Liplianin .subvendor = 0xb200, 27394b29631dSIgor M. Liplianin .subdevice = 0x4200, 27404b29631dSIgor M. Liplianin .card = CX88_BOARD_SATTRADE_ST4200, 274170101a27SStephan Wienczny }, { 274270101a27SStephan Wienczny .subvendor = 0x153b, 274370101a27SStephan Wienczny .subdevice = 0x1177, 274470101a27SStephan Wienczny .card = CX88_BOARD_TERRATEC_CINERGY_HT_PCI_MKII, 2745501d8cd4SSteven Toth }, { 2746501d8cd4SSteven Toth .subvendor = 0x0070, 2747501d8cd4SSteven Toth .subdevice = 0x9290, 2748501d8cd4SSteven Toth .card = CX88_BOARD_HAUPPAUGE_IRONLY, 27493047a176SMiroslav Sustek }, { 27503047a176SMiroslav Sustek .subvendor = 0x107d, 27513047a176SMiroslav Sustek .subdevice = 0x6654, 27523047a176SMiroslav Sustek .card = CX88_BOARD_WINFAST_DTV1800H, 275314422f9dSMauro Carvalho Chehab }, { 27548eb79c0bSistvan_v@mailbox.hu /* WinFast DTV1800 H with XC4000 tuner */ 27558eb79c0bSistvan_v@mailbox.hu .subvendor = 0x107d, 27568eb79c0bSistvan_v@mailbox.hu .subdevice = 0x6f38, 27578eb79c0bSistvan_v@mailbox.hu .card = CX88_BOARD_WINFAST_DTV1800H_XC4000, 27588eb79c0bSistvan_v@mailbox.hu }, { 2759f271a3afSistvan_v@mailbox.hu .subvendor = 0x107d, 2760f271a3afSistvan_v@mailbox.hu .subdevice = 0x6f42, 2761f271a3afSistvan_v@mailbox.hu .card = CX88_BOARD_WINFAST_DTV2000H_PLUS, 2762f271a3afSistvan_v@mailbox.hu }, { 276314422f9dSMauro Carvalho Chehab /* PVR2000 PAL Model [107d:6630] */ 276414422f9dSMauro Carvalho Chehab .subvendor = 0x107d, 276514422f9dSMauro Carvalho Chehab .subdevice = 0x6630, 276614422f9dSMauro Carvalho Chehab .card = CX88_BOARD_LEADTEK_PVR2000, 276714422f9dSMauro Carvalho Chehab }, { 276814422f9dSMauro Carvalho Chehab /* PVR2000 PAL Model [107d:6638] */ 276914422f9dSMauro Carvalho Chehab .subvendor = 0x107d, 277014422f9dSMauro Carvalho Chehab .subdevice = 0x6638, 277114422f9dSMauro Carvalho Chehab .card = CX88_BOARD_LEADTEK_PVR2000, 277214422f9dSMauro Carvalho Chehab }, { 277314422f9dSMauro Carvalho Chehab /* PVR2000 NTSC Model [107d:6631] */ 277414422f9dSMauro Carvalho Chehab .subvendor = 0x107d, 277514422f9dSMauro Carvalho Chehab .subdevice = 0x6631, 277614422f9dSMauro Carvalho Chehab .card = CX88_BOARD_LEADTEK_PVR2000, 277714422f9dSMauro Carvalho Chehab }, { 277814422f9dSMauro Carvalho Chehab /* PVR2000 NTSC Model [107d:6637] */ 277914422f9dSMauro Carvalho Chehab .subvendor = 0x107d, 278014422f9dSMauro Carvalho Chehab .subdevice = 0x6637, 278114422f9dSMauro Carvalho Chehab .card = CX88_BOARD_LEADTEK_PVR2000, 278214422f9dSMauro Carvalho Chehab }, { 278314422f9dSMauro Carvalho Chehab /* PVR2000 NTSC Model [107d:663d] */ 278414422f9dSMauro Carvalho Chehab .subvendor = 0x107d, 278514422f9dSMauro Carvalho Chehab .subdevice = 0x663d, 278614422f9dSMauro Carvalho Chehab .card = CX88_BOARD_LEADTEK_PVR2000, 278714422f9dSMauro Carvalho Chehab }, { 278814422f9dSMauro Carvalho Chehab /* DV2000 NTSC Model [107d:6621] */ 278914422f9dSMauro Carvalho Chehab .subvendor = 0x107d, 279014422f9dSMauro Carvalho Chehab .subdevice = 0x6621, 279114422f9dSMauro Carvalho Chehab .card = CX88_BOARD_WINFAST_DV2000, 279214422f9dSMauro Carvalho Chehab }, { 279314422f9dSMauro Carvalho Chehab /* TV2000 XP Global [107d:6618] */ 279414422f9dSMauro Carvalho Chehab .subvendor = 0x107d, 279514422f9dSMauro Carvalho Chehab .subdevice = 0x6618, 279614422f9dSMauro Carvalho Chehab .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL, 2797b699c271SIgor M. Liplianin }, { 279884463d5fSIstvan Varga /* TV2000 XP Global [107d:6618] */ 279984463d5fSIstvan Varga .subvendor = 0x107d, 280084463d5fSIstvan Varga .subdevice = 0x6619, 280184463d5fSIstvan Varga .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL, 280284463d5fSIstvan Varga }, { 280384463d5fSIstvan Varga /* WinFast TV2000 XP Global with XC4000 tuner */ 280484463d5fSIstvan Varga .subvendor = 0x107d, 280584463d5fSIstvan Varga .subdevice = 0x6f36, 280684463d5fSIstvan Varga .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F36, 280784463d5fSIstvan Varga }, { 280884463d5fSIstvan Varga /* WinFast TV2000 XP Global with XC4000 tuner and different GPIOs */ 280984463d5fSIstvan Varga .subvendor = 0x107d, 281084463d5fSIstvan Varga .subdevice = 0x6f43, 281184463d5fSIstvan Varga .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F43, 281284463d5fSIstvan Varga }, { 2813b699c271SIgor M. Liplianin .subvendor = 0xb034, 2814b699c271SIgor M. Liplianin .subdevice = 0x3034, 2815b699c271SIgor M. Liplianin .card = CX88_BOARD_PROF_7301, 2816111ac84aSSergey Ivanov }, { 2817111ac84aSSergey Ivanov .subvendor = 0x1822, 2818111ac84aSSergey Ivanov .subdevice = 0x0023, 2819111ac84aSSergey Ivanov .card = CX88_BOARD_TWINHAN_VP1027_DVBS, 28202422a9b3SMauro Carvalho Chehab }, 28211da177e4SLinus Torvalds }; 28221da177e4SLinus Torvalds 2823399426caSMauro Carvalho Chehab /* 2824399426caSMauro Carvalho Chehab * some leadtek specific stuff 2825399426caSMauro Carvalho Chehab */ 282669f7e75aSJean Delvare static void leadtek_eeprom(struct cx88_core *core, u8 *eeprom_data) 28271da177e4SLinus Torvalds { 28281da177e4SLinus Torvalds if (eeprom_data[4] != 0x7d || 28291da177e4SLinus Torvalds eeprom_data[5] != 0x10 || 28301da177e4SLinus Torvalds eeprom_data[7] != 0x66) { 283165bc2fe8SMauro Carvalho Chehab pr_warn("Leadtek eeprom invalid.\n"); 28321da177e4SLinus Torvalds return; 28331da177e4SLinus Torvalds } 28341da177e4SLinus Torvalds 283514422f9dSMauro Carvalho Chehab /* Terry Wu <terrywu2009@gmail.com> */ 283614422f9dSMauro Carvalho Chehab switch (eeprom_data[6]) { 283714422f9dSMauro Carvalho Chehab case 0x13: /* SSID 6613 for TV2000 XP Expert NTSC Model */ 283814422f9dSMauro Carvalho Chehab case 0x21: /* SSID 6621 for DV2000 NTSC Model */ 283914422f9dSMauro Carvalho Chehab case 0x31: /* SSID 6631 for PVR2000 NTSC Model */ 284014422f9dSMauro Carvalho Chehab case 0x37: /* SSID 6637 for PVR2000 NTSC Model */ 284114422f9dSMauro Carvalho Chehab case 0x3d: /* SSID 6637 for PVR2000 NTSC Model */ 284214422f9dSMauro Carvalho Chehab core->board.tuner_type = TUNER_PHILIPS_FM1236_MK3; 284314422f9dSMauro Carvalho Chehab break; 284414422f9dSMauro Carvalho Chehab default: 284514422f9dSMauro Carvalho Chehab core->board.tuner_type = TUNER_PHILIPS_FM1216ME_MK3; 284614422f9dSMauro Carvalho Chehab break; 284714422f9dSMauro Carvalho Chehab } 28481da177e4SLinus Torvalds 284965bc2fe8SMauro Carvalho Chehab pr_info("Leadtek Winfast 2000XP Expert config: tuner=%d, eeprom[0]=0x%02x\n", 28500f19e65bSMauro Carvalho Chehab core->board.tuner_type, eeprom_data[0]); 28511da177e4SLinus Torvalds } 28521da177e4SLinus Torvalds 28531da177e4SLinus Torvalds static void hauppauge_eeprom(struct cx88_core *core, u8 *eeprom_data) 28541da177e4SLinus Torvalds { 28551da177e4SLinus Torvalds struct tveeprom tv; 28561da177e4SLinus Torvalds 2857446aba66SMauro Carvalho Chehab tveeprom_hauppauge_analog(&tv, eeprom_data); 28586a59d64cSTrent Piepho core->board.tuner_type = tv.tuner_type; 28590345c387SSteven Toth core->tuner_formats = tv.tuner_formats; 28606a59d64cSTrent Piepho core->board.radio.type = tv.has_radio ? CX88_RADIO : 0; 286148a8a03bSMauro Carvalho Chehab core->model = tv.model; 28621da177e4SLinus Torvalds 28631da177e4SLinus Torvalds /* Make sure we support the board model */ 2864399426caSMauro Carvalho Chehab switch (tv.model) { 286576dc82abSSteven Toth case 14009: /* WinTV-HVR3000 (Retail, IR, b/panel video, 3.5mm audio in) */ 286676dc82abSSteven Toth case 14019: /* WinTV-HVR3000 (Retail, IR Blaster, b/panel video, 3.5mm audio in) */ 286776dc82abSSteven Toth case 14029: /* WinTV-HVR3000 (Retail, IR, b/panel video, 3.5mm audio in - 880 bridge) */ 286876dc82abSSteven Toth case 14109: /* WinTV-HVR3000 (Retail, IR, b/panel video, 3.5mm audio in - low profile) */ 286976dc82abSSteven Toth case 14129: /* WinTV-HVR3000 (Retail, IR, b/panel video, 3.5mm audio in - 880 bridge - LP) */ 287076dc82abSSteven Toth case 14559: /* WinTV-HVR3000 (OEM, no IR, b/panel video, 3.5mm audio in) */ 2871ad10c930SEric Thomas case 14569: /* WinTV-HVR3000 (OEM, no IR, no back panel video) */ 287276dc82abSSteven Toth case 14659: /* WinTV-HVR3000 (OEM, no IR, b/panel video, RCA audio in - Low profile) */ 287376dc82abSSteven Toth case 14669: /* WinTV-HVR3000 (OEM, no IR, no b/panel video - Low profile) */ 28740345c387SSteven Toth case 28552: /* WinTV-PVR 'Roslyn' (No IR) */ 287542d2b6efSIan Pickworth case 34519: /* WinTV-PCI-FM */ 28765bd1b663SSteven Toth case 69009: 28775bd1b663SSteven Toth /* WinTV-HVR4000 (DVBS/S2/T, Video and IR, back panel inputs) */ 28785bd1b663SSteven Toth case 69100: /* WinTV-HVR4000LITE (DVBS/S2, IR) */ 28795bd1b663SSteven Toth case 69500: /* WinTV-HVR4000LITE (DVBS/S2, No IR) */ 28805bd1b663SSteven Toth case 69559: 28815bd1b663SSteven Toth /* WinTV-HVR4000 (DVBS/S2/T, Video no IR, back panel inputs) */ 28825bd1b663SSteven Toth case 69569: /* WinTV-HVR4000 (DVBS/S2/T, Video no IR) */ 2883759324c3SSteven Toth case 90002: /* Nova-T-PCI (9002) */ 28840fe22865SSteven Toth case 92001: /* Nova-S-Plus (Video and IR) */ 28850fe22865SSteven Toth case 92002: /* Nova-S-Plus (Video and IR) */ 28860fe22865SSteven Toth case 90003: /* Nova-T-PCI (9002 No RF out) */ 2887759324c3SSteven Toth case 90500: /* Nova-T-PCI (oem) */ 2888759324c3SSteven Toth case 90501: /* Nova-T-PCI (oem/IR) */ 28893ca0ea98SSteven Toth case 92000: /* Nova-SE2 (OEM, No Video or IR) */ 2890501d8cd4SSteven Toth case 92900: /* WinTV-IROnly (No analog or digital Video inputs) */ 2891611900c1SSteven Toth case 94009: /* WinTV-HVR1100 (Video and IR Retail) */ 2892611900c1SSteven Toth case 94501: /* WinTV-HVR1100 (Video and IR OEM) */ 2893aa481a65SSteven Toth case 96009: /* WinTV-HVR1300 (PAL Video, MPEG Video and IR RX) */ 2894aa481a65SSteven Toth case 96019: /* WinTV-HVR1300 (PAL Video, MPEG Video and IR RX/TX) */ 2895aa481a65SSteven Toth case 96559: /* WinTV-HVR1300 (PAL Video, MPEG Video no IR) */ 2896aa481a65SSteven Toth case 96569: /* WinTV-HVR1300 () */ 2897aa481a65SSteven Toth case 96659: /* WinTV-HVR1300 () */ 2898611900c1SSteven Toth case 98559: /* WinTV-HVR1100LP (Video no IR, Retail - Low Profile) */ 28991da177e4SLinus Torvalds /* known */ 29001da177e4SLinus Torvalds break; 29014f3ca2f1SDirk Herrendoerfer case CX88_BOARD_SAMSUNG_SMT_7020: 29024f3ca2f1SDirk Herrendoerfer cx_set(MO_GP0_IO, 0x008989FF); 29034f3ca2f1SDirk Herrendoerfer break; 29041da177e4SLinus Torvalds default: 290565bc2fe8SMauro Carvalho Chehab pr_warn("warning: unknown hauppauge model #%d\n", tv.model); 29061da177e4SLinus Torvalds break; 29071da177e4SLinus Torvalds } 29081da177e4SLinus Torvalds 290965bc2fe8SMauro Carvalho Chehab pr_info("hauppauge eeprom: model=%d\n", tv.model); 29101da177e4SLinus Torvalds } 29111da177e4SLinus Torvalds 2912399426caSMauro Carvalho Chehab /* 2913399426caSMauro Carvalho Chehab * some GDI (was: Modular Technology) specific stuff 2914399426caSMauro Carvalho Chehab */ 29151da177e4SLinus Torvalds 29162e4e98e7Slawrence rust static const struct { 29171da177e4SLinus Torvalds int id; 29181da177e4SLinus Torvalds int fm; 29192e4e98e7Slawrence rust const char *name; 29201da177e4SLinus Torvalds } gdi_tuner[] = { 2921c39ba330SHans Verkuil [0x01] = { .id = UNSET, 29221da177e4SLinus Torvalds .name = "NTSC_M" }, 2923c39ba330SHans Verkuil [0x02] = { .id = UNSET, 29241da177e4SLinus Torvalds .name = "PAL_B" }, 2925c39ba330SHans Verkuil [0x03] = { .id = UNSET, 29261da177e4SLinus Torvalds .name = "PAL_I" }, 2927c39ba330SHans Verkuil [0x04] = { .id = UNSET, 29281da177e4SLinus Torvalds .name = "PAL_D" }, 2929c39ba330SHans Verkuil [0x05] = { .id = UNSET, 29301da177e4SLinus Torvalds .name = "SECAM" }, 29311da177e4SLinus Torvalds 2932c39ba330SHans Verkuil [0x10] = { .id = UNSET, 29331da177e4SLinus Torvalds .fm = 1, 29341da177e4SLinus Torvalds .name = "TEMIC_4049" }, 29351da177e4SLinus Torvalds [0x11] = { .id = TUNER_TEMIC_4136FY5, 29361da177e4SLinus Torvalds .name = "TEMIC_4136" }, 2937c39ba330SHans Verkuil [0x12] = { .id = UNSET, 29381da177e4SLinus Torvalds .name = "TEMIC_4146" }, 29391da177e4SLinus Torvalds 29401da177e4SLinus Torvalds [0x20] = { .id = TUNER_PHILIPS_FQ1216ME, 29411da177e4SLinus Torvalds .fm = 1, 29421da177e4SLinus Torvalds .name = "PHILIPS_FQ1216_MK3" }, 2943c39ba330SHans Verkuil [0x21] = { .id = UNSET, .fm = 1, 29441da177e4SLinus Torvalds .name = "PHILIPS_FQ1236_MK3" }, 2945c39ba330SHans Verkuil [0x22] = { .id = UNSET, 29461da177e4SLinus Torvalds .name = "PHILIPS_FI1236_MK3" }, 2947c39ba330SHans Verkuil [0x23] = { .id = UNSET, 29481da177e4SLinus Torvalds .name = "PHILIPS_FI1216_MK3" }, 29491da177e4SLinus Torvalds }; 29501da177e4SLinus Torvalds 29511da177e4SLinus Torvalds static void gdi_eeprom(struct cx88_core *core, u8 *eeprom_data) 29521da177e4SLinus Torvalds { 29532e4e98e7Slawrence rust const char *name = (eeprom_data[0x0d] < ARRAY_SIZE(gdi_tuner)) 29541da177e4SLinus Torvalds ? gdi_tuner[eeprom_data[0x0d]].name : NULL; 29551da177e4SLinus Torvalds 295665bc2fe8SMauro Carvalho Chehab pr_info("GDI: tuner=%s\n", name ? name : "unknown"); 2957399426caSMauro Carvalho Chehab if (!name) 29581da177e4SLinus Torvalds return; 29596a59d64cSTrent Piepho core->board.tuner_type = gdi_tuner[eeprom_data[0x0d]].id; 29606a59d64cSTrent Piepho core->board.radio.type = gdi_tuner[eeprom_data[0x0d]].fm ? 29616a59d64cSTrent Piepho CX88_RADIO : 0; 29621da177e4SLinus Torvalds } 29631da177e4SLinus Torvalds 2964399426caSMauro Carvalho Chehab /* 2965399426caSMauro Carvalho Chehab * some Divco specific stuff 2966399426caSMauro Carvalho Chehab */ 29670be51b46SMauro Carvalho Chehab static int cx88_dvico_xc2028_callback(struct cx88_core *core, 29680be51b46SMauro Carvalho Chehab int command, int arg) 2969b3fb91d2SChris Pascoe { 2970b3fb91d2SChris Pascoe switch (command) { 2971b3fb91d2SChris Pascoe case XC2028_TUNER_RESET: 2972d7cba043SMichael Krufky switch (core->boardnr) { 2973d7cba043SMichael Krufky case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO: 2974d7cba043SMichael Krufky /* GPIO-4 xc3028 tuner */ 2975d7cba043SMichael Krufky 2976d7cba043SMichael Krufky cx_set(MO_GP0_IO, 0x00001000); 2977d7cba043SMichael Krufky cx_clear(MO_GP0_IO, 0x00000010); 2978d7cba043SMichael Krufky msleep(100); 2979d7cba043SMichael Krufky cx_set(MO_GP0_IO, 0x00000010); 2980d7cba043SMichael Krufky msleep(100); 2981d7cba043SMichael Krufky break; 2982d7cba043SMichael Krufky default: 29838765561fSChris Pascoe cx_write(MO_GP0_IO, 0x101000); 29848765561fSChris Pascoe mdelay(5); 29858765561fSChris Pascoe cx_set(MO_GP0_IO, 0x101010); 2986d7cba043SMichael Krufky } 2987b3fb91d2SChris Pascoe break; 2988b3fb91d2SChris Pascoe default: 2989b3fb91d2SChris Pascoe return -EINVAL; 2990b3fb91d2SChris Pascoe } 2991b3fb91d2SChris Pascoe 2992b3fb91d2SChris Pascoe return 0; 2993b3fb91d2SChris Pascoe } 2994b3fb91d2SChris Pascoe 2995399426caSMauro Carvalho Chehab /* 2996399426caSMauro Carvalho Chehab * some Geniatech specific stuff 2997399426caSMauro Carvalho Chehab */ 29989507901eSMauro Carvalho Chehab 29990be51b46SMauro Carvalho Chehab static int cx88_xc3028_geniatech_tuner_callback(struct cx88_core *core, 30000be51b46SMauro Carvalho Chehab int command, int mode) 30019507901eSMauro Carvalho Chehab { 30029507901eSMauro Carvalho Chehab switch (command) { 30039507901eSMauro Carvalho Chehab case XC2028_TUNER_RESET: 30049507901eSMauro Carvalho Chehab switch (INPUT(core->input).type) { 30059507901eSMauro Carvalho Chehab case CX88_RADIO: 3006c450e50eSMauro Carvalho Chehab break; 30079507901eSMauro Carvalho Chehab case CX88_VMUX_DVB: 30089507901eSMauro Carvalho Chehab cx_write(MO_GP1_IO, 0x030302); 30099507901eSMauro Carvalho Chehab mdelay(50); 3010c450e50eSMauro Carvalho Chehab break; 30119507901eSMauro Carvalho Chehab default: 30129507901eSMauro Carvalho Chehab cx_write(MO_GP1_IO, 0x030301); 30139507901eSMauro Carvalho Chehab mdelay(50); 3014c450e50eSMauro Carvalho Chehab } 30159507901eSMauro Carvalho Chehab cx_write(MO_GP1_IO, 0x101010); 30169507901eSMauro Carvalho Chehab mdelay(50); 30179507901eSMauro Carvalho Chehab cx_write(MO_GP1_IO, 0x101000); 30189507901eSMauro Carvalho Chehab mdelay(50); 30199507901eSMauro Carvalho Chehab cx_write(MO_GP1_IO, 0x101010); 30209507901eSMauro Carvalho Chehab mdelay(50); 30219507901eSMauro Carvalho Chehab return 0; 30229507901eSMauro Carvalho Chehab } 30239507901eSMauro Carvalho Chehab return -EINVAL; 30249507901eSMauro Carvalho Chehab } 30259507901eSMauro Carvalho Chehab 30263047a176SMiroslav Sustek static int cx88_xc3028_winfast1800h_callback(struct cx88_core *core, 30273047a176SMiroslav Sustek int command, int arg) 30283047a176SMiroslav Sustek { 30293047a176SMiroslav Sustek switch (command) { 30303047a176SMiroslav Sustek case XC2028_TUNER_RESET: 30313047a176SMiroslav Sustek /* GPIO 12 (xc3028 tuner reset) */ 30323047a176SMiroslav Sustek cx_set(MO_GP1_IO, 0x1010); 30333047a176SMiroslav Sustek mdelay(50); 30343047a176SMiroslav Sustek cx_clear(MO_GP1_IO, 0x10); 30354699903eSAlan Cox mdelay(75); 30363047a176SMiroslav Sustek cx_set(MO_GP1_IO, 0x10); 30374699903eSAlan Cox mdelay(75); 30383047a176SMiroslav Sustek return 0; 30393047a176SMiroslav Sustek } 30403047a176SMiroslav Sustek return -EINVAL; 30413047a176SMiroslav Sustek } 30423047a176SMiroslav Sustek 3043f271a3afSistvan_v@mailbox.hu static int cx88_xc4000_winfast2000h_plus_callback(struct cx88_core *core, 3044f271a3afSistvan_v@mailbox.hu int command, int arg) 3045f271a3afSistvan_v@mailbox.hu { 3046f271a3afSistvan_v@mailbox.hu switch (command) { 3047f271a3afSistvan_v@mailbox.hu case XC4000_TUNER_RESET: 3048f271a3afSistvan_v@mailbox.hu /* GPIO 12 (xc4000 tuner reset) */ 3049f271a3afSistvan_v@mailbox.hu cx_set(MO_GP1_IO, 0x1010); 3050f271a3afSistvan_v@mailbox.hu mdelay(50); 3051f271a3afSistvan_v@mailbox.hu cx_clear(MO_GP1_IO, 0x10); 3052f271a3afSistvan_v@mailbox.hu mdelay(75); 3053f271a3afSistvan_v@mailbox.hu cx_set(MO_GP1_IO, 0x10); 3054f271a3afSistvan_v@mailbox.hu mdelay(75); 3055f271a3afSistvan_v@mailbox.hu return 0; 3056f271a3afSistvan_v@mailbox.hu } 3057f271a3afSistvan_v@mailbox.hu return -EINVAL; 3058f271a3afSistvan_v@mailbox.hu } 3059f271a3afSistvan_v@mailbox.hu 3060399426caSMauro Carvalho Chehab /* 3061399426caSMauro Carvalho Chehab * some Divco specific stuff 3062399426caSMauro Carvalho Chehab */ 30630be51b46SMauro Carvalho Chehab static int cx88_pv_8000gt_callback(struct cx88_core *core, 30640be51b46SMauro Carvalho Chehab int command, int arg) 30652422a9b3SMauro Carvalho Chehab { 30662422a9b3SMauro Carvalho Chehab switch (command) { 30672422a9b3SMauro Carvalho Chehab case XC2028_TUNER_RESET: 30682422a9b3SMauro Carvalho Chehab cx_write(MO_GP2_IO, 0xcf7); 30692422a9b3SMauro Carvalho Chehab mdelay(50); 30702422a9b3SMauro Carvalho Chehab cx_write(MO_GP2_IO, 0xef5); 30712422a9b3SMauro Carvalho Chehab mdelay(50); 30722422a9b3SMauro Carvalho Chehab cx_write(MO_GP2_IO, 0xcf7); 30732422a9b3SMauro Carvalho Chehab break; 30742422a9b3SMauro Carvalho Chehab default: 30752422a9b3SMauro Carvalho Chehab return -EINVAL; 30762422a9b3SMauro Carvalho Chehab } 30772422a9b3SMauro Carvalho Chehab 30782422a9b3SMauro Carvalho Chehab return 0; 30792422a9b3SMauro Carvalho Chehab } 30802422a9b3SMauro Carvalho Chehab 3081399426caSMauro Carvalho Chehab /* 3082399426caSMauro Carvalho Chehab * some DViCO specific stuff 3083399426caSMauro Carvalho Chehab */ 3084780dfef3SChris Pascoe 3085780dfef3SChris Pascoe static void dvico_fusionhdtv_hybrid_init(struct cx88_core *core) 3086780dfef3SChris Pascoe { 3087780dfef3SChris Pascoe struct i2c_msg msg = { .addr = 0x45, .flags = 0 }; 3088780dfef3SChris Pascoe int i, err; 308969b27e3dSChris Pascoe static u8 init_bufs[13][5] = { 3090780dfef3SChris Pascoe { 0x10, 0x00, 0x20, 0x01, 0x03 }, 3091780dfef3SChris Pascoe { 0x10, 0x10, 0x01, 0x00, 0x21 }, 3092780dfef3SChris Pascoe { 0x10, 0x10, 0x10, 0x00, 0xCA }, 3093780dfef3SChris Pascoe { 0x10, 0x10, 0x12, 0x00, 0x08 }, 3094780dfef3SChris Pascoe { 0x10, 0x10, 0x13, 0x00, 0x0A }, 3095780dfef3SChris Pascoe { 0x10, 0x10, 0x16, 0x01, 0xC0 }, 3096780dfef3SChris Pascoe { 0x10, 0x10, 0x22, 0x01, 0x3D }, 3097780dfef3SChris Pascoe { 0x10, 0x10, 0x73, 0x01, 0x2E }, 3098780dfef3SChris Pascoe { 0x10, 0x10, 0x72, 0x00, 0xC5 }, 3099780dfef3SChris Pascoe { 0x10, 0x10, 0x71, 0x01, 0x97 }, 3100780dfef3SChris Pascoe { 0x10, 0x10, 0x70, 0x00, 0x0F }, 3101780dfef3SChris Pascoe { 0x10, 0x10, 0xB0, 0x00, 0x01 }, 3102780dfef3SChris Pascoe { 0x03, 0x0C }, 3103780dfef3SChris Pascoe }; 3104780dfef3SChris Pascoe 31055b9c4e6dSMauro Carvalho Chehab for (i = 0; i < ARRAY_SIZE(init_bufs); i++) { 3106780dfef3SChris Pascoe msg.buf = init_bufs[i]; 3107780dfef3SChris Pascoe msg.len = (i != 12 ? 5 : 2); 3108780dfef3SChris Pascoe err = i2c_transfer(&core->i2c_adap, &msg, 1); 3109780dfef3SChris Pascoe if (err != 1) { 311065bc2fe8SMauro Carvalho Chehab pr_warn("dvico_fusionhdtv_hybrid_init buf %d failed (err = %d)!\n", 3111e318e584SMauro Carvalho Chehab i, err); 3112780dfef3SChris Pascoe return; 3113780dfef3SChris Pascoe } 3114780dfef3SChris Pascoe } 3115780dfef3SChris Pascoe } 3116780dfef3SChris Pascoe 31170be51b46SMauro Carvalho Chehab static int cx88_xc2028_tuner_callback(struct cx88_core *core, 31180be51b46SMauro Carvalho Chehab int command, int arg) 3119c2cb8fccSMauro Carvalho Chehab { 31209507901eSMauro Carvalho Chehab /* Board-specific callbacks */ 31219507901eSMauro Carvalho Chehab switch (core->boardnr) { 31229507901eSMauro Carvalho Chehab case CX88_BOARD_POWERCOLOR_REAL_ANGEL: 31239507901eSMauro Carvalho Chehab case CX88_BOARD_GENIATECH_X8000_MT: 312499e09eacSMauro Carvalho Chehab case CX88_BOARD_KWORLD_ATSC_120: 31250be51b46SMauro Carvalho Chehab return cx88_xc3028_geniatech_tuner_callback(core, 31260be51b46SMauro Carvalho Chehab command, arg); 31272422a9b3SMauro Carvalho Chehab case CX88_BOARD_PROLINK_PV_8000GT: 3128a31d2bb7SMauro Carvalho Chehab case CX88_BOARD_PROLINK_PV_GLOBAL_XTREME: 31290be51b46SMauro Carvalho Chehab return cx88_pv_8000gt_callback(core, command, arg); 3130b3fb91d2SChris Pascoe case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO: 3131d7cba043SMichael Krufky case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO: 31320be51b46SMauro Carvalho Chehab return cx88_dvico_xc2028_callback(core, command, arg); 313314422f9dSMauro Carvalho Chehab case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL: 31343047a176SMiroslav Sustek case CX88_BOARD_WINFAST_DTV1800H: 31353047a176SMiroslav Sustek return cx88_xc3028_winfast1800h_callback(core, command, arg); 31369507901eSMauro Carvalho Chehab } 31379507901eSMauro Carvalho Chehab 3138c2cb8fccSMauro Carvalho Chehab switch (command) { 3139c2cb8fccSMauro Carvalho Chehab case XC2028_TUNER_RESET: 3140c2cb8fccSMauro Carvalho Chehab switch (INPUT(core->input).type) { 3141c2cb8fccSMauro Carvalho Chehab case CX88_RADIO: 314202615ed5SMauro Carvalho Chehab dprintk(1, "setting GPIO to radio!\n"); 3143c2cb8fccSMauro Carvalho Chehab cx_write(MO_GP0_IO, 0x4ff); 3144c2cb8fccSMauro Carvalho Chehab mdelay(250); 3145c2cb8fccSMauro Carvalho Chehab cx_write(MO_GP2_IO, 0xff); 3146c2cb8fccSMauro Carvalho Chehab mdelay(250); 3147c450e50eSMauro Carvalho Chehab break; 3148c2cb8fccSMauro Carvalho Chehab case CX88_VMUX_DVB: /* Digital TV*/ 3149c2cb8fccSMauro Carvalho Chehab default: /* Analog TV */ 315002615ed5SMauro Carvalho Chehab dprintk(1, "setting GPIO to TV!\n"); 3151c450e50eSMauro Carvalho Chehab break; 3152c450e50eSMauro Carvalho Chehab } 3153c2cb8fccSMauro Carvalho Chehab cx_write(MO_GP1_IO, 0x101010); 3154c2cb8fccSMauro Carvalho Chehab mdelay(250); 3155c2cb8fccSMauro Carvalho Chehab cx_write(MO_GP1_IO, 0x101000); 3156c2cb8fccSMauro Carvalho Chehab mdelay(250); 3157c2cb8fccSMauro Carvalho Chehab cx_write(MO_GP1_IO, 0x101010); 3158c2cb8fccSMauro Carvalho Chehab mdelay(250); 3159c2cb8fccSMauro Carvalho Chehab return 0; 3160c2cb8fccSMauro Carvalho Chehab } 3161c2cb8fccSMauro Carvalho Chehab return -EINVAL; 3162c2cb8fccSMauro Carvalho Chehab } 3163c2cb8fccSMauro Carvalho Chehab 3164c21973e8Sistvan_v@mailbox.hu static int cx88_xc4000_tuner_callback(struct cx88_core *core, 3165c21973e8Sistvan_v@mailbox.hu int command, int arg) 3166c21973e8Sistvan_v@mailbox.hu { 3167c21973e8Sistvan_v@mailbox.hu /* Board-specific callbacks */ 3168c21973e8Sistvan_v@mailbox.hu switch (core->boardnr) { 31698eb79c0bSistvan_v@mailbox.hu case CX88_BOARD_WINFAST_DTV1800H_XC4000: 3170f271a3afSistvan_v@mailbox.hu case CX88_BOARD_WINFAST_DTV2000H_PLUS: 317184463d5fSIstvan Varga case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F36: 317284463d5fSIstvan Varga case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F43: 3173f271a3afSistvan_v@mailbox.hu return cx88_xc4000_winfast2000h_plus_callback(core, 3174f271a3afSistvan_v@mailbox.hu command, arg); 3175c21973e8Sistvan_v@mailbox.hu } 3176c21973e8Sistvan_v@mailbox.hu return -EINVAL; 3177c21973e8Sistvan_v@mailbox.hu } 3178c21973e8Sistvan_v@mailbox.hu 3179399426caSMauro Carvalho Chehab /* 3180399426caSMauro Carvalho Chehab * Tuner callback function. Currently only needed for the Pinnacle 3181399426caSMauro Carvalho Chehab * PCTV HD 800i with an xc5000 sillicon tuner. This is used for both 3182399426caSMauro Carvalho Chehab * analog tuner attach (tuner-core.c) and dvb tuner attach (cx88-dvb.c) 3183399426caSMauro Carvalho Chehab */ 31840be51b46SMauro Carvalho Chehab static int cx88_xc5000_tuner_callback(struct cx88_core *core, 31850be51b46SMauro Carvalho Chehab int command, int arg) 318660464da8SSteven Toth { 318760464da8SSteven Toth switch (core->boardnr) { 318860464da8SSteven Toth case CX88_BOARD_PINNACLE_PCTV_HD_800i: 318960464da8SSteven Toth if (command == 0) { /* This is the reset command from xc5000 */ 3190b8d91986SDevin Heitmueller 3191399426caSMauro Carvalho Chehab /* 3192399426caSMauro Carvalho Chehab * djh - According to the engineer at PCTV Systems, 3193399426caSMauro Carvalho Chehab * the xc5000 reset pin is supposed to be on GPIO12. 3194399426caSMauro Carvalho Chehab * However, despite three nights of effort, pulling 3195399426caSMauro Carvalho Chehab * that GPIO low didn't reset the xc5000. While 3196399426caSMauro Carvalho Chehab * pulling MO_SRST_IO low does reset the xc5000, this 3197399426caSMauro Carvalho Chehab * also resets in the s5h1409 being reset as well. 3198399426caSMauro Carvalho Chehab * This causes tuning to always fail since the internal 3199399426caSMauro Carvalho Chehab * state of the s5h1409 does not match the driver's 3200399426caSMauro Carvalho Chehab * state. Given that the only two conditions in which 3201399426caSMauro Carvalho Chehab * the driver performs a reset is during firmware load 3202399426caSMauro Carvalho Chehab * and powering down the chip, I am taking out the 3203399426caSMauro Carvalho Chehab * reset. We know that the chip is being reset 3204399426caSMauro Carvalho Chehab * when the cx88 comes online, and not being able to 3205399426caSMauro Carvalho Chehab * do power management for this board is worse than 3206399426caSMauro Carvalho Chehab * not having any tuning at all. 3207399426caSMauro Carvalho Chehab */ 320860464da8SSteven Toth return 0; 3209399426caSMauro Carvalho Chehab } 3210399426caSMauro Carvalho Chehab 321102615ed5SMauro Carvalho Chehab dprintk(1, "xc5000: unknown tuner callback command.\n"); 321260464da8SSteven Toth return -EINVAL; 32131117d6baSSteven Toth case CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD: 32141117d6baSSteven Toth if (command == 0) { /* This is the reset command from xc5000 */ 32151117d6baSSteven Toth cx_clear(MO_GP0_IO, 0x00000010); 3216399426caSMauro Carvalho Chehab usleep_range(10000, 20000); 32171117d6baSSteven Toth cx_set(MO_GP0_IO, 0x00000010); 32181117d6baSSteven Toth return 0; 3219399426caSMauro Carvalho Chehab } 3220399426caSMauro Carvalho Chehab 322102615ed5SMauro Carvalho Chehab dprintk(1, "xc5000: unknown tuner callback command.\n"); 32221117d6baSSteven Toth return -EINVAL; 32231117d6baSSteven Toth } 322460464da8SSteven Toth return 0; /* Should never be here */ 322560464da8SSteven Toth } 3226c2cb8fccSMauro Carvalho Chehab 3227d7cba043SMichael Krufky int cx88_tuner_callback(void *priv, int component, int command, int arg) 3228c2cb8fccSMauro Carvalho Chehab { 3229c2cb8fccSMauro Carvalho Chehab struct i2c_algo_bit_data *i2c_algo = priv; 32300be51b46SMauro Carvalho Chehab struct cx88_core *core; 32310be51b46SMauro Carvalho Chehab 32320be51b46SMauro Carvalho Chehab if (!i2c_algo) { 323365bc2fe8SMauro Carvalho Chehab pr_err("Error - i2c private data undefined.\n"); 32340be51b46SMauro Carvalho Chehab return -EINVAL; 32350be51b46SMauro Carvalho Chehab } 32360be51b46SMauro Carvalho Chehab 32370be51b46SMauro Carvalho Chehab core = i2c_algo->data; 32380be51b46SMauro Carvalho Chehab 32390be51b46SMauro Carvalho Chehab if (!core) { 324065bc2fe8SMauro Carvalho Chehab pr_err("Error - device struct undefined.\n"); 32410be51b46SMauro Carvalho Chehab return -EINVAL; 32420be51b46SMauro Carvalho Chehab } 3243c2cb8fccSMauro Carvalho Chehab 3244d7cba043SMichael Krufky if (component != DVB_FRONTEND_COMPONENT_TUNER) 3245d7cba043SMichael Krufky return -EINVAL; 3246d7cba043SMichael Krufky 3247c2cb8fccSMauro Carvalho Chehab switch (core->board.tuner_type) { 3248c2cb8fccSMauro Carvalho Chehab case TUNER_XC2028: 324902615ed5SMauro Carvalho Chehab dprintk(1, "Calling XC2028/3028 callback\n"); 32500be51b46SMauro Carvalho Chehab return cx88_xc2028_tuner_callback(core, command, arg); 3251c21973e8Sistvan_v@mailbox.hu case TUNER_XC4000: 325202615ed5SMauro Carvalho Chehab dprintk(1, "Calling XC4000 callback\n"); 3253c21973e8Sistvan_v@mailbox.hu return cx88_xc4000_tuner_callback(core, command, arg); 3254c2cb8fccSMauro Carvalho Chehab case TUNER_XC5000: 325502615ed5SMauro Carvalho Chehab dprintk(1, "Calling XC5000 callback\n"); 32560be51b46SMauro Carvalho Chehab return cx88_xc5000_tuner_callback(core, command, arg); 3257c2cb8fccSMauro Carvalho Chehab } 325865bc2fe8SMauro Carvalho Chehab pr_err("Error: Calling callback for tuner %d\n", 32590f19e65bSMauro Carvalho Chehab core->board.tuner_type); 3260c2cb8fccSMauro Carvalho Chehab return -EINVAL; 3261c2cb8fccSMauro Carvalho Chehab } 326260464da8SSteven Toth EXPORT_SYMBOL(cx88_tuner_callback); 326360464da8SSteven Toth 326460464da8SSteven Toth /* ----------------------------------------------------------------------- */ 32651da177e4SLinus Torvalds 3266bbc83597STrent Piepho static void cx88_card_list(struct cx88_core *core, struct pci_dev *pci) 32671da177e4SLinus Torvalds { 32681da177e4SLinus Torvalds int i; 32691da177e4SLinus Torvalds 3270399426caSMauro Carvalho Chehab if (!pci->subsystem_vendor && !pci->subsystem_device) { 327165bc2fe8SMauro Carvalho Chehab pr_err("Your board has no valid PCI Subsystem ID and thus can't\n"); 327265bc2fe8SMauro Carvalho Chehab pr_err("be autodetected. Please pass card=<n> insmod option to\n"); 327365bc2fe8SMauro Carvalho Chehab pr_err("workaround that. Redirect complaints to the vendor of\n"); 327465bc2fe8SMauro Carvalho Chehab pr_err("the TV card\n"); 32751da177e4SLinus Torvalds } else { 327665bc2fe8SMauro Carvalho Chehab pr_err("Your board isn't known (yet) to the driver. You can\n"); 327765bc2fe8SMauro Carvalho Chehab pr_err("try to pick one of the existing card configs via\n"); 327865bc2fe8SMauro Carvalho Chehab pr_err("card=<n> insmod option. Updating to the latest\n"); 327965bc2fe8SMauro Carvalho Chehab pr_err("version might help as well.\n"); 32801da177e4SLinus Torvalds } 328165bc2fe8SMauro Carvalho Chehab pr_err("Here is a list of valid choices for the card=<n> insmod option:\n"); 3282bbc83597STrent Piepho for (i = 0; i < ARRAY_SIZE(cx88_boards); i++) 328365bc2fe8SMauro Carvalho Chehab pr_err(" card=%d -> %s\n", i, cx88_boards[i].name); 32841da177e4SLinus Torvalds } 32851da177e4SLinus Torvalds 3286bbc83597STrent Piepho static void cx88_card_setup_pre_i2c(struct cx88_core *core) 3287aa481a65SSteven Toth { 32886a59d64cSTrent Piepho switch (core->boardnr) { 3289aa481a65SSteven Toth case CX88_BOARD_HAUPPAUGE_HVR1300: 32902491fbb7SSteven Toth /* 3291399426caSMauro Carvalho Chehab * Bring the 702 demod up before i2c scanning/attach or 3292399426caSMauro Carvalho Chehab * devices are hidden. 3293399426caSMauro Carvalho Chehab * 32942491fbb7SSteven Toth * We leave here with the 702 on the bus 32952491fbb7SSteven Toth * 32962491fbb7SSteven Toth * "reset the IR receiver on GPIO[3]" 32972491fbb7SSteven Toth * Reported by Mike Crash <mike AT mikecrash.com> 32982491fbb7SSteven Toth */ 32992491fbb7SSteven Toth cx_write(MO_GP0_IO, 0x0000ef88); 3300aa481a65SSteven Toth udelay(1000); 33012491fbb7SSteven Toth cx_clear(MO_GP0_IO, 0x00000088); 3302aa481a65SSteven Toth udelay(50); 33032491fbb7SSteven Toth cx_set(MO_GP0_IO, 0x00000088); /* 702 out of reset */ 3304aa481a65SSteven Toth udelay(1000); 3305aa481a65SSteven Toth break; 33062422a9b3SMauro Carvalho Chehab 3307a31d2bb7SMauro Carvalho Chehab case CX88_BOARD_PROLINK_PV_GLOBAL_XTREME: 33082422a9b3SMauro Carvalho Chehab case CX88_BOARD_PROLINK_PV_8000GT: 33092422a9b3SMauro Carvalho Chehab cx_write(MO_GP2_IO, 0xcf7); 33102422a9b3SMauro Carvalho Chehab mdelay(50); 33112422a9b3SMauro Carvalho Chehab cx_write(MO_GP2_IO, 0xef5); 33122422a9b3SMauro Carvalho Chehab mdelay(50); 33132422a9b3SMauro Carvalho Chehab cx_write(MO_GP2_IO, 0xcf7); 3314399426caSMauro Carvalho Chehab usleep_range(10000, 20000); 33152422a9b3SMauro Carvalho Chehab break; 33162422a9b3SMauro Carvalho Chehab 33171117d6baSSteven Toth case CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD: 33181117d6baSSteven Toth /* Enable the xc5000 tuner */ 33191117d6baSSteven Toth cx_set(MO_GP0_IO, 0x00001010); 33201117d6baSSteven Toth break; 33212491fbb7SSteven Toth 332227b93d8aSMiroslav Slugen case CX88_BOARD_WINFAST_DTV2000H_J: 33232491fbb7SSteven Toth case CX88_BOARD_HAUPPAUGE_HVR3000: 33245bd1b663SSteven Toth case CX88_BOARD_HAUPPAUGE_HVR4000: 33252491fbb7SSteven Toth /* Init GPIO */ 33262491fbb7SSteven Toth cx_write(MO_GP0_IO, core->board.input[0].gpio0); 33275bd1b663SSteven Toth udelay(1000); 33282f3af9e6SDarron Broad cx_clear(MO_GP0_IO, 0x00000080); 33292f3af9e6SDarron Broad udelay(50); 33302f3af9e6SDarron Broad cx_set(MO_GP0_IO, 0x00000080); /* 702 out of reset */ 33312f3af9e6SDarron Broad udelay(1000); 33322491fbb7SSteven Toth break; 33333047a176SMiroslav Sustek 333414422f9dSMauro Carvalho Chehab case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL: 33353047a176SMiroslav Sustek case CX88_BOARD_WINFAST_DTV1800H: 333679a5b9a2Sistvan_v@mailbox.hu cx88_xc3028_winfast1800h_callback(core, XC2028_TUNER_RESET, 0); 33373047a176SMiroslav Sustek break; 3338111ac84aSSergey Ivanov 33398eb79c0bSistvan_v@mailbox.hu case CX88_BOARD_WINFAST_DTV1800H_XC4000: 3340f271a3afSistvan_v@mailbox.hu case CX88_BOARD_WINFAST_DTV2000H_PLUS: 334184463d5fSIstvan Varga case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F36: 334284463d5fSIstvan Varga case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F43: 3343f271a3afSistvan_v@mailbox.hu cx88_xc4000_winfast2000h_plus_callback(core, 3344f271a3afSistvan_v@mailbox.hu XC4000_TUNER_RESET, 0); 3345f271a3afSistvan_v@mailbox.hu break; 3346f271a3afSistvan_v@mailbox.hu 3347111ac84aSSergey Ivanov case CX88_BOARD_TWINHAN_VP1027_DVBS: 3348111ac84aSSergey Ivanov cx_write(MO_GP0_IO, 0x00003230); 3349111ac84aSSergey Ivanov cx_write(MO_GP0_IO, 0x00003210); 3350399426caSMauro Carvalho Chehab usleep_range(10000, 20000); 3351111ac84aSSergey Ivanov cx_write(MO_GP0_IO, 0x00001230); 3352111ac84aSSergey Ivanov break; 3353aa481a65SSteven Toth } 3354aa481a65SSteven Toth } 3355aa481a65SSteven Toth 335699e09eacSMauro Carvalho Chehab /* 335799e09eacSMauro Carvalho Chehab * Sets board-dependent xc3028 configuration 335899e09eacSMauro Carvalho Chehab */ 335999e09eacSMauro Carvalho Chehab void cx88_setup_xc3028(struct cx88_core *core, struct xc2028_ctrl *ctl) 336099e09eacSMauro Carvalho Chehab { 336199e09eacSMauro Carvalho Chehab memset(ctl, 0, sizeof(*ctl)); 336299e09eacSMauro Carvalho Chehab 336399e09eacSMauro Carvalho Chehab ctl->fname = XC2028_DEFAULT_FIRMWARE; 336499e09eacSMauro Carvalho Chehab ctl->max_len = 64; 336599e09eacSMauro Carvalho Chehab 336699e09eacSMauro Carvalho Chehab switch (core->boardnr) { 336799e09eacSMauro Carvalho Chehab case CX88_BOARD_POWERCOLOR_REAL_ANGEL: 3368a9606ce6SDaniel Gimpelevich /* Now works with firmware version 2.7 */ 3369a9606ce6SDaniel Gimpelevich if (core->i2c_algo.udelay < 16) 3370a9606ce6SDaniel Gimpelevich core->i2c_algo.udelay = 16; 337199e09eacSMauro Carvalho Chehab break; 337299e09eacSMauro Carvalho Chehab case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO: 33733047a176SMiroslav Sustek case CX88_BOARD_WINFAST_DTV1800H: 337419c309e3STim Farrington ctl->demod = XC3028_FE_ZARLINK456; 337599e09eacSMauro Carvalho Chehab break; 337699e09eacSMauro Carvalho Chehab case CX88_BOARD_KWORLD_ATSC_120: 337799e09eacSMauro Carvalho Chehab case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO: 337899e09eacSMauro Carvalho Chehab ctl->demod = XC3028_FE_OREN538; 337999e09eacSMauro Carvalho Chehab break; 338093b99923SDevin Heitmueller case CX88_BOARD_GENIATECH_X8000_MT: 3381399426caSMauro Carvalho Chehab /* 3382399426caSMauro Carvalho Chehab * FIXME: For this board, the xc3028 never recovers after being 3383399426caSMauro Carvalho Chehab * powered down (the reset GPIO probably is not set properly). 3384399426caSMauro Carvalho Chehab * We don't have access to the hardware so we cannot determine 3385399426caSMauro Carvalho Chehab * which GPIO is used for xc3028, so just disable power xc3028 3386399426caSMauro Carvalho Chehab * power management for now 3387399426caSMauro Carvalho Chehab */ 338893b99923SDevin Heitmueller ctl->disable_power_mgmt = 1; 338993b99923SDevin Heitmueller break; 339014422f9dSMauro Carvalho Chehab case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL: 3391a31d2bb7SMauro Carvalho Chehab case CX88_BOARD_PROLINK_PV_GLOBAL_XTREME: 339299e09eacSMauro Carvalho Chehab case CX88_BOARD_PROLINK_PV_8000GT: 339399e09eacSMauro Carvalho Chehab /* 3394a31d2bb7SMauro Carvalho Chehab * Those boards uses non-MTS firmware 339599e09eacSMauro Carvalho Chehab */ 339699e09eacSMauro Carvalho Chehab break; 33973f6014fcSStéphane Voltz case CX88_BOARD_PINNACLE_HYBRID_PCTV: 339870101a27SStephan Wienczny case CX88_BOARD_TERRATEC_CINERGY_HT_PCI_MKII: 33993f6014fcSStéphane Voltz ctl->demod = XC3028_FE_ZARLINK456; 34003f6014fcSStéphane Voltz ctl->mts = 1; 34013f6014fcSStéphane Voltz break; 340299e09eacSMauro Carvalho Chehab default: 340399e09eacSMauro Carvalho Chehab ctl->demod = XC3028_FE_OREN538; 340499e09eacSMauro Carvalho Chehab ctl->mts = 1; 340599e09eacSMauro Carvalho Chehab } 340699e09eacSMauro Carvalho Chehab } 340799e09eacSMauro Carvalho Chehab EXPORT_SYMBOL_GPL(cx88_setup_xc3028); 340899e09eacSMauro Carvalho Chehab 3409bbc83597STrent Piepho static void cx88_card_setup(struct cx88_core *core) 34101da177e4SLinus Torvalds { 34113ca0ea98SSteven Toth static u8 eeprom[256]; 34124bf1226aSMauro Carvalho Chehab struct tuner_setup tun_setup; 3413ad020dc2SMauro Carvalho Chehab unsigned int mode_mask = T_RADIO | T_ANALOG_TV; 34144bf1226aSMauro Carvalho Chehab 34154bf1226aSMauro Carvalho Chehab memset(&tun_setup, 0, sizeof(tun_setup)); 34161da177e4SLinus Torvalds 3417399426caSMauro Carvalho Chehab if (!core->i2c_rc) { 34181da177e4SLinus Torvalds core->i2c_client.addr = 0xa0 >> 1; 34191da177e4SLinus Torvalds tveeprom_read(&core->i2c_client, eeprom, sizeof(eeprom)); 34201da177e4SLinus Torvalds } 34211da177e4SLinus Torvalds 34226a59d64cSTrent Piepho switch (core->boardnr) { 34231da177e4SLinus Torvalds case CX88_BOARD_HAUPPAUGE: 34241da177e4SLinus Torvalds case CX88_BOARD_HAUPPAUGE_ROSLYN: 3425399426caSMauro Carvalho Chehab if (!core->i2c_rc) 34261da177e4SLinus Torvalds hauppauge_eeprom(core, eeprom + 8); 34271da177e4SLinus Torvalds break; 34281da177e4SLinus Torvalds case CX88_BOARD_GDI: 3429399426caSMauro Carvalho Chehab if (!core->i2c_rc) 34301da177e4SLinus Torvalds gdi_eeprom(core, eeprom); 34311da177e4SLinus Torvalds break; 343214422f9dSMauro Carvalho Chehab case CX88_BOARD_LEADTEK_PVR2000: 343314422f9dSMauro Carvalho Chehab case CX88_BOARD_WINFAST_DV2000: 34341da177e4SLinus Torvalds case CX88_BOARD_WINFAST2000XP_EXPERT: 3435399426caSMauro Carvalho Chehab if (!core->i2c_rc) 34361da177e4SLinus Torvalds leadtek_eeprom(core, eeprom); 34371da177e4SLinus Torvalds break; 34380fa14aa6SSteven Toth case CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1: 34390fa14aa6SSteven Toth case CX88_BOARD_HAUPPAUGE_NOVASE2_S1: 34401da177e4SLinus Torvalds case CX88_BOARD_HAUPPAUGE_DVB_T1: 3441611900c1SSteven Toth case CX88_BOARD_HAUPPAUGE_HVR1100: 3442611900c1SSteven Toth case CX88_BOARD_HAUPPAUGE_HVR1100LP: 3443ad10c930SEric Thomas case CX88_BOARD_HAUPPAUGE_HVR3000: 3444aa481a65SSteven Toth case CX88_BOARD_HAUPPAUGE_HVR1300: 34455bd1b663SSteven Toth case CX88_BOARD_HAUPPAUGE_HVR4000: 34465bd1b663SSteven Toth case CX88_BOARD_HAUPPAUGE_HVR4000LITE: 3447501d8cd4SSteven Toth case CX88_BOARD_HAUPPAUGE_IRONLY: 3448399426caSMauro Carvalho Chehab if (!core->i2c_rc) 34493ca0ea98SSteven Toth hauppauge_eeprom(core, eeprom); 34501da177e4SLinus Torvalds break; 34510e0351e3SVadim Catana case CX88_BOARD_KWORLD_DVBS_100: 34520e0351e3SVadim Catana cx_write(MO_GP0_IO, 0x000007f8); 34530e0351e3SVadim Catana cx_write(MO_GP1_IO, 0x00000001); 34540e0351e3SVadim Catana break; 34558765561fSChris Pascoe case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO: 34568765561fSChris Pascoe /* GPIO0:0 is hooked to demod reset */ 34578765561fSChris Pascoe /* GPIO0:4 is hooked to xc3028 reset */ 34588765561fSChris Pascoe cx_write(MO_GP0_IO, 0x00111100); 3459399426caSMauro Carvalho Chehab usleep_range(10000, 20000); 34608765561fSChris Pascoe cx_write(MO_GP0_IO, 0x00111111); 34618765561fSChris Pascoe break; 3462d536e9c4SChris Pascoe case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL: 3463d536e9c4SChris Pascoe /* GPIO0:6 is hooked to FX2 reset pin */ 3464d536e9c4SChris Pascoe cx_set(MO_GP0_IO, 0x00004040); 3465d536e9c4SChris Pascoe cx_clear(MO_GP0_IO, 0x00000040); 3466d536e9c4SChris Pascoe msleep(1000); 3467d536e9c4SChris Pascoe cx_set(MO_GP0_IO, 0x00004040); 3468d536e9c4SChris Pascoe /* FALLTHROUGH */ 34691da177e4SLinus Torvalds case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1: 34701da177e4SLinus Torvalds case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS: 3471780dfef3SChris Pascoe case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID: 34721da177e4SLinus Torvalds /* GPIO0:0 is hooked to mt352 reset pin */ 34731da177e4SLinus Torvalds cx_set(MO_GP0_IO, 0x00000101); 34741da177e4SLinus Torvalds cx_clear(MO_GP0_IO, 0x00000001); 3475399426caSMauro Carvalho Chehab usleep_range(10000, 20000); 34761da177e4SLinus Torvalds cx_set(MO_GP0_IO, 0x00000101); 3477399426caSMauro Carvalho Chehab if (!core->i2c_rc && 34786a59d64cSTrent Piepho core->boardnr == CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID) 3479780dfef3SChris Pascoe dvico_fusionhdtv_hybrid_init(core); 34801da177e4SLinus Torvalds break; 34811da177e4SLinus Torvalds case CX88_BOARD_KWORLD_DVB_T: 34821da177e4SLinus Torvalds case CX88_BOARD_DNTV_LIVE_DVB_T: 34831da177e4SLinus Torvalds cx_set(MO_GP0_IO, 0x00000707); 34841da177e4SLinus Torvalds cx_set(MO_GP2_IO, 0x00000101); 34851da177e4SLinus Torvalds cx_clear(MO_GP2_IO, 0x00000001); 3486399426caSMauro Carvalho Chehab usleep_range(10000, 20000); 34871da177e4SLinus Torvalds cx_clear(MO_GP0_IO, 0x00000007); 34881da177e4SLinus Torvalds cx_set(MO_GP2_IO, 0x00000101); 34891da177e4SLinus Torvalds break; 3490fc40b261SChris Pascoe case CX88_BOARD_DNTV_LIVE_DVB_T_PRO: 3491fc40b261SChris Pascoe cx_write(MO_GP0_IO, 0x00080808); 3492fc40b261SChris Pascoe break; 3493e976f937SKirk Lapray case CX88_BOARD_ATI_HDTVWONDER: 3494399426caSMauro Carvalho Chehab if (!core->i2c_rc) { 3495e976f937SKirk Lapray /* enable tuner */ 3496e976f937SKirk Lapray int i; 34975b9c4e6dSMauro Carvalho Chehab static const u8 buffer[][2] = { 34985b9c4e6dSMauro Carvalho Chehab {0x10, 0x12}, 34995b9c4e6dSMauro Carvalho Chehab {0x13, 0x04}, 35005b9c4e6dSMauro Carvalho Chehab {0x16, 0x00}, 35015b9c4e6dSMauro Carvalho Chehab {0x14, 0x04}, 35025b9c4e6dSMauro Carvalho Chehab {0x17, 0x00} 35035b9c4e6dSMauro Carvalho Chehab }; 3504e976f937SKirk Lapray core->i2c_client.addr = 0x0a; 3505e976f937SKirk Lapray 35065b9c4e6dSMauro Carvalho Chehab for (i = 0; i < ARRAY_SIZE(buffer); i++) 3507399426caSMauro Carvalho Chehab if (i2c_master_send(&core->i2c_client, 3508399426caSMauro Carvalho Chehab buffer[i], 2) != 2) 350965bc2fe8SMauro Carvalho Chehab pr_warn("Unable to enable tuner(%i).\n", 3510e318e584SMauro Carvalho Chehab i); 3511e976f937SKirk Lapray } 3512e976f937SKirk Lapray break; 351355c88610SMauro Carvalho Chehab case CX88_BOARD_MSI_TVANYWHERE_MASTER: 351455c88610SMauro Carvalho Chehab { 351555c88610SMauro Carvalho Chehab struct v4l2_priv_tun_config tea5767_cfg; 351655c88610SMauro Carvalho Chehab struct tea5767_ctrl ctl; 351755c88610SMauro Carvalho Chehab 351855c88610SMauro Carvalho Chehab memset(&ctl, 0, sizeof(ctl)); 351955c88610SMauro Carvalho Chehab 352055c88610SMauro Carvalho Chehab ctl.high_cut = 1; 352155c88610SMauro Carvalho Chehab ctl.st_noise = 1; 352255c88610SMauro Carvalho Chehab ctl.deemph_75 = 1; 352355c88610SMauro Carvalho Chehab ctl.xtal_freq = TEA5767_HIGH_LO_13MHz; 352455c88610SMauro Carvalho Chehab 352555c88610SMauro Carvalho Chehab tea5767_cfg.tuner = TUNER_TEA5767; 352655c88610SMauro Carvalho Chehab tea5767_cfg.priv = &ctl; 352755c88610SMauro Carvalho Chehab 3528b8341e1dSHans Verkuil call_all(core, tuner, s_config, &tea5767_cfg); 3529af832623SIgor M. Liplianin break; 353055c88610SMauro Carvalho Chehab } 3531e4aab64cSIgor M. Liplianin case CX88_BOARD_TEVII_S420: 3532af832623SIgor M. Liplianin case CX88_BOARD_TEVII_S460: 35330cb73639SIgor M. Liplianin case CX88_BOARD_TEVII_S464: 35344cd7fb87SOleg Roitburd case CX88_BOARD_OMICOM_SS4_PCI: 35354b29631dSIgor M. Liplianin case CX88_BOARD_TBS_8910: 3536ee73042cSOleg Roitburd case CX88_BOARD_TBS_8920: 3537cd3cde12SIgor M. Liplianin case CX88_BOARD_PROF_6200: 353857f51dbcSOleg Roitburd case CX88_BOARD_PROF_7300: 3539b699c271SIgor M. Liplianin case CX88_BOARD_PROF_7301: 35404b29631dSIgor M. Liplianin case CX88_BOARD_SATTRADE_ST4200: 3541ad5f74c0SIgor M. Liplianin cx_write(MO_GP0_IO, 0x8000); 3542ad5f74c0SIgor M. Liplianin msleep(100); 3543ee73042cSOleg Roitburd cx_write(MO_SRST_IO, 0); 3544399426caSMauro Carvalho Chehab usleep_range(10000, 20000); 3545ad5f74c0SIgor M. Liplianin cx_write(MO_GP0_IO, 0x8080); 3546ee73042cSOleg Roitburd msleep(100); 3547ee73042cSOleg Roitburd cx_write(MO_SRST_IO, 1); 3548ee73042cSOleg Roitburd msleep(100); 3549ee73042cSOleg Roitburd break; 35504bf1226aSMauro Carvalho Chehab } /*end switch() */ 35514bf1226aSMauro Carvalho Chehab 35524bf1226aSMauro Carvalho Chehab /* Setup tuners */ 3553399426caSMauro Carvalho Chehab if (core->board.radio_type != UNSET) { 35544bf1226aSMauro Carvalho Chehab tun_setup.mode_mask = T_RADIO; 35554bf1226aSMauro Carvalho Chehab tun_setup.type = core->board.radio_type; 35564bf1226aSMauro Carvalho Chehab tun_setup.addr = core->board.radio_addr; 35574bf1226aSMauro Carvalho Chehab tun_setup.tuner_callback = cx88_tuner_callback; 3558b8341e1dSHans Verkuil call_all(core, tuner, s_type_addr, &tun_setup); 35594bf1226aSMauro Carvalho Chehab mode_mask &= ~T_RADIO; 35604bf1226aSMauro Carvalho Chehab } 35614bf1226aSMauro Carvalho Chehab 3562c39ba330SHans Verkuil if (core->board.tuner_type != UNSET) { 35634bf1226aSMauro Carvalho Chehab tun_setup.mode_mask = mode_mask; 35644bf1226aSMauro Carvalho Chehab tun_setup.type = core->board.tuner_type; 35654bf1226aSMauro Carvalho Chehab tun_setup.addr = core->board.tuner_addr; 35664bf1226aSMauro Carvalho Chehab tun_setup.tuner_callback = cx88_tuner_callback; 35674bf1226aSMauro Carvalho Chehab 3568b8341e1dSHans Verkuil call_all(core, tuner, s_type_addr, &tun_setup); 35694bf1226aSMauro Carvalho Chehab } 35704bf1226aSMauro Carvalho Chehab 35714bf1226aSMauro Carvalho Chehab if (core->board.tda9887_conf) { 35724bf1226aSMauro Carvalho Chehab struct v4l2_priv_tun_config tda9887_cfg; 35734bf1226aSMauro Carvalho Chehab 35744bf1226aSMauro Carvalho Chehab tda9887_cfg.tuner = TUNER_TDA9887; 35754bf1226aSMauro Carvalho Chehab tda9887_cfg.priv = &core->board.tda9887_conf; 35764bf1226aSMauro Carvalho Chehab 3577b8341e1dSHans Verkuil call_all(core, tuner, s_config, &tda9887_cfg); 35781da177e4SLinus Torvalds } 3579c2cb8fccSMauro Carvalho Chehab 3580c2cb8fccSMauro Carvalho Chehab if (core->board.tuner_type == TUNER_XC2028) { 3581c2cb8fccSMauro Carvalho Chehab struct v4l2_priv_tun_config xc2028_cfg; 3582c2cb8fccSMauro Carvalho Chehab struct xc2028_ctrl ctl; 3583c2cb8fccSMauro Carvalho Chehab 358499e09eacSMauro Carvalho Chehab /* Fills device-dependent initialization parameters */ 358599e09eacSMauro Carvalho Chehab cx88_setup_xc3028(core, &ctl); 358699e09eacSMauro Carvalho Chehab 358799e09eacSMauro Carvalho Chehab /* Sends parameters to xc2028/3028 tuner */ 3588a9317abfSMauro Carvalho Chehab memset(&xc2028_cfg, 0, sizeof(xc2028_cfg)); 3589c2cb8fccSMauro Carvalho Chehab xc2028_cfg.tuner = TUNER_XC2028; 3590c2cb8fccSMauro Carvalho Chehab xc2028_cfg.priv = &ctl; 359102615ed5SMauro Carvalho Chehab dprintk(1, "Asking xc2028/3028 to load firmware %s\n", 359264016330SMauro Carvalho Chehab ctl.fname); 3593b8341e1dSHans Verkuil call_all(core, tuner, s_config, &xc2028_cfg); 3594c2cb8fccSMauro Carvalho Chehab } 3595622b828aSLaurent Pinchart call_all(core, core, s_power, 0); 35961da177e4SLinus Torvalds } 35971da177e4SLinus Torvalds 35981da177e4SLinus Torvalds /* ------------------------------------------------------------------ */ 35991da177e4SLinus Torvalds 3600bbc83597STrent Piepho static int cx88_pci_quirks(const char *name, struct pci_dev *pci) 3601bbc83597STrent Piepho { 3602bbc83597STrent Piepho unsigned int lat = UNSET; 3603bbc83597STrent Piepho u8 ctrl = 0; 3604bbc83597STrent Piepho u8 value; 3605bbc83597STrent Piepho 3606bbc83597STrent Piepho /* check pci quirks */ 3607bbc83597STrent Piepho if (pci_pci_problems & PCIPCI_TRITON) { 360865bc2fe8SMauro Carvalho Chehab pr_info("quirk: PCIPCI_TRITON -- set TBFX\n"); 3609bbc83597STrent Piepho ctrl |= CX88X_EN_TBFX; 3610bbc83597STrent Piepho } 3611bbc83597STrent Piepho if (pci_pci_problems & PCIPCI_NATOMA) { 361265bc2fe8SMauro Carvalho Chehab pr_info("quirk: PCIPCI_NATOMA -- set TBFX\n"); 3613bbc83597STrent Piepho ctrl |= CX88X_EN_TBFX; 3614bbc83597STrent Piepho } 3615bbc83597STrent Piepho if (pci_pci_problems & PCIPCI_VIAETBF) { 361665bc2fe8SMauro Carvalho Chehab pr_info("quirk: PCIPCI_VIAETBF -- set TBFX\n"); 3617bbc83597STrent Piepho ctrl |= CX88X_EN_TBFX; 3618bbc83597STrent Piepho } 3619bbc83597STrent Piepho if (pci_pci_problems & PCIPCI_VSFX) { 362065bc2fe8SMauro Carvalho Chehab pr_info("quirk: PCIPCI_VSFX -- set VSFX\n"); 3621bbc83597STrent Piepho ctrl |= CX88X_EN_VSFX; 3622bbc83597STrent Piepho } 3623bbc83597STrent Piepho #ifdef PCIPCI_ALIMAGIK 3624bbc83597STrent Piepho if (pci_pci_problems & PCIPCI_ALIMAGIK) { 362565bc2fe8SMauro Carvalho Chehab pr_info("quirk: PCIPCI_ALIMAGIK -- latency fixup\n"); 3626bbc83597STrent Piepho lat = 0x0A; 3627bbc83597STrent Piepho } 3628bbc83597STrent Piepho #endif 3629bbc83597STrent Piepho 3630bbc83597STrent Piepho /* check insmod options */ 36317b61ba8fSMauro Carvalho Chehab if (latency != UNSET) 3632bbc83597STrent Piepho lat = latency; 3633bbc83597STrent Piepho 3634bbc83597STrent Piepho /* apply stuff */ 3635bbc83597STrent Piepho if (ctrl) { 3636bbc83597STrent Piepho pci_read_config_byte(pci, CX88X_DEVCTRL, &value); 3637bbc83597STrent Piepho value |= ctrl; 3638bbc83597STrent Piepho pci_write_config_byte(pci, CX88X_DEVCTRL, value); 3639bbc83597STrent Piepho } 36407b61ba8fSMauro Carvalho Chehab if (lat != UNSET) { 3641399426caSMauro Carvalho Chehab pr_info("setting pci latency timer to %d\n", latency); 3642bbc83597STrent Piepho pci_write_config_byte(pci, PCI_LATENCY_TIMER, latency); 3643bbc83597STrent Piepho } 3644bbc83597STrent Piepho return 0; 3645bbc83597STrent Piepho } 3646bbc83597STrent Piepho 3647bbc83597STrent Piepho int cx88_get_resources(const struct cx88_core *core, struct pci_dev *pci) 3648bbc83597STrent Piepho { 3649bbc83597STrent Piepho if (request_mem_region(pci_resource_start(pci, 0), 3650bbc83597STrent Piepho pci_resource_len(pci, 0), 3651bbc83597STrent Piepho core->name)) 3652bbc83597STrent Piepho return 0; 365365bc2fe8SMauro Carvalho Chehab pr_err("func %d: Can't get MMIO memory @ 0x%llx, subsystem: %04x:%04x\n", 365465bc2fe8SMauro Carvalho Chehab PCI_FUNC(pci->devfn), 3655bbc83597STrent Piepho (unsigned long long)pci_resource_start(pci, 0), 3656bbc83597STrent Piepho pci->subsystem_vendor, pci->subsystem_device); 3657bbc83597STrent Piepho return -EBUSY; 3658bbc83597STrent Piepho } 3659bbc83597STrent Piepho 3660399426caSMauro Carvalho Chehab /* 3661399426caSMauro Carvalho Chehab * Allocate and initialize the cx88 core struct. One should hold the 3662399426caSMauro Carvalho Chehab * devlist mutex before calling this. 3663399426caSMauro Carvalho Chehab */ 3664bbc83597STrent Piepho struct cx88_core *cx88_core_create(struct pci_dev *pci, int nr) 3665bbc83597STrent Piepho { 3666bbc83597STrent Piepho struct cx88_core *core; 3667bbc83597STrent Piepho int i; 3668bbc83597STrent Piepho 3669bbc83597STrent Piepho core = kzalloc(sizeof(*core), GFP_KERNEL); 3670399426caSMauro Carvalho Chehab if (!core) 3671fbc0ae20SAlan Cox return NULL; 3672bbc83597STrent Piepho 3673*a8d8e38aSElena Reshetova refcount_set(&core->refcount, 1); 3674bbc83597STrent Piepho core->pci_bus = pci->bus->number; 3675bbc83597STrent Piepho core->pci_slot = PCI_SLOT(pci->devfn); 36768ddac9eeSTrent Piepho core->pci_irqmask = PCI_INT_RISC_RD_BERRINT | PCI_INT_RISC_WR_BERRINT | 36778ddac9eeSTrent Piepho PCI_INT_BRDG_BERRINT | PCI_INT_SRC_DMA_BERRINT | 36788ddac9eeSTrent Piepho PCI_INT_DST_DMA_BERRINT | PCI_INT_IPB_DMA_BERRINT; 3679bbc83597STrent Piepho mutex_init(&core->lock); 3680bbc83597STrent Piepho 3681bbc83597STrent Piepho core->nr = nr; 3682bbc83597STrent Piepho sprintf(core->name, "cx88[%d]", core->nr); 36839467fe12SHans Verkuil 3684ccd6f1d4SHans Verkuil core->tvnorm = V4L2_STD_NTSC_M; 3685ccd6f1d4SHans Verkuil core->width = 320; 3686ccd6f1d4SHans Verkuil core->height = 240; 3687ccd6f1d4SHans Verkuil core->field = V4L2_FIELD_INTERLACED; 3688ccd6f1d4SHans Verkuil 36899467fe12SHans Verkuil strcpy(core->v4l2_dev.name, core->name); 36909467fe12SHans Verkuil if (v4l2_device_register(NULL, &core->v4l2_dev)) { 36919467fe12SHans Verkuil kfree(core); 36929467fe12SHans Verkuil return NULL; 36939467fe12SHans Verkuil } 36949467fe12SHans Verkuil 36958c7cb12aSHans Verkuil if (v4l2_ctrl_handler_init(&core->video_hdl, 13)) { 36968c7cb12aSHans Verkuil v4l2_device_unregister(&core->v4l2_dev); 36978c7cb12aSHans Verkuil kfree(core); 36988c7cb12aSHans Verkuil return NULL; 36998c7cb12aSHans Verkuil } 37008c7cb12aSHans Verkuil 37018c7cb12aSHans Verkuil if (v4l2_ctrl_handler_init(&core->audio_hdl, 13)) { 37028c7cb12aSHans Verkuil v4l2_ctrl_handler_free(&core->video_hdl); 3703bac63981SHans Verkuil v4l2_device_unregister(&core->v4l2_dev); 3704bac63981SHans Verkuil kfree(core); 3705bac63981SHans Verkuil return NULL; 3706bac63981SHans Verkuil } 3707bac63981SHans Verkuil 37087b61ba8fSMauro Carvalho Chehab if (cx88_get_resources(core, pci) != 0) { 37098c7cb12aSHans Verkuil v4l2_ctrl_handler_free(&core->video_hdl); 37108c7cb12aSHans Verkuil v4l2_ctrl_handler_free(&core->audio_hdl); 37119467fe12SHans Verkuil v4l2_device_unregister(&core->v4l2_dev); 3712bbc83597STrent Piepho kfree(core); 3713bbc83597STrent Piepho return NULL; 3714bbc83597STrent Piepho } 3715bbc83597STrent Piepho 3716bbc83597STrent Piepho /* PCI stuff */ 3717bbc83597STrent Piepho cx88_pci_quirks(core->name, pci); 3718bbc83597STrent Piepho core->lmmio = ioremap(pci_resource_start(pci, 0), 3719bbc83597STrent Piepho pci_resource_len(pci, 0)); 3720bbc83597STrent Piepho core->bmmio = (u8 __iomem *)core->lmmio; 3721bbc83597STrent Piepho 3722399426caSMauro Carvalho Chehab if (!core->lmmio) { 3723bac63981SHans Verkuil release_mem_region(pci_resource_start(pci, 0), 3724bac63981SHans Verkuil pci_resource_len(pci, 0)); 37258c7cb12aSHans Verkuil v4l2_ctrl_handler_free(&core->video_hdl); 37268c7cb12aSHans Verkuil v4l2_ctrl_handler_free(&core->audio_hdl); 3727bac63981SHans Verkuil v4l2_device_unregister(&core->v4l2_dev); 3728fbc0ae20SAlan Cox kfree(core); 3729fbc0ae20SAlan Cox return NULL; 3730fbc0ae20SAlan Cox } 3731fbc0ae20SAlan Cox 3732bbc83597STrent Piepho /* board config */ 3733bbc83597STrent Piepho core->boardnr = UNSET; 3734bbc83597STrent Piepho if (card[core->nr] < ARRAY_SIZE(cx88_boards)) 3735bbc83597STrent Piepho core->boardnr = card[core->nr]; 3736399426caSMauro Carvalho Chehab for (i = 0; core->boardnr == UNSET && i < ARRAY_SIZE(cx88_subids); i++) 3737bbc83597STrent Piepho if (pci->subsystem_vendor == cx88_subids[i].subvendor && 3738bbc83597STrent Piepho pci->subsystem_device == cx88_subids[i].subdevice) 3739bbc83597STrent Piepho core->boardnr = cx88_subids[i].card; 37407b61ba8fSMauro Carvalho Chehab if (core->boardnr == UNSET) { 3741bbc83597STrent Piepho core->boardnr = CX88_BOARD_UNKNOWN; 3742bbc83597STrent Piepho cx88_card_list(core, pci); 3743bbc83597STrent Piepho } 3744bbc83597STrent Piepho 3745b5237747SEzequiel Garcia core->board = cx88_boards[core->boardnr]; 3746bbc83597STrent Piepho 37473007703dSMauro Carvalho Chehab if (!core->board.num_frontends && (core->board.mpeg & CX88_MPEG_DVB)) 3748363c35fcSSteven Toth core->board.num_frontends = 1; 3749363c35fcSSteven Toth 375065bc2fe8SMauro Carvalho Chehab pr_info("subsystem: %04x:%04x, board: %s [card=%d,%s], frontend(s): %d\n", 37510f19e65bSMauro Carvalho Chehab pci->subsystem_vendor, pci->subsystem_device, core->board.name, 3752bbc83597STrent Piepho core->boardnr, card[core->nr] == core->boardnr ? 3753363c35fcSSteven Toth "insmod option" : "autodetected", 3754363c35fcSSteven Toth core->board.num_frontends); 3755bbc83597STrent Piepho 3756bbc83597STrent Piepho if (tuner[core->nr] != UNSET) 3757bbc83597STrent Piepho core->board.tuner_type = tuner[core->nr]; 3758bbc83597STrent Piepho if (radio[core->nr] != UNSET) 3759bbc83597STrent Piepho core->board.radio_type = radio[core->nr]; 3760bbc83597STrent Piepho 376102615ed5SMauro Carvalho Chehab dprintk(1, "TV tuner type %d, Radio tuner type %d\n", 37620f19e65bSMauro Carvalho Chehab core->board.tuner_type, core->board.radio_type); 3763bbc83597STrent Piepho 3764bbc83597STrent Piepho /* init hardware */ 3765bbc83597STrent Piepho cx88_reset(core); 3766bbc83597STrent Piepho cx88_card_setup_pre_i2c(core); 3767bbc83597STrent Piepho cx88_i2c_init(core, pci); 3768189bf5f0SMauro Carvalho Chehab 3769189bf5f0SMauro Carvalho Chehab /* load tuner module, if needed */ 37707b61ba8fSMauro Carvalho Chehab if (core->board.tuner_type != UNSET) { 3771399426caSMauro Carvalho Chehab /* 3772399426caSMauro Carvalho Chehab * Ignore 0x6b and 0x6f on cx88 boards. 377343d5eab7SHans Verkuil * FusionHDTV5 RT Gold has an ir receiver at 0x6b 3774399426caSMauro Carvalho Chehab * and an RTC at 0x6f which can get corrupted if probed. 3775399426caSMauro Carvalho Chehab */ 377643d5eab7SHans Verkuil static const unsigned short tv_addrs[] = { 377743d5eab7SHans Verkuil 0x42, 0x43, 0x4a, 0x4b, /* tda8290 */ 377843d5eab7SHans Verkuil 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 377943d5eab7SHans Verkuil 0x68, 0x69, 0x6a, 0x6c, 0x6d, 0x6e, 378043d5eab7SHans Verkuil I2C_CLIENT_END 378143d5eab7SHans Verkuil }; 3782b8341e1dSHans Verkuil int has_demod = (core->board.tda9887_conf & TDA9887_PRESENT); 3783b8341e1dSHans Verkuil 3784399426caSMauro Carvalho Chehab /* 3785399426caSMauro Carvalho Chehab * I don't trust the radio_type as is stored in the card 3786399426caSMauro Carvalho Chehab * definitions, so we just probe for it. 3787399426caSMauro Carvalho Chehab * The radio_type is sometimes missing, or set to UNSET but 3788399426caSMauro Carvalho Chehab * later code configures a tea5767. 3789b8341e1dSHans Verkuil */ 379053dacb15SHans Verkuil v4l2_i2c_new_subdev(&core->v4l2_dev, &core->i2c_adap, 3791399426caSMauro Carvalho Chehab "tuner", 0, 3792399426caSMauro Carvalho Chehab v4l2_i2c_tuner_addrs(ADDRS_RADIO)); 3793b8341e1dSHans Verkuil if (has_demod) 379453dacb15SHans Verkuil v4l2_i2c_new_subdev(&core->v4l2_dev, 37959a1f8b34SLaurent Pinchart &core->i2c_adap, "tuner", 379653dacb15SHans Verkuil 0, v4l2_i2c_tuner_addrs(ADDRS_DEMOD)); 3797b8341e1dSHans Verkuil if (core->board.tuner_addr == ADDR_UNSET) { 379853dacb15SHans Verkuil v4l2_i2c_new_subdev(&core->v4l2_dev, 37999a1f8b34SLaurent Pinchart &core->i2c_adap, "tuner", 380053dacb15SHans Verkuil 0, has_demod ? tv_addrs + 4 : tv_addrs); 3801b8341e1dSHans Verkuil } else { 3802e6574f2fSHans Verkuil v4l2_i2c_new_subdev(&core->v4l2_dev, &core->i2c_adap, 3803399426caSMauro Carvalho Chehab "tuner", core->board.tuner_addr, 3804399426caSMauro Carvalho Chehab NULL); 3805b8341e1dSHans Verkuil } 3806b8341e1dSHans Verkuil } 3807189bf5f0SMauro Carvalho Chehab 3808bbc83597STrent Piepho cx88_card_setup(core); 380989c3bc78SJean Delvare if (!disable_ir) { 381015ceb6b1SJean Delvare cx88_i2c_init_ir(core); 3811bbc83597STrent Piepho cx88_ir_init(core, pci); 381289c3bc78SJean Delvare } 3813bbc83597STrent Piepho 3814bbc83597STrent Piepho return core; 3815bbc83597STrent Piepho } 3816