18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * device driver for Conexant 2388x based TV cards 48c2ecf20Sopenharmony_ci * card-specific stuff. 58c2ecf20Sopenharmony_ci * 68c2ecf20Sopenharmony_ci * (c) 2003 Gerd Knorr <kraxel@bytesex.org> [SuSE Labs] 78c2ecf20Sopenharmony_ci */ 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#include "cx88.h" 108c2ecf20Sopenharmony_ci#include "tea5767.h" 118c2ecf20Sopenharmony_ci#include "xc4000.h" 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci#include <linux/init.h> 148c2ecf20Sopenharmony_ci#include <linux/module.h> 158c2ecf20Sopenharmony_ci#include <linux/pci.h> 168c2ecf20Sopenharmony_ci#include <linux/delay.h> 178c2ecf20Sopenharmony_ci#include <linux/slab.h> 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_cistatic unsigned int tuner[] = {[0 ... (CX88_MAXBOARDS - 1)] = UNSET }; 208c2ecf20Sopenharmony_cistatic unsigned int radio[] = {[0 ... (CX88_MAXBOARDS - 1)] = UNSET }; 218c2ecf20Sopenharmony_cistatic unsigned int card[] = {[0 ... (CX88_MAXBOARDS - 1)] = UNSET }; 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_cimodule_param_array(tuner, int, NULL, 0444); 248c2ecf20Sopenharmony_cimodule_param_array(radio, int, NULL, 0444); 258c2ecf20Sopenharmony_cimodule_param_array(card, int, NULL, 0444); 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_ciMODULE_PARM_DESC(tuner, "tuner type"); 288c2ecf20Sopenharmony_ciMODULE_PARM_DESC(radio, "radio tuner type"); 298c2ecf20Sopenharmony_ciMODULE_PARM_DESC(card, "card type"); 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_cistatic unsigned int latency = UNSET; 328c2ecf20Sopenharmony_cimodule_param(latency, int, 0444); 338c2ecf20Sopenharmony_ciMODULE_PARM_DESC(latency, "pci latency timer"); 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_cistatic int disable_ir; 368c2ecf20Sopenharmony_cimodule_param(disable_ir, int, 0444); 378c2ecf20Sopenharmony_ciMODULE_PARM_DESC(disable_ir, "Disable IR support"); 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_ci#define dprintk(level, fmt, arg...) do { \ 408c2ecf20Sopenharmony_ci if (cx88_core_debug >= level) \ 418c2ecf20Sopenharmony_ci printk(KERN_DEBUG pr_fmt("%s: core:" fmt), \ 428c2ecf20Sopenharmony_ci __func__, ##arg); \ 438c2ecf20Sopenharmony_ci} while (0) 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_ci/* ------------------------------------------------------------------ */ 468c2ecf20Sopenharmony_ci/* board config info */ 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_ci/* If radio_type !=UNSET, radio_addr should be specified 498c2ecf20Sopenharmony_ci */ 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_cistatic const struct cx88_board cx88_boards[] = { 528c2ecf20Sopenharmony_ci [CX88_BOARD_UNKNOWN] = { 538c2ecf20Sopenharmony_ci .name = "UNKNOWN/GENERIC", 548c2ecf20Sopenharmony_ci .tuner_type = UNSET, 558c2ecf20Sopenharmony_ci .radio_type = UNSET, 568c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 578c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 588c2ecf20Sopenharmony_ci .input = { { 598c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 608c2ecf20Sopenharmony_ci .vmux = 0, 618c2ecf20Sopenharmony_ci }, { 628c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE2, 638c2ecf20Sopenharmony_ci .vmux = 1, 648c2ecf20Sopenharmony_ci }, { 658c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE3, 668c2ecf20Sopenharmony_ci .vmux = 2, 678c2ecf20Sopenharmony_ci }, { 688c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE4, 698c2ecf20Sopenharmony_ci .vmux = 3, 708c2ecf20Sopenharmony_ci } }, 718c2ecf20Sopenharmony_ci }, 728c2ecf20Sopenharmony_ci [CX88_BOARD_HAUPPAUGE] = { 738c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV 34xxx models", 748c2ecf20Sopenharmony_ci .tuner_type = UNSET, 758c2ecf20Sopenharmony_ci .radio_type = UNSET, 768c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 778c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 788c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT, 798c2ecf20Sopenharmony_ci .input = { { 808c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 818c2ecf20Sopenharmony_ci .vmux = 0, 828c2ecf20Sopenharmony_ci .gpio0 = 0xff00, // internal decoder 838c2ecf20Sopenharmony_ci }, { 848c2ecf20Sopenharmony_ci .type = CX88_VMUX_DEBUG, 858c2ecf20Sopenharmony_ci .vmux = 0, 868c2ecf20Sopenharmony_ci .gpio0 = 0xff01, // mono from tuner chip 878c2ecf20Sopenharmony_ci }, { 888c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 898c2ecf20Sopenharmony_ci .vmux = 1, 908c2ecf20Sopenharmony_ci .gpio0 = 0xff02, 918c2ecf20Sopenharmony_ci }, { 928c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 938c2ecf20Sopenharmony_ci .vmux = 2, 948c2ecf20Sopenharmony_ci .gpio0 = 0xff02, 958c2ecf20Sopenharmony_ci } }, 968c2ecf20Sopenharmony_ci .radio = { 978c2ecf20Sopenharmony_ci .type = CX88_RADIO, 988c2ecf20Sopenharmony_ci .gpio0 = 0xff01, 998c2ecf20Sopenharmony_ci }, 1008c2ecf20Sopenharmony_ci }, 1018c2ecf20Sopenharmony_ci [CX88_BOARD_GDI] = { 1028c2ecf20Sopenharmony_ci .name = "GDI Black Gold", 1038c2ecf20Sopenharmony_ci .tuner_type = UNSET, 1048c2ecf20Sopenharmony_ci .radio_type = UNSET, 1058c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 1068c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 1078c2ecf20Sopenharmony_ci .input = { { 1088c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 1098c2ecf20Sopenharmony_ci .vmux = 0, 1108c2ecf20Sopenharmony_ci }, { 1118c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 1128c2ecf20Sopenharmony_ci .vmux = 2, 1138c2ecf20Sopenharmony_ci } }, 1148c2ecf20Sopenharmony_ci }, 1158c2ecf20Sopenharmony_ci [CX88_BOARD_PIXELVIEW] = { 1168c2ecf20Sopenharmony_ci .name = "PixelView", 1178c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_PAL, 1188c2ecf20Sopenharmony_ci .radio_type = UNSET, 1198c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 1208c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 1218c2ecf20Sopenharmony_ci .input = { { 1228c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 1238c2ecf20Sopenharmony_ci .vmux = 0, 1248c2ecf20Sopenharmony_ci .gpio0 = 0xff00, // internal decoder 1258c2ecf20Sopenharmony_ci }, { 1268c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 1278c2ecf20Sopenharmony_ci .vmux = 1, 1288c2ecf20Sopenharmony_ci }, { 1298c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 1308c2ecf20Sopenharmony_ci .vmux = 2, 1318c2ecf20Sopenharmony_ci } }, 1328c2ecf20Sopenharmony_ci .radio = { 1338c2ecf20Sopenharmony_ci .type = CX88_RADIO, 1348c2ecf20Sopenharmony_ci .gpio0 = 0xff10, 1358c2ecf20Sopenharmony_ci }, 1368c2ecf20Sopenharmony_ci }, 1378c2ecf20Sopenharmony_ci [CX88_BOARD_ATI_WONDER_PRO] = { 1388c2ecf20Sopenharmony_ci .name = "ATI TV Wonder Pro", 1398c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_4IN1, 1408c2ecf20Sopenharmony_ci .radio_type = UNSET, 1418c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 1428c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 1438c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT | TDA9887_INTERCARRIER, 1448c2ecf20Sopenharmony_ci .input = { { 1458c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 1468c2ecf20Sopenharmony_ci .vmux = 0, 1478c2ecf20Sopenharmony_ci .gpio0 = 0x03ff, 1488c2ecf20Sopenharmony_ci }, { 1498c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 1508c2ecf20Sopenharmony_ci .vmux = 1, 1518c2ecf20Sopenharmony_ci .gpio0 = 0x03fe, 1528c2ecf20Sopenharmony_ci }, { 1538c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 1548c2ecf20Sopenharmony_ci .vmux = 2, 1558c2ecf20Sopenharmony_ci .gpio0 = 0x03fe, 1568c2ecf20Sopenharmony_ci } }, 1578c2ecf20Sopenharmony_ci }, 1588c2ecf20Sopenharmony_ci [CX88_BOARD_WINFAST2000XP_EXPERT] = { 1598c2ecf20Sopenharmony_ci .name = "Leadtek Winfast 2000XP Expert", 1608c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_4IN1, 1618c2ecf20Sopenharmony_ci .radio_type = UNSET, 1628c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 1638c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 1648c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT, 1658c2ecf20Sopenharmony_ci .input = { { 1668c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 1678c2ecf20Sopenharmony_ci .vmux = 0, 1688c2ecf20Sopenharmony_ci .gpio0 = 0x00F5e700, 1698c2ecf20Sopenharmony_ci .gpio1 = 0x00003004, 1708c2ecf20Sopenharmony_ci .gpio2 = 0x00F5e700, 1718c2ecf20Sopenharmony_ci .gpio3 = 0x02000000, 1728c2ecf20Sopenharmony_ci }, { 1738c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 1748c2ecf20Sopenharmony_ci .vmux = 1, 1758c2ecf20Sopenharmony_ci .gpio0 = 0x00F5c700, 1768c2ecf20Sopenharmony_ci .gpio1 = 0x00003004, 1778c2ecf20Sopenharmony_ci .gpio2 = 0x00F5c700, 1788c2ecf20Sopenharmony_ci .gpio3 = 0x02000000, 1798c2ecf20Sopenharmony_ci }, { 1808c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 1818c2ecf20Sopenharmony_ci .vmux = 2, 1828c2ecf20Sopenharmony_ci .gpio0 = 0x00F5c700, 1838c2ecf20Sopenharmony_ci .gpio1 = 0x00003004, 1848c2ecf20Sopenharmony_ci .gpio2 = 0x00F5c700, 1858c2ecf20Sopenharmony_ci .gpio3 = 0x02000000, 1868c2ecf20Sopenharmony_ci } }, 1878c2ecf20Sopenharmony_ci .radio = { 1888c2ecf20Sopenharmony_ci .type = CX88_RADIO, 1898c2ecf20Sopenharmony_ci .gpio0 = 0x00F5d700, 1908c2ecf20Sopenharmony_ci .gpio1 = 0x00003004, 1918c2ecf20Sopenharmony_ci .gpio2 = 0x00F5d700, 1928c2ecf20Sopenharmony_ci .gpio3 = 0x02000000, 1938c2ecf20Sopenharmony_ci }, 1948c2ecf20Sopenharmony_ci }, 1958c2ecf20Sopenharmony_ci [CX88_BOARD_AVERTV_STUDIO_303] = { 1968c2ecf20Sopenharmony_ci .name = "AverTV Studio 303 (M126)", 1978c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 1988c2ecf20Sopenharmony_ci .radio_type = UNSET, 1998c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 2008c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 2018c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT, 2028c2ecf20Sopenharmony_ci .input = { { 2038c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 2048c2ecf20Sopenharmony_ci .vmux = 0, 2058c2ecf20Sopenharmony_ci .gpio1 = 0xe09f, 2068c2ecf20Sopenharmony_ci }, { 2078c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 2088c2ecf20Sopenharmony_ci .vmux = 1, 2098c2ecf20Sopenharmony_ci .gpio1 = 0xe05f, 2108c2ecf20Sopenharmony_ci }, { 2118c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 2128c2ecf20Sopenharmony_ci .vmux = 2, 2138c2ecf20Sopenharmony_ci .gpio1 = 0xe05f, 2148c2ecf20Sopenharmony_ci } }, 2158c2ecf20Sopenharmony_ci .radio = { 2168c2ecf20Sopenharmony_ci .gpio1 = 0xe0df, 2178c2ecf20Sopenharmony_ci .type = CX88_RADIO, 2188c2ecf20Sopenharmony_ci }, 2198c2ecf20Sopenharmony_ci }, 2208c2ecf20Sopenharmony_ci [CX88_BOARD_MSI_TVANYWHERE_MASTER] = { 2218c2ecf20Sopenharmony_ci // added gpio values thanks to Michal 2228c2ecf20Sopenharmony_ci // values for PAL from DScaler 2238c2ecf20Sopenharmony_ci .name = "MSI TV-@nywhere Master", 2248c2ecf20Sopenharmony_ci .tuner_type = TUNER_MT2032, 2258c2ecf20Sopenharmony_ci .radio_type = UNSET, 2268c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 2278c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 2288c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT | TDA9887_INTERCARRIER_NTSC, 2298c2ecf20Sopenharmony_ci .input = { { 2308c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 2318c2ecf20Sopenharmony_ci .vmux = 0, 2328c2ecf20Sopenharmony_ci .gpio0 = 0x000040bf, 2338c2ecf20Sopenharmony_ci .gpio1 = 0x000080c0, 2348c2ecf20Sopenharmony_ci .gpio2 = 0x0000ff40, 2358c2ecf20Sopenharmony_ci }, { 2368c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 2378c2ecf20Sopenharmony_ci .vmux = 1, 2388c2ecf20Sopenharmony_ci .gpio0 = 0x000040bf, 2398c2ecf20Sopenharmony_ci .gpio1 = 0x000080c0, 2408c2ecf20Sopenharmony_ci .gpio2 = 0x0000ff40, 2418c2ecf20Sopenharmony_ci }, { 2428c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 2438c2ecf20Sopenharmony_ci .vmux = 2, 2448c2ecf20Sopenharmony_ci .gpio0 = 0x000040bf, 2458c2ecf20Sopenharmony_ci .gpio1 = 0x000080c0, 2468c2ecf20Sopenharmony_ci .gpio2 = 0x0000ff40, 2478c2ecf20Sopenharmony_ci } }, 2488c2ecf20Sopenharmony_ci .radio = { 2498c2ecf20Sopenharmony_ci .type = CX88_RADIO, 2508c2ecf20Sopenharmony_ci .vmux = 3, 2518c2ecf20Sopenharmony_ci .gpio0 = 0x000040bf, 2528c2ecf20Sopenharmony_ci .gpio1 = 0x000080c0, 2538c2ecf20Sopenharmony_ci .gpio2 = 0x0000ff20, 2548c2ecf20Sopenharmony_ci }, 2558c2ecf20Sopenharmony_ci }, 2568c2ecf20Sopenharmony_ci [CX88_BOARD_WINFAST_DV2000] = { 2578c2ecf20Sopenharmony_ci .name = "Leadtek Winfast DV2000", 2588c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 2598c2ecf20Sopenharmony_ci .radio_type = UNSET, 2608c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 2618c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 2628c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT, 2638c2ecf20Sopenharmony_ci .input = { { 2648c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 2658c2ecf20Sopenharmony_ci .vmux = 0, 2668c2ecf20Sopenharmony_ci .gpio0 = 0x0035e700, 2678c2ecf20Sopenharmony_ci .gpio1 = 0x00003004, 2688c2ecf20Sopenharmony_ci .gpio2 = 0x0035e700, 2698c2ecf20Sopenharmony_ci .gpio3 = 0x02000000, 2708c2ecf20Sopenharmony_ci }, { 2718c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 2728c2ecf20Sopenharmony_ci .vmux = 1, 2738c2ecf20Sopenharmony_ci .gpio0 = 0x0035c700, 2748c2ecf20Sopenharmony_ci .gpio1 = 0x00003004, 2758c2ecf20Sopenharmony_ci .gpio2 = 0x0035c700, 2768c2ecf20Sopenharmony_ci .gpio3 = 0x02000000, 2778c2ecf20Sopenharmony_ci }, { 2788c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 2798c2ecf20Sopenharmony_ci .vmux = 2, 2808c2ecf20Sopenharmony_ci .gpio0 = 0x0035c700, 2818c2ecf20Sopenharmony_ci .gpio1 = 0x0035c700, 2828c2ecf20Sopenharmony_ci .gpio2 = 0x02000000, 2838c2ecf20Sopenharmony_ci .gpio3 = 0x02000000, 2848c2ecf20Sopenharmony_ci } }, 2858c2ecf20Sopenharmony_ci .radio = { 2868c2ecf20Sopenharmony_ci .type = CX88_RADIO, 2878c2ecf20Sopenharmony_ci .gpio0 = 0x0035d700, 2888c2ecf20Sopenharmony_ci .gpio1 = 0x00007004, 2898c2ecf20Sopenharmony_ci .gpio2 = 0x0035d700, 2908c2ecf20Sopenharmony_ci .gpio3 = 0x02000000, 2918c2ecf20Sopenharmony_ci }, 2928c2ecf20Sopenharmony_ci }, 2938c2ecf20Sopenharmony_ci [CX88_BOARD_LEADTEK_PVR2000] = { 2948c2ecf20Sopenharmony_ci // gpio values for PAL version from regspy by DScaler 2958c2ecf20Sopenharmony_ci .name = "Leadtek PVR 2000", 2968c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 2978c2ecf20Sopenharmony_ci .radio_type = UNSET, 2988c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 2998c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 3008c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT, 3018c2ecf20Sopenharmony_ci .input = { { 3028c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 3038c2ecf20Sopenharmony_ci .vmux = 0, 3048c2ecf20Sopenharmony_ci .gpio0 = 0x0000bde2, 3058c2ecf20Sopenharmony_ci .audioroute = 1, 3068c2ecf20Sopenharmony_ci }, { 3078c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 3088c2ecf20Sopenharmony_ci .vmux = 1, 3098c2ecf20Sopenharmony_ci .gpio0 = 0x0000bde6, 3108c2ecf20Sopenharmony_ci .audioroute = 1, 3118c2ecf20Sopenharmony_ci }, { 3128c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 3138c2ecf20Sopenharmony_ci .vmux = 2, 3148c2ecf20Sopenharmony_ci .gpio0 = 0x0000bde6, 3158c2ecf20Sopenharmony_ci .audioroute = 1, 3168c2ecf20Sopenharmony_ci } }, 3178c2ecf20Sopenharmony_ci .radio = { 3188c2ecf20Sopenharmony_ci .type = CX88_RADIO, 3198c2ecf20Sopenharmony_ci .gpio0 = 0x0000bd62, 3208c2ecf20Sopenharmony_ci .audioroute = 1, 3218c2ecf20Sopenharmony_ci }, 3228c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_BLACKBIRD, 3238c2ecf20Sopenharmony_ci }, 3248c2ecf20Sopenharmony_ci [CX88_BOARD_IODATA_GVVCP3PCI] = { 3258c2ecf20Sopenharmony_ci .name = "IODATA GV-VCP3/PCI", 3268c2ecf20Sopenharmony_ci .tuner_type = UNSET, 3278c2ecf20Sopenharmony_ci .radio_type = UNSET, 3288c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 3298c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 3308c2ecf20Sopenharmony_ci .input = { { 3318c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 3328c2ecf20Sopenharmony_ci .vmux = 0, 3338c2ecf20Sopenharmony_ci }, { 3348c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE2, 3358c2ecf20Sopenharmony_ci .vmux = 1, 3368c2ecf20Sopenharmony_ci }, { 3378c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 3388c2ecf20Sopenharmony_ci .vmux = 2, 3398c2ecf20Sopenharmony_ci } }, 3408c2ecf20Sopenharmony_ci }, 3418c2ecf20Sopenharmony_ci [CX88_BOARD_PROLINK_PLAYTVPVR] = { 3428c2ecf20Sopenharmony_ci .name = "Prolink PlayTV PVR", 3438c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_FM1236_MK3, 3448c2ecf20Sopenharmony_ci .radio_type = UNSET, 3458c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 3468c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 3478c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT, 3488c2ecf20Sopenharmony_ci .input = { { 3498c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 3508c2ecf20Sopenharmony_ci .vmux = 0, 3518c2ecf20Sopenharmony_ci .gpio0 = 0xbff0, 3528c2ecf20Sopenharmony_ci }, { 3538c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 3548c2ecf20Sopenharmony_ci .vmux = 1, 3558c2ecf20Sopenharmony_ci .gpio0 = 0xbff3, 3568c2ecf20Sopenharmony_ci }, { 3578c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 3588c2ecf20Sopenharmony_ci .vmux = 2, 3598c2ecf20Sopenharmony_ci .gpio0 = 0xbff3, 3608c2ecf20Sopenharmony_ci } }, 3618c2ecf20Sopenharmony_ci .radio = { 3628c2ecf20Sopenharmony_ci .type = CX88_RADIO, 3638c2ecf20Sopenharmony_ci .gpio0 = 0xbff0, 3648c2ecf20Sopenharmony_ci }, 3658c2ecf20Sopenharmony_ci }, 3668c2ecf20Sopenharmony_ci [CX88_BOARD_ASUS_PVR_416] = { 3678c2ecf20Sopenharmony_ci .name = "ASUS PVR-416", 3688c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_FM1236_MK3, 3698c2ecf20Sopenharmony_ci .radio_type = UNSET, 3708c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 3718c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 3728c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT, 3738c2ecf20Sopenharmony_ci .input = { { 3748c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 3758c2ecf20Sopenharmony_ci .vmux = 0, 3768c2ecf20Sopenharmony_ci .gpio0 = 0x0000fde6, 3778c2ecf20Sopenharmony_ci }, { 3788c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 3798c2ecf20Sopenharmony_ci .vmux = 2, 3808c2ecf20Sopenharmony_ci .gpio0 = 0x0000fde6, // 0x0000fda6 L,R RCA audio in? 3818c2ecf20Sopenharmony_ci .audioroute = 1, 3828c2ecf20Sopenharmony_ci } }, 3838c2ecf20Sopenharmony_ci .radio = { 3848c2ecf20Sopenharmony_ci .type = CX88_RADIO, 3858c2ecf20Sopenharmony_ci .gpio0 = 0x0000fde2, 3868c2ecf20Sopenharmony_ci }, 3878c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_BLACKBIRD, 3888c2ecf20Sopenharmony_ci }, 3898c2ecf20Sopenharmony_ci [CX88_BOARD_MSI_TVANYWHERE] = { 3908c2ecf20Sopenharmony_ci .name = "MSI TV-@nywhere", 3918c2ecf20Sopenharmony_ci .tuner_type = TUNER_MT2032, 3928c2ecf20Sopenharmony_ci .radio_type = UNSET, 3938c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 3948c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 3958c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT, 3968c2ecf20Sopenharmony_ci .input = { { 3978c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 3988c2ecf20Sopenharmony_ci .vmux = 0, 3998c2ecf20Sopenharmony_ci .gpio0 = 0x00000fbf, 4008c2ecf20Sopenharmony_ci .gpio2 = 0x0000fc08, 4018c2ecf20Sopenharmony_ci }, { 4028c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 4038c2ecf20Sopenharmony_ci .vmux = 1, 4048c2ecf20Sopenharmony_ci .gpio0 = 0x00000fbf, 4058c2ecf20Sopenharmony_ci .gpio2 = 0x0000fc68, 4068c2ecf20Sopenharmony_ci }, { 4078c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 4088c2ecf20Sopenharmony_ci .vmux = 2, 4098c2ecf20Sopenharmony_ci .gpio0 = 0x00000fbf, 4108c2ecf20Sopenharmony_ci .gpio2 = 0x0000fc68, 4118c2ecf20Sopenharmony_ci } }, 4128c2ecf20Sopenharmony_ci }, 4138c2ecf20Sopenharmony_ci [CX88_BOARD_KWORLD_DVB_T] = { 4148c2ecf20Sopenharmony_ci .name = "KWorld/VStream XPert DVB-T", 4158c2ecf20Sopenharmony_ci .tuner_type = UNSET, 4168c2ecf20Sopenharmony_ci .radio_type = UNSET, 4178c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 4188c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 4198c2ecf20Sopenharmony_ci .input = { { 4208c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 4218c2ecf20Sopenharmony_ci .vmux = 1, 4228c2ecf20Sopenharmony_ci .gpio0 = 0x0700, 4238c2ecf20Sopenharmony_ci .gpio2 = 0x0101, 4248c2ecf20Sopenharmony_ci }, { 4258c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 4268c2ecf20Sopenharmony_ci .vmux = 2, 4278c2ecf20Sopenharmony_ci .gpio0 = 0x0700, 4288c2ecf20Sopenharmony_ci .gpio2 = 0x0101, 4298c2ecf20Sopenharmony_ci } }, 4308c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 4318c2ecf20Sopenharmony_ci }, 4328c2ecf20Sopenharmony_ci [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1] = { 4338c2ecf20Sopenharmony_ci .name = "DViCO FusionHDTV DVB-T1", 4348c2ecf20Sopenharmony_ci .tuner_type = UNSET, /* No analog tuner */ 4358c2ecf20Sopenharmony_ci .radio_type = UNSET, 4368c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 4378c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 4388c2ecf20Sopenharmony_ci .input = { { 4398c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 4408c2ecf20Sopenharmony_ci .vmux = 1, 4418c2ecf20Sopenharmony_ci .gpio0 = 0x000027df, 4428c2ecf20Sopenharmony_ci }, { 4438c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 4448c2ecf20Sopenharmony_ci .vmux = 2, 4458c2ecf20Sopenharmony_ci .gpio0 = 0x000027df, 4468c2ecf20Sopenharmony_ci } }, 4478c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 4488c2ecf20Sopenharmony_ci }, 4498c2ecf20Sopenharmony_ci [CX88_BOARD_KWORLD_LTV883] = { 4508c2ecf20Sopenharmony_ci .name = "KWorld LTV883RF", 4518c2ecf20Sopenharmony_ci .tuner_type = TUNER_TNF_8831BGFF, 4528c2ecf20Sopenharmony_ci .radio_type = UNSET, 4538c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 4548c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 4558c2ecf20Sopenharmony_ci .input = { { 4568c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 4578c2ecf20Sopenharmony_ci .vmux = 0, 4588c2ecf20Sopenharmony_ci .gpio0 = 0x07f8, 4598c2ecf20Sopenharmony_ci }, { 4608c2ecf20Sopenharmony_ci .type = CX88_VMUX_DEBUG, 4618c2ecf20Sopenharmony_ci .vmux = 0, 4628c2ecf20Sopenharmony_ci .gpio0 = 0x07f9, // mono from tuner chip 4638c2ecf20Sopenharmony_ci }, { 4648c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 4658c2ecf20Sopenharmony_ci .vmux = 1, 4668c2ecf20Sopenharmony_ci .gpio0 = 0x000007fa, 4678c2ecf20Sopenharmony_ci }, { 4688c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 4698c2ecf20Sopenharmony_ci .vmux = 2, 4708c2ecf20Sopenharmony_ci .gpio0 = 0x000007fa, 4718c2ecf20Sopenharmony_ci } }, 4728c2ecf20Sopenharmony_ci .radio = { 4738c2ecf20Sopenharmony_ci .type = CX88_RADIO, 4748c2ecf20Sopenharmony_ci .gpio0 = 0x000007f8, 4758c2ecf20Sopenharmony_ci }, 4768c2ecf20Sopenharmony_ci }, 4778c2ecf20Sopenharmony_ci [CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q] = { 4788c2ecf20Sopenharmony_ci .name = "DViCO FusionHDTV 3 Gold-Q", 4798c2ecf20Sopenharmony_ci .tuner_type = TUNER_MICROTUNE_4042FI5, 4808c2ecf20Sopenharmony_ci .radio_type = UNSET, 4818c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 4828c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 4838c2ecf20Sopenharmony_ci /* 4848c2ecf20Sopenharmony_ci * GPIO[0] resets DT3302 DTV receiver 4858c2ecf20Sopenharmony_ci * 0 - reset asserted 4868c2ecf20Sopenharmony_ci * 1 - normal operation 4878c2ecf20Sopenharmony_ci * GPIO[1] mutes analog audio output connector 4888c2ecf20Sopenharmony_ci * 0 - enable selected source 4898c2ecf20Sopenharmony_ci * 1 - mute 4908c2ecf20Sopenharmony_ci * GPIO[2] selects source for analog audio output connector 4918c2ecf20Sopenharmony_ci * 0 - analog audio input connector on tab 4928c2ecf20Sopenharmony_ci * 1 - analog DAC output from CX23881 chip 4938c2ecf20Sopenharmony_ci * GPIO[3] selects RF input connector on tuner module 4948c2ecf20Sopenharmony_ci * 0 - RF connector labeled CABLE 4958c2ecf20Sopenharmony_ci * 1 - RF connector labeled ANT 4968c2ecf20Sopenharmony_ci * GPIO[4] selects high RF for QAM256 mode 4978c2ecf20Sopenharmony_ci * 0 - normal RF 4988c2ecf20Sopenharmony_ci * 1 - high RF 4998c2ecf20Sopenharmony_ci */ 5008c2ecf20Sopenharmony_ci .input = { { 5018c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 5028c2ecf20Sopenharmony_ci .vmux = 0, 5038c2ecf20Sopenharmony_ci .gpio0 = 0x0f0d, 5048c2ecf20Sopenharmony_ci }, { 5058c2ecf20Sopenharmony_ci .type = CX88_VMUX_CABLE, 5068c2ecf20Sopenharmony_ci .vmux = 0, 5078c2ecf20Sopenharmony_ci .gpio0 = 0x0f05, 5088c2ecf20Sopenharmony_ci }, { 5098c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 5108c2ecf20Sopenharmony_ci .vmux = 1, 5118c2ecf20Sopenharmony_ci .gpio0 = 0x0f00, 5128c2ecf20Sopenharmony_ci }, { 5138c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 5148c2ecf20Sopenharmony_ci .vmux = 2, 5158c2ecf20Sopenharmony_ci .gpio0 = 0x0f00, 5168c2ecf20Sopenharmony_ci } }, 5178c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 5188c2ecf20Sopenharmony_ci }, 5198c2ecf20Sopenharmony_ci [CX88_BOARD_HAUPPAUGE_DVB_T1] = { 5208c2ecf20Sopenharmony_ci .name = "Hauppauge Nova-T DVB-T", 5218c2ecf20Sopenharmony_ci .tuner_type = UNSET, 5228c2ecf20Sopenharmony_ci .radio_type = UNSET, 5238c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 5248c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 5258c2ecf20Sopenharmony_ci .input = { { 5268c2ecf20Sopenharmony_ci .type = CX88_VMUX_DVB, 5278c2ecf20Sopenharmony_ci .vmux = 0, 5288c2ecf20Sopenharmony_ci } }, 5298c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 5308c2ecf20Sopenharmony_ci }, 5318c2ecf20Sopenharmony_ci [CX88_BOARD_CONEXANT_DVB_T1] = { 5328c2ecf20Sopenharmony_ci .name = "Conexant DVB-T reference design", 5338c2ecf20Sopenharmony_ci .tuner_type = UNSET, 5348c2ecf20Sopenharmony_ci .radio_type = UNSET, 5358c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 5368c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 5378c2ecf20Sopenharmony_ci .input = { { 5388c2ecf20Sopenharmony_ci .type = CX88_VMUX_DVB, 5398c2ecf20Sopenharmony_ci .vmux = 0, 5408c2ecf20Sopenharmony_ci } }, 5418c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 5428c2ecf20Sopenharmony_ci }, 5438c2ecf20Sopenharmony_ci [CX88_BOARD_PROVIDEO_PV259] = { 5448c2ecf20Sopenharmony_ci .name = "Provideo PV259", 5458c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_FQ1216ME, 5468c2ecf20Sopenharmony_ci .radio_type = UNSET, 5478c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 5488c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 5498c2ecf20Sopenharmony_ci .input = { { 5508c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 5518c2ecf20Sopenharmony_ci .vmux = 0, 5528c2ecf20Sopenharmony_ci .audioroute = 1, 5538c2ecf20Sopenharmony_ci } }, 5548c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_BLACKBIRD, 5558c2ecf20Sopenharmony_ci }, 5568c2ecf20Sopenharmony_ci [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS] = { 5578c2ecf20Sopenharmony_ci .name = "DViCO FusionHDTV DVB-T Plus", 5588c2ecf20Sopenharmony_ci .tuner_type = UNSET, /* No analog tuner */ 5598c2ecf20Sopenharmony_ci .radio_type = UNSET, 5608c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 5618c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 5628c2ecf20Sopenharmony_ci .input = { { 5638c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 5648c2ecf20Sopenharmony_ci .vmux = 1, 5658c2ecf20Sopenharmony_ci .gpio0 = 0x000027df, 5668c2ecf20Sopenharmony_ci }, { 5678c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 5688c2ecf20Sopenharmony_ci .vmux = 2, 5698c2ecf20Sopenharmony_ci .gpio0 = 0x000027df, 5708c2ecf20Sopenharmony_ci } }, 5718c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 5728c2ecf20Sopenharmony_ci }, 5738c2ecf20Sopenharmony_ci [CX88_BOARD_DNTV_LIVE_DVB_T] = { 5748c2ecf20Sopenharmony_ci .name = "digitalnow DNTV Live! DVB-T", 5758c2ecf20Sopenharmony_ci .tuner_type = UNSET, 5768c2ecf20Sopenharmony_ci .radio_type = UNSET, 5778c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 5788c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 5798c2ecf20Sopenharmony_ci .input = { { 5808c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 5818c2ecf20Sopenharmony_ci .vmux = 1, 5828c2ecf20Sopenharmony_ci .gpio0 = 0x00000700, 5838c2ecf20Sopenharmony_ci .gpio2 = 0x00000101, 5848c2ecf20Sopenharmony_ci }, { 5858c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 5868c2ecf20Sopenharmony_ci .vmux = 2, 5878c2ecf20Sopenharmony_ci .gpio0 = 0x00000700, 5888c2ecf20Sopenharmony_ci .gpio2 = 0x00000101, 5898c2ecf20Sopenharmony_ci } }, 5908c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 5918c2ecf20Sopenharmony_ci }, 5928c2ecf20Sopenharmony_ci [CX88_BOARD_PCHDTV_HD3000] = { 5938c2ecf20Sopenharmony_ci .name = "pcHDTV HD3000 HDTV", 5948c2ecf20Sopenharmony_ci .tuner_type = TUNER_THOMSON_DTT761X, 5958c2ecf20Sopenharmony_ci .radio_type = UNSET, 5968c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 5978c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 5988c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT, 5998c2ecf20Sopenharmony_ci /* GPIO[2] = audio source for analog audio out connector 6008c2ecf20Sopenharmony_ci * 0 = analog audio input connector 6018c2ecf20Sopenharmony_ci * 1 = CX88 audio DACs 6028c2ecf20Sopenharmony_ci * 6038c2ecf20Sopenharmony_ci * GPIO[7] = input to CX88's audio/chroma ADC 6048c2ecf20Sopenharmony_ci * 0 = FM 10.7 MHz IF 6058c2ecf20Sopenharmony_ci * 1 = Sound 4.5 MHz IF 6068c2ecf20Sopenharmony_ci * 6078c2ecf20Sopenharmony_ci * GPIO[1,5,6] = Oren 51132 pins 27,35,28 respectively 6088c2ecf20Sopenharmony_ci * 6098c2ecf20Sopenharmony_ci * GPIO[16] = Remote control input 6108c2ecf20Sopenharmony_ci */ 6118c2ecf20Sopenharmony_ci .input = { { 6128c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 6138c2ecf20Sopenharmony_ci .vmux = 0, 6148c2ecf20Sopenharmony_ci .gpio0 = 0x00008484, 6158c2ecf20Sopenharmony_ci }, { 6168c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 6178c2ecf20Sopenharmony_ci .vmux = 1, 6188c2ecf20Sopenharmony_ci .gpio0 = 0x00008400, 6198c2ecf20Sopenharmony_ci }, { 6208c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 6218c2ecf20Sopenharmony_ci .vmux = 2, 6228c2ecf20Sopenharmony_ci .gpio0 = 0x00008400, 6238c2ecf20Sopenharmony_ci } }, 6248c2ecf20Sopenharmony_ci .radio = { 6258c2ecf20Sopenharmony_ci .type = CX88_RADIO, 6268c2ecf20Sopenharmony_ci .gpio0 = 0x00008404, 6278c2ecf20Sopenharmony_ci }, 6288c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 6298c2ecf20Sopenharmony_ci }, 6308c2ecf20Sopenharmony_ci [CX88_BOARD_HAUPPAUGE_ROSLYN] = { 6318c2ecf20Sopenharmony_ci // entry added by Kaustubh D. Bhalerao <bhalerao.1@osu.edu> 6328c2ecf20Sopenharmony_ci // GPIO values obtained from regspy, courtesy Sean Covel 6338c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV 28xxx (Roslyn) models", 6348c2ecf20Sopenharmony_ci .tuner_type = UNSET, 6358c2ecf20Sopenharmony_ci .radio_type = UNSET, 6368c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 6378c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 6388c2ecf20Sopenharmony_ci .input = { { 6398c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 6408c2ecf20Sopenharmony_ci .vmux = 0, 6418c2ecf20Sopenharmony_ci .gpio0 = 0xed1a, 6428c2ecf20Sopenharmony_ci .gpio2 = 0x00ff, 6438c2ecf20Sopenharmony_ci }, { 6448c2ecf20Sopenharmony_ci .type = CX88_VMUX_DEBUG, 6458c2ecf20Sopenharmony_ci .vmux = 0, 6468c2ecf20Sopenharmony_ci .gpio0 = 0xff01, 6478c2ecf20Sopenharmony_ci }, { 6488c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 6498c2ecf20Sopenharmony_ci .vmux = 1, 6508c2ecf20Sopenharmony_ci .gpio0 = 0xff02, 6518c2ecf20Sopenharmony_ci }, { 6528c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 6538c2ecf20Sopenharmony_ci .vmux = 2, 6548c2ecf20Sopenharmony_ci .gpio0 = 0xed92, 6558c2ecf20Sopenharmony_ci .gpio2 = 0x00ff, 6568c2ecf20Sopenharmony_ci } }, 6578c2ecf20Sopenharmony_ci .radio = { 6588c2ecf20Sopenharmony_ci .type = CX88_RADIO, 6598c2ecf20Sopenharmony_ci .gpio0 = 0xed96, 6608c2ecf20Sopenharmony_ci .gpio2 = 0x00ff, 6618c2ecf20Sopenharmony_ci }, 6628c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_BLACKBIRD, 6638c2ecf20Sopenharmony_ci }, 6648c2ecf20Sopenharmony_ci [CX88_BOARD_DIGITALLOGIC_MEC] = { 6658c2ecf20Sopenharmony_ci .name = "Digital-Logic MICROSPACE Entertainment Center (MEC)", 6668c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 6678c2ecf20Sopenharmony_ci .radio_type = UNSET, 6688c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 6698c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 6708c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT, 6718c2ecf20Sopenharmony_ci .input = { { 6728c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 6738c2ecf20Sopenharmony_ci .vmux = 0, 6748c2ecf20Sopenharmony_ci .gpio0 = 0x00009d80, 6758c2ecf20Sopenharmony_ci .audioroute = 1, 6768c2ecf20Sopenharmony_ci }, { 6778c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 6788c2ecf20Sopenharmony_ci .vmux = 1, 6798c2ecf20Sopenharmony_ci .gpio0 = 0x00009d76, 6808c2ecf20Sopenharmony_ci .audioroute = 1, 6818c2ecf20Sopenharmony_ci }, { 6828c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 6838c2ecf20Sopenharmony_ci .vmux = 2, 6848c2ecf20Sopenharmony_ci .gpio0 = 0x00009d76, 6858c2ecf20Sopenharmony_ci .audioroute = 1, 6868c2ecf20Sopenharmony_ci } }, 6878c2ecf20Sopenharmony_ci .radio = { 6888c2ecf20Sopenharmony_ci .type = CX88_RADIO, 6898c2ecf20Sopenharmony_ci .gpio0 = 0x00009d00, 6908c2ecf20Sopenharmony_ci .audioroute = 1, 6918c2ecf20Sopenharmony_ci }, 6928c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_BLACKBIRD, 6938c2ecf20Sopenharmony_ci }, 6948c2ecf20Sopenharmony_ci [CX88_BOARD_IODATA_GVBCTV7E] = { 6958c2ecf20Sopenharmony_ci .name = "IODATA GV/BCTV7E", 6968c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_FQ1286, 6978c2ecf20Sopenharmony_ci .radio_type = UNSET, 6988c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 6998c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 7008c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT, 7018c2ecf20Sopenharmony_ci .input = { { 7028c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 7038c2ecf20Sopenharmony_ci .vmux = 1, 7048c2ecf20Sopenharmony_ci .gpio1 = 0x0000e03f, 7058c2ecf20Sopenharmony_ci }, { 7068c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 7078c2ecf20Sopenharmony_ci .vmux = 2, 7088c2ecf20Sopenharmony_ci .gpio1 = 0x0000e07f, 7098c2ecf20Sopenharmony_ci }, { 7108c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 7118c2ecf20Sopenharmony_ci .vmux = 3, 7128c2ecf20Sopenharmony_ci .gpio1 = 0x0000e07f, 7138c2ecf20Sopenharmony_ci } } 7148c2ecf20Sopenharmony_ci }, 7158c2ecf20Sopenharmony_ci [CX88_BOARD_PIXELVIEW_PLAYTV_ULTRA_PRO] = { 7168c2ecf20Sopenharmony_ci .name = "PixelView PlayTV Ultra Pro (Stereo)", 7178c2ecf20Sopenharmony_ci /* May be also TUNER_YMEC_TVF_5533MF for NTSC/M or PAL/M */ 7188c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 7198c2ecf20Sopenharmony_ci .radio_type = UNSET, 7208c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 7218c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 7228c2ecf20Sopenharmony_ci /* 7238c2ecf20Sopenharmony_ci * Some variants use a tda9874 and so need the 7248c2ecf20Sopenharmony_ci * tvaudio module. 7258c2ecf20Sopenharmony_ci */ 7268c2ecf20Sopenharmony_ci .audio_chip = CX88_AUDIO_TVAUDIO, 7278c2ecf20Sopenharmony_ci .input = { { 7288c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 7298c2ecf20Sopenharmony_ci .vmux = 0, 7308c2ecf20Sopenharmony_ci .gpio0 = 0xbf61, /* internal decoder */ 7318c2ecf20Sopenharmony_ci }, { 7328c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 7338c2ecf20Sopenharmony_ci .vmux = 1, 7348c2ecf20Sopenharmony_ci .gpio0 = 0xbf63, 7358c2ecf20Sopenharmony_ci }, { 7368c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 7378c2ecf20Sopenharmony_ci .vmux = 2, 7388c2ecf20Sopenharmony_ci .gpio0 = 0xbf63, 7398c2ecf20Sopenharmony_ci } }, 7408c2ecf20Sopenharmony_ci .radio = { 7418c2ecf20Sopenharmony_ci .type = CX88_RADIO, 7428c2ecf20Sopenharmony_ci .gpio0 = 0xbf60, 7438c2ecf20Sopenharmony_ci }, 7448c2ecf20Sopenharmony_ci }, 7458c2ecf20Sopenharmony_ci [CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_T] = { 7468c2ecf20Sopenharmony_ci .name = "DViCO FusionHDTV 3 Gold-T", 7478c2ecf20Sopenharmony_ci .tuner_type = TUNER_THOMSON_DTT761X, 7488c2ecf20Sopenharmony_ci .radio_type = UNSET, 7498c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 7508c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 7518c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT, 7528c2ecf20Sopenharmony_ci .input = { { 7538c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 7548c2ecf20Sopenharmony_ci .vmux = 0, 7558c2ecf20Sopenharmony_ci .gpio0 = 0x97ed, 7568c2ecf20Sopenharmony_ci }, { 7578c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 7588c2ecf20Sopenharmony_ci .vmux = 1, 7598c2ecf20Sopenharmony_ci .gpio0 = 0x97e9, 7608c2ecf20Sopenharmony_ci }, { 7618c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 7628c2ecf20Sopenharmony_ci .vmux = 2, 7638c2ecf20Sopenharmony_ci .gpio0 = 0x97e9, 7648c2ecf20Sopenharmony_ci } }, 7658c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 7668c2ecf20Sopenharmony_ci }, 7678c2ecf20Sopenharmony_ci [CX88_BOARD_ADSTECH_DVB_T_PCI] = { 7688c2ecf20Sopenharmony_ci .name = "ADS Tech Instant TV DVB-T PCI", 7698c2ecf20Sopenharmony_ci .tuner_type = UNSET, 7708c2ecf20Sopenharmony_ci .radio_type = UNSET, 7718c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 7728c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 7738c2ecf20Sopenharmony_ci .input = { { 7748c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 7758c2ecf20Sopenharmony_ci .vmux = 1, 7768c2ecf20Sopenharmony_ci .gpio0 = 0x0700, 7778c2ecf20Sopenharmony_ci .gpio2 = 0x0101, 7788c2ecf20Sopenharmony_ci }, { 7798c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 7808c2ecf20Sopenharmony_ci .vmux = 2, 7818c2ecf20Sopenharmony_ci .gpio0 = 0x0700, 7828c2ecf20Sopenharmony_ci .gpio2 = 0x0101, 7838c2ecf20Sopenharmony_ci } }, 7848c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 7858c2ecf20Sopenharmony_ci }, 7868c2ecf20Sopenharmony_ci [CX88_BOARD_TERRATEC_CINERGY_1400_DVB_T1] = { 7878c2ecf20Sopenharmony_ci .name = "TerraTec Cinergy 1400 DVB-T", 7888c2ecf20Sopenharmony_ci .tuner_type = UNSET, 7898c2ecf20Sopenharmony_ci .input = { { 7908c2ecf20Sopenharmony_ci .type = CX88_VMUX_DVB, 7918c2ecf20Sopenharmony_ci .vmux = 0, 7928c2ecf20Sopenharmony_ci }, { 7938c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 7948c2ecf20Sopenharmony_ci .vmux = 2, 7958c2ecf20Sopenharmony_ci }, { 7968c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 7978c2ecf20Sopenharmony_ci .vmux = 2, 7988c2ecf20Sopenharmony_ci } }, 7998c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 8008c2ecf20Sopenharmony_ci }, 8018c2ecf20Sopenharmony_ci [CX88_BOARD_DVICO_FUSIONHDTV_5_GOLD] = { 8028c2ecf20Sopenharmony_ci .name = "DViCO FusionHDTV 5 Gold", 8038c2ecf20Sopenharmony_ci .tuner_type = TUNER_LG_TDVS_H06XF, /* TDVS-H062F */ 8048c2ecf20Sopenharmony_ci .radio_type = UNSET, 8058c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 8068c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 8078c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT, 8088c2ecf20Sopenharmony_ci .input = { { 8098c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 8108c2ecf20Sopenharmony_ci .vmux = 0, 8118c2ecf20Sopenharmony_ci .gpio0 = 0x87fd, 8128c2ecf20Sopenharmony_ci }, { 8138c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 8148c2ecf20Sopenharmony_ci .vmux = 1, 8158c2ecf20Sopenharmony_ci .gpio0 = 0x87f9, 8168c2ecf20Sopenharmony_ci }, { 8178c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 8188c2ecf20Sopenharmony_ci .vmux = 2, 8198c2ecf20Sopenharmony_ci .gpio0 = 0x87f9, 8208c2ecf20Sopenharmony_ci } }, 8218c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 8228c2ecf20Sopenharmony_ci }, 8238c2ecf20Sopenharmony_ci [CX88_BOARD_AVERMEDIA_ULTRATV_MC_550] = { 8248c2ecf20Sopenharmony_ci .name = "AverMedia UltraTV Media Center PCI 550", 8258c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_FM1236_MK3, 8268c2ecf20Sopenharmony_ci .radio_type = UNSET, 8278c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 8288c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 8298c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT, 8308c2ecf20Sopenharmony_ci .input = { { 8318c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 8328c2ecf20Sopenharmony_ci .vmux = 0, 8338c2ecf20Sopenharmony_ci .gpio0 = 0x0000cd73, 8348c2ecf20Sopenharmony_ci .audioroute = 1, 8358c2ecf20Sopenharmony_ci }, { 8368c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 8378c2ecf20Sopenharmony_ci .vmux = 1, 8388c2ecf20Sopenharmony_ci .gpio0 = 0x0000cd73, 8398c2ecf20Sopenharmony_ci .audioroute = 1, 8408c2ecf20Sopenharmony_ci }, { 8418c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 8428c2ecf20Sopenharmony_ci .vmux = 3, 8438c2ecf20Sopenharmony_ci .gpio0 = 0x0000cdb3, 8448c2ecf20Sopenharmony_ci .audioroute = 1, 8458c2ecf20Sopenharmony_ci } }, 8468c2ecf20Sopenharmony_ci .radio = { 8478c2ecf20Sopenharmony_ci .type = CX88_RADIO, 8488c2ecf20Sopenharmony_ci .vmux = 2, 8498c2ecf20Sopenharmony_ci .gpio0 = 0x0000cdf3, 8508c2ecf20Sopenharmony_ci .audioroute = 1, 8518c2ecf20Sopenharmony_ci }, 8528c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_BLACKBIRD, 8538c2ecf20Sopenharmony_ci }, 8548c2ecf20Sopenharmony_ci [CX88_BOARD_KWORLD_VSTREAM_EXPERT_DVD] = { 8558c2ecf20Sopenharmony_ci /* Alexander Wold <awold@bigfoot.com> */ 8568c2ecf20Sopenharmony_ci .name = "Kworld V-Stream Xpert DVD", 8578c2ecf20Sopenharmony_ci .tuner_type = UNSET, 8588c2ecf20Sopenharmony_ci .input = { { 8598c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 8608c2ecf20Sopenharmony_ci .vmux = 1, 8618c2ecf20Sopenharmony_ci .gpio0 = 0x03000000, 8628c2ecf20Sopenharmony_ci .gpio1 = 0x01000000, 8638c2ecf20Sopenharmony_ci .gpio2 = 0x02000000, 8648c2ecf20Sopenharmony_ci .gpio3 = 0x00100000, 8658c2ecf20Sopenharmony_ci }, { 8668c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 8678c2ecf20Sopenharmony_ci .vmux = 2, 8688c2ecf20Sopenharmony_ci .gpio0 = 0x03000000, 8698c2ecf20Sopenharmony_ci .gpio1 = 0x01000000, 8708c2ecf20Sopenharmony_ci .gpio2 = 0x02000000, 8718c2ecf20Sopenharmony_ci .gpio3 = 0x00100000, 8728c2ecf20Sopenharmony_ci } }, 8738c2ecf20Sopenharmony_ci }, 8748c2ecf20Sopenharmony_ci [CX88_BOARD_ATI_HDTVWONDER] = { 8758c2ecf20Sopenharmony_ci .name = "ATI HDTV Wonder", 8768c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_TUV1236D, 8778c2ecf20Sopenharmony_ci .radio_type = UNSET, 8788c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 8798c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 8808c2ecf20Sopenharmony_ci .input = { { 8818c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 8828c2ecf20Sopenharmony_ci .vmux = 0, 8838c2ecf20Sopenharmony_ci .gpio0 = 0x00000ff7, 8848c2ecf20Sopenharmony_ci .gpio1 = 0x000000ff, 8858c2ecf20Sopenharmony_ci .gpio2 = 0x00000001, 8868c2ecf20Sopenharmony_ci .gpio3 = 0x00000000, 8878c2ecf20Sopenharmony_ci }, { 8888c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 8898c2ecf20Sopenharmony_ci .vmux = 1, 8908c2ecf20Sopenharmony_ci .gpio0 = 0x00000ffe, 8918c2ecf20Sopenharmony_ci .gpio1 = 0x000000ff, 8928c2ecf20Sopenharmony_ci .gpio2 = 0x00000001, 8938c2ecf20Sopenharmony_ci .gpio3 = 0x00000000, 8948c2ecf20Sopenharmony_ci }, { 8958c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 8968c2ecf20Sopenharmony_ci .vmux = 2, 8978c2ecf20Sopenharmony_ci .gpio0 = 0x00000ffe, 8988c2ecf20Sopenharmony_ci .gpio1 = 0x000000ff, 8998c2ecf20Sopenharmony_ci .gpio2 = 0x00000001, 9008c2ecf20Sopenharmony_ci .gpio3 = 0x00000000, 9018c2ecf20Sopenharmony_ci } }, 9028c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 9038c2ecf20Sopenharmony_ci }, 9048c2ecf20Sopenharmony_ci [CX88_BOARD_WINFAST_DTV1000] = { 9058c2ecf20Sopenharmony_ci .name = "WinFast DTV1000-T", 9068c2ecf20Sopenharmony_ci .tuner_type = UNSET, 9078c2ecf20Sopenharmony_ci .radio_type = UNSET, 9088c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 9098c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 9108c2ecf20Sopenharmony_ci .input = { { 9118c2ecf20Sopenharmony_ci .type = CX88_VMUX_DVB, 9128c2ecf20Sopenharmony_ci .vmux = 0, 9138c2ecf20Sopenharmony_ci }, { 9148c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 9158c2ecf20Sopenharmony_ci .vmux = 1, 9168c2ecf20Sopenharmony_ci }, { 9178c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 9188c2ecf20Sopenharmony_ci .vmux = 2, 9198c2ecf20Sopenharmony_ci } }, 9208c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 9218c2ecf20Sopenharmony_ci }, 9228c2ecf20Sopenharmony_ci [CX88_BOARD_AVERTV_303] = { 9238c2ecf20Sopenharmony_ci .name = "AVerTV 303 (M126)", 9248c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 9258c2ecf20Sopenharmony_ci .radio_type = UNSET, 9268c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 9278c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 9288c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT, 9298c2ecf20Sopenharmony_ci .input = { { 9308c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 9318c2ecf20Sopenharmony_ci .vmux = 0, 9328c2ecf20Sopenharmony_ci .gpio0 = 0x00ff, 9338c2ecf20Sopenharmony_ci .gpio1 = 0xe09f, 9348c2ecf20Sopenharmony_ci .gpio2 = 0x0010, 9358c2ecf20Sopenharmony_ci .gpio3 = 0x0000, 9368c2ecf20Sopenharmony_ci }, { 9378c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 9388c2ecf20Sopenharmony_ci .vmux = 1, 9398c2ecf20Sopenharmony_ci .gpio0 = 0x00ff, 9408c2ecf20Sopenharmony_ci .gpio1 = 0xe05f, 9418c2ecf20Sopenharmony_ci .gpio2 = 0x0010, 9428c2ecf20Sopenharmony_ci .gpio3 = 0x0000, 9438c2ecf20Sopenharmony_ci }, { 9448c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 9458c2ecf20Sopenharmony_ci .vmux = 2, 9468c2ecf20Sopenharmony_ci .gpio0 = 0x00ff, 9478c2ecf20Sopenharmony_ci .gpio1 = 0xe05f, 9488c2ecf20Sopenharmony_ci .gpio2 = 0x0010, 9498c2ecf20Sopenharmony_ci .gpio3 = 0x0000, 9508c2ecf20Sopenharmony_ci } }, 9518c2ecf20Sopenharmony_ci }, 9528c2ecf20Sopenharmony_ci [CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1] = { 9538c2ecf20Sopenharmony_ci .name = "Hauppauge Nova-S-Plus DVB-S", 9548c2ecf20Sopenharmony_ci .tuner_type = UNSET, 9558c2ecf20Sopenharmony_ci .radio_type = UNSET, 9568c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 9578c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 9588c2ecf20Sopenharmony_ci .audio_chip = CX88_AUDIO_WM8775, 9598c2ecf20Sopenharmony_ci .i2sinputcntl = 2, 9608c2ecf20Sopenharmony_ci .input = { { 9618c2ecf20Sopenharmony_ci .type = CX88_VMUX_DVB, 9628c2ecf20Sopenharmony_ci .vmux = 0, 9638c2ecf20Sopenharmony_ci /* 2: Line-In */ 9648c2ecf20Sopenharmony_ci .audioroute = 2, 9658c2ecf20Sopenharmony_ci }, { 9668c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 9678c2ecf20Sopenharmony_ci .vmux = 1, 9688c2ecf20Sopenharmony_ci /* 2: Line-In */ 9698c2ecf20Sopenharmony_ci .audioroute = 2, 9708c2ecf20Sopenharmony_ci }, { 9718c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 9728c2ecf20Sopenharmony_ci .vmux = 2, 9738c2ecf20Sopenharmony_ci /* 2: Line-In */ 9748c2ecf20Sopenharmony_ci .audioroute = 2, 9758c2ecf20Sopenharmony_ci } }, 9768c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 9778c2ecf20Sopenharmony_ci }, 9788c2ecf20Sopenharmony_ci [CX88_BOARD_HAUPPAUGE_NOVASE2_S1] = { 9798c2ecf20Sopenharmony_ci .name = "Hauppauge Nova-SE2 DVB-S", 9808c2ecf20Sopenharmony_ci .tuner_type = UNSET, 9818c2ecf20Sopenharmony_ci .radio_type = UNSET, 9828c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 9838c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 9848c2ecf20Sopenharmony_ci .input = { { 9858c2ecf20Sopenharmony_ci .type = CX88_VMUX_DVB, 9868c2ecf20Sopenharmony_ci .vmux = 0, 9878c2ecf20Sopenharmony_ci } }, 9888c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 9898c2ecf20Sopenharmony_ci }, 9908c2ecf20Sopenharmony_ci [CX88_BOARD_KWORLD_DVBS_100] = { 9918c2ecf20Sopenharmony_ci .name = "KWorld DVB-S 100", 9928c2ecf20Sopenharmony_ci .tuner_type = UNSET, 9938c2ecf20Sopenharmony_ci .radio_type = UNSET, 9948c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 9958c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 9968c2ecf20Sopenharmony_ci .audio_chip = CX88_AUDIO_WM8775, 9978c2ecf20Sopenharmony_ci .input = { { 9988c2ecf20Sopenharmony_ci .type = CX88_VMUX_DVB, 9998c2ecf20Sopenharmony_ci .vmux = 0, 10008c2ecf20Sopenharmony_ci /* 2: Line-In */ 10018c2ecf20Sopenharmony_ci .audioroute = 2, 10028c2ecf20Sopenharmony_ci }, { 10038c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 10048c2ecf20Sopenharmony_ci .vmux = 1, 10058c2ecf20Sopenharmony_ci /* 2: Line-In */ 10068c2ecf20Sopenharmony_ci .audioroute = 2, 10078c2ecf20Sopenharmony_ci }, { 10088c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 10098c2ecf20Sopenharmony_ci .vmux = 2, 10108c2ecf20Sopenharmony_ci /* 2: Line-In */ 10118c2ecf20Sopenharmony_ci .audioroute = 2, 10128c2ecf20Sopenharmony_ci } }, 10138c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 10148c2ecf20Sopenharmony_ci }, 10158c2ecf20Sopenharmony_ci [CX88_BOARD_HAUPPAUGE_HVR1100] = { 10168c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-HVR1100 DVB-T/Hybrid", 10178c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, 10188c2ecf20Sopenharmony_ci .radio_type = UNSET, 10198c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 10208c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 10218c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT, 10228c2ecf20Sopenharmony_ci .input = { { 10238c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 10248c2ecf20Sopenharmony_ci .vmux = 0, 10258c2ecf20Sopenharmony_ci }, { 10268c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 10278c2ecf20Sopenharmony_ci .vmux = 1, 10288c2ecf20Sopenharmony_ci }, { 10298c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 10308c2ecf20Sopenharmony_ci .vmux = 2, 10318c2ecf20Sopenharmony_ci } }, 10328c2ecf20Sopenharmony_ci /* fixme: Add radio support */ 10338c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 10348c2ecf20Sopenharmony_ci }, 10358c2ecf20Sopenharmony_ci [CX88_BOARD_HAUPPAUGE_HVR1100LP] = { 10368c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-HVR1100 DVB-T/Hybrid (Low Profile)", 10378c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, 10388c2ecf20Sopenharmony_ci .radio_type = UNSET, 10398c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 10408c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 10418c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT, 10428c2ecf20Sopenharmony_ci .input = { { 10438c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 10448c2ecf20Sopenharmony_ci .vmux = 0, 10458c2ecf20Sopenharmony_ci }, { 10468c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 10478c2ecf20Sopenharmony_ci .vmux = 1, 10488c2ecf20Sopenharmony_ci } }, 10498c2ecf20Sopenharmony_ci /* fixme: Add radio support */ 10508c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 10518c2ecf20Sopenharmony_ci }, 10528c2ecf20Sopenharmony_ci [CX88_BOARD_DNTV_LIVE_DVB_T_PRO] = { 10538c2ecf20Sopenharmony_ci .name = "digitalnow DNTV Live! DVB-T Pro", 10548c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, 10558c2ecf20Sopenharmony_ci .radio_type = UNSET, 10568c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 10578c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 10588c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE | 10598c2ecf20Sopenharmony_ci TDA9887_PORT2_ACTIVE, 10608c2ecf20Sopenharmony_ci .input = { { 10618c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 10628c2ecf20Sopenharmony_ci .vmux = 0, 10638c2ecf20Sopenharmony_ci .gpio0 = 0xf80808, 10648c2ecf20Sopenharmony_ci }, { 10658c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 10668c2ecf20Sopenharmony_ci .vmux = 1, 10678c2ecf20Sopenharmony_ci .gpio0 = 0xf80808, 10688c2ecf20Sopenharmony_ci }, { 10698c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 10708c2ecf20Sopenharmony_ci .vmux = 2, 10718c2ecf20Sopenharmony_ci .gpio0 = 0xf80808, 10728c2ecf20Sopenharmony_ci } }, 10738c2ecf20Sopenharmony_ci .radio = { 10748c2ecf20Sopenharmony_ci .type = CX88_RADIO, 10758c2ecf20Sopenharmony_ci .gpio0 = 0xf80808, 10768c2ecf20Sopenharmony_ci }, 10778c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 10788c2ecf20Sopenharmony_ci }, 10798c2ecf20Sopenharmony_ci [CX88_BOARD_KWORLD_DVB_T_CX22702] = { 10808c2ecf20Sopenharmony_ci /* Kworld V-stream Xpert DVB-T with Thomson tuner */ 10818c2ecf20Sopenharmony_ci /* DTT 7579 Conexant CX22702-19 Conexant CX2388x */ 10828c2ecf20Sopenharmony_ci /* Manenti Marco <marco_manenti@colman.it> */ 10838c2ecf20Sopenharmony_ci .name = "KWorld/VStream XPert DVB-T with cx22702", 10848c2ecf20Sopenharmony_ci .tuner_type = UNSET, 10858c2ecf20Sopenharmony_ci .radio_type = UNSET, 10868c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 10878c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 10888c2ecf20Sopenharmony_ci .input = { { 10898c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 10908c2ecf20Sopenharmony_ci .vmux = 1, 10918c2ecf20Sopenharmony_ci .gpio0 = 0x0700, 10928c2ecf20Sopenharmony_ci .gpio2 = 0x0101, 10938c2ecf20Sopenharmony_ci }, { 10948c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 10958c2ecf20Sopenharmony_ci .vmux = 2, 10968c2ecf20Sopenharmony_ci .gpio0 = 0x0700, 10978c2ecf20Sopenharmony_ci .gpio2 = 0x0101, 10988c2ecf20Sopenharmony_ci } }, 10998c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 11008c2ecf20Sopenharmony_ci }, 11018c2ecf20Sopenharmony_ci [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL] = { 11028c2ecf20Sopenharmony_ci .name = "DViCO FusionHDTV DVB-T Dual Digital", 11038c2ecf20Sopenharmony_ci .tuner_type = UNSET, /* No analog tuner */ 11048c2ecf20Sopenharmony_ci .radio_type = UNSET, 11058c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 11068c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 11078c2ecf20Sopenharmony_ci .input = { { 11088c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 11098c2ecf20Sopenharmony_ci .vmux = 1, 11108c2ecf20Sopenharmony_ci .gpio0 = 0x000067df, 11118c2ecf20Sopenharmony_ci }, { 11128c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 11138c2ecf20Sopenharmony_ci .vmux = 2, 11148c2ecf20Sopenharmony_ci .gpio0 = 0x000067df, 11158c2ecf20Sopenharmony_ci } }, 11168c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 11178c2ecf20Sopenharmony_ci }, 11188c2ecf20Sopenharmony_ci [CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT] = { 11198c2ecf20Sopenharmony_ci .name = "KWorld HardwareMpegTV XPert", 11208c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_TDA8290, 11218c2ecf20Sopenharmony_ci .radio_type = UNSET, 11228c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 11238c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 11248c2ecf20Sopenharmony_ci .input = { { 11258c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 11268c2ecf20Sopenharmony_ci .vmux = 0, 11278c2ecf20Sopenharmony_ci .gpio0 = 0x3de2, 11288c2ecf20Sopenharmony_ci .gpio2 = 0x00ff, 11298c2ecf20Sopenharmony_ci }, { 11308c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 11318c2ecf20Sopenharmony_ci .vmux = 1, 11328c2ecf20Sopenharmony_ci .gpio0 = 0x3de6, 11338c2ecf20Sopenharmony_ci .audioroute = 1, 11348c2ecf20Sopenharmony_ci }, { 11358c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 11368c2ecf20Sopenharmony_ci .vmux = 2, 11378c2ecf20Sopenharmony_ci .gpio0 = 0x3de6, 11388c2ecf20Sopenharmony_ci .audioroute = 1, 11398c2ecf20Sopenharmony_ci } }, 11408c2ecf20Sopenharmony_ci .radio = { 11418c2ecf20Sopenharmony_ci .type = CX88_RADIO, 11428c2ecf20Sopenharmony_ci .gpio0 = 0x3de6, 11438c2ecf20Sopenharmony_ci .gpio2 = 0x00ff, 11448c2ecf20Sopenharmony_ci }, 11458c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_BLACKBIRD, 11468c2ecf20Sopenharmony_ci }, 11478c2ecf20Sopenharmony_ci [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID] = { 11488c2ecf20Sopenharmony_ci .name = "DViCO FusionHDTV DVB-T Hybrid", 11498c2ecf20Sopenharmony_ci .tuner_type = TUNER_THOMSON_FE6600, 11508c2ecf20Sopenharmony_ci .radio_type = UNSET, 11518c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 11528c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 11538c2ecf20Sopenharmony_ci .input = { { 11548c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 11558c2ecf20Sopenharmony_ci .vmux = 0, 11568c2ecf20Sopenharmony_ci .gpio0 = 0x0000a75f, 11578c2ecf20Sopenharmony_ci }, { 11588c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 11598c2ecf20Sopenharmony_ci .vmux = 1, 11608c2ecf20Sopenharmony_ci .gpio0 = 0x0000a75b, 11618c2ecf20Sopenharmony_ci }, { 11628c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 11638c2ecf20Sopenharmony_ci .vmux = 2, 11648c2ecf20Sopenharmony_ci .gpio0 = 0x0000a75b, 11658c2ecf20Sopenharmony_ci } }, 11668c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 11678c2ecf20Sopenharmony_ci }, 11688c2ecf20Sopenharmony_ci [CX88_BOARD_PCHDTV_HD5500] = { 11698c2ecf20Sopenharmony_ci .name = "pcHDTV HD5500 HDTV", 11708c2ecf20Sopenharmony_ci .tuner_type = TUNER_LG_TDVS_H06XF, /* TDVS-H064F */ 11718c2ecf20Sopenharmony_ci .radio_type = UNSET, 11728c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 11738c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 11748c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT, 11758c2ecf20Sopenharmony_ci .input = { { 11768c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 11778c2ecf20Sopenharmony_ci .vmux = 0, 11788c2ecf20Sopenharmony_ci .gpio0 = 0x87fd, 11798c2ecf20Sopenharmony_ci }, { 11808c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 11818c2ecf20Sopenharmony_ci .vmux = 1, 11828c2ecf20Sopenharmony_ci .gpio0 = 0x87f9, 11838c2ecf20Sopenharmony_ci }, { 11848c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 11858c2ecf20Sopenharmony_ci .vmux = 2, 11868c2ecf20Sopenharmony_ci .gpio0 = 0x87f9, 11878c2ecf20Sopenharmony_ci } }, 11888c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 11898c2ecf20Sopenharmony_ci }, 11908c2ecf20Sopenharmony_ci [CX88_BOARD_KWORLD_MCE200_DELUXE] = { 11918c2ecf20Sopenharmony_ci /* 11928c2ecf20Sopenharmony_ci * FIXME: tested TV input only, disabled composite, 11938c2ecf20Sopenharmony_ci * svideo and radio until they can be tested also. 11948c2ecf20Sopenharmony_ci */ 11958c2ecf20Sopenharmony_ci .name = "Kworld MCE 200 Deluxe", 11968c2ecf20Sopenharmony_ci .tuner_type = TUNER_TENA_9533_DI, 11978c2ecf20Sopenharmony_ci .radio_type = UNSET, 11988c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT, 11998c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 12008c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 12018c2ecf20Sopenharmony_ci .input = { { 12028c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 12038c2ecf20Sopenharmony_ci .vmux = 0, 12048c2ecf20Sopenharmony_ci .gpio0 = 0x0000BDE6 12058c2ecf20Sopenharmony_ci } }, 12068c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_BLACKBIRD, 12078c2ecf20Sopenharmony_ci }, 12088c2ecf20Sopenharmony_ci [CX88_BOARD_PIXELVIEW_PLAYTV_P7000] = { 12098c2ecf20Sopenharmony_ci /* FIXME: SVideo, Composite and FM inputs are untested */ 12108c2ecf20Sopenharmony_ci .name = "PixelView PlayTV P7000", 12118c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 12128c2ecf20Sopenharmony_ci .radio_type = UNSET, 12138c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 12148c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 12158c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE | 12168c2ecf20Sopenharmony_ci TDA9887_PORT2_ACTIVE, 12178c2ecf20Sopenharmony_ci .input = { { 12188c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 12198c2ecf20Sopenharmony_ci .vmux = 0, 12208c2ecf20Sopenharmony_ci .gpio0 = 0x5da6, 12218c2ecf20Sopenharmony_ci } }, 12228c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_BLACKBIRD, 12238c2ecf20Sopenharmony_ci }, 12248c2ecf20Sopenharmony_ci [CX88_BOARD_NPGTECH_REALTV_TOP10FM] = { 12258c2ecf20Sopenharmony_ci .name = "NPG Tech Real TV FM Top 10", 12268c2ecf20Sopenharmony_ci .tuner_type = TUNER_TNF_5335MF, /* Actually a TNF9535 */ 12278c2ecf20Sopenharmony_ci .radio_type = UNSET, 12288c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 12298c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 12308c2ecf20Sopenharmony_ci .input = { { 12318c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 12328c2ecf20Sopenharmony_ci .vmux = 0, 12338c2ecf20Sopenharmony_ci .gpio0 = 0x0788, 12348c2ecf20Sopenharmony_ci }, { 12358c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 12368c2ecf20Sopenharmony_ci .vmux = 1, 12378c2ecf20Sopenharmony_ci .gpio0 = 0x078b, 12388c2ecf20Sopenharmony_ci }, { 12398c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 12408c2ecf20Sopenharmony_ci .vmux = 2, 12418c2ecf20Sopenharmony_ci .gpio0 = 0x078b, 12428c2ecf20Sopenharmony_ci } }, 12438c2ecf20Sopenharmony_ci .radio = { 12448c2ecf20Sopenharmony_ci .type = CX88_RADIO, 12458c2ecf20Sopenharmony_ci .gpio0 = 0x074a, 12468c2ecf20Sopenharmony_ci }, 12478c2ecf20Sopenharmony_ci }, 12488c2ecf20Sopenharmony_ci [CX88_BOARD_WINFAST_DTV2000H] = { 12498c2ecf20Sopenharmony_ci .name = "WinFast DTV2000 H", 12508c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, 12518c2ecf20Sopenharmony_ci .radio_type = UNSET, 12528c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 12538c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 12548c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT, 12558c2ecf20Sopenharmony_ci .input = { { 12568c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 12578c2ecf20Sopenharmony_ci .vmux = 0, 12588c2ecf20Sopenharmony_ci .gpio0 = 0x00017304, 12598c2ecf20Sopenharmony_ci .gpio1 = 0x00008203, 12608c2ecf20Sopenharmony_ci .gpio2 = 0x00017304, 12618c2ecf20Sopenharmony_ci .gpio3 = 0x02000000, 12628c2ecf20Sopenharmony_ci }, { 12638c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 12648c2ecf20Sopenharmony_ci .vmux = 1, 12658c2ecf20Sopenharmony_ci .gpio0 = 0x0001d701, 12668c2ecf20Sopenharmony_ci .gpio1 = 0x0000b207, 12678c2ecf20Sopenharmony_ci .gpio2 = 0x0001d701, 12688c2ecf20Sopenharmony_ci .gpio3 = 0x02000000, 12698c2ecf20Sopenharmony_ci }, { 12708c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE2, 12718c2ecf20Sopenharmony_ci .vmux = 2, 12728c2ecf20Sopenharmony_ci .gpio0 = 0x0001d503, 12738c2ecf20Sopenharmony_ci .gpio1 = 0x0000b207, 12748c2ecf20Sopenharmony_ci .gpio2 = 0x0001d503, 12758c2ecf20Sopenharmony_ci .gpio3 = 0x02000000, 12768c2ecf20Sopenharmony_ci }, { 12778c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 12788c2ecf20Sopenharmony_ci .vmux = 3, 12798c2ecf20Sopenharmony_ci .gpio0 = 0x0001d701, 12808c2ecf20Sopenharmony_ci .gpio1 = 0x0000b207, 12818c2ecf20Sopenharmony_ci .gpio2 = 0x0001d701, 12828c2ecf20Sopenharmony_ci .gpio3 = 0x02000000, 12838c2ecf20Sopenharmony_ci } }, 12848c2ecf20Sopenharmony_ci .radio = { 12858c2ecf20Sopenharmony_ci .type = CX88_RADIO, 12868c2ecf20Sopenharmony_ci .gpio0 = 0x00015702, 12878c2ecf20Sopenharmony_ci .gpio1 = 0x0000f207, 12888c2ecf20Sopenharmony_ci .gpio2 = 0x00015702, 12898c2ecf20Sopenharmony_ci .gpio3 = 0x02000000, 12908c2ecf20Sopenharmony_ci }, 12918c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 12928c2ecf20Sopenharmony_ci }, 12938c2ecf20Sopenharmony_ci [CX88_BOARD_WINFAST_DTV2000H_J] = { 12948c2ecf20Sopenharmony_ci .name = "WinFast DTV2000 H rev. J", 12958c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_FMD1216MEX_MK3, 12968c2ecf20Sopenharmony_ci .radio_type = UNSET, 12978c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 12988c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 12998c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT, 13008c2ecf20Sopenharmony_ci .input = { { 13018c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 13028c2ecf20Sopenharmony_ci .vmux = 0, 13038c2ecf20Sopenharmony_ci .gpio0 = 0x00017300, 13048c2ecf20Sopenharmony_ci .gpio1 = 0x00008207, 13058c2ecf20Sopenharmony_ci .gpio2 = 0x00000000, 13068c2ecf20Sopenharmony_ci .gpio3 = 0x02000000, 13078c2ecf20Sopenharmony_ci }, { 13088c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 13098c2ecf20Sopenharmony_ci .vmux = 0, 13108c2ecf20Sopenharmony_ci .gpio0 = 0x00018300, 13118c2ecf20Sopenharmony_ci .gpio1 = 0x0000f207, 13128c2ecf20Sopenharmony_ci .gpio2 = 0x00017304, 13138c2ecf20Sopenharmony_ci .gpio3 = 0x02000000, 13148c2ecf20Sopenharmony_ci }, { 13158c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 13168c2ecf20Sopenharmony_ci .vmux = 1, 13178c2ecf20Sopenharmony_ci .gpio0 = 0x00018301, 13188c2ecf20Sopenharmony_ci .gpio1 = 0x0000f207, 13198c2ecf20Sopenharmony_ci .gpio2 = 0x00017304, 13208c2ecf20Sopenharmony_ci .gpio3 = 0x02000000, 13218c2ecf20Sopenharmony_ci }, { 13228c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 13238c2ecf20Sopenharmony_ci .vmux = 2, 13248c2ecf20Sopenharmony_ci .gpio0 = 0x00018301, 13258c2ecf20Sopenharmony_ci .gpio1 = 0x0000f207, 13268c2ecf20Sopenharmony_ci .gpio2 = 0x00017304, 13278c2ecf20Sopenharmony_ci .gpio3 = 0x02000000, 13288c2ecf20Sopenharmony_ci } }, 13298c2ecf20Sopenharmony_ci .radio = { 13308c2ecf20Sopenharmony_ci .type = CX88_RADIO, 13318c2ecf20Sopenharmony_ci .gpio0 = 0x00015702, 13328c2ecf20Sopenharmony_ci .gpio1 = 0x0000f207, 13338c2ecf20Sopenharmony_ci .gpio2 = 0x00015702, 13348c2ecf20Sopenharmony_ci .gpio3 = 0x02000000, 13358c2ecf20Sopenharmony_ci }, 13368c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 13378c2ecf20Sopenharmony_ci }, 13388c2ecf20Sopenharmony_ci [CX88_BOARD_GENIATECH_DVBS] = { 13398c2ecf20Sopenharmony_ci .name = "Geniatech DVB-S", 13408c2ecf20Sopenharmony_ci .tuner_type = UNSET, 13418c2ecf20Sopenharmony_ci .radio_type = UNSET, 13428c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 13438c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 13448c2ecf20Sopenharmony_ci .input = { { 13458c2ecf20Sopenharmony_ci .type = CX88_VMUX_DVB, 13468c2ecf20Sopenharmony_ci .vmux = 0, 13478c2ecf20Sopenharmony_ci }, { 13488c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 13498c2ecf20Sopenharmony_ci .vmux = 1, 13508c2ecf20Sopenharmony_ci } }, 13518c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 13528c2ecf20Sopenharmony_ci }, 13538c2ecf20Sopenharmony_ci [CX88_BOARD_HAUPPAUGE_HVR3000] = { 13548c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-HVR3000 TriMode Analog/DVB-S/DVB-T", 13558c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, 13568c2ecf20Sopenharmony_ci .radio_type = UNSET, 13578c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 13588c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 13598c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT, 13608c2ecf20Sopenharmony_ci .audio_chip = CX88_AUDIO_WM8775, 13618c2ecf20Sopenharmony_ci .input = { { 13628c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 13638c2ecf20Sopenharmony_ci .vmux = 0, 13648c2ecf20Sopenharmony_ci .gpio0 = 0x84bf, 13658c2ecf20Sopenharmony_ci /* 1: TV Audio / FM Mono */ 13668c2ecf20Sopenharmony_ci .audioroute = 1, 13678c2ecf20Sopenharmony_ci }, { 13688c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 13698c2ecf20Sopenharmony_ci .vmux = 1, 13708c2ecf20Sopenharmony_ci .gpio0 = 0x84bf, 13718c2ecf20Sopenharmony_ci /* 2: Line-In */ 13728c2ecf20Sopenharmony_ci .audioroute = 2, 13738c2ecf20Sopenharmony_ci }, { 13748c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 13758c2ecf20Sopenharmony_ci .vmux = 2, 13768c2ecf20Sopenharmony_ci .gpio0 = 0x84bf, 13778c2ecf20Sopenharmony_ci /* 2: Line-In */ 13788c2ecf20Sopenharmony_ci .audioroute = 2, 13798c2ecf20Sopenharmony_ci } }, 13808c2ecf20Sopenharmony_ci .radio = { 13818c2ecf20Sopenharmony_ci .type = CX88_RADIO, 13828c2ecf20Sopenharmony_ci .gpio0 = 0x84bf, 13838c2ecf20Sopenharmony_ci /* 4: FM Stereo (untested) */ 13848c2ecf20Sopenharmony_ci .audioroute = 8, 13858c2ecf20Sopenharmony_ci }, 13868c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 13878c2ecf20Sopenharmony_ci .num_frontends = 2, 13888c2ecf20Sopenharmony_ci }, 13898c2ecf20Sopenharmony_ci [CX88_BOARD_NORWOOD_MICRO] = { 13908c2ecf20Sopenharmony_ci .name = "Norwood Micro TV Tuner", 13918c2ecf20Sopenharmony_ci .tuner_type = TUNER_TNF_5335MF, 13928c2ecf20Sopenharmony_ci .radio_type = UNSET, 13938c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 13948c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 13958c2ecf20Sopenharmony_ci .input = { { 13968c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 13978c2ecf20Sopenharmony_ci .vmux = 0, 13988c2ecf20Sopenharmony_ci .gpio0 = 0x0709, 13998c2ecf20Sopenharmony_ci }, { 14008c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 14018c2ecf20Sopenharmony_ci .vmux = 1, 14028c2ecf20Sopenharmony_ci .gpio0 = 0x070b, 14038c2ecf20Sopenharmony_ci }, { 14048c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 14058c2ecf20Sopenharmony_ci .vmux = 2, 14068c2ecf20Sopenharmony_ci .gpio0 = 0x070b, 14078c2ecf20Sopenharmony_ci } }, 14088c2ecf20Sopenharmony_ci }, 14098c2ecf20Sopenharmony_ci [CX88_BOARD_TE_DTV_250_OEM_SWANN] = { 14108c2ecf20Sopenharmony_ci .name = "Shenzhen Tungsten Ages Tech TE-DTV-250 / Swann OEM", 14118c2ecf20Sopenharmony_ci .tuner_type = TUNER_LG_PAL_NEW_TAPC, 14128c2ecf20Sopenharmony_ci .radio_type = UNSET, 14138c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 14148c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 14158c2ecf20Sopenharmony_ci .input = { { 14168c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 14178c2ecf20Sopenharmony_ci .vmux = 0, 14188c2ecf20Sopenharmony_ci .gpio0 = 0x003fffff, 14198c2ecf20Sopenharmony_ci .gpio1 = 0x00e00000, 14208c2ecf20Sopenharmony_ci .gpio2 = 0x003fffff, 14218c2ecf20Sopenharmony_ci .gpio3 = 0x02000000, 14228c2ecf20Sopenharmony_ci }, { 14238c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 14248c2ecf20Sopenharmony_ci .vmux = 1, 14258c2ecf20Sopenharmony_ci .gpio0 = 0x003fffff, 14268c2ecf20Sopenharmony_ci .gpio1 = 0x00e00000, 14278c2ecf20Sopenharmony_ci .gpio2 = 0x003fffff, 14288c2ecf20Sopenharmony_ci .gpio3 = 0x02000000, 14298c2ecf20Sopenharmony_ci }, { 14308c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 14318c2ecf20Sopenharmony_ci .vmux = 2, 14328c2ecf20Sopenharmony_ci .gpio0 = 0x003fffff, 14338c2ecf20Sopenharmony_ci .gpio1 = 0x00e00000, 14348c2ecf20Sopenharmony_ci .gpio2 = 0x003fffff, 14358c2ecf20Sopenharmony_ci .gpio3 = 0x02000000, 14368c2ecf20Sopenharmony_ci } }, 14378c2ecf20Sopenharmony_ci }, 14388c2ecf20Sopenharmony_ci [CX88_BOARD_HAUPPAUGE_HVR1300] = { 14398c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder", 14408c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, 14418c2ecf20Sopenharmony_ci .radio_type = UNSET, 14428c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 14438c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 14448c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT, 14458c2ecf20Sopenharmony_ci .audio_chip = CX88_AUDIO_WM8775, 14468c2ecf20Sopenharmony_ci /* 14478c2ecf20Sopenharmony_ci * gpio0 as reported by Mike Crash <mike AT mikecrash.com> 14488c2ecf20Sopenharmony_ci */ 14498c2ecf20Sopenharmony_ci .input = { { 14508c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 14518c2ecf20Sopenharmony_ci .vmux = 0, 14528c2ecf20Sopenharmony_ci .gpio0 = 0xef88, 14538c2ecf20Sopenharmony_ci /* 1: TV Audio / FM Mono */ 14548c2ecf20Sopenharmony_ci .audioroute = 1, 14558c2ecf20Sopenharmony_ci }, { 14568c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 14578c2ecf20Sopenharmony_ci .vmux = 1, 14588c2ecf20Sopenharmony_ci .gpio0 = 0xef88, 14598c2ecf20Sopenharmony_ci /* 2: Line-In */ 14608c2ecf20Sopenharmony_ci .audioroute = 2, 14618c2ecf20Sopenharmony_ci }, { 14628c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 14638c2ecf20Sopenharmony_ci .vmux = 2, 14648c2ecf20Sopenharmony_ci .gpio0 = 0xef88, 14658c2ecf20Sopenharmony_ci /* 2: Line-In */ 14668c2ecf20Sopenharmony_ci .audioroute = 2, 14678c2ecf20Sopenharmony_ci } }, 14688c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB | CX88_MPEG_BLACKBIRD, 14698c2ecf20Sopenharmony_ci .radio = { 14708c2ecf20Sopenharmony_ci .type = CX88_RADIO, 14718c2ecf20Sopenharmony_ci .gpio0 = 0xef88, 14728c2ecf20Sopenharmony_ci /* 4: FM Stereo (untested) */ 14738c2ecf20Sopenharmony_ci .audioroute = 8, 14748c2ecf20Sopenharmony_ci }, 14758c2ecf20Sopenharmony_ci }, 14768c2ecf20Sopenharmony_ci [CX88_BOARD_SAMSUNG_SMT_7020] = { 14778c2ecf20Sopenharmony_ci .name = "Samsung SMT 7020 DVB-S", 14788c2ecf20Sopenharmony_ci .tuner_type = UNSET, 14798c2ecf20Sopenharmony_ci .radio_type = UNSET, 14808c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 14818c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 14828c2ecf20Sopenharmony_ci .input = { { 14838c2ecf20Sopenharmony_ci .type = CX88_VMUX_DVB, 14848c2ecf20Sopenharmony_ci .vmux = 0, 14858c2ecf20Sopenharmony_ci } }, 14868c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 14878c2ecf20Sopenharmony_ci }, 14888c2ecf20Sopenharmony_ci [CX88_BOARD_ADSTECH_PTV_390] = { 14898c2ecf20Sopenharmony_ci .name = "ADS Tech Instant Video PCI", 14908c2ecf20Sopenharmony_ci .tuner_type = UNSET, 14918c2ecf20Sopenharmony_ci .radio_type = UNSET, 14928c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 14938c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 14948c2ecf20Sopenharmony_ci .input = { { 14958c2ecf20Sopenharmony_ci .type = CX88_VMUX_DEBUG, 14968c2ecf20Sopenharmony_ci .vmux = 3, 14978c2ecf20Sopenharmony_ci .gpio0 = 0x04ff, 14988c2ecf20Sopenharmony_ci }, { 14998c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 15008c2ecf20Sopenharmony_ci .vmux = 1, 15018c2ecf20Sopenharmony_ci .gpio0 = 0x07fa, 15028c2ecf20Sopenharmony_ci }, { 15038c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 15048c2ecf20Sopenharmony_ci .vmux = 2, 15058c2ecf20Sopenharmony_ci .gpio0 = 0x07fa, 15068c2ecf20Sopenharmony_ci } }, 15078c2ecf20Sopenharmony_ci }, 15088c2ecf20Sopenharmony_ci [CX88_BOARD_PINNACLE_PCTV_HD_800i] = { 15098c2ecf20Sopenharmony_ci .name = "Pinnacle PCTV HD 800i", 15108c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC5000, 15118c2ecf20Sopenharmony_ci .radio_type = UNSET, 15128c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 15138c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 15148c2ecf20Sopenharmony_ci .input = { { 15158c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 15168c2ecf20Sopenharmony_ci .vmux = 0, 15178c2ecf20Sopenharmony_ci .gpio0 = 0x04fb, 15188c2ecf20Sopenharmony_ci .gpio1 = 0x10ff, 15198c2ecf20Sopenharmony_ci }, { 15208c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 15218c2ecf20Sopenharmony_ci .vmux = 1, 15228c2ecf20Sopenharmony_ci .gpio0 = 0x04fb, 15238c2ecf20Sopenharmony_ci .gpio1 = 0x10ef, 15248c2ecf20Sopenharmony_ci .audioroute = 1, 15258c2ecf20Sopenharmony_ci }, { 15268c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 15278c2ecf20Sopenharmony_ci .vmux = 2, 15288c2ecf20Sopenharmony_ci .gpio0 = 0x04fb, 15298c2ecf20Sopenharmony_ci .gpio1 = 0x10ef, 15308c2ecf20Sopenharmony_ci .audioroute = 1, 15318c2ecf20Sopenharmony_ci } }, 15328c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 15338c2ecf20Sopenharmony_ci }, 15348c2ecf20Sopenharmony_ci [CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO] = { 15358c2ecf20Sopenharmony_ci .name = "DViCO FusionHDTV 5 PCI nano", 15368c2ecf20Sopenharmony_ci /* xc3008 tuner, digital only for now */ 15378c2ecf20Sopenharmony_ci .tuner_type = UNSET, 15388c2ecf20Sopenharmony_ci .radio_type = UNSET, 15398c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 15408c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 15418c2ecf20Sopenharmony_ci .input = { { 15428c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 15438c2ecf20Sopenharmony_ci .vmux = 0, 15448c2ecf20Sopenharmony_ci .gpio0 = 0x000027df, /* Unconfirmed */ 15458c2ecf20Sopenharmony_ci }, { 15468c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 15478c2ecf20Sopenharmony_ci .vmux = 1, 15488c2ecf20Sopenharmony_ci .gpio0 = 0x000027df, /* Unconfirmed */ 15498c2ecf20Sopenharmony_ci .audioroute = 1, 15508c2ecf20Sopenharmony_ci }, { 15518c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 15528c2ecf20Sopenharmony_ci .vmux = 2, 15538c2ecf20Sopenharmony_ci .gpio0 = 0x000027df, /* Unconfirmed */ 15548c2ecf20Sopenharmony_ci .audioroute = 1, 15558c2ecf20Sopenharmony_ci } }, 15568c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 15578c2ecf20Sopenharmony_ci }, 15588c2ecf20Sopenharmony_ci [CX88_BOARD_PINNACLE_HYBRID_PCTV] = { 15598c2ecf20Sopenharmony_ci .name = "Pinnacle Hybrid PCTV", 15608c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC2028, 15618c2ecf20Sopenharmony_ci .tuner_addr = 0x61, 15628c2ecf20Sopenharmony_ci .radio_type = UNSET, 15638c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 15648c2ecf20Sopenharmony_ci .input = { { 15658c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 15668c2ecf20Sopenharmony_ci .vmux = 0, 15678c2ecf20Sopenharmony_ci .gpio0 = 0x004ff, 15688c2ecf20Sopenharmony_ci .gpio1 = 0x010ff, 15698c2ecf20Sopenharmony_ci .gpio2 = 0x00001, 15708c2ecf20Sopenharmony_ci }, { 15718c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 15728c2ecf20Sopenharmony_ci .vmux = 1, 15738c2ecf20Sopenharmony_ci .gpio0 = 0x004fb, 15748c2ecf20Sopenharmony_ci .gpio1 = 0x010ef, 15758c2ecf20Sopenharmony_ci .audioroute = 1, 15768c2ecf20Sopenharmony_ci }, { 15778c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 15788c2ecf20Sopenharmony_ci .vmux = 2, 15798c2ecf20Sopenharmony_ci .gpio0 = 0x004fb, 15808c2ecf20Sopenharmony_ci .gpio1 = 0x010ef, 15818c2ecf20Sopenharmony_ci .audioroute = 1, 15828c2ecf20Sopenharmony_ci } }, 15838c2ecf20Sopenharmony_ci .radio = { 15848c2ecf20Sopenharmony_ci .type = CX88_RADIO, 15858c2ecf20Sopenharmony_ci .gpio0 = 0x004ff, 15868c2ecf20Sopenharmony_ci .gpio1 = 0x010ff, 15878c2ecf20Sopenharmony_ci .gpio2 = 0x0ff, 15888c2ecf20Sopenharmony_ci }, 15898c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 15908c2ecf20Sopenharmony_ci }, 15918c2ecf20Sopenharmony_ci /* Terry Wu <terrywu2009@gmail.com> */ 15928c2ecf20Sopenharmony_ci /* TV Audio : set GPIO 2, 18, 19 value to 0, 1, 0 */ 15938c2ecf20Sopenharmony_ci /* FM Audio : set GPIO 2, 18, 19 value to 0, 0, 0 */ 15948c2ecf20Sopenharmony_ci /* Line-in Audio : set GPIO 2, 18, 19 value to 0, 1, 1 */ 15958c2ecf20Sopenharmony_ci /* Mute Audio : set GPIO 2 value to 1 */ 15968c2ecf20Sopenharmony_ci [CX88_BOARD_WINFAST_TV2000_XP_GLOBAL] = { 15978c2ecf20Sopenharmony_ci .name = "Leadtek TV2000 XP Global", 15988c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC2028, 15998c2ecf20Sopenharmony_ci .tuner_addr = 0x61, 16008c2ecf20Sopenharmony_ci .radio_type = UNSET, 16018c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 16028c2ecf20Sopenharmony_ci .input = { { 16038c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 16048c2ecf20Sopenharmony_ci .vmux = 0, 16058c2ecf20Sopenharmony_ci .gpio0 = 0x0400, /* pin 2 = 0 */ 16068c2ecf20Sopenharmony_ci .gpio1 = 0x0000, 16078c2ecf20Sopenharmony_ci .gpio2 = 0x0C04, /* pin 18 = 1, pin 19 = 0 */ 16088c2ecf20Sopenharmony_ci .gpio3 = 0x0000, 16098c2ecf20Sopenharmony_ci }, { 16108c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 16118c2ecf20Sopenharmony_ci .vmux = 1, 16128c2ecf20Sopenharmony_ci .gpio0 = 0x0400, /* pin 2 = 0 */ 16138c2ecf20Sopenharmony_ci .gpio1 = 0x0000, 16148c2ecf20Sopenharmony_ci .gpio2 = 0x0C0C, /* pin 18 = 1, pin 19 = 1 */ 16158c2ecf20Sopenharmony_ci .gpio3 = 0x0000, 16168c2ecf20Sopenharmony_ci }, { 16178c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 16188c2ecf20Sopenharmony_ci .vmux = 2, 16198c2ecf20Sopenharmony_ci .gpio0 = 0x0400, /* pin 2 = 0 */ 16208c2ecf20Sopenharmony_ci .gpio1 = 0x0000, 16218c2ecf20Sopenharmony_ci .gpio2 = 0x0C0C, /* pin 18 = 1, pin 19 = 1 */ 16228c2ecf20Sopenharmony_ci .gpio3 = 0x0000, 16238c2ecf20Sopenharmony_ci } }, 16248c2ecf20Sopenharmony_ci .radio = { 16258c2ecf20Sopenharmony_ci .type = CX88_RADIO, 16268c2ecf20Sopenharmony_ci .gpio0 = 0x0400, /* pin 2 = 0 */ 16278c2ecf20Sopenharmony_ci .gpio1 = 0x0000, 16288c2ecf20Sopenharmony_ci .gpio2 = 0x0C00, /* pin 18 = 0, pin 19 = 0 */ 16298c2ecf20Sopenharmony_ci .gpio3 = 0x0000, 16308c2ecf20Sopenharmony_ci }, 16318c2ecf20Sopenharmony_ci }, 16328c2ecf20Sopenharmony_ci [CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F36] = { 16338c2ecf20Sopenharmony_ci .name = "Leadtek TV2000 XP Global (SC4100)", 16348c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC4000, 16358c2ecf20Sopenharmony_ci .tuner_addr = 0x61, 16368c2ecf20Sopenharmony_ci .radio_type = UNSET, 16378c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 16388c2ecf20Sopenharmony_ci .input = { { 16398c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 16408c2ecf20Sopenharmony_ci .vmux = 0, 16418c2ecf20Sopenharmony_ci .gpio0 = 0x0400, /* pin 2 = 0 */ 16428c2ecf20Sopenharmony_ci .gpio1 = 0x0000, 16438c2ecf20Sopenharmony_ci .gpio2 = 0x0C04, /* pin 18 = 1, pin 19 = 0 */ 16448c2ecf20Sopenharmony_ci .gpio3 = 0x0000, 16458c2ecf20Sopenharmony_ci }, { 16468c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 16478c2ecf20Sopenharmony_ci .vmux = 1, 16488c2ecf20Sopenharmony_ci .gpio0 = 0x0400, /* pin 2 = 0 */ 16498c2ecf20Sopenharmony_ci .gpio1 = 0x0000, 16508c2ecf20Sopenharmony_ci .gpio2 = 0x0C0C, /* pin 18 = 1, pin 19 = 1 */ 16518c2ecf20Sopenharmony_ci .gpio3 = 0x0000, 16528c2ecf20Sopenharmony_ci }, { 16538c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 16548c2ecf20Sopenharmony_ci .vmux = 2, 16558c2ecf20Sopenharmony_ci .gpio0 = 0x0400, /* pin 2 = 0 */ 16568c2ecf20Sopenharmony_ci .gpio1 = 0x0000, 16578c2ecf20Sopenharmony_ci .gpio2 = 0x0C0C, /* pin 18 = 1, pin 19 = 1 */ 16588c2ecf20Sopenharmony_ci .gpio3 = 0x0000, 16598c2ecf20Sopenharmony_ci } }, 16608c2ecf20Sopenharmony_ci .radio = { 16618c2ecf20Sopenharmony_ci .type = CX88_RADIO, 16628c2ecf20Sopenharmony_ci .gpio0 = 0x0400, /* pin 2 = 0 */ 16638c2ecf20Sopenharmony_ci .gpio1 = 0x0000, 16648c2ecf20Sopenharmony_ci .gpio2 = 0x0C00, /* pin 18 = 0, pin 19 = 0 */ 16658c2ecf20Sopenharmony_ci .gpio3 = 0x0000, 16668c2ecf20Sopenharmony_ci }, 16678c2ecf20Sopenharmony_ci }, 16688c2ecf20Sopenharmony_ci [CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F43] = { 16698c2ecf20Sopenharmony_ci .name = "Leadtek TV2000 XP Global (XC4100)", 16708c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC4000, 16718c2ecf20Sopenharmony_ci .tuner_addr = 0x61, 16728c2ecf20Sopenharmony_ci .radio_type = UNSET, 16738c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 16748c2ecf20Sopenharmony_ci .input = { { 16758c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 16768c2ecf20Sopenharmony_ci .vmux = 0, 16778c2ecf20Sopenharmony_ci .gpio0 = 0x0400, /* pin 2 = 0 */ 16788c2ecf20Sopenharmony_ci .gpio1 = 0x6040, /* pin 14 = 1, pin 13 = 0 */ 16798c2ecf20Sopenharmony_ci .gpio2 = 0x0000, 16808c2ecf20Sopenharmony_ci .gpio3 = 0x0000, 16818c2ecf20Sopenharmony_ci }, { 16828c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 16838c2ecf20Sopenharmony_ci .vmux = 1, 16848c2ecf20Sopenharmony_ci .gpio0 = 0x0400, /* pin 2 = 0 */ 16858c2ecf20Sopenharmony_ci .gpio1 = 0x6060, /* pin 14 = 1, pin 13 = 1 */ 16868c2ecf20Sopenharmony_ci .gpio2 = 0x0000, 16878c2ecf20Sopenharmony_ci .gpio3 = 0x0000, 16888c2ecf20Sopenharmony_ci }, { 16898c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 16908c2ecf20Sopenharmony_ci .vmux = 2, 16918c2ecf20Sopenharmony_ci .gpio0 = 0x0400, /* pin 2 = 0 */ 16928c2ecf20Sopenharmony_ci .gpio1 = 0x6060, /* pin 14 = 1, pin 13 = 1 */ 16938c2ecf20Sopenharmony_ci .gpio2 = 0x0000, 16948c2ecf20Sopenharmony_ci .gpio3 = 0x0000, 16958c2ecf20Sopenharmony_ci } }, 16968c2ecf20Sopenharmony_ci .radio = { 16978c2ecf20Sopenharmony_ci .type = CX88_RADIO, 16988c2ecf20Sopenharmony_ci .gpio0 = 0x0400, /* pin 2 = 0 */ 16998c2ecf20Sopenharmony_ci .gpio1 = 0x6000, /* pin 14 = 1, pin 13 = 0 */ 17008c2ecf20Sopenharmony_ci .gpio2 = 0x0000, 17018c2ecf20Sopenharmony_ci .gpio3 = 0x0000, 17028c2ecf20Sopenharmony_ci }, 17038c2ecf20Sopenharmony_ci }, 17048c2ecf20Sopenharmony_ci [CX88_BOARD_POWERCOLOR_REAL_ANGEL] = { 17058c2ecf20Sopenharmony_ci /* Long names may confuse LIRC. */ 17068c2ecf20Sopenharmony_ci .name = "PowerColor RA330", 17078c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC2028, 17088c2ecf20Sopenharmony_ci .tuner_addr = 0x61, 17098c2ecf20Sopenharmony_ci .input = { { 17108c2ecf20Sopenharmony_ci /* 17118c2ecf20Sopenharmony_ci * Due to the way the cx88 driver is written, 17128c2ecf20Sopenharmony_ci * there is no way to deactivate audio pass- 17138c2ecf20Sopenharmony_ci * through without this entry. Furthermore, if 17148c2ecf20Sopenharmony_ci * the TV mux entry is first, you get audio 17158c2ecf20Sopenharmony_ci * from the tuner on boot for a little while. 17168c2ecf20Sopenharmony_ci */ 17178c2ecf20Sopenharmony_ci .type = CX88_VMUX_DEBUG, 17188c2ecf20Sopenharmony_ci .vmux = 3, 17198c2ecf20Sopenharmony_ci .gpio0 = 0x00ff, 17208c2ecf20Sopenharmony_ci .gpio1 = 0xf39d, 17218c2ecf20Sopenharmony_ci .gpio3 = 0x0000, 17228c2ecf20Sopenharmony_ci }, { 17238c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 17248c2ecf20Sopenharmony_ci .vmux = 0, 17258c2ecf20Sopenharmony_ci .gpio0 = 0x00ff, 17268c2ecf20Sopenharmony_ci .gpio1 = 0xf35d, 17278c2ecf20Sopenharmony_ci .gpio3 = 0x0000, 17288c2ecf20Sopenharmony_ci }, { 17298c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 17308c2ecf20Sopenharmony_ci .vmux = 1, 17318c2ecf20Sopenharmony_ci .gpio0 = 0x00ff, 17328c2ecf20Sopenharmony_ci .gpio1 = 0xf37d, 17338c2ecf20Sopenharmony_ci .gpio3 = 0x0000, 17348c2ecf20Sopenharmony_ci }, { 17358c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 17368c2ecf20Sopenharmony_ci .vmux = 2, 17378c2ecf20Sopenharmony_ci .gpio0 = 0x000ff, 17388c2ecf20Sopenharmony_ci .gpio1 = 0x0f37d, 17398c2ecf20Sopenharmony_ci .gpio3 = 0x00000, 17408c2ecf20Sopenharmony_ci } }, 17418c2ecf20Sopenharmony_ci .radio = { 17428c2ecf20Sopenharmony_ci .type = CX88_RADIO, 17438c2ecf20Sopenharmony_ci .gpio0 = 0x000ff, 17448c2ecf20Sopenharmony_ci .gpio1 = 0x0f35d, 17458c2ecf20Sopenharmony_ci .gpio3 = 0x00000, 17468c2ecf20Sopenharmony_ci }, 17478c2ecf20Sopenharmony_ci }, 17488c2ecf20Sopenharmony_ci [CX88_BOARD_GENIATECH_X8000_MT] = { 17498c2ecf20Sopenharmony_ci /* Also PowerColor Real Angel 330 and Geniatech X800 OEM */ 17508c2ecf20Sopenharmony_ci .name = "Geniatech X8000-MT DVBT", 17518c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC2028, 17528c2ecf20Sopenharmony_ci .tuner_addr = 0x61, 17538c2ecf20Sopenharmony_ci .input = { { 17548c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 17558c2ecf20Sopenharmony_ci .vmux = 0, 17568c2ecf20Sopenharmony_ci .gpio0 = 0x00000000, 17578c2ecf20Sopenharmony_ci .gpio1 = 0x00e3e341, 17588c2ecf20Sopenharmony_ci .gpio2 = 0x00000000, 17598c2ecf20Sopenharmony_ci .gpio3 = 0x00000000, 17608c2ecf20Sopenharmony_ci }, { 17618c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 17628c2ecf20Sopenharmony_ci .vmux = 1, 17638c2ecf20Sopenharmony_ci .gpio0 = 0x00000000, 17648c2ecf20Sopenharmony_ci .gpio1 = 0x00e3e361, 17658c2ecf20Sopenharmony_ci .gpio2 = 0x00000000, 17668c2ecf20Sopenharmony_ci .gpio3 = 0x00000000, 17678c2ecf20Sopenharmony_ci }, { 17688c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 17698c2ecf20Sopenharmony_ci .vmux = 2, 17708c2ecf20Sopenharmony_ci .gpio0 = 0x00000000, 17718c2ecf20Sopenharmony_ci .gpio1 = 0x00e3e361, 17728c2ecf20Sopenharmony_ci .gpio2 = 0x00000000, 17738c2ecf20Sopenharmony_ci .gpio3 = 0x00000000, 17748c2ecf20Sopenharmony_ci } }, 17758c2ecf20Sopenharmony_ci .radio = { 17768c2ecf20Sopenharmony_ci .type = CX88_RADIO, 17778c2ecf20Sopenharmony_ci .gpio0 = 0x00000000, 17788c2ecf20Sopenharmony_ci .gpio1 = 0x00e3e341, 17798c2ecf20Sopenharmony_ci .gpio2 = 0x00000000, 17808c2ecf20Sopenharmony_ci .gpio3 = 0x00000000, 17818c2ecf20Sopenharmony_ci }, 17828c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 17838c2ecf20Sopenharmony_ci }, 17848c2ecf20Sopenharmony_ci [CX88_BOARD_NOTONLYTV_LV3H] = { 17858c2ecf20Sopenharmony_ci .name = "NotOnlyTV LV3H", 17868c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC2028, 17878c2ecf20Sopenharmony_ci .radio_type = UNSET, 17888c2ecf20Sopenharmony_ci .tuner_addr = 0x61, 17898c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 17908c2ecf20Sopenharmony_ci /* if gpio1:bit9 is enabled, DVB-T won't work */ 17918c2ecf20Sopenharmony_ci 17928c2ecf20Sopenharmony_ci .input = { { 17938c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 17948c2ecf20Sopenharmony_ci .vmux = 0, 17958c2ecf20Sopenharmony_ci .gpio0 = 0x0000, 17968c2ecf20Sopenharmony_ci .gpio1 = 0xa141, 17978c2ecf20Sopenharmony_ci .gpio2 = 0x0000, 17988c2ecf20Sopenharmony_ci }, { 17998c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 18008c2ecf20Sopenharmony_ci .vmux = 1, 18018c2ecf20Sopenharmony_ci .gpio0 = 0x0000, 18028c2ecf20Sopenharmony_ci .gpio1 = 0xa161, 18038c2ecf20Sopenharmony_ci .gpio2 = 0x0000, 18048c2ecf20Sopenharmony_ci }, { 18058c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 18068c2ecf20Sopenharmony_ci .vmux = 2, 18078c2ecf20Sopenharmony_ci .gpio0 = 0x0000, 18088c2ecf20Sopenharmony_ci .gpio1 = 0xa161, 18098c2ecf20Sopenharmony_ci .gpio2 = 0x0000, 18108c2ecf20Sopenharmony_ci } }, 18118c2ecf20Sopenharmony_ci .radio = { 18128c2ecf20Sopenharmony_ci .type = CX88_RADIO, 18138c2ecf20Sopenharmony_ci .gpio0 = 0x0000, 18148c2ecf20Sopenharmony_ci .gpio1 = 0xa141, 18158c2ecf20Sopenharmony_ci .gpio2 = 0x0000, 18168c2ecf20Sopenharmony_ci }, 18178c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 18188c2ecf20Sopenharmony_ci }, 18198c2ecf20Sopenharmony_ci [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO] = { 18208c2ecf20Sopenharmony_ci .name = "DViCO FusionHDTV DVB-T PRO", 18218c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC2028, 18228c2ecf20Sopenharmony_ci .tuner_addr = 0x61, 18238c2ecf20Sopenharmony_ci .radio_type = UNSET, 18248c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 18258c2ecf20Sopenharmony_ci .input = { { 18268c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 18278c2ecf20Sopenharmony_ci .vmux = 1, 18288c2ecf20Sopenharmony_ci .gpio0 = 0x000067df, 18298c2ecf20Sopenharmony_ci }, { 18308c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 18318c2ecf20Sopenharmony_ci .vmux = 2, 18328c2ecf20Sopenharmony_ci .gpio0 = 0x000067df, 18338c2ecf20Sopenharmony_ci } }, 18348c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 18358c2ecf20Sopenharmony_ci }, 18368c2ecf20Sopenharmony_ci [CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD] = { 18378c2ecf20Sopenharmony_ci .name = "DViCO FusionHDTV 7 Gold", 18388c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC5000, 18398c2ecf20Sopenharmony_ci .radio_type = UNSET, 18408c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 18418c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 18428c2ecf20Sopenharmony_ci .input = { { 18438c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 18448c2ecf20Sopenharmony_ci .vmux = 0, 18458c2ecf20Sopenharmony_ci .gpio0 = 0x10df, 18468c2ecf20Sopenharmony_ci }, { 18478c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 18488c2ecf20Sopenharmony_ci .vmux = 1, 18498c2ecf20Sopenharmony_ci .gpio0 = 0x16d9, 18508c2ecf20Sopenharmony_ci }, { 18518c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 18528c2ecf20Sopenharmony_ci .vmux = 2, 18538c2ecf20Sopenharmony_ci .gpio0 = 0x16d9, 18548c2ecf20Sopenharmony_ci } }, 18558c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 18568c2ecf20Sopenharmony_ci }, 18578c2ecf20Sopenharmony_ci [CX88_BOARD_PROLINK_PV_8000GT] = { 18588c2ecf20Sopenharmony_ci .name = "Prolink Pixelview MPEG 8000GT", 18598c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC2028, 18608c2ecf20Sopenharmony_ci .tuner_addr = 0x61, 18618c2ecf20Sopenharmony_ci .input = { { 18628c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 18638c2ecf20Sopenharmony_ci .vmux = 0, 18648c2ecf20Sopenharmony_ci .gpio0 = 0x0ff, 18658c2ecf20Sopenharmony_ci .gpio2 = 0x0cfb, 18668c2ecf20Sopenharmony_ci }, { 18678c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 18688c2ecf20Sopenharmony_ci .vmux = 1, 18698c2ecf20Sopenharmony_ci .gpio2 = 0x0cfb, 18708c2ecf20Sopenharmony_ci }, { 18718c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 18728c2ecf20Sopenharmony_ci .vmux = 2, 18738c2ecf20Sopenharmony_ci .gpio2 = 0x0cfb, 18748c2ecf20Sopenharmony_ci } }, 18758c2ecf20Sopenharmony_ci .radio = { 18768c2ecf20Sopenharmony_ci .type = CX88_RADIO, 18778c2ecf20Sopenharmony_ci .gpio2 = 0x0cfb, 18788c2ecf20Sopenharmony_ci }, 18798c2ecf20Sopenharmony_ci }, 18808c2ecf20Sopenharmony_ci [CX88_BOARD_PROLINK_PV_GLOBAL_XTREME] = { 18818c2ecf20Sopenharmony_ci .name = "Prolink Pixelview Global Extreme", 18828c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC2028, 18838c2ecf20Sopenharmony_ci .tuner_addr = 0x61, 18848c2ecf20Sopenharmony_ci .input = { { 18858c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 18868c2ecf20Sopenharmony_ci .vmux = 0, 18878c2ecf20Sopenharmony_ci .gpio0 = 0x04fb, 18888c2ecf20Sopenharmony_ci .gpio1 = 0x04080, 18898c2ecf20Sopenharmony_ci .gpio2 = 0x0cf7, 18908c2ecf20Sopenharmony_ci }, { 18918c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 18928c2ecf20Sopenharmony_ci .vmux = 1, 18938c2ecf20Sopenharmony_ci .gpio0 = 0x04fb, 18948c2ecf20Sopenharmony_ci .gpio1 = 0x04080, 18958c2ecf20Sopenharmony_ci .gpio2 = 0x0cfb, 18968c2ecf20Sopenharmony_ci }, { 18978c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 18988c2ecf20Sopenharmony_ci .vmux = 2, 18998c2ecf20Sopenharmony_ci .gpio0 = 0x04fb, 19008c2ecf20Sopenharmony_ci .gpio1 = 0x04080, 19018c2ecf20Sopenharmony_ci .gpio2 = 0x0cfb, 19028c2ecf20Sopenharmony_ci } }, 19038c2ecf20Sopenharmony_ci .radio = { 19048c2ecf20Sopenharmony_ci .type = CX88_RADIO, 19058c2ecf20Sopenharmony_ci .gpio0 = 0x04ff, 19068c2ecf20Sopenharmony_ci .gpio1 = 0x04080, 19078c2ecf20Sopenharmony_ci .gpio2 = 0x0cf7, 19088c2ecf20Sopenharmony_ci }, 19098c2ecf20Sopenharmony_ci }, 19108c2ecf20Sopenharmony_ci /* 19118c2ecf20Sopenharmony_ci * Both radio, analog and ATSC work with this board. 19128c2ecf20Sopenharmony_ci * However, for analog to work, s5h1409 gate should be open, 19138c2ecf20Sopenharmony_ci * otherwise, tuner-xc3028 won't be detected. 19148c2ecf20Sopenharmony_ci * A proper fix require using the newer i2c methods to add 19158c2ecf20Sopenharmony_ci * tuner-xc3028 without doing an i2c probe. 19168c2ecf20Sopenharmony_ci */ 19178c2ecf20Sopenharmony_ci [CX88_BOARD_KWORLD_ATSC_120] = { 19188c2ecf20Sopenharmony_ci .name = "Kworld PlusTV HD PCI 120 (ATSC 120)", 19198c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC2028, 19208c2ecf20Sopenharmony_ci .radio_type = UNSET, 19218c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 19228c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 19238c2ecf20Sopenharmony_ci .input = { { 19248c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 19258c2ecf20Sopenharmony_ci .vmux = 0, 19268c2ecf20Sopenharmony_ci .gpio0 = 0x000000ff, 19278c2ecf20Sopenharmony_ci .gpio1 = 0x0000f35d, 19288c2ecf20Sopenharmony_ci .gpio2 = 0x00000000, 19298c2ecf20Sopenharmony_ci }, { 19308c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 19318c2ecf20Sopenharmony_ci .vmux = 1, 19328c2ecf20Sopenharmony_ci .gpio0 = 0x000000ff, 19338c2ecf20Sopenharmony_ci .gpio1 = 0x0000f37e, 19348c2ecf20Sopenharmony_ci .gpio2 = 0x00000000, 19358c2ecf20Sopenharmony_ci }, { 19368c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 19378c2ecf20Sopenharmony_ci .vmux = 2, 19388c2ecf20Sopenharmony_ci .gpio0 = 0x000000ff, 19398c2ecf20Sopenharmony_ci .gpio1 = 0x0000f37e, 19408c2ecf20Sopenharmony_ci .gpio2 = 0x00000000, 19418c2ecf20Sopenharmony_ci } }, 19428c2ecf20Sopenharmony_ci .radio = { 19438c2ecf20Sopenharmony_ci .type = CX88_RADIO, 19448c2ecf20Sopenharmony_ci .gpio0 = 0x000000ff, 19458c2ecf20Sopenharmony_ci .gpio1 = 0x0000f35d, 19468c2ecf20Sopenharmony_ci .gpio2 = 0x00000000, 19478c2ecf20Sopenharmony_ci }, 19488c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 19498c2ecf20Sopenharmony_ci }, 19508c2ecf20Sopenharmony_ci [CX88_BOARD_HAUPPAUGE_HVR4000] = { 19518c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-HVR4000 DVB-S/S2/T/Hybrid", 19528c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, 19538c2ecf20Sopenharmony_ci .radio_type = UNSET, 19548c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 19558c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 19568c2ecf20Sopenharmony_ci .tda9887_conf = TDA9887_PRESENT, 19578c2ecf20Sopenharmony_ci .audio_chip = CX88_AUDIO_WM8775, 19588c2ecf20Sopenharmony_ci /* 19598c2ecf20Sopenharmony_ci * GPIO0 (WINTV2000) 19608c2ecf20Sopenharmony_ci * 19618c2ecf20Sopenharmony_ci * Analogue SAT DVB-T 19628c2ecf20Sopenharmony_ci * Antenna 0xc4bf 0xc4bb 19638c2ecf20Sopenharmony_ci * Composite 0xc4bf 0xc4bb 19648c2ecf20Sopenharmony_ci * S-Video 0xc4bf 0xc4bb 19658c2ecf20Sopenharmony_ci * Composite1 0xc4ff 0xc4fb 19668c2ecf20Sopenharmony_ci * S-Video1 0xc4ff 0xc4fb 19678c2ecf20Sopenharmony_ci * 19688c2ecf20Sopenharmony_ci * BIT VALUE FUNCTION GP{x}_IO 19698c2ecf20Sopenharmony_ci * 0 1 I:? 19708c2ecf20Sopenharmony_ci * 1 1 I:? 19718c2ecf20Sopenharmony_ci * 2 1 O:MPEG PORT 0=DVB-T 1=DVB-S 19728c2ecf20Sopenharmony_ci * 3 1 I:? 19738c2ecf20Sopenharmony_ci * 4 1 I:? 19748c2ecf20Sopenharmony_ci * 5 1 I:? 19758c2ecf20Sopenharmony_ci * 6 0 O:INPUT SELECTOR 0=INTERNAL 1=EXPANSION 19768c2ecf20Sopenharmony_ci * 7 1 O:DVB-T DEMOD RESET LOW 19778c2ecf20Sopenharmony_ci * 19788c2ecf20Sopenharmony_ci * BIT VALUE FUNCTION GP{x}_OE 19798c2ecf20Sopenharmony_ci * 8 0 I 19808c2ecf20Sopenharmony_ci * 9 0 I 19818c2ecf20Sopenharmony_ci * a 1 O 19828c2ecf20Sopenharmony_ci * b 0 I 19838c2ecf20Sopenharmony_ci * c 0 I 19848c2ecf20Sopenharmony_ci * d 0 I 19858c2ecf20Sopenharmony_ci * e 1 O 19868c2ecf20Sopenharmony_ci * f 1 O 19878c2ecf20Sopenharmony_ci * 19888c2ecf20Sopenharmony_ci * WM8775 ADC 19898c2ecf20Sopenharmony_ci * 19908c2ecf20Sopenharmony_ci * 1: TV Audio / FM Mono 19918c2ecf20Sopenharmony_ci * 2: Line-In 19928c2ecf20Sopenharmony_ci * 3: Line-In Expansion 19938c2ecf20Sopenharmony_ci * 4: FM Stereo 19948c2ecf20Sopenharmony_ci */ 19958c2ecf20Sopenharmony_ci .input = { { 19968c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 19978c2ecf20Sopenharmony_ci .vmux = 0, 19988c2ecf20Sopenharmony_ci .gpio0 = 0xc4bf, 19998c2ecf20Sopenharmony_ci /* 1: TV Audio / FM Mono */ 20008c2ecf20Sopenharmony_ci .audioroute = 1, 20018c2ecf20Sopenharmony_ci }, { 20028c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 20038c2ecf20Sopenharmony_ci .vmux = 1, 20048c2ecf20Sopenharmony_ci .gpio0 = 0xc4bf, 20058c2ecf20Sopenharmony_ci /* 2: Line-In */ 20068c2ecf20Sopenharmony_ci .audioroute = 2, 20078c2ecf20Sopenharmony_ci }, { 20088c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 20098c2ecf20Sopenharmony_ci .vmux = 2, 20108c2ecf20Sopenharmony_ci .gpio0 = 0xc4bf, 20118c2ecf20Sopenharmony_ci /* 2: Line-In */ 20128c2ecf20Sopenharmony_ci .audioroute = 2, 20138c2ecf20Sopenharmony_ci } }, 20148c2ecf20Sopenharmony_ci .radio = { 20158c2ecf20Sopenharmony_ci .type = CX88_RADIO, 20168c2ecf20Sopenharmony_ci .gpio0 = 0xc4bf, 20178c2ecf20Sopenharmony_ci /* 4: FM Stereo */ 20188c2ecf20Sopenharmony_ci .audioroute = 8, 20198c2ecf20Sopenharmony_ci }, 20208c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 20218c2ecf20Sopenharmony_ci .num_frontends = 2, 20228c2ecf20Sopenharmony_ci }, 20238c2ecf20Sopenharmony_ci [CX88_BOARD_HAUPPAUGE_HVR4000LITE] = { 20248c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-HVR4000(Lite) DVB-S/S2", 20258c2ecf20Sopenharmony_ci .tuner_type = UNSET, 20268c2ecf20Sopenharmony_ci .radio_type = UNSET, 20278c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 20288c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 20298c2ecf20Sopenharmony_ci .input = { { 20308c2ecf20Sopenharmony_ci .type = CX88_VMUX_DVB, 20318c2ecf20Sopenharmony_ci .vmux = 0, 20328c2ecf20Sopenharmony_ci } }, 20338c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 20348c2ecf20Sopenharmony_ci }, 20358c2ecf20Sopenharmony_ci [CX88_BOARD_TEVII_S420] = { 20368c2ecf20Sopenharmony_ci .name = "TeVii S420 DVB-S", 20378c2ecf20Sopenharmony_ci .tuner_type = UNSET, 20388c2ecf20Sopenharmony_ci .radio_type = UNSET, 20398c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 20408c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 20418c2ecf20Sopenharmony_ci .input = { { 20428c2ecf20Sopenharmony_ci .type = CX88_VMUX_DVB, 20438c2ecf20Sopenharmony_ci .vmux = 0, 20448c2ecf20Sopenharmony_ci } }, 20458c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 20468c2ecf20Sopenharmony_ci }, 20478c2ecf20Sopenharmony_ci [CX88_BOARD_TEVII_S460] = { 20488c2ecf20Sopenharmony_ci .name = "TeVii S460 DVB-S/S2", 20498c2ecf20Sopenharmony_ci .tuner_type = UNSET, 20508c2ecf20Sopenharmony_ci .radio_type = UNSET, 20518c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 20528c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 20538c2ecf20Sopenharmony_ci .input = { { 20548c2ecf20Sopenharmony_ci .type = CX88_VMUX_DVB, 20558c2ecf20Sopenharmony_ci .vmux = 0, 20568c2ecf20Sopenharmony_ci } }, 20578c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 20588c2ecf20Sopenharmony_ci }, 20598c2ecf20Sopenharmony_ci [CX88_BOARD_TEVII_S464] = { 20608c2ecf20Sopenharmony_ci .name = "TeVii S464 DVB-S/S2", 20618c2ecf20Sopenharmony_ci .tuner_type = UNSET, 20628c2ecf20Sopenharmony_ci .radio_type = UNSET, 20638c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 20648c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 20658c2ecf20Sopenharmony_ci .input = { { 20668c2ecf20Sopenharmony_ci .type = CX88_VMUX_DVB, 20678c2ecf20Sopenharmony_ci .vmux = 0, 20688c2ecf20Sopenharmony_ci } }, 20698c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 20708c2ecf20Sopenharmony_ci }, 20718c2ecf20Sopenharmony_ci [CX88_BOARD_OMICOM_SS4_PCI] = { 20728c2ecf20Sopenharmony_ci .name = "Omicom SS4 DVB-S/S2 PCI", 20738c2ecf20Sopenharmony_ci .tuner_type = UNSET, 20748c2ecf20Sopenharmony_ci .radio_type = UNSET, 20758c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 20768c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 20778c2ecf20Sopenharmony_ci .input = { { 20788c2ecf20Sopenharmony_ci .type = CX88_VMUX_DVB, 20798c2ecf20Sopenharmony_ci .vmux = 0, 20808c2ecf20Sopenharmony_ci } }, 20818c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 20828c2ecf20Sopenharmony_ci }, 20838c2ecf20Sopenharmony_ci [CX88_BOARD_TBS_8910] = { 20848c2ecf20Sopenharmony_ci .name = "TBS 8910 DVB-S", 20858c2ecf20Sopenharmony_ci .tuner_type = UNSET, 20868c2ecf20Sopenharmony_ci .radio_type = UNSET, 20878c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 20888c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 20898c2ecf20Sopenharmony_ci .input = { { 20908c2ecf20Sopenharmony_ci .type = CX88_VMUX_DVB, 20918c2ecf20Sopenharmony_ci .vmux = 0, 20928c2ecf20Sopenharmony_ci } }, 20938c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 20948c2ecf20Sopenharmony_ci }, 20958c2ecf20Sopenharmony_ci [CX88_BOARD_TBS_8920] = { 20968c2ecf20Sopenharmony_ci .name = "TBS 8920 DVB-S/S2", 20978c2ecf20Sopenharmony_ci .tuner_type = UNSET, 20988c2ecf20Sopenharmony_ci .radio_type = UNSET, 20998c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 21008c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 21018c2ecf20Sopenharmony_ci .input = { { 21028c2ecf20Sopenharmony_ci .type = CX88_VMUX_DVB, 21038c2ecf20Sopenharmony_ci .vmux = 0, 21048c2ecf20Sopenharmony_ci .gpio0 = 0x8080, 21058c2ecf20Sopenharmony_ci } }, 21068c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 21078c2ecf20Sopenharmony_ci }, 21088c2ecf20Sopenharmony_ci [CX88_BOARD_PROF_6200] = { 21098c2ecf20Sopenharmony_ci .name = "Prof 6200 DVB-S", 21108c2ecf20Sopenharmony_ci .tuner_type = UNSET, 21118c2ecf20Sopenharmony_ci .radio_type = UNSET, 21128c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 21138c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 21148c2ecf20Sopenharmony_ci .input = { { 21158c2ecf20Sopenharmony_ci .type = CX88_VMUX_DVB, 21168c2ecf20Sopenharmony_ci .vmux = 0, 21178c2ecf20Sopenharmony_ci } }, 21188c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 21198c2ecf20Sopenharmony_ci }, 21208c2ecf20Sopenharmony_ci [CX88_BOARD_PROF_7300] = { 21218c2ecf20Sopenharmony_ci .name = "PROF 7300 DVB-S/S2", 21228c2ecf20Sopenharmony_ci .tuner_type = UNSET, 21238c2ecf20Sopenharmony_ci .radio_type = UNSET, 21248c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 21258c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 21268c2ecf20Sopenharmony_ci .input = { { 21278c2ecf20Sopenharmony_ci .type = CX88_VMUX_DVB, 21288c2ecf20Sopenharmony_ci .vmux = 0, 21298c2ecf20Sopenharmony_ci } }, 21308c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 21318c2ecf20Sopenharmony_ci }, 21328c2ecf20Sopenharmony_ci [CX88_BOARD_SATTRADE_ST4200] = { 21338c2ecf20Sopenharmony_ci .name = "SATTRADE ST4200 DVB-S/S2", 21348c2ecf20Sopenharmony_ci .tuner_type = UNSET, 21358c2ecf20Sopenharmony_ci .radio_type = UNSET, 21368c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 21378c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 21388c2ecf20Sopenharmony_ci .input = { { 21398c2ecf20Sopenharmony_ci .type = CX88_VMUX_DVB, 21408c2ecf20Sopenharmony_ci .vmux = 0, 21418c2ecf20Sopenharmony_ci } }, 21428c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 21438c2ecf20Sopenharmony_ci }, 21448c2ecf20Sopenharmony_ci [CX88_BOARD_TERRATEC_CINERGY_HT_PCI_MKII] = { 21458c2ecf20Sopenharmony_ci .name = "Terratec Cinergy HT PCI MKII", 21468c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC2028, 21478c2ecf20Sopenharmony_ci .tuner_addr = 0x61, 21488c2ecf20Sopenharmony_ci .radio_type = UNSET, 21498c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 21508c2ecf20Sopenharmony_ci .input = { { 21518c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 21528c2ecf20Sopenharmony_ci .vmux = 0, 21538c2ecf20Sopenharmony_ci .gpio0 = 0x004ff, 21548c2ecf20Sopenharmony_ci .gpio1 = 0x010ff, 21558c2ecf20Sopenharmony_ci .gpio2 = 0x00001, 21568c2ecf20Sopenharmony_ci }, { 21578c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 21588c2ecf20Sopenharmony_ci .vmux = 1, 21598c2ecf20Sopenharmony_ci .gpio0 = 0x004fb, 21608c2ecf20Sopenharmony_ci .gpio1 = 0x010ef, 21618c2ecf20Sopenharmony_ci .audioroute = 1, 21628c2ecf20Sopenharmony_ci }, { 21638c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 21648c2ecf20Sopenharmony_ci .vmux = 2, 21658c2ecf20Sopenharmony_ci .gpio0 = 0x004fb, 21668c2ecf20Sopenharmony_ci .gpio1 = 0x010ef, 21678c2ecf20Sopenharmony_ci .audioroute = 1, 21688c2ecf20Sopenharmony_ci } }, 21698c2ecf20Sopenharmony_ci .radio = { 21708c2ecf20Sopenharmony_ci .type = CX88_RADIO, 21718c2ecf20Sopenharmony_ci .gpio0 = 0x004ff, 21728c2ecf20Sopenharmony_ci .gpio1 = 0x010ff, 21738c2ecf20Sopenharmony_ci .gpio2 = 0x0ff, 21748c2ecf20Sopenharmony_ci }, 21758c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 21768c2ecf20Sopenharmony_ci }, 21778c2ecf20Sopenharmony_ci [CX88_BOARD_HAUPPAUGE_IRONLY] = { 21788c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-IR Only", 21798c2ecf20Sopenharmony_ci .tuner_type = UNSET, 21808c2ecf20Sopenharmony_ci .radio_type = UNSET, 21818c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 21828c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 21838c2ecf20Sopenharmony_ci }, 21848c2ecf20Sopenharmony_ci [CX88_BOARD_WINFAST_DTV1800H] = { 21858c2ecf20Sopenharmony_ci .name = "Leadtek WinFast DTV1800 Hybrid", 21868c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC2028, 21878c2ecf20Sopenharmony_ci .radio_type = UNSET, 21888c2ecf20Sopenharmony_ci .tuner_addr = 0x61, 21898c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 21908c2ecf20Sopenharmony_ci /* 21918c2ecf20Sopenharmony_ci * GPIO setting 21928c2ecf20Sopenharmony_ci * 21938c2ecf20Sopenharmony_ci * 2: mute (0=off,1=on) 21948c2ecf20Sopenharmony_ci * 12: tuner reset pin 21958c2ecf20Sopenharmony_ci * 13: audio source (0=tuner audio,1=line in) 21968c2ecf20Sopenharmony_ci * 14: FM (0=on,1=off ???) 21978c2ecf20Sopenharmony_ci */ 21988c2ecf20Sopenharmony_ci .input = { { 21998c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 22008c2ecf20Sopenharmony_ci .vmux = 0, 22018c2ecf20Sopenharmony_ci .gpio0 = 0x0400, /* pin 2 = 0 */ 22028c2ecf20Sopenharmony_ci .gpio1 = 0x6040, /* pin 13 = 0, pin 14 = 1 */ 22038c2ecf20Sopenharmony_ci .gpio2 = 0x0000, 22048c2ecf20Sopenharmony_ci }, { 22058c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 22068c2ecf20Sopenharmony_ci .vmux = 1, 22078c2ecf20Sopenharmony_ci .gpio0 = 0x0400, /* pin 2 = 0 */ 22088c2ecf20Sopenharmony_ci .gpio1 = 0x6060, /* pin 13 = 1, pin 14 = 1 */ 22098c2ecf20Sopenharmony_ci .gpio2 = 0x0000, 22108c2ecf20Sopenharmony_ci }, { 22118c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 22128c2ecf20Sopenharmony_ci .vmux = 2, 22138c2ecf20Sopenharmony_ci .gpio0 = 0x0400, /* pin 2 = 0 */ 22148c2ecf20Sopenharmony_ci .gpio1 = 0x6060, /* pin 13 = 1, pin 14 = 1 */ 22158c2ecf20Sopenharmony_ci .gpio2 = 0x0000, 22168c2ecf20Sopenharmony_ci } }, 22178c2ecf20Sopenharmony_ci .radio = { 22188c2ecf20Sopenharmony_ci .type = CX88_RADIO, 22198c2ecf20Sopenharmony_ci .gpio0 = 0x0400, /* pin 2 = 0 */ 22208c2ecf20Sopenharmony_ci .gpio1 = 0x6000, /* pin 13 = 0, pin 14 = 0 */ 22218c2ecf20Sopenharmony_ci .gpio2 = 0x0000, 22228c2ecf20Sopenharmony_ci }, 22238c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 22248c2ecf20Sopenharmony_ci }, 22258c2ecf20Sopenharmony_ci [CX88_BOARD_WINFAST_DTV1800H_XC4000] = { 22268c2ecf20Sopenharmony_ci .name = "Leadtek WinFast DTV1800 H (XC4000)", 22278c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC4000, 22288c2ecf20Sopenharmony_ci .radio_type = UNSET, 22298c2ecf20Sopenharmony_ci .tuner_addr = 0x61, 22308c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 22318c2ecf20Sopenharmony_ci /* 22328c2ecf20Sopenharmony_ci * GPIO setting 22338c2ecf20Sopenharmony_ci * 22348c2ecf20Sopenharmony_ci * 2: mute (0=off,1=on) 22358c2ecf20Sopenharmony_ci * 12: tuner reset pin 22368c2ecf20Sopenharmony_ci * 13: audio source (0=tuner audio,1=line in) 22378c2ecf20Sopenharmony_ci * 14: FM (0=on,1=off ???) 22388c2ecf20Sopenharmony_ci */ 22398c2ecf20Sopenharmony_ci .input = { { 22408c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 22418c2ecf20Sopenharmony_ci .vmux = 0, 22428c2ecf20Sopenharmony_ci .gpio0 = 0x0400, /* pin 2 = 0 */ 22438c2ecf20Sopenharmony_ci .gpio1 = 0x6040, /* pin 13 = 0, pin 14 = 1 */ 22448c2ecf20Sopenharmony_ci .gpio2 = 0x0000, 22458c2ecf20Sopenharmony_ci }, { 22468c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 22478c2ecf20Sopenharmony_ci .vmux = 1, 22488c2ecf20Sopenharmony_ci .gpio0 = 0x0400, /* pin 2 = 0 */ 22498c2ecf20Sopenharmony_ci .gpio1 = 0x6060, /* pin 13 = 1, pin 14 = 1 */ 22508c2ecf20Sopenharmony_ci .gpio2 = 0x0000, 22518c2ecf20Sopenharmony_ci }, { 22528c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 22538c2ecf20Sopenharmony_ci .vmux = 2, 22548c2ecf20Sopenharmony_ci .gpio0 = 0x0400, /* pin 2 = 0 */ 22558c2ecf20Sopenharmony_ci .gpio1 = 0x6060, /* pin 13 = 1, pin 14 = 1 */ 22568c2ecf20Sopenharmony_ci .gpio2 = 0x0000, 22578c2ecf20Sopenharmony_ci } }, 22588c2ecf20Sopenharmony_ci .radio = { 22598c2ecf20Sopenharmony_ci .type = CX88_RADIO, 22608c2ecf20Sopenharmony_ci .gpio0 = 0x0400, /* pin 2 = 0 */ 22618c2ecf20Sopenharmony_ci .gpio1 = 0x6000, /* pin 13 = 0, pin 14 = 0 */ 22628c2ecf20Sopenharmony_ci .gpio2 = 0x0000, 22638c2ecf20Sopenharmony_ci }, 22648c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 22658c2ecf20Sopenharmony_ci }, 22668c2ecf20Sopenharmony_ci [CX88_BOARD_WINFAST_DTV2000H_PLUS] = { 22678c2ecf20Sopenharmony_ci .name = "Leadtek WinFast DTV2000 H PLUS", 22688c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC4000, 22698c2ecf20Sopenharmony_ci .radio_type = UNSET, 22708c2ecf20Sopenharmony_ci .tuner_addr = 0x61, 22718c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 22728c2ecf20Sopenharmony_ci /* 22738c2ecf20Sopenharmony_ci * GPIO 22748c2ecf20Sopenharmony_ci * 2: 1: mute audio 22758c2ecf20Sopenharmony_ci * 12: 0: reset XC4000 22768c2ecf20Sopenharmony_ci * 13: 1: audio input is line in (0: tuner) 22778c2ecf20Sopenharmony_ci * 14: 0: FM radio 22788c2ecf20Sopenharmony_ci * 16: 0: RF input is cable 22798c2ecf20Sopenharmony_ci */ 22808c2ecf20Sopenharmony_ci .input = { { 22818c2ecf20Sopenharmony_ci .type = CX88_VMUX_TELEVISION, 22828c2ecf20Sopenharmony_ci .vmux = 0, 22838c2ecf20Sopenharmony_ci .gpio0 = 0x0403, 22848c2ecf20Sopenharmony_ci .gpio1 = 0xF0D7, 22858c2ecf20Sopenharmony_ci .gpio2 = 0x0101, 22868c2ecf20Sopenharmony_ci .gpio3 = 0x0000, 22878c2ecf20Sopenharmony_ci }, { 22888c2ecf20Sopenharmony_ci .type = CX88_VMUX_CABLE, 22898c2ecf20Sopenharmony_ci .vmux = 0, 22908c2ecf20Sopenharmony_ci .gpio0 = 0x0403, 22918c2ecf20Sopenharmony_ci .gpio1 = 0xF0D7, 22928c2ecf20Sopenharmony_ci .gpio2 = 0x0100, 22938c2ecf20Sopenharmony_ci .gpio3 = 0x0000, 22948c2ecf20Sopenharmony_ci }, { 22958c2ecf20Sopenharmony_ci .type = CX88_VMUX_COMPOSITE1, 22968c2ecf20Sopenharmony_ci .vmux = 1, 22978c2ecf20Sopenharmony_ci .gpio0 = 0x0403, /* was 0x0407 */ 22988c2ecf20Sopenharmony_ci .gpio1 = 0xF0F7, 22998c2ecf20Sopenharmony_ci .gpio2 = 0x0101, 23008c2ecf20Sopenharmony_ci .gpio3 = 0x0000, 23018c2ecf20Sopenharmony_ci }, { 23028c2ecf20Sopenharmony_ci .type = CX88_VMUX_SVIDEO, 23038c2ecf20Sopenharmony_ci .vmux = 2, 23048c2ecf20Sopenharmony_ci .gpio0 = 0x0403, /* was 0x0407 */ 23058c2ecf20Sopenharmony_ci .gpio1 = 0xF0F7, 23068c2ecf20Sopenharmony_ci .gpio2 = 0x0101, 23078c2ecf20Sopenharmony_ci .gpio3 = 0x0000, 23088c2ecf20Sopenharmony_ci } }, 23098c2ecf20Sopenharmony_ci .radio = { 23108c2ecf20Sopenharmony_ci .type = CX88_RADIO, 23118c2ecf20Sopenharmony_ci .gpio0 = 0x0403, 23128c2ecf20Sopenharmony_ci .gpio1 = 0xF097, 23138c2ecf20Sopenharmony_ci .gpio2 = 0x0100, 23148c2ecf20Sopenharmony_ci .gpio3 = 0x0000, 23158c2ecf20Sopenharmony_ci }, 23168c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 23178c2ecf20Sopenharmony_ci }, 23188c2ecf20Sopenharmony_ci [CX88_BOARD_PROF_7301] = { 23198c2ecf20Sopenharmony_ci .name = "Prof 7301 DVB-S/S2", 23208c2ecf20Sopenharmony_ci .tuner_type = UNSET, 23218c2ecf20Sopenharmony_ci .radio_type = UNSET, 23228c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 23238c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 23248c2ecf20Sopenharmony_ci .input = { { 23258c2ecf20Sopenharmony_ci .type = CX88_VMUX_DVB, 23268c2ecf20Sopenharmony_ci .vmux = 0, 23278c2ecf20Sopenharmony_ci } }, 23288c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 23298c2ecf20Sopenharmony_ci }, 23308c2ecf20Sopenharmony_ci [CX88_BOARD_TWINHAN_VP1027_DVBS] = { 23318c2ecf20Sopenharmony_ci .name = "Twinhan VP-1027 DVB-S", 23328c2ecf20Sopenharmony_ci .tuner_type = UNSET, 23338c2ecf20Sopenharmony_ci .radio_type = UNSET, 23348c2ecf20Sopenharmony_ci .tuner_addr = ADDR_UNSET, 23358c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 23368c2ecf20Sopenharmony_ci .input = { { 23378c2ecf20Sopenharmony_ci .type = CX88_VMUX_DVB, 23388c2ecf20Sopenharmony_ci .vmux = 0, 23398c2ecf20Sopenharmony_ci } }, 23408c2ecf20Sopenharmony_ci .mpeg = CX88_MPEG_DVB, 23418c2ecf20Sopenharmony_ci }, 23428c2ecf20Sopenharmony_ci}; 23438c2ecf20Sopenharmony_ci 23448c2ecf20Sopenharmony_ci/* ------------------------------------------------------------------ */ 23458c2ecf20Sopenharmony_ci/* PCI subsystem IDs */ 23468c2ecf20Sopenharmony_ci 23478c2ecf20Sopenharmony_cistatic const struct cx88_subid cx88_subids[] = { 23488c2ecf20Sopenharmony_ci { 23498c2ecf20Sopenharmony_ci .subvendor = 0x0070, 23508c2ecf20Sopenharmony_ci .subdevice = 0x3400, 23518c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE, 23528c2ecf20Sopenharmony_ci }, { 23538c2ecf20Sopenharmony_ci .subvendor = 0x0070, 23548c2ecf20Sopenharmony_ci .subdevice = 0x3401, 23558c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE, 23568c2ecf20Sopenharmony_ci }, { 23578c2ecf20Sopenharmony_ci .subvendor = 0x14c7, 23588c2ecf20Sopenharmony_ci .subdevice = 0x0106, 23598c2ecf20Sopenharmony_ci .card = CX88_BOARD_GDI, 23608c2ecf20Sopenharmony_ci }, { 23618c2ecf20Sopenharmony_ci .subvendor = 0x14c7, 23628c2ecf20Sopenharmony_ci .subdevice = 0x0107, /* with mpeg encoder */ 23638c2ecf20Sopenharmony_ci .card = CX88_BOARD_GDI, 23648c2ecf20Sopenharmony_ci }, { 23658c2ecf20Sopenharmony_ci .subvendor = PCI_VENDOR_ID_ATI, 23668c2ecf20Sopenharmony_ci .subdevice = 0x00f8, 23678c2ecf20Sopenharmony_ci .card = CX88_BOARD_ATI_WONDER_PRO, 23688c2ecf20Sopenharmony_ci }, { 23698c2ecf20Sopenharmony_ci .subvendor = PCI_VENDOR_ID_ATI, 23708c2ecf20Sopenharmony_ci .subdevice = 0x00f9, 23718c2ecf20Sopenharmony_ci .card = CX88_BOARD_ATI_WONDER_PRO, 23728c2ecf20Sopenharmony_ci }, { 23738c2ecf20Sopenharmony_ci .subvendor = 0x107d, 23748c2ecf20Sopenharmony_ci .subdevice = 0x6611, 23758c2ecf20Sopenharmony_ci .card = CX88_BOARD_WINFAST2000XP_EXPERT, 23768c2ecf20Sopenharmony_ci }, { 23778c2ecf20Sopenharmony_ci .subvendor = 0x107d, 23788c2ecf20Sopenharmony_ci .subdevice = 0x6613, /* NTSC */ 23798c2ecf20Sopenharmony_ci .card = CX88_BOARD_WINFAST2000XP_EXPERT, 23808c2ecf20Sopenharmony_ci }, { 23818c2ecf20Sopenharmony_ci .subvendor = 0x107d, 23828c2ecf20Sopenharmony_ci .subdevice = 0x6620, 23838c2ecf20Sopenharmony_ci .card = CX88_BOARD_WINFAST_DV2000, 23848c2ecf20Sopenharmony_ci }, { 23858c2ecf20Sopenharmony_ci .subvendor = 0x107d, 23868c2ecf20Sopenharmony_ci .subdevice = 0x663b, 23878c2ecf20Sopenharmony_ci .card = CX88_BOARD_LEADTEK_PVR2000, 23888c2ecf20Sopenharmony_ci }, { 23898c2ecf20Sopenharmony_ci .subvendor = 0x107d, 23908c2ecf20Sopenharmony_ci .subdevice = 0x663c, 23918c2ecf20Sopenharmony_ci .card = CX88_BOARD_LEADTEK_PVR2000, 23928c2ecf20Sopenharmony_ci }, { 23938c2ecf20Sopenharmony_ci .subvendor = 0x1461, 23948c2ecf20Sopenharmony_ci .subdevice = 0x000b, 23958c2ecf20Sopenharmony_ci .card = CX88_BOARD_AVERTV_STUDIO_303, 23968c2ecf20Sopenharmony_ci }, { 23978c2ecf20Sopenharmony_ci .subvendor = 0x1462, 23988c2ecf20Sopenharmony_ci .subdevice = 0x8606, 23998c2ecf20Sopenharmony_ci .card = CX88_BOARD_MSI_TVANYWHERE_MASTER, 24008c2ecf20Sopenharmony_ci }, { 24018c2ecf20Sopenharmony_ci .subvendor = 0x10fc, 24028c2ecf20Sopenharmony_ci .subdevice = 0xd003, 24038c2ecf20Sopenharmony_ci .card = CX88_BOARD_IODATA_GVVCP3PCI, 24048c2ecf20Sopenharmony_ci }, { 24058c2ecf20Sopenharmony_ci .subvendor = 0x1043, 24068c2ecf20Sopenharmony_ci .subdevice = 0x4823, /* with mpeg encoder */ 24078c2ecf20Sopenharmony_ci .card = CX88_BOARD_ASUS_PVR_416, 24088c2ecf20Sopenharmony_ci }, { 24098c2ecf20Sopenharmony_ci .subvendor = 0x17de, 24108c2ecf20Sopenharmony_ci .subdevice = 0x08a6, 24118c2ecf20Sopenharmony_ci .card = CX88_BOARD_KWORLD_DVB_T, 24128c2ecf20Sopenharmony_ci }, { 24138c2ecf20Sopenharmony_ci .subvendor = 0x18ac, 24148c2ecf20Sopenharmony_ci .subdevice = 0xd810, 24158c2ecf20Sopenharmony_ci .card = CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q, 24168c2ecf20Sopenharmony_ci }, { 24178c2ecf20Sopenharmony_ci .subvendor = 0x18ac, 24188c2ecf20Sopenharmony_ci .subdevice = 0xd820, 24198c2ecf20Sopenharmony_ci .card = CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_T, 24208c2ecf20Sopenharmony_ci }, { 24218c2ecf20Sopenharmony_ci .subvendor = 0x18ac, 24228c2ecf20Sopenharmony_ci .subdevice = 0xdb00, 24238c2ecf20Sopenharmony_ci .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1, 24248c2ecf20Sopenharmony_ci }, { 24258c2ecf20Sopenharmony_ci .subvendor = 0x0070, 24268c2ecf20Sopenharmony_ci .subdevice = 0x9002, 24278c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE_DVB_T1, 24288c2ecf20Sopenharmony_ci }, { 24298c2ecf20Sopenharmony_ci .subvendor = 0x14f1, 24308c2ecf20Sopenharmony_ci .subdevice = 0x0187, 24318c2ecf20Sopenharmony_ci .card = CX88_BOARD_CONEXANT_DVB_T1, 24328c2ecf20Sopenharmony_ci }, { 24338c2ecf20Sopenharmony_ci .subvendor = 0x1540, 24348c2ecf20Sopenharmony_ci .subdevice = 0x2580, 24358c2ecf20Sopenharmony_ci .card = CX88_BOARD_PROVIDEO_PV259, 24368c2ecf20Sopenharmony_ci }, { 24378c2ecf20Sopenharmony_ci .subvendor = 0x18ac, 24388c2ecf20Sopenharmony_ci .subdevice = 0xdb10, 24398c2ecf20Sopenharmony_ci .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS, 24408c2ecf20Sopenharmony_ci }, { 24418c2ecf20Sopenharmony_ci .subvendor = 0x1554, 24428c2ecf20Sopenharmony_ci .subdevice = 0x4811, 24438c2ecf20Sopenharmony_ci .card = CX88_BOARD_PIXELVIEW, 24448c2ecf20Sopenharmony_ci }, { 24458c2ecf20Sopenharmony_ci .subvendor = 0x7063, 24468c2ecf20Sopenharmony_ci .subdevice = 0x3000, /* HD-3000 card */ 24478c2ecf20Sopenharmony_ci .card = CX88_BOARD_PCHDTV_HD3000, 24488c2ecf20Sopenharmony_ci }, { 24498c2ecf20Sopenharmony_ci .subvendor = 0x17de, 24508c2ecf20Sopenharmony_ci .subdevice = 0xa8a6, 24518c2ecf20Sopenharmony_ci .card = CX88_BOARD_DNTV_LIVE_DVB_T, 24528c2ecf20Sopenharmony_ci }, { 24538c2ecf20Sopenharmony_ci .subvendor = 0x0070, 24548c2ecf20Sopenharmony_ci .subdevice = 0x2801, 24558c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE_ROSLYN, 24568c2ecf20Sopenharmony_ci }, { 24578c2ecf20Sopenharmony_ci .subvendor = 0x14f1, 24588c2ecf20Sopenharmony_ci .subdevice = 0x0342, 24598c2ecf20Sopenharmony_ci .card = CX88_BOARD_DIGITALLOGIC_MEC, 24608c2ecf20Sopenharmony_ci }, { 24618c2ecf20Sopenharmony_ci .subvendor = 0x10fc, 24628c2ecf20Sopenharmony_ci .subdevice = 0xd035, 24638c2ecf20Sopenharmony_ci .card = CX88_BOARD_IODATA_GVBCTV7E, 24648c2ecf20Sopenharmony_ci }, { 24658c2ecf20Sopenharmony_ci .subvendor = 0x1421, 24668c2ecf20Sopenharmony_ci .subdevice = 0x0334, 24678c2ecf20Sopenharmony_ci .card = CX88_BOARD_ADSTECH_DVB_T_PCI, 24688c2ecf20Sopenharmony_ci }, { 24698c2ecf20Sopenharmony_ci .subvendor = 0x153b, 24708c2ecf20Sopenharmony_ci .subdevice = 0x1166, 24718c2ecf20Sopenharmony_ci .card = CX88_BOARD_TERRATEC_CINERGY_1400_DVB_T1, 24728c2ecf20Sopenharmony_ci }, { 24738c2ecf20Sopenharmony_ci .subvendor = 0x18ac, 24748c2ecf20Sopenharmony_ci .subdevice = 0xd500, 24758c2ecf20Sopenharmony_ci .card = CX88_BOARD_DVICO_FUSIONHDTV_5_GOLD, 24768c2ecf20Sopenharmony_ci }, { 24778c2ecf20Sopenharmony_ci .subvendor = 0x1461, 24788c2ecf20Sopenharmony_ci .subdevice = 0x8011, 24798c2ecf20Sopenharmony_ci .card = CX88_BOARD_AVERMEDIA_ULTRATV_MC_550, 24808c2ecf20Sopenharmony_ci }, { 24818c2ecf20Sopenharmony_ci .subvendor = PCI_VENDOR_ID_ATI, 24828c2ecf20Sopenharmony_ci .subdevice = 0xa101, 24838c2ecf20Sopenharmony_ci .card = CX88_BOARD_ATI_HDTVWONDER, 24848c2ecf20Sopenharmony_ci }, { 24858c2ecf20Sopenharmony_ci .subvendor = 0x107d, 24868c2ecf20Sopenharmony_ci .subdevice = 0x665f, 24878c2ecf20Sopenharmony_ci .card = CX88_BOARD_WINFAST_DTV1000, 24888c2ecf20Sopenharmony_ci }, { 24898c2ecf20Sopenharmony_ci .subvendor = 0x1461, 24908c2ecf20Sopenharmony_ci .subdevice = 0x000a, 24918c2ecf20Sopenharmony_ci .card = CX88_BOARD_AVERTV_303, 24928c2ecf20Sopenharmony_ci }, { 24938c2ecf20Sopenharmony_ci .subvendor = 0x0070, 24948c2ecf20Sopenharmony_ci .subdevice = 0x9200, 24958c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE_NOVASE2_S1, 24968c2ecf20Sopenharmony_ci }, { 24978c2ecf20Sopenharmony_ci .subvendor = 0x0070, 24988c2ecf20Sopenharmony_ci .subdevice = 0x9201, 24998c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1, 25008c2ecf20Sopenharmony_ci }, { 25018c2ecf20Sopenharmony_ci .subvendor = 0x0070, 25028c2ecf20Sopenharmony_ci .subdevice = 0x9202, 25038c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1, 25048c2ecf20Sopenharmony_ci }, { 25058c2ecf20Sopenharmony_ci .subvendor = 0x17de, 25068c2ecf20Sopenharmony_ci .subdevice = 0x08b2, 25078c2ecf20Sopenharmony_ci .card = CX88_BOARD_KWORLD_DVBS_100, 25088c2ecf20Sopenharmony_ci }, { 25098c2ecf20Sopenharmony_ci .subvendor = 0x0070, 25108c2ecf20Sopenharmony_ci .subdevice = 0x9400, 25118c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE_HVR1100, 25128c2ecf20Sopenharmony_ci }, { 25138c2ecf20Sopenharmony_ci .subvendor = 0x0070, 25148c2ecf20Sopenharmony_ci .subdevice = 0x9402, 25158c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE_HVR1100, 25168c2ecf20Sopenharmony_ci }, { 25178c2ecf20Sopenharmony_ci .subvendor = 0x0070, 25188c2ecf20Sopenharmony_ci .subdevice = 0x9800, 25198c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE_HVR1100LP, 25208c2ecf20Sopenharmony_ci }, { 25218c2ecf20Sopenharmony_ci .subvendor = 0x0070, 25228c2ecf20Sopenharmony_ci .subdevice = 0x9802, 25238c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE_HVR1100LP, 25248c2ecf20Sopenharmony_ci }, { 25258c2ecf20Sopenharmony_ci .subvendor = 0x0070, 25268c2ecf20Sopenharmony_ci .subdevice = 0x9001, 25278c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE_DVB_T1, 25288c2ecf20Sopenharmony_ci }, { 25298c2ecf20Sopenharmony_ci .subvendor = 0x1822, 25308c2ecf20Sopenharmony_ci .subdevice = 0x0025, 25318c2ecf20Sopenharmony_ci .card = CX88_BOARD_DNTV_LIVE_DVB_T_PRO, 25328c2ecf20Sopenharmony_ci }, { 25338c2ecf20Sopenharmony_ci .subvendor = 0x17de, 25348c2ecf20Sopenharmony_ci .subdevice = 0x08a1, 25358c2ecf20Sopenharmony_ci .card = CX88_BOARD_KWORLD_DVB_T_CX22702, 25368c2ecf20Sopenharmony_ci }, { 25378c2ecf20Sopenharmony_ci .subvendor = 0x18ac, 25388c2ecf20Sopenharmony_ci .subdevice = 0xdb50, 25398c2ecf20Sopenharmony_ci .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL, 25408c2ecf20Sopenharmony_ci }, { 25418c2ecf20Sopenharmony_ci .subvendor = 0x18ac, 25428c2ecf20Sopenharmony_ci .subdevice = 0xdb54, 25438c2ecf20Sopenharmony_ci .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL, 25448c2ecf20Sopenharmony_ci /* Re-branded DViCO: DigitalNow DVB-T Dual */ 25458c2ecf20Sopenharmony_ci }, { 25468c2ecf20Sopenharmony_ci .subvendor = 0x18ac, 25478c2ecf20Sopenharmony_ci .subdevice = 0xdb11, 25488c2ecf20Sopenharmony_ci .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS, 25498c2ecf20Sopenharmony_ci /* Re-branded DViCO: UltraView DVB-T Plus */ 25508c2ecf20Sopenharmony_ci }, { 25518c2ecf20Sopenharmony_ci .subvendor = 0x18ac, 25528c2ecf20Sopenharmony_ci .subdevice = 0xdb30, 25538c2ecf20Sopenharmony_ci .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO, 25548c2ecf20Sopenharmony_ci }, { 25558c2ecf20Sopenharmony_ci .subvendor = 0x17de, 25568c2ecf20Sopenharmony_ci .subdevice = 0x0840, 25578c2ecf20Sopenharmony_ci .card = CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT, 25588c2ecf20Sopenharmony_ci }, { 25598c2ecf20Sopenharmony_ci .subvendor = 0x1421, 25608c2ecf20Sopenharmony_ci .subdevice = 0x0305, 25618c2ecf20Sopenharmony_ci .card = CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT, 25628c2ecf20Sopenharmony_ci }, { 25638c2ecf20Sopenharmony_ci .subvendor = 0x18ac, 25648c2ecf20Sopenharmony_ci .subdevice = 0xdb40, 25658c2ecf20Sopenharmony_ci .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID, 25668c2ecf20Sopenharmony_ci }, { 25678c2ecf20Sopenharmony_ci .subvendor = 0x18ac, 25688c2ecf20Sopenharmony_ci .subdevice = 0xdb44, 25698c2ecf20Sopenharmony_ci .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID, 25708c2ecf20Sopenharmony_ci }, { 25718c2ecf20Sopenharmony_ci .subvendor = 0x7063, 25728c2ecf20Sopenharmony_ci .subdevice = 0x5500, 25738c2ecf20Sopenharmony_ci .card = CX88_BOARD_PCHDTV_HD5500, 25748c2ecf20Sopenharmony_ci }, { 25758c2ecf20Sopenharmony_ci .subvendor = 0x17de, 25768c2ecf20Sopenharmony_ci .subdevice = 0x0841, 25778c2ecf20Sopenharmony_ci .card = CX88_BOARD_KWORLD_MCE200_DELUXE, 25788c2ecf20Sopenharmony_ci }, { 25798c2ecf20Sopenharmony_ci .subvendor = 0x1822, 25808c2ecf20Sopenharmony_ci .subdevice = 0x0019, 25818c2ecf20Sopenharmony_ci .card = CX88_BOARD_DNTV_LIVE_DVB_T_PRO, 25828c2ecf20Sopenharmony_ci }, { 25838c2ecf20Sopenharmony_ci .subvendor = 0x1554, 25848c2ecf20Sopenharmony_ci .subdevice = 0x4813, 25858c2ecf20Sopenharmony_ci .card = CX88_BOARD_PIXELVIEW_PLAYTV_P7000, 25868c2ecf20Sopenharmony_ci }, { 25878c2ecf20Sopenharmony_ci .subvendor = 0x14f1, 25888c2ecf20Sopenharmony_ci .subdevice = 0x0842, 25898c2ecf20Sopenharmony_ci .card = CX88_BOARD_NPGTECH_REALTV_TOP10FM, 25908c2ecf20Sopenharmony_ci }, { 25918c2ecf20Sopenharmony_ci .subvendor = 0x107d, 25928c2ecf20Sopenharmony_ci .subdevice = 0x665e, 25938c2ecf20Sopenharmony_ci .card = CX88_BOARD_WINFAST_DTV2000H, 25948c2ecf20Sopenharmony_ci }, { 25958c2ecf20Sopenharmony_ci .subvendor = 0x107d, 25968c2ecf20Sopenharmony_ci .subdevice = 0x6f2b, 25978c2ecf20Sopenharmony_ci .card = CX88_BOARD_WINFAST_DTV2000H_J, 25988c2ecf20Sopenharmony_ci }, { 25998c2ecf20Sopenharmony_ci .subvendor = 0x18ac, 26008c2ecf20Sopenharmony_ci .subdevice = 0xd800, /* FusionHDTV 3 Gold (original revision) */ 26018c2ecf20Sopenharmony_ci .card = CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q, 26028c2ecf20Sopenharmony_ci }, { 26038c2ecf20Sopenharmony_ci .subvendor = 0x14f1, 26048c2ecf20Sopenharmony_ci .subdevice = 0x0084, 26058c2ecf20Sopenharmony_ci .card = CX88_BOARD_GENIATECH_DVBS, 26068c2ecf20Sopenharmony_ci }, { 26078c2ecf20Sopenharmony_ci .subvendor = 0x0070, 26088c2ecf20Sopenharmony_ci .subdevice = 0x1404, 26098c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE_HVR3000, 26108c2ecf20Sopenharmony_ci }, { 26118c2ecf20Sopenharmony_ci .subvendor = 0x18ac, 26128c2ecf20Sopenharmony_ci .subdevice = 0xdc00, 26138c2ecf20Sopenharmony_ci .card = CX88_BOARD_SAMSUNG_SMT_7020, 26148c2ecf20Sopenharmony_ci }, { 26158c2ecf20Sopenharmony_ci .subvendor = 0x18ac, 26168c2ecf20Sopenharmony_ci .subdevice = 0xdccd, 26178c2ecf20Sopenharmony_ci .card = CX88_BOARD_SAMSUNG_SMT_7020, 26188c2ecf20Sopenharmony_ci }, { 26198c2ecf20Sopenharmony_ci .subvendor = 0x1461, 26208c2ecf20Sopenharmony_ci .subdevice = 0xc111, /* AverMedia M150-D */ 26218c2ecf20Sopenharmony_ci /* This board is known to work with the ASUS PVR416 config */ 26228c2ecf20Sopenharmony_ci .card = CX88_BOARD_ASUS_PVR_416, 26238c2ecf20Sopenharmony_ci }, { 26248c2ecf20Sopenharmony_ci .subvendor = 0xc180, 26258c2ecf20Sopenharmony_ci .subdevice = 0xc980, 26268c2ecf20Sopenharmony_ci .card = CX88_BOARD_TE_DTV_250_OEM_SWANN, 26278c2ecf20Sopenharmony_ci }, { 26288c2ecf20Sopenharmony_ci .subvendor = 0x0070, 26298c2ecf20Sopenharmony_ci .subdevice = 0x9600, 26308c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE_HVR1300, 26318c2ecf20Sopenharmony_ci }, { 26328c2ecf20Sopenharmony_ci .subvendor = 0x0070, 26338c2ecf20Sopenharmony_ci .subdevice = 0x9601, 26348c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE_HVR1300, 26358c2ecf20Sopenharmony_ci }, { 26368c2ecf20Sopenharmony_ci .subvendor = 0x0070, 26378c2ecf20Sopenharmony_ci .subdevice = 0x9602, 26388c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE_HVR1300, 26398c2ecf20Sopenharmony_ci }, { 26408c2ecf20Sopenharmony_ci .subvendor = 0x107d, 26418c2ecf20Sopenharmony_ci .subdevice = 0x6632, 26428c2ecf20Sopenharmony_ci .card = CX88_BOARD_LEADTEK_PVR2000, 26438c2ecf20Sopenharmony_ci }, { 26448c2ecf20Sopenharmony_ci .subvendor = 0x12ab, 26458c2ecf20Sopenharmony_ci .subdevice = 0x2300, /* Club3D Zap TV2100 */ 26468c2ecf20Sopenharmony_ci .card = CX88_BOARD_KWORLD_DVB_T_CX22702, 26478c2ecf20Sopenharmony_ci }, { 26488c2ecf20Sopenharmony_ci .subvendor = 0x0070, 26498c2ecf20Sopenharmony_ci .subdevice = 0x9000, 26508c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE_DVB_T1, 26518c2ecf20Sopenharmony_ci }, { 26528c2ecf20Sopenharmony_ci .subvendor = 0x0070, 26538c2ecf20Sopenharmony_ci .subdevice = 0x1400, 26548c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE_HVR3000, 26558c2ecf20Sopenharmony_ci }, { 26568c2ecf20Sopenharmony_ci .subvendor = 0x0070, 26578c2ecf20Sopenharmony_ci .subdevice = 0x1401, 26588c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE_HVR3000, 26598c2ecf20Sopenharmony_ci }, { 26608c2ecf20Sopenharmony_ci .subvendor = 0x0070, 26618c2ecf20Sopenharmony_ci .subdevice = 0x1402, 26628c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE_HVR3000, 26638c2ecf20Sopenharmony_ci }, { 26648c2ecf20Sopenharmony_ci .subvendor = 0x1421, 26658c2ecf20Sopenharmony_ci .subdevice = 0x0341, /* ADS Tech InstantTV DVB-S */ 26668c2ecf20Sopenharmony_ci .card = CX88_BOARD_KWORLD_DVBS_100, 26678c2ecf20Sopenharmony_ci }, { 26688c2ecf20Sopenharmony_ci .subvendor = 0x1421, 26698c2ecf20Sopenharmony_ci .subdevice = 0x0390, 26708c2ecf20Sopenharmony_ci .card = CX88_BOARD_ADSTECH_PTV_390, 26718c2ecf20Sopenharmony_ci }, { 26728c2ecf20Sopenharmony_ci .subvendor = 0x11bd, 26738c2ecf20Sopenharmony_ci .subdevice = 0x0051, 26748c2ecf20Sopenharmony_ci .card = CX88_BOARD_PINNACLE_PCTV_HD_800i, 26758c2ecf20Sopenharmony_ci }, { 26768c2ecf20Sopenharmony_ci .subvendor = 0x18ac, 26778c2ecf20Sopenharmony_ci .subdevice = 0xd530, 26788c2ecf20Sopenharmony_ci .card = CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO, 26798c2ecf20Sopenharmony_ci }, { 26808c2ecf20Sopenharmony_ci .subvendor = 0x12ab, 26818c2ecf20Sopenharmony_ci .subdevice = 0x1788, 26828c2ecf20Sopenharmony_ci .card = CX88_BOARD_PINNACLE_HYBRID_PCTV, 26838c2ecf20Sopenharmony_ci }, { 26848c2ecf20Sopenharmony_ci .subvendor = 0x14f1, 26858c2ecf20Sopenharmony_ci .subdevice = 0xea3d, 26868c2ecf20Sopenharmony_ci .card = CX88_BOARD_POWERCOLOR_REAL_ANGEL, 26878c2ecf20Sopenharmony_ci }, { 26888c2ecf20Sopenharmony_ci .subvendor = 0x107d, 26898c2ecf20Sopenharmony_ci .subdevice = 0x6f18, 26908c2ecf20Sopenharmony_ci .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL, 26918c2ecf20Sopenharmony_ci }, { 26928c2ecf20Sopenharmony_ci /* Also NotOnlyTV LV3H (version 1.11 is silkscreened on the board) */ 26938c2ecf20Sopenharmony_ci .subvendor = 0x14f1, 26948c2ecf20Sopenharmony_ci .subdevice = 0x8852, 26958c2ecf20Sopenharmony_ci .card = CX88_BOARD_GENIATECH_X8000_MT, 26968c2ecf20Sopenharmony_ci }, { 26978c2ecf20Sopenharmony_ci .subvendor = 0x18ac, 26988c2ecf20Sopenharmony_ci .subdevice = 0xd610, 26998c2ecf20Sopenharmony_ci .card = CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD, 27008c2ecf20Sopenharmony_ci }, { 27018c2ecf20Sopenharmony_ci .subvendor = 0x1554, 27028c2ecf20Sopenharmony_ci .subdevice = 0x4935, 27038c2ecf20Sopenharmony_ci .card = CX88_BOARD_PROLINK_PV_8000GT, 27048c2ecf20Sopenharmony_ci }, { 27058c2ecf20Sopenharmony_ci .subvendor = 0x1554, 27068c2ecf20Sopenharmony_ci .subdevice = 0x4976, 27078c2ecf20Sopenharmony_ci .card = CX88_BOARD_PROLINK_PV_GLOBAL_XTREME, 27088c2ecf20Sopenharmony_ci }, { 27098c2ecf20Sopenharmony_ci .subvendor = 0x17de, 27108c2ecf20Sopenharmony_ci .subdevice = 0x08c1, 27118c2ecf20Sopenharmony_ci .card = CX88_BOARD_KWORLD_ATSC_120, 27128c2ecf20Sopenharmony_ci }, { 27138c2ecf20Sopenharmony_ci .subvendor = 0x0070, 27148c2ecf20Sopenharmony_ci .subdevice = 0x6900, 27158c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE_HVR4000, 27168c2ecf20Sopenharmony_ci }, { 27178c2ecf20Sopenharmony_ci .subvendor = 0x0070, 27188c2ecf20Sopenharmony_ci .subdevice = 0x6904, 27198c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE_HVR4000, 27208c2ecf20Sopenharmony_ci }, { 27218c2ecf20Sopenharmony_ci .subvendor = 0x0070, 27228c2ecf20Sopenharmony_ci .subdevice = 0x6902, 27238c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE_HVR4000, 27248c2ecf20Sopenharmony_ci }, { 27258c2ecf20Sopenharmony_ci .subvendor = 0x0070, 27268c2ecf20Sopenharmony_ci .subdevice = 0x6905, 27278c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE_HVR4000LITE, 27288c2ecf20Sopenharmony_ci }, { 27298c2ecf20Sopenharmony_ci .subvendor = 0x0070, 27308c2ecf20Sopenharmony_ci .subdevice = 0x6906, 27318c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE_HVR4000LITE, 27328c2ecf20Sopenharmony_ci }, { 27338c2ecf20Sopenharmony_ci .subvendor = 0xd420, 27348c2ecf20Sopenharmony_ci .subdevice = 0x9022, 27358c2ecf20Sopenharmony_ci .card = CX88_BOARD_TEVII_S420, 27368c2ecf20Sopenharmony_ci }, { 27378c2ecf20Sopenharmony_ci .subvendor = 0xd460, 27388c2ecf20Sopenharmony_ci .subdevice = 0x9022, 27398c2ecf20Sopenharmony_ci .card = CX88_BOARD_TEVII_S460, 27408c2ecf20Sopenharmony_ci }, { 27418c2ecf20Sopenharmony_ci .subvendor = 0xd464, 27428c2ecf20Sopenharmony_ci .subdevice = 0x9022, 27438c2ecf20Sopenharmony_ci .card = CX88_BOARD_TEVII_S464, 27448c2ecf20Sopenharmony_ci }, { 27458c2ecf20Sopenharmony_ci .subvendor = 0xA044, 27468c2ecf20Sopenharmony_ci .subdevice = 0x2011, 27478c2ecf20Sopenharmony_ci .card = CX88_BOARD_OMICOM_SS4_PCI, 27488c2ecf20Sopenharmony_ci }, { 27498c2ecf20Sopenharmony_ci .subvendor = 0x8910, 27508c2ecf20Sopenharmony_ci .subdevice = 0x8888, 27518c2ecf20Sopenharmony_ci .card = CX88_BOARD_TBS_8910, 27528c2ecf20Sopenharmony_ci }, { 27538c2ecf20Sopenharmony_ci .subvendor = 0x8920, 27548c2ecf20Sopenharmony_ci .subdevice = 0x8888, 27558c2ecf20Sopenharmony_ci .card = CX88_BOARD_TBS_8920, 27568c2ecf20Sopenharmony_ci }, { 27578c2ecf20Sopenharmony_ci .subvendor = 0xb022, 27588c2ecf20Sopenharmony_ci .subdevice = 0x3022, 27598c2ecf20Sopenharmony_ci .card = CX88_BOARD_PROF_6200, 27608c2ecf20Sopenharmony_ci }, { 27618c2ecf20Sopenharmony_ci .subvendor = 0xB033, 27628c2ecf20Sopenharmony_ci .subdevice = 0x3033, 27638c2ecf20Sopenharmony_ci .card = CX88_BOARD_PROF_7300, 27648c2ecf20Sopenharmony_ci }, { 27658c2ecf20Sopenharmony_ci .subvendor = 0xb200, 27668c2ecf20Sopenharmony_ci .subdevice = 0x4200, 27678c2ecf20Sopenharmony_ci .card = CX88_BOARD_SATTRADE_ST4200, 27688c2ecf20Sopenharmony_ci }, { 27698c2ecf20Sopenharmony_ci .subvendor = 0x153b, 27708c2ecf20Sopenharmony_ci .subdevice = 0x1177, 27718c2ecf20Sopenharmony_ci .card = CX88_BOARD_TERRATEC_CINERGY_HT_PCI_MKII, 27728c2ecf20Sopenharmony_ci }, { 27738c2ecf20Sopenharmony_ci .subvendor = 0x0070, 27748c2ecf20Sopenharmony_ci .subdevice = 0x9290, 27758c2ecf20Sopenharmony_ci .card = CX88_BOARD_HAUPPAUGE_IRONLY, 27768c2ecf20Sopenharmony_ci }, { 27778c2ecf20Sopenharmony_ci .subvendor = 0x107d, 27788c2ecf20Sopenharmony_ci .subdevice = 0x6654, 27798c2ecf20Sopenharmony_ci .card = CX88_BOARD_WINFAST_DTV1800H, 27808c2ecf20Sopenharmony_ci }, { 27818c2ecf20Sopenharmony_ci /* WinFast DTV1800 H with XC4000 tuner */ 27828c2ecf20Sopenharmony_ci .subvendor = 0x107d, 27838c2ecf20Sopenharmony_ci .subdevice = 0x6f38, 27848c2ecf20Sopenharmony_ci .card = CX88_BOARD_WINFAST_DTV1800H_XC4000, 27858c2ecf20Sopenharmony_ci }, { 27868c2ecf20Sopenharmony_ci .subvendor = 0x107d, 27878c2ecf20Sopenharmony_ci .subdevice = 0x6f42, 27888c2ecf20Sopenharmony_ci .card = CX88_BOARD_WINFAST_DTV2000H_PLUS, 27898c2ecf20Sopenharmony_ci }, { 27908c2ecf20Sopenharmony_ci /* PVR2000 PAL Model [107d:6630] */ 27918c2ecf20Sopenharmony_ci .subvendor = 0x107d, 27928c2ecf20Sopenharmony_ci .subdevice = 0x6630, 27938c2ecf20Sopenharmony_ci .card = CX88_BOARD_LEADTEK_PVR2000, 27948c2ecf20Sopenharmony_ci }, { 27958c2ecf20Sopenharmony_ci /* PVR2000 PAL Model [107d:6638] */ 27968c2ecf20Sopenharmony_ci .subvendor = 0x107d, 27978c2ecf20Sopenharmony_ci .subdevice = 0x6638, 27988c2ecf20Sopenharmony_ci .card = CX88_BOARD_LEADTEK_PVR2000, 27998c2ecf20Sopenharmony_ci }, { 28008c2ecf20Sopenharmony_ci /* PVR2000 NTSC Model [107d:6631] */ 28018c2ecf20Sopenharmony_ci .subvendor = 0x107d, 28028c2ecf20Sopenharmony_ci .subdevice = 0x6631, 28038c2ecf20Sopenharmony_ci .card = CX88_BOARD_LEADTEK_PVR2000, 28048c2ecf20Sopenharmony_ci }, { 28058c2ecf20Sopenharmony_ci /* PVR2000 NTSC Model [107d:6637] */ 28068c2ecf20Sopenharmony_ci .subvendor = 0x107d, 28078c2ecf20Sopenharmony_ci .subdevice = 0x6637, 28088c2ecf20Sopenharmony_ci .card = CX88_BOARD_LEADTEK_PVR2000, 28098c2ecf20Sopenharmony_ci }, { 28108c2ecf20Sopenharmony_ci /* PVR2000 NTSC Model [107d:663d] */ 28118c2ecf20Sopenharmony_ci .subvendor = 0x107d, 28128c2ecf20Sopenharmony_ci .subdevice = 0x663d, 28138c2ecf20Sopenharmony_ci .card = CX88_BOARD_LEADTEK_PVR2000, 28148c2ecf20Sopenharmony_ci }, { 28158c2ecf20Sopenharmony_ci /* DV2000 NTSC Model [107d:6621] */ 28168c2ecf20Sopenharmony_ci .subvendor = 0x107d, 28178c2ecf20Sopenharmony_ci .subdevice = 0x6621, 28188c2ecf20Sopenharmony_ci .card = CX88_BOARD_WINFAST_DV2000, 28198c2ecf20Sopenharmony_ci }, { 28208c2ecf20Sopenharmony_ci /* TV2000 XP Global [107d:6618] */ 28218c2ecf20Sopenharmony_ci .subvendor = 0x107d, 28228c2ecf20Sopenharmony_ci .subdevice = 0x6618, 28238c2ecf20Sopenharmony_ci .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL, 28248c2ecf20Sopenharmony_ci }, { 28258c2ecf20Sopenharmony_ci /* TV2000 XP Global [107d:6618] */ 28268c2ecf20Sopenharmony_ci .subvendor = 0x107d, 28278c2ecf20Sopenharmony_ci .subdevice = 0x6619, 28288c2ecf20Sopenharmony_ci .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL, 28298c2ecf20Sopenharmony_ci }, { 28308c2ecf20Sopenharmony_ci /* WinFast TV2000 XP Global with XC4000 tuner */ 28318c2ecf20Sopenharmony_ci .subvendor = 0x107d, 28328c2ecf20Sopenharmony_ci .subdevice = 0x6f36, 28338c2ecf20Sopenharmony_ci .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F36, 28348c2ecf20Sopenharmony_ci }, { 28358c2ecf20Sopenharmony_ci /* WinFast TV2000 XP Global with XC4000 tuner and different GPIOs */ 28368c2ecf20Sopenharmony_ci .subvendor = 0x107d, 28378c2ecf20Sopenharmony_ci .subdevice = 0x6f43, 28388c2ecf20Sopenharmony_ci .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F43, 28398c2ecf20Sopenharmony_ci }, { 28408c2ecf20Sopenharmony_ci .subvendor = 0xb034, 28418c2ecf20Sopenharmony_ci .subdevice = 0x3034, 28428c2ecf20Sopenharmony_ci .card = CX88_BOARD_PROF_7301, 28438c2ecf20Sopenharmony_ci }, { 28448c2ecf20Sopenharmony_ci .subvendor = 0x1822, 28458c2ecf20Sopenharmony_ci .subdevice = 0x0023, 28468c2ecf20Sopenharmony_ci .card = CX88_BOARD_TWINHAN_VP1027_DVBS, 28478c2ecf20Sopenharmony_ci }, 28488c2ecf20Sopenharmony_ci}; 28498c2ecf20Sopenharmony_ci 28508c2ecf20Sopenharmony_ci/* 28518c2ecf20Sopenharmony_ci * some leadtek specific stuff 28528c2ecf20Sopenharmony_ci */ 28538c2ecf20Sopenharmony_cistatic void leadtek_eeprom(struct cx88_core *core, u8 *eeprom_data) 28548c2ecf20Sopenharmony_ci{ 28558c2ecf20Sopenharmony_ci if (eeprom_data[4] != 0x7d || 28568c2ecf20Sopenharmony_ci eeprom_data[5] != 0x10 || 28578c2ecf20Sopenharmony_ci eeprom_data[7] != 0x66) { 28588c2ecf20Sopenharmony_ci pr_warn("Leadtek eeprom invalid.\n"); 28598c2ecf20Sopenharmony_ci return; 28608c2ecf20Sopenharmony_ci } 28618c2ecf20Sopenharmony_ci 28628c2ecf20Sopenharmony_ci /* Terry Wu <terrywu2009@gmail.com> */ 28638c2ecf20Sopenharmony_ci switch (eeprom_data[6]) { 28648c2ecf20Sopenharmony_ci case 0x13: /* SSID 6613 for TV2000 XP Expert NTSC Model */ 28658c2ecf20Sopenharmony_ci case 0x21: /* SSID 6621 for DV2000 NTSC Model */ 28668c2ecf20Sopenharmony_ci case 0x31: /* SSID 6631 for PVR2000 NTSC Model */ 28678c2ecf20Sopenharmony_ci case 0x37: /* SSID 6637 for PVR2000 NTSC Model */ 28688c2ecf20Sopenharmony_ci case 0x3d: /* SSID 6637 for PVR2000 NTSC Model */ 28698c2ecf20Sopenharmony_ci core->board.tuner_type = TUNER_PHILIPS_FM1236_MK3; 28708c2ecf20Sopenharmony_ci break; 28718c2ecf20Sopenharmony_ci default: 28728c2ecf20Sopenharmony_ci core->board.tuner_type = TUNER_PHILIPS_FM1216ME_MK3; 28738c2ecf20Sopenharmony_ci break; 28748c2ecf20Sopenharmony_ci } 28758c2ecf20Sopenharmony_ci 28768c2ecf20Sopenharmony_ci pr_info("Leadtek Winfast 2000XP Expert config: tuner=%d, eeprom[0]=0x%02x\n", 28778c2ecf20Sopenharmony_ci core->board.tuner_type, eeprom_data[0]); 28788c2ecf20Sopenharmony_ci} 28798c2ecf20Sopenharmony_ci 28808c2ecf20Sopenharmony_cistatic void hauppauge_eeprom(struct cx88_core *core, u8 *eeprom_data) 28818c2ecf20Sopenharmony_ci{ 28828c2ecf20Sopenharmony_ci struct tveeprom tv; 28838c2ecf20Sopenharmony_ci 28848c2ecf20Sopenharmony_ci tveeprom_hauppauge_analog(&tv, eeprom_data); 28858c2ecf20Sopenharmony_ci core->board.tuner_type = tv.tuner_type; 28868c2ecf20Sopenharmony_ci core->tuner_formats = tv.tuner_formats; 28878c2ecf20Sopenharmony_ci core->board.radio.type = tv.has_radio ? CX88_RADIO : 0; 28888c2ecf20Sopenharmony_ci core->model = tv.model; 28898c2ecf20Sopenharmony_ci 28908c2ecf20Sopenharmony_ci /* Make sure we support the board model */ 28918c2ecf20Sopenharmony_ci switch (tv.model) { 28928c2ecf20Sopenharmony_ci case 14009: /* WinTV-HVR3000 (Retail, IR, b/panel video, 3.5mm audio in) */ 28938c2ecf20Sopenharmony_ci case 14019: /* WinTV-HVR3000 (Retail, IR Blaster, b/panel video, 3.5mm audio in) */ 28948c2ecf20Sopenharmony_ci case 14029: /* WinTV-HVR3000 (Retail, IR, b/panel video, 3.5mm audio in - 880 bridge) */ 28958c2ecf20Sopenharmony_ci case 14109: /* WinTV-HVR3000 (Retail, IR, b/panel video, 3.5mm audio in - low profile) */ 28968c2ecf20Sopenharmony_ci case 14129: /* WinTV-HVR3000 (Retail, IR, b/panel video, 3.5mm audio in - 880 bridge - LP) */ 28978c2ecf20Sopenharmony_ci case 14559: /* WinTV-HVR3000 (OEM, no IR, b/panel video, 3.5mm audio in) */ 28988c2ecf20Sopenharmony_ci case 14569: /* WinTV-HVR3000 (OEM, no IR, no back panel video) */ 28998c2ecf20Sopenharmony_ci case 14659: /* WinTV-HVR3000 (OEM, no IR, b/panel video, RCA audio in - Low profile) */ 29008c2ecf20Sopenharmony_ci case 14669: /* WinTV-HVR3000 (OEM, no IR, no b/panel video - Low profile) */ 29018c2ecf20Sopenharmony_ci case 28552: /* WinTV-PVR 'Roslyn' (No IR) */ 29028c2ecf20Sopenharmony_ci case 34519: /* WinTV-PCI-FM */ 29038c2ecf20Sopenharmony_ci case 69009: 29048c2ecf20Sopenharmony_ci /* WinTV-HVR4000 (DVBS/S2/T, Video and IR, back panel inputs) */ 29058c2ecf20Sopenharmony_ci case 69100: /* WinTV-HVR4000LITE (DVBS/S2, IR) */ 29068c2ecf20Sopenharmony_ci case 69500: /* WinTV-HVR4000LITE (DVBS/S2, No IR) */ 29078c2ecf20Sopenharmony_ci case 69559: 29088c2ecf20Sopenharmony_ci /* WinTV-HVR4000 (DVBS/S2/T, Video no IR, back panel inputs) */ 29098c2ecf20Sopenharmony_ci case 69569: /* WinTV-HVR4000 (DVBS/S2/T, Video no IR) */ 29108c2ecf20Sopenharmony_ci case 90002: /* Nova-T-PCI (9002) */ 29118c2ecf20Sopenharmony_ci case 92001: /* Nova-S-Plus (Video and IR) */ 29128c2ecf20Sopenharmony_ci case 92002: /* Nova-S-Plus (Video and IR) */ 29138c2ecf20Sopenharmony_ci case 90003: /* Nova-T-PCI (9002 No RF out) */ 29148c2ecf20Sopenharmony_ci case 90500: /* Nova-T-PCI (oem) */ 29158c2ecf20Sopenharmony_ci case 90501: /* Nova-T-PCI (oem/IR) */ 29168c2ecf20Sopenharmony_ci case 92000: /* Nova-SE2 (OEM, No Video or IR) */ 29178c2ecf20Sopenharmony_ci case 92900: /* WinTV-IROnly (No analog or digital Video inputs) */ 29188c2ecf20Sopenharmony_ci case 94009: /* WinTV-HVR1100 (Video and IR Retail) */ 29198c2ecf20Sopenharmony_ci case 94501: /* WinTV-HVR1100 (Video and IR OEM) */ 29208c2ecf20Sopenharmony_ci case 96009: /* WinTV-HVR1300 (PAL Video, MPEG Video and IR RX) */ 29218c2ecf20Sopenharmony_ci case 96019: /* WinTV-HVR1300 (PAL Video, MPEG Video and IR RX/TX) */ 29228c2ecf20Sopenharmony_ci case 96559: /* WinTV-HVR1300 (PAL Video, MPEG Video no IR) */ 29238c2ecf20Sopenharmony_ci case 96569: /* WinTV-HVR1300 () */ 29248c2ecf20Sopenharmony_ci case 96659: /* WinTV-HVR1300 () */ 29258c2ecf20Sopenharmony_ci case 98559: /* WinTV-HVR1100LP (Video no IR, Retail - Low Profile) */ 29268c2ecf20Sopenharmony_ci /* known */ 29278c2ecf20Sopenharmony_ci break; 29288c2ecf20Sopenharmony_ci case CX88_BOARD_SAMSUNG_SMT_7020: 29298c2ecf20Sopenharmony_ci cx_set(MO_GP0_IO, 0x008989FF); 29308c2ecf20Sopenharmony_ci break; 29318c2ecf20Sopenharmony_ci default: 29328c2ecf20Sopenharmony_ci pr_warn("warning: unknown hauppauge model #%d\n", tv.model); 29338c2ecf20Sopenharmony_ci break; 29348c2ecf20Sopenharmony_ci } 29358c2ecf20Sopenharmony_ci 29368c2ecf20Sopenharmony_ci pr_info("hauppauge eeprom: model=%d\n", tv.model); 29378c2ecf20Sopenharmony_ci} 29388c2ecf20Sopenharmony_ci 29398c2ecf20Sopenharmony_ci/* 29408c2ecf20Sopenharmony_ci * some GDI (was: Modular Technology) specific stuff 29418c2ecf20Sopenharmony_ci */ 29428c2ecf20Sopenharmony_ci 29438c2ecf20Sopenharmony_cistatic const struct { 29448c2ecf20Sopenharmony_ci int id; 29458c2ecf20Sopenharmony_ci int fm; 29468c2ecf20Sopenharmony_ci const char *name; 29478c2ecf20Sopenharmony_ci} gdi_tuner[] = { 29488c2ecf20Sopenharmony_ci [0x01] = { .id = UNSET, 29498c2ecf20Sopenharmony_ci .name = "NTSC_M" }, 29508c2ecf20Sopenharmony_ci [0x02] = { .id = UNSET, 29518c2ecf20Sopenharmony_ci .name = "PAL_B" }, 29528c2ecf20Sopenharmony_ci [0x03] = { .id = UNSET, 29538c2ecf20Sopenharmony_ci .name = "PAL_I" }, 29548c2ecf20Sopenharmony_ci [0x04] = { .id = UNSET, 29558c2ecf20Sopenharmony_ci .name = "PAL_D" }, 29568c2ecf20Sopenharmony_ci [0x05] = { .id = UNSET, 29578c2ecf20Sopenharmony_ci .name = "SECAM" }, 29588c2ecf20Sopenharmony_ci 29598c2ecf20Sopenharmony_ci [0x10] = { .id = UNSET, 29608c2ecf20Sopenharmony_ci .fm = 1, 29618c2ecf20Sopenharmony_ci .name = "TEMIC_4049" }, 29628c2ecf20Sopenharmony_ci [0x11] = { .id = TUNER_TEMIC_4136FY5, 29638c2ecf20Sopenharmony_ci .name = "TEMIC_4136" }, 29648c2ecf20Sopenharmony_ci [0x12] = { .id = UNSET, 29658c2ecf20Sopenharmony_ci .name = "TEMIC_4146" }, 29668c2ecf20Sopenharmony_ci 29678c2ecf20Sopenharmony_ci [0x20] = { .id = TUNER_PHILIPS_FQ1216ME, 29688c2ecf20Sopenharmony_ci .fm = 1, 29698c2ecf20Sopenharmony_ci .name = "PHILIPS_FQ1216_MK3" }, 29708c2ecf20Sopenharmony_ci [0x21] = { .id = UNSET, .fm = 1, 29718c2ecf20Sopenharmony_ci .name = "PHILIPS_FQ1236_MK3" }, 29728c2ecf20Sopenharmony_ci [0x22] = { .id = UNSET, 29738c2ecf20Sopenharmony_ci .name = "PHILIPS_FI1236_MK3" }, 29748c2ecf20Sopenharmony_ci [0x23] = { .id = UNSET, 29758c2ecf20Sopenharmony_ci .name = "PHILIPS_FI1216_MK3" }, 29768c2ecf20Sopenharmony_ci}; 29778c2ecf20Sopenharmony_ci 29788c2ecf20Sopenharmony_cistatic void gdi_eeprom(struct cx88_core *core, u8 *eeprom_data) 29798c2ecf20Sopenharmony_ci{ 29808c2ecf20Sopenharmony_ci const char *name = (eeprom_data[0x0d] < ARRAY_SIZE(gdi_tuner)) 29818c2ecf20Sopenharmony_ci ? gdi_tuner[eeprom_data[0x0d]].name : NULL; 29828c2ecf20Sopenharmony_ci 29838c2ecf20Sopenharmony_ci pr_info("GDI: tuner=%s\n", name ? name : "unknown"); 29848c2ecf20Sopenharmony_ci if (!name) 29858c2ecf20Sopenharmony_ci return; 29868c2ecf20Sopenharmony_ci core->board.tuner_type = gdi_tuner[eeprom_data[0x0d]].id; 29878c2ecf20Sopenharmony_ci core->board.radio.type = gdi_tuner[eeprom_data[0x0d]].fm ? 29888c2ecf20Sopenharmony_ci CX88_RADIO : 0; 29898c2ecf20Sopenharmony_ci} 29908c2ecf20Sopenharmony_ci 29918c2ecf20Sopenharmony_ci/* 29928c2ecf20Sopenharmony_ci * some Divco specific stuff 29938c2ecf20Sopenharmony_ci */ 29948c2ecf20Sopenharmony_cistatic int cx88_dvico_xc2028_callback(struct cx88_core *core, 29958c2ecf20Sopenharmony_ci int command, int arg) 29968c2ecf20Sopenharmony_ci{ 29978c2ecf20Sopenharmony_ci switch (command) { 29988c2ecf20Sopenharmony_ci case XC2028_TUNER_RESET: 29998c2ecf20Sopenharmony_ci switch (core->boardnr) { 30008c2ecf20Sopenharmony_ci case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO: 30018c2ecf20Sopenharmony_ci /* GPIO-4 xc3028 tuner */ 30028c2ecf20Sopenharmony_ci 30038c2ecf20Sopenharmony_ci cx_set(MO_GP0_IO, 0x00001000); 30048c2ecf20Sopenharmony_ci cx_clear(MO_GP0_IO, 0x00000010); 30058c2ecf20Sopenharmony_ci msleep(100); 30068c2ecf20Sopenharmony_ci cx_set(MO_GP0_IO, 0x00000010); 30078c2ecf20Sopenharmony_ci msleep(100); 30088c2ecf20Sopenharmony_ci break; 30098c2ecf20Sopenharmony_ci default: 30108c2ecf20Sopenharmony_ci cx_write(MO_GP0_IO, 0x101000); 30118c2ecf20Sopenharmony_ci mdelay(5); 30128c2ecf20Sopenharmony_ci cx_set(MO_GP0_IO, 0x101010); 30138c2ecf20Sopenharmony_ci } 30148c2ecf20Sopenharmony_ci break; 30158c2ecf20Sopenharmony_ci default: 30168c2ecf20Sopenharmony_ci return -EINVAL; 30178c2ecf20Sopenharmony_ci } 30188c2ecf20Sopenharmony_ci 30198c2ecf20Sopenharmony_ci return 0; 30208c2ecf20Sopenharmony_ci} 30218c2ecf20Sopenharmony_ci 30228c2ecf20Sopenharmony_ci/* 30238c2ecf20Sopenharmony_ci * some Geniatech specific stuff 30248c2ecf20Sopenharmony_ci */ 30258c2ecf20Sopenharmony_ci 30268c2ecf20Sopenharmony_cistatic int cx88_xc3028_geniatech_tuner_callback(struct cx88_core *core, 30278c2ecf20Sopenharmony_ci int command, int mode) 30288c2ecf20Sopenharmony_ci{ 30298c2ecf20Sopenharmony_ci switch (command) { 30308c2ecf20Sopenharmony_ci case XC2028_TUNER_RESET: 30318c2ecf20Sopenharmony_ci switch (INPUT(core->input).type) { 30328c2ecf20Sopenharmony_ci case CX88_RADIO: 30338c2ecf20Sopenharmony_ci break; 30348c2ecf20Sopenharmony_ci case CX88_VMUX_DVB: 30358c2ecf20Sopenharmony_ci cx_write(MO_GP1_IO, 0x030302); 30368c2ecf20Sopenharmony_ci mdelay(50); 30378c2ecf20Sopenharmony_ci break; 30388c2ecf20Sopenharmony_ci default: 30398c2ecf20Sopenharmony_ci cx_write(MO_GP1_IO, 0x030301); 30408c2ecf20Sopenharmony_ci mdelay(50); 30418c2ecf20Sopenharmony_ci } 30428c2ecf20Sopenharmony_ci cx_write(MO_GP1_IO, 0x101010); 30438c2ecf20Sopenharmony_ci mdelay(50); 30448c2ecf20Sopenharmony_ci cx_write(MO_GP1_IO, 0x101000); 30458c2ecf20Sopenharmony_ci mdelay(50); 30468c2ecf20Sopenharmony_ci cx_write(MO_GP1_IO, 0x101010); 30478c2ecf20Sopenharmony_ci mdelay(50); 30488c2ecf20Sopenharmony_ci return 0; 30498c2ecf20Sopenharmony_ci } 30508c2ecf20Sopenharmony_ci return -EINVAL; 30518c2ecf20Sopenharmony_ci} 30528c2ecf20Sopenharmony_ci 30538c2ecf20Sopenharmony_cistatic int cx88_xc3028_winfast1800h_callback(struct cx88_core *core, 30548c2ecf20Sopenharmony_ci int command, int arg) 30558c2ecf20Sopenharmony_ci{ 30568c2ecf20Sopenharmony_ci switch (command) { 30578c2ecf20Sopenharmony_ci case XC2028_TUNER_RESET: 30588c2ecf20Sopenharmony_ci /* GPIO 12 (xc3028 tuner reset) */ 30598c2ecf20Sopenharmony_ci cx_set(MO_GP1_IO, 0x1010); 30608c2ecf20Sopenharmony_ci mdelay(50); 30618c2ecf20Sopenharmony_ci cx_clear(MO_GP1_IO, 0x10); 30628c2ecf20Sopenharmony_ci mdelay(75); 30638c2ecf20Sopenharmony_ci cx_set(MO_GP1_IO, 0x10); 30648c2ecf20Sopenharmony_ci mdelay(75); 30658c2ecf20Sopenharmony_ci return 0; 30668c2ecf20Sopenharmony_ci } 30678c2ecf20Sopenharmony_ci return -EINVAL; 30688c2ecf20Sopenharmony_ci} 30698c2ecf20Sopenharmony_ci 30708c2ecf20Sopenharmony_cistatic int cx88_xc4000_winfast2000h_plus_callback(struct cx88_core *core, 30718c2ecf20Sopenharmony_ci int command, int arg) 30728c2ecf20Sopenharmony_ci{ 30738c2ecf20Sopenharmony_ci switch (command) { 30748c2ecf20Sopenharmony_ci case XC4000_TUNER_RESET: 30758c2ecf20Sopenharmony_ci /* GPIO 12 (xc4000 tuner reset) */ 30768c2ecf20Sopenharmony_ci cx_set(MO_GP1_IO, 0x1010); 30778c2ecf20Sopenharmony_ci mdelay(50); 30788c2ecf20Sopenharmony_ci cx_clear(MO_GP1_IO, 0x10); 30798c2ecf20Sopenharmony_ci mdelay(75); 30808c2ecf20Sopenharmony_ci cx_set(MO_GP1_IO, 0x10); 30818c2ecf20Sopenharmony_ci mdelay(75); 30828c2ecf20Sopenharmony_ci return 0; 30838c2ecf20Sopenharmony_ci } 30848c2ecf20Sopenharmony_ci return -EINVAL; 30858c2ecf20Sopenharmony_ci} 30868c2ecf20Sopenharmony_ci 30878c2ecf20Sopenharmony_ci/* 30888c2ecf20Sopenharmony_ci * some Divco specific stuff 30898c2ecf20Sopenharmony_ci */ 30908c2ecf20Sopenharmony_cistatic int cx88_pv_8000gt_callback(struct cx88_core *core, 30918c2ecf20Sopenharmony_ci int command, int arg) 30928c2ecf20Sopenharmony_ci{ 30938c2ecf20Sopenharmony_ci switch (command) { 30948c2ecf20Sopenharmony_ci case XC2028_TUNER_RESET: 30958c2ecf20Sopenharmony_ci cx_write(MO_GP2_IO, 0xcf7); 30968c2ecf20Sopenharmony_ci mdelay(50); 30978c2ecf20Sopenharmony_ci cx_write(MO_GP2_IO, 0xef5); 30988c2ecf20Sopenharmony_ci mdelay(50); 30998c2ecf20Sopenharmony_ci cx_write(MO_GP2_IO, 0xcf7); 31008c2ecf20Sopenharmony_ci break; 31018c2ecf20Sopenharmony_ci default: 31028c2ecf20Sopenharmony_ci return -EINVAL; 31038c2ecf20Sopenharmony_ci } 31048c2ecf20Sopenharmony_ci 31058c2ecf20Sopenharmony_ci return 0; 31068c2ecf20Sopenharmony_ci} 31078c2ecf20Sopenharmony_ci 31088c2ecf20Sopenharmony_ci/* 31098c2ecf20Sopenharmony_ci * some DViCO specific stuff 31108c2ecf20Sopenharmony_ci */ 31118c2ecf20Sopenharmony_ci 31128c2ecf20Sopenharmony_cistatic void dvico_fusionhdtv_hybrid_init(struct cx88_core *core) 31138c2ecf20Sopenharmony_ci{ 31148c2ecf20Sopenharmony_ci struct i2c_msg msg = { .addr = 0x45, .flags = 0 }; 31158c2ecf20Sopenharmony_ci int i, err; 31168c2ecf20Sopenharmony_ci static u8 init_bufs[13][5] = { 31178c2ecf20Sopenharmony_ci { 0x10, 0x00, 0x20, 0x01, 0x03 }, 31188c2ecf20Sopenharmony_ci { 0x10, 0x10, 0x01, 0x00, 0x21 }, 31198c2ecf20Sopenharmony_ci { 0x10, 0x10, 0x10, 0x00, 0xCA }, 31208c2ecf20Sopenharmony_ci { 0x10, 0x10, 0x12, 0x00, 0x08 }, 31218c2ecf20Sopenharmony_ci { 0x10, 0x10, 0x13, 0x00, 0x0A }, 31228c2ecf20Sopenharmony_ci { 0x10, 0x10, 0x16, 0x01, 0xC0 }, 31238c2ecf20Sopenharmony_ci { 0x10, 0x10, 0x22, 0x01, 0x3D }, 31248c2ecf20Sopenharmony_ci { 0x10, 0x10, 0x73, 0x01, 0x2E }, 31258c2ecf20Sopenharmony_ci { 0x10, 0x10, 0x72, 0x00, 0xC5 }, 31268c2ecf20Sopenharmony_ci { 0x10, 0x10, 0x71, 0x01, 0x97 }, 31278c2ecf20Sopenharmony_ci { 0x10, 0x10, 0x70, 0x00, 0x0F }, 31288c2ecf20Sopenharmony_ci { 0x10, 0x10, 0xB0, 0x00, 0x01 }, 31298c2ecf20Sopenharmony_ci { 0x03, 0x0C }, 31308c2ecf20Sopenharmony_ci }; 31318c2ecf20Sopenharmony_ci 31328c2ecf20Sopenharmony_ci for (i = 0; i < ARRAY_SIZE(init_bufs); i++) { 31338c2ecf20Sopenharmony_ci msg.buf = init_bufs[i]; 31348c2ecf20Sopenharmony_ci msg.len = (i != 12 ? 5 : 2); 31358c2ecf20Sopenharmony_ci err = i2c_transfer(&core->i2c_adap, &msg, 1); 31368c2ecf20Sopenharmony_ci if (err != 1) { 31378c2ecf20Sopenharmony_ci pr_warn("dvico_fusionhdtv_hybrid_init buf %d failed (err = %d)!\n", 31388c2ecf20Sopenharmony_ci i, err); 31398c2ecf20Sopenharmony_ci return; 31408c2ecf20Sopenharmony_ci } 31418c2ecf20Sopenharmony_ci } 31428c2ecf20Sopenharmony_ci} 31438c2ecf20Sopenharmony_ci 31448c2ecf20Sopenharmony_cistatic int cx88_xc2028_tuner_callback(struct cx88_core *core, 31458c2ecf20Sopenharmony_ci int command, int arg) 31468c2ecf20Sopenharmony_ci{ 31478c2ecf20Sopenharmony_ci /* Board-specific callbacks */ 31488c2ecf20Sopenharmony_ci switch (core->boardnr) { 31498c2ecf20Sopenharmony_ci case CX88_BOARD_POWERCOLOR_REAL_ANGEL: 31508c2ecf20Sopenharmony_ci case CX88_BOARD_GENIATECH_X8000_MT: 31518c2ecf20Sopenharmony_ci case CX88_BOARD_KWORLD_ATSC_120: 31528c2ecf20Sopenharmony_ci return cx88_xc3028_geniatech_tuner_callback(core, 31538c2ecf20Sopenharmony_ci command, arg); 31548c2ecf20Sopenharmony_ci case CX88_BOARD_PROLINK_PV_8000GT: 31558c2ecf20Sopenharmony_ci case CX88_BOARD_PROLINK_PV_GLOBAL_XTREME: 31568c2ecf20Sopenharmony_ci return cx88_pv_8000gt_callback(core, command, arg); 31578c2ecf20Sopenharmony_ci case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO: 31588c2ecf20Sopenharmony_ci case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO: 31598c2ecf20Sopenharmony_ci return cx88_dvico_xc2028_callback(core, command, arg); 31608c2ecf20Sopenharmony_ci case CX88_BOARD_NOTONLYTV_LV3H: 31618c2ecf20Sopenharmony_ci case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL: 31628c2ecf20Sopenharmony_ci case CX88_BOARD_WINFAST_DTV1800H: 31638c2ecf20Sopenharmony_ci return cx88_xc3028_winfast1800h_callback(core, command, arg); 31648c2ecf20Sopenharmony_ci } 31658c2ecf20Sopenharmony_ci 31668c2ecf20Sopenharmony_ci switch (command) { 31678c2ecf20Sopenharmony_ci case XC2028_TUNER_RESET: 31688c2ecf20Sopenharmony_ci switch (INPUT(core->input).type) { 31698c2ecf20Sopenharmony_ci case CX88_RADIO: 31708c2ecf20Sopenharmony_ci dprintk(1, "setting GPIO to radio!\n"); 31718c2ecf20Sopenharmony_ci cx_write(MO_GP0_IO, 0x4ff); 31728c2ecf20Sopenharmony_ci mdelay(250); 31738c2ecf20Sopenharmony_ci cx_write(MO_GP2_IO, 0xff); 31748c2ecf20Sopenharmony_ci mdelay(250); 31758c2ecf20Sopenharmony_ci break; 31768c2ecf20Sopenharmony_ci case CX88_VMUX_DVB: /* Digital TV*/ 31778c2ecf20Sopenharmony_ci default: /* Analog TV */ 31788c2ecf20Sopenharmony_ci dprintk(1, "setting GPIO to TV!\n"); 31798c2ecf20Sopenharmony_ci break; 31808c2ecf20Sopenharmony_ci } 31818c2ecf20Sopenharmony_ci cx_write(MO_GP1_IO, 0x101010); 31828c2ecf20Sopenharmony_ci mdelay(250); 31838c2ecf20Sopenharmony_ci cx_write(MO_GP1_IO, 0x101000); 31848c2ecf20Sopenharmony_ci mdelay(250); 31858c2ecf20Sopenharmony_ci cx_write(MO_GP1_IO, 0x101010); 31868c2ecf20Sopenharmony_ci mdelay(250); 31878c2ecf20Sopenharmony_ci return 0; 31888c2ecf20Sopenharmony_ci } 31898c2ecf20Sopenharmony_ci return -EINVAL; 31908c2ecf20Sopenharmony_ci} 31918c2ecf20Sopenharmony_ci 31928c2ecf20Sopenharmony_cistatic int cx88_xc4000_tuner_callback(struct cx88_core *core, 31938c2ecf20Sopenharmony_ci int command, int arg) 31948c2ecf20Sopenharmony_ci{ 31958c2ecf20Sopenharmony_ci /* Board-specific callbacks */ 31968c2ecf20Sopenharmony_ci switch (core->boardnr) { 31978c2ecf20Sopenharmony_ci case CX88_BOARD_WINFAST_DTV1800H_XC4000: 31988c2ecf20Sopenharmony_ci case CX88_BOARD_WINFAST_DTV2000H_PLUS: 31998c2ecf20Sopenharmony_ci case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F36: 32008c2ecf20Sopenharmony_ci case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F43: 32018c2ecf20Sopenharmony_ci return cx88_xc4000_winfast2000h_plus_callback(core, 32028c2ecf20Sopenharmony_ci command, arg); 32038c2ecf20Sopenharmony_ci } 32048c2ecf20Sopenharmony_ci return -EINVAL; 32058c2ecf20Sopenharmony_ci} 32068c2ecf20Sopenharmony_ci 32078c2ecf20Sopenharmony_ci/* 32088c2ecf20Sopenharmony_ci * Tuner callback function. Currently only needed for the Pinnacle 32098c2ecf20Sopenharmony_ci * PCTV HD 800i with an xc5000 sillicon tuner. This is used for both 32108c2ecf20Sopenharmony_ci * analog tuner attach (tuner-core.c) and dvb tuner attach (cx88-dvb.c) 32118c2ecf20Sopenharmony_ci */ 32128c2ecf20Sopenharmony_cistatic int cx88_xc5000_tuner_callback(struct cx88_core *core, 32138c2ecf20Sopenharmony_ci int command, int arg) 32148c2ecf20Sopenharmony_ci{ 32158c2ecf20Sopenharmony_ci switch (core->boardnr) { 32168c2ecf20Sopenharmony_ci case CX88_BOARD_PINNACLE_PCTV_HD_800i: 32178c2ecf20Sopenharmony_ci if (command == 0) { /* This is the reset command from xc5000 */ 32188c2ecf20Sopenharmony_ci 32198c2ecf20Sopenharmony_ci /* 32208c2ecf20Sopenharmony_ci * djh - According to the engineer at PCTV Systems, 32218c2ecf20Sopenharmony_ci * the xc5000 reset pin is supposed to be on GPIO12. 32228c2ecf20Sopenharmony_ci * However, despite three nights of effort, pulling 32238c2ecf20Sopenharmony_ci * that GPIO low didn't reset the xc5000. While 32248c2ecf20Sopenharmony_ci * pulling MO_SRST_IO low does reset the xc5000, this 32258c2ecf20Sopenharmony_ci * also resets in the s5h1409 being reset as well. 32268c2ecf20Sopenharmony_ci * This causes tuning to always fail since the internal 32278c2ecf20Sopenharmony_ci * state of the s5h1409 does not match the driver's 32288c2ecf20Sopenharmony_ci * state. Given that the only two conditions in which 32298c2ecf20Sopenharmony_ci * the driver performs a reset is during firmware load 32308c2ecf20Sopenharmony_ci * and powering down the chip, I am taking out the 32318c2ecf20Sopenharmony_ci * reset. We know that the chip is being reset 32328c2ecf20Sopenharmony_ci * when the cx88 comes online, and not being able to 32338c2ecf20Sopenharmony_ci * do power management for this board is worse than 32348c2ecf20Sopenharmony_ci * not having any tuning at all. 32358c2ecf20Sopenharmony_ci */ 32368c2ecf20Sopenharmony_ci return 0; 32378c2ecf20Sopenharmony_ci } 32388c2ecf20Sopenharmony_ci 32398c2ecf20Sopenharmony_ci dprintk(1, "xc5000: unknown tuner callback command.\n"); 32408c2ecf20Sopenharmony_ci return -EINVAL; 32418c2ecf20Sopenharmony_ci case CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD: 32428c2ecf20Sopenharmony_ci if (command == 0) { /* This is the reset command from xc5000 */ 32438c2ecf20Sopenharmony_ci cx_clear(MO_GP0_IO, 0x00000010); 32448c2ecf20Sopenharmony_ci usleep_range(10000, 20000); 32458c2ecf20Sopenharmony_ci cx_set(MO_GP0_IO, 0x00000010); 32468c2ecf20Sopenharmony_ci return 0; 32478c2ecf20Sopenharmony_ci } 32488c2ecf20Sopenharmony_ci 32498c2ecf20Sopenharmony_ci dprintk(1, "xc5000: unknown tuner callback command.\n"); 32508c2ecf20Sopenharmony_ci return -EINVAL; 32518c2ecf20Sopenharmony_ci } 32528c2ecf20Sopenharmony_ci return 0; /* Should never be here */ 32538c2ecf20Sopenharmony_ci} 32548c2ecf20Sopenharmony_ci 32558c2ecf20Sopenharmony_ciint cx88_tuner_callback(void *priv, int component, int command, int arg) 32568c2ecf20Sopenharmony_ci{ 32578c2ecf20Sopenharmony_ci struct i2c_algo_bit_data *i2c_algo = priv; 32588c2ecf20Sopenharmony_ci struct cx88_core *core; 32598c2ecf20Sopenharmony_ci 32608c2ecf20Sopenharmony_ci if (!i2c_algo) { 32618c2ecf20Sopenharmony_ci pr_err("Error - i2c private data undefined.\n"); 32628c2ecf20Sopenharmony_ci return -EINVAL; 32638c2ecf20Sopenharmony_ci } 32648c2ecf20Sopenharmony_ci 32658c2ecf20Sopenharmony_ci core = i2c_algo->data; 32668c2ecf20Sopenharmony_ci 32678c2ecf20Sopenharmony_ci if (!core) { 32688c2ecf20Sopenharmony_ci pr_err("Error - device struct undefined.\n"); 32698c2ecf20Sopenharmony_ci return -EINVAL; 32708c2ecf20Sopenharmony_ci } 32718c2ecf20Sopenharmony_ci 32728c2ecf20Sopenharmony_ci if (component != DVB_FRONTEND_COMPONENT_TUNER) 32738c2ecf20Sopenharmony_ci return -EINVAL; 32748c2ecf20Sopenharmony_ci 32758c2ecf20Sopenharmony_ci switch (core->board.tuner_type) { 32768c2ecf20Sopenharmony_ci case TUNER_XC2028: 32778c2ecf20Sopenharmony_ci dprintk(1, "Calling XC2028/3028 callback\n"); 32788c2ecf20Sopenharmony_ci return cx88_xc2028_tuner_callback(core, command, arg); 32798c2ecf20Sopenharmony_ci case TUNER_XC4000: 32808c2ecf20Sopenharmony_ci dprintk(1, "Calling XC4000 callback\n"); 32818c2ecf20Sopenharmony_ci return cx88_xc4000_tuner_callback(core, command, arg); 32828c2ecf20Sopenharmony_ci case TUNER_XC5000: 32838c2ecf20Sopenharmony_ci dprintk(1, "Calling XC5000 callback\n"); 32848c2ecf20Sopenharmony_ci return cx88_xc5000_tuner_callback(core, command, arg); 32858c2ecf20Sopenharmony_ci } 32868c2ecf20Sopenharmony_ci pr_err("Error: Calling callback for tuner %d\n", 32878c2ecf20Sopenharmony_ci core->board.tuner_type); 32888c2ecf20Sopenharmony_ci return -EINVAL; 32898c2ecf20Sopenharmony_ci} 32908c2ecf20Sopenharmony_ciEXPORT_SYMBOL(cx88_tuner_callback); 32918c2ecf20Sopenharmony_ci 32928c2ecf20Sopenharmony_ci/* ----------------------------------------------------------------------- */ 32938c2ecf20Sopenharmony_ci 32948c2ecf20Sopenharmony_cistatic void cx88_card_list(struct cx88_core *core, struct pci_dev *pci) 32958c2ecf20Sopenharmony_ci{ 32968c2ecf20Sopenharmony_ci int i; 32978c2ecf20Sopenharmony_ci 32988c2ecf20Sopenharmony_ci if (!pci->subsystem_vendor && !pci->subsystem_device) { 32998c2ecf20Sopenharmony_ci pr_err("Your board has no valid PCI Subsystem ID and thus can't\n"); 33008c2ecf20Sopenharmony_ci pr_err("be autodetected. Please pass card=<n> insmod option to\n"); 33018c2ecf20Sopenharmony_ci pr_err("workaround that. Redirect complaints to the vendor of\n"); 33028c2ecf20Sopenharmony_ci pr_err("the TV card\n"); 33038c2ecf20Sopenharmony_ci } else { 33048c2ecf20Sopenharmony_ci pr_err("Your board isn't known (yet) to the driver. You can\n"); 33058c2ecf20Sopenharmony_ci pr_err("try to pick one of the existing card configs via\n"); 33068c2ecf20Sopenharmony_ci pr_err("card=<n> insmod option. Updating to the latest\n"); 33078c2ecf20Sopenharmony_ci pr_err("version might help as well.\n"); 33088c2ecf20Sopenharmony_ci } 33098c2ecf20Sopenharmony_ci pr_err("Here is a list of valid choices for the card=<n> insmod option:\n"); 33108c2ecf20Sopenharmony_ci for (i = 0; i < ARRAY_SIZE(cx88_boards); i++) 33118c2ecf20Sopenharmony_ci pr_err(" card=%d -> %s\n", i, cx88_boards[i].name); 33128c2ecf20Sopenharmony_ci} 33138c2ecf20Sopenharmony_ci 33148c2ecf20Sopenharmony_cistatic void cx88_card_setup_pre_i2c(struct cx88_core *core) 33158c2ecf20Sopenharmony_ci{ 33168c2ecf20Sopenharmony_ci switch (core->boardnr) { 33178c2ecf20Sopenharmony_ci case CX88_BOARD_HAUPPAUGE_HVR1300: 33188c2ecf20Sopenharmony_ci /* 33198c2ecf20Sopenharmony_ci * Bring the 702 demod up before i2c scanning/attach or 33208c2ecf20Sopenharmony_ci * devices are hidden. 33218c2ecf20Sopenharmony_ci * 33228c2ecf20Sopenharmony_ci * We leave here with the 702 on the bus 33238c2ecf20Sopenharmony_ci * 33248c2ecf20Sopenharmony_ci * "reset the IR receiver on GPIO[3]" 33258c2ecf20Sopenharmony_ci * Reported by Mike Crash <mike AT mikecrash.com> 33268c2ecf20Sopenharmony_ci */ 33278c2ecf20Sopenharmony_ci cx_write(MO_GP0_IO, 0x0000ef88); 33288c2ecf20Sopenharmony_ci udelay(1000); 33298c2ecf20Sopenharmony_ci cx_clear(MO_GP0_IO, 0x00000088); 33308c2ecf20Sopenharmony_ci udelay(50); 33318c2ecf20Sopenharmony_ci cx_set(MO_GP0_IO, 0x00000088); /* 702 out of reset */ 33328c2ecf20Sopenharmony_ci udelay(1000); 33338c2ecf20Sopenharmony_ci break; 33348c2ecf20Sopenharmony_ci 33358c2ecf20Sopenharmony_ci case CX88_BOARD_PROLINK_PV_GLOBAL_XTREME: 33368c2ecf20Sopenharmony_ci case CX88_BOARD_PROLINK_PV_8000GT: 33378c2ecf20Sopenharmony_ci cx_write(MO_GP2_IO, 0xcf7); 33388c2ecf20Sopenharmony_ci msleep(50); 33398c2ecf20Sopenharmony_ci cx_write(MO_GP2_IO, 0xef5); 33408c2ecf20Sopenharmony_ci msleep(50); 33418c2ecf20Sopenharmony_ci cx_write(MO_GP2_IO, 0xcf7); 33428c2ecf20Sopenharmony_ci usleep_range(10000, 20000); 33438c2ecf20Sopenharmony_ci break; 33448c2ecf20Sopenharmony_ci 33458c2ecf20Sopenharmony_ci case CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD: 33468c2ecf20Sopenharmony_ci /* Enable the xc5000 tuner */ 33478c2ecf20Sopenharmony_ci cx_set(MO_GP0_IO, 0x00001010); 33488c2ecf20Sopenharmony_ci break; 33498c2ecf20Sopenharmony_ci 33508c2ecf20Sopenharmony_ci case CX88_BOARD_WINFAST_DTV2000H_J: 33518c2ecf20Sopenharmony_ci case CX88_BOARD_HAUPPAUGE_HVR3000: 33528c2ecf20Sopenharmony_ci case CX88_BOARD_HAUPPAUGE_HVR4000: 33538c2ecf20Sopenharmony_ci /* Init GPIO */ 33548c2ecf20Sopenharmony_ci cx_write(MO_GP0_IO, core->board.input[0].gpio0); 33558c2ecf20Sopenharmony_ci udelay(1000); 33568c2ecf20Sopenharmony_ci cx_clear(MO_GP0_IO, 0x00000080); 33578c2ecf20Sopenharmony_ci udelay(50); 33588c2ecf20Sopenharmony_ci cx_set(MO_GP0_IO, 0x00000080); /* 702 out of reset */ 33598c2ecf20Sopenharmony_ci udelay(1000); 33608c2ecf20Sopenharmony_ci break; 33618c2ecf20Sopenharmony_ci 33628c2ecf20Sopenharmony_ci case CX88_BOARD_NOTONLYTV_LV3H: 33638c2ecf20Sopenharmony_ci case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL: 33648c2ecf20Sopenharmony_ci case CX88_BOARD_WINFAST_DTV1800H: 33658c2ecf20Sopenharmony_ci cx88_xc3028_winfast1800h_callback(core, XC2028_TUNER_RESET, 0); 33668c2ecf20Sopenharmony_ci break; 33678c2ecf20Sopenharmony_ci 33688c2ecf20Sopenharmony_ci case CX88_BOARD_WINFAST_DTV1800H_XC4000: 33698c2ecf20Sopenharmony_ci case CX88_BOARD_WINFAST_DTV2000H_PLUS: 33708c2ecf20Sopenharmony_ci case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F36: 33718c2ecf20Sopenharmony_ci case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F43: 33728c2ecf20Sopenharmony_ci cx88_xc4000_winfast2000h_plus_callback(core, 33738c2ecf20Sopenharmony_ci XC4000_TUNER_RESET, 0); 33748c2ecf20Sopenharmony_ci break; 33758c2ecf20Sopenharmony_ci 33768c2ecf20Sopenharmony_ci case CX88_BOARD_TWINHAN_VP1027_DVBS: 33778c2ecf20Sopenharmony_ci cx_write(MO_GP0_IO, 0x00003230); 33788c2ecf20Sopenharmony_ci cx_write(MO_GP0_IO, 0x00003210); 33798c2ecf20Sopenharmony_ci usleep_range(10000, 20000); 33808c2ecf20Sopenharmony_ci cx_write(MO_GP0_IO, 0x00001230); 33818c2ecf20Sopenharmony_ci break; 33828c2ecf20Sopenharmony_ci } 33838c2ecf20Sopenharmony_ci} 33848c2ecf20Sopenharmony_ci 33858c2ecf20Sopenharmony_ci/* 33868c2ecf20Sopenharmony_ci * Sets board-dependent xc3028 configuration 33878c2ecf20Sopenharmony_ci */ 33888c2ecf20Sopenharmony_civoid cx88_setup_xc3028(struct cx88_core *core, struct xc2028_ctrl *ctl) 33898c2ecf20Sopenharmony_ci{ 33908c2ecf20Sopenharmony_ci memset(ctl, 0, sizeof(*ctl)); 33918c2ecf20Sopenharmony_ci 33928c2ecf20Sopenharmony_ci ctl->fname = XC2028_DEFAULT_FIRMWARE; 33938c2ecf20Sopenharmony_ci ctl->max_len = 64; 33948c2ecf20Sopenharmony_ci 33958c2ecf20Sopenharmony_ci switch (core->boardnr) { 33968c2ecf20Sopenharmony_ci case CX88_BOARD_POWERCOLOR_REAL_ANGEL: 33978c2ecf20Sopenharmony_ci /* Now works with firmware version 2.7 */ 33988c2ecf20Sopenharmony_ci if (core->i2c_algo.udelay < 16) 33998c2ecf20Sopenharmony_ci core->i2c_algo.udelay = 16; 34008c2ecf20Sopenharmony_ci break; 34018c2ecf20Sopenharmony_ci case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO: 34028c2ecf20Sopenharmony_ci case CX88_BOARD_WINFAST_DTV1800H: 34038c2ecf20Sopenharmony_ci ctl->demod = XC3028_FE_ZARLINK456; 34048c2ecf20Sopenharmony_ci break; 34058c2ecf20Sopenharmony_ci case CX88_BOARD_KWORLD_ATSC_120: 34068c2ecf20Sopenharmony_ci case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO: 34078c2ecf20Sopenharmony_ci ctl->demod = XC3028_FE_OREN538; 34088c2ecf20Sopenharmony_ci break; 34098c2ecf20Sopenharmony_ci case CX88_BOARD_GENIATECH_X8000_MT: 34108c2ecf20Sopenharmony_ci /* 34118c2ecf20Sopenharmony_ci * FIXME: For this board, the xc3028 never recovers after being 34128c2ecf20Sopenharmony_ci * powered down (the reset GPIO probably is not set properly). 34138c2ecf20Sopenharmony_ci * We don't have access to the hardware so we cannot determine 34148c2ecf20Sopenharmony_ci * which GPIO is used for xc3028, so just disable power xc3028 34158c2ecf20Sopenharmony_ci * power management for now 34168c2ecf20Sopenharmony_ci */ 34178c2ecf20Sopenharmony_ci ctl->disable_power_mgmt = 1; 34188c2ecf20Sopenharmony_ci break; 34198c2ecf20Sopenharmony_ci case CX88_BOARD_NOTONLYTV_LV3H: 34208c2ecf20Sopenharmony_ci ctl->demod = XC3028_FE_ZARLINK456; 34218c2ecf20Sopenharmony_ci ctl->fname = XC3028L_DEFAULT_FIRMWARE; 34228c2ecf20Sopenharmony_ci ctl->read_not_reliable = 1; 34238c2ecf20Sopenharmony_ci break; 34248c2ecf20Sopenharmony_ci case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL: 34258c2ecf20Sopenharmony_ci case CX88_BOARD_PROLINK_PV_GLOBAL_XTREME: 34268c2ecf20Sopenharmony_ci case CX88_BOARD_PROLINK_PV_8000GT: 34278c2ecf20Sopenharmony_ci /* 34288c2ecf20Sopenharmony_ci * Those boards uses non-MTS firmware 34298c2ecf20Sopenharmony_ci */ 34308c2ecf20Sopenharmony_ci break; 34318c2ecf20Sopenharmony_ci case CX88_BOARD_PINNACLE_HYBRID_PCTV: 34328c2ecf20Sopenharmony_ci case CX88_BOARD_TERRATEC_CINERGY_HT_PCI_MKII: 34338c2ecf20Sopenharmony_ci ctl->demod = XC3028_FE_ZARLINK456; 34348c2ecf20Sopenharmony_ci ctl->mts = 1; 34358c2ecf20Sopenharmony_ci break; 34368c2ecf20Sopenharmony_ci default: 34378c2ecf20Sopenharmony_ci ctl->demod = XC3028_FE_OREN538; 34388c2ecf20Sopenharmony_ci ctl->mts = 1; 34398c2ecf20Sopenharmony_ci } 34408c2ecf20Sopenharmony_ci} 34418c2ecf20Sopenharmony_ciEXPORT_SYMBOL_GPL(cx88_setup_xc3028); 34428c2ecf20Sopenharmony_ci 34438c2ecf20Sopenharmony_cistatic void cx88_card_setup(struct cx88_core *core) 34448c2ecf20Sopenharmony_ci{ 34458c2ecf20Sopenharmony_ci static u8 eeprom[256]; 34468c2ecf20Sopenharmony_ci struct tuner_setup tun_setup; 34478c2ecf20Sopenharmony_ci unsigned int mode_mask = T_RADIO | T_ANALOG_TV; 34488c2ecf20Sopenharmony_ci 34498c2ecf20Sopenharmony_ci memset(&tun_setup, 0, sizeof(tun_setup)); 34508c2ecf20Sopenharmony_ci 34518c2ecf20Sopenharmony_ci if (!core->i2c_rc) { 34528c2ecf20Sopenharmony_ci core->i2c_client.addr = 0xa0 >> 1; 34538c2ecf20Sopenharmony_ci tveeprom_read(&core->i2c_client, eeprom, sizeof(eeprom)); 34548c2ecf20Sopenharmony_ci } 34558c2ecf20Sopenharmony_ci 34568c2ecf20Sopenharmony_ci switch (core->boardnr) { 34578c2ecf20Sopenharmony_ci case CX88_BOARD_HAUPPAUGE: 34588c2ecf20Sopenharmony_ci case CX88_BOARD_HAUPPAUGE_ROSLYN: 34598c2ecf20Sopenharmony_ci if (!core->i2c_rc) 34608c2ecf20Sopenharmony_ci hauppauge_eeprom(core, eeprom + 8); 34618c2ecf20Sopenharmony_ci break; 34628c2ecf20Sopenharmony_ci case CX88_BOARD_GDI: 34638c2ecf20Sopenharmony_ci if (!core->i2c_rc) 34648c2ecf20Sopenharmony_ci gdi_eeprom(core, eeprom); 34658c2ecf20Sopenharmony_ci break; 34668c2ecf20Sopenharmony_ci case CX88_BOARD_LEADTEK_PVR2000: 34678c2ecf20Sopenharmony_ci case CX88_BOARD_WINFAST_DV2000: 34688c2ecf20Sopenharmony_ci case CX88_BOARD_WINFAST2000XP_EXPERT: 34698c2ecf20Sopenharmony_ci if (!core->i2c_rc) 34708c2ecf20Sopenharmony_ci leadtek_eeprom(core, eeprom); 34718c2ecf20Sopenharmony_ci break; 34728c2ecf20Sopenharmony_ci case CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1: 34738c2ecf20Sopenharmony_ci case CX88_BOARD_HAUPPAUGE_NOVASE2_S1: 34748c2ecf20Sopenharmony_ci case CX88_BOARD_HAUPPAUGE_DVB_T1: 34758c2ecf20Sopenharmony_ci case CX88_BOARD_HAUPPAUGE_HVR1100: 34768c2ecf20Sopenharmony_ci case CX88_BOARD_HAUPPAUGE_HVR1100LP: 34778c2ecf20Sopenharmony_ci case CX88_BOARD_HAUPPAUGE_HVR3000: 34788c2ecf20Sopenharmony_ci case CX88_BOARD_HAUPPAUGE_HVR1300: 34798c2ecf20Sopenharmony_ci case CX88_BOARD_HAUPPAUGE_HVR4000: 34808c2ecf20Sopenharmony_ci case CX88_BOARD_HAUPPAUGE_HVR4000LITE: 34818c2ecf20Sopenharmony_ci case CX88_BOARD_HAUPPAUGE_IRONLY: 34828c2ecf20Sopenharmony_ci if (!core->i2c_rc) 34838c2ecf20Sopenharmony_ci hauppauge_eeprom(core, eeprom); 34848c2ecf20Sopenharmony_ci break; 34858c2ecf20Sopenharmony_ci case CX88_BOARD_KWORLD_DVBS_100: 34868c2ecf20Sopenharmony_ci cx_write(MO_GP0_IO, 0x000007f8); 34878c2ecf20Sopenharmony_ci cx_write(MO_GP1_IO, 0x00000001); 34888c2ecf20Sopenharmony_ci break; 34898c2ecf20Sopenharmony_ci case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO: 34908c2ecf20Sopenharmony_ci /* GPIO0:0 is hooked to demod reset */ 34918c2ecf20Sopenharmony_ci /* GPIO0:4 is hooked to xc3028 reset */ 34928c2ecf20Sopenharmony_ci cx_write(MO_GP0_IO, 0x00111100); 34938c2ecf20Sopenharmony_ci usleep_range(10000, 20000); 34948c2ecf20Sopenharmony_ci cx_write(MO_GP0_IO, 0x00111111); 34958c2ecf20Sopenharmony_ci break; 34968c2ecf20Sopenharmony_ci case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL: 34978c2ecf20Sopenharmony_ci /* GPIO0:6 is hooked to FX2 reset pin */ 34988c2ecf20Sopenharmony_ci cx_set(MO_GP0_IO, 0x00004040); 34998c2ecf20Sopenharmony_ci cx_clear(MO_GP0_IO, 0x00000040); 35008c2ecf20Sopenharmony_ci msleep(1000); 35018c2ecf20Sopenharmony_ci cx_set(MO_GP0_IO, 0x00004040); 35028c2ecf20Sopenharmony_ci fallthrough; 35038c2ecf20Sopenharmony_ci case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1: 35048c2ecf20Sopenharmony_ci case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS: 35058c2ecf20Sopenharmony_ci case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID: 35068c2ecf20Sopenharmony_ci /* GPIO0:0 is hooked to mt352 reset pin */ 35078c2ecf20Sopenharmony_ci cx_set(MO_GP0_IO, 0x00000101); 35088c2ecf20Sopenharmony_ci cx_clear(MO_GP0_IO, 0x00000001); 35098c2ecf20Sopenharmony_ci usleep_range(10000, 20000); 35108c2ecf20Sopenharmony_ci cx_set(MO_GP0_IO, 0x00000101); 35118c2ecf20Sopenharmony_ci if (!core->i2c_rc && 35128c2ecf20Sopenharmony_ci core->boardnr == CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID) 35138c2ecf20Sopenharmony_ci dvico_fusionhdtv_hybrid_init(core); 35148c2ecf20Sopenharmony_ci break; 35158c2ecf20Sopenharmony_ci case CX88_BOARD_KWORLD_DVB_T: 35168c2ecf20Sopenharmony_ci case CX88_BOARD_DNTV_LIVE_DVB_T: 35178c2ecf20Sopenharmony_ci cx_set(MO_GP0_IO, 0x00000707); 35188c2ecf20Sopenharmony_ci cx_set(MO_GP2_IO, 0x00000101); 35198c2ecf20Sopenharmony_ci cx_clear(MO_GP2_IO, 0x00000001); 35208c2ecf20Sopenharmony_ci usleep_range(10000, 20000); 35218c2ecf20Sopenharmony_ci cx_clear(MO_GP0_IO, 0x00000007); 35228c2ecf20Sopenharmony_ci cx_set(MO_GP2_IO, 0x00000101); 35238c2ecf20Sopenharmony_ci break; 35248c2ecf20Sopenharmony_ci case CX88_BOARD_DNTV_LIVE_DVB_T_PRO: 35258c2ecf20Sopenharmony_ci cx_write(MO_GP0_IO, 0x00080808); 35268c2ecf20Sopenharmony_ci break; 35278c2ecf20Sopenharmony_ci case CX88_BOARD_ATI_HDTVWONDER: 35288c2ecf20Sopenharmony_ci if (!core->i2c_rc) { 35298c2ecf20Sopenharmony_ci /* enable tuner */ 35308c2ecf20Sopenharmony_ci int i; 35318c2ecf20Sopenharmony_ci static const u8 buffer[][2] = { 35328c2ecf20Sopenharmony_ci {0x10, 0x12}, 35338c2ecf20Sopenharmony_ci {0x13, 0x04}, 35348c2ecf20Sopenharmony_ci {0x16, 0x00}, 35358c2ecf20Sopenharmony_ci {0x14, 0x04}, 35368c2ecf20Sopenharmony_ci {0x17, 0x00} 35378c2ecf20Sopenharmony_ci }; 35388c2ecf20Sopenharmony_ci core->i2c_client.addr = 0x0a; 35398c2ecf20Sopenharmony_ci 35408c2ecf20Sopenharmony_ci for (i = 0; i < ARRAY_SIZE(buffer); i++) 35418c2ecf20Sopenharmony_ci if (i2c_master_send(&core->i2c_client, 35428c2ecf20Sopenharmony_ci buffer[i], 2) != 2) 35438c2ecf20Sopenharmony_ci pr_warn("Unable to enable tuner(%i).\n", 35448c2ecf20Sopenharmony_ci i); 35458c2ecf20Sopenharmony_ci } 35468c2ecf20Sopenharmony_ci break; 35478c2ecf20Sopenharmony_ci case CX88_BOARD_MSI_TVANYWHERE_MASTER: 35488c2ecf20Sopenharmony_ci { 35498c2ecf20Sopenharmony_ci struct v4l2_priv_tun_config tea5767_cfg; 35508c2ecf20Sopenharmony_ci struct tea5767_ctrl ctl; 35518c2ecf20Sopenharmony_ci 35528c2ecf20Sopenharmony_ci memset(&ctl, 0, sizeof(ctl)); 35538c2ecf20Sopenharmony_ci 35548c2ecf20Sopenharmony_ci ctl.high_cut = 1; 35558c2ecf20Sopenharmony_ci ctl.st_noise = 1; 35568c2ecf20Sopenharmony_ci ctl.deemph_75 = 1; 35578c2ecf20Sopenharmony_ci ctl.xtal_freq = TEA5767_HIGH_LO_13MHz; 35588c2ecf20Sopenharmony_ci 35598c2ecf20Sopenharmony_ci tea5767_cfg.tuner = TUNER_TEA5767; 35608c2ecf20Sopenharmony_ci tea5767_cfg.priv = &ctl; 35618c2ecf20Sopenharmony_ci 35628c2ecf20Sopenharmony_ci call_all(core, tuner, s_config, &tea5767_cfg); 35638c2ecf20Sopenharmony_ci break; 35648c2ecf20Sopenharmony_ci } 35658c2ecf20Sopenharmony_ci case CX88_BOARD_TEVII_S420: 35668c2ecf20Sopenharmony_ci case CX88_BOARD_TEVII_S460: 35678c2ecf20Sopenharmony_ci case CX88_BOARD_TEVII_S464: 35688c2ecf20Sopenharmony_ci case CX88_BOARD_OMICOM_SS4_PCI: 35698c2ecf20Sopenharmony_ci case CX88_BOARD_TBS_8910: 35708c2ecf20Sopenharmony_ci case CX88_BOARD_TBS_8920: 35718c2ecf20Sopenharmony_ci case CX88_BOARD_PROF_6200: 35728c2ecf20Sopenharmony_ci case CX88_BOARD_PROF_7300: 35738c2ecf20Sopenharmony_ci case CX88_BOARD_PROF_7301: 35748c2ecf20Sopenharmony_ci case CX88_BOARD_SATTRADE_ST4200: 35758c2ecf20Sopenharmony_ci cx_write(MO_GP0_IO, 0x8000); 35768c2ecf20Sopenharmony_ci msleep(100); 35778c2ecf20Sopenharmony_ci cx_write(MO_SRST_IO, 0); 35788c2ecf20Sopenharmony_ci usleep_range(10000, 20000); 35798c2ecf20Sopenharmony_ci cx_write(MO_GP0_IO, 0x8080); 35808c2ecf20Sopenharmony_ci msleep(100); 35818c2ecf20Sopenharmony_ci cx_write(MO_SRST_IO, 1); 35828c2ecf20Sopenharmony_ci msleep(100); 35838c2ecf20Sopenharmony_ci break; 35848c2ecf20Sopenharmony_ci } /*end switch() */ 35858c2ecf20Sopenharmony_ci 35868c2ecf20Sopenharmony_ci /* Setup tuners */ 35878c2ecf20Sopenharmony_ci if (core->board.radio_type != UNSET) { 35888c2ecf20Sopenharmony_ci tun_setup.mode_mask = T_RADIO; 35898c2ecf20Sopenharmony_ci tun_setup.type = core->board.radio_type; 35908c2ecf20Sopenharmony_ci tun_setup.addr = core->board.radio_addr; 35918c2ecf20Sopenharmony_ci tun_setup.tuner_callback = cx88_tuner_callback; 35928c2ecf20Sopenharmony_ci call_all(core, tuner, s_type_addr, &tun_setup); 35938c2ecf20Sopenharmony_ci mode_mask &= ~T_RADIO; 35948c2ecf20Sopenharmony_ci } 35958c2ecf20Sopenharmony_ci 35968c2ecf20Sopenharmony_ci if (core->board.tuner_type != UNSET) { 35978c2ecf20Sopenharmony_ci tun_setup.mode_mask = mode_mask; 35988c2ecf20Sopenharmony_ci tun_setup.type = core->board.tuner_type; 35998c2ecf20Sopenharmony_ci tun_setup.addr = core->board.tuner_addr; 36008c2ecf20Sopenharmony_ci tun_setup.tuner_callback = cx88_tuner_callback; 36018c2ecf20Sopenharmony_ci 36028c2ecf20Sopenharmony_ci call_all(core, tuner, s_type_addr, &tun_setup); 36038c2ecf20Sopenharmony_ci } 36048c2ecf20Sopenharmony_ci 36058c2ecf20Sopenharmony_ci if (core->board.tda9887_conf) { 36068c2ecf20Sopenharmony_ci struct v4l2_priv_tun_config tda9887_cfg; 36078c2ecf20Sopenharmony_ci 36088c2ecf20Sopenharmony_ci tda9887_cfg.tuner = TUNER_TDA9887; 36098c2ecf20Sopenharmony_ci tda9887_cfg.priv = &core->board.tda9887_conf; 36108c2ecf20Sopenharmony_ci 36118c2ecf20Sopenharmony_ci call_all(core, tuner, s_config, &tda9887_cfg); 36128c2ecf20Sopenharmony_ci } 36138c2ecf20Sopenharmony_ci 36148c2ecf20Sopenharmony_ci if (core->board.tuner_type == TUNER_XC2028) { 36158c2ecf20Sopenharmony_ci struct v4l2_priv_tun_config xc2028_cfg; 36168c2ecf20Sopenharmony_ci struct xc2028_ctrl ctl; 36178c2ecf20Sopenharmony_ci 36188c2ecf20Sopenharmony_ci /* Fills device-dependent initialization parameters */ 36198c2ecf20Sopenharmony_ci cx88_setup_xc3028(core, &ctl); 36208c2ecf20Sopenharmony_ci 36218c2ecf20Sopenharmony_ci /* Sends parameters to xc2028/3028 tuner */ 36228c2ecf20Sopenharmony_ci memset(&xc2028_cfg, 0, sizeof(xc2028_cfg)); 36238c2ecf20Sopenharmony_ci xc2028_cfg.tuner = TUNER_XC2028; 36248c2ecf20Sopenharmony_ci xc2028_cfg.priv = &ctl; 36258c2ecf20Sopenharmony_ci dprintk(1, "Asking xc2028/3028 to load firmware %s\n", 36268c2ecf20Sopenharmony_ci ctl.fname); 36278c2ecf20Sopenharmony_ci call_all(core, tuner, s_config, &xc2028_cfg); 36288c2ecf20Sopenharmony_ci } 36298c2ecf20Sopenharmony_ci call_all(core, tuner, standby); 36308c2ecf20Sopenharmony_ci} 36318c2ecf20Sopenharmony_ci 36328c2ecf20Sopenharmony_ci/* ------------------------------------------------------------------ */ 36338c2ecf20Sopenharmony_ci 36348c2ecf20Sopenharmony_cistatic int cx88_pci_quirks(const char *name, struct pci_dev *pci) 36358c2ecf20Sopenharmony_ci{ 36368c2ecf20Sopenharmony_ci unsigned int lat = UNSET; 36378c2ecf20Sopenharmony_ci u8 ctrl = 0; 36388c2ecf20Sopenharmony_ci u8 value; 36398c2ecf20Sopenharmony_ci 36408c2ecf20Sopenharmony_ci /* check pci quirks */ 36418c2ecf20Sopenharmony_ci if (pci_pci_problems & PCIPCI_TRITON) { 36428c2ecf20Sopenharmony_ci pr_info("quirk: PCIPCI_TRITON -- set TBFX\n"); 36438c2ecf20Sopenharmony_ci ctrl |= CX88X_EN_TBFX; 36448c2ecf20Sopenharmony_ci } 36458c2ecf20Sopenharmony_ci if (pci_pci_problems & PCIPCI_NATOMA) { 36468c2ecf20Sopenharmony_ci pr_info("quirk: PCIPCI_NATOMA -- set TBFX\n"); 36478c2ecf20Sopenharmony_ci ctrl |= CX88X_EN_TBFX; 36488c2ecf20Sopenharmony_ci } 36498c2ecf20Sopenharmony_ci if (pci_pci_problems & PCIPCI_VIAETBF) { 36508c2ecf20Sopenharmony_ci pr_info("quirk: PCIPCI_VIAETBF -- set TBFX\n"); 36518c2ecf20Sopenharmony_ci ctrl |= CX88X_EN_TBFX; 36528c2ecf20Sopenharmony_ci } 36538c2ecf20Sopenharmony_ci if (pci_pci_problems & PCIPCI_VSFX) { 36548c2ecf20Sopenharmony_ci pr_info("quirk: PCIPCI_VSFX -- set VSFX\n"); 36558c2ecf20Sopenharmony_ci ctrl |= CX88X_EN_VSFX; 36568c2ecf20Sopenharmony_ci } 36578c2ecf20Sopenharmony_ci#ifdef PCIPCI_ALIMAGIK 36588c2ecf20Sopenharmony_ci if (pci_pci_problems & PCIPCI_ALIMAGIK) { 36598c2ecf20Sopenharmony_ci pr_info("quirk: PCIPCI_ALIMAGIK -- latency fixup\n"); 36608c2ecf20Sopenharmony_ci lat = 0x0A; 36618c2ecf20Sopenharmony_ci } 36628c2ecf20Sopenharmony_ci#endif 36638c2ecf20Sopenharmony_ci 36648c2ecf20Sopenharmony_ci /* check insmod options */ 36658c2ecf20Sopenharmony_ci if (latency != UNSET) 36668c2ecf20Sopenharmony_ci lat = latency; 36678c2ecf20Sopenharmony_ci 36688c2ecf20Sopenharmony_ci /* apply stuff */ 36698c2ecf20Sopenharmony_ci if (ctrl) { 36708c2ecf20Sopenharmony_ci pci_read_config_byte(pci, CX88X_DEVCTRL, &value); 36718c2ecf20Sopenharmony_ci value |= ctrl; 36728c2ecf20Sopenharmony_ci pci_write_config_byte(pci, CX88X_DEVCTRL, value); 36738c2ecf20Sopenharmony_ci } 36748c2ecf20Sopenharmony_ci if (lat != UNSET) { 36758c2ecf20Sopenharmony_ci pr_info("setting pci latency timer to %d\n", latency); 36768c2ecf20Sopenharmony_ci pci_write_config_byte(pci, PCI_LATENCY_TIMER, latency); 36778c2ecf20Sopenharmony_ci } 36788c2ecf20Sopenharmony_ci return 0; 36798c2ecf20Sopenharmony_ci} 36808c2ecf20Sopenharmony_ci 36818c2ecf20Sopenharmony_ciint cx88_get_resources(const struct cx88_core *core, struct pci_dev *pci) 36828c2ecf20Sopenharmony_ci{ 36838c2ecf20Sopenharmony_ci if (request_mem_region(pci_resource_start(pci, 0), 36848c2ecf20Sopenharmony_ci pci_resource_len(pci, 0), 36858c2ecf20Sopenharmony_ci core->name)) 36868c2ecf20Sopenharmony_ci return 0; 36878c2ecf20Sopenharmony_ci pr_err("func %d: Can't get MMIO memory @ 0x%llx, subsystem: %04x:%04x\n", 36888c2ecf20Sopenharmony_ci PCI_FUNC(pci->devfn), 36898c2ecf20Sopenharmony_ci (unsigned long long)pci_resource_start(pci, 0), 36908c2ecf20Sopenharmony_ci pci->subsystem_vendor, pci->subsystem_device); 36918c2ecf20Sopenharmony_ci return -EBUSY; 36928c2ecf20Sopenharmony_ci} 36938c2ecf20Sopenharmony_ci 36948c2ecf20Sopenharmony_ci/* 36958c2ecf20Sopenharmony_ci * Allocate and initialize the cx88 core struct. One should hold the 36968c2ecf20Sopenharmony_ci * devlist mutex before calling this. 36978c2ecf20Sopenharmony_ci */ 36988c2ecf20Sopenharmony_cistruct cx88_core *cx88_core_create(struct pci_dev *pci, int nr) 36998c2ecf20Sopenharmony_ci{ 37008c2ecf20Sopenharmony_ci struct cx88_core *core; 37018c2ecf20Sopenharmony_ci int i; 37028c2ecf20Sopenharmony_ci 37038c2ecf20Sopenharmony_ci core = kzalloc(sizeof(*core), GFP_KERNEL); 37048c2ecf20Sopenharmony_ci if (!core) 37058c2ecf20Sopenharmony_ci return NULL; 37068c2ecf20Sopenharmony_ci 37078c2ecf20Sopenharmony_ci refcount_set(&core->refcount, 1); 37088c2ecf20Sopenharmony_ci core->pci_bus = pci->bus->number; 37098c2ecf20Sopenharmony_ci core->pci_slot = PCI_SLOT(pci->devfn); 37108c2ecf20Sopenharmony_ci core->pci_irqmask = PCI_INT_RISC_RD_BERRINT | PCI_INT_RISC_WR_BERRINT | 37118c2ecf20Sopenharmony_ci PCI_INT_BRDG_BERRINT | PCI_INT_SRC_DMA_BERRINT | 37128c2ecf20Sopenharmony_ci PCI_INT_DST_DMA_BERRINT | PCI_INT_IPB_DMA_BERRINT; 37138c2ecf20Sopenharmony_ci mutex_init(&core->lock); 37148c2ecf20Sopenharmony_ci 37158c2ecf20Sopenharmony_ci core->nr = nr; 37168c2ecf20Sopenharmony_ci sprintf(core->name, "cx88[%d]", core->nr); 37178c2ecf20Sopenharmony_ci 37188c2ecf20Sopenharmony_ci /* 37198c2ecf20Sopenharmony_ci * Note: Setting initial standard here would cause first call to 37208c2ecf20Sopenharmony_ci * cx88_set_tvnorm() to return without programming any registers. Leave 37218c2ecf20Sopenharmony_ci * it blank for at this point and it will get set later in 37228c2ecf20Sopenharmony_ci * cx8800_initdev() 37238c2ecf20Sopenharmony_ci */ 37248c2ecf20Sopenharmony_ci core->tvnorm = 0; 37258c2ecf20Sopenharmony_ci 37268c2ecf20Sopenharmony_ci core->width = 320; 37278c2ecf20Sopenharmony_ci core->height = 240; 37288c2ecf20Sopenharmony_ci core->field = V4L2_FIELD_INTERLACED; 37298c2ecf20Sopenharmony_ci 37308c2ecf20Sopenharmony_ci strscpy(core->v4l2_dev.name, core->name, sizeof(core->v4l2_dev.name)); 37318c2ecf20Sopenharmony_ci if (v4l2_device_register(NULL, &core->v4l2_dev)) { 37328c2ecf20Sopenharmony_ci kfree(core); 37338c2ecf20Sopenharmony_ci return NULL; 37348c2ecf20Sopenharmony_ci } 37358c2ecf20Sopenharmony_ci 37368c2ecf20Sopenharmony_ci if (v4l2_ctrl_handler_init(&core->video_hdl, 13)) { 37378c2ecf20Sopenharmony_ci v4l2_device_unregister(&core->v4l2_dev); 37388c2ecf20Sopenharmony_ci kfree(core); 37398c2ecf20Sopenharmony_ci return NULL; 37408c2ecf20Sopenharmony_ci } 37418c2ecf20Sopenharmony_ci 37428c2ecf20Sopenharmony_ci if (v4l2_ctrl_handler_init(&core->audio_hdl, 13)) { 37438c2ecf20Sopenharmony_ci v4l2_ctrl_handler_free(&core->video_hdl); 37448c2ecf20Sopenharmony_ci v4l2_device_unregister(&core->v4l2_dev); 37458c2ecf20Sopenharmony_ci kfree(core); 37468c2ecf20Sopenharmony_ci return NULL; 37478c2ecf20Sopenharmony_ci } 37488c2ecf20Sopenharmony_ci 37498c2ecf20Sopenharmony_ci if (cx88_get_resources(core, pci) != 0) { 37508c2ecf20Sopenharmony_ci v4l2_ctrl_handler_free(&core->video_hdl); 37518c2ecf20Sopenharmony_ci v4l2_ctrl_handler_free(&core->audio_hdl); 37528c2ecf20Sopenharmony_ci v4l2_device_unregister(&core->v4l2_dev); 37538c2ecf20Sopenharmony_ci kfree(core); 37548c2ecf20Sopenharmony_ci return NULL; 37558c2ecf20Sopenharmony_ci } 37568c2ecf20Sopenharmony_ci 37578c2ecf20Sopenharmony_ci /* PCI stuff */ 37588c2ecf20Sopenharmony_ci cx88_pci_quirks(core->name, pci); 37598c2ecf20Sopenharmony_ci core->lmmio = ioremap(pci_resource_start(pci, 0), 37608c2ecf20Sopenharmony_ci pci_resource_len(pci, 0)); 37618c2ecf20Sopenharmony_ci core->bmmio = (u8 __iomem *)core->lmmio; 37628c2ecf20Sopenharmony_ci 37638c2ecf20Sopenharmony_ci if (!core->lmmio) { 37648c2ecf20Sopenharmony_ci release_mem_region(pci_resource_start(pci, 0), 37658c2ecf20Sopenharmony_ci pci_resource_len(pci, 0)); 37668c2ecf20Sopenharmony_ci v4l2_ctrl_handler_free(&core->video_hdl); 37678c2ecf20Sopenharmony_ci v4l2_ctrl_handler_free(&core->audio_hdl); 37688c2ecf20Sopenharmony_ci v4l2_device_unregister(&core->v4l2_dev); 37698c2ecf20Sopenharmony_ci kfree(core); 37708c2ecf20Sopenharmony_ci return NULL; 37718c2ecf20Sopenharmony_ci } 37728c2ecf20Sopenharmony_ci 37738c2ecf20Sopenharmony_ci /* board config */ 37748c2ecf20Sopenharmony_ci core->boardnr = UNSET; 37758c2ecf20Sopenharmony_ci if (card[core->nr] < ARRAY_SIZE(cx88_boards)) 37768c2ecf20Sopenharmony_ci core->boardnr = card[core->nr]; 37778c2ecf20Sopenharmony_ci for (i = 0; core->boardnr == UNSET && i < ARRAY_SIZE(cx88_subids); i++) 37788c2ecf20Sopenharmony_ci if (pci->subsystem_vendor == cx88_subids[i].subvendor && 37798c2ecf20Sopenharmony_ci pci->subsystem_device == cx88_subids[i].subdevice) 37808c2ecf20Sopenharmony_ci core->boardnr = cx88_subids[i].card; 37818c2ecf20Sopenharmony_ci if (core->boardnr == UNSET) { 37828c2ecf20Sopenharmony_ci core->boardnr = CX88_BOARD_UNKNOWN; 37838c2ecf20Sopenharmony_ci cx88_card_list(core, pci); 37848c2ecf20Sopenharmony_ci } 37858c2ecf20Sopenharmony_ci 37868c2ecf20Sopenharmony_ci core->board = cx88_boards[core->boardnr]; 37878c2ecf20Sopenharmony_ci 37888c2ecf20Sopenharmony_ci if (!core->board.num_frontends && (core->board.mpeg & CX88_MPEG_DVB)) 37898c2ecf20Sopenharmony_ci core->board.num_frontends = 1; 37908c2ecf20Sopenharmony_ci 37918c2ecf20Sopenharmony_ci pr_info("subsystem: %04x:%04x, board: %s [card=%d,%s], frontend(s): %d\n", 37928c2ecf20Sopenharmony_ci pci->subsystem_vendor, pci->subsystem_device, core->board.name, 37938c2ecf20Sopenharmony_ci core->boardnr, card[core->nr] == core->boardnr ? 37948c2ecf20Sopenharmony_ci "insmod option" : "autodetected", 37958c2ecf20Sopenharmony_ci core->board.num_frontends); 37968c2ecf20Sopenharmony_ci 37978c2ecf20Sopenharmony_ci if (tuner[core->nr] != UNSET) 37988c2ecf20Sopenharmony_ci core->board.tuner_type = tuner[core->nr]; 37998c2ecf20Sopenharmony_ci if (radio[core->nr] != UNSET) 38008c2ecf20Sopenharmony_ci core->board.radio_type = radio[core->nr]; 38018c2ecf20Sopenharmony_ci 38028c2ecf20Sopenharmony_ci dprintk(1, "TV tuner type %d, Radio tuner type %d\n", 38038c2ecf20Sopenharmony_ci core->board.tuner_type, core->board.radio_type); 38048c2ecf20Sopenharmony_ci 38058c2ecf20Sopenharmony_ci /* init hardware */ 38068c2ecf20Sopenharmony_ci cx88_reset(core); 38078c2ecf20Sopenharmony_ci cx88_card_setup_pre_i2c(core); 38088c2ecf20Sopenharmony_ci cx88_i2c_init(core, pci); 38098c2ecf20Sopenharmony_ci 38108c2ecf20Sopenharmony_ci /* load tuner module, if needed */ 38118c2ecf20Sopenharmony_ci if (core->board.tuner_type != UNSET) { 38128c2ecf20Sopenharmony_ci /* 38138c2ecf20Sopenharmony_ci * Ignore 0x6b and 0x6f on cx88 boards. 38148c2ecf20Sopenharmony_ci * FusionHDTV5 RT Gold has an ir receiver at 0x6b 38158c2ecf20Sopenharmony_ci * and an RTC at 0x6f which can get corrupted if probed. 38168c2ecf20Sopenharmony_ci */ 38178c2ecf20Sopenharmony_ci static const unsigned short tv_addrs[] = { 38188c2ecf20Sopenharmony_ci 0x42, 0x43, 0x4a, 0x4b, /* tda8290 */ 38198c2ecf20Sopenharmony_ci 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 38208c2ecf20Sopenharmony_ci 0x68, 0x69, 0x6a, 0x6c, 0x6d, 0x6e, 38218c2ecf20Sopenharmony_ci I2C_CLIENT_END 38228c2ecf20Sopenharmony_ci }; 38238c2ecf20Sopenharmony_ci int has_demod = (core->board.tda9887_conf & TDA9887_PRESENT); 38248c2ecf20Sopenharmony_ci 38258c2ecf20Sopenharmony_ci /* 38268c2ecf20Sopenharmony_ci * I don't trust the radio_type as is stored in the card 38278c2ecf20Sopenharmony_ci * definitions, so we just probe for it. 38288c2ecf20Sopenharmony_ci * The radio_type is sometimes missing, or set to UNSET but 38298c2ecf20Sopenharmony_ci * later code configures a tea5767. 38308c2ecf20Sopenharmony_ci */ 38318c2ecf20Sopenharmony_ci v4l2_i2c_new_subdev(&core->v4l2_dev, &core->i2c_adap, 38328c2ecf20Sopenharmony_ci "tuner", 0, 38338c2ecf20Sopenharmony_ci v4l2_i2c_tuner_addrs(ADDRS_RADIO)); 38348c2ecf20Sopenharmony_ci if (has_demod) 38358c2ecf20Sopenharmony_ci v4l2_i2c_new_subdev(&core->v4l2_dev, 38368c2ecf20Sopenharmony_ci &core->i2c_adap, "tuner", 38378c2ecf20Sopenharmony_ci 0, v4l2_i2c_tuner_addrs(ADDRS_DEMOD)); 38388c2ecf20Sopenharmony_ci if (core->board.tuner_addr == ADDR_UNSET) { 38398c2ecf20Sopenharmony_ci v4l2_i2c_new_subdev(&core->v4l2_dev, 38408c2ecf20Sopenharmony_ci &core->i2c_adap, "tuner", 38418c2ecf20Sopenharmony_ci 0, has_demod ? tv_addrs + 4 : tv_addrs); 38428c2ecf20Sopenharmony_ci } else { 38438c2ecf20Sopenharmony_ci v4l2_i2c_new_subdev(&core->v4l2_dev, &core->i2c_adap, 38448c2ecf20Sopenharmony_ci "tuner", core->board.tuner_addr, 38458c2ecf20Sopenharmony_ci NULL); 38468c2ecf20Sopenharmony_ci } 38478c2ecf20Sopenharmony_ci } 38488c2ecf20Sopenharmony_ci 38498c2ecf20Sopenharmony_ci cx88_card_setup(core); 38508c2ecf20Sopenharmony_ci if (!disable_ir) { 38518c2ecf20Sopenharmony_ci cx88_i2c_init_ir(core); 38528c2ecf20Sopenharmony_ci cx88_ir_init(core, pci); 38538c2ecf20Sopenharmony_ci } 38548c2ecf20Sopenharmony_ci 38558c2ecf20Sopenharmony_ci return core; 38568c2ecf20Sopenharmony_ci} 3857