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 540f19e65bSMauro Carvalho Chehab 551da177e4SLinus Torvalds /* ------------------------------------------------------------------ */ 561da177e4SLinus Torvalds /* board config info */ 571da177e4SLinus Torvalds 584bf1226aSMauro Carvalho Chehab /* If radio_type !=UNSET, radio_addr should be specified 594bf1226aSMauro Carvalho Chehab */ 604bf1226aSMauro Carvalho Chehab 61bbc83597STrent Piepho static const struct cx88_board cx88_boards[] = { 621da177e4SLinus Torvalds [CX88_BOARD_UNKNOWN] = { 631da177e4SLinus Torvalds .name = "UNKNOWN/GENERIC", 641da177e4SLinus Torvalds .tuner_type = UNSET, 65b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 66b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 67b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 681da177e4SLinus Torvalds .input = { { 691da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 701da177e4SLinus Torvalds .vmux = 0, 711da177e4SLinus Torvalds }, { 721da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE2, 731da177e4SLinus Torvalds .vmux = 1, 741da177e4SLinus Torvalds }, { 751da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE3, 761da177e4SLinus Torvalds .vmux = 2, 771da177e4SLinus Torvalds }, { 781da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE4, 791da177e4SLinus Torvalds .vmux = 3, 801da177e4SLinus Torvalds } }, 811da177e4SLinus Torvalds }, 821da177e4SLinus Torvalds [CX88_BOARD_HAUPPAUGE] = { 831da177e4SLinus Torvalds .name = "Hauppauge WinTV 34xxx models", 841da177e4SLinus Torvalds .tuner_type = UNSET, 85b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 86b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 87b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 881da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT, 891da177e4SLinus Torvalds .input = { { 901da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 911da177e4SLinus Torvalds .vmux = 0, 921da177e4SLinus Torvalds .gpio0 = 0xff00, // internal decoder 931da177e4SLinus Torvalds }, { 941da177e4SLinus Torvalds .type = CX88_VMUX_DEBUG, 951da177e4SLinus Torvalds .vmux = 0, 961da177e4SLinus Torvalds .gpio0 = 0xff01, // mono from tuner chip 971da177e4SLinus Torvalds }, { 981da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 991da177e4SLinus Torvalds .vmux = 1, 1001da177e4SLinus Torvalds .gpio0 = 0xff02, 1011da177e4SLinus Torvalds }, { 1021da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 1031da177e4SLinus Torvalds .vmux = 2, 1041da177e4SLinus Torvalds .gpio0 = 0xff02, 1051da177e4SLinus Torvalds } }, 1061da177e4SLinus Torvalds .radio = { 1071da177e4SLinus Torvalds .type = CX88_RADIO, 1081da177e4SLinus Torvalds .gpio0 = 0xff01, 1091da177e4SLinus Torvalds }, 1101da177e4SLinus Torvalds }, 1111da177e4SLinus Torvalds [CX88_BOARD_GDI] = { 1121da177e4SLinus Torvalds .name = "GDI Black Gold", 1131da177e4SLinus Torvalds .tuner_type = UNSET, 114b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 115b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 116b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 1171da177e4SLinus Torvalds .input = { { 1181da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 1191da177e4SLinus Torvalds .vmux = 0, 120fd3113e8SMauro Carvalho Chehab }, { 121fd3113e8SMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO, 122fd3113e8SMauro Carvalho Chehab .vmux = 2, 1231da177e4SLinus Torvalds } }, 1241da177e4SLinus Torvalds }, 1251da177e4SLinus Torvalds [CX88_BOARD_PIXELVIEW] = { 1261da177e4SLinus Torvalds .name = "PixelView", 127b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_PAL, 128b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 129b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 130b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 1311da177e4SLinus Torvalds .input = { { 1321da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 1331da177e4SLinus Torvalds .vmux = 0, 1341da177e4SLinus Torvalds .gpio0 = 0xff00, // internal decoder 1351da177e4SLinus Torvalds }, { 1361da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 1371da177e4SLinus Torvalds .vmux = 1, 1381da177e4SLinus Torvalds }, { 1391da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 1401da177e4SLinus Torvalds .vmux = 2, 1411da177e4SLinus Torvalds } }, 1421da177e4SLinus Torvalds .radio = { 1431da177e4SLinus Torvalds .type = CX88_RADIO, 1441da177e4SLinus Torvalds .gpio0 = 0xff10, 1451da177e4SLinus Torvalds }, 1461da177e4SLinus Torvalds }, 1471da177e4SLinus Torvalds [CX88_BOARD_ATI_WONDER_PRO] = { 1481da177e4SLinus Torvalds .name = "ATI TV Wonder Pro", 149b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_4IN1, 150b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 151b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 152b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 1531da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT | TDA9887_INTERCARRIER, 1541da177e4SLinus Torvalds .input = { { 1551da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 1561da177e4SLinus Torvalds .vmux = 0, 1571da177e4SLinus Torvalds .gpio0 = 0x03ff, 1581da177e4SLinus Torvalds }, { 1591da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 1601da177e4SLinus Torvalds .vmux = 1, 1611da177e4SLinus Torvalds .gpio0 = 0x03fe, 1621da177e4SLinus Torvalds }, { 1631da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 1641da177e4SLinus Torvalds .vmux = 2, 1651da177e4SLinus Torvalds .gpio0 = 0x03fe, 1661da177e4SLinus Torvalds } }, 1671da177e4SLinus Torvalds }, 1681da177e4SLinus Torvalds [CX88_BOARD_WINFAST2000XP_EXPERT] = { 1691da177e4SLinus Torvalds .name = "Leadtek Winfast 2000XP Expert", 170b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_4IN1, 171b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 172b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 173b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 1741da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT, 1751da177e4SLinus Torvalds .input = { { 1761da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 1771da177e4SLinus Torvalds .vmux = 0, 1781da177e4SLinus Torvalds .gpio0 = 0x00F5e700, 1791da177e4SLinus Torvalds .gpio1 = 0x00003004, 1801da177e4SLinus Torvalds .gpio2 = 0x00F5e700, 1811da177e4SLinus Torvalds .gpio3 = 0x02000000, 1821da177e4SLinus Torvalds }, { 1831da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 1841da177e4SLinus Torvalds .vmux = 1, 1851da177e4SLinus Torvalds .gpio0 = 0x00F5c700, 1861da177e4SLinus Torvalds .gpio1 = 0x00003004, 1871da177e4SLinus Torvalds .gpio2 = 0x00F5c700, 1881da177e4SLinus Torvalds .gpio3 = 0x02000000, 1891da177e4SLinus Torvalds }, { 1901da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 1911da177e4SLinus Torvalds .vmux = 2, 1921da177e4SLinus Torvalds .gpio0 = 0x00F5c700, 1931da177e4SLinus Torvalds .gpio1 = 0x00003004, 1941da177e4SLinus Torvalds .gpio2 = 0x00F5c700, 1951da177e4SLinus Torvalds .gpio3 = 0x02000000, 1961da177e4SLinus Torvalds } }, 1971da177e4SLinus Torvalds .radio = { 1981da177e4SLinus Torvalds .type = CX88_RADIO, 1991da177e4SLinus Torvalds .gpio0 = 0x00F5d700, 2001da177e4SLinus Torvalds .gpio1 = 0x00003004, 2011da177e4SLinus Torvalds .gpio2 = 0x00F5d700, 2021da177e4SLinus Torvalds .gpio3 = 0x02000000, 2031da177e4SLinus Torvalds }, 2041da177e4SLinus Torvalds }, 2057418f346SLubomir Bulej [CX88_BOARD_AVERTV_STUDIO_303] = { 2061da177e4SLinus Torvalds .name = "AverTV Studio 303 (M126)", 207b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 208b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 209b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 210b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 2111da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT, 2121da177e4SLinus Torvalds .input = { { 2131da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 2141da177e4SLinus Torvalds .vmux = 0, 2154aca4831SMarcin Rudowski .gpio1 = 0xe09f, 2161da177e4SLinus Torvalds }, { 2171da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 2181da177e4SLinus Torvalds .vmux = 1, 2194aca4831SMarcin Rudowski .gpio1 = 0xe05f, 2201da177e4SLinus Torvalds }, { 2211da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 2221da177e4SLinus Torvalds .vmux = 2, 2234aca4831SMarcin Rudowski .gpio1 = 0xe05f, 2241da177e4SLinus Torvalds } }, 2251da177e4SLinus Torvalds .radio = { 2264aca4831SMarcin Rudowski .gpio1 = 0xe0df, 2271da177e4SLinus Torvalds .type = CX88_RADIO, 2281da177e4SLinus Torvalds }, 2291da177e4SLinus Torvalds }, 2301da177e4SLinus Torvalds [CX88_BOARD_MSI_TVANYWHERE_MASTER] = { 2311da177e4SLinus Torvalds // added gpio values thanks to Michal 2321da177e4SLinus Torvalds // values for PAL from DScaler 2331da177e4SLinus Torvalds .name = "MSI TV-@nywhere Master", 234b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_MT2032, 235b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 236b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 237b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 2383ae1adc6SNickolay V. Shmyrev .tda9887_conf = TDA9887_PRESENT | TDA9887_INTERCARRIER_NTSC, 2391da177e4SLinus Torvalds .input = { { 2401da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 2411da177e4SLinus Torvalds .vmux = 0, 2421da177e4SLinus Torvalds .gpio0 = 0x000040bf, 2431da177e4SLinus Torvalds .gpio1 = 0x000080c0, 2441da177e4SLinus Torvalds .gpio2 = 0x0000ff40, 2451da177e4SLinus Torvalds }, { 2461da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 2471da177e4SLinus Torvalds .vmux = 1, 2481da177e4SLinus Torvalds .gpio0 = 0x000040bf, 2491da177e4SLinus Torvalds .gpio1 = 0x000080c0, 2501da177e4SLinus Torvalds .gpio2 = 0x0000ff40, 2511da177e4SLinus Torvalds }, { 2521da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 2531da177e4SLinus Torvalds .vmux = 2, 2541da177e4SLinus Torvalds .gpio0 = 0x000040bf, 2551da177e4SLinus Torvalds .gpio1 = 0x000080c0, 2561da177e4SLinus Torvalds .gpio2 = 0x0000ff40, 2571da177e4SLinus Torvalds } }, 2581da177e4SLinus Torvalds .radio = { 2591da177e4SLinus Torvalds .type = CX88_RADIO, 26055c88610SMauro Carvalho Chehab .vmux = 3, 26155c88610SMauro Carvalho Chehab .gpio0 = 0x000040bf, 26255c88610SMauro Carvalho Chehab .gpio1 = 0x000080c0, 26355c88610SMauro Carvalho Chehab .gpio2 = 0x0000ff20, 2641da177e4SLinus Torvalds }, 2651da177e4SLinus Torvalds }, 2661da177e4SLinus Torvalds [CX88_BOARD_WINFAST_DV2000] = { 2671da177e4SLinus Torvalds .name = "Leadtek Winfast DV2000", 268b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 269b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 270b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 271b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 2721da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT, 2731da177e4SLinus Torvalds .input = { { 2741da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 2751da177e4SLinus Torvalds .vmux = 0, 2761da177e4SLinus Torvalds .gpio0 = 0x0035e700, 2771da177e4SLinus Torvalds .gpio1 = 0x00003004, 2781da177e4SLinus Torvalds .gpio2 = 0x0035e700, 2791da177e4SLinus Torvalds .gpio3 = 0x02000000, 2801da177e4SLinus Torvalds }, { 2811da177e4SLinus Torvalds 2821da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 2831da177e4SLinus Torvalds .vmux = 1, 2841da177e4SLinus Torvalds .gpio0 = 0x0035c700, 2851da177e4SLinus Torvalds .gpio1 = 0x00003004, 2861da177e4SLinus Torvalds .gpio2 = 0x0035c700, 2871da177e4SLinus Torvalds .gpio3 = 0x02000000, 2881da177e4SLinus Torvalds }, { 2891da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 2901da177e4SLinus Torvalds .vmux = 2, 2911da177e4SLinus Torvalds .gpio0 = 0x0035c700, 2921da177e4SLinus Torvalds .gpio1 = 0x0035c700, 2931da177e4SLinus Torvalds .gpio2 = 0x02000000, 2941da177e4SLinus Torvalds .gpio3 = 0x02000000, 2951da177e4SLinus Torvalds } }, 2961da177e4SLinus Torvalds .radio = { 2971da177e4SLinus Torvalds .type = CX88_RADIO, 2981da177e4SLinus Torvalds .gpio0 = 0x0035d700, 2991da177e4SLinus Torvalds .gpio1 = 0x00007004, 3001da177e4SLinus Torvalds .gpio2 = 0x0035d700, 3011da177e4SLinus Torvalds .gpio3 = 0x02000000, 3021da177e4SLinus Torvalds }, 3031da177e4SLinus Torvalds }, 3041da177e4SLinus Torvalds [CX88_BOARD_LEADTEK_PVR2000] = { 3051da177e4SLinus Torvalds // gpio values for PAL version from regspy by DScaler 3061da177e4SLinus Torvalds .name = "Leadtek PVR 2000", 307b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 308b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 309b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 310b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 3111da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT, 3121da177e4SLinus Torvalds .input = { { 3131da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 3141da177e4SLinus Torvalds .vmux = 0, 315b45009b0SMauro Carvalho Chehab .gpio0 = 0x0000bde2, 3167b27d45bSRicardo Cerqueira .audioroute = 1, 3171da177e4SLinus Torvalds }, { 3181da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 3191da177e4SLinus Torvalds .vmux = 1, 3201da177e4SLinus Torvalds .gpio0 = 0x0000bde6, 3217b27d45bSRicardo Cerqueira .audioroute = 1, 3221da177e4SLinus Torvalds }, { 3231da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 3241da177e4SLinus Torvalds .vmux = 2, 3251da177e4SLinus Torvalds .gpio0 = 0x0000bde6, 3267b27d45bSRicardo Cerqueira .audioroute = 1, 3271da177e4SLinus Torvalds } }, 3281da177e4SLinus Torvalds .radio = { 3291da177e4SLinus Torvalds .type = CX88_RADIO, 3301da177e4SLinus Torvalds .gpio0 = 0x0000bd62, 3317b27d45bSRicardo Cerqueira .audioroute = 1, 3321da177e4SLinus Torvalds }, 33348d5e803SMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD, 3341da177e4SLinus Torvalds }, 3351da177e4SLinus Torvalds [CX88_BOARD_IODATA_GVVCP3PCI] = { 3361da177e4SLinus Torvalds .name = "IODATA GV-VCP3/PCI", 337c39ba330SHans Verkuil .tuner_type = UNSET, 338b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 339b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 340b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 3411da177e4SLinus Torvalds .input = { { 3421da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 3431da177e4SLinus Torvalds .vmux = 0, 3441da177e4SLinus Torvalds }, { 3451da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE2, 3461da177e4SLinus Torvalds .vmux = 1, 3471da177e4SLinus Torvalds }, { 3481da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 3491da177e4SLinus Torvalds .vmux = 2, 3501da177e4SLinus Torvalds } }, 3511da177e4SLinus Torvalds }, 3521da177e4SLinus Torvalds [CX88_BOARD_PROLINK_PLAYTVPVR] = { 3531da177e4SLinus Torvalds .name = "Prolink PlayTV PVR", 354b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_FM1236_MK3, 355b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 356b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 357b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 3581da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT, 3591da177e4SLinus Torvalds .input = { { 3601da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 3611da177e4SLinus Torvalds .vmux = 0, 36249239c35SMatheus Izvekov .gpio0 = 0xbff0, 3631da177e4SLinus Torvalds }, { 3641da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 3651da177e4SLinus Torvalds .vmux = 1, 36649239c35SMatheus Izvekov .gpio0 = 0xbff3, 3671da177e4SLinus Torvalds }, { 3681da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 3691da177e4SLinus Torvalds .vmux = 2, 37049239c35SMatheus Izvekov .gpio0 = 0xbff3, 3711da177e4SLinus Torvalds } }, 3721da177e4SLinus Torvalds .radio = { 3731da177e4SLinus Torvalds .type = CX88_RADIO, 37449239c35SMatheus Izvekov .gpio0 = 0xbff0, 3751da177e4SLinus Torvalds }, 3761da177e4SLinus Torvalds }, 3771da177e4SLinus Torvalds [CX88_BOARD_ASUS_PVR_416] = { 3781da177e4SLinus Torvalds .name = "ASUS PVR-416", 379b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_FM1236_MK3, 380b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 381b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 382b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 3831da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT, 3841da177e4SLinus Torvalds .input = { { 3851da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 3861da177e4SLinus Torvalds .vmux = 0, 3871da177e4SLinus Torvalds .gpio0 = 0x0000fde6, 3881da177e4SLinus Torvalds }, { 3891da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 3901da177e4SLinus Torvalds .vmux = 2, 3911da177e4SLinus Torvalds .gpio0 = 0x0000fde6, // 0x0000fda6 L,R RCA audio in? 3927b27d45bSRicardo Cerqueira .audioroute = 1, 3931da177e4SLinus Torvalds } }, 3941da177e4SLinus Torvalds .radio = { 3951da177e4SLinus Torvalds .type = CX88_RADIO, 3961da177e4SLinus Torvalds .gpio0 = 0x0000fde2, 3971da177e4SLinus Torvalds }, 39848d5e803SMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD, 3991da177e4SLinus Torvalds }, 4001da177e4SLinus Torvalds [CX88_BOARD_MSI_TVANYWHERE] = { 4011da177e4SLinus Torvalds .name = "MSI TV-@nywhere", 402b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_MT2032, 403b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 404b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 405b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 4061da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT, 4071da177e4SLinus Torvalds .input = { { 4081da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 4091da177e4SLinus Torvalds .vmux = 0, 4101da177e4SLinus Torvalds .gpio0 = 0x00000fbf, 4111da177e4SLinus Torvalds .gpio2 = 0x0000fc08, 4121da177e4SLinus Torvalds }, { 4131da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 4141da177e4SLinus Torvalds .vmux = 1, 4151da177e4SLinus Torvalds .gpio0 = 0x00000fbf, 4161da177e4SLinus Torvalds .gpio2 = 0x0000fc68, 4171da177e4SLinus Torvalds }, { 4181da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 4191da177e4SLinus Torvalds .vmux = 2, 4201da177e4SLinus Torvalds .gpio0 = 0x00000fbf, 4211da177e4SLinus Torvalds .gpio2 = 0x0000fc68, 4221da177e4SLinus Torvalds } }, 4231da177e4SLinus Torvalds }, 4241da177e4SLinus Torvalds [CX88_BOARD_KWORLD_DVB_T] = { 4251da177e4SLinus Torvalds .name = "KWorld/VStream XPert DVB-T", 426c39ba330SHans Verkuil .tuner_type = UNSET, 427b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 428b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 429b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 4301da177e4SLinus Torvalds .input = { { 4311da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 4321da177e4SLinus Torvalds .vmux = 1, 4331da177e4SLinus Torvalds .gpio0 = 0x0700, 4341da177e4SLinus Torvalds .gpio2 = 0x0101, 4351da177e4SLinus Torvalds }, { 4361da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 4371da177e4SLinus Torvalds .vmux = 2, 4381da177e4SLinus Torvalds .gpio0 = 0x0700, 4391da177e4SLinus Torvalds .gpio2 = 0x0101, 4401da177e4SLinus Torvalds } }, 44148d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 4421da177e4SLinus Torvalds }, 4431da177e4SLinus Torvalds [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1] = { 444a82decf6SMauro Carvalho Chehab .name = "DViCO FusionHDTV DVB-T1", 445c39ba330SHans Verkuil .tuner_type = UNSET, /* No analog tuner */ 446b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 447b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 448b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 4491da177e4SLinus Torvalds .input = { { 4501da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 4511da177e4SLinus Torvalds .vmux = 1, 4521da177e4SLinus Torvalds .gpio0 = 0x000027df, 4531da177e4SLinus Torvalds }, { 4541da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 4551da177e4SLinus Torvalds .vmux = 2, 4561da177e4SLinus Torvalds .gpio0 = 0x000027df, 4571da177e4SLinus Torvalds } }, 45848d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 4591da177e4SLinus Torvalds }, 4601da177e4SLinus Torvalds [CX88_BOARD_KWORLD_LTV883] = { 4611da177e4SLinus Torvalds .name = "KWorld LTV883RF", 462b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_TNF_8831BGFF, 463b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 464b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 465b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 4661da177e4SLinus Torvalds .input = { { 4671da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 4681da177e4SLinus Torvalds .vmux = 0, 4691da177e4SLinus Torvalds .gpio0 = 0x07f8, 4701da177e4SLinus Torvalds }, { 4711da177e4SLinus Torvalds .type = CX88_VMUX_DEBUG, 4721da177e4SLinus Torvalds .vmux = 0, 4731da177e4SLinus Torvalds .gpio0 = 0x07f9, // mono from tuner chip 4741da177e4SLinus Torvalds }, { 4751da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 4761da177e4SLinus Torvalds .vmux = 1, 4771da177e4SLinus Torvalds .gpio0 = 0x000007fa, 4781da177e4SLinus Torvalds }, { 4791da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 4801da177e4SLinus Torvalds .vmux = 2, 4811da177e4SLinus Torvalds .gpio0 = 0x000007fa, 4821da177e4SLinus Torvalds } }, 4831da177e4SLinus Torvalds .radio = { 4841da177e4SLinus Torvalds .type = CX88_RADIO, 4851da177e4SLinus Torvalds .gpio0 = 0x000007f8, 4861da177e4SLinus Torvalds }, 4871da177e4SLinus Torvalds }, 488a82decf6SMauro Carvalho Chehab [CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q] = { 489a82decf6SMauro Carvalho Chehab .name = "DViCO FusionHDTV 3 Gold-Q", 4901da177e4SLinus Torvalds .tuner_type = TUNER_MICROTUNE_4042FI5, 491b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 492b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 493b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 4941da177e4SLinus Torvalds /* 4951da177e4SLinus Torvalds GPIO[0] resets DT3302 DTV receiver 4961da177e4SLinus Torvalds 0 - reset asserted 4971da177e4SLinus Torvalds 1 - normal operation 4981da177e4SLinus Torvalds GPIO[1] mutes analog audio output connector 4991da177e4SLinus Torvalds 0 - enable selected source 5001da177e4SLinus Torvalds 1 - mute 5011da177e4SLinus Torvalds GPIO[2] selects source for analog audio output connector 5021da177e4SLinus Torvalds 0 - analog audio input connector on tab 5031da177e4SLinus Torvalds 1 - analog DAC output from CX23881 chip 5041da177e4SLinus Torvalds GPIO[3] selects RF input connector on tuner module 5051da177e4SLinus Torvalds 0 - RF connector labeled CABLE 5061da177e4SLinus Torvalds 1 - RF connector labeled ANT 507a82decf6SMauro Carvalho Chehab GPIO[4] selects high RF for QAM256 mode 508a82decf6SMauro Carvalho Chehab 0 - normal RF 509a82decf6SMauro Carvalho Chehab 1 - high RF 5101da177e4SLinus Torvalds */ 5111da177e4SLinus Torvalds .input = { { 5121da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 5131da177e4SLinus Torvalds .vmux = 0, 5141da177e4SLinus Torvalds .gpio0 = 0x0f0d, 5151da177e4SLinus Torvalds }, { 5161da177e4SLinus Torvalds .type = CX88_VMUX_CABLE, 5171da177e4SLinus Torvalds .vmux = 0, 5181da177e4SLinus Torvalds .gpio0 = 0x0f05, 5191da177e4SLinus Torvalds }, { 5201da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 5211da177e4SLinus Torvalds .vmux = 1, 5221da177e4SLinus Torvalds .gpio0 = 0x0f00, 5231da177e4SLinus Torvalds }, { 5241da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 5251da177e4SLinus Torvalds .vmux = 2, 5261da177e4SLinus Torvalds .gpio0 = 0x0f00, 5271da177e4SLinus Torvalds } }, 52848d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 5291da177e4SLinus Torvalds }, 5301da177e4SLinus Torvalds [CX88_BOARD_HAUPPAUGE_DVB_T1] = { 5311da177e4SLinus Torvalds .name = "Hauppauge Nova-T DVB-T", 532c39ba330SHans Verkuil .tuner_type = UNSET, 533b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 534b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 535b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 5361da177e4SLinus Torvalds .input = { { 5371da177e4SLinus Torvalds .type = CX88_VMUX_DVB, 5381da177e4SLinus Torvalds .vmux = 0, 5391da177e4SLinus Torvalds } }, 54048d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 5411da177e4SLinus Torvalds }, 5421da177e4SLinus Torvalds [CX88_BOARD_CONEXANT_DVB_T1] = { 5431da177e4SLinus Torvalds .name = "Conexant DVB-T reference design", 544c39ba330SHans Verkuil .tuner_type = UNSET, 545b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 546b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 547b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 5481da177e4SLinus Torvalds .input = { { 5491da177e4SLinus Torvalds .type = CX88_VMUX_DVB, 5501da177e4SLinus Torvalds .vmux = 0, 5511da177e4SLinus Torvalds } }, 55248d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 5531da177e4SLinus Torvalds }, 5541da177e4SLinus Torvalds [CX88_BOARD_PROVIDEO_PV259] = { 5551da177e4SLinus Torvalds .name = "Provideo PV259", 5561da177e4SLinus Torvalds .tuner_type = TUNER_PHILIPS_FQ1216ME, 557b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 558b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 559b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 5601da177e4SLinus Torvalds .input = { { 5611da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 5621da177e4SLinus Torvalds .vmux = 0, 5637b27d45bSRicardo Cerqueira .audioroute = 1, 5641da177e4SLinus Torvalds } }, 56548d5e803SMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD, 5661da177e4SLinus Torvalds }, 5671da177e4SLinus Torvalds [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS] = { 568a82decf6SMauro Carvalho Chehab .name = "DViCO FusionHDTV DVB-T Plus", 569c39ba330SHans Verkuil .tuner_type = UNSET, /* No analog tuner */ 570b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 571b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 572b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 5731da177e4SLinus Torvalds .input = { { 5741da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 5751da177e4SLinus Torvalds .vmux = 1, 5761da177e4SLinus Torvalds .gpio0 = 0x000027df, 5771da177e4SLinus Torvalds }, { 5781da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 5791da177e4SLinus Torvalds .vmux = 2, 5801da177e4SLinus Torvalds .gpio0 = 0x000027df, 5811da177e4SLinus Torvalds } }, 58248d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 5831da177e4SLinus Torvalds }, 5841da177e4SLinus Torvalds [CX88_BOARD_DNTV_LIVE_DVB_T] = { 5851da177e4SLinus Torvalds .name = "digitalnow DNTV Live! DVB-T", 586c39ba330SHans Verkuil .tuner_type = UNSET, 587b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 588b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 589b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 5901da177e4SLinus Torvalds .input = { { 5911da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 5921da177e4SLinus Torvalds .vmux = 1, 5931da177e4SLinus Torvalds .gpio0 = 0x00000700, 5941da177e4SLinus Torvalds .gpio2 = 0x00000101, 5951da177e4SLinus Torvalds }, { 5961da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 5971da177e4SLinus Torvalds .vmux = 2, 5981da177e4SLinus Torvalds .gpio0 = 0x00000700, 5991da177e4SLinus Torvalds .gpio2 = 0x00000101, 6001da177e4SLinus Torvalds } }, 60148d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 6021da177e4SLinus Torvalds }, 6031da177e4SLinus Torvalds [CX88_BOARD_PCHDTV_HD3000] = { 6041da177e4SLinus Torvalds .name = "pcHDTV HD3000 HDTV", 6059175b854STrent Piepho .tuner_type = TUNER_THOMSON_DTT761X, 606b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 607b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 608b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 609e4f5c82aSMauro Carvalho Chehab .tda9887_conf = TDA9887_PRESENT, 61019dc74b7STrent Piepho /* GPIO[2] = audio source for analog audio out connector 61119dc74b7STrent Piepho * 0 = analog audio input connector 61219dc74b7STrent Piepho * 1 = CX88 audio DACs 61319dc74b7STrent Piepho * 61419dc74b7STrent Piepho * GPIO[7] = input to CX88's audio/chroma ADC 61519dc74b7STrent Piepho * 0 = FM 10.7 MHz IF 61619dc74b7STrent Piepho * 1 = Sound 4.5 MHz IF 61719dc74b7STrent Piepho * 61819dc74b7STrent Piepho * GPIO[1,5,6] = Oren 51132 pins 27,35,28 respectively 61919dc74b7STrent Piepho * 62019dc74b7STrent Piepho * GPIO[16] = Remote control input 62119dc74b7STrent Piepho */ 6221da177e4SLinus Torvalds .input = { { 6231da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 6241da177e4SLinus Torvalds .vmux = 0, 6251da177e4SLinus Torvalds .gpio0 = 0x00008484, 6261da177e4SLinus Torvalds }, { 6271da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 6281da177e4SLinus Torvalds .vmux = 1, 6291da177e4SLinus Torvalds .gpio0 = 0x00008400, 6301da177e4SLinus Torvalds }, { 6311da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 6321da177e4SLinus Torvalds .vmux = 2, 6331da177e4SLinus Torvalds .gpio0 = 0x00008400, 6341da177e4SLinus Torvalds } }, 6351da177e4SLinus Torvalds .radio = { 6361da177e4SLinus Torvalds .type = CX88_RADIO, 63719dc74b7STrent Piepho .gpio0 = 0x00008404, 6381da177e4SLinus Torvalds }, 63948d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 6401da177e4SLinus Torvalds }, 6411da177e4SLinus Torvalds [CX88_BOARD_HAUPPAUGE_ROSLYN] = { 6421da177e4SLinus Torvalds // entry added by Kaustubh D. Bhalerao <bhalerao.1@osu.edu> 6431da177e4SLinus Torvalds // GPIO values obtained from regspy, courtesy Sean Covel 6441da177e4SLinus Torvalds .name = "Hauppauge WinTV 28xxx (Roslyn) models", 6451da177e4SLinus Torvalds .tuner_type = UNSET, 646b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 647b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 648b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 6491da177e4SLinus Torvalds .input = { { 6501da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 6511da177e4SLinus Torvalds .vmux = 0, 6520345c387SSteven Toth .gpio0 = 0xed1a, 6531da177e4SLinus Torvalds .gpio2 = 0x00ff, 6541da177e4SLinus Torvalds }, { 6551da177e4SLinus Torvalds .type = CX88_VMUX_DEBUG, 6561da177e4SLinus Torvalds .vmux = 0, 6570345c387SSteven Toth .gpio0 = 0xff01, 6581da177e4SLinus Torvalds }, { 6591da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 6601da177e4SLinus Torvalds .vmux = 1, 6611da177e4SLinus Torvalds .gpio0 = 0xff02, 6621da177e4SLinus Torvalds }, { 6631da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 6641da177e4SLinus Torvalds .vmux = 2, 6651da177e4SLinus Torvalds .gpio0 = 0xed92, 6661da177e4SLinus Torvalds .gpio2 = 0x00ff, 6671da177e4SLinus Torvalds } }, 6681da177e4SLinus Torvalds .radio = { 6691da177e4SLinus Torvalds .type = CX88_RADIO, 6701da177e4SLinus Torvalds .gpio0 = 0xed96, 6711da177e4SLinus Torvalds .gpio2 = 0x00ff, 6721da177e4SLinus Torvalds }, 67348d5e803SMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD, 6741da177e4SLinus Torvalds }, 6751da177e4SLinus Torvalds [CX88_BOARD_DIGITALLOGIC_MEC] = { 6761da177e4SLinus Torvalds .name = "Digital-Logic MICROSPACE Entertainment Center (MEC)", 677b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 678b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 679b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 680b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 6811da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT, 6821da177e4SLinus Torvalds .input = { { 6831da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 6841da177e4SLinus Torvalds .vmux = 0, 685b45009b0SMauro Carvalho Chehab .gpio0 = 0x00009d80, 6867b27d45bSRicardo Cerqueira .audioroute = 1, 6871da177e4SLinus Torvalds }, { 6881da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 6891da177e4SLinus Torvalds .vmux = 1, 690b45009b0SMauro Carvalho Chehab .gpio0 = 0x00009d76, 6917b27d45bSRicardo Cerqueira .audioroute = 1, 6921da177e4SLinus Torvalds }, { 6931da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 6941da177e4SLinus Torvalds .vmux = 2, 695b45009b0SMauro Carvalho Chehab .gpio0 = 0x00009d76, 6967b27d45bSRicardo Cerqueira .audioroute = 1, 6971da177e4SLinus Torvalds } }, 6981da177e4SLinus Torvalds .radio = { 6991da177e4SLinus Torvalds .type = CX88_RADIO, 700b45009b0SMauro Carvalho Chehab .gpio0 = 0x00009d00, 7017b27d45bSRicardo Cerqueira .audioroute = 1, 7021da177e4SLinus Torvalds }, 70348d5e803SMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD, 7041da177e4SLinus Torvalds }, 7051da177e4SLinus Torvalds [CX88_BOARD_IODATA_GVBCTV7E] = { 7061da177e4SLinus Torvalds .name = "IODATA GV/BCTV7E", 7071da177e4SLinus Torvalds .tuner_type = TUNER_PHILIPS_FQ1286, 708b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 709b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 710b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 7111da177e4SLinus Torvalds .tda9887_conf = TDA9887_PRESENT, 7121da177e4SLinus Torvalds .input = { { 7131da177e4SLinus Torvalds .type = CX88_VMUX_TELEVISION, 7141da177e4SLinus Torvalds .vmux = 1, 7151da177e4SLinus Torvalds .gpio1 = 0x0000e03f, 7161da177e4SLinus Torvalds }, { 7171da177e4SLinus Torvalds .type = CX88_VMUX_COMPOSITE1, 7181da177e4SLinus Torvalds .vmux = 2, 7191da177e4SLinus Torvalds .gpio1 = 0x0000e07f, 7201da177e4SLinus Torvalds }, { 7211da177e4SLinus Torvalds .type = CX88_VMUX_SVIDEO, 7221da177e4SLinus Torvalds .vmux = 3, 7231da177e4SLinus Torvalds .gpio1 = 0x0000e07f, 7241da177e4SLinus Torvalds } } 7251da177e4SLinus Torvalds }, 726239df2e2SManuel Capinha [CX88_BOARD_PIXELVIEW_PLAYTV_ULTRA_PRO] = { 727239df2e2SManuel Capinha .name = "PixelView PlayTV Ultra Pro (Stereo)", 728b45009b0SMauro Carvalho Chehab /* May be also TUNER_YMEC_TVF_5533MF for NTSC/M or PAL/M */ 729b45009b0SMauro Carvalho Chehab .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 730c5287ba1SMauro Carvalho Chehab .radio_type = UNSET, 731c5287ba1SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 732c5287ba1SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 733b8341e1dSHans Verkuil /* Some variants use a tda9874 and so need the tvaudio module. */ 734facd2366SHans Verkuil .audio_chip = CX88_AUDIO_TVAUDIO, 735239df2e2SManuel Capinha .input = { { 736239df2e2SManuel Capinha .type = CX88_VMUX_TELEVISION, 737239df2e2SManuel Capinha .vmux = 0, 738b45009b0SMauro Carvalho Chehab .gpio0 = 0xbf61, /* internal decoder */ 739239df2e2SManuel Capinha }, { 740239df2e2SManuel Capinha .type = CX88_VMUX_COMPOSITE1, 741239df2e2SManuel Capinha .vmux = 1, 742239df2e2SManuel Capinha .gpio0 = 0xbf63, 743239df2e2SManuel Capinha }, { 744239df2e2SManuel Capinha .type = CX88_VMUX_SVIDEO, 745239df2e2SManuel Capinha .vmux = 2, 746239df2e2SManuel Capinha .gpio0 = 0xbf63, 747239df2e2SManuel Capinha } }, 748239df2e2SManuel Capinha .radio = { 749239df2e2SManuel Capinha .type = CX88_RADIO, 750239df2e2SManuel Capinha .gpio0 = 0xbf60, 751239df2e2SManuel Capinha }, 752239df2e2SManuel Capinha }, 753b45009b0SMauro Carvalho Chehab [CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_T] = { 754a82decf6SMauro Carvalho Chehab .name = "DViCO FusionHDTV 3 Gold-T", 75583ac8722SMichael Krufky .tuner_type = TUNER_THOMSON_DTT761X, 756b45009b0SMauro Carvalho Chehab .radio_type = UNSET, 757b45009b0SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 758b45009b0SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 759e4f5c82aSMauro Carvalho Chehab .tda9887_conf = TDA9887_PRESENT, 760b45009b0SMauro Carvalho Chehab .input = { { 761b45009b0SMauro Carvalho Chehab .type = CX88_VMUX_TELEVISION, 762b45009b0SMauro Carvalho Chehab .vmux = 0, 763e52e98a7SMauro Carvalho Chehab .gpio0 = 0x97ed, 764b45009b0SMauro Carvalho Chehab }, { 765b45009b0SMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1, 766b45009b0SMauro Carvalho Chehab .vmux = 1, 767e52e98a7SMauro Carvalho Chehab .gpio0 = 0x97e9, 768b45009b0SMauro Carvalho Chehab }, { 769b45009b0SMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO, 770b45009b0SMauro Carvalho Chehab .vmux = 2, 771e52e98a7SMauro Carvalho Chehab .gpio0 = 0x97e9, 772b45009b0SMauro Carvalho Chehab } }, 77348d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 774b45009b0SMauro Carvalho Chehab }, 775a82decf6SMauro Carvalho Chehab [CX88_BOARD_ADSTECH_DVB_T_PCI] = { 776a82decf6SMauro Carvalho Chehab .name = "ADS Tech Instant TV DVB-T PCI", 777c39ba330SHans Verkuil .tuner_type = UNSET, 778a82decf6SMauro Carvalho Chehab .radio_type = UNSET, 779a82decf6SMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 780a82decf6SMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 781a82decf6SMauro Carvalho Chehab .input = { { 782a82decf6SMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1, 783a82decf6SMauro Carvalho Chehab .vmux = 1, 784a82decf6SMauro Carvalho Chehab .gpio0 = 0x0700, 785a82decf6SMauro Carvalho Chehab .gpio2 = 0x0101, 786a82decf6SMauro Carvalho Chehab }, { 787a82decf6SMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO, 788a82decf6SMauro Carvalho Chehab .vmux = 2, 789a82decf6SMauro Carvalho Chehab .gpio0 = 0x0700, 790a82decf6SMauro Carvalho Chehab .gpio2 = 0x0101, 791a82decf6SMauro Carvalho Chehab } }, 79248d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 793a82decf6SMauro Carvalho Chehab }, 794e057ee11SMichael Krufky [CX88_BOARD_TERRATEC_CINERGY_1400_DVB_T1] = { 795e057ee11SMichael Krufky .name = "TerraTec Cinergy 1400 DVB-T", 796c39ba330SHans Verkuil .tuner_type = UNSET, 797e057ee11SMichael Krufky .input = { { 798e057ee11SMichael Krufky .type = CX88_VMUX_DVB, 799e057ee11SMichael Krufky .vmux = 0, 80005eda249SHeiko Baums }, { 80105eda249SHeiko Baums .type = CX88_VMUX_COMPOSITE1, 80205eda249SHeiko Baums .vmux = 2, 80305eda249SHeiko Baums }, { 80405eda249SHeiko Baums .type = CX88_VMUX_SVIDEO, 80505eda249SHeiko Baums .vmux = 2, 806e057ee11SMichael Krufky } }, 80748d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 808e057ee11SMichael Krufky }, 8099fef07caSMichael Krufky [CX88_BOARD_DVICO_FUSIONHDTV_5_GOLD] = { 8109fef07caSMichael Krufky .name = "DViCO FusionHDTV 5 Gold", 8119c26c8b1SMichael Krufky .tuner_type = TUNER_LG_TDVS_H06XF, /* TDVS-H062F */ 8129fef07caSMichael Krufky .radio_type = UNSET, 8139fef07caSMichael Krufky .tuner_addr = ADDR_UNSET, 8149fef07caSMichael Krufky .radio_addr = ADDR_UNSET, 815e52e98a7SMauro Carvalho Chehab .tda9887_conf = TDA9887_PRESENT, 8169fef07caSMichael Krufky .input = { { 8179fef07caSMichael Krufky .type = CX88_VMUX_TELEVISION, 8189fef07caSMichael Krufky .vmux = 0, 819e52e98a7SMauro Carvalho Chehab .gpio0 = 0x87fd, 8209fef07caSMichael Krufky }, { 8219fef07caSMichael Krufky .type = CX88_VMUX_COMPOSITE1, 8229fef07caSMichael Krufky .vmux = 1, 823e52e98a7SMauro Carvalho Chehab .gpio0 = 0x87f9, 8249fef07caSMichael Krufky }, { 8259fef07caSMichael Krufky .type = CX88_VMUX_SVIDEO, 8269fef07caSMichael Krufky .vmux = 2, 827e52e98a7SMauro Carvalho Chehab .gpio0 = 0x87f9, 8289fef07caSMichael Krufky } }, 82948d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 8309fef07caSMichael Krufky }, 831d45170edSNickolay V. Shmyrev [CX88_BOARD_AVERMEDIA_ULTRATV_MC_550] = { 832d45170edSNickolay V. Shmyrev .name = "AverMedia UltraTV Media Center PCI 550", 833d45170edSNickolay V. Shmyrev .tuner_type = TUNER_PHILIPS_FM1236_MK3, 834d45170edSNickolay V. Shmyrev .radio_type = UNSET, 835d45170edSNickolay V. Shmyrev .tuner_addr = ADDR_UNSET, 836d45170edSNickolay V. Shmyrev .radio_addr = ADDR_UNSET, 837d45170edSNickolay V. Shmyrev .tda9887_conf = TDA9887_PRESENT, 838d45170edSNickolay V. Shmyrev .input = { { 839d45170edSNickolay V. Shmyrev .type = CX88_VMUX_COMPOSITE1, 840d45170edSNickolay V. Shmyrev .vmux = 0, 841d45170edSNickolay V. Shmyrev .gpio0 = 0x0000cd73, 8427b27d45bSRicardo Cerqueira .audioroute = 1, 843d45170edSNickolay V. Shmyrev }, { 844d45170edSNickolay V. Shmyrev .type = CX88_VMUX_SVIDEO, 845d45170edSNickolay V. Shmyrev .vmux = 1, 846d45170edSNickolay V. Shmyrev .gpio0 = 0x0000cd73, 8477b27d45bSRicardo Cerqueira .audioroute = 1, 848d45170edSNickolay V. Shmyrev }, { 849d45170edSNickolay V. Shmyrev .type = CX88_VMUX_TELEVISION, 850d45170edSNickolay V. Shmyrev .vmux = 3, 851d45170edSNickolay V. Shmyrev .gpio0 = 0x0000cdb3, 8527b27d45bSRicardo Cerqueira .audioroute = 1, 853d45170edSNickolay V. Shmyrev } }, 854d45170edSNickolay V. Shmyrev .radio = { 855d45170edSNickolay V. Shmyrev .type = CX88_RADIO, 856d45170edSNickolay V. Shmyrev .vmux = 2, 857d45170edSNickolay V. Shmyrev .gpio0 = 0x0000cdf3, 8587b27d45bSRicardo Cerqueira .audioroute = 1, 859d45170edSNickolay V. Shmyrev }, 8605b26c82fSMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD, 861d45170edSNickolay V. Shmyrev }, 8620bcc37c3SAlexander Wold [CX88_BOARD_KWORLD_VSTREAM_EXPERT_DVD] = { 8630bcc37c3SAlexander Wold /* Alexander Wold <awold@bigfoot.com> */ 8640bcc37c3SAlexander Wold .name = "Kworld V-Stream Xpert DVD", 8650bcc37c3SAlexander Wold .tuner_type = UNSET, 8660bcc37c3SAlexander Wold .input = { { 8670bcc37c3SAlexander Wold .type = CX88_VMUX_COMPOSITE1, 8680bcc37c3SAlexander Wold .vmux = 1, 8690bcc37c3SAlexander Wold .gpio0 = 0x03000000, 8700bcc37c3SAlexander Wold .gpio1 = 0x01000000, 8710bcc37c3SAlexander Wold .gpio2 = 0x02000000, 8720bcc37c3SAlexander Wold .gpio3 = 0x00100000, 8730bcc37c3SAlexander Wold }, { 8740bcc37c3SAlexander Wold .type = CX88_VMUX_SVIDEO, 8750bcc37c3SAlexander Wold .vmux = 2, 8760bcc37c3SAlexander Wold .gpio0 = 0x03000000, 8770bcc37c3SAlexander Wold .gpio1 = 0x01000000, 8780bcc37c3SAlexander Wold .gpio2 = 0x02000000, 8790bcc37c3SAlexander Wold .gpio3 = 0x00100000, 8800bcc37c3SAlexander Wold } }, 8810bcc37c3SAlexander Wold }, 882e976f937SKirk Lapray [CX88_BOARD_ATI_HDTVWONDER] = { 883e976f937SKirk Lapray .name = "ATI HDTV Wonder", 884e976f937SKirk Lapray .tuner_type = TUNER_PHILIPS_TUV1236D, 885e976f937SKirk Lapray .radio_type = UNSET, 886e976f937SKirk Lapray .tuner_addr = ADDR_UNSET, 887e976f937SKirk Lapray .radio_addr = ADDR_UNSET, 888e976f937SKirk Lapray .input = { { 889e976f937SKirk Lapray .type = CX88_VMUX_TELEVISION, 890e976f937SKirk Lapray .vmux = 0, 891e976f937SKirk Lapray .gpio0 = 0x00000ff7, 892e976f937SKirk Lapray .gpio1 = 0x000000ff, 893e976f937SKirk Lapray .gpio2 = 0x00000001, 894e976f937SKirk Lapray .gpio3 = 0x00000000, 895e976f937SKirk Lapray }, { 896e976f937SKirk Lapray .type = CX88_VMUX_COMPOSITE1, 897e976f937SKirk Lapray .vmux = 1, 898e976f937SKirk Lapray .gpio0 = 0x00000ffe, 899e976f937SKirk Lapray .gpio1 = 0x000000ff, 900e976f937SKirk Lapray .gpio2 = 0x00000001, 901e976f937SKirk Lapray .gpio3 = 0x00000000, 902e976f937SKirk Lapray }, { 903e976f937SKirk Lapray .type = CX88_VMUX_SVIDEO, 904e976f937SKirk Lapray .vmux = 2, 905e976f937SKirk Lapray .gpio0 = 0x00000ffe, 906e976f937SKirk Lapray .gpio1 = 0x000000ff, 907e976f937SKirk Lapray .gpio2 = 0x00000001, 908e976f937SKirk Lapray .gpio3 = 0x00000000, 909e976f937SKirk Lapray } }, 91048d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 911e976f937SKirk Lapray }, 9122b5200a7SDavid Shirley [CX88_BOARD_WINFAST_DTV1000] = { 9132b5200a7SDavid Shirley .name = "WinFast DTV1000-T", 914c39ba330SHans Verkuil .tuner_type = UNSET, 9152b5200a7SDavid Shirley .radio_type = UNSET, 9162b5200a7SDavid Shirley .tuner_addr = ADDR_UNSET, 9172b5200a7SDavid Shirley .radio_addr = ADDR_UNSET, 9182b5200a7SDavid Shirley .input = { { 9192b5200a7SDavid Shirley .type = CX88_VMUX_DVB, 9202b5200a7SDavid Shirley .vmux = 0, 921e8f4e752SJean Delvare }, { 922e8f4e752SJean Delvare .type = CX88_VMUX_COMPOSITE1, 923e8f4e752SJean Delvare .vmux = 1, 924e8f4e752SJean Delvare }, { 925e8f4e752SJean Delvare .type = CX88_VMUX_SVIDEO, 926e8f4e752SJean Delvare .vmux = 2, 9272b5200a7SDavid Shirley } }, 92848d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 9292b5200a7SDavid Shirley }, 9307418f346SLubomir Bulej [CX88_BOARD_AVERTV_303] = { 9317418f346SLubomir Bulej .name = "AVerTV 303 (M126)", 9327418f346SLubomir Bulej .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 9337418f346SLubomir Bulej .radio_type = UNSET, 9347418f346SLubomir Bulej .tuner_addr = ADDR_UNSET, 9357418f346SLubomir Bulej .radio_addr = ADDR_UNSET, 9367418f346SLubomir Bulej .tda9887_conf = TDA9887_PRESENT, 9377418f346SLubomir Bulej .input = { { 9387418f346SLubomir Bulej .type = CX88_VMUX_TELEVISION, 9397418f346SLubomir Bulej .vmux = 0, 9407418f346SLubomir Bulej .gpio0 = 0x00ff, 9417418f346SLubomir Bulej .gpio1 = 0xe09f, 9427418f346SLubomir Bulej .gpio2 = 0x0010, 9437418f346SLubomir Bulej .gpio3 = 0x0000, 9447418f346SLubomir Bulej }, { 9457418f346SLubomir Bulej .type = CX88_VMUX_COMPOSITE1, 9467418f346SLubomir Bulej .vmux = 1, 9477418f346SLubomir Bulej .gpio0 = 0x00ff, 9487418f346SLubomir Bulej .gpio1 = 0xe05f, 9497418f346SLubomir Bulej .gpio2 = 0x0010, 9507418f346SLubomir Bulej .gpio3 = 0x0000, 9517418f346SLubomir Bulej }, { 9527418f346SLubomir Bulej .type = CX88_VMUX_SVIDEO, 9537418f346SLubomir Bulej .vmux = 2, 9547418f346SLubomir Bulej .gpio0 = 0x00ff, 9557418f346SLubomir Bulej .gpio1 = 0xe05f, 9567418f346SLubomir Bulej .gpio2 = 0x0010, 9577418f346SLubomir Bulej .gpio3 = 0x0000, 9587418f346SLubomir Bulej } }, 9597418f346SLubomir Bulej }, 9600fa14aa6SSteven Toth [CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1] = { 9610fa14aa6SSteven Toth .name = "Hauppauge Nova-S-Plus DVB-S", 962c39ba330SHans Verkuil .tuner_type = UNSET, 9630fa14aa6SSteven Toth .radio_type = UNSET, 9640fa14aa6SSteven Toth .tuner_addr = ADDR_UNSET, 9650fa14aa6SSteven Toth .radio_addr = ADDR_UNSET, 966facd2366SHans Verkuil .audio_chip = CX88_AUDIO_WM8775, 9676951803cSLawrence Rust .i2sinputcntl = 2, 9680fa14aa6SSteven Toth .input = { { 9690fa14aa6SSteven Toth .type = CX88_VMUX_DVB, 9700fa14aa6SSteven Toth .vmux = 0, 971fcb97573Slawrence rust /* 2: Line-In */ 972fcb97573Slawrence rust .audioroute = 2, 9730fa14aa6SSteven Toth }, { 9740fa14aa6SSteven Toth .type = CX88_VMUX_COMPOSITE1, 9750fa14aa6SSteven Toth .vmux = 1, 976fcb97573Slawrence rust /* 2: Line-In */ 977fcb97573Slawrence rust .audioroute = 2, 9780fa14aa6SSteven Toth }, { 9790fa14aa6SSteven Toth .type = CX88_VMUX_SVIDEO, 9800fa14aa6SSteven Toth .vmux = 2, 981fcb97573Slawrence rust /* 2: Line-In */ 982fcb97573Slawrence rust .audioroute = 2, 9830fa14aa6SSteven Toth } }, 98448d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 9850fa14aa6SSteven Toth }, 9860fa14aa6SSteven Toth [CX88_BOARD_HAUPPAUGE_NOVASE2_S1] = { 9870fa14aa6SSteven Toth .name = "Hauppauge Nova-SE2 DVB-S", 988c39ba330SHans Verkuil .tuner_type = UNSET, 9890fa14aa6SSteven Toth .radio_type = UNSET, 9900fa14aa6SSteven Toth .tuner_addr = ADDR_UNSET, 9910fa14aa6SSteven Toth .radio_addr = ADDR_UNSET, 9920fa14aa6SSteven Toth .input = { { 9930fa14aa6SSteven Toth .type = CX88_VMUX_DVB, 9940fa14aa6SSteven Toth .vmux = 0, 9950fa14aa6SSteven Toth } }, 99648d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 9970fa14aa6SSteven Toth }, 9980e0351e3SVadim Catana [CX88_BOARD_KWORLD_DVBS_100] = { 9990e0351e3SVadim Catana .name = "KWorld DVB-S 100", 1000c39ba330SHans Verkuil .tuner_type = UNSET, 10010e0351e3SVadim Catana .radio_type = UNSET, 10020e0351e3SVadim Catana .tuner_addr = ADDR_UNSET, 10030e0351e3SVadim Catana .radio_addr = ADDR_UNSET, 1004facd2366SHans Verkuil .audio_chip = CX88_AUDIO_WM8775, 10050e0351e3SVadim Catana .input = { { 10060e0351e3SVadim Catana .type = CX88_VMUX_DVB, 10070e0351e3SVadim Catana .vmux = 0, 100846e67acdSMauro Carvalho Chehab /* 2: Line-In */ 100946e67acdSMauro Carvalho Chehab .audioroute = 2, 10100e0351e3SVadim Catana }, { 10110e0351e3SVadim Catana .type = CX88_VMUX_COMPOSITE1, 10120e0351e3SVadim Catana .vmux = 1, 101346e67acdSMauro Carvalho Chehab /* 2: Line-In */ 101446e67acdSMauro Carvalho Chehab .audioroute = 2, 10150e0351e3SVadim Catana }, { 10160e0351e3SVadim Catana .type = CX88_VMUX_SVIDEO, 10170e0351e3SVadim Catana .vmux = 2, 101846e67acdSMauro Carvalho Chehab /* 2: Line-In */ 101946e67acdSMauro Carvalho Chehab .audioroute = 2, 10200e0351e3SVadim Catana } }, 102148d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 10220e0351e3SVadim Catana }, 1023611900c1SSteven Toth [CX88_BOARD_HAUPPAUGE_HVR1100] = { 1024611900c1SSteven Toth .name = "Hauppauge WinTV-HVR1100 DVB-T/Hybrid", 1025611900c1SSteven Toth .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, 1026611900c1SSteven Toth .radio_type = UNSET, 1027611900c1SSteven Toth .tuner_addr = ADDR_UNSET, 1028611900c1SSteven Toth .radio_addr = ADDR_UNSET, 1029611900c1SSteven Toth .tda9887_conf = TDA9887_PRESENT, 1030611900c1SSteven Toth .input = { { 1031611900c1SSteven Toth .type = CX88_VMUX_TELEVISION, 1032611900c1SSteven Toth .vmux = 0, 1033611900c1SSteven Toth }, { 1034611900c1SSteven Toth .type = CX88_VMUX_COMPOSITE1, 1035611900c1SSteven Toth .vmux = 1, 1036611900c1SSteven Toth }, { 1037611900c1SSteven Toth .type = CX88_VMUX_SVIDEO, 1038611900c1SSteven Toth .vmux = 2, 1039611900c1SSteven Toth } }, 1040611900c1SSteven Toth /* fixme: Add radio support */ 104148d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 1042611900c1SSteven Toth }, 1043611900c1SSteven Toth [CX88_BOARD_HAUPPAUGE_HVR1100LP] = { 1044611900c1SSteven Toth .name = "Hauppauge WinTV-HVR1100 DVB-T/Hybrid (Low Profile)", 1045611900c1SSteven Toth .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, 1046611900c1SSteven Toth .radio_type = UNSET, 1047611900c1SSteven Toth .tuner_addr = ADDR_UNSET, 1048611900c1SSteven Toth .radio_addr = ADDR_UNSET, 1049611900c1SSteven Toth .tda9887_conf = TDA9887_PRESENT, 1050611900c1SSteven Toth .input = { { 1051611900c1SSteven Toth .type = CX88_VMUX_TELEVISION, 1052611900c1SSteven Toth .vmux = 0, 1053611900c1SSteven Toth }, { 1054611900c1SSteven Toth .type = CX88_VMUX_COMPOSITE1, 1055611900c1SSteven Toth .vmux = 1, 1056611900c1SSteven Toth } }, 1057611900c1SSteven Toth /* fixme: Add radio support */ 105848d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 1059611900c1SSteven Toth }, 1060fc40b261SChris Pascoe [CX88_BOARD_DNTV_LIVE_DVB_T_PRO] = { 1061fc40b261SChris Pascoe .name = "digitalnow DNTV Live! DVB-T Pro", 1062fc40b261SChris Pascoe .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, 1063fc40b261SChris Pascoe .radio_type = UNSET, 1064fc40b261SChris Pascoe .tuner_addr = ADDR_UNSET, 1065fc40b261SChris Pascoe .radio_addr = ADDR_UNSET, 1066fc40b261SChris Pascoe .tda9887_conf = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE | 1067fc40b261SChris Pascoe TDA9887_PORT2_ACTIVE, 1068fc40b261SChris Pascoe .input = { { 1069fc40b261SChris Pascoe .type = CX88_VMUX_TELEVISION, 1070fc40b261SChris Pascoe .vmux = 0, 1071fc40b261SChris Pascoe .gpio0 = 0xf80808, 1072fc40b261SChris Pascoe }, { 1073fc40b261SChris Pascoe .type = CX88_VMUX_COMPOSITE1, 1074fc40b261SChris Pascoe .vmux = 1, 1075fc40b261SChris Pascoe .gpio0 = 0xf80808, 1076fc40b261SChris Pascoe }, { 1077fc40b261SChris Pascoe .type = CX88_VMUX_SVIDEO, 1078fc40b261SChris Pascoe .vmux = 2, 1079fc40b261SChris Pascoe .gpio0 = 0xf80808, 1080fc40b261SChris Pascoe } }, 1081fc40b261SChris Pascoe .radio = { 1082fc40b261SChris Pascoe .type = CX88_RADIO, 1083fc40b261SChris Pascoe .gpio0 = 0xf80808, 1084fc40b261SChris Pascoe }, 108548d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 1086fc40b261SChris Pascoe }, 1087f39624fdSManenti Marco [CX88_BOARD_KWORLD_DVB_T_CX22702] = { 1088f39624fdSManenti Marco /* Kworld V-stream Xpert DVB-T with Thomson tuner */ 1089f39624fdSManenti Marco /* DTT 7579 Conexant CX22702-19 Conexant CX2388x */ 1090f39624fdSManenti Marco /* Manenti Marco <marco_manenti@colman.it> */ 1091f39624fdSManenti Marco .name = "KWorld/VStream XPert DVB-T with cx22702", 1092c39ba330SHans Verkuil .tuner_type = UNSET, 1093f39624fdSManenti Marco .radio_type = UNSET, 1094f39624fdSManenti Marco .tuner_addr = ADDR_UNSET, 1095f39624fdSManenti Marco .radio_addr = ADDR_UNSET, 1096f39624fdSManenti Marco .input = { { 1097f39624fdSManenti Marco .type = CX88_VMUX_COMPOSITE1, 1098f39624fdSManenti Marco .vmux = 1, 1099f39624fdSManenti Marco .gpio0 = 0x0700, 1100f39624fdSManenti Marco .gpio2 = 0x0101, 1101f39624fdSManenti Marco }, { 1102f39624fdSManenti Marco .type = CX88_VMUX_SVIDEO, 1103f39624fdSManenti Marco .vmux = 2, 1104f39624fdSManenti Marco .gpio0 = 0x0700, 1105f39624fdSManenti Marco .gpio2 = 0x0101, 1106f39624fdSManenti Marco } }, 110748d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 1108f39624fdSManenti Marco }, 110943eabb4eSChris Pascoe [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL] = { 111043eabb4eSChris Pascoe .name = "DViCO FusionHDTV DVB-T Dual Digital", 1111c39ba330SHans Verkuil .tuner_type = UNSET, /* No analog tuner */ 111243eabb4eSChris Pascoe .radio_type = UNSET, 111343eabb4eSChris Pascoe .tuner_addr = ADDR_UNSET, 111443eabb4eSChris Pascoe .radio_addr = ADDR_UNSET, 111543eabb4eSChris Pascoe .input = { { 111643eabb4eSChris Pascoe .type = CX88_VMUX_COMPOSITE1, 111743eabb4eSChris Pascoe .vmux = 1, 1118d536e9c4SChris Pascoe .gpio0 = 0x000067df, 111943eabb4eSChris Pascoe }, { 112043eabb4eSChris Pascoe .type = CX88_VMUX_SVIDEO, 112143eabb4eSChris Pascoe .vmux = 2, 1122d536e9c4SChris Pascoe .gpio0 = 0x000067df, 112343eabb4eSChris Pascoe } }, 112448d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 112543eabb4eSChris Pascoe }, 112644256de1SMichael Krufky [CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT] = { 112744256de1SMichael Krufky .name = "KWorld HardwareMpegTV XPert", 112844256de1SMichael Krufky .tuner_type = TUNER_PHILIPS_TDA8290, 112944256de1SMichael Krufky .radio_type = UNSET, 113044256de1SMichael Krufky .tuner_addr = ADDR_UNSET, 113144256de1SMichael Krufky .radio_addr = ADDR_UNSET, 113244256de1SMichael Krufky .input = { { 113344256de1SMichael Krufky .type = CX88_VMUX_TELEVISION, 113444256de1SMichael Krufky .vmux = 0, 1135e2798212SMichael Krufky .gpio0 = 0x3de2, 113624da4e4bSMichael Krufky .gpio2 = 0x00ff, 1137bc53f783SMichael Krufky }, { 1138bc53f783SMichael Krufky .type = CX88_VMUX_COMPOSITE1, 1139bc53f783SMichael Krufky .vmux = 1, 1140bc53f783SMichael Krufky .gpio0 = 0x3de6, 11417b27d45bSRicardo Cerqueira .audioroute = 1, 1142bc53f783SMichael Krufky }, { 1143bc53f783SMichael Krufky .type = CX88_VMUX_SVIDEO, 1144bc53f783SMichael Krufky .vmux = 2, 1145bc53f783SMichael Krufky .gpio0 = 0x3de6, 11467b27d45bSRicardo Cerqueira .audioroute = 1, 114744256de1SMichael Krufky } }, 1148e2798212SMichael Krufky .radio = { 1149e2798212SMichael Krufky .type = CX88_RADIO, 1150e2798212SMichael Krufky .gpio0 = 0x3de6, 115124da4e4bSMichael Krufky .gpio2 = 0x00ff, 1152e2798212SMichael Krufky }, 115348d5e803SMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD, 115444256de1SMichael Krufky }, 1155780dfef3SChris Pascoe [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID] = { 1156780dfef3SChris Pascoe .name = "DViCO FusionHDTV DVB-T Hybrid", 115791ae3299SMichael Krufky .tuner_type = TUNER_THOMSON_FE6600, 1158780dfef3SChris Pascoe .radio_type = UNSET, 1159780dfef3SChris Pascoe .tuner_addr = ADDR_UNSET, 1160780dfef3SChris Pascoe .radio_addr = ADDR_UNSET, 1161780dfef3SChris Pascoe .input = { { 1162780dfef3SChris Pascoe .type = CX88_VMUX_TELEVISION, 1163780dfef3SChris Pascoe .vmux = 0, 1164780dfef3SChris Pascoe .gpio0 = 0x0000a75f, 1165780dfef3SChris Pascoe }, { 1166780dfef3SChris Pascoe .type = CX88_VMUX_COMPOSITE1, 1167780dfef3SChris Pascoe .vmux = 1, 1168780dfef3SChris Pascoe .gpio0 = 0x0000a75b, 1169780dfef3SChris Pascoe }, { 1170780dfef3SChris Pascoe .type = CX88_VMUX_SVIDEO, 1171780dfef3SChris Pascoe .vmux = 2, 1172780dfef3SChris Pascoe .gpio0 = 0x0000a75b, 1173780dfef3SChris Pascoe } }, 117448d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 1175780dfef3SChris Pascoe }, 1176e142e7c4SMichael Krufky [CX88_BOARD_PCHDTV_HD5500] = { 1177e142e7c4SMichael Krufky .name = "pcHDTV HD5500 HDTV", 11789c26c8b1SMichael Krufky .tuner_type = TUNER_LG_TDVS_H06XF, /* TDVS-H064F */ 1179e142e7c4SMichael Krufky .radio_type = UNSET, 1180e142e7c4SMichael Krufky .tuner_addr = ADDR_UNSET, 1181e142e7c4SMichael Krufky .radio_addr = ADDR_UNSET, 1182e142e7c4SMichael Krufky .tda9887_conf = TDA9887_PRESENT, 1183e142e7c4SMichael Krufky .input = { { 1184e142e7c4SMichael Krufky .type = CX88_VMUX_TELEVISION, 1185e142e7c4SMichael Krufky .vmux = 0, 1186e142e7c4SMichael Krufky .gpio0 = 0x87fd, 1187e142e7c4SMichael Krufky }, { 1188e142e7c4SMichael Krufky .type = CX88_VMUX_COMPOSITE1, 1189e142e7c4SMichael Krufky .vmux = 1, 1190e142e7c4SMichael Krufky .gpio0 = 0x87f9, 1191e142e7c4SMichael Krufky }, { 1192e142e7c4SMichael Krufky .type = CX88_VMUX_SVIDEO, 1193e142e7c4SMichael Krufky .vmux = 2, 1194e142e7c4SMichael Krufky .gpio0 = 0x87f9, 1195e142e7c4SMichael Krufky } }, 119648d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 1197e142e7c4SMichael Krufky }, 1198b3038304SValentin Zagura [CX88_BOARD_KWORLD_MCE200_DELUXE] = { 1199b3038304SValentin Zagura /* FIXME: tested TV input only, disabled composite, 1200b3038304SValentin Zagura svideo and radio until they can be tested also. */ 1201b3038304SValentin Zagura .name = "Kworld MCE 200 Deluxe", 1202b3038304SValentin Zagura .tuner_type = TUNER_TENA_9533_DI, 1203b3038304SValentin Zagura .radio_type = UNSET, 1204b3038304SValentin Zagura .tda9887_conf = TDA9887_PRESENT, 1205b3038304SValentin Zagura .tuner_addr = ADDR_UNSET, 1206b3038304SValentin Zagura .radio_addr = ADDR_UNSET, 1207b3038304SValentin Zagura .input = { { 1208b3038304SValentin Zagura .type = CX88_VMUX_TELEVISION, 1209b3038304SValentin Zagura .vmux = 0, 1210b3038304SValentin Zagura .gpio0 = 0x0000BDE6 1211b3038304SValentin Zagura } }, 121248d5e803SMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD, 1213b3038304SValentin Zagura }, 1214a3124622SAngelo Marconi [CX88_BOARD_PIXELVIEW_PLAYTV_P7000] = { 1215a3124622SAngelo Marconi /* FIXME: SVideo, Composite and FM inputs are untested */ 1216a3124622SAngelo Marconi .name = "PixelView PlayTV P7000", 1217a3124622SAngelo Marconi .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 1218a3124622SAngelo Marconi .radio_type = UNSET, 1219a3124622SAngelo Marconi .tuner_addr = ADDR_UNSET, 1220a3124622SAngelo Marconi .radio_addr = ADDR_UNSET, 1221a3124622SAngelo Marconi .tda9887_conf = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE | 1222a3124622SAngelo Marconi TDA9887_PORT2_ACTIVE, 1223a3124622SAngelo Marconi .input = { { 1224a3124622SAngelo Marconi .type = CX88_VMUX_TELEVISION, 1225a3124622SAngelo Marconi .vmux = 0, 1226a3124622SAngelo Marconi .gpio0 = 0x5da6, 1227a3124622SAngelo Marconi } }, 122848d5e803SMichael Krufky .mpeg = CX88_MPEG_BLACKBIRD, 1229a3124622SAngelo Marconi }, 1230be4f4519SRicardo Cerqueira [CX88_BOARD_NPGTECH_REALTV_TOP10FM] = { 1231be4f4519SRicardo Cerqueira .name = "NPG Tech Real TV FM Top 10", 1232be4f4519SRicardo Cerqueira .tuner_type = TUNER_TNF_5335MF, /* Actually a TNF9535 */ 1233680543c5SRicardo Cerqueira .radio_type = UNSET, 1234680543c5SRicardo Cerqueira .tuner_addr = ADDR_UNSET, 1235680543c5SRicardo Cerqueira .radio_addr = ADDR_UNSET, 1236680543c5SRicardo Cerqueira .input = { { 1237680543c5SRicardo Cerqueira .type = CX88_VMUX_TELEVISION, 1238680543c5SRicardo Cerqueira .vmux = 0, 1239680543c5SRicardo Cerqueira .gpio0 = 0x0788, 1240680543c5SRicardo Cerqueira }, { 1241680543c5SRicardo Cerqueira .type = CX88_VMUX_COMPOSITE1, 1242680543c5SRicardo Cerqueira .vmux = 1, 1243680543c5SRicardo Cerqueira .gpio0 = 0x078b, 1244680543c5SRicardo Cerqueira }, { 1245680543c5SRicardo Cerqueira .type = CX88_VMUX_SVIDEO, 1246680543c5SRicardo Cerqueira .vmux = 2, 1247be4f4519SRicardo Cerqueira .gpio0 = 0x078b, 1248680543c5SRicardo Cerqueira } }, 1249680543c5SRicardo Cerqueira .radio = { 1250680543c5SRicardo Cerqueira .type = CX88_RADIO, 1251680543c5SRicardo Cerqueira .gpio0 = 0x074a, 1252680543c5SRicardo Cerqueira }, 1253680543c5SRicardo Cerqueira }, 12544bd6e9d9SMalcolm Valentine [CX88_BOARD_WINFAST_DTV2000H] = { 12554bd6e9d9SMalcolm Valentine .name = "WinFast DTV2000 H", 12564bd6e9d9SMalcolm Valentine .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, 12574bd6e9d9SMalcolm Valentine .radio_type = UNSET, 12584bd6e9d9SMalcolm Valentine .tuner_addr = ADDR_UNSET, 12594bd6e9d9SMalcolm Valentine .radio_addr = ADDR_UNSET, 12604bd6e9d9SMalcolm Valentine .tda9887_conf = TDA9887_PRESENT, 12614bd6e9d9SMalcolm Valentine .input = { { 12624bd6e9d9SMalcolm Valentine .type = CX88_VMUX_TELEVISION, 12634bd6e9d9SMalcolm Valentine .vmux = 0, 12644bd6e9d9SMalcolm Valentine .gpio0 = 0x00017304, 12654bd6e9d9SMalcolm Valentine .gpio1 = 0x00008203, 12664bd6e9d9SMalcolm Valentine .gpio2 = 0x00017304, 12674bd6e9d9SMalcolm Valentine .gpio3 = 0x02000000, 12685cff91a0SVincent Pelletier }, { 12695cff91a0SVincent Pelletier .type = CX88_VMUX_COMPOSITE1, 12705cff91a0SVincent Pelletier .vmux = 1, 12715cff91a0SVincent Pelletier .gpio0 = 0x0001d701, 12725cff91a0SVincent Pelletier .gpio1 = 0x0000b207, 12735cff91a0SVincent Pelletier .gpio2 = 0x0001d701, 12745cff91a0SVincent Pelletier .gpio3 = 0x02000000, 12755cff91a0SVincent Pelletier }, { 12765cff91a0SVincent Pelletier .type = CX88_VMUX_COMPOSITE2, 12775cff91a0SVincent Pelletier .vmux = 2, 12785cff91a0SVincent Pelletier .gpio0 = 0x0001d503, 12795cff91a0SVincent Pelletier .gpio1 = 0x0000b207, 12805cff91a0SVincent Pelletier .gpio2 = 0x0001d503, 12815cff91a0SVincent Pelletier .gpio3 = 0x02000000, 12825cff91a0SVincent Pelletier }, { 12835cff91a0SVincent Pelletier .type = CX88_VMUX_SVIDEO, 12845cff91a0SVincent Pelletier .vmux = 3, 12855cff91a0SVincent Pelletier .gpio0 = 0x0001d701, 12865cff91a0SVincent Pelletier .gpio1 = 0x0000b207, 12875cff91a0SVincent Pelletier .gpio2 = 0x0001d701, 12885cff91a0SVincent Pelletier .gpio3 = 0x02000000, 12894bd6e9d9SMalcolm Valentine } }, 12905cff91a0SVincent Pelletier .radio = { 12915cff91a0SVincent Pelletier .type = CX88_RADIO, 12925cff91a0SVincent Pelletier .gpio0 = 0x00015702, 12935cff91a0SVincent Pelletier .gpio1 = 0x0000f207, 12945cff91a0SVincent Pelletier .gpio2 = 0x00015702, 12955cff91a0SVincent Pelletier .gpio3 = 0x02000000, 12965cff91a0SVincent Pelletier }, 129748d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 12984bd6e9d9SMalcolm Valentine }, 12994d14c833SVlastimil Labsky [CX88_BOARD_WINFAST_DTV2000H_J] = { 13004d14c833SVlastimil Labsky .name = "WinFast DTV2000 H rev. J", 130127b93d8aSMiroslav Slugen .tuner_type = TUNER_PHILIPS_FMD1216MEX_MK3, 13024d14c833SVlastimil Labsky .radio_type = UNSET, 13034d14c833SVlastimil Labsky .tuner_addr = ADDR_UNSET, 13044d14c833SVlastimil Labsky .radio_addr = ADDR_UNSET, 13054d14c833SVlastimil Labsky .tda9887_conf = TDA9887_PRESENT, 13064d14c833SVlastimil Labsky .input = { { 13074d14c833SVlastimil Labsky .type = CX88_VMUX_TELEVISION, 13084d14c833SVlastimil Labsky .vmux = 0, 13094d14c833SVlastimil Labsky .gpio0 = 0x00017300, 13104d14c833SVlastimil Labsky .gpio1 = 0x00008207, 13114d14c833SVlastimil Labsky .gpio2 = 0x00000000, 13124d14c833SVlastimil Labsky .gpio3 = 0x02000000, 13134d14c833SVlastimil Labsky }, { 13144d14c833SVlastimil Labsky .type = CX88_VMUX_TELEVISION, 13154d14c833SVlastimil Labsky .vmux = 0, 13164d14c833SVlastimil Labsky .gpio0 = 0x00018300, 13174d14c833SVlastimil Labsky .gpio1 = 0x0000f207, 13184d14c833SVlastimil Labsky .gpio2 = 0x00017304, 13194d14c833SVlastimil Labsky .gpio3 = 0x02000000, 13204d14c833SVlastimil Labsky }, { 13214d14c833SVlastimil Labsky .type = CX88_VMUX_COMPOSITE1, 13224d14c833SVlastimil Labsky .vmux = 1, 13234d14c833SVlastimil Labsky .gpio0 = 0x00018301, 13244d14c833SVlastimil Labsky .gpio1 = 0x0000f207, 13254d14c833SVlastimil Labsky .gpio2 = 0x00017304, 13264d14c833SVlastimil Labsky .gpio3 = 0x02000000, 13274d14c833SVlastimil Labsky }, { 13284d14c833SVlastimil Labsky .type = CX88_VMUX_SVIDEO, 13294d14c833SVlastimil Labsky .vmux = 2, 13304d14c833SVlastimil Labsky .gpio0 = 0x00018301, 13314d14c833SVlastimil Labsky .gpio1 = 0x0000f207, 13324d14c833SVlastimil Labsky .gpio2 = 0x00017304, 13334d14c833SVlastimil Labsky .gpio3 = 0x02000000, 13344d14c833SVlastimil Labsky } }, 13354d14c833SVlastimil Labsky .radio = { 13364d14c833SVlastimil Labsky .type = CX88_RADIO, 13374d14c833SVlastimil Labsky .gpio0 = 0x00015702, 13384d14c833SVlastimil Labsky .gpio1 = 0x0000f207, 13394d14c833SVlastimil Labsky .gpio2 = 0x00015702, 13404d14c833SVlastimil Labsky .gpio3 = 0x02000000, 13414d14c833SVlastimil Labsky }, 13424d14c833SVlastimil Labsky .mpeg = CX88_MPEG_DVB, 13434d14c833SVlastimil Labsky }, 1344c02a34f4SSaqeb Akhter [CX88_BOARD_GENIATECH_DVBS] = { 1345c02a34f4SSaqeb Akhter .name = "Geniatech DVB-S", 1346c39ba330SHans Verkuil .tuner_type = UNSET, 1347c02a34f4SSaqeb Akhter .radio_type = UNSET, 1348c02a34f4SSaqeb Akhter .tuner_addr = ADDR_UNSET, 1349c02a34f4SSaqeb Akhter .radio_addr = ADDR_UNSET, 1350c02a34f4SSaqeb Akhter .input = { { 1351c02a34f4SSaqeb Akhter .type = CX88_VMUX_DVB, 1352c02a34f4SSaqeb Akhter .vmux = 0, 1353c02a34f4SSaqeb Akhter }, { 1354c02a34f4SSaqeb Akhter .type = CX88_VMUX_COMPOSITE1, 1355c02a34f4SSaqeb Akhter .vmux = 1, 1356c02a34f4SSaqeb Akhter } }, 135748d5e803SMichael Krufky .mpeg = CX88_MPEG_DVB, 1358c02a34f4SSaqeb Akhter }, 1359ad10c930SEric Thomas [CX88_BOARD_HAUPPAUGE_HVR3000] = { 1360ad10c930SEric Thomas .name = "Hauppauge WinTV-HVR3000 TriMode Analog/DVB-S/DVB-T", 1361ad10c930SEric Thomas .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, 1362ad10c930SEric Thomas .radio_type = UNSET, 1363ad10c930SEric Thomas .tuner_addr = ADDR_UNSET, 1364ad10c930SEric Thomas .radio_addr = ADDR_UNSET, 1365ad10c930SEric Thomas .tda9887_conf = TDA9887_PRESENT, 1366facd2366SHans Verkuil .audio_chip = CX88_AUDIO_WM8775, 1367ad10c930SEric Thomas .input = { { 1368ad10c930SEric Thomas .type = CX88_VMUX_TELEVISION, 1369ad10c930SEric Thomas .vmux = 0, 1370ad10c930SEric Thomas .gpio0 = 0x84bf, 1371649e13a9SDarron Broad /* 1: TV Audio / FM Mono */ 1372923ac7f7SDarron Broad .audioroute = 1, 1373ad10c930SEric Thomas }, { 1374ad10c930SEric Thomas .type = CX88_VMUX_COMPOSITE1, 1375ad10c930SEric Thomas .vmux = 1, 1376ad10c930SEric Thomas .gpio0 = 0x84bf, 1377649e13a9SDarron Broad /* 2: Line-In */ 1378923ac7f7SDarron Broad .audioroute = 2, 1379ad10c930SEric Thomas }, { 1380ad10c930SEric Thomas .type = CX88_VMUX_SVIDEO, 1381ad10c930SEric Thomas .vmux = 2, 1382ad10c930SEric Thomas .gpio0 = 0x84bf, 1383649e13a9SDarron Broad /* 2: Line-In */ 1384923ac7f7SDarron Broad .audioroute = 2, 1385ad10c930SEric Thomas } }, 138663248f26SDarron Broad .radio = { 138763248f26SDarron Broad .type = CX88_RADIO, 138863248f26SDarron Broad .gpio0 = 0x84bf, 1389649e13a9SDarron Broad /* 4: FM Stereo (untested) */ 1390649e13a9SDarron Broad .audioroute = 8, 139163248f26SDarron Broad }, 139276dc82abSSteven Toth .mpeg = CX88_MPEG_DVB, 1393363c35fcSSteven Toth .num_frontends = 2, 1394ad10c930SEric Thomas }, 1395d1009bd7SPeter Naulls [CX88_BOARD_NORWOOD_MICRO] = { 1396d1009bd7SPeter Naulls .name = "Norwood Micro TV Tuner", 1397d1009bd7SPeter Naulls .tuner_type = TUNER_TNF_5335MF, 1398d1009bd7SPeter Naulls .radio_type = UNSET, 1399d1009bd7SPeter Naulls .tuner_addr = ADDR_UNSET, 1400d1009bd7SPeter Naulls .radio_addr = ADDR_UNSET, 1401d1009bd7SPeter Naulls .input = { { 1402d1009bd7SPeter Naulls .type = CX88_VMUX_TELEVISION, 1403d1009bd7SPeter Naulls .vmux = 0, 1404d1009bd7SPeter Naulls .gpio0 = 0x0709, 1405d1009bd7SPeter Naulls }, { 1406d1009bd7SPeter Naulls .type = CX88_VMUX_COMPOSITE1, 1407d1009bd7SPeter Naulls .vmux = 1, 1408d1009bd7SPeter Naulls .gpio0 = 0x070b, 1409d1009bd7SPeter Naulls }, { 1410d1009bd7SPeter Naulls .type = CX88_VMUX_SVIDEO, 1411d1009bd7SPeter Naulls .vmux = 2, 1412d1009bd7SPeter Naulls .gpio0 = 0x070b, 1413d1009bd7SPeter Naulls } }, 1414d1009bd7SPeter Naulls }, 14152acadefaSDavid Bussenschutt [CX88_BOARD_TE_DTV_250_OEM_SWANN] = { 14162acadefaSDavid Bussenschutt .name = "Shenzhen Tungsten Ages Tech TE-DTV-250 / Swann OEM", 14172acadefaSDavid Bussenschutt .tuner_type = TUNER_LG_PAL_NEW_TAPC, 14182acadefaSDavid Bussenschutt .radio_type = UNSET, 14192acadefaSDavid Bussenschutt .tuner_addr = ADDR_UNSET, 14202acadefaSDavid Bussenschutt .radio_addr = ADDR_UNSET, 14212acadefaSDavid Bussenschutt .input = { { 14222acadefaSDavid Bussenschutt .type = CX88_VMUX_TELEVISION, 14232acadefaSDavid Bussenschutt .vmux = 0, 14242acadefaSDavid Bussenschutt .gpio0 = 0x003fffff, 14252acadefaSDavid Bussenschutt .gpio1 = 0x00e00000, 14262acadefaSDavid Bussenschutt .gpio2 = 0x003fffff, 14272acadefaSDavid Bussenschutt .gpio3 = 0x02000000, 14282acadefaSDavid Bussenschutt }, { 14292acadefaSDavid Bussenschutt .type = CX88_VMUX_COMPOSITE1, 14302acadefaSDavid Bussenschutt .vmux = 1, 14312acadefaSDavid Bussenschutt .gpio0 = 0x003fffff, 14322acadefaSDavid Bussenschutt .gpio1 = 0x00e00000, 14332acadefaSDavid Bussenschutt .gpio2 = 0x003fffff, 14342acadefaSDavid Bussenschutt .gpio3 = 0x02000000, 14352acadefaSDavid Bussenschutt }, { 14362acadefaSDavid Bussenschutt .type = CX88_VMUX_SVIDEO, 14372acadefaSDavid Bussenschutt .vmux = 2, 14382acadefaSDavid Bussenschutt .gpio0 = 0x003fffff, 14392acadefaSDavid Bussenschutt .gpio1 = 0x00e00000, 14402acadefaSDavid Bussenschutt .gpio2 = 0x003fffff, 14412acadefaSDavid Bussenschutt .gpio3 = 0x02000000, 14422acadefaSDavid Bussenschutt } }, 14432acadefaSDavid Bussenschutt }, 1444aa481a65SSteven Toth [CX88_BOARD_HAUPPAUGE_HVR1300] = { 1445aa481a65SSteven Toth .name = "Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder", 1446aa481a65SSteven Toth .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, 1447aa481a65SSteven Toth .radio_type = UNSET, 1448aa481a65SSteven Toth .tuner_addr = ADDR_UNSET, 1449aa481a65SSteven Toth .radio_addr = ADDR_UNSET, 1450aa481a65SSteven Toth .tda9887_conf = TDA9887_PRESENT, 1451facd2366SHans Verkuil .audio_chip = CX88_AUDIO_WM8775, 14522491fbb7SSteven Toth /* 14532491fbb7SSteven Toth * gpio0 as reported by Mike Crash <mike AT mikecrash.com> 14542491fbb7SSteven Toth */ 1455aa481a65SSteven Toth .input = { { 1456aa481a65SSteven Toth .type = CX88_VMUX_TELEVISION, 1457aa481a65SSteven Toth .vmux = 0, 14582491fbb7SSteven Toth .gpio0 = 0xef88, 1459649e13a9SDarron Broad /* 1: TV Audio / FM Mono */ 14607b27d45bSRicardo Cerqueira .audioroute = 1, 1461aa481a65SSteven Toth }, { 1462aa481a65SSteven Toth .type = CX88_VMUX_COMPOSITE1, 1463aa481a65SSteven Toth .vmux = 1, 14642491fbb7SSteven Toth .gpio0 = 0xef88, 1465649e13a9SDarron Broad /* 2: Line-In */ 14667b27d45bSRicardo Cerqueira .audioroute = 2, 1467aa481a65SSteven Toth }, { 1468aa481a65SSteven Toth .type = CX88_VMUX_SVIDEO, 1469aa481a65SSteven Toth .vmux = 2, 14702491fbb7SSteven Toth .gpio0 = 0xef88, 1471649e13a9SDarron Broad /* 2: Line-In */ 14727b27d45bSRicardo Cerqueira .audioroute = 2, 1473aa481a65SSteven Toth } }, 14746c5be74cSSteven Toth .mpeg = CX88_MPEG_DVB | CX88_MPEG_BLACKBIRD, 14756b92b3bdSSteven Toth .radio = { 14766b92b3bdSSteven Toth .type = CX88_RADIO, 14772491fbb7SSteven Toth .gpio0 = 0xef88, 1478649e13a9SDarron Broad /* 4: FM Stereo (untested) */ 1479649e13a9SDarron Broad .audioroute = 8, 14806b92b3bdSSteven Toth }, 1481aa481a65SSteven Toth }, 14824f3ca2f1SDirk Herrendoerfer [CX88_BOARD_SAMSUNG_SMT_7020] = { 14834f3ca2f1SDirk Herrendoerfer .name = "Samsung SMT 7020 DVB-S", 1484c39ba330SHans Verkuil .tuner_type = UNSET, 14854f3ca2f1SDirk Herrendoerfer .radio_type = UNSET, 14864f3ca2f1SDirk Herrendoerfer .tuner_addr = ADDR_UNSET, 14874f3ca2f1SDirk Herrendoerfer .radio_addr = ADDR_UNSET, 14884f3ca2f1SDirk Herrendoerfer .input = { { 14894f3ca2f1SDirk Herrendoerfer .type = CX88_VMUX_DVB, 14904f3ca2f1SDirk Herrendoerfer .vmux = 0, 14914f3ca2f1SDirk Herrendoerfer } }, 14924f3ca2f1SDirk Herrendoerfer .mpeg = CX88_MPEG_DVB, 14934f3ca2f1SDirk Herrendoerfer }, 14947cb47a14SDaniel Gimpelevich [CX88_BOARD_ADSTECH_PTV_390] = { 14957cb47a14SDaniel Gimpelevich .name = "ADS Tech Instant Video PCI", 1496c39ba330SHans Verkuil .tuner_type = UNSET, 14977cb47a14SDaniel Gimpelevich .radio_type = UNSET, 14987cb47a14SDaniel Gimpelevich .tuner_addr = ADDR_UNSET, 14997cb47a14SDaniel Gimpelevich .radio_addr = ADDR_UNSET, 15007cb47a14SDaniel Gimpelevich .input = { { 15017cb47a14SDaniel Gimpelevich .type = CX88_VMUX_DEBUG, 15027cb47a14SDaniel Gimpelevich .vmux = 3, 15037cb47a14SDaniel Gimpelevich .gpio0 = 0x04ff, 15047cb47a14SDaniel Gimpelevich }, { 15057cb47a14SDaniel Gimpelevich .type = CX88_VMUX_COMPOSITE1, 15067cb47a14SDaniel Gimpelevich .vmux = 1, 15077cb47a14SDaniel Gimpelevich .gpio0 = 0x07fa, 15087cb47a14SDaniel Gimpelevich }, { 15097cb47a14SDaniel Gimpelevich .type = CX88_VMUX_SVIDEO, 15107cb47a14SDaniel Gimpelevich .vmux = 2, 15117cb47a14SDaniel Gimpelevich .gpio0 = 0x07fa, 15127cb47a14SDaniel Gimpelevich } }, 15137cb47a14SDaniel Gimpelevich }, 151460464da8SSteven Toth [CX88_BOARD_PINNACLE_PCTV_HD_800i] = { 151560464da8SSteven Toth .name = "Pinnacle PCTV HD 800i", 151660464da8SSteven Toth .tuner_type = TUNER_XC5000, 151760464da8SSteven Toth .radio_type = UNSET, 151860464da8SSteven Toth .tuner_addr = ADDR_UNSET, 151960464da8SSteven Toth .radio_addr = ADDR_UNSET, 152060464da8SSteven Toth .input = { { 152160464da8SSteven Toth .type = CX88_VMUX_TELEVISION, 152260464da8SSteven Toth .vmux = 0, 152360464da8SSteven Toth .gpio0 = 0x04fb, 152460464da8SSteven Toth .gpio1 = 0x10ff, 152560464da8SSteven Toth }, { 152660464da8SSteven Toth .type = CX88_VMUX_COMPOSITE1, 152760464da8SSteven Toth .vmux = 1, 152860464da8SSteven Toth .gpio0 = 0x04fb, 152960464da8SSteven Toth .gpio1 = 0x10ef, 153060464da8SSteven Toth .audioroute = 1, 153160464da8SSteven Toth }, { 153260464da8SSteven Toth .type = CX88_VMUX_SVIDEO, 153360464da8SSteven Toth .vmux = 2, 153460464da8SSteven Toth .gpio0 = 0x04fb, 153560464da8SSteven Toth .gpio1 = 0x10ef, 153660464da8SSteven Toth .audioroute = 1, 153760464da8SSteven Toth } }, 153860464da8SSteven Toth .mpeg = CX88_MPEG_DVB, 153960464da8SSteven Toth }, 15405c00fac0SSteven Toth [CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO] = { 15418efd2e28SMichael Krufky .name = "DViCO FusionHDTV 5 PCI nano", 15428efd2e28SMichael Krufky /* xc3008 tuner, digital only for now */ 1543c39ba330SHans Verkuil .tuner_type = UNSET, 15445c00fac0SSteven Toth .radio_type = UNSET, 15455c00fac0SSteven Toth .tuner_addr = ADDR_UNSET, 15465c00fac0SSteven Toth .radio_addr = ADDR_UNSET, 15475c00fac0SSteven Toth .input = { { 15485c00fac0SSteven Toth .type = CX88_VMUX_TELEVISION, 15495c00fac0SSteven Toth .vmux = 0, 15505c00fac0SSteven Toth .gpio0 = 0x000027df, /* Unconfirmed */ 15515c00fac0SSteven Toth }, { 15525c00fac0SSteven Toth .type = CX88_VMUX_COMPOSITE1, 15535c00fac0SSteven Toth .vmux = 1, 15545c00fac0SSteven Toth .gpio0 = 0x000027df, /* Unconfirmed */ 15555c00fac0SSteven Toth .audioroute = 1, 15565c00fac0SSteven Toth }, { 15575c00fac0SSteven Toth .type = CX88_VMUX_SVIDEO, 15585c00fac0SSteven Toth .vmux = 2, 15595c00fac0SSteven Toth .gpio0 = 0x000027df, /* Unconfirmed */ 15605c00fac0SSteven Toth .audioroute = 1, 15615c00fac0SSteven Toth } }, 15625c00fac0SSteven Toth .mpeg = CX88_MPEG_DVB, 15635c00fac0SSteven Toth }, 15649507901eSMauro Carvalho Chehab [CX88_BOARD_PINNACLE_HYBRID_PCTV] = { 15659507901eSMauro Carvalho Chehab .name = "Pinnacle Hybrid PCTV", 15669507901eSMauro Carvalho Chehab .tuner_type = TUNER_XC2028, 15679507901eSMauro Carvalho Chehab .tuner_addr = 0x61, 1568b6854e3fSMiroslav Slugen .radio_type = UNSET, 1569b6854e3fSMiroslav Slugen .radio_addr = ADDR_UNSET, 15709507901eSMauro Carvalho Chehab .input = { { 15719507901eSMauro Carvalho Chehab .type = CX88_VMUX_TELEVISION, 15729507901eSMauro Carvalho Chehab .vmux = 0, 15733f6014fcSStéphane Voltz .gpio0 = 0x004ff, 15743f6014fcSStéphane Voltz .gpio1 = 0x010ff, 15753f6014fcSStéphane Voltz .gpio2 = 0x00001, 15769507901eSMauro Carvalho Chehab }, { 15779507901eSMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1, 15789507901eSMauro Carvalho Chehab .vmux = 1, 15793f6014fcSStéphane Voltz .gpio0 = 0x004fb, 15803f6014fcSStéphane Voltz .gpio1 = 0x010ef, 15813f6014fcSStéphane Voltz .audioroute = 1, 15829507901eSMauro Carvalho Chehab }, { 15839507901eSMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO, 15849507901eSMauro Carvalho Chehab .vmux = 2, 15853f6014fcSStéphane Voltz .gpio0 = 0x004fb, 15863f6014fcSStéphane Voltz .gpio1 = 0x010ef, 15873f6014fcSStéphane Voltz .audioroute = 1, 15889507901eSMauro Carvalho Chehab } }, 15899507901eSMauro Carvalho Chehab .radio = { 15909507901eSMauro Carvalho Chehab .type = CX88_RADIO, 15919507901eSMauro Carvalho Chehab .gpio0 = 0x004ff, 15929507901eSMauro Carvalho Chehab .gpio1 = 0x010ff, 15939507901eSMauro Carvalho Chehab .gpio2 = 0x0ff, 15949507901eSMauro Carvalho Chehab }, 15953f6014fcSStéphane Voltz .mpeg = CX88_MPEG_DVB, 15969507901eSMauro Carvalho Chehab }, 159714422f9dSMauro Carvalho Chehab /* Terry Wu <terrywu2009@gmail.com> */ 159814422f9dSMauro Carvalho Chehab /* TV Audio : set GPIO 2, 18, 19 value to 0, 1, 0 */ 159914422f9dSMauro Carvalho Chehab /* FM Audio : set GPIO 2, 18, 19 value to 0, 0, 0 */ 160014422f9dSMauro Carvalho Chehab /* Line-in Audio : set GPIO 2, 18, 19 value to 0, 1, 1 */ 160114422f9dSMauro Carvalho Chehab /* Mute Audio : set GPIO 2 value to 1 */ 16029507901eSMauro Carvalho Chehab [CX88_BOARD_WINFAST_TV2000_XP_GLOBAL] = { 160314422f9dSMauro Carvalho Chehab .name = "Leadtek TV2000 XP Global", 16049507901eSMauro Carvalho Chehab .tuner_type = TUNER_XC2028, 16059507901eSMauro Carvalho Chehab .tuner_addr = 0x61, 1606b6854e3fSMiroslav Slugen .radio_type = UNSET, 1607b6854e3fSMiroslav Slugen .radio_addr = ADDR_UNSET, 16089507901eSMauro Carvalho Chehab .input = { { 16099507901eSMauro Carvalho Chehab .type = CX88_VMUX_TELEVISION, 16109507901eSMauro Carvalho Chehab .vmux = 0, 161114422f9dSMauro Carvalho Chehab .gpio0 = 0x0400, /* pin 2 = 0 */ 16129507901eSMauro Carvalho Chehab .gpio1 = 0x0000, 161314422f9dSMauro Carvalho Chehab .gpio2 = 0x0C04, /* pin 18 = 1, pin 19 = 0 */ 161414422f9dSMauro Carvalho Chehab .gpio3 = 0x0000, 16159507901eSMauro Carvalho Chehab }, { 16169507901eSMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1, 16179507901eSMauro Carvalho Chehab .vmux = 1, 161814422f9dSMauro Carvalho Chehab .gpio0 = 0x0400, /* pin 2 = 0 */ 16199507901eSMauro Carvalho Chehab .gpio1 = 0x0000, 162014422f9dSMauro Carvalho Chehab .gpio2 = 0x0C0C, /* pin 18 = 1, pin 19 = 1 */ 162114422f9dSMauro Carvalho Chehab .gpio3 = 0x0000, 16229507901eSMauro Carvalho Chehab }, { 16239507901eSMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO, 16249507901eSMauro Carvalho Chehab .vmux = 2, 162514422f9dSMauro Carvalho Chehab .gpio0 = 0x0400, /* pin 2 = 0 */ 162614422f9dSMauro Carvalho Chehab .gpio1 = 0x0000, 162714422f9dSMauro Carvalho Chehab .gpio2 = 0x0C0C, /* pin 18 = 1, pin 19 = 1 */ 162814422f9dSMauro Carvalho Chehab .gpio3 = 0x0000, 16299507901eSMauro Carvalho Chehab } }, 16309507901eSMauro Carvalho Chehab .radio = { 16319507901eSMauro Carvalho Chehab .type = CX88_RADIO, 163214422f9dSMauro Carvalho Chehab .gpio0 = 0x0400, /* pin 2 = 0 */ 163314422f9dSMauro Carvalho Chehab .gpio1 = 0x0000, 163414422f9dSMauro Carvalho Chehab .gpio2 = 0x0C00, /* pin 18 = 0, pin 19 = 0 */ 163514422f9dSMauro Carvalho Chehab .gpio3 = 0x0000, 16369507901eSMauro Carvalho Chehab }, 16379507901eSMauro Carvalho Chehab }, 163884463d5fSIstvan Varga [CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F36] = { 163984463d5fSIstvan Varga .name = "Leadtek TV2000 XP Global (SC4100)", 164084463d5fSIstvan Varga .tuner_type = TUNER_XC4000, 164184463d5fSIstvan Varga .tuner_addr = 0x61, 164284463d5fSIstvan Varga .radio_type = UNSET, 164384463d5fSIstvan Varga .radio_addr = ADDR_UNSET, 164484463d5fSIstvan Varga .input = { { 164584463d5fSIstvan Varga .type = CX88_VMUX_TELEVISION, 164684463d5fSIstvan Varga .vmux = 0, 164784463d5fSIstvan Varga .gpio0 = 0x0400, /* pin 2 = 0 */ 164884463d5fSIstvan Varga .gpio1 = 0x0000, 164984463d5fSIstvan Varga .gpio2 = 0x0C04, /* pin 18 = 1, pin 19 = 0 */ 165084463d5fSIstvan Varga .gpio3 = 0x0000, 165184463d5fSIstvan Varga }, { 165284463d5fSIstvan Varga .type = CX88_VMUX_COMPOSITE1, 165384463d5fSIstvan Varga .vmux = 1, 165484463d5fSIstvan Varga .gpio0 = 0x0400, /* pin 2 = 0 */ 165584463d5fSIstvan Varga .gpio1 = 0x0000, 165684463d5fSIstvan Varga .gpio2 = 0x0C0C, /* pin 18 = 1, pin 19 = 1 */ 165784463d5fSIstvan Varga .gpio3 = 0x0000, 165884463d5fSIstvan Varga }, { 165984463d5fSIstvan Varga .type = CX88_VMUX_SVIDEO, 166084463d5fSIstvan Varga .vmux = 2, 166184463d5fSIstvan Varga .gpio0 = 0x0400, /* pin 2 = 0 */ 166284463d5fSIstvan Varga .gpio1 = 0x0000, 166384463d5fSIstvan Varga .gpio2 = 0x0C0C, /* pin 18 = 1, pin 19 = 1 */ 166484463d5fSIstvan Varga .gpio3 = 0x0000, 166584463d5fSIstvan Varga } }, 166684463d5fSIstvan Varga .radio = { 166784463d5fSIstvan Varga .type = CX88_RADIO, 166884463d5fSIstvan Varga .gpio0 = 0x0400, /* pin 2 = 0 */ 166984463d5fSIstvan Varga .gpio1 = 0x0000, 167084463d5fSIstvan Varga .gpio2 = 0x0C00, /* pin 18 = 0, pin 19 = 0 */ 167184463d5fSIstvan Varga .gpio3 = 0x0000, 167284463d5fSIstvan Varga }, 167384463d5fSIstvan Varga }, 167484463d5fSIstvan Varga [CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F43] = { 167584463d5fSIstvan Varga .name = "Leadtek TV2000 XP Global (XC4100)", 167684463d5fSIstvan Varga .tuner_type = TUNER_XC4000, 167784463d5fSIstvan Varga .tuner_addr = 0x61, 167884463d5fSIstvan Varga .radio_type = UNSET, 167984463d5fSIstvan Varga .radio_addr = ADDR_UNSET, 168084463d5fSIstvan Varga .input = { { 168184463d5fSIstvan Varga .type = CX88_VMUX_TELEVISION, 168284463d5fSIstvan Varga .vmux = 0, 168384463d5fSIstvan Varga .gpio0 = 0x0400, /* pin 2 = 0 */ 168484463d5fSIstvan Varga .gpio1 = 0x6040, /* pin 14 = 1, pin 13 = 0 */ 168584463d5fSIstvan Varga .gpio2 = 0x0000, 168684463d5fSIstvan Varga .gpio3 = 0x0000, 168784463d5fSIstvan Varga }, { 168884463d5fSIstvan Varga .type = CX88_VMUX_COMPOSITE1, 168984463d5fSIstvan Varga .vmux = 1, 169084463d5fSIstvan Varga .gpio0 = 0x0400, /* pin 2 = 0 */ 169184463d5fSIstvan Varga .gpio1 = 0x6060, /* pin 14 = 1, pin 13 = 1 */ 169284463d5fSIstvan Varga .gpio2 = 0x0000, 169384463d5fSIstvan Varga .gpio3 = 0x0000, 169484463d5fSIstvan Varga }, { 169584463d5fSIstvan Varga .type = CX88_VMUX_SVIDEO, 169684463d5fSIstvan Varga .vmux = 2, 169784463d5fSIstvan Varga .gpio0 = 0x0400, /* pin 2 = 0 */ 169884463d5fSIstvan Varga .gpio1 = 0x6060, /* pin 14 = 1, pin 13 = 1 */ 169984463d5fSIstvan Varga .gpio2 = 0x0000, 170084463d5fSIstvan Varga .gpio3 = 0x0000, 170184463d5fSIstvan Varga } }, 170284463d5fSIstvan Varga .radio = { 170384463d5fSIstvan Varga .type = CX88_RADIO, 170484463d5fSIstvan Varga .gpio0 = 0x0400, /* pin 2 = 0 */ 170584463d5fSIstvan Varga .gpio1 = 0x6000, /* pin 14 = 1, pin 13 = 0 */ 170684463d5fSIstvan Varga .gpio2 = 0x0000, 170784463d5fSIstvan Varga .gpio3 = 0x0000, 170884463d5fSIstvan Varga }, 170984463d5fSIstvan Varga }, 17109507901eSMauro Carvalho Chehab [CX88_BOARD_POWERCOLOR_REAL_ANGEL] = { 1711a9606ce6SDaniel Gimpelevich .name = "PowerColor RA330", /* Long names may confuse LIRC. */ 17129507901eSMauro Carvalho Chehab .tuner_type = TUNER_XC2028, 17139507901eSMauro Carvalho Chehab .tuner_addr = 0x61, 17149507901eSMauro Carvalho Chehab .input = { { 1715a9606ce6SDaniel Gimpelevich .type = CX88_VMUX_DEBUG, 1716a9606ce6SDaniel Gimpelevich .vmux = 3, /* Due to the way the cx88 driver is written, */ 1717a9606ce6SDaniel Gimpelevich .gpio0 = 0x00ff, /* there is no way to deactivate audio pass- */ 1718a9606ce6SDaniel Gimpelevich .gpio1 = 0xf39d, /* through without this entry. Furthermore, if */ 1719a9606ce6SDaniel Gimpelevich .gpio3 = 0x0000, /* the TV mux entry is first, you get audio */ 1720a9606ce6SDaniel Gimpelevich }, { /* from the tuner on boot for a little while. */ 17219507901eSMauro Carvalho Chehab .type = CX88_VMUX_TELEVISION, 17229507901eSMauro Carvalho Chehab .vmux = 0, 1723ab364983SDâniel Fraga .gpio0 = 0x00ff, 1724b573ea0aSMauro Carvalho Chehab .gpio1 = 0xf35d, 1725ab364983SDâniel Fraga .gpio3 = 0x0000, 17269507901eSMauro Carvalho Chehab }, { 17279507901eSMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1, 17289507901eSMauro Carvalho Chehab .vmux = 1, 1729ab364983SDâniel Fraga .gpio0 = 0x00ff, 1730ab364983SDâniel Fraga .gpio1 = 0xf37d, 1731ab364983SDâniel Fraga .gpio3 = 0x0000, 17329507901eSMauro Carvalho Chehab }, { 17339507901eSMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO, 17349507901eSMauro Carvalho Chehab .vmux = 2, 17359507901eSMauro Carvalho Chehab .gpio0 = 0x000ff, 17369507901eSMauro Carvalho Chehab .gpio1 = 0x0f37d, 17379507901eSMauro Carvalho Chehab .gpio3 = 0x00000, 17389507901eSMauro Carvalho Chehab } }, 17399507901eSMauro Carvalho Chehab .radio = { 17409507901eSMauro Carvalho Chehab .type = CX88_RADIO, 17419507901eSMauro Carvalho Chehab .gpio0 = 0x000ff, 17429507901eSMauro Carvalho Chehab .gpio1 = 0x0f35d, 17439507901eSMauro Carvalho Chehab .gpio3 = 0x00000, 17449507901eSMauro Carvalho Chehab }, 17459507901eSMauro Carvalho Chehab }, 17469507901eSMauro Carvalho Chehab [CX88_BOARD_GENIATECH_X8000_MT] = { 17479507901eSMauro Carvalho Chehab /* Also PowerColor Real Angel 330 and Geniatech X800 OEM */ 17489507901eSMauro Carvalho Chehab .name = "Geniatech X8000-MT DVBT", 17499507901eSMauro Carvalho Chehab .tuner_type = TUNER_XC2028, 17509507901eSMauro Carvalho Chehab .tuner_addr = 0x61, 17519507901eSMauro Carvalho Chehab .input = { { 17529507901eSMauro Carvalho Chehab .type = CX88_VMUX_TELEVISION, 17539507901eSMauro Carvalho Chehab .vmux = 0, 17549507901eSMauro Carvalho Chehab .gpio0 = 0x00000000, 17559507901eSMauro Carvalho Chehab .gpio1 = 0x00e3e341, 17569507901eSMauro Carvalho Chehab .gpio2 = 0x00000000, 17579507901eSMauro Carvalho Chehab .gpio3 = 0x00000000, 17589507901eSMauro Carvalho Chehab }, { 17599507901eSMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1, 17609507901eSMauro Carvalho Chehab .vmux = 1, 17619507901eSMauro Carvalho Chehab .gpio0 = 0x00000000, 17629507901eSMauro Carvalho Chehab .gpio1 = 0x00e3e361, 17639507901eSMauro Carvalho Chehab .gpio2 = 0x00000000, 17649507901eSMauro Carvalho Chehab .gpio3 = 0x00000000, 17659507901eSMauro Carvalho Chehab }, { 17669507901eSMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO, 17679507901eSMauro Carvalho Chehab .vmux = 2, 17689507901eSMauro Carvalho Chehab .gpio0 = 0x00000000, 17699507901eSMauro Carvalho Chehab .gpio1 = 0x00e3e361, 17709507901eSMauro Carvalho Chehab .gpio2 = 0x00000000, 17719507901eSMauro Carvalho Chehab .gpio3 = 0x00000000, 17729507901eSMauro Carvalho Chehab } }, 17739507901eSMauro Carvalho Chehab .radio = { 17749507901eSMauro Carvalho Chehab .type = CX88_RADIO, 17759507901eSMauro Carvalho Chehab .gpio0 = 0x00000000, 17769507901eSMauro Carvalho Chehab .gpio1 = 0x00e3e341, 17779507901eSMauro Carvalho Chehab .gpio2 = 0x00000000, 17789507901eSMauro Carvalho Chehab .gpio3 = 0x00000000, 17799507901eSMauro Carvalho Chehab }, 17809507901eSMauro Carvalho Chehab .mpeg = CX88_MPEG_DVB, 1781b3fb91d2SChris Pascoe }, 1782b3fb91d2SChris Pascoe [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO] = { 1783b3fb91d2SChris Pascoe .name = "DViCO FusionHDTV DVB-T PRO", 178419c309e3STim Farrington .tuner_type = TUNER_XC2028, 178519c309e3STim Farrington .tuner_addr = 0x61, 1786b3fb91d2SChris Pascoe .radio_type = UNSET, 1787b3fb91d2SChris Pascoe .radio_addr = ADDR_UNSET, 1788b3fb91d2SChris Pascoe .input = { { 1789b3fb91d2SChris Pascoe .type = CX88_VMUX_COMPOSITE1, 1790b3fb91d2SChris Pascoe .vmux = 1, 1791b3fb91d2SChris Pascoe .gpio0 = 0x000067df, 1792b3fb91d2SChris Pascoe }, { 1793b3fb91d2SChris Pascoe .type = CX88_VMUX_SVIDEO, 1794b3fb91d2SChris Pascoe .vmux = 2, 1795b3fb91d2SChris Pascoe .gpio0 = 0x000067df, 1796b3fb91d2SChris Pascoe } }, 1797b3fb91d2SChris Pascoe .mpeg = CX88_MPEG_DVB, 1798b3fb91d2SChris Pascoe }, 17991117d6baSSteven Toth [CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD] = { 180076464d41SMichael Krufky .name = "DViCO FusionHDTV 7 Gold", 18011117d6baSSteven Toth .tuner_type = TUNER_XC5000, 18021117d6baSSteven Toth .radio_type = UNSET, 18031117d6baSSteven Toth .tuner_addr = ADDR_UNSET, 18041117d6baSSteven Toth .radio_addr = ADDR_UNSET, 18051117d6baSSteven Toth .input = { { 18061117d6baSSteven Toth .type = CX88_VMUX_TELEVISION, 18071117d6baSSteven Toth .vmux = 0, 180876464d41SMichael Krufky .gpio0 = 0x10df, 18091117d6baSSteven Toth }, { 18101117d6baSSteven Toth .type = CX88_VMUX_COMPOSITE1, 18111117d6baSSteven Toth .vmux = 1, 181276464d41SMichael Krufky .gpio0 = 0x16d9, 18131117d6baSSteven Toth }, { 18141117d6baSSteven Toth .type = CX88_VMUX_SVIDEO, 18151117d6baSSteven Toth .vmux = 2, 181676464d41SMichael Krufky .gpio0 = 0x16d9, 18171117d6baSSteven Toth } }, 1818d893d5dcSSteven Toth .mpeg = CX88_MPEG_DVB, 18191117d6baSSteven Toth }, 18202422a9b3SMauro Carvalho Chehab [CX88_BOARD_PROLINK_PV_8000GT] = { 18212422a9b3SMauro Carvalho Chehab .name = "Prolink Pixelview MPEG 8000GT", 18222422a9b3SMauro Carvalho Chehab .tuner_type = TUNER_XC2028, 18232422a9b3SMauro Carvalho Chehab .tuner_addr = 0x61, 18242422a9b3SMauro Carvalho Chehab .input = { { 18252422a9b3SMauro Carvalho Chehab .type = CX88_VMUX_TELEVISION, 18262422a9b3SMauro Carvalho Chehab .vmux = 0, 18272422a9b3SMauro Carvalho Chehab .gpio0 = 0x0ff, 18282422a9b3SMauro Carvalho Chehab .gpio2 = 0x0cfb, 18292422a9b3SMauro Carvalho Chehab }, { 18302422a9b3SMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1, 18312422a9b3SMauro Carvalho Chehab .vmux = 1, 18322422a9b3SMauro Carvalho Chehab .gpio2 = 0x0cfb, 18332422a9b3SMauro Carvalho Chehab }, { 18342422a9b3SMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO, 18352422a9b3SMauro Carvalho Chehab .vmux = 2, 18362422a9b3SMauro Carvalho Chehab .gpio2 = 0x0cfb, 18372422a9b3SMauro Carvalho Chehab } }, 18382422a9b3SMauro Carvalho Chehab .radio = { 18392422a9b3SMauro Carvalho Chehab .type = CX88_RADIO, 18402422a9b3SMauro Carvalho Chehab .gpio2 = 0x0cfb, 18412422a9b3SMauro Carvalho Chehab }, 18422422a9b3SMauro Carvalho Chehab }, 1843a31d2bb7SMauro Carvalho Chehab [CX88_BOARD_PROLINK_PV_GLOBAL_XTREME] = { 1844a31d2bb7SMauro Carvalho Chehab .name = "Prolink Pixelview Global Extreme", 1845a31d2bb7SMauro Carvalho Chehab .tuner_type = TUNER_XC2028, 1846a31d2bb7SMauro Carvalho Chehab .tuner_addr = 0x61, 1847a31d2bb7SMauro Carvalho Chehab .input = { { 1848a31d2bb7SMauro Carvalho Chehab .type = CX88_VMUX_TELEVISION, 1849a31d2bb7SMauro Carvalho Chehab .vmux = 0, 1850a31d2bb7SMauro Carvalho Chehab .gpio0 = 0x04fb, 1851a31d2bb7SMauro Carvalho Chehab .gpio1 = 0x04080, 1852a31d2bb7SMauro Carvalho Chehab .gpio2 = 0x0cf7, 1853a31d2bb7SMauro Carvalho Chehab }, { 1854a31d2bb7SMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1, 1855a31d2bb7SMauro Carvalho Chehab .vmux = 1, 1856a31d2bb7SMauro Carvalho Chehab .gpio0 = 0x04fb, 1857a31d2bb7SMauro Carvalho Chehab .gpio1 = 0x04080, 1858a31d2bb7SMauro Carvalho Chehab .gpio2 = 0x0cfb, 1859a31d2bb7SMauro Carvalho Chehab }, { 1860a31d2bb7SMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO, 1861a31d2bb7SMauro Carvalho Chehab .vmux = 2, 1862a31d2bb7SMauro Carvalho Chehab .gpio0 = 0x04fb, 1863a31d2bb7SMauro Carvalho Chehab .gpio1 = 0x04080, 1864a31d2bb7SMauro Carvalho Chehab .gpio2 = 0x0cfb, 1865a31d2bb7SMauro Carvalho Chehab } }, 1866a31d2bb7SMauro Carvalho Chehab .radio = { 1867a31d2bb7SMauro Carvalho Chehab .type = CX88_RADIO, 1868a31d2bb7SMauro Carvalho Chehab .gpio0 = 0x04ff, 1869a31d2bb7SMauro Carvalho Chehab .gpio1 = 0x04080, 1870a31d2bb7SMauro Carvalho Chehab .gpio2 = 0x0cf7, 1871a31d2bb7SMauro Carvalho Chehab }, 1872a31d2bb7SMauro Carvalho Chehab }, 187399e09eacSMauro Carvalho Chehab /* Both radio, analog and ATSC work with this board. 187499e09eacSMauro Carvalho Chehab However, for analog to work, s5h1409 gate should be open, 187599e09eacSMauro Carvalho Chehab otherwise, tuner-xc3028 won't be detected. 187699e09eacSMauro Carvalho Chehab A proper fix require using the newer i2c methods to add 187799e09eacSMauro Carvalho Chehab tuner-xc3028 without doing an i2c probe. 187899e09eacSMauro Carvalho Chehab */ 187999e09eacSMauro Carvalho Chehab [CX88_BOARD_KWORLD_ATSC_120] = { 188099e09eacSMauro Carvalho Chehab .name = "Kworld PlusTV HD PCI 120 (ATSC 120)", 188199e09eacSMauro Carvalho Chehab .tuner_type = TUNER_XC2028, 188299e09eacSMauro Carvalho Chehab .radio_type = UNSET, 188399e09eacSMauro Carvalho Chehab .tuner_addr = ADDR_UNSET, 188499e09eacSMauro Carvalho Chehab .radio_addr = ADDR_UNSET, 188599e09eacSMauro Carvalho Chehab .input = { { 188699e09eacSMauro Carvalho Chehab .type = CX88_VMUX_TELEVISION, 188799e09eacSMauro Carvalho Chehab .vmux = 0, 188899e09eacSMauro Carvalho Chehab .gpio0 = 0x000000ff, 188999e09eacSMauro Carvalho Chehab .gpio1 = 0x0000f35d, 189099e09eacSMauro Carvalho Chehab .gpio2 = 0x00000000, 189199e09eacSMauro Carvalho Chehab }, { 189299e09eacSMauro Carvalho Chehab .type = CX88_VMUX_COMPOSITE1, 189399e09eacSMauro Carvalho Chehab .vmux = 1, 189499e09eacSMauro Carvalho Chehab .gpio0 = 0x000000ff, 189599e09eacSMauro Carvalho Chehab .gpio1 = 0x0000f37e, 189699e09eacSMauro Carvalho Chehab .gpio2 = 0x00000000, 189799e09eacSMauro Carvalho Chehab }, { 189899e09eacSMauro Carvalho Chehab .type = CX88_VMUX_SVIDEO, 189999e09eacSMauro Carvalho Chehab .vmux = 2, 190099e09eacSMauro Carvalho Chehab .gpio0 = 0x000000ff, 190199e09eacSMauro Carvalho Chehab .gpio1 = 0x0000f37e, 190299e09eacSMauro Carvalho Chehab .gpio2 = 0x00000000, 190399e09eacSMauro Carvalho Chehab } }, 190499e09eacSMauro Carvalho Chehab .radio = { 190599e09eacSMauro Carvalho Chehab .type = CX88_RADIO, 190699e09eacSMauro Carvalho Chehab .gpio0 = 0x000000ff, 190799e09eacSMauro Carvalho Chehab .gpio1 = 0x0000f35d, 190899e09eacSMauro Carvalho Chehab .gpio2 = 0x00000000, 190999e09eacSMauro Carvalho Chehab }, 191099e09eacSMauro Carvalho Chehab .mpeg = CX88_MPEG_DVB, 191199e09eacSMauro Carvalho Chehab }, 19125bd1b663SSteven Toth [CX88_BOARD_HAUPPAUGE_HVR4000] = { 19135bd1b663SSteven Toth .name = "Hauppauge WinTV-HVR4000 DVB-S/S2/T/Hybrid", 19145bd1b663SSteven Toth .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, 19155bd1b663SSteven Toth .radio_type = UNSET, 19165bd1b663SSteven Toth .tuner_addr = ADDR_UNSET, 19175bd1b663SSteven Toth .radio_addr = ADDR_UNSET, 19185bd1b663SSteven Toth .tda9887_conf = TDA9887_PRESENT, 1919facd2366SHans Verkuil .audio_chip = CX88_AUDIO_WM8775, 19205bd1b663SSteven Toth /* 19215bd1b663SSteven Toth * GPIO0 (WINTV2000) 19225bd1b663SSteven Toth * 19235bd1b663SSteven Toth * Analogue SAT DVB-T 19245bd1b663SSteven Toth * Antenna 0xc4bf 0xc4bb 19255bd1b663SSteven Toth * Composite 0xc4bf 0xc4bb 19265bd1b663SSteven Toth * S-Video 0xc4bf 0xc4bb 19275bd1b663SSteven Toth * Composite1 0xc4ff 0xc4fb 19285bd1b663SSteven Toth * S-Video1 0xc4ff 0xc4fb 19292491fbb7SSteven Toth * 19302491fbb7SSteven Toth * BIT VALUE FUNCTION GP{x}_IO 19312491fbb7SSteven Toth * 0 1 I:? 19322491fbb7SSteven Toth * 1 1 I:? 193363248f26SDarron Broad * 2 1 O:MPEG PORT 0=DVB-T 1=DVB-S 19342491fbb7SSteven Toth * 3 1 I:? 19352491fbb7SSteven Toth * 4 1 I:? 19362491fbb7SSteven Toth * 5 1 I:? 19372491fbb7SSteven Toth * 6 0 O:INPUT SELECTOR 0=INTERNAL 1=EXPANSION 19382491fbb7SSteven Toth * 7 1 O:DVB-T DEMOD RESET LOW 19392491fbb7SSteven Toth * 19402491fbb7SSteven Toth * BIT VALUE FUNCTION GP{x}_OE 19412491fbb7SSteven Toth * 8 0 I 19422491fbb7SSteven Toth * 9 0 I 19432491fbb7SSteven Toth * a 1 O 19442491fbb7SSteven Toth * b 0 I 19452491fbb7SSteven Toth * c 0 I 19462491fbb7SSteven Toth * d 0 I 19472491fbb7SSteven Toth * e 1 O 19482491fbb7SSteven Toth * f 1 O 1949649e13a9SDarron Broad * 1950649e13a9SDarron Broad * WM8775 ADC 1951649e13a9SDarron Broad * 1952649e13a9SDarron Broad * 1: TV Audio / FM Mono 1953649e13a9SDarron Broad * 2: Line-In 1954649e13a9SDarron Broad * 3: Line-In Expansion 1955649e13a9SDarron Broad * 4: FM Stereo 19565bd1b663SSteven Toth */ 19575bd1b663SSteven Toth .input = { { 19585bd1b663SSteven Toth .type = CX88_VMUX_TELEVISION, 19595bd1b663SSteven Toth .vmux = 0, 19605bd1b663SSteven Toth .gpio0 = 0xc4bf, 1961649e13a9SDarron Broad /* 1: TV Audio / FM Mono */ 1962923ac7f7SDarron Broad .audioroute = 1, 19635bd1b663SSteven Toth }, { 19645bd1b663SSteven Toth .type = CX88_VMUX_COMPOSITE1, 19655bd1b663SSteven Toth .vmux = 1, 19665bd1b663SSteven Toth .gpio0 = 0xc4bf, 1967649e13a9SDarron Broad /* 2: Line-In */ 1968923ac7f7SDarron Broad .audioroute = 2, 19695bd1b663SSteven Toth }, { 19705bd1b663SSteven Toth .type = CX88_VMUX_SVIDEO, 19715bd1b663SSteven Toth .vmux = 2, 19725bd1b663SSteven Toth .gpio0 = 0xc4bf, 1973649e13a9SDarron Broad /* 2: Line-In */ 1974923ac7f7SDarron Broad .audioroute = 2, 19755bd1b663SSteven Toth } }, 197663248f26SDarron Broad .radio = { 197763248f26SDarron Broad .type = CX88_RADIO, 197863248f26SDarron Broad .gpio0 = 0xc4bf, 1979649e13a9SDarron Broad /* 4: FM Stereo */ 1980649e13a9SDarron Broad .audioroute = 8, 198163248f26SDarron Broad }, 19825bd1b663SSteven Toth .mpeg = CX88_MPEG_DVB, 1983363c35fcSSteven Toth .num_frontends = 2, 19845bd1b663SSteven Toth }, 19855bd1b663SSteven Toth [CX88_BOARD_HAUPPAUGE_HVR4000LITE] = { 19865bd1b663SSteven Toth .name = "Hauppauge WinTV-HVR4000(Lite) DVB-S/S2", 19875bd1b663SSteven Toth .tuner_type = UNSET, 19885bd1b663SSteven Toth .radio_type = UNSET, 19895bd1b663SSteven Toth .tuner_addr = ADDR_UNSET, 19905bd1b663SSteven Toth .radio_addr = ADDR_UNSET, 19915bd1b663SSteven Toth .input = { { 19925bd1b663SSteven Toth .type = CX88_VMUX_DVB, 19935bd1b663SSteven Toth .vmux = 0, 19945bd1b663SSteven Toth } }, 19955bd1b663SSteven Toth .mpeg = CX88_MPEG_DVB, 19965bd1b663SSteven Toth }, 1997e4aab64cSIgor M. Liplianin [CX88_BOARD_TEVII_S420] = { 1998e4aab64cSIgor M. Liplianin .name = "TeVii S420 DVB-S", 1999e4aab64cSIgor M. Liplianin .tuner_type = UNSET, 2000e4aab64cSIgor M. Liplianin .radio_type = UNSET, 2001e4aab64cSIgor M. Liplianin .tuner_addr = ADDR_UNSET, 2002e4aab64cSIgor M. Liplianin .radio_addr = ADDR_UNSET, 2003e4aab64cSIgor M. Liplianin .input = { { 2004e4aab64cSIgor M. Liplianin .type = CX88_VMUX_DVB, 2005e4aab64cSIgor M. Liplianin .vmux = 0, 2006e4aab64cSIgor M. Liplianin } }, 2007e4aab64cSIgor M. Liplianin .mpeg = CX88_MPEG_DVB, 2008e4aab64cSIgor M. Liplianin }, 2009af832623SIgor M. Liplianin [CX88_BOARD_TEVII_S460] = { 2010af832623SIgor M. Liplianin .name = "TeVii S460 DVB-S/S2", 2011af832623SIgor M. Liplianin .tuner_type = UNSET, 2012af832623SIgor M. Liplianin .radio_type = UNSET, 2013af832623SIgor M. Liplianin .tuner_addr = ADDR_UNSET, 2014af832623SIgor M. Liplianin .radio_addr = ADDR_UNSET, 2015af832623SIgor M. Liplianin .input = { { 2016af832623SIgor M. Liplianin .type = CX88_VMUX_DVB, 2017af832623SIgor M. Liplianin .vmux = 0, 2018af832623SIgor M. Liplianin } }, 2019af832623SIgor M. Liplianin .mpeg = CX88_MPEG_DVB, 2020af832623SIgor M. Liplianin }, 20210cb73639SIgor M. Liplianin [CX88_BOARD_TEVII_S464] = { 20220cb73639SIgor M. Liplianin .name = "TeVii S464 DVB-S/S2", 20230cb73639SIgor M. Liplianin .tuner_type = UNSET, 20240cb73639SIgor M. Liplianin .radio_type = UNSET, 20250cb73639SIgor M. Liplianin .tuner_addr = ADDR_UNSET, 20260cb73639SIgor M. Liplianin .radio_addr = ADDR_UNSET, 20270cb73639SIgor M. Liplianin .input = { { 20280cb73639SIgor M. Liplianin .type = CX88_VMUX_DVB, 20290cb73639SIgor M. Liplianin .vmux = 0, 20300cb73639SIgor M. Liplianin } }, 20310cb73639SIgor M. Liplianin .mpeg = CX88_MPEG_DVB, 20320cb73639SIgor M. Liplianin }, 20334cd7fb87SOleg Roitburd [CX88_BOARD_OMICOM_SS4_PCI] = { 20344cd7fb87SOleg Roitburd .name = "Omicom SS4 DVB-S/S2 PCI", 20354cd7fb87SOleg Roitburd .tuner_type = UNSET, 20364cd7fb87SOleg Roitburd .radio_type = UNSET, 20374cd7fb87SOleg Roitburd .tuner_addr = ADDR_UNSET, 20384cd7fb87SOleg Roitburd .radio_addr = ADDR_UNSET, 20394cd7fb87SOleg Roitburd .input = { { 20404cd7fb87SOleg Roitburd .type = CX88_VMUX_DVB, 20414cd7fb87SOleg Roitburd .vmux = 0, 20424cd7fb87SOleg Roitburd } }, 20434cd7fb87SOleg Roitburd .mpeg = CX88_MPEG_DVB, 20444cd7fb87SOleg Roitburd }, 20454b29631dSIgor M. Liplianin [CX88_BOARD_TBS_8910] = { 20464b29631dSIgor M. Liplianin .name = "TBS 8910 DVB-S", 20474b29631dSIgor M. Liplianin .tuner_type = UNSET, 20484b29631dSIgor M. Liplianin .radio_type = UNSET, 20494b29631dSIgor M. Liplianin .tuner_addr = ADDR_UNSET, 20504b29631dSIgor M. Liplianin .radio_addr = ADDR_UNSET, 20514b29631dSIgor M. Liplianin .input = { { 20524b29631dSIgor M. Liplianin .type = CX88_VMUX_DVB, 20534b29631dSIgor M. Liplianin .vmux = 0, 20544b29631dSIgor M. Liplianin } }, 20554b29631dSIgor M. Liplianin .mpeg = CX88_MPEG_DVB, 20564b29631dSIgor M. Liplianin }, 2057ee73042cSOleg Roitburd [CX88_BOARD_TBS_8920] = { 2058ee73042cSOleg Roitburd .name = "TBS 8920 DVB-S/S2", 2059c39ba330SHans Verkuil .tuner_type = UNSET, 2060ee73042cSOleg Roitburd .radio_type = UNSET, 2061ee73042cSOleg Roitburd .tuner_addr = ADDR_UNSET, 2062ee73042cSOleg Roitburd .radio_addr = ADDR_UNSET, 2063ee73042cSOleg Roitburd .input = { { 2064ee73042cSOleg Roitburd .type = CX88_VMUX_DVB, 2065ad5f74c0SIgor M. Liplianin .vmux = 0, 2066ad5f74c0SIgor M. Liplianin .gpio0 = 0x8080, 2067ee73042cSOleg Roitburd } }, 2068ee73042cSOleg Roitburd .mpeg = CX88_MPEG_DVB, 2069ee73042cSOleg Roitburd }, 2070cd3cde12SIgor M. Liplianin [CX88_BOARD_PROF_6200] = { 2071cd3cde12SIgor M. Liplianin .name = "Prof 6200 DVB-S", 2072cd3cde12SIgor M. Liplianin .tuner_type = UNSET, 2073cd3cde12SIgor M. Liplianin .radio_type = UNSET, 2074cd3cde12SIgor M. Liplianin .tuner_addr = ADDR_UNSET, 2075cd3cde12SIgor M. Liplianin .radio_addr = ADDR_UNSET, 2076cd3cde12SIgor M. Liplianin .input = { { 2077cd3cde12SIgor M. Liplianin .type = CX88_VMUX_DVB, 2078cd3cde12SIgor M. Liplianin .vmux = 0, 2079cd3cde12SIgor M. Liplianin } }, 2080cd3cde12SIgor M. Liplianin .mpeg = CX88_MPEG_DVB, 2081cd3cde12SIgor M. Liplianin }, 208257f51dbcSOleg Roitburd [CX88_BOARD_PROF_7300] = { 208357f51dbcSOleg Roitburd .name = "PROF 7300 DVB-S/S2", 208457f51dbcSOleg Roitburd .tuner_type = UNSET, 208557f51dbcSOleg Roitburd .radio_type = UNSET, 208657f51dbcSOleg Roitburd .tuner_addr = ADDR_UNSET, 208757f51dbcSOleg Roitburd .radio_addr = ADDR_UNSET, 208857f51dbcSOleg Roitburd .input = { { 208957f51dbcSOleg Roitburd .type = CX88_VMUX_DVB, 209057f51dbcSOleg Roitburd .vmux = 0, 209157f51dbcSOleg Roitburd } }, 209257f51dbcSOleg Roitburd .mpeg = CX88_MPEG_DVB, 209357f51dbcSOleg Roitburd }, 20944b29631dSIgor M. Liplianin [CX88_BOARD_SATTRADE_ST4200] = { 20954b29631dSIgor M. Liplianin .name = "SATTRADE ST4200 DVB-S/S2", 20964b29631dSIgor M. Liplianin .tuner_type = UNSET, 20974b29631dSIgor M. Liplianin .radio_type = UNSET, 20984b29631dSIgor M. Liplianin .tuner_addr = ADDR_UNSET, 20994b29631dSIgor M. Liplianin .radio_addr = ADDR_UNSET, 21004b29631dSIgor M. Liplianin .input = { { 21014b29631dSIgor M. Liplianin .type = CX88_VMUX_DVB, 21024b29631dSIgor M. Liplianin .vmux = 0, 21034b29631dSIgor M. Liplianin } }, 21044b29631dSIgor M. Liplianin .mpeg = CX88_MPEG_DVB, 21054b29631dSIgor M. Liplianin }, 210670101a27SStephan Wienczny [CX88_BOARD_TERRATEC_CINERGY_HT_PCI_MKII] = { 210770101a27SStephan Wienczny .name = "Terratec Cinergy HT PCI MKII", 210870101a27SStephan Wienczny .tuner_type = TUNER_XC2028, 210970101a27SStephan Wienczny .tuner_addr = 0x61, 2110b6854e3fSMiroslav Slugen .radio_type = UNSET, 2111b6854e3fSMiroslav Slugen .radio_addr = ADDR_UNSET, 211270101a27SStephan Wienczny .input = { { 211370101a27SStephan Wienczny .type = CX88_VMUX_TELEVISION, 211470101a27SStephan Wienczny .vmux = 0, 211570101a27SStephan Wienczny .gpio0 = 0x004ff, 211670101a27SStephan Wienczny .gpio1 = 0x010ff, 211770101a27SStephan Wienczny .gpio2 = 0x00001, 211870101a27SStephan Wienczny }, { 211970101a27SStephan Wienczny .type = CX88_VMUX_COMPOSITE1, 212070101a27SStephan Wienczny .vmux = 1, 212170101a27SStephan Wienczny .gpio0 = 0x004fb, 212270101a27SStephan Wienczny .gpio1 = 0x010ef, 212370101a27SStephan Wienczny .audioroute = 1, 212470101a27SStephan Wienczny }, { 212570101a27SStephan Wienczny .type = CX88_VMUX_SVIDEO, 212670101a27SStephan Wienczny .vmux = 2, 212770101a27SStephan Wienczny .gpio0 = 0x004fb, 212870101a27SStephan Wienczny .gpio1 = 0x010ef, 212970101a27SStephan Wienczny .audioroute = 1, 213070101a27SStephan Wienczny } }, 213170101a27SStephan Wienczny .radio = { 213270101a27SStephan Wienczny .type = CX88_RADIO, 213370101a27SStephan Wienczny .gpio0 = 0x004ff, 213470101a27SStephan Wienczny .gpio1 = 0x010ff, 213570101a27SStephan Wienczny .gpio2 = 0x0ff, 213670101a27SStephan Wienczny }, 213770101a27SStephan Wienczny .mpeg = CX88_MPEG_DVB, 213870101a27SStephan Wienczny }, 2139501d8cd4SSteven Toth [CX88_BOARD_HAUPPAUGE_IRONLY] = { 2140501d8cd4SSteven Toth .name = "Hauppauge WinTV-IR Only", 2141501d8cd4SSteven Toth .tuner_type = UNSET, 2142501d8cd4SSteven Toth .radio_type = UNSET, 2143501d8cd4SSteven Toth .tuner_addr = ADDR_UNSET, 2144501d8cd4SSteven Toth .radio_addr = ADDR_UNSET, 2145501d8cd4SSteven Toth }, 21463047a176SMiroslav Sustek [CX88_BOARD_WINFAST_DTV1800H] = { 21473047a176SMiroslav Sustek .name = "Leadtek WinFast DTV1800 Hybrid", 21483047a176SMiroslav Sustek .tuner_type = TUNER_XC2028, 2149b6854e3fSMiroslav Slugen .radio_type = UNSET, 21503047a176SMiroslav Sustek .tuner_addr = 0x61, 2151b6854e3fSMiroslav Slugen .radio_addr = ADDR_UNSET, 21523047a176SMiroslav Sustek /* 21533047a176SMiroslav Sustek * GPIO setting 21543047a176SMiroslav Sustek * 21553047a176SMiroslav Sustek * 2: mute (0=off,1=on) 21563047a176SMiroslav Sustek * 12: tuner reset pin 21573047a176SMiroslav Sustek * 13: audio source (0=tuner audio,1=line in) 21583047a176SMiroslav Sustek * 14: FM (0=on,1=off ???) 21593047a176SMiroslav Sustek */ 21603047a176SMiroslav Sustek .input = { { 21613047a176SMiroslav Sustek .type = CX88_VMUX_TELEVISION, 21623047a176SMiroslav Sustek .vmux = 0, 21633047a176SMiroslav Sustek .gpio0 = 0x0400, /* pin 2 = 0 */ 21643047a176SMiroslav Sustek .gpio1 = 0x6040, /* pin 13 = 0, pin 14 = 1 */ 21653047a176SMiroslav Sustek .gpio2 = 0x0000, 21663047a176SMiroslav Sustek }, { 21673047a176SMiroslav Sustek .type = CX88_VMUX_COMPOSITE1, 21683047a176SMiroslav Sustek .vmux = 1, 21693047a176SMiroslav Sustek .gpio0 = 0x0400, /* pin 2 = 0 */ 21703047a176SMiroslav Sustek .gpio1 = 0x6060, /* pin 13 = 1, pin 14 = 1 */ 21713047a176SMiroslav Sustek .gpio2 = 0x0000, 21723047a176SMiroslav Sustek }, { 21733047a176SMiroslav Sustek .type = CX88_VMUX_SVIDEO, 21743047a176SMiroslav Sustek .vmux = 2, 21753047a176SMiroslav Sustek .gpio0 = 0x0400, /* pin 2 = 0 */ 21763047a176SMiroslav Sustek .gpio1 = 0x6060, /* pin 13 = 1, pin 14 = 1 */ 21773047a176SMiroslav Sustek .gpio2 = 0x0000, 21783047a176SMiroslav Sustek } }, 21793047a176SMiroslav Sustek .radio = { 21803047a176SMiroslav Sustek .type = CX88_RADIO, 21813047a176SMiroslav Sustek .gpio0 = 0x0400, /* pin 2 = 0 */ 21823047a176SMiroslav Sustek .gpio1 = 0x6000, /* pin 13 = 0, pin 14 = 0 */ 21833047a176SMiroslav Sustek .gpio2 = 0x0000, 21843047a176SMiroslav Sustek }, 21853047a176SMiroslav Sustek .mpeg = CX88_MPEG_DVB, 21863047a176SMiroslav Sustek }, 21878eb79c0bSistvan_v@mailbox.hu [CX88_BOARD_WINFAST_DTV1800H_XC4000] = { 21888eb79c0bSistvan_v@mailbox.hu .name = "Leadtek WinFast DTV1800 H (XC4000)", 21898eb79c0bSistvan_v@mailbox.hu .tuner_type = TUNER_XC4000, 2190b6854e3fSMiroslav Slugen .radio_type = UNSET, 21918eb79c0bSistvan_v@mailbox.hu .tuner_addr = 0x61, 2192b6854e3fSMiroslav Slugen .radio_addr = ADDR_UNSET, 21938eb79c0bSistvan_v@mailbox.hu /* 21948eb79c0bSistvan_v@mailbox.hu * GPIO setting 21958eb79c0bSistvan_v@mailbox.hu * 21968eb79c0bSistvan_v@mailbox.hu * 2: mute (0=off,1=on) 21978eb79c0bSistvan_v@mailbox.hu * 12: tuner reset pin 21988eb79c0bSistvan_v@mailbox.hu * 13: audio source (0=tuner audio,1=line in) 21998eb79c0bSistvan_v@mailbox.hu * 14: FM (0=on,1=off ???) 22008eb79c0bSistvan_v@mailbox.hu */ 22018eb79c0bSistvan_v@mailbox.hu .input = { { 22028eb79c0bSistvan_v@mailbox.hu .type = CX88_VMUX_TELEVISION, 22038eb79c0bSistvan_v@mailbox.hu .vmux = 0, 22048eb79c0bSistvan_v@mailbox.hu .gpio0 = 0x0400, /* pin 2 = 0 */ 22058eb79c0bSistvan_v@mailbox.hu .gpio1 = 0x6040, /* pin 13 = 0, pin 14 = 1 */ 22068eb79c0bSistvan_v@mailbox.hu .gpio2 = 0x0000, 22078eb79c0bSistvan_v@mailbox.hu }, { 22088eb79c0bSistvan_v@mailbox.hu .type = CX88_VMUX_COMPOSITE1, 22098eb79c0bSistvan_v@mailbox.hu .vmux = 1, 22108eb79c0bSistvan_v@mailbox.hu .gpio0 = 0x0400, /* pin 2 = 0 */ 22118eb79c0bSistvan_v@mailbox.hu .gpio1 = 0x6060, /* pin 13 = 1, pin 14 = 1 */ 22128eb79c0bSistvan_v@mailbox.hu .gpio2 = 0x0000, 22138eb79c0bSistvan_v@mailbox.hu }, { 22148eb79c0bSistvan_v@mailbox.hu .type = CX88_VMUX_SVIDEO, 22158eb79c0bSistvan_v@mailbox.hu .vmux = 2, 22168eb79c0bSistvan_v@mailbox.hu .gpio0 = 0x0400, /* pin 2 = 0 */ 22178eb79c0bSistvan_v@mailbox.hu .gpio1 = 0x6060, /* pin 13 = 1, pin 14 = 1 */ 22188eb79c0bSistvan_v@mailbox.hu .gpio2 = 0x0000, 22198eb79c0bSistvan_v@mailbox.hu } }, 22208eb79c0bSistvan_v@mailbox.hu .radio = { 22218eb79c0bSistvan_v@mailbox.hu .type = CX88_RADIO, 22228eb79c0bSistvan_v@mailbox.hu .gpio0 = 0x0400, /* pin 2 = 0 */ 22238eb79c0bSistvan_v@mailbox.hu .gpio1 = 0x6000, /* pin 13 = 0, pin 14 = 0 */ 22248eb79c0bSistvan_v@mailbox.hu .gpio2 = 0x0000, 22258eb79c0bSistvan_v@mailbox.hu }, 22268eb79c0bSistvan_v@mailbox.hu .mpeg = CX88_MPEG_DVB, 22278eb79c0bSistvan_v@mailbox.hu }, 2228f271a3afSistvan_v@mailbox.hu [CX88_BOARD_WINFAST_DTV2000H_PLUS] = { 2229f271a3afSistvan_v@mailbox.hu .name = "Leadtek WinFast DTV2000 H PLUS", 2230f271a3afSistvan_v@mailbox.hu .tuner_type = TUNER_XC4000, 2231b6854e3fSMiroslav Slugen .radio_type = UNSET, 2232f271a3afSistvan_v@mailbox.hu .tuner_addr = 0x61, 2233b6854e3fSMiroslav Slugen .radio_addr = ADDR_UNSET, 2234f271a3afSistvan_v@mailbox.hu /* 2235f271a3afSistvan_v@mailbox.hu * GPIO 2236f271a3afSistvan_v@mailbox.hu * 2: 1: mute audio 2237f271a3afSistvan_v@mailbox.hu * 12: 0: reset XC4000 2238f271a3afSistvan_v@mailbox.hu * 13: 1: audio input is line in (0: tuner) 2239f271a3afSistvan_v@mailbox.hu * 14: 0: FM radio 2240f271a3afSistvan_v@mailbox.hu * 16: 0: RF input is cable 2241f271a3afSistvan_v@mailbox.hu */ 2242f271a3afSistvan_v@mailbox.hu .input = { { 2243f271a3afSistvan_v@mailbox.hu .type = CX88_VMUX_TELEVISION, 2244f271a3afSistvan_v@mailbox.hu .vmux = 0, 2245f271a3afSistvan_v@mailbox.hu .gpio0 = 0x0403, 2246f271a3afSistvan_v@mailbox.hu .gpio1 = 0xF0D7, 2247f271a3afSistvan_v@mailbox.hu .gpio2 = 0x0101, 2248f271a3afSistvan_v@mailbox.hu .gpio3 = 0x0000, 2249f271a3afSistvan_v@mailbox.hu }, { 2250f271a3afSistvan_v@mailbox.hu .type = CX88_VMUX_CABLE, 2251f271a3afSistvan_v@mailbox.hu .vmux = 0, 2252f271a3afSistvan_v@mailbox.hu .gpio0 = 0x0403, 2253f271a3afSistvan_v@mailbox.hu .gpio1 = 0xF0D7, 2254f271a3afSistvan_v@mailbox.hu .gpio2 = 0x0100, 2255f271a3afSistvan_v@mailbox.hu .gpio3 = 0x0000, 2256f271a3afSistvan_v@mailbox.hu }, { 2257f271a3afSistvan_v@mailbox.hu .type = CX88_VMUX_COMPOSITE1, 2258f271a3afSistvan_v@mailbox.hu .vmux = 1, 2259f271a3afSistvan_v@mailbox.hu .gpio0 = 0x0403, /* was 0x0407 */ 2260f271a3afSistvan_v@mailbox.hu .gpio1 = 0xF0F7, 2261f271a3afSistvan_v@mailbox.hu .gpio2 = 0x0101, 2262f271a3afSistvan_v@mailbox.hu .gpio3 = 0x0000, 2263f271a3afSistvan_v@mailbox.hu }, { 2264f271a3afSistvan_v@mailbox.hu .type = CX88_VMUX_SVIDEO, 2265f271a3afSistvan_v@mailbox.hu .vmux = 2, 2266f271a3afSistvan_v@mailbox.hu .gpio0 = 0x0403, /* was 0x0407 */ 2267f271a3afSistvan_v@mailbox.hu .gpio1 = 0xF0F7, 2268f271a3afSistvan_v@mailbox.hu .gpio2 = 0x0101, 2269f271a3afSistvan_v@mailbox.hu .gpio3 = 0x0000, 2270f271a3afSistvan_v@mailbox.hu } }, 2271f271a3afSistvan_v@mailbox.hu .radio = { 2272f271a3afSistvan_v@mailbox.hu .type = CX88_RADIO, 2273f271a3afSistvan_v@mailbox.hu .gpio0 = 0x0403, 2274f271a3afSistvan_v@mailbox.hu .gpio1 = 0xF097, 2275f271a3afSistvan_v@mailbox.hu .gpio2 = 0x0100, 2276f271a3afSistvan_v@mailbox.hu .gpio3 = 0x0000, 2277f271a3afSistvan_v@mailbox.hu }, 2278f271a3afSistvan_v@mailbox.hu .mpeg = CX88_MPEG_DVB, 2279f271a3afSistvan_v@mailbox.hu }, 2280b699c271SIgor M. Liplianin [CX88_BOARD_PROF_7301] = { 2281b699c271SIgor M. Liplianin .name = "Prof 7301 DVB-S/S2", 2282b699c271SIgor M. Liplianin .tuner_type = UNSET, 2283b699c271SIgor M. Liplianin .radio_type = UNSET, 2284b699c271SIgor M. Liplianin .tuner_addr = ADDR_UNSET, 2285b699c271SIgor M. Liplianin .radio_addr = ADDR_UNSET, 2286b699c271SIgor M. Liplianin .input = { { 2287b699c271SIgor M. Liplianin .type = CX88_VMUX_DVB, 2288b699c271SIgor M. Liplianin .vmux = 0, 2289b699c271SIgor M. Liplianin } }, 2290b699c271SIgor M. Liplianin .mpeg = CX88_MPEG_DVB, 2291b699c271SIgor M. Liplianin }, 2292111ac84aSSergey Ivanov [CX88_BOARD_TWINHAN_VP1027_DVBS] = { 2293111ac84aSSergey Ivanov .name = "Twinhan VP-1027 DVB-S", 2294c39ba330SHans Verkuil .tuner_type = UNSET, 2295111ac84aSSergey Ivanov .radio_type = UNSET, 2296111ac84aSSergey Ivanov .tuner_addr = ADDR_UNSET, 2297111ac84aSSergey Ivanov .radio_addr = ADDR_UNSET, 2298111ac84aSSergey Ivanov .input = { { 2299111ac84aSSergey Ivanov .type = CX88_VMUX_DVB, 2300111ac84aSSergey Ivanov .vmux = 0, 2301111ac84aSSergey Ivanov } }, 2302111ac84aSSergey Ivanov .mpeg = CX88_MPEG_DVB, 2303111ac84aSSergey Ivanov }, 23041da177e4SLinus Torvalds }; 23051da177e4SLinus Torvalds 23061da177e4SLinus Torvalds /* ------------------------------------------------------------------ */ 23071da177e4SLinus Torvalds /* PCI subsystem IDs */ 23081da177e4SLinus Torvalds 2309bbc83597STrent Piepho static const struct cx88_subid cx88_subids[] = { 23101da177e4SLinus Torvalds { 23111da177e4SLinus Torvalds .subvendor = 0x0070, 23121da177e4SLinus Torvalds .subdevice = 0x3400, 23131da177e4SLinus Torvalds .card = CX88_BOARD_HAUPPAUGE, 23141da177e4SLinus Torvalds }, { 23151da177e4SLinus Torvalds .subvendor = 0x0070, 23161da177e4SLinus Torvalds .subdevice = 0x3401, 23171da177e4SLinus Torvalds .card = CX88_BOARD_HAUPPAUGE, 23181da177e4SLinus Torvalds }, { 23191da177e4SLinus Torvalds .subvendor = 0x14c7, 23201da177e4SLinus Torvalds .subdevice = 0x0106, 23211da177e4SLinus Torvalds .card = CX88_BOARD_GDI, 23221da177e4SLinus Torvalds }, { 23231da177e4SLinus Torvalds .subvendor = 0x14c7, 23241da177e4SLinus Torvalds .subdevice = 0x0107, /* with mpeg encoder */ 23251da177e4SLinus Torvalds .card = CX88_BOARD_GDI, 23261da177e4SLinus Torvalds }, { 23271da177e4SLinus Torvalds .subvendor = PCI_VENDOR_ID_ATI, 23281da177e4SLinus Torvalds .subdevice = 0x00f8, 23291da177e4SLinus Torvalds .card = CX88_BOARD_ATI_WONDER_PRO, 23301da177e4SLinus Torvalds }, { 2331bc13ae11SPatrice Levesque .subvendor = PCI_VENDOR_ID_ATI, 2332bc13ae11SPatrice Levesque .subdevice = 0x00f9, 2333bc13ae11SPatrice Levesque .card = CX88_BOARD_ATI_WONDER_PRO, 2334bc13ae11SPatrice Levesque }, { 23351da177e4SLinus Torvalds .subvendor = 0x107d, 23361da177e4SLinus Torvalds .subdevice = 0x6611, 23371da177e4SLinus Torvalds .card = CX88_BOARD_WINFAST2000XP_EXPERT, 23381da177e4SLinus Torvalds }, { 23391da177e4SLinus Torvalds .subvendor = 0x107d, 23401da177e4SLinus Torvalds .subdevice = 0x6613, /* NTSC */ 23411da177e4SLinus Torvalds .card = CX88_BOARD_WINFAST2000XP_EXPERT, 23421da177e4SLinus Torvalds }, { 23431da177e4SLinus Torvalds .subvendor = 0x107d, 23441da177e4SLinus Torvalds .subdevice = 0x6620, 23451da177e4SLinus Torvalds .card = CX88_BOARD_WINFAST_DV2000, 23461da177e4SLinus Torvalds }, { 23471da177e4SLinus Torvalds .subvendor = 0x107d, 23481da177e4SLinus Torvalds .subdevice = 0x663b, 23491da177e4SLinus Torvalds .card = CX88_BOARD_LEADTEK_PVR2000, 23501da177e4SLinus Torvalds }, { 23511da177e4SLinus Torvalds .subvendor = 0x107d, 23528dd86eebSMichael Krufky .subdevice = 0x663c, 23531da177e4SLinus Torvalds .card = CX88_BOARD_LEADTEK_PVR2000, 23541da177e4SLinus Torvalds }, { 23551da177e4SLinus Torvalds .subvendor = 0x1461, 23561da177e4SLinus Torvalds .subdevice = 0x000b, 23577418f346SLubomir Bulej .card = CX88_BOARD_AVERTV_STUDIO_303, 23581da177e4SLinus Torvalds }, { 23591da177e4SLinus Torvalds .subvendor = 0x1462, 23601da177e4SLinus Torvalds .subdevice = 0x8606, 23611da177e4SLinus Torvalds .card = CX88_BOARD_MSI_TVANYWHERE_MASTER, 23621da177e4SLinus Torvalds }, { 23631da177e4SLinus Torvalds .subvendor = 0x10fc, 23641da177e4SLinus Torvalds .subdevice = 0xd003, 23651da177e4SLinus Torvalds .card = CX88_BOARD_IODATA_GVVCP3PCI, 23661da177e4SLinus Torvalds }, { 23671da177e4SLinus Torvalds .subvendor = 0x1043, 23681da177e4SLinus Torvalds .subdevice = 0x4823, /* with mpeg encoder */ 23691da177e4SLinus Torvalds .card = CX88_BOARD_ASUS_PVR_416, 23701da177e4SLinus Torvalds }, { 23711da177e4SLinus Torvalds .subvendor = 0x17de, 23721da177e4SLinus Torvalds .subdevice = 0x08a6, 23731da177e4SLinus Torvalds .card = CX88_BOARD_KWORLD_DVB_T, 23741da177e4SLinus Torvalds }, { 23751da177e4SLinus Torvalds .subvendor = 0x18ac, 23761da177e4SLinus Torvalds .subdevice = 0xd810, 2377a82decf6SMauro Carvalho Chehab .card = CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q, 23781da177e4SLinus Torvalds }, { 2379097b750eSMichael Krufky .subvendor = 0x18ac, 2380097b750eSMichael Krufky .subdevice = 0xd820, 238180d34362SMichael Krufky .card = CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_T, 2382097b750eSMichael Krufky }, { 23837df64e8cSMichael Krufky .subvendor = 0x18ac, 23847df64e8cSMichael Krufky .subdevice = 0xdb00, 23851da177e4SLinus Torvalds .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1, 23861da177e4SLinus Torvalds }, { 23871da177e4SLinus Torvalds .subvendor = 0x0070, 23881da177e4SLinus Torvalds .subdevice = 0x9002, 23891da177e4SLinus Torvalds .card = CX88_BOARD_HAUPPAUGE_DVB_T1, 23901da177e4SLinus Torvalds }, { 23911da177e4SLinus Torvalds .subvendor = 0x14f1, 23921da177e4SLinus Torvalds .subdevice = 0x0187, 23931da177e4SLinus Torvalds .card = CX88_BOARD_CONEXANT_DVB_T1, 23941da177e4SLinus Torvalds }, { 23951da177e4SLinus Torvalds .subvendor = 0x1540, 23961da177e4SLinus Torvalds .subdevice = 0x2580, 23971da177e4SLinus Torvalds .card = CX88_BOARD_PROVIDEO_PV259, 23981da177e4SLinus Torvalds }, { 23997df64e8cSMichael Krufky .subvendor = 0x18ac, 24007df64e8cSMichael Krufky .subdevice = 0xdb10, 24011da177e4SLinus Torvalds .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS, 24021da177e4SLinus Torvalds }, { 24031da177e4SLinus Torvalds .subvendor = 0x1554, 24041da177e4SLinus Torvalds .subdevice = 0x4811, 24051da177e4SLinus Torvalds .card = CX88_BOARD_PIXELVIEW, 24061da177e4SLinus Torvalds }, { 24071da177e4SLinus Torvalds .subvendor = 0x7063, 24081da177e4SLinus Torvalds .subdevice = 0x3000, /* HD-3000 card */ 24091da177e4SLinus Torvalds .card = CX88_BOARD_PCHDTV_HD3000, 24101da177e4SLinus Torvalds }, { 24117df64e8cSMichael Krufky .subvendor = 0x17de, 24127df64e8cSMichael Krufky .subdevice = 0xa8a6, 24131da177e4SLinus Torvalds .card = CX88_BOARD_DNTV_LIVE_DVB_T, 24141da177e4SLinus Torvalds }, { 24151da177e4SLinus Torvalds .subvendor = 0x0070, 24161da177e4SLinus Torvalds .subdevice = 0x2801, 24171da177e4SLinus Torvalds .card = CX88_BOARD_HAUPPAUGE_ROSLYN, 24181da177e4SLinus Torvalds }, { 24197df64e8cSMichael Krufky .subvendor = 0x14f1, 24201da177e4SLinus Torvalds .subdevice = 0x0342, 24211da177e4SLinus Torvalds .card = CX88_BOARD_DIGITALLOGIC_MEC, 24221da177e4SLinus Torvalds }, { 24231da177e4SLinus Torvalds .subvendor = 0x10fc, 24241da177e4SLinus Torvalds .subdevice = 0xd035, 24251da177e4SLinus Torvalds .card = CX88_BOARD_IODATA_GVBCTV7E, 2426a82decf6SMauro Carvalho Chehab }, { 2427a82decf6SMauro Carvalho Chehab .subvendor = 0x1421, 2428a82decf6SMauro Carvalho Chehab .subdevice = 0x0334, 2429a82decf6SMauro Carvalho Chehab .card = CX88_BOARD_ADSTECH_DVB_T_PCI, 2430e057ee11SMichael Krufky }, { 2431e057ee11SMichael Krufky .subvendor = 0x153b, 2432e057ee11SMichael Krufky .subdevice = 0x1166, 2433e057ee11SMichael Krufky .card = CX88_BOARD_TERRATEC_CINERGY_1400_DVB_T1, 24349fef07caSMichael Krufky }, { 24359fef07caSMichael Krufky .subvendor = 0x18ac, 24369fef07caSMichael Krufky .subdevice = 0xd500, 24379fef07caSMichael Krufky .card = CX88_BOARD_DVICO_FUSIONHDTV_5_GOLD, 2438d45170edSNickolay V. Shmyrev }, { 2439d45170edSNickolay V. Shmyrev .subvendor = 0x1461, 2440d45170edSNickolay V. Shmyrev .subdevice = 0x8011, 2441d45170edSNickolay V. Shmyrev .card = CX88_BOARD_AVERMEDIA_ULTRATV_MC_550, 2442e976f937SKirk Lapray }, { 2443e976f937SKirk Lapray .subvendor = PCI_VENDOR_ID_ATI, 2444e976f937SKirk Lapray .subdevice = 0xa101, 2445e976f937SKirk Lapray .card = CX88_BOARD_ATI_HDTVWONDER, 24462b5200a7SDavid Shirley }, { 24472b5200a7SDavid Shirley .subvendor = 0x107d, 24482b5200a7SDavid Shirley .subdevice = 0x665f, 24492b5200a7SDavid Shirley .card = CX88_BOARD_WINFAST_DTV1000, 24507418f346SLubomir Bulej }, { 24517418f346SLubomir Bulej .subvendor = 0x1461, 24527418f346SLubomir Bulej .subdevice = 0x000a, 24537418f346SLubomir Bulej .card = CX88_BOARD_AVERTV_303, 24540fa14aa6SSteven Toth }, { 24550fa14aa6SSteven Toth .subvendor = 0x0070, 24560fa14aa6SSteven Toth .subdevice = 0x9200, 2457fb56cb65SSteven Toth .card = CX88_BOARD_HAUPPAUGE_NOVASE2_S1, 2458fb56cb65SSteven Toth }, { 2459fb56cb65SSteven Toth .subvendor = 0x0070, 2460fb56cb65SSteven Toth .subdevice = 0x9201, 24610fa14aa6SSteven Toth .card = CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1, 24620fa14aa6SSteven Toth }, { 24630fa14aa6SSteven Toth .subvendor = 0x0070, 24640fa14aa6SSteven Toth .subdevice = 0x9202, 2465fb56cb65SSteven Toth .card = CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1, 24660e0351e3SVadim Catana }, { 24670e0351e3SVadim Catana .subvendor = 0x17de, 24680e0351e3SVadim Catana .subdevice = 0x08b2, 24690e0351e3SVadim Catana .card = CX88_BOARD_KWORLD_DVBS_100, 2470611900c1SSteven Toth }, { 2471611900c1SSteven Toth .subvendor = 0x0070, 2472611900c1SSteven Toth .subdevice = 0x9400, 2473611900c1SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR1100, 2474611900c1SSteven Toth }, { 2475611900c1SSteven Toth .subvendor = 0x0070, 2476611900c1SSteven Toth .subdevice = 0x9402, 2477611900c1SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR1100, 2478611900c1SSteven Toth }, { 2479611900c1SSteven Toth .subvendor = 0x0070, 2480611900c1SSteven Toth .subdevice = 0x9800, 2481611900c1SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR1100LP, 2482611900c1SSteven Toth }, { 2483611900c1SSteven Toth .subvendor = 0x0070, 2484611900c1SSteven Toth .subdevice = 0x9802, 2485611900c1SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR1100LP, 2486c432a072SSteven Toth }, { 2487c432a072SSteven Toth .subvendor = 0x0070, 2488c432a072SSteven Toth .subdevice = 0x9001, 2489c432a072SSteven Toth .card = CX88_BOARD_HAUPPAUGE_DVB_T1, 2490fc40b261SChris Pascoe }, { 2491fc40b261SChris Pascoe .subvendor = 0x1822, 2492fc40b261SChris Pascoe .subdevice = 0x0025, 2493fc40b261SChris Pascoe .card = CX88_BOARD_DNTV_LIVE_DVB_T_PRO, 2494f39624fdSManenti Marco }, { 2495f39624fdSManenti Marco .subvendor = 0x17de, 2496f39624fdSManenti Marco .subdevice = 0x08a1, 2497f39624fdSManenti Marco .card = CX88_BOARD_KWORLD_DVB_T_CX22702, 249843eabb4eSChris Pascoe }, { 249943eabb4eSChris Pascoe .subvendor = 0x18ac, 250043eabb4eSChris Pascoe .subdevice = 0xdb50, 250143eabb4eSChris Pascoe .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL, 25026bfb2e1fSMichael Krufky }, { 25036bfb2e1fSMichael Krufky .subvendor = 0x18ac, 2504f74a6b39SMichael Krufky .subdevice = 0xdb54, 2505f74a6b39SMichael Krufky .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL, 2506f74a6b39SMichael Krufky /* Re-branded DViCO: DigitalNow DVB-T Dual */ 2507f74a6b39SMichael Krufky }, { 2508f74a6b39SMichael Krufky .subvendor = 0x18ac, 25096bfb2e1fSMichael Krufky .subdevice = 0xdb11, 25106bfb2e1fSMichael Krufky .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS, 25116bfb2e1fSMichael Krufky /* Re-branded DViCO: UltraView DVB-T Plus */ 251244256de1SMichael Krufky }, { 2513b3fb91d2SChris Pascoe .subvendor = 0x18ac, 2514b3fb91d2SChris Pascoe .subdevice = 0xdb30, 2515b3fb91d2SChris Pascoe .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO, 2516b3fb91d2SChris Pascoe }, { 251744256de1SMichael Krufky .subvendor = 0x17de, 251844256de1SMichael Krufky .subdevice = 0x0840, 251944256de1SMichael Krufky .card = CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT, 25202d90fa44SJelle Foks }, { 25212d90fa44SJelle Foks .subvendor = 0x1421, 25222d90fa44SJelle Foks .subdevice = 0x0305, 25232d90fa44SJelle Foks .card = CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT, 2524780dfef3SChris Pascoe }, { 2525780dfef3SChris Pascoe .subvendor = 0x18ac, 2526780dfef3SChris Pascoe .subdevice = 0xdb40, 2527780dfef3SChris Pascoe .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID, 2528780dfef3SChris Pascoe }, { 2529780dfef3SChris Pascoe .subvendor = 0x18ac, 2530780dfef3SChris Pascoe .subdevice = 0xdb44, 2531780dfef3SChris Pascoe .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID, 2532da215d22SRusty Scott }, { 2533da215d22SRusty Scott .subvendor = 0x7063, 2534da215d22SRusty Scott .subdevice = 0x5500, 2535da215d22SRusty Scott .card = CX88_BOARD_PCHDTV_HD5500, 2536b3038304SValentin Zagura }, { 2537b3038304SValentin Zagura .subvendor = 0x17de, 2538b3038304SValentin Zagura .subdevice = 0x0841, 2539b3038304SValentin Zagura .card = CX88_BOARD_KWORLD_MCE200_DELUXE, 2540fc066478SMichael Krufky }, { 2541fc066478SMichael Krufky .subvendor = 0x1822, 2542fc066478SMichael Krufky .subdevice = 0x0019, 2543fc066478SMichael Krufky .card = CX88_BOARD_DNTV_LIVE_DVB_T_PRO, 2544a3124622SAngelo Marconi }, { 2545a3124622SAngelo Marconi .subvendor = 0x1554, 2546a3124622SAngelo Marconi .subdevice = 0x4813, 2547a3124622SAngelo Marconi .card = CX88_BOARD_PIXELVIEW_PLAYTV_P7000, 2548680543c5SRicardo Cerqueira }, { 2549680543c5SRicardo Cerqueira .subvendor = 0x14f1, 2550680543c5SRicardo Cerqueira .subdevice = 0x0842, 2551be4f4519SRicardo Cerqueira .card = CX88_BOARD_NPGTECH_REALTV_TOP10FM, 25524bd6e9d9SMalcolm Valentine }, { 25534bd6e9d9SMalcolm Valentine .subvendor = 0x107d, 25544bd6e9d9SMalcolm Valentine .subdevice = 0x665e, 25554bd6e9d9SMalcolm Valentine .card = CX88_BOARD_WINFAST_DTV2000H, 255665271bffSMichael Krufky }, { 25574d14c833SVlastimil Labsky .subvendor = 0x107d, 25584d14c833SVlastimil Labsky .subdevice = 0x6f2b, 25594d14c833SVlastimil Labsky .card = CX88_BOARD_WINFAST_DTV2000H_J, 25604d14c833SVlastimil Labsky }, { 256165271bffSMichael Krufky .subvendor = 0x18ac, 256265271bffSMichael Krufky .subdevice = 0xd800, /* FusionHDTV 3 Gold (original revision) */ 256365271bffSMichael Krufky .card = CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q, 2564c02a34f4SSaqeb Akhter }, { 2565c02a34f4SSaqeb Akhter .subvendor = 0x14f1, 2566c02a34f4SSaqeb Akhter .subdevice = 0x0084, 2567c02a34f4SSaqeb Akhter .card = CX88_BOARD_GENIATECH_DVBS, 2568ad10c930SEric Thomas }, { 2569ad10c930SEric Thomas .subvendor = 0x0070, 2570ad10c930SEric Thomas .subdevice = 0x1404, 2571ad10c930SEric Thomas .card = CX88_BOARD_HAUPPAUGE_HVR3000, 25725dbaa2cbSMichael Krufky }, { 25734f3ca2f1SDirk Herrendoerfer .subvendor = 0x18ac, 25744f3ca2f1SDirk Herrendoerfer .subdevice = 0xdc00, 25754f3ca2f1SDirk Herrendoerfer .card = CX88_BOARD_SAMSUNG_SMT_7020, 25764f3ca2f1SDirk Herrendoerfer }, { 25774f3ca2f1SDirk Herrendoerfer .subvendor = 0x18ac, 25784f3ca2f1SDirk Herrendoerfer .subdevice = 0xdccd, 25794f3ca2f1SDirk Herrendoerfer .card = CX88_BOARD_SAMSUNG_SMT_7020, 25804f3ca2f1SDirk Herrendoerfer }, { 25815dbaa2cbSMichael Krufky .subvendor = 0x1461, 25825dbaa2cbSMichael Krufky .subdevice = 0xc111, /* AverMedia M150-D */ 25835dbaa2cbSMichael Krufky /* This board is known to work with the ASUS PVR416 config */ 25845dbaa2cbSMichael Krufky .card = CX88_BOARD_ASUS_PVR_416, 25852acadefaSDavid Bussenschutt }, { 25862acadefaSDavid Bussenschutt .subvendor = 0xc180, 25872acadefaSDavid Bussenschutt .subdevice = 0xc980, 25882acadefaSDavid Bussenschutt .card = CX88_BOARD_TE_DTV_250_OEM_SWANN, 2589aa481a65SSteven Toth }, { 2590aa481a65SSteven Toth .subvendor = 0x0070, 2591aa481a65SSteven Toth .subdevice = 0x9600, 2592aa481a65SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR1300, 2593aa481a65SSteven Toth }, { 2594aa481a65SSteven Toth .subvendor = 0x0070, 2595aa481a65SSteven Toth .subdevice = 0x9601, 2596aa481a65SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR1300, 2597aa481a65SSteven Toth }, { 2598aa481a65SSteven Toth .subvendor = 0x0070, 2599aa481a65SSteven Toth .subdevice = 0x9602, 2600aa481a65SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR1300, 2601dab489dfSMichael Krufky }, { 2602dab489dfSMichael Krufky .subvendor = 0x107d, 2603dab489dfSMichael Krufky .subdevice = 0x6632, 2604dab489dfSMichael Krufky .card = CX88_BOARD_LEADTEK_PVR2000, 26054508f598SMichael Krufky }, { 26064508f598SMichael Krufky .subvendor = 0x12ab, 26074508f598SMichael Krufky .subdevice = 0x2300, /* Club3D Zap TV2100 */ 26084508f598SMichael Krufky .card = CX88_BOARD_KWORLD_DVB_T_CX22702, 26093979ecc7SSteven Toth }, { 26103979ecc7SSteven Toth .subvendor = 0x0070, 26113979ecc7SSteven Toth .subdevice = 0x9000, 26123979ecc7SSteven Toth .card = CX88_BOARD_HAUPPAUGE_DVB_T1, 261376dc82abSSteven Toth }, { 261476dc82abSSteven Toth .subvendor = 0x0070, 261576dc82abSSteven Toth .subdevice = 0x1400, 261676dc82abSSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR3000, 261776dc82abSSteven Toth }, { 261876dc82abSSteven Toth .subvendor = 0x0070, 261976dc82abSSteven Toth .subdevice = 0x1401, 262076dc82abSSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR3000, 262176dc82abSSteven Toth }, { 262276dc82abSSteven Toth .subvendor = 0x0070, 262376dc82abSSteven Toth .subdevice = 0x1402, 262476dc82abSSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR3000, 2625733aeaf4SMichael Krufky }, { 2626733aeaf4SMichael Krufky .subvendor = 0x1421, 2627733aeaf4SMichael Krufky .subdevice = 0x0341, /* ADS Tech InstantTV DVB-S */ 2628733aeaf4SMichael Krufky .card = CX88_BOARD_KWORLD_DVBS_100, 26297cb47a14SDaniel Gimpelevich }, { 26307cb47a14SDaniel Gimpelevich .subvendor = 0x1421, 26317cb47a14SDaniel Gimpelevich .subdevice = 0x0390, 26327cb47a14SDaniel Gimpelevich .card = CX88_BOARD_ADSTECH_PTV_390, 263360464da8SSteven Toth }, { 263460464da8SSteven Toth .subvendor = 0x11bd, 263560464da8SSteven Toth .subdevice = 0x0051, 263660464da8SSteven Toth .card = CX88_BOARD_PINNACLE_PCTV_HD_800i, 26375c00fac0SSteven Toth }, { 26385c00fac0SSteven Toth .subvendor = 0x18ac, 26395c00fac0SSteven Toth .subdevice = 0xd530, 26405c00fac0SSteven Toth .card = CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO, 26419507901eSMauro Carvalho Chehab }, { 26429507901eSMauro Carvalho Chehab .subvendor = 0x12ab, 26439507901eSMauro Carvalho Chehab .subdevice = 0x1788, 26449507901eSMauro Carvalho Chehab .card = CX88_BOARD_PINNACLE_HYBRID_PCTV, 26459507901eSMauro Carvalho Chehab }, { 26469507901eSMauro Carvalho Chehab .subvendor = 0x14f1, 26479507901eSMauro Carvalho Chehab .subdevice = 0xea3d, 26489507901eSMauro Carvalho Chehab .card = CX88_BOARD_POWERCOLOR_REAL_ANGEL, 26499507901eSMauro Carvalho Chehab }, { 26509507901eSMauro Carvalho Chehab .subvendor = 0x107d, 26519507901eSMauro Carvalho Chehab .subdevice = 0x6f18, 26529507901eSMauro Carvalho Chehab .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL, 26539507901eSMauro Carvalho Chehab }, { 26549507901eSMauro Carvalho Chehab .subvendor = 0x14f1, 26559507901eSMauro Carvalho Chehab .subdevice = 0x8852, 26569507901eSMauro Carvalho Chehab .card = CX88_BOARD_GENIATECH_X8000_MT, 26571117d6baSSteven Toth }, { 26581117d6baSSteven Toth .subvendor = 0x18ac, 26591117d6baSSteven Toth .subdevice = 0xd610, 26601117d6baSSteven Toth .card = CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD, 26612422a9b3SMauro Carvalho Chehab }, { 26622422a9b3SMauro Carvalho Chehab .subvendor = 0x1554, 26632422a9b3SMauro Carvalho Chehab .subdevice = 0x4935, 26642422a9b3SMauro Carvalho Chehab .card = CX88_BOARD_PROLINK_PV_8000GT, 266599e09eacSMauro Carvalho Chehab }, { 2666a31d2bb7SMauro Carvalho Chehab .subvendor = 0x1554, 2667a31d2bb7SMauro Carvalho Chehab .subdevice = 0x4976, 2668a31d2bb7SMauro Carvalho Chehab .card = CX88_BOARD_PROLINK_PV_GLOBAL_XTREME, 2669a31d2bb7SMauro Carvalho Chehab }, { 267099e09eacSMauro Carvalho Chehab .subvendor = 0x17de, 267199e09eacSMauro Carvalho Chehab .subdevice = 0x08c1, 267299e09eacSMauro Carvalho Chehab .card = CX88_BOARD_KWORLD_ATSC_120, 26735bd1b663SSteven Toth }, { 26745bd1b663SSteven Toth .subvendor = 0x0070, 26755bd1b663SSteven Toth .subdevice = 0x6900, 26765bd1b663SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR4000, 26775bd1b663SSteven Toth }, { 26785bd1b663SSteven Toth .subvendor = 0x0070, 26795bd1b663SSteven Toth .subdevice = 0x6904, 26805bd1b663SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR4000, 26815bd1b663SSteven Toth }, { 26825bd1b663SSteven Toth .subvendor = 0x0070, 26835bd1b663SSteven Toth .subdevice = 0x6902, 26845bd1b663SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR4000, 26855bd1b663SSteven Toth }, { 26865bd1b663SSteven Toth .subvendor = 0x0070, 26875bd1b663SSteven Toth .subdevice = 0x6905, 26885bd1b663SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR4000LITE, 26895bd1b663SSteven Toth }, { 26905bd1b663SSteven Toth .subvendor = 0x0070, 26915bd1b663SSteven Toth .subdevice = 0x6906, 26925bd1b663SSteven Toth .card = CX88_BOARD_HAUPPAUGE_HVR4000LITE, 2693af832623SIgor M. Liplianin }, { 2694e4aab64cSIgor M. Liplianin .subvendor = 0xd420, 2695e4aab64cSIgor M. Liplianin .subdevice = 0x9022, 2696e4aab64cSIgor M. Liplianin .card = CX88_BOARD_TEVII_S420, 2697e4aab64cSIgor M. Liplianin }, { 2698e4aab64cSIgor M. Liplianin .subvendor = 0xd460, 2699af832623SIgor M. Liplianin .subdevice = 0x9022, 2700af832623SIgor M. Liplianin .card = CX88_BOARD_TEVII_S460, 27014cd7fb87SOleg Roitburd }, { 27020cb73639SIgor M. Liplianin .subvendor = 0xd464, 27030cb73639SIgor M. Liplianin .subdevice = 0x9022, 27040cb73639SIgor M. Liplianin .card = CX88_BOARD_TEVII_S464, 27050cb73639SIgor M. Liplianin }, { 27064cd7fb87SOleg Roitburd .subvendor = 0xA044, 27074cd7fb87SOleg Roitburd .subdevice = 0x2011, 27084cd7fb87SOleg Roitburd .card = CX88_BOARD_OMICOM_SS4_PCI, 2709ee73042cSOleg Roitburd }, { 27104b29631dSIgor M. Liplianin .subvendor = 0x8910, 27114b29631dSIgor M. Liplianin .subdevice = 0x8888, 27124b29631dSIgor M. Liplianin .card = CX88_BOARD_TBS_8910, 27134b29631dSIgor M. Liplianin }, { 2714ee73042cSOleg Roitburd .subvendor = 0x8920, 2715ee73042cSOleg Roitburd .subdevice = 0x8888, 2716ee73042cSOleg Roitburd .card = CX88_BOARD_TBS_8920, 271757f51dbcSOleg Roitburd }, { 2718cd3cde12SIgor M. Liplianin .subvendor = 0xb022, 2719cd3cde12SIgor M. Liplianin .subdevice = 0x3022, 2720cd3cde12SIgor M. Liplianin .card = CX88_BOARD_PROF_6200, 2721cd3cde12SIgor M. Liplianin }, { 272257f51dbcSOleg Roitburd .subvendor = 0xB033, 272357f51dbcSOleg Roitburd .subdevice = 0x3033, 272457f51dbcSOleg Roitburd .card = CX88_BOARD_PROF_7300, 27254b29631dSIgor M. Liplianin }, { 27264b29631dSIgor M. Liplianin .subvendor = 0xb200, 27274b29631dSIgor M. Liplianin .subdevice = 0x4200, 27284b29631dSIgor M. Liplianin .card = CX88_BOARD_SATTRADE_ST4200, 272970101a27SStephan Wienczny }, { 273070101a27SStephan Wienczny .subvendor = 0x153b, 273170101a27SStephan Wienczny .subdevice = 0x1177, 273270101a27SStephan Wienczny .card = CX88_BOARD_TERRATEC_CINERGY_HT_PCI_MKII, 2733501d8cd4SSteven Toth }, { 2734501d8cd4SSteven Toth .subvendor = 0x0070, 2735501d8cd4SSteven Toth .subdevice = 0x9290, 2736501d8cd4SSteven Toth .card = CX88_BOARD_HAUPPAUGE_IRONLY, 27373047a176SMiroslav Sustek }, { 27383047a176SMiroslav Sustek .subvendor = 0x107d, 27393047a176SMiroslav Sustek .subdevice = 0x6654, 27403047a176SMiroslav Sustek .card = CX88_BOARD_WINFAST_DTV1800H, 274114422f9dSMauro Carvalho Chehab }, { 27428eb79c0bSistvan_v@mailbox.hu /* WinFast DTV1800 H with XC4000 tuner */ 27438eb79c0bSistvan_v@mailbox.hu .subvendor = 0x107d, 27448eb79c0bSistvan_v@mailbox.hu .subdevice = 0x6f38, 27458eb79c0bSistvan_v@mailbox.hu .card = CX88_BOARD_WINFAST_DTV1800H_XC4000, 27468eb79c0bSistvan_v@mailbox.hu }, { 2747f271a3afSistvan_v@mailbox.hu .subvendor = 0x107d, 2748f271a3afSistvan_v@mailbox.hu .subdevice = 0x6f42, 2749f271a3afSistvan_v@mailbox.hu .card = CX88_BOARD_WINFAST_DTV2000H_PLUS, 2750f271a3afSistvan_v@mailbox.hu }, { 275114422f9dSMauro Carvalho Chehab /* PVR2000 PAL Model [107d:6630] */ 275214422f9dSMauro Carvalho Chehab .subvendor = 0x107d, 275314422f9dSMauro Carvalho Chehab .subdevice = 0x6630, 275414422f9dSMauro Carvalho Chehab .card = CX88_BOARD_LEADTEK_PVR2000, 275514422f9dSMauro Carvalho Chehab }, { 275614422f9dSMauro Carvalho Chehab /* PVR2000 PAL Model [107d:6638] */ 275714422f9dSMauro Carvalho Chehab .subvendor = 0x107d, 275814422f9dSMauro Carvalho Chehab .subdevice = 0x6638, 275914422f9dSMauro Carvalho Chehab .card = CX88_BOARD_LEADTEK_PVR2000, 276014422f9dSMauro Carvalho Chehab }, { 276114422f9dSMauro Carvalho Chehab /* PVR2000 NTSC Model [107d:6631] */ 276214422f9dSMauro Carvalho Chehab .subvendor = 0x107d, 276314422f9dSMauro Carvalho Chehab .subdevice = 0x6631, 276414422f9dSMauro Carvalho Chehab .card = CX88_BOARD_LEADTEK_PVR2000, 276514422f9dSMauro Carvalho Chehab }, { 276614422f9dSMauro Carvalho Chehab /* PVR2000 NTSC Model [107d:6637] */ 276714422f9dSMauro Carvalho Chehab .subvendor = 0x107d, 276814422f9dSMauro Carvalho Chehab .subdevice = 0x6637, 276914422f9dSMauro Carvalho Chehab .card = CX88_BOARD_LEADTEK_PVR2000, 277014422f9dSMauro Carvalho Chehab }, { 277114422f9dSMauro Carvalho Chehab /* PVR2000 NTSC Model [107d:663d] */ 277214422f9dSMauro Carvalho Chehab .subvendor = 0x107d, 277314422f9dSMauro Carvalho Chehab .subdevice = 0x663d, 277414422f9dSMauro Carvalho Chehab .card = CX88_BOARD_LEADTEK_PVR2000, 277514422f9dSMauro Carvalho Chehab }, { 277614422f9dSMauro Carvalho Chehab /* DV2000 NTSC Model [107d:6621] */ 277714422f9dSMauro Carvalho Chehab .subvendor = 0x107d, 277814422f9dSMauro Carvalho Chehab .subdevice = 0x6621, 277914422f9dSMauro Carvalho Chehab .card = CX88_BOARD_WINFAST_DV2000, 278014422f9dSMauro Carvalho Chehab }, { 278114422f9dSMauro Carvalho Chehab /* TV2000 XP Global [107d:6618] */ 278214422f9dSMauro Carvalho Chehab .subvendor = 0x107d, 278314422f9dSMauro Carvalho Chehab .subdevice = 0x6618, 278414422f9dSMauro Carvalho Chehab .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL, 2785b699c271SIgor M. Liplianin }, { 278684463d5fSIstvan Varga /* TV2000 XP Global [107d:6618] */ 278784463d5fSIstvan Varga .subvendor = 0x107d, 278884463d5fSIstvan Varga .subdevice = 0x6619, 278984463d5fSIstvan Varga .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL, 279084463d5fSIstvan Varga }, { 279184463d5fSIstvan Varga /* WinFast TV2000 XP Global with XC4000 tuner */ 279284463d5fSIstvan Varga .subvendor = 0x107d, 279384463d5fSIstvan Varga .subdevice = 0x6f36, 279484463d5fSIstvan Varga .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F36, 279584463d5fSIstvan Varga }, { 279684463d5fSIstvan Varga /* WinFast TV2000 XP Global with XC4000 tuner and different GPIOs */ 279784463d5fSIstvan Varga .subvendor = 0x107d, 279884463d5fSIstvan Varga .subdevice = 0x6f43, 279984463d5fSIstvan Varga .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F43, 280084463d5fSIstvan Varga }, { 2801b699c271SIgor M. Liplianin .subvendor = 0xb034, 2802b699c271SIgor M. Liplianin .subdevice = 0x3034, 2803b699c271SIgor M. Liplianin .card = CX88_BOARD_PROF_7301, 2804111ac84aSSergey Ivanov }, { 2805111ac84aSSergey Ivanov .subvendor = 0x1822, 2806111ac84aSSergey Ivanov .subdevice = 0x0023, 2807111ac84aSSergey Ivanov .card = CX88_BOARD_TWINHAN_VP1027_DVBS, 28082422a9b3SMauro Carvalho Chehab }, 28091da177e4SLinus Torvalds }; 28101da177e4SLinus Torvalds 28111da177e4SLinus Torvalds /* ----------------------------------------------------------------------- */ 28121da177e4SLinus Torvalds /* some leadtek specific stuff */ 28131da177e4SLinus Torvalds 281469f7e75aSJean Delvare static void leadtek_eeprom(struct cx88_core *core, u8 *eeprom_data) 28151da177e4SLinus Torvalds { 28161da177e4SLinus Torvalds if (eeprom_data[4] != 0x7d || 28171da177e4SLinus Torvalds eeprom_data[5] != 0x10 || 28181da177e4SLinus Torvalds eeprom_data[7] != 0x66) { 281965bc2fe8SMauro Carvalho Chehab pr_warn("Leadtek eeprom invalid.\n"); 28201da177e4SLinus Torvalds return; 28211da177e4SLinus Torvalds } 28221da177e4SLinus Torvalds 282314422f9dSMauro Carvalho Chehab /* Terry Wu <terrywu2009@gmail.com> */ 282414422f9dSMauro Carvalho Chehab switch (eeprom_data[6]) { 282514422f9dSMauro Carvalho Chehab case 0x13: /* SSID 6613 for TV2000 XP Expert NTSC Model */ 282614422f9dSMauro Carvalho Chehab case 0x21: /* SSID 6621 for DV2000 NTSC Model */ 282714422f9dSMauro Carvalho Chehab case 0x31: /* SSID 6631 for PVR2000 NTSC Model */ 282814422f9dSMauro Carvalho Chehab case 0x37: /* SSID 6637 for PVR2000 NTSC Model */ 282914422f9dSMauro Carvalho Chehab case 0x3d: /* SSID 6637 for PVR2000 NTSC Model */ 283014422f9dSMauro Carvalho Chehab core->board.tuner_type = TUNER_PHILIPS_FM1236_MK3; 283114422f9dSMauro Carvalho Chehab break; 283214422f9dSMauro Carvalho Chehab default: 283314422f9dSMauro Carvalho Chehab core->board.tuner_type = TUNER_PHILIPS_FM1216ME_MK3; 283414422f9dSMauro Carvalho Chehab break; 283514422f9dSMauro Carvalho Chehab } 28361da177e4SLinus Torvalds 283765bc2fe8SMauro Carvalho Chehab pr_info("Leadtek Winfast 2000XP Expert config: tuner=%d, eeprom[0]=0x%02x\n", 28380f19e65bSMauro Carvalho Chehab core->board.tuner_type, eeprom_data[0]); 28391da177e4SLinus Torvalds } 28401da177e4SLinus Torvalds 28411da177e4SLinus Torvalds static void hauppauge_eeprom(struct cx88_core *core, u8 *eeprom_data) 28421da177e4SLinus Torvalds { 28431da177e4SLinus Torvalds struct tveeprom tv; 28441da177e4SLinus Torvalds 28450f97a931SMauro Carvalho Chehab tveeprom_hauppauge_analog(&core->i2c_client, &tv, eeprom_data); 28466a59d64cSTrent Piepho core->board.tuner_type = tv.tuner_type; 28470345c387SSteven Toth core->tuner_formats = tv.tuner_formats; 28486a59d64cSTrent Piepho core->board.radio.type = tv.has_radio ? CX88_RADIO : 0; 284948a8a03bSMauro Carvalho Chehab core->model = tv.model; 28501da177e4SLinus Torvalds 28511da177e4SLinus Torvalds /* Make sure we support the board model */ 28523ca0ea98SSteven Toth switch (tv.model) 28533ca0ea98SSteven Toth { 285476dc82abSSteven Toth case 14009: /* WinTV-HVR3000 (Retail, IR, b/panel video, 3.5mm audio in) */ 285576dc82abSSteven Toth case 14019: /* WinTV-HVR3000 (Retail, IR Blaster, b/panel video, 3.5mm audio in) */ 285676dc82abSSteven Toth case 14029: /* WinTV-HVR3000 (Retail, IR, b/panel video, 3.5mm audio in - 880 bridge) */ 285776dc82abSSteven Toth case 14109: /* WinTV-HVR3000 (Retail, IR, b/panel video, 3.5mm audio in - low profile) */ 285876dc82abSSteven Toth case 14129: /* WinTV-HVR3000 (Retail, IR, b/panel video, 3.5mm audio in - 880 bridge - LP) */ 285976dc82abSSteven Toth case 14559: /* WinTV-HVR3000 (OEM, no IR, b/panel video, 3.5mm audio in) */ 2860ad10c930SEric Thomas case 14569: /* WinTV-HVR3000 (OEM, no IR, no back panel video) */ 286176dc82abSSteven Toth case 14659: /* WinTV-HVR3000 (OEM, no IR, b/panel video, RCA audio in - Low profile) */ 286276dc82abSSteven Toth case 14669: /* WinTV-HVR3000 (OEM, no IR, no b/panel video - Low profile) */ 28630345c387SSteven Toth case 28552: /* WinTV-PVR 'Roslyn' (No IR) */ 286442d2b6efSIan Pickworth case 34519: /* WinTV-PCI-FM */ 28655bd1b663SSteven Toth case 69009: 28665bd1b663SSteven Toth /* WinTV-HVR4000 (DVBS/S2/T, Video and IR, back panel inputs) */ 28675bd1b663SSteven Toth case 69100: /* WinTV-HVR4000LITE (DVBS/S2, IR) */ 28685bd1b663SSteven Toth case 69500: /* WinTV-HVR4000LITE (DVBS/S2, No IR) */ 28695bd1b663SSteven Toth case 69559: 28705bd1b663SSteven Toth /* WinTV-HVR4000 (DVBS/S2/T, Video no IR, back panel inputs) */ 28715bd1b663SSteven Toth case 69569: /* WinTV-HVR4000 (DVBS/S2/T, Video no IR) */ 2872759324c3SSteven Toth case 90002: /* Nova-T-PCI (9002) */ 28730fe22865SSteven Toth case 92001: /* Nova-S-Plus (Video and IR) */ 28740fe22865SSteven Toth case 92002: /* Nova-S-Plus (Video and IR) */ 28750fe22865SSteven Toth case 90003: /* Nova-T-PCI (9002 No RF out) */ 2876759324c3SSteven Toth case 90500: /* Nova-T-PCI (oem) */ 2877759324c3SSteven Toth case 90501: /* Nova-T-PCI (oem/IR) */ 28783ca0ea98SSteven Toth case 92000: /* Nova-SE2 (OEM, No Video or IR) */ 2879501d8cd4SSteven Toth case 92900: /* WinTV-IROnly (No analog or digital Video inputs) */ 2880611900c1SSteven Toth case 94009: /* WinTV-HVR1100 (Video and IR Retail) */ 2881611900c1SSteven Toth case 94501: /* WinTV-HVR1100 (Video and IR OEM) */ 2882aa481a65SSteven Toth case 96009: /* WinTV-HVR1300 (PAL Video, MPEG Video and IR RX) */ 2883aa481a65SSteven Toth case 96019: /* WinTV-HVR1300 (PAL Video, MPEG Video and IR RX/TX) */ 2884aa481a65SSteven Toth case 96559: /* WinTV-HVR1300 (PAL Video, MPEG Video no IR) */ 2885aa481a65SSteven Toth case 96569: /* WinTV-HVR1300 () */ 2886aa481a65SSteven Toth case 96659: /* WinTV-HVR1300 () */ 2887611900c1SSteven Toth case 98559: /* WinTV-HVR1100LP (Video no IR, Retail - Low Profile) */ 28881da177e4SLinus Torvalds /* known */ 28891da177e4SLinus Torvalds break; 28904f3ca2f1SDirk Herrendoerfer case CX88_BOARD_SAMSUNG_SMT_7020: 28914f3ca2f1SDirk Herrendoerfer cx_set(MO_GP0_IO, 0x008989FF); 28924f3ca2f1SDirk Herrendoerfer break; 28931da177e4SLinus Torvalds default: 289465bc2fe8SMauro Carvalho Chehab pr_warn("warning: unknown hauppauge model #%d\n", tv.model); 28951da177e4SLinus Torvalds break; 28961da177e4SLinus Torvalds } 28971da177e4SLinus Torvalds 289865bc2fe8SMauro Carvalho Chehab pr_info("hauppauge eeprom: model=%d\n", tv.model); 28991da177e4SLinus Torvalds } 29001da177e4SLinus Torvalds 29011da177e4SLinus Torvalds /* ----------------------------------------------------------------------- */ 29021da177e4SLinus Torvalds /* some GDI (was: Modular Technology) specific stuff */ 29031da177e4SLinus Torvalds 29042e4e98e7Slawrence rust static const struct { 29051da177e4SLinus Torvalds int id; 29061da177e4SLinus Torvalds int fm; 29072e4e98e7Slawrence rust const char *name; 29081da177e4SLinus Torvalds } gdi_tuner[] = { 2909c39ba330SHans Verkuil [0x01] = { .id = UNSET, 29101da177e4SLinus Torvalds .name = "NTSC_M" }, 2911c39ba330SHans Verkuil [0x02] = { .id = UNSET, 29121da177e4SLinus Torvalds .name = "PAL_B" }, 2913c39ba330SHans Verkuil [0x03] = { .id = UNSET, 29141da177e4SLinus Torvalds .name = "PAL_I" }, 2915c39ba330SHans Verkuil [0x04] = { .id = UNSET, 29161da177e4SLinus Torvalds .name = "PAL_D" }, 2917c39ba330SHans Verkuil [0x05] = { .id = UNSET, 29181da177e4SLinus Torvalds .name = "SECAM" }, 29191da177e4SLinus Torvalds 2920c39ba330SHans Verkuil [0x10] = { .id = UNSET, 29211da177e4SLinus Torvalds .fm = 1, 29221da177e4SLinus Torvalds .name = "TEMIC_4049" }, 29231da177e4SLinus Torvalds [0x11] = { .id = TUNER_TEMIC_4136FY5, 29241da177e4SLinus Torvalds .name = "TEMIC_4136" }, 2925c39ba330SHans Verkuil [0x12] = { .id = UNSET, 29261da177e4SLinus Torvalds .name = "TEMIC_4146" }, 29271da177e4SLinus Torvalds 29281da177e4SLinus Torvalds [0x20] = { .id = TUNER_PHILIPS_FQ1216ME, 29291da177e4SLinus Torvalds .fm = 1, 29301da177e4SLinus Torvalds .name = "PHILIPS_FQ1216_MK3" }, 2931c39ba330SHans Verkuil [0x21] = { .id = UNSET, .fm = 1, 29321da177e4SLinus Torvalds .name = "PHILIPS_FQ1236_MK3" }, 2933c39ba330SHans Verkuil [0x22] = { .id = UNSET, 29341da177e4SLinus Torvalds .name = "PHILIPS_FI1236_MK3" }, 2935c39ba330SHans Verkuil [0x23] = { .id = UNSET, 29361da177e4SLinus Torvalds .name = "PHILIPS_FI1216_MK3" }, 29371da177e4SLinus Torvalds }; 29381da177e4SLinus Torvalds 29391da177e4SLinus Torvalds static void gdi_eeprom(struct cx88_core *core, u8 *eeprom_data) 29401da177e4SLinus Torvalds { 29412e4e98e7Slawrence rust const char *name = (eeprom_data[0x0d] < ARRAY_SIZE(gdi_tuner)) 29421da177e4SLinus Torvalds ? gdi_tuner[eeprom_data[0x0d]].name : NULL; 29431da177e4SLinus Torvalds 294465bc2fe8SMauro Carvalho Chehab pr_info("GDI: tuner=%s\n", name ? name : "unknown"); 2945*7b61ba8fSMauro Carvalho Chehab if (name == NULL) 29461da177e4SLinus Torvalds return; 29476a59d64cSTrent Piepho core->board.tuner_type = gdi_tuner[eeprom_data[0x0d]].id; 29486a59d64cSTrent Piepho core->board.radio.type = gdi_tuner[eeprom_data[0x0d]].fm ? 29496a59d64cSTrent Piepho CX88_RADIO : 0; 29501da177e4SLinus Torvalds } 29511da177e4SLinus Torvalds 2952b3fb91d2SChris Pascoe /* ------------------------------------------------------------------- */ 2953b3fb91d2SChris Pascoe /* some Divco specific stuff */ 29540be51b46SMauro Carvalho Chehab static int cx88_dvico_xc2028_callback(struct cx88_core *core, 29550be51b46SMauro Carvalho Chehab int command, int arg) 2956b3fb91d2SChris Pascoe { 2957b3fb91d2SChris Pascoe switch (command) { 2958b3fb91d2SChris Pascoe case XC2028_TUNER_RESET: 2959d7cba043SMichael Krufky switch (core->boardnr) { 2960d7cba043SMichael Krufky case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO: 2961d7cba043SMichael Krufky /* GPIO-4 xc3028 tuner */ 2962d7cba043SMichael Krufky 2963d7cba043SMichael Krufky cx_set(MO_GP0_IO, 0x00001000); 2964d7cba043SMichael Krufky cx_clear(MO_GP0_IO, 0x00000010); 2965d7cba043SMichael Krufky msleep(100); 2966d7cba043SMichael Krufky cx_set(MO_GP0_IO, 0x00000010); 2967d7cba043SMichael Krufky msleep(100); 2968d7cba043SMichael Krufky break; 2969d7cba043SMichael Krufky default: 29708765561fSChris Pascoe cx_write(MO_GP0_IO, 0x101000); 29718765561fSChris Pascoe mdelay(5); 29728765561fSChris Pascoe cx_set(MO_GP0_IO, 0x101010); 2973d7cba043SMichael Krufky } 2974b3fb91d2SChris Pascoe break; 2975b3fb91d2SChris Pascoe default: 2976b3fb91d2SChris Pascoe return -EINVAL; 2977b3fb91d2SChris Pascoe } 2978b3fb91d2SChris Pascoe 2979b3fb91d2SChris Pascoe return 0; 2980b3fb91d2SChris Pascoe } 2981b3fb91d2SChris Pascoe 2982b3fb91d2SChris Pascoe 29831da177e4SLinus Torvalds /* ----------------------------------------------------------------------- */ 29849507901eSMauro Carvalho Chehab /* some Geniatech specific stuff */ 29859507901eSMauro Carvalho Chehab 29860be51b46SMauro Carvalho Chehab static int cx88_xc3028_geniatech_tuner_callback(struct cx88_core *core, 29870be51b46SMauro Carvalho Chehab int command, int mode) 29889507901eSMauro Carvalho Chehab { 29899507901eSMauro Carvalho Chehab switch (command) { 29909507901eSMauro Carvalho Chehab case XC2028_TUNER_RESET: 29919507901eSMauro Carvalho Chehab switch (INPUT(core->input).type) { 29929507901eSMauro Carvalho Chehab case CX88_RADIO: 2993c450e50eSMauro Carvalho Chehab break; 29949507901eSMauro Carvalho Chehab case CX88_VMUX_DVB: 29959507901eSMauro Carvalho Chehab cx_write(MO_GP1_IO, 0x030302); 29969507901eSMauro Carvalho Chehab mdelay(50); 2997c450e50eSMauro Carvalho Chehab break; 29989507901eSMauro Carvalho Chehab default: 29999507901eSMauro Carvalho Chehab cx_write(MO_GP1_IO, 0x030301); 30009507901eSMauro Carvalho Chehab mdelay(50); 3001c450e50eSMauro Carvalho Chehab } 30029507901eSMauro Carvalho Chehab cx_write(MO_GP1_IO, 0x101010); 30039507901eSMauro Carvalho Chehab mdelay(50); 30049507901eSMauro Carvalho Chehab cx_write(MO_GP1_IO, 0x101000); 30059507901eSMauro Carvalho Chehab mdelay(50); 30069507901eSMauro Carvalho Chehab cx_write(MO_GP1_IO, 0x101010); 30079507901eSMauro Carvalho Chehab mdelay(50); 30089507901eSMauro Carvalho Chehab return 0; 30099507901eSMauro Carvalho Chehab } 30109507901eSMauro Carvalho Chehab return -EINVAL; 30119507901eSMauro Carvalho Chehab } 30129507901eSMauro Carvalho Chehab 30133047a176SMiroslav Sustek static int cx88_xc3028_winfast1800h_callback(struct cx88_core *core, 30143047a176SMiroslav Sustek int command, int arg) 30153047a176SMiroslav Sustek { 30163047a176SMiroslav Sustek switch (command) { 30173047a176SMiroslav Sustek case XC2028_TUNER_RESET: 30183047a176SMiroslav Sustek /* GPIO 12 (xc3028 tuner reset) */ 30193047a176SMiroslav Sustek cx_set(MO_GP1_IO, 0x1010); 30203047a176SMiroslav Sustek mdelay(50); 30213047a176SMiroslav Sustek cx_clear(MO_GP1_IO, 0x10); 30224699903eSAlan Cox mdelay(75); 30233047a176SMiroslav Sustek cx_set(MO_GP1_IO, 0x10); 30244699903eSAlan Cox mdelay(75); 30253047a176SMiroslav Sustek return 0; 30263047a176SMiroslav Sustek } 30273047a176SMiroslav Sustek return -EINVAL; 30283047a176SMiroslav Sustek } 30293047a176SMiroslav Sustek 3030f271a3afSistvan_v@mailbox.hu static int cx88_xc4000_winfast2000h_plus_callback(struct cx88_core *core, 3031f271a3afSistvan_v@mailbox.hu int command, int arg) 3032f271a3afSistvan_v@mailbox.hu { 3033f271a3afSistvan_v@mailbox.hu switch (command) { 3034f271a3afSistvan_v@mailbox.hu case XC4000_TUNER_RESET: 3035f271a3afSistvan_v@mailbox.hu /* GPIO 12 (xc4000 tuner reset) */ 3036f271a3afSistvan_v@mailbox.hu cx_set(MO_GP1_IO, 0x1010); 3037f271a3afSistvan_v@mailbox.hu mdelay(50); 3038f271a3afSistvan_v@mailbox.hu cx_clear(MO_GP1_IO, 0x10); 3039f271a3afSistvan_v@mailbox.hu mdelay(75); 3040f271a3afSistvan_v@mailbox.hu cx_set(MO_GP1_IO, 0x10); 3041f271a3afSistvan_v@mailbox.hu mdelay(75); 3042f271a3afSistvan_v@mailbox.hu return 0; 3043f271a3afSistvan_v@mailbox.hu } 3044f271a3afSistvan_v@mailbox.hu return -EINVAL; 3045f271a3afSistvan_v@mailbox.hu } 3046f271a3afSistvan_v@mailbox.hu 30472422a9b3SMauro Carvalho Chehab /* ------------------------------------------------------------------- */ 30482422a9b3SMauro Carvalho Chehab /* some Divco specific stuff */ 30490be51b46SMauro Carvalho Chehab static int cx88_pv_8000gt_callback(struct cx88_core *core, 30500be51b46SMauro Carvalho Chehab int command, int arg) 30512422a9b3SMauro Carvalho Chehab { 30522422a9b3SMauro Carvalho Chehab switch (command) { 30532422a9b3SMauro Carvalho Chehab case XC2028_TUNER_RESET: 30542422a9b3SMauro Carvalho Chehab cx_write(MO_GP2_IO, 0xcf7); 30552422a9b3SMauro Carvalho Chehab mdelay(50); 30562422a9b3SMauro Carvalho Chehab cx_write(MO_GP2_IO, 0xef5); 30572422a9b3SMauro Carvalho Chehab mdelay(50); 30582422a9b3SMauro Carvalho Chehab cx_write(MO_GP2_IO, 0xcf7); 30592422a9b3SMauro Carvalho Chehab break; 30602422a9b3SMauro Carvalho Chehab default: 30612422a9b3SMauro Carvalho Chehab return -EINVAL; 30622422a9b3SMauro Carvalho Chehab } 30632422a9b3SMauro Carvalho Chehab 30642422a9b3SMauro Carvalho Chehab return 0; 30652422a9b3SMauro Carvalho Chehab } 30662422a9b3SMauro Carvalho Chehab 30679507901eSMauro Carvalho Chehab /* ----------------------------------------------------------------------- */ 3068780dfef3SChris Pascoe /* some DViCO specific stuff */ 3069780dfef3SChris Pascoe 3070780dfef3SChris Pascoe static void dvico_fusionhdtv_hybrid_init(struct cx88_core *core) 3071780dfef3SChris Pascoe { 3072780dfef3SChris Pascoe struct i2c_msg msg = { .addr = 0x45, .flags = 0 }; 3073780dfef3SChris Pascoe int i, err; 307469b27e3dSChris Pascoe static u8 init_bufs[13][5] = { 3075780dfef3SChris Pascoe { 0x10, 0x00, 0x20, 0x01, 0x03 }, 3076780dfef3SChris Pascoe { 0x10, 0x10, 0x01, 0x00, 0x21 }, 3077780dfef3SChris Pascoe { 0x10, 0x10, 0x10, 0x00, 0xCA }, 3078780dfef3SChris Pascoe { 0x10, 0x10, 0x12, 0x00, 0x08 }, 3079780dfef3SChris Pascoe { 0x10, 0x10, 0x13, 0x00, 0x0A }, 3080780dfef3SChris Pascoe { 0x10, 0x10, 0x16, 0x01, 0xC0 }, 3081780dfef3SChris Pascoe { 0x10, 0x10, 0x22, 0x01, 0x3D }, 3082780dfef3SChris Pascoe { 0x10, 0x10, 0x73, 0x01, 0x2E }, 3083780dfef3SChris Pascoe { 0x10, 0x10, 0x72, 0x00, 0xC5 }, 3084780dfef3SChris Pascoe { 0x10, 0x10, 0x71, 0x01, 0x97 }, 3085780dfef3SChris Pascoe { 0x10, 0x10, 0x70, 0x00, 0x0F }, 3086780dfef3SChris Pascoe { 0x10, 0x10, 0xB0, 0x00, 0x01 }, 3087780dfef3SChris Pascoe { 0x03, 0x0C }, 3088780dfef3SChris Pascoe }; 3089780dfef3SChris Pascoe 30905b9c4e6dSMauro Carvalho Chehab for (i = 0; i < ARRAY_SIZE(init_bufs); i++) { 3091780dfef3SChris Pascoe msg.buf = init_bufs[i]; 3092780dfef3SChris Pascoe msg.len = (i != 12 ? 5 : 2); 3093780dfef3SChris Pascoe err = i2c_transfer(&core->i2c_adap, &msg, 1); 3094780dfef3SChris Pascoe if (err != 1) { 309565bc2fe8SMauro Carvalho Chehab pr_warn("dvico_fusionhdtv_hybrid_init buf %d failed (err = %d)!\n", 3096e318e584SMauro Carvalho Chehab i, err); 3097780dfef3SChris Pascoe return; 3098780dfef3SChris Pascoe } 3099780dfef3SChris Pascoe } 3100780dfef3SChris Pascoe } 3101780dfef3SChris Pascoe 31020be51b46SMauro Carvalho Chehab static int cx88_xc2028_tuner_callback(struct cx88_core *core, 31030be51b46SMauro Carvalho Chehab int command, int arg) 3104c2cb8fccSMauro Carvalho Chehab { 31059507901eSMauro Carvalho Chehab /* Board-specific callbacks */ 31069507901eSMauro Carvalho Chehab switch (core->boardnr) { 31079507901eSMauro Carvalho Chehab case CX88_BOARD_POWERCOLOR_REAL_ANGEL: 31089507901eSMauro Carvalho Chehab case CX88_BOARD_GENIATECH_X8000_MT: 310999e09eacSMauro Carvalho Chehab case CX88_BOARD_KWORLD_ATSC_120: 31100be51b46SMauro Carvalho Chehab return cx88_xc3028_geniatech_tuner_callback(core, 31110be51b46SMauro Carvalho Chehab command, arg); 31122422a9b3SMauro Carvalho Chehab case CX88_BOARD_PROLINK_PV_8000GT: 3113a31d2bb7SMauro Carvalho Chehab case CX88_BOARD_PROLINK_PV_GLOBAL_XTREME: 31140be51b46SMauro Carvalho Chehab return cx88_pv_8000gt_callback(core, command, arg); 3115b3fb91d2SChris Pascoe case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO: 3116d7cba043SMichael Krufky case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO: 31170be51b46SMauro Carvalho Chehab return cx88_dvico_xc2028_callback(core, command, arg); 311814422f9dSMauro Carvalho Chehab case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL: 31193047a176SMiroslav Sustek case CX88_BOARD_WINFAST_DTV1800H: 31203047a176SMiroslav Sustek return cx88_xc3028_winfast1800h_callback(core, command, arg); 31219507901eSMauro Carvalho Chehab } 31229507901eSMauro Carvalho Chehab 3123c2cb8fccSMauro Carvalho Chehab switch (command) { 3124c2cb8fccSMauro Carvalho Chehab case XC2028_TUNER_RESET: 3125c2cb8fccSMauro Carvalho Chehab switch (INPUT(core->input).type) { 3126c2cb8fccSMauro Carvalho Chehab case CX88_RADIO: 312702615ed5SMauro Carvalho Chehab dprintk(1, "setting GPIO to radio!\n"); 3128c2cb8fccSMauro Carvalho Chehab cx_write(MO_GP0_IO, 0x4ff); 3129c2cb8fccSMauro Carvalho Chehab mdelay(250); 3130c2cb8fccSMauro Carvalho Chehab cx_write(MO_GP2_IO, 0xff); 3131c2cb8fccSMauro Carvalho Chehab mdelay(250); 3132c450e50eSMauro Carvalho Chehab break; 3133c2cb8fccSMauro Carvalho Chehab case CX88_VMUX_DVB: /* Digital TV*/ 3134c2cb8fccSMauro Carvalho Chehab default: /* Analog TV */ 313502615ed5SMauro Carvalho Chehab dprintk(1, "setting GPIO to TV!\n"); 3136c450e50eSMauro Carvalho Chehab break; 3137c450e50eSMauro Carvalho Chehab } 3138c2cb8fccSMauro Carvalho Chehab cx_write(MO_GP1_IO, 0x101010); 3139c2cb8fccSMauro Carvalho Chehab mdelay(250); 3140c2cb8fccSMauro Carvalho Chehab cx_write(MO_GP1_IO, 0x101000); 3141c2cb8fccSMauro Carvalho Chehab mdelay(250); 3142c2cb8fccSMauro Carvalho Chehab cx_write(MO_GP1_IO, 0x101010); 3143c2cb8fccSMauro Carvalho Chehab mdelay(250); 3144c2cb8fccSMauro Carvalho Chehab return 0; 3145c2cb8fccSMauro Carvalho Chehab } 3146c2cb8fccSMauro Carvalho Chehab return -EINVAL; 3147c2cb8fccSMauro Carvalho Chehab } 3148c2cb8fccSMauro Carvalho Chehab 3149c21973e8Sistvan_v@mailbox.hu static int cx88_xc4000_tuner_callback(struct cx88_core *core, 3150c21973e8Sistvan_v@mailbox.hu int command, int arg) 3151c21973e8Sistvan_v@mailbox.hu { 3152c21973e8Sistvan_v@mailbox.hu /* Board-specific callbacks */ 3153c21973e8Sistvan_v@mailbox.hu switch (core->boardnr) { 31548eb79c0bSistvan_v@mailbox.hu case CX88_BOARD_WINFAST_DTV1800H_XC4000: 3155f271a3afSistvan_v@mailbox.hu case CX88_BOARD_WINFAST_DTV2000H_PLUS: 315684463d5fSIstvan Varga case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F36: 315784463d5fSIstvan Varga case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F43: 3158f271a3afSistvan_v@mailbox.hu return cx88_xc4000_winfast2000h_plus_callback(core, 3159f271a3afSistvan_v@mailbox.hu command, arg); 3160c21973e8Sistvan_v@mailbox.hu } 3161c21973e8Sistvan_v@mailbox.hu return -EINVAL; 3162c21973e8Sistvan_v@mailbox.hu } 3163c21973e8Sistvan_v@mailbox.hu 3164780dfef3SChris Pascoe /* ----------------------------------------------------------------------- */ 316560464da8SSteven Toth /* Tuner callback function. Currently only needed for the Pinnacle * 316660464da8SSteven Toth * PCTV HD 800i with an xc5000 sillicon tuner. This is used for both * 316760464da8SSteven Toth * analog tuner attach (tuner-core.c) and dvb tuner attach (cx88-dvb.c) */ 316860464da8SSteven Toth 31690be51b46SMauro Carvalho Chehab static int cx88_xc5000_tuner_callback(struct cx88_core *core, 31700be51b46SMauro Carvalho Chehab int command, int arg) 317160464da8SSteven Toth { 317260464da8SSteven Toth switch (core->boardnr) { 317360464da8SSteven Toth case CX88_BOARD_PINNACLE_PCTV_HD_800i: 317460464da8SSteven Toth if (command == 0) { /* This is the reset command from xc5000 */ 3175b8d91986SDevin Heitmueller 3176b8d91986SDevin Heitmueller /* djh - According to the engineer at PCTV Systems, 3177b8d91986SDevin Heitmueller the xc5000 reset pin is supposed to be on GPIO12. 3178b8d91986SDevin Heitmueller However, despite three nights of effort, pulling 3179b8d91986SDevin Heitmueller that GPIO low didn't reset the xc5000. While 3180b8d91986SDevin Heitmueller pulling MO_SRST_IO low does reset the xc5000, this 3181b8d91986SDevin Heitmueller also resets in the s5h1409 being reset as well. 3182b8d91986SDevin Heitmueller This causes tuning to always fail since the internal 3183b8d91986SDevin Heitmueller state of the s5h1409 does not match the driver's 3184b8d91986SDevin Heitmueller state. Given that the only two conditions in which 3185b8d91986SDevin Heitmueller the driver performs a reset is during firmware load 3186b8d91986SDevin Heitmueller and powering down the chip, I am taking out the 3187b8d91986SDevin Heitmueller reset. We know that the chip is being reset 3188b8d91986SDevin Heitmueller when the cx88 comes online, and not being able to 3189b8d91986SDevin Heitmueller do power management for this board is worse than 3190b8d91986SDevin Heitmueller not having any tuning at all. */ 319160464da8SSteven Toth return 0; 3192c2cb8fccSMauro Carvalho Chehab } else { 319302615ed5SMauro Carvalho Chehab dprintk(1, "xc5000: unknown tuner callback command.\n"); 319460464da8SSteven Toth return -EINVAL; 319560464da8SSteven Toth } 319660464da8SSteven Toth break; 31971117d6baSSteven Toth case CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD: 31981117d6baSSteven Toth if (command == 0) { /* This is the reset command from xc5000 */ 31991117d6baSSteven Toth cx_clear(MO_GP0_IO, 0x00000010); 32001117d6baSSteven Toth msleep(10); 32011117d6baSSteven Toth cx_set(MO_GP0_IO, 0x00000010); 32021117d6baSSteven Toth return 0; 32031117d6baSSteven Toth } else { 320402615ed5SMauro Carvalho Chehab dprintk(1, "xc5000: unknown tuner callback command.\n"); 32051117d6baSSteven Toth return -EINVAL; 32061117d6baSSteven Toth } 32071117d6baSSteven Toth break; 320860464da8SSteven Toth } 320960464da8SSteven Toth return 0; /* Should never be here */ 321060464da8SSteven Toth } 3211c2cb8fccSMauro Carvalho Chehab 3212d7cba043SMichael Krufky int cx88_tuner_callback(void *priv, int component, int command, int arg) 3213c2cb8fccSMauro Carvalho Chehab { 3214c2cb8fccSMauro Carvalho Chehab struct i2c_algo_bit_data *i2c_algo = priv; 32150be51b46SMauro Carvalho Chehab struct cx88_core *core; 32160be51b46SMauro Carvalho Chehab 32170be51b46SMauro Carvalho Chehab if (!i2c_algo) { 321865bc2fe8SMauro Carvalho Chehab pr_err("Error - i2c private data undefined.\n"); 32190be51b46SMauro Carvalho Chehab return -EINVAL; 32200be51b46SMauro Carvalho Chehab } 32210be51b46SMauro Carvalho Chehab 32220be51b46SMauro Carvalho Chehab core = i2c_algo->data; 32230be51b46SMauro Carvalho Chehab 32240be51b46SMauro Carvalho Chehab if (!core) { 322565bc2fe8SMauro Carvalho Chehab pr_err("Error - device struct undefined.\n"); 32260be51b46SMauro Carvalho Chehab return -EINVAL; 32270be51b46SMauro Carvalho Chehab } 3228c2cb8fccSMauro Carvalho Chehab 3229d7cba043SMichael Krufky if (component != DVB_FRONTEND_COMPONENT_TUNER) 3230d7cba043SMichael Krufky return -EINVAL; 3231d7cba043SMichael Krufky 3232c2cb8fccSMauro Carvalho Chehab switch (core->board.tuner_type) { 3233c2cb8fccSMauro Carvalho Chehab case TUNER_XC2028: 323402615ed5SMauro Carvalho Chehab dprintk(1, "Calling XC2028/3028 callback\n"); 32350be51b46SMauro Carvalho Chehab return cx88_xc2028_tuner_callback(core, command, arg); 3236c21973e8Sistvan_v@mailbox.hu case TUNER_XC4000: 323702615ed5SMauro Carvalho Chehab dprintk(1, "Calling XC4000 callback\n"); 3238c21973e8Sistvan_v@mailbox.hu return cx88_xc4000_tuner_callback(core, command, arg); 3239c2cb8fccSMauro Carvalho Chehab case TUNER_XC5000: 324002615ed5SMauro Carvalho Chehab dprintk(1, "Calling XC5000 callback\n"); 32410be51b46SMauro Carvalho Chehab return cx88_xc5000_tuner_callback(core, command, arg); 3242c2cb8fccSMauro Carvalho Chehab } 324365bc2fe8SMauro Carvalho Chehab pr_err("Error: Calling callback for tuner %d\n", 32440f19e65bSMauro Carvalho Chehab core->board.tuner_type); 3245c2cb8fccSMauro Carvalho Chehab return -EINVAL; 3246c2cb8fccSMauro Carvalho Chehab } 324760464da8SSteven Toth EXPORT_SYMBOL(cx88_tuner_callback); 324860464da8SSteven Toth 324960464da8SSteven Toth /* ----------------------------------------------------------------------- */ 32501da177e4SLinus Torvalds 3251bbc83597STrent Piepho static void cx88_card_list(struct cx88_core *core, struct pci_dev *pci) 32521da177e4SLinus Torvalds { 32531da177e4SLinus Torvalds int i; 32541da177e4SLinus Torvalds 32551da177e4SLinus Torvalds if (0 == pci->subsystem_vendor && 32561da177e4SLinus Torvalds 0 == pci->subsystem_device) { 325765bc2fe8SMauro Carvalho Chehab pr_err("Your board has no valid PCI Subsystem ID and thus can't\n"); 325865bc2fe8SMauro Carvalho Chehab pr_err("be autodetected. Please pass card=<n> insmod option to\n"); 325965bc2fe8SMauro Carvalho Chehab pr_err("workaround that. Redirect complaints to the vendor of\n"); 326065bc2fe8SMauro Carvalho Chehab pr_err("the TV card\n"); 32611da177e4SLinus Torvalds } else { 326265bc2fe8SMauro Carvalho Chehab pr_err("Your board isn't known (yet) to the driver. You can\n"); 326365bc2fe8SMauro Carvalho Chehab pr_err("try to pick one of the existing card configs via\n"); 326465bc2fe8SMauro Carvalho Chehab pr_err("card=<n> insmod option. Updating to the latest\n"); 326565bc2fe8SMauro Carvalho Chehab pr_err("version might help as well.\n"); 32661da177e4SLinus Torvalds } 326765bc2fe8SMauro Carvalho Chehab pr_err("Here is a list of valid choices for the card=<n> insmod option:\n"); 3268bbc83597STrent Piepho for (i = 0; i < ARRAY_SIZE(cx88_boards); i++) 326965bc2fe8SMauro Carvalho Chehab pr_err(" card=%d -> %s\n", i, cx88_boards[i].name); 32701da177e4SLinus Torvalds } 32711da177e4SLinus Torvalds 3272bbc83597STrent Piepho static void cx88_card_setup_pre_i2c(struct cx88_core *core) 3273aa481a65SSteven Toth { 32746a59d64cSTrent Piepho switch (core->boardnr) { 3275aa481a65SSteven Toth case CX88_BOARD_HAUPPAUGE_HVR1300: 32762491fbb7SSteven Toth /* 32772491fbb7SSteven Toth * Bring the 702 demod up before i2c scanning/attach or devices are hidden 32782491fbb7SSteven Toth * We leave here with the 702 on the bus 32792491fbb7SSteven Toth * 32802491fbb7SSteven Toth * "reset the IR receiver on GPIO[3]" 32812491fbb7SSteven Toth * Reported by Mike Crash <mike AT mikecrash.com> 32822491fbb7SSteven Toth */ 32832491fbb7SSteven Toth cx_write(MO_GP0_IO, 0x0000ef88); 3284aa481a65SSteven Toth udelay(1000); 32852491fbb7SSteven Toth cx_clear(MO_GP0_IO, 0x00000088); 3286aa481a65SSteven Toth udelay(50); 32872491fbb7SSteven Toth cx_set(MO_GP0_IO, 0x00000088); /* 702 out of reset */ 3288aa481a65SSteven Toth udelay(1000); 3289aa481a65SSteven Toth break; 32902422a9b3SMauro Carvalho Chehab 3291a31d2bb7SMauro Carvalho Chehab case CX88_BOARD_PROLINK_PV_GLOBAL_XTREME: 32922422a9b3SMauro Carvalho Chehab case CX88_BOARD_PROLINK_PV_8000GT: 32932422a9b3SMauro Carvalho Chehab cx_write(MO_GP2_IO, 0xcf7); 32942422a9b3SMauro Carvalho Chehab mdelay(50); 32952422a9b3SMauro Carvalho Chehab cx_write(MO_GP2_IO, 0xef5); 32962422a9b3SMauro Carvalho Chehab mdelay(50); 32972422a9b3SMauro Carvalho Chehab cx_write(MO_GP2_IO, 0xcf7); 32982422a9b3SMauro Carvalho Chehab msleep(10); 32992422a9b3SMauro Carvalho Chehab break; 33002422a9b3SMauro Carvalho Chehab 33011117d6baSSteven Toth case CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD: 33021117d6baSSteven Toth /* Enable the xc5000 tuner */ 33031117d6baSSteven Toth cx_set(MO_GP0_IO, 0x00001010); 33041117d6baSSteven Toth break; 33052491fbb7SSteven Toth 330627b93d8aSMiroslav Slugen case CX88_BOARD_WINFAST_DTV2000H_J: 33072491fbb7SSteven Toth case CX88_BOARD_HAUPPAUGE_HVR3000: 33085bd1b663SSteven Toth case CX88_BOARD_HAUPPAUGE_HVR4000: 33092491fbb7SSteven Toth /* Init GPIO */ 33102491fbb7SSteven Toth cx_write(MO_GP0_IO, core->board.input[0].gpio0); 33115bd1b663SSteven Toth udelay(1000); 33122f3af9e6SDarron Broad cx_clear(MO_GP0_IO, 0x00000080); 33132f3af9e6SDarron Broad udelay(50); 33142f3af9e6SDarron Broad cx_set(MO_GP0_IO, 0x00000080); /* 702 out of reset */ 33152f3af9e6SDarron Broad udelay(1000); 33162491fbb7SSteven Toth break; 33173047a176SMiroslav Sustek 331814422f9dSMauro Carvalho Chehab case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL: 33193047a176SMiroslav Sustek case CX88_BOARD_WINFAST_DTV1800H: 332079a5b9a2Sistvan_v@mailbox.hu cx88_xc3028_winfast1800h_callback(core, XC2028_TUNER_RESET, 0); 33213047a176SMiroslav Sustek break; 3322111ac84aSSergey Ivanov 33238eb79c0bSistvan_v@mailbox.hu case CX88_BOARD_WINFAST_DTV1800H_XC4000: 3324f271a3afSistvan_v@mailbox.hu case CX88_BOARD_WINFAST_DTV2000H_PLUS: 332584463d5fSIstvan Varga case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F36: 332684463d5fSIstvan Varga case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F43: 3327f271a3afSistvan_v@mailbox.hu cx88_xc4000_winfast2000h_plus_callback(core, 3328f271a3afSistvan_v@mailbox.hu XC4000_TUNER_RESET, 0); 3329f271a3afSistvan_v@mailbox.hu break; 3330f271a3afSistvan_v@mailbox.hu 3331111ac84aSSergey Ivanov case CX88_BOARD_TWINHAN_VP1027_DVBS: 3332111ac84aSSergey Ivanov cx_write(MO_GP0_IO, 0x00003230); 3333111ac84aSSergey Ivanov cx_write(MO_GP0_IO, 0x00003210); 3334111ac84aSSergey Ivanov msleep(1); 3335111ac84aSSergey Ivanov cx_write(MO_GP0_IO, 0x00001230); 3336111ac84aSSergey Ivanov break; 3337aa481a65SSteven Toth } 3338aa481a65SSteven Toth } 3339aa481a65SSteven Toth 334099e09eacSMauro Carvalho Chehab /* 334199e09eacSMauro Carvalho Chehab * Sets board-dependent xc3028 configuration 334299e09eacSMauro Carvalho Chehab */ 334399e09eacSMauro Carvalho Chehab void cx88_setup_xc3028(struct cx88_core *core, struct xc2028_ctrl *ctl) 334499e09eacSMauro Carvalho Chehab { 334599e09eacSMauro Carvalho Chehab memset(ctl, 0, sizeof(*ctl)); 334699e09eacSMauro Carvalho Chehab 334799e09eacSMauro Carvalho Chehab ctl->fname = XC2028_DEFAULT_FIRMWARE; 334899e09eacSMauro Carvalho Chehab ctl->max_len = 64; 334999e09eacSMauro Carvalho Chehab 335099e09eacSMauro Carvalho Chehab switch (core->boardnr) { 335199e09eacSMauro Carvalho Chehab case CX88_BOARD_POWERCOLOR_REAL_ANGEL: 3352a9606ce6SDaniel Gimpelevich /* Now works with firmware version 2.7 */ 3353a9606ce6SDaniel Gimpelevich if (core->i2c_algo.udelay < 16) 3354a9606ce6SDaniel Gimpelevich core->i2c_algo.udelay = 16; 335599e09eacSMauro Carvalho Chehab break; 335699e09eacSMauro Carvalho Chehab case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO: 33573047a176SMiroslav Sustek case CX88_BOARD_WINFAST_DTV1800H: 335819c309e3STim Farrington ctl->demod = XC3028_FE_ZARLINK456; 335999e09eacSMauro Carvalho Chehab break; 336099e09eacSMauro Carvalho Chehab case CX88_BOARD_KWORLD_ATSC_120: 336199e09eacSMauro Carvalho Chehab case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO: 336299e09eacSMauro Carvalho Chehab ctl->demod = XC3028_FE_OREN538; 336399e09eacSMauro Carvalho Chehab break; 336493b99923SDevin Heitmueller case CX88_BOARD_GENIATECH_X8000_MT: 336593b99923SDevin Heitmueller /* FIXME: For this board, the xc3028 never recovers after being 336693b99923SDevin Heitmueller powered down (the reset GPIO probably is not set properly). 336793b99923SDevin Heitmueller We don't have access to the hardware so we cannot determine 336893b99923SDevin Heitmueller which GPIO is used for xc3028, so just disable power xc3028 336993b99923SDevin Heitmueller power management for now */ 337093b99923SDevin Heitmueller ctl->disable_power_mgmt = 1; 337193b99923SDevin Heitmueller break; 337214422f9dSMauro Carvalho Chehab case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL: 3373a31d2bb7SMauro Carvalho Chehab case CX88_BOARD_PROLINK_PV_GLOBAL_XTREME: 337499e09eacSMauro Carvalho Chehab case CX88_BOARD_PROLINK_PV_8000GT: 337599e09eacSMauro Carvalho Chehab /* 3376a31d2bb7SMauro Carvalho Chehab * Those boards uses non-MTS firmware 337799e09eacSMauro Carvalho Chehab */ 337899e09eacSMauro Carvalho Chehab break; 33793f6014fcSStéphane Voltz case CX88_BOARD_PINNACLE_HYBRID_PCTV: 338070101a27SStephan Wienczny case CX88_BOARD_TERRATEC_CINERGY_HT_PCI_MKII: 33813f6014fcSStéphane Voltz ctl->demod = XC3028_FE_ZARLINK456; 33823f6014fcSStéphane Voltz ctl->mts = 1; 33833f6014fcSStéphane Voltz break; 338499e09eacSMauro Carvalho Chehab default: 338599e09eacSMauro Carvalho Chehab ctl->demod = XC3028_FE_OREN538; 338699e09eacSMauro Carvalho Chehab ctl->mts = 1; 338799e09eacSMauro Carvalho Chehab } 338899e09eacSMauro Carvalho Chehab } 338999e09eacSMauro Carvalho Chehab EXPORT_SYMBOL_GPL(cx88_setup_xc3028); 339099e09eacSMauro Carvalho Chehab 3391bbc83597STrent Piepho static void cx88_card_setup(struct cx88_core *core) 33921da177e4SLinus Torvalds { 33933ca0ea98SSteven Toth static u8 eeprom[256]; 33944bf1226aSMauro Carvalho Chehab struct tuner_setup tun_setup; 3395ad020dc2SMauro Carvalho Chehab unsigned int mode_mask = T_RADIO | T_ANALOG_TV; 33964bf1226aSMauro Carvalho Chehab 33974bf1226aSMauro Carvalho Chehab memset(&tun_setup, 0, sizeof(tun_setup)); 33981da177e4SLinus Torvalds 3399*7b61ba8fSMauro Carvalho Chehab if (core->i2c_rc == 0) { 34001da177e4SLinus Torvalds core->i2c_client.addr = 0xa0 >> 1; 34011da177e4SLinus Torvalds tveeprom_read(&core->i2c_client, eeprom, sizeof(eeprom)); 34021da177e4SLinus Torvalds } 34031da177e4SLinus Torvalds 34046a59d64cSTrent Piepho switch (core->boardnr) { 34051da177e4SLinus Torvalds case CX88_BOARD_HAUPPAUGE: 34061da177e4SLinus Torvalds case CX88_BOARD_HAUPPAUGE_ROSLYN: 3407*7b61ba8fSMauro Carvalho Chehab if (core->i2c_rc == 0) 34081da177e4SLinus Torvalds hauppauge_eeprom(core, eeprom+8); 34091da177e4SLinus Torvalds break; 34101da177e4SLinus Torvalds case CX88_BOARD_GDI: 3411*7b61ba8fSMauro Carvalho Chehab if (core->i2c_rc == 0) 34121da177e4SLinus Torvalds gdi_eeprom(core, eeprom); 34131da177e4SLinus Torvalds break; 341414422f9dSMauro Carvalho Chehab case CX88_BOARD_LEADTEK_PVR2000: 341514422f9dSMauro Carvalho Chehab case CX88_BOARD_WINFAST_DV2000: 34161da177e4SLinus Torvalds case CX88_BOARD_WINFAST2000XP_EXPERT: 3417*7b61ba8fSMauro Carvalho Chehab if (core->i2c_rc == 0) 34181da177e4SLinus Torvalds leadtek_eeprom(core, eeprom); 34191da177e4SLinus Torvalds break; 34200fa14aa6SSteven Toth case CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1: 34210fa14aa6SSteven Toth case CX88_BOARD_HAUPPAUGE_NOVASE2_S1: 34221da177e4SLinus Torvalds case CX88_BOARD_HAUPPAUGE_DVB_T1: 3423611900c1SSteven Toth case CX88_BOARD_HAUPPAUGE_HVR1100: 3424611900c1SSteven Toth case CX88_BOARD_HAUPPAUGE_HVR1100LP: 3425ad10c930SEric Thomas case CX88_BOARD_HAUPPAUGE_HVR3000: 3426aa481a65SSteven Toth case CX88_BOARD_HAUPPAUGE_HVR1300: 34275bd1b663SSteven Toth case CX88_BOARD_HAUPPAUGE_HVR4000: 34285bd1b663SSteven Toth case CX88_BOARD_HAUPPAUGE_HVR4000LITE: 3429501d8cd4SSteven Toth case CX88_BOARD_HAUPPAUGE_IRONLY: 3430*7b61ba8fSMauro Carvalho Chehab if (core->i2c_rc == 0) 34313ca0ea98SSteven Toth hauppauge_eeprom(core, eeprom); 34321da177e4SLinus Torvalds break; 34330e0351e3SVadim Catana case CX88_BOARD_KWORLD_DVBS_100: 34340e0351e3SVadim Catana cx_write(MO_GP0_IO, 0x000007f8); 34350e0351e3SVadim Catana cx_write(MO_GP1_IO, 0x00000001); 34360e0351e3SVadim Catana break; 34378765561fSChris Pascoe case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO: 34388765561fSChris Pascoe /* GPIO0:0 is hooked to demod reset */ 34398765561fSChris Pascoe /* GPIO0:4 is hooked to xc3028 reset */ 34408765561fSChris Pascoe cx_write(MO_GP0_IO, 0x00111100); 34418765561fSChris Pascoe msleep(1); 34428765561fSChris Pascoe cx_write(MO_GP0_IO, 0x00111111); 34438765561fSChris Pascoe break; 3444d536e9c4SChris Pascoe case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL: 3445d536e9c4SChris Pascoe /* GPIO0:6 is hooked to FX2 reset pin */ 3446d536e9c4SChris Pascoe cx_set(MO_GP0_IO, 0x00004040); 3447d536e9c4SChris Pascoe cx_clear(MO_GP0_IO, 0x00000040); 3448d536e9c4SChris Pascoe msleep(1000); 3449d536e9c4SChris Pascoe cx_set(MO_GP0_IO, 0x00004040); 3450d536e9c4SChris Pascoe /* FALLTHROUGH */ 34511da177e4SLinus Torvalds case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1: 34521da177e4SLinus Torvalds case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS: 3453780dfef3SChris Pascoe case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID: 34541da177e4SLinus Torvalds /* GPIO0:0 is hooked to mt352 reset pin */ 34551da177e4SLinus Torvalds cx_set(MO_GP0_IO, 0x00000101); 34561da177e4SLinus Torvalds cx_clear(MO_GP0_IO, 0x00000001); 34571da177e4SLinus Torvalds msleep(1); 34581da177e4SLinus Torvalds cx_set(MO_GP0_IO, 0x00000101); 3459780dfef3SChris Pascoe if (0 == core->i2c_rc && 34606a59d64cSTrent Piepho core->boardnr == CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID) 3461780dfef3SChris Pascoe dvico_fusionhdtv_hybrid_init(core); 34621da177e4SLinus Torvalds break; 34631da177e4SLinus Torvalds case CX88_BOARD_KWORLD_DVB_T: 34641da177e4SLinus Torvalds case CX88_BOARD_DNTV_LIVE_DVB_T: 34651da177e4SLinus Torvalds cx_set(MO_GP0_IO, 0x00000707); 34661da177e4SLinus Torvalds cx_set(MO_GP2_IO, 0x00000101); 34671da177e4SLinus Torvalds cx_clear(MO_GP2_IO, 0x00000001); 34681da177e4SLinus Torvalds msleep(1); 34691da177e4SLinus Torvalds cx_clear(MO_GP0_IO, 0x00000007); 34701da177e4SLinus Torvalds cx_set(MO_GP2_IO, 0x00000101); 34711da177e4SLinus Torvalds break; 3472fc40b261SChris Pascoe case CX88_BOARD_DNTV_LIVE_DVB_T_PRO: 3473fc40b261SChris Pascoe cx_write(MO_GP0_IO, 0x00080808); 3474fc40b261SChris Pascoe break; 3475e976f937SKirk Lapray case CX88_BOARD_ATI_HDTVWONDER: 3476*7b61ba8fSMauro Carvalho Chehab if (core->i2c_rc == 0) { 3477e976f937SKirk Lapray /* enable tuner */ 3478e976f937SKirk Lapray int i; 34795b9c4e6dSMauro Carvalho Chehab static const u8 buffer[][2] = { 34805b9c4e6dSMauro Carvalho Chehab {0x10, 0x12}, 34815b9c4e6dSMauro Carvalho Chehab {0x13, 0x04}, 34825b9c4e6dSMauro Carvalho Chehab {0x16, 0x00}, 34835b9c4e6dSMauro Carvalho Chehab {0x14, 0x04}, 34845b9c4e6dSMauro Carvalho Chehab {0x17, 0x00} 34855b9c4e6dSMauro Carvalho Chehab }; 3486e976f937SKirk Lapray core->i2c_client.addr = 0x0a; 3487e976f937SKirk Lapray 34885b9c4e6dSMauro Carvalho Chehab for (i = 0; i < ARRAY_SIZE(buffer); i++) 34895b9c4e6dSMauro Carvalho Chehab if (2 != i2c_master_send(&core->i2c_client, 34905b9c4e6dSMauro Carvalho Chehab buffer[i], 2)) 349165bc2fe8SMauro Carvalho Chehab pr_warn("Unable to enable tuner(%i).\n", 3492e318e584SMauro Carvalho Chehab i); 3493e976f937SKirk Lapray } 3494e976f937SKirk Lapray break; 349555c88610SMauro Carvalho Chehab case CX88_BOARD_MSI_TVANYWHERE_MASTER: 349655c88610SMauro Carvalho Chehab { 349755c88610SMauro Carvalho Chehab struct v4l2_priv_tun_config tea5767_cfg; 349855c88610SMauro Carvalho Chehab struct tea5767_ctrl ctl; 349955c88610SMauro Carvalho Chehab 350055c88610SMauro Carvalho Chehab memset(&ctl, 0, sizeof(ctl)); 350155c88610SMauro Carvalho Chehab 350255c88610SMauro Carvalho Chehab ctl.high_cut = 1; 350355c88610SMauro Carvalho Chehab ctl.st_noise = 1; 350455c88610SMauro Carvalho Chehab ctl.deemph_75 = 1; 350555c88610SMauro Carvalho Chehab ctl.xtal_freq = TEA5767_HIGH_LO_13MHz; 350655c88610SMauro Carvalho Chehab 350755c88610SMauro Carvalho Chehab tea5767_cfg.tuner = TUNER_TEA5767; 350855c88610SMauro Carvalho Chehab tea5767_cfg.priv = &ctl; 350955c88610SMauro Carvalho Chehab 3510b8341e1dSHans Verkuil call_all(core, tuner, s_config, &tea5767_cfg); 3511af832623SIgor M. Liplianin break; 351255c88610SMauro Carvalho Chehab } 3513e4aab64cSIgor M. Liplianin case CX88_BOARD_TEVII_S420: 3514af832623SIgor M. Liplianin case CX88_BOARD_TEVII_S460: 35150cb73639SIgor M. Liplianin case CX88_BOARD_TEVII_S464: 35164cd7fb87SOleg Roitburd case CX88_BOARD_OMICOM_SS4_PCI: 35174b29631dSIgor M. Liplianin case CX88_BOARD_TBS_8910: 3518ee73042cSOleg Roitburd case CX88_BOARD_TBS_8920: 3519cd3cde12SIgor M. Liplianin case CX88_BOARD_PROF_6200: 352057f51dbcSOleg Roitburd case CX88_BOARD_PROF_7300: 3521b699c271SIgor M. Liplianin case CX88_BOARD_PROF_7301: 35224b29631dSIgor M. Liplianin case CX88_BOARD_SATTRADE_ST4200: 3523ad5f74c0SIgor M. Liplianin cx_write(MO_GP0_IO, 0x8000); 3524ad5f74c0SIgor M. Liplianin msleep(100); 3525ee73042cSOleg Roitburd cx_write(MO_SRST_IO, 0); 3526ad5f74c0SIgor M. Liplianin msleep(10); 3527ad5f74c0SIgor M. Liplianin cx_write(MO_GP0_IO, 0x8080); 3528ee73042cSOleg Roitburd msleep(100); 3529ee73042cSOleg Roitburd cx_write(MO_SRST_IO, 1); 3530ee73042cSOleg Roitburd msleep(100); 3531ee73042cSOleg Roitburd break; 35324bf1226aSMauro Carvalho Chehab } /*end switch() */ 35334bf1226aSMauro Carvalho Chehab 35344bf1226aSMauro Carvalho Chehab 35354bf1226aSMauro Carvalho Chehab /* Setup tuners */ 35364bf1226aSMauro Carvalho Chehab if ((core->board.radio_type != UNSET)) { 35374bf1226aSMauro Carvalho Chehab tun_setup.mode_mask = T_RADIO; 35384bf1226aSMauro Carvalho Chehab tun_setup.type = core->board.radio_type; 35394bf1226aSMauro Carvalho Chehab tun_setup.addr = core->board.radio_addr; 35404bf1226aSMauro Carvalho Chehab tun_setup.tuner_callback = cx88_tuner_callback; 3541b8341e1dSHans Verkuil call_all(core, tuner, s_type_addr, &tun_setup); 35424bf1226aSMauro Carvalho Chehab mode_mask &= ~T_RADIO; 35434bf1226aSMauro Carvalho Chehab } 35444bf1226aSMauro Carvalho Chehab 3545c39ba330SHans Verkuil if (core->board.tuner_type != UNSET) { 35464bf1226aSMauro Carvalho Chehab tun_setup.mode_mask = mode_mask; 35474bf1226aSMauro Carvalho Chehab tun_setup.type = core->board.tuner_type; 35484bf1226aSMauro Carvalho Chehab tun_setup.addr = core->board.tuner_addr; 35494bf1226aSMauro Carvalho Chehab tun_setup.tuner_callback = cx88_tuner_callback; 35504bf1226aSMauro Carvalho Chehab 3551b8341e1dSHans Verkuil call_all(core, tuner, s_type_addr, &tun_setup); 35524bf1226aSMauro Carvalho Chehab } 35534bf1226aSMauro Carvalho Chehab 35544bf1226aSMauro Carvalho Chehab if (core->board.tda9887_conf) { 35554bf1226aSMauro Carvalho Chehab struct v4l2_priv_tun_config tda9887_cfg; 35564bf1226aSMauro Carvalho Chehab 35574bf1226aSMauro Carvalho Chehab tda9887_cfg.tuner = TUNER_TDA9887; 35584bf1226aSMauro Carvalho Chehab tda9887_cfg.priv = &core->board.tda9887_conf; 35594bf1226aSMauro Carvalho Chehab 3560b8341e1dSHans Verkuil call_all(core, tuner, s_config, &tda9887_cfg); 35611da177e4SLinus Torvalds } 3562c2cb8fccSMauro Carvalho Chehab 3563c2cb8fccSMauro Carvalho Chehab if (core->board.tuner_type == TUNER_XC2028) { 3564c2cb8fccSMauro Carvalho Chehab struct v4l2_priv_tun_config xc2028_cfg; 3565c2cb8fccSMauro Carvalho Chehab struct xc2028_ctrl ctl; 3566c2cb8fccSMauro Carvalho Chehab 356799e09eacSMauro Carvalho Chehab /* Fills device-dependent initialization parameters */ 356899e09eacSMauro Carvalho Chehab cx88_setup_xc3028(core, &ctl); 356999e09eacSMauro Carvalho Chehab 357099e09eacSMauro Carvalho Chehab /* Sends parameters to xc2028/3028 tuner */ 3571a9317abfSMauro Carvalho Chehab memset(&xc2028_cfg, 0, sizeof(xc2028_cfg)); 3572c2cb8fccSMauro Carvalho Chehab xc2028_cfg.tuner = TUNER_XC2028; 3573c2cb8fccSMauro Carvalho Chehab xc2028_cfg.priv = &ctl; 357402615ed5SMauro Carvalho Chehab dprintk(1, "Asking xc2028/3028 to load firmware %s\n", 357564016330SMauro Carvalho Chehab ctl.fname); 3576b8341e1dSHans Verkuil call_all(core, tuner, s_config, &xc2028_cfg); 3577c2cb8fccSMauro Carvalho Chehab } 3578622b828aSLaurent Pinchart call_all(core, core, s_power, 0); 35791da177e4SLinus Torvalds } 35801da177e4SLinus Torvalds 35811da177e4SLinus Torvalds /* ------------------------------------------------------------------ */ 35821da177e4SLinus Torvalds 3583bbc83597STrent Piepho static int cx88_pci_quirks(const char *name, struct pci_dev *pci) 3584bbc83597STrent Piepho { 3585bbc83597STrent Piepho unsigned int lat = UNSET; 3586bbc83597STrent Piepho u8 ctrl = 0; 3587bbc83597STrent Piepho u8 value; 3588bbc83597STrent Piepho 3589bbc83597STrent Piepho /* check pci quirks */ 3590bbc83597STrent Piepho if (pci_pci_problems & PCIPCI_TRITON) { 359165bc2fe8SMauro Carvalho Chehab pr_info("quirk: PCIPCI_TRITON -- set TBFX\n"); 3592bbc83597STrent Piepho ctrl |= CX88X_EN_TBFX; 3593bbc83597STrent Piepho } 3594bbc83597STrent Piepho if (pci_pci_problems & PCIPCI_NATOMA) { 359565bc2fe8SMauro Carvalho Chehab pr_info("quirk: PCIPCI_NATOMA -- set TBFX\n"); 3596bbc83597STrent Piepho ctrl |= CX88X_EN_TBFX; 3597bbc83597STrent Piepho } 3598bbc83597STrent Piepho if (pci_pci_problems & PCIPCI_VIAETBF) { 359965bc2fe8SMauro Carvalho Chehab pr_info("quirk: PCIPCI_VIAETBF -- set TBFX\n"); 3600bbc83597STrent Piepho ctrl |= CX88X_EN_TBFX; 3601bbc83597STrent Piepho } 3602bbc83597STrent Piepho if (pci_pci_problems & PCIPCI_VSFX) { 360365bc2fe8SMauro Carvalho Chehab pr_info("quirk: PCIPCI_VSFX -- set VSFX\n"); 3604bbc83597STrent Piepho ctrl |= CX88X_EN_VSFX; 3605bbc83597STrent Piepho } 3606bbc83597STrent Piepho #ifdef PCIPCI_ALIMAGIK 3607bbc83597STrent Piepho if (pci_pci_problems & PCIPCI_ALIMAGIK) { 360865bc2fe8SMauro Carvalho Chehab pr_info("quirk: PCIPCI_ALIMAGIK -- latency fixup\n"); 3609bbc83597STrent Piepho lat = 0x0A; 3610bbc83597STrent Piepho } 3611bbc83597STrent Piepho #endif 3612bbc83597STrent Piepho 3613bbc83597STrent Piepho /* check insmod options */ 3614*7b61ba8fSMauro Carvalho Chehab if (latency != UNSET) 3615bbc83597STrent Piepho lat = latency; 3616bbc83597STrent Piepho 3617bbc83597STrent Piepho /* apply stuff */ 3618bbc83597STrent Piepho if (ctrl) { 3619bbc83597STrent Piepho pci_read_config_byte(pci, CX88X_DEVCTRL, &value); 3620bbc83597STrent Piepho value |= ctrl; 3621bbc83597STrent Piepho pci_write_config_byte(pci, CX88X_DEVCTRL, value); 3622bbc83597STrent Piepho } 3623*7b61ba8fSMauro Carvalho Chehab if (lat != UNSET) { 362465bc2fe8SMauro Carvalho Chehab pr_info("setting pci latency timer to %d\n", 362565bc2fe8SMauro Carvalho Chehab latency); 3626bbc83597STrent Piepho pci_write_config_byte(pci, PCI_LATENCY_TIMER, latency); 3627bbc83597STrent Piepho } 3628bbc83597STrent Piepho return 0; 3629bbc83597STrent Piepho } 3630bbc83597STrent Piepho 3631bbc83597STrent Piepho int cx88_get_resources(const struct cx88_core *core, struct pci_dev *pci) 3632bbc83597STrent Piepho { 3633bbc83597STrent Piepho if (request_mem_region(pci_resource_start(pci, 0), 3634bbc83597STrent Piepho pci_resource_len(pci, 0), 3635bbc83597STrent Piepho core->name)) 3636bbc83597STrent Piepho return 0; 363765bc2fe8SMauro Carvalho Chehab pr_err("func %d: Can't get MMIO memory @ 0x%llx, subsystem: %04x:%04x\n", 363865bc2fe8SMauro Carvalho Chehab PCI_FUNC(pci->devfn), 3639bbc83597STrent Piepho (unsigned long long)pci_resource_start(pci, 0), 3640bbc83597STrent Piepho pci->subsystem_vendor, pci->subsystem_device); 3641bbc83597STrent Piepho return -EBUSY; 3642bbc83597STrent Piepho } 3643bbc83597STrent Piepho 3644bbc83597STrent Piepho /* Allocate and initialize the cx88 core struct. One should hold the 3645bbc83597STrent Piepho * devlist mutex before calling this. */ 3646bbc83597STrent Piepho struct cx88_core *cx88_core_create(struct pci_dev *pci, int nr) 3647bbc83597STrent Piepho { 3648bbc83597STrent Piepho struct cx88_core *core; 3649bbc83597STrent Piepho int i; 3650bbc83597STrent Piepho 3651bbc83597STrent Piepho core = kzalloc(sizeof(*core), GFP_KERNEL); 3652fbc0ae20SAlan Cox if (core == NULL) 3653fbc0ae20SAlan Cox return NULL; 3654bbc83597STrent Piepho 3655bbc83597STrent Piepho atomic_inc(&core->refcount); 3656bbc83597STrent Piepho core->pci_bus = pci->bus->number; 3657bbc83597STrent Piepho core->pci_slot = PCI_SLOT(pci->devfn); 36588ddac9eeSTrent Piepho core->pci_irqmask = PCI_INT_RISC_RD_BERRINT | PCI_INT_RISC_WR_BERRINT | 36598ddac9eeSTrent Piepho PCI_INT_BRDG_BERRINT | PCI_INT_SRC_DMA_BERRINT | 36608ddac9eeSTrent Piepho PCI_INT_DST_DMA_BERRINT | PCI_INT_IPB_DMA_BERRINT; 3661bbc83597STrent Piepho mutex_init(&core->lock); 3662bbc83597STrent Piepho 3663bbc83597STrent Piepho core->nr = nr; 3664bbc83597STrent Piepho sprintf(core->name, "cx88[%d]", core->nr); 36659467fe12SHans Verkuil 3666ccd6f1d4SHans Verkuil core->tvnorm = V4L2_STD_NTSC_M; 3667ccd6f1d4SHans Verkuil core->width = 320; 3668ccd6f1d4SHans Verkuil core->height = 240; 3669ccd6f1d4SHans Verkuil core->field = V4L2_FIELD_INTERLACED; 3670ccd6f1d4SHans Verkuil 36719467fe12SHans Verkuil strcpy(core->v4l2_dev.name, core->name); 36729467fe12SHans Verkuil if (v4l2_device_register(NULL, &core->v4l2_dev)) { 36739467fe12SHans Verkuil kfree(core); 36749467fe12SHans Verkuil return NULL; 36759467fe12SHans Verkuil } 36769467fe12SHans Verkuil 36778c7cb12aSHans Verkuil if (v4l2_ctrl_handler_init(&core->video_hdl, 13)) { 36788c7cb12aSHans Verkuil v4l2_device_unregister(&core->v4l2_dev); 36798c7cb12aSHans Verkuil kfree(core); 36808c7cb12aSHans Verkuil return NULL; 36818c7cb12aSHans Verkuil } 36828c7cb12aSHans Verkuil 36838c7cb12aSHans Verkuil if (v4l2_ctrl_handler_init(&core->audio_hdl, 13)) { 36848c7cb12aSHans Verkuil v4l2_ctrl_handler_free(&core->video_hdl); 3685bac63981SHans Verkuil v4l2_device_unregister(&core->v4l2_dev); 3686bac63981SHans Verkuil kfree(core); 3687bac63981SHans Verkuil return NULL; 3688bac63981SHans Verkuil } 3689bac63981SHans Verkuil 3690*7b61ba8fSMauro Carvalho Chehab if (cx88_get_resources(core, pci) != 0) { 36918c7cb12aSHans Verkuil v4l2_ctrl_handler_free(&core->video_hdl); 36928c7cb12aSHans Verkuil v4l2_ctrl_handler_free(&core->audio_hdl); 36939467fe12SHans Verkuil v4l2_device_unregister(&core->v4l2_dev); 3694bbc83597STrent Piepho kfree(core); 3695bbc83597STrent Piepho return NULL; 3696bbc83597STrent Piepho } 3697bbc83597STrent Piepho 3698bbc83597STrent Piepho /* PCI stuff */ 3699bbc83597STrent Piepho cx88_pci_quirks(core->name, pci); 3700bbc83597STrent Piepho core->lmmio = ioremap(pci_resource_start(pci, 0), 3701bbc83597STrent Piepho pci_resource_len(pci, 0)); 3702bbc83597STrent Piepho core->bmmio = (u8 __iomem *)core->lmmio; 3703bbc83597STrent Piepho 3704fbc0ae20SAlan Cox if (core->lmmio == NULL) { 3705bac63981SHans Verkuil release_mem_region(pci_resource_start(pci, 0), 3706bac63981SHans Verkuil pci_resource_len(pci, 0)); 37078c7cb12aSHans Verkuil v4l2_ctrl_handler_free(&core->video_hdl); 37088c7cb12aSHans Verkuil v4l2_ctrl_handler_free(&core->audio_hdl); 3709bac63981SHans Verkuil v4l2_device_unregister(&core->v4l2_dev); 3710fbc0ae20SAlan Cox kfree(core); 3711fbc0ae20SAlan Cox return NULL; 3712fbc0ae20SAlan Cox } 3713fbc0ae20SAlan Cox 3714bbc83597STrent Piepho /* board config */ 3715bbc83597STrent Piepho core->boardnr = UNSET; 3716bbc83597STrent Piepho if (card[core->nr] < ARRAY_SIZE(cx88_boards)) 3717bbc83597STrent Piepho core->boardnr = card[core->nr]; 3718bbc83597STrent Piepho for (i = 0; UNSET == core->boardnr && i < ARRAY_SIZE(cx88_subids); i++) 3719bbc83597STrent Piepho if (pci->subsystem_vendor == cx88_subids[i].subvendor && 3720bbc83597STrent Piepho pci->subsystem_device == cx88_subids[i].subdevice) 3721bbc83597STrent Piepho core->boardnr = cx88_subids[i].card; 3722*7b61ba8fSMauro Carvalho Chehab if (core->boardnr == UNSET) { 3723bbc83597STrent Piepho core->boardnr = CX88_BOARD_UNKNOWN; 3724bbc83597STrent Piepho cx88_card_list(core, pci); 3725bbc83597STrent Piepho } 3726bbc83597STrent Piepho 3727b5237747SEzequiel Garcia core->board = cx88_boards[core->boardnr]; 3728bbc83597STrent Piepho 37293007703dSMauro Carvalho Chehab if (!core->board.num_frontends && (core->board.mpeg & CX88_MPEG_DVB)) 3730363c35fcSSteven Toth core->board.num_frontends = 1; 3731363c35fcSSteven Toth 373265bc2fe8SMauro Carvalho Chehab pr_info("subsystem: %04x:%04x, board: %s [card=%d,%s], frontend(s): %d\n", 37330f19e65bSMauro Carvalho Chehab pci->subsystem_vendor, pci->subsystem_device, core->board.name, 3734bbc83597STrent Piepho core->boardnr, card[core->nr] == core->boardnr ? 3735363c35fcSSteven Toth "insmod option" : "autodetected", 3736363c35fcSSteven Toth core->board.num_frontends); 3737bbc83597STrent Piepho 3738bbc83597STrent Piepho if (tuner[core->nr] != UNSET) 3739bbc83597STrent Piepho core->board.tuner_type = tuner[core->nr]; 3740bbc83597STrent Piepho if (radio[core->nr] != UNSET) 3741bbc83597STrent Piepho core->board.radio_type = radio[core->nr]; 3742bbc83597STrent Piepho 374302615ed5SMauro Carvalho Chehab dprintk(1, "TV tuner type %d, Radio tuner type %d\n", 37440f19e65bSMauro Carvalho Chehab core->board.tuner_type, core->board.radio_type); 3745bbc83597STrent Piepho 3746bbc83597STrent Piepho /* init hardware */ 3747bbc83597STrent Piepho cx88_reset(core); 3748bbc83597STrent Piepho cx88_card_setup_pre_i2c(core); 3749bbc83597STrent Piepho cx88_i2c_init(core, pci); 3750189bf5f0SMauro Carvalho Chehab 3751189bf5f0SMauro Carvalho Chehab /* load tuner module, if needed */ 3752*7b61ba8fSMauro Carvalho Chehab if (core->board.tuner_type != UNSET) { 375343d5eab7SHans Verkuil /* Ignore 0x6b and 0x6f on cx88 boards. 375443d5eab7SHans Verkuil * FusionHDTV5 RT Gold has an ir receiver at 0x6b 375543d5eab7SHans Verkuil * and an RTC at 0x6f which can get corrupted if probed. */ 375643d5eab7SHans Verkuil static const unsigned short tv_addrs[] = { 375743d5eab7SHans Verkuil 0x42, 0x43, 0x4a, 0x4b, /* tda8290 */ 375843d5eab7SHans Verkuil 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 375943d5eab7SHans Verkuil 0x68, 0x69, 0x6a, 0x6c, 0x6d, 0x6e, 376043d5eab7SHans Verkuil I2C_CLIENT_END 376143d5eab7SHans Verkuil }; 3762b8341e1dSHans Verkuil int has_demod = (core->board.tda9887_conf & TDA9887_PRESENT); 3763b8341e1dSHans Verkuil 3764b8341e1dSHans Verkuil /* I don't trust the radio_type as is stored in the card 3765b8341e1dSHans Verkuil definitions, so we just probe for it. 3766b8341e1dSHans Verkuil The radio_type is sometimes missing, or set to UNSET but 3767b8341e1dSHans Verkuil later code configures a tea5767. 3768b8341e1dSHans Verkuil */ 376953dacb15SHans Verkuil v4l2_i2c_new_subdev(&core->v4l2_dev, &core->i2c_adap, 37709a1f8b34SLaurent Pinchart "tuner", 0, v4l2_i2c_tuner_addrs(ADDRS_RADIO)); 3771b8341e1dSHans Verkuil if (has_demod) 377253dacb15SHans Verkuil v4l2_i2c_new_subdev(&core->v4l2_dev, 37739a1f8b34SLaurent Pinchart &core->i2c_adap, "tuner", 377453dacb15SHans Verkuil 0, v4l2_i2c_tuner_addrs(ADDRS_DEMOD)); 3775b8341e1dSHans Verkuil if (core->board.tuner_addr == ADDR_UNSET) { 377653dacb15SHans Verkuil v4l2_i2c_new_subdev(&core->v4l2_dev, 37779a1f8b34SLaurent Pinchart &core->i2c_adap, "tuner", 377853dacb15SHans Verkuil 0, has_demod ? tv_addrs + 4 : tv_addrs); 3779b8341e1dSHans Verkuil } else { 3780e6574f2fSHans Verkuil v4l2_i2c_new_subdev(&core->v4l2_dev, &core->i2c_adap, 37819a1f8b34SLaurent Pinchart "tuner", core->board.tuner_addr, NULL); 3782b8341e1dSHans Verkuil } 3783b8341e1dSHans Verkuil } 3784189bf5f0SMauro Carvalho Chehab 3785bbc83597STrent Piepho cx88_card_setup(core); 378689c3bc78SJean Delvare if (!disable_ir) { 378715ceb6b1SJean Delvare cx88_i2c_init_ir(core); 3788bbc83597STrent Piepho cx88_ir_init(core, pci); 378989c3bc78SJean Delvare } 3790bbc83597STrent Piepho 3791bbc83597STrent Piepho return core; 3792bbc83597STrent Piepho } 3793