18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Driver for the Conexant CX23885 PCIe bridge 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (c) 2006 Steven Toth <stoth@linuxtv.org> 68c2ecf20Sopenharmony_ci */ 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#include "cx23885.h" 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#include <linux/init.h> 118c2ecf20Sopenharmony_ci#include <linux/module.h> 128c2ecf20Sopenharmony_ci#include <linux/pci.h> 138c2ecf20Sopenharmony_ci#include <linux/delay.h> 148c2ecf20Sopenharmony_ci#include <media/drv-intf/cx25840.h> 158c2ecf20Sopenharmony_ci#include <linux/firmware.h> 168c2ecf20Sopenharmony_ci#include <misc/altera.h> 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_ci#include "tuner-xc2028.h" 198c2ecf20Sopenharmony_ci#include "netup-eeprom.h" 208c2ecf20Sopenharmony_ci#include "netup-init.h" 218c2ecf20Sopenharmony_ci#include "altera-ci.h" 228c2ecf20Sopenharmony_ci#include "xc4000.h" 238c2ecf20Sopenharmony_ci#include "xc5000.h" 248c2ecf20Sopenharmony_ci#include "cx23888-ir.h" 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_cistatic unsigned int netup_card_rev = 4; 278c2ecf20Sopenharmony_cimodule_param(netup_card_rev, int, 0644); 288c2ecf20Sopenharmony_ciMODULE_PARM_DESC(netup_card_rev, 298c2ecf20Sopenharmony_ci "NetUP Dual DVB-T/C CI card revision"); 308c2ecf20Sopenharmony_cistatic unsigned int enable_885_ir; 318c2ecf20Sopenharmony_cimodule_param(enable_885_ir, int, 0644); 328c2ecf20Sopenharmony_ciMODULE_PARM_DESC(enable_885_ir, 338c2ecf20Sopenharmony_ci "Enable integrated IR controller for supported\n" 348c2ecf20Sopenharmony_ci "\t\t CX2388[57] boards that are wired for it:\n" 358c2ecf20Sopenharmony_ci "\t\t\tHVR-1250 (reported safe)\n" 368c2ecf20Sopenharmony_ci "\t\t\tTerraTec Cinergy T PCIe Dual (not well tested, appears to be safe)\n" 378c2ecf20Sopenharmony_ci "\t\t\tTeVii S470 (reported unsafe)\n" 388c2ecf20Sopenharmony_ci "\t\t This can cause an interrupt storm with some cards.\n" 398c2ecf20Sopenharmony_ci "\t\t Default: 0 [Disabled]"); 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci/* ------------------------------------------------------------------ */ 428c2ecf20Sopenharmony_ci/* board config info */ 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_cistruct cx23885_board cx23885_boards[] = { 458c2ecf20Sopenharmony_ci [CX23885_BOARD_UNKNOWN] = { 468c2ecf20Sopenharmony_ci .name = "UNKNOWN/GENERIC", 478c2ecf20Sopenharmony_ci /* Ensure safe default for unknown boards */ 488c2ecf20Sopenharmony_ci .clk_freq = 0, 498c2ecf20Sopenharmony_ci .input = {{ 508c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE1, 518c2ecf20Sopenharmony_ci .vmux = 0, 528c2ecf20Sopenharmony_ci }, { 538c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE2, 548c2ecf20Sopenharmony_ci .vmux = 1, 558c2ecf20Sopenharmony_ci }, { 568c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE3, 578c2ecf20Sopenharmony_ci .vmux = 2, 588c2ecf20Sopenharmony_ci }, { 598c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE4, 608c2ecf20Sopenharmony_ci .vmux = 3, 618c2ecf20Sopenharmony_ci } }, 628c2ecf20Sopenharmony_ci }, 638c2ecf20Sopenharmony_ci [CX23885_BOARD_HAUPPAUGE_HVR1800lp] = { 648c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-HVR1800lp", 658c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 668c2ecf20Sopenharmony_ci .input = {{ 678c2ecf20Sopenharmony_ci .type = CX23885_VMUX_TELEVISION, 688c2ecf20Sopenharmony_ci .vmux = 0, 698c2ecf20Sopenharmony_ci .gpio0 = 0xff00, 708c2ecf20Sopenharmony_ci }, { 718c2ecf20Sopenharmony_ci .type = CX23885_VMUX_DEBUG, 728c2ecf20Sopenharmony_ci .vmux = 0, 738c2ecf20Sopenharmony_ci .gpio0 = 0xff01, 748c2ecf20Sopenharmony_ci }, { 758c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE1, 768c2ecf20Sopenharmony_ci .vmux = 1, 778c2ecf20Sopenharmony_ci .gpio0 = 0xff02, 788c2ecf20Sopenharmony_ci }, { 798c2ecf20Sopenharmony_ci .type = CX23885_VMUX_SVIDEO, 808c2ecf20Sopenharmony_ci .vmux = 2, 818c2ecf20Sopenharmony_ci .gpio0 = 0xff02, 828c2ecf20Sopenharmony_ci } }, 838c2ecf20Sopenharmony_ci }, 848c2ecf20Sopenharmony_ci [CX23885_BOARD_HAUPPAUGE_HVR1800] = { 858c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-HVR1800", 868c2ecf20Sopenharmony_ci .porta = CX23885_ANALOG_VIDEO, 878c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_ENCODER, 888c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 898c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_TDA8290, 908c2ecf20Sopenharmony_ci .tuner_addr = 0x42, /* 0x84 >> 1 */ 918c2ecf20Sopenharmony_ci .tuner_bus = 1, 928c2ecf20Sopenharmony_ci .input = {{ 938c2ecf20Sopenharmony_ci .type = CX23885_VMUX_TELEVISION, 948c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 958c2ecf20Sopenharmony_ci CX25840_VIN5_CH2 | 968c2ecf20Sopenharmony_ci CX25840_VIN2_CH1, 978c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO8, 988c2ecf20Sopenharmony_ci .gpio0 = 0, 998c2ecf20Sopenharmony_ci }, { 1008c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE1, 1018c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 1028c2ecf20Sopenharmony_ci CX25840_VIN4_CH2 | 1038c2ecf20Sopenharmony_ci CX25840_VIN6_CH1, 1048c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 1058c2ecf20Sopenharmony_ci .gpio0 = 0, 1068c2ecf20Sopenharmony_ci }, { 1078c2ecf20Sopenharmony_ci .type = CX23885_VMUX_SVIDEO, 1088c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 1098c2ecf20Sopenharmony_ci CX25840_VIN4_CH2 | 1108c2ecf20Sopenharmony_ci CX25840_VIN8_CH1 | 1118c2ecf20Sopenharmony_ci CX25840_SVIDEO_ON, 1128c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 1138c2ecf20Sopenharmony_ci .gpio0 = 0, 1148c2ecf20Sopenharmony_ci } }, 1158c2ecf20Sopenharmony_ci }, 1168c2ecf20Sopenharmony_ci [CX23885_BOARD_HAUPPAUGE_HVR1250] = { 1178c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-HVR1250", 1188c2ecf20Sopenharmony_ci .porta = CX23885_ANALOG_VIDEO, 1198c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 1208c2ecf20Sopenharmony_ci#ifdef MT2131_NO_ANALOG_SUPPORT_YET 1218c2ecf20Sopenharmony_ci .tuner_type = TUNER_PHILIPS_TDA8290, 1228c2ecf20Sopenharmony_ci .tuner_addr = 0x42, /* 0x84 >> 1 */ 1238c2ecf20Sopenharmony_ci .tuner_bus = 1, 1248c2ecf20Sopenharmony_ci#endif 1258c2ecf20Sopenharmony_ci .force_bff = 1, 1268c2ecf20Sopenharmony_ci .input = {{ 1278c2ecf20Sopenharmony_ci#ifdef MT2131_NO_ANALOG_SUPPORT_YET 1288c2ecf20Sopenharmony_ci .type = CX23885_VMUX_TELEVISION, 1298c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 1308c2ecf20Sopenharmony_ci CX25840_VIN5_CH2 | 1318c2ecf20Sopenharmony_ci CX25840_VIN2_CH1, 1328c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO8, 1338c2ecf20Sopenharmony_ci .gpio0 = 0xff00, 1348c2ecf20Sopenharmony_ci }, { 1358c2ecf20Sopenharmony_ci#endif 1368c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE1, 1378c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 1388c2ecf20Sopenharmony_ci CX25840_VIN4_CH2 | 1398c2ecf20Sopenharmony_ci CX25840_VIN6_CH1, 1408c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 1418c2ecf20Sopenharmony_ci .gpio0 = 0xff02, 1428c2ecf20Sopenharmony_ci }, { 1438c2ecf20Sopenharmony_ci .type = CX23885_VMUX_SVIDEO, 1448c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 1458c2ecf20Sopenharmony_ci CX25840_VIN4_CH2 | 1468c2ecf20Sopenharmony_ci CX25840_VIN8_CH1 | 1478c2ecf20Sopenharmony_ci CX25840_SVIDEO_ON, 1488c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 1498c2ecf20Sopenharmony_ci .gpio0 = 0xff02, 1508c2ecf20Sopenharmony_ci } }, 1518c2ecf20Sopenharmony_ci }, 1528c2ecf20Sopenharmony_ci [CX23885_BOARD_DVICO_FUSIONHDTV_5_EXP] = { 1538c2ecf20Sopenharmony_ci .name = "DViCO FusionHDTV5 Express", 1548c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 1558c2ecf20Sopenharmony_ci }, 1568c2ecf20Sopenharmony_ci [CX23885_BOARD_HAUPPAUGE_HVR1500Q] = { 1578c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-HVR1500Q", 1588c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 1598c2ecf20Sopenharmony_ci }, 1608c2ecf20Sopenharmony_ci [CX23885_BOARD_HAUPPAUGE_HVR1500] = { 1618c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-HVR1500", 1628c2ecf20Sopenharmony_ci .porta = CX23885_ANALOG_VIDEO, 1638c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 1648c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC2028, 1658c2ecf20Sopenharmony_ci .tuner_addr = 0x61, /* 0xc2 >> 1 */ 1668c2ecf20Sopenharmony_ci .input = {{ 1678c2ecf20Sopenharmony_ci .type = CX23885_VMUX_TELEVISION, 1688c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 1698c2ecf20Sopenharmony_ci CX25840_VIN5_CH2 | 1708c2ecf20Sopenharmony_ci CX25840_VIN2_CH1, 1718c2ecf20Sopenharmony_ci .gpio0 = 0, 1728c2ecf20Sopenharmony_ci }, { 1738c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE1, 1748c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 1758c2ecf20Sopenharmony_ci CX25840_VIN4_CH2 | 1768c2ecf20Sopenharmony_ci CX25840_VIN6_CH1, 1778c2ecf20Sopenharmony_ci .gpio0 = 0, 1788c2ecf20Sopenharmony_ci }, { 1798c2ecf20Sopenharmony_ci .type = CX23885_VMUX_SVIDEO, 1808c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 1818c2ecf20Sopenharmony_ci CX25840_VIN4_CH2 | 1828c2ecf20Sopenharmony_ci CX25840_VIN8_CH1 | 1838c2ecf20Sopenharmony_ci CX25840_SVIDEO_ON, 1848c2ecf20Sopenharmony_ci .gpio0 = 0, 1858c2ecf20Sopenharmony_ci } }, 1868c2ecf20Sopenharmony_ci }, 1878c2ecf20Sopenharmony_ci [CX23885_BOARD_HAUPPAUGE_HVR1200] = { 1888c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-HVR1200", 1898c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 1908c2ecf20Sopenharmony_ci }, 1918c2ecf20Sopenharmony_ci [CX23885_BOARD_HAUPPAUGE_HVR1700] = { 1928c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-HVR1700", 1938c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 1948c2ecf20Sopenharmony_ci }, 1958c2ecf20Sopenharmony_ci [CX23885_BOARD_HAUPPAUGE_HVR1400] = { 1968c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-HVR1400", 1978c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 1988c2ecf20Sopenharmony_ci }, 1998c2ecf20Sopenharmony_ci [CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP] = { 2008c2ecf20Sopenharmony_ci .name = "DViCO FusionHDTV7 Dual Express", 2018c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 2028c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 2038c2ecf20Sopenharmony_ci }, 2048c2ecf20Sopenharmony_ci [CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP] = { 2058c2ecf20Sopenharmony_ci .name = "DViCO FusionHDTV DVB-T Dual Express", 2068c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 2078c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 2088c2ecf20Sopenharmony_ci }, 2098c2ecf20Sopenharmony_ci [CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H] = { 2108c2ecf20Sopenharmony_ci .name = "Leadtek Winfast PxDVR3200 H", 2118c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 2128c2ecf20Sopenharmony_ci }, 2138c2ecf20Sopenharmony_ci [CX23885_BOARD_LEADTEK_WINFAST_PXPVR2200] = { 2148c2ecf20Sopenharmony_ci .name = "Leadtek Winfast PxPVR2200", 2158c2ecf20Sopenharmony_ci .porta = CX23885_ANALOG_VIDEO, 2168c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC2028, 2178c2ecf20Sopenharmony_ci .tuner_addr = 0x61, 2188c2ecf20Sopenharmony_ci .tuner_bus = 1, 2198c2ecf20Sopenharmony_ci .input = {{ 2208c2ecf20Sopenharmony_ci .type = CX23885_VMUX_TELEVISION, 2218c2ecf20Sopenharmony_ci .vmux = CX25840_VIN2_CH1 | 2228c2ecf20Sopenharmony_ci CX25840_VIN5_CH2, 2238c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO8, 2248c2ecf20Sopenharmony_ci .gpio0 = 0x704040, 2258c2ecf20Sopenharmony_ci }, { 2268c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE1, 2278c2ecf20Sopenharmony_ci .vmux = CX25840_COMPOSITE1, 2288c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 2298c2ecf20Sopenharmony_ci .gpio0 = 0x704040, 2308c2ecf20Sopenharmony_ci }, { 2318c2ecf20Sopenharmony_ci .type = CX23885_VMUX_SVIDEO, 2328c2ecf20Sopenharmony_ci .vmux = CX25840_SVIDEO_LUMA3 | 2338c2ecf20Sopenharmony_ci CX25840_SVIDEO_CHROMA4, 2348c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 2358c2ecf20Sopenharmony_ci .gpio0 = 0x704040, 2368c2ecf20Sopenharmony_ci }, { 2378c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPONENT, 2388c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH1 | 2398c2ecf20Sopenharmony_ci CX25840_VIN6_CH2 | 2408c2ecf20Sopenharmony_ci CX25840_VIN8_CH3 | 2418c2ecf20Sopenharmony_ci CX25840_COMPONENT_ON, 2428c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 2438c2ecf20Sopenharmony_ci .gpio0 = 0x704040, 2448c2ecf20Sopenharmony_ci } }, 2458c2ecf20Sopenharmony_ci }, 2468c2ecf20Sopenharmony_ci [CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H_XC4000] = { 2478c2ecf20Sopenharmony_ci .name = "Leadtek Winfast PxDVR3200 H XC4000", 2488c2ecf20Sopenharmony_ci .porta = CX23885_ANALOG_VIDEO, 2498c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 2508c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC4000, 2518c2ecf20Sopenharmony_ci .tuner_addr = 0x61, 2528c2ecf20Sopenharmony_ci .radio_type = UNSET, 2538c2ecf20Sopenharmony_ci .radio_addr = ADDR_UNSET, 2548c2ecf20Sopenharmony_ci .input = {{ 2558c2ecf20Sopenharmony_ci .type = CX23885_VMUX_TELEVISION, 2568c2ecf20Sopenharmony_ci .vmux = CX25840_VIN2_CH1 | 2578c2ecf20Sopenharmony_ci CX25840_VIN5_CH2 | 2588c2ecf20Sopenharmony_ci CX25840_NONE0_CH3, 2598c2ecf20Sopenharmony_ci }, { 2608c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE1, 2618c2ecf20Sopenharmony_ci .vmux = CX25840_COMPOSITE1, 2628c2ecf20Sopenharmony_ci }, { 2638c2ecf20Sopenharmony_ci .type = CX23885_VMUX_SVIDEO, 2648c2ecf20Sopenharmony_ci .vmux = CX25840_SVIDEO_LUMA3 | 2658c2ecf20Sopenharmony_ci CX25840_SVIDEO_CHROMA4, 2668c2ecf20Sopenharmony_ci }, { 2678c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPONENT, 2688c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH1 | 2698c2ecf20Sopenharmony_ci CX25840_VIN6_CH2 | 2708c2ecf20Sopenharmony_ci CX25840_VIN8_CH3 | 2718c2ecf20Sopenharmony_ci CX25840_COMPONENT_ON, 2728c2ecf20Sopenharmony_ci } }, 2738c2ecf20Sopenharmony_ci }, 2748c2ecf20Sopenharmony_ci [CX23885_BOARD_COMPRO_VIDEOMATE_E650F] = { 2758c2ecf20Sopenharmony_ci .name = "Compro VideoMate E650F", 2768c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 2778c2ecf20Sopenharmony_ci }, 2788c2ecf20Sopenharmony_ci [CX23885_BOARD_TBS_6920] = { 2798c2ecf20Sopenharmony_ci .name = "TurboSight TBS 6920", 2808c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 2818c2ecf20Sopenharmony_ci }, 2828c2ecf20Sopenharmony_ci [CX23885_BOARD_TBS_6980] = { 2838c2ecf20Sopenharmony_ci .name = "TurboSight TBS 6980", 2848c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 2858c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 2868c2ecf20Sopenharmony_ci }, 2878c2ecf20Sopenharmony_ci [CX23885_BOARD_TBS_6981] = { 2888c2ecf20Sopenharmony_ci .name = "TurboSight TBS 6981", 2898c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 2908c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 2918c2ecf20Sopenharmony_ci }, 2928c2ecf20Sopenharmony_ci [CX23885_BOARD_TEVII_S470] = { 2938c2ecf20Sopenharmony_ci .name = "TeVii S470", 2948c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 2958c2ecf20Sopenharmony_ci }, 2968c2ecf20Sopenharmony_ci [CX23885_BOARD_DVBWORLD_2005] = { 2978c2ecf20Sopenharmony_ci .name = "DVBWorld DVB-S2 2005", 2988c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 2998c2ecf20Sopenharmony_ci }, 3008c2ecf20Sopenharmony_ci [CX23885_BOARD_NETUP_DUAL_DVBS2_CI] = { 3018c2ecf20Sopenharmony_ci .ci_type = 1, 3028c2ecf20Sopenharmony_ci .name = "NetUP Dual DVB-S2 CI", 3038c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 3048c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 3058c2ecf20Sopenharmony_ci }, 3068c2ecf20Sopenharmony_ci [CX23885_BOARD_HAUPPAUGE_HVR1270] = { 3078c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-HVR1270", 3088c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 3098c2ecf20Sopenharmony_ci }, 3108c2ecf20Sopenharmony_ci [CX23885_BOARD_HAUPPAUGE_HVR1275] = { 3118c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-HVR1275", 3128c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 3138c2ecf20Sopenharmony_ci }, 3148c2ecf20Sopenharmony_ci [CX23885_BOARD_HAUPPAUGE_HVR1255] = { 3158c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-HVR1255", 3168c2ecf20Sopenharmony_ci .porta = CX23885_ANALOG_VIDEO, 3178c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 3188c2ecf20Sopenharmony_ci .tuner_type = TUNER_ABSENT, 3198c2ecf20Sopenharmony_ci .tuner_addr = 0x42, /* 0x84 >> 1 */ 3208c2ecf20Sopenharmony_ci .force_bff = 1, 3218c2ecf20Sopenharmony_ci .input = {{ 3228c2ecf20Sopenharmony_ci .type = CX23885_VMUX_TELEVISION, 3238c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 3248c2ecf20Sopenharmony_ci CX25840_VIN5_CH2 | 3258c2ecf20Sopenharmony_ci CX25840_VIN2_CH1 | 3268c2ecf20Sopenharmony_ci CX25840_DIF_ON, 3278c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO8, 3288c2ecf20Sopenharmony_ci }, { 3298c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE1, 3308c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 3318c2ecf20Sopenharmony_ci CX25840_VIN4_CH2 | 3328c2ecf20Sopenharmony_ci CX25840_VIN6_CH1, 3338c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 3348c2ecf20Sopenharmony_ci }, { 3358c2ecf20Sopenharmony_ci .type = CX23885_VMUX_SVIDEO, 3368c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 3378c2ecf20Sopenharmony_ci CX25840_VIN4_CH2 | 3388c2ecf20Sopenharmony_ci CX25840_VIN8_CH1 | 3398c2ecf20Sopenharmony_ci CX25840_SVIDEO_ON, 3408c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 3418c2ecf20Sopenharmony_ci } }, 3428c2ecf20Sopenharmony_ci }, 3438c2ecf20Sopenharmony_ci [CX23885_BOARD_HAUPPAUGE_HVR1255_22111] = { 3448c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-HVR1255", 3458c2ecf20Sopenharmony_ci .porta = CX23885_ANALOG_VIDEO, 3468c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 3478c2ecf20Sopenharmony_ci .tuner_type = TUNER_ABSENT, 3488c2ecf20Sopenharmony_ci .tuner_addr = 0x42, /* 0x84 >> 1 */ 3498c2ecf20Sopenharmony_ci .force_bff = 1, 3508c2ecf20Sopenharmony_ci .input = {{ 3518c2ecf20Sopenharmony_ci .type = CX23885_VMUX_TELEVISION, 3528c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 3538c2ecf20Sopenharmony_ci CX25840_VIN5_CH2 | 3548c2ecf20Sopenharmony_ci CX25840_VIN2_CH1 | 3558c2ecf20Sopenharmony_ci CX25840_DIF_ON, 3568c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO8, 3578c2ecf20Sopenharmony_ci }, { 3588c2ecf20Sopenharmony_ci .type = CX23885_VMUX_SVIDEO, 3598c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 3608c2ecf20Sopenharmony_ci CX25840_VIN4_CH2 | 3618c2ecf20Sopenharmony_ci CX25840_VIN8_CH1 | 3628c2ecf20Sopenharmony_ci CX25840_SVIDEO_ON, 3638c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 3648c2ecf20Sopenharmony_ci } }, 3658c2ecf20Sopenharmony_ci }, 3668c2ecf20Sopenharmony_ci [CX23885_BOARD_HAUPPAUGE_HVR1210] = { 3678c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-HVR1210", 3688c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 3698c2ecf20Sopenharmony_ci }, 3708c2ecf20Sopenharmony_ci [CX23885_BOARD_MYGICA_X8506] = { 3718c2ecf20Sopenharmony_ci .name = "Mygica X8506 DMB-TH", 3728c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC5000, 3738c2ecf20Sopenharmony_ci .tuner_addr = 0x61, 3748c2ecf20Sopenharmony_ci .tuner_bus = 1, 3758c2ecf20Sopenharmony_ci .porta = CX23885_ANALOG_VIDEO, 3768c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 3778c2ecf20Sopenharmony_ci .input = { 3788c2ecf20Sopenharmony_ci { 3798c2ecf20Sopenharmony_ci .type = CX23885_VMUX_TELEVISION, 3808c2ecf20Sopenharmony_ci .vmux = CX25840_COMPOSITE2, 3818c2ecf20Sopenharmony_ci }, 3828c2ecf20Sopenharmony_ci { 3838c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE1, 3848c2ecf20Sopenharmony_ci .vmux = CX25840_COMPOSITE8, 3858c2ecf20Sopenharmony_ci }, 3868c2ecf20Sopenharmony_ci { 3878c2ecf20Sopenharmony_ci .type = CX23885_VMUX_SVIDEO, 3888c2ecf20Sopenharmony_ci .vmux = CX25840_SVIDEO_LUMA3 | 3898c2ecf20Sopenharmony_ci CX25840_SVIDEO_CHROMA4, 3908c2ecf20Sopenharmony_ci }, 3918c2ecf20Sopenharmony_ci { 3928c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPONENT, 3938c2ecf20Sopenharmony_ci .vmux = CX25840_COMPONENT_ON | 3948c2ecf20Sopenharmony_ci CX25840_VIN1_CH1 | 3958c2ecf20Sopenharmony_ci CX25840_VIN6_CH2 | 3968c2ecf20Sopenharmony_ci CX25840_VIN7_CH3, 3978c2ecf20Sopenharmony_ci }, 3988c2ecf20Sopenharmony_ci }, 3998c2ecf20Sopenharmony_ci }, 4008c2ecf20Sopenharmony_ci [CX23885_BOARD_MAGICPRO_PROHDTVE2] = { 4018c2ecf20Sopenharmony_ci .name = "Magic-Pro ProHDTV Extreme 2", 4028c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC5000, 4038c2ecf20Sopenharmony_ci .tuner_addr = 0x61, 4048c2ecf20Sopenharmony_ci .tuner_bus = 1, 4058c2ecf20Sopenharmony_ci .porta = CX23885_ANALOG_VIDEO, 4068c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 4078c2ecf20Sopenharmony_ci .input = { 4088c2ecf20Sopenharmony_ci { 4098c2ecf20Sopenharmony_ci .type = CX23885_VMUX_TELEVISION, 4108c2ecf20Sopenharmony_ci .vmux = CX25840_COMPOSITE2, 4118c2ecf20Sopenharmony_ci }, 4128c2ecf20Sopenharmony_ci { 4138c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE1, 4148c2ecf20Sopenharmony_ci .vmux = CX25840_COMPOSITE8, 4158c2ecf20Sopenharmony_ci }, 4168c2ecf20Sopenharmony_ci { 4178c2ecf20Sopenharmony_ci .type = CX23885_VMUX_SVIDEO, 4188c2ecf20Sopenharmony_ci .vmux = CX25840_SVIDEO_LUMA3 | 4198c2ecf20Sopenharmony_ci CX25840_SVIDEO_CHROMA4, 4208c2ecf20Sopenharmony_ci }, 4218c2ecf20Sopenharmony_ci { 4228c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPONENT, 4238c2ecf20Sopenharmony_ci .vmux = CX25840_COMPONENT_ON | 4248c2ecf20Sopenharmony_ci CX25840_VIN1_CH1 | 4258c2ecf20Sopenharmony_ci CX25840_VIN6_CH2 | 4268c2ecf20Sopenharmony_ci CX25840_VIN7_CH3, 4278c2ecf20Sopenharmony_ci }, 4288c2ecf20Sopenharmony_ci }, 4298c2ecf20Sopenharmony_ci }, 4308c2ecf20Sopenharmony_ci [CX23885_BOARD_HAUPPAUGE_HVR1850] = { 4318c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-HVR1850", 4328c2ecf20Sopenharmony_ci .porta = CX23885_ANALOG_VIDEO, 4338c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_ENCODER, 4348c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 4358c2ecf20Sopenharmony_ci .tuner_type = TUNER_ABSENT, 4368c2ecf20Sopenharmony_ci .tuner_addr = 0x42, /* 0x84 >> 1 */ 4378c2ecf20Sopenharmony_ci .force_bff = 1, 4388c2ecf20Sopenharmony_ci .input = {{ 4398c2ecf20Sopenharmony_ci .type = CX23885_VMUX_TELEVISION, 4408c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 4418c2ecf20Sopenharmony_ci CX25840_VIN5_CH2 | 4428c2ecf20Sopenharmony_ci CX25840_VIN2_CH1 | 4438c2ecf20Sopenharmony_ci CX25840_DIF_ON, 4448c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO8, 4458c2ecf20Sopenharmony_ci }, { 4468c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE1, 4478c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 4488c2ecf20Sopenharmony_ci CX25840_VIN4_CH2 | 4498c2ecf20Sopenharmony_ci CX25840_VIN6_CH1, 4508c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 4518c2ecf20Sopenharmony_ci }, { 4528c2ecf20Sopenharmony_ci .type = CX23885_VMUX_SVIDEO, 4538c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 4548c2ecf20Sopenharmony_ci CX25840_VIN4_CH2 | 4558c2ecf20Sopenharmony_ci CX25840_VIN8_CH1 | 4568c2ecf20Sopenharmony_ci CX25840_SVIDEO_ON, 4578c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 4588c2ecf20Sopenharmony_ci } }, 4598c2ecf20Sopenharmony_ci }, 4608c2ecf20Sopenharmony_ci [CX23885_BOARD_COMPRO_VIDEOMATE_E800] = { 4618c2ecf20Sopenharmony_ci .name = "Compro VideoMate E800", 4628c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 4638c2ecf20Sopenharmony_ci }, 4648c2ecf20Sopenharmony_ci [CX23885_BOARD_HAUPPAUGE_HVR1290] = { 4658c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-HVR1290", 4668c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 4678c2ecf20Sopenharmony_ci }, 4688c2ecf20Sopenharmony_ci [CX23885_BOARD_MYGICA_X8558PRO] = { 4698c2ecf20Sopenharmony_ci .name = "Mygica X8558 PRO DMB-TH", 4708c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 4718c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 4728c2ecf20Sopenharmony_ci }, 4738c2ecf20Sopenharmony_ci [CX23885_BOARD_LEADTEK_WINFAST_PXTV1200] = { 4748c2ecf20Sopenharmony_ci .name = "LEADTEK WinFast PxTV1200", 4758c2ecf20Sopenharmony_ci .porta = CX23885_ANALOG_VIDEO, 4768c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC2028, 4778c2ecf20Sopenharmony_ci .tuner_addr = 0x61, 4788c2ecf20Sopenharmony_ci .tuner_bus = 1, 4798c2ecf20Sopenharmony_ci .input = {{ 4808c2ecf20Sopenharmony_ci .type = CX23885_VMUX_TELEVISION, 4818c2ecf20Sopenharmony_ci .vmux = CX25840_VIN2_CH1 | 4828c2ecf20Sopenharmony_ci CX25840_VIN5_CH2 | 4838c2ecf20Sopenharmony_ci CX25840_NONE0_CH3, 4848c2ecf20Sopenharmony_ci }, { 4858c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE1, 4868c2ecf20Sopenharmony_ci .vmux = CX25840_COMPOSITE1, 4878c2ecf20Sopenharmony_ci }, { 4888c2ecf20Sopenharmony_ci .type = CX23885_VMUX_SVIDEO, 4898c2ecf20Sopenharmony_ci .vmux = CX25840_SVIDEO_LUMA3 | 4908c2ecf20Sopenharmony_ci CX25840_SVIDEO_CHROMA4, 4918c2ecf20Sopenharmony_ci }, { 4928c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPONENT, 4938c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH1 | 4948c2ecf20Sopenharmony_ci CX25840_VIN6_CH2 | 4958c2ecf20Sopenharmony_ci CX25840_VIN8_CH3 | 4968c2ecf20Sopenharmony_ci CX25840_COMPONENT_ON, 4978c2ecf20Sopenharmony_ci } }, 4988c2ecf20Sopenharmony_ci }, 4998c2ecf20Sopenharmony_ci [CX23885_BOARD_GOTVIEW_X5_3D_HYBRID] = { 5008c2ecf20Sopenharmony_ci .name = "GoTView X5 3D Hybrid", 5018c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC5000, 5028c2ecf20Sopenharmony_ci .tuner_addr = 0x64, 5038c2ecf20Sopenharmony_ci .tuner_bus = 1, 5048c2ecf20Sopenharmony_ci .porta = CX23885_ANALOG_VIDEO, 5058c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 5068c2ecf20Sopenharmony_ci .input = {{ 5078c2ecf20Sopenharmony_ci .type = CX23885_VMUX_TELEVISION, 5088c2ecf20Sopenharmony_ci .vmux = CX25840_VIN2_CH1 | 5098c2ecf20Sopenharmony_ci CX25840_VIN5_CH2, 5108c2ecf20Sopenharmony_ci .gpio0 = 0x02, 5118c2ecf20Sopenharmony_ci }, { 5128c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE1, 5138c2ecf20Sopenharmony_ci .vmux = CX23885_VMUX_COMPOSITE1, 5148c2ecf20Sopenharmony_ci }, { 5158c2ecf20Sopenharmony_ci .type = CX23885_VMUX_SVIDEO, 5168c2ecf20Sopenharmony_ci .vmux = CX25840_SVIDEO_LUMA3 | 5178c2ecf20Sopenharmony_ci CX25840_SVIDEO_CHROMA4, 5188c2ecf20Sopenharmony_ci } }, 5198c2ecf20Sopenharmony_ci }, 5208c2ecf20Sopenharmony_ci [CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF] = { 5218c2ecf20Sopenharmony_ci .ci_type = 2, 5228c2ecf20Sopenharmony_ci .name = "NetUP Dual DVB-T/C-CI RF", 5238c2ecf20Sopenharmony_ci .porta = CX23885_ANALOG_VIDEO, 5248c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 5258c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 5268c2ecf20Sopenharmony_ci .num_fds_portb = 2, 5278c2ecf20Sopenharmony_ci .num_fds_portc = 2, 5288c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC5000, 5298c2ecf20Sopenharmony_ci .tuner_addr = 0x64, 5308c2ecf20Sopenharmony_ci .input = { { 5318c2ecf20Sopenharmony_ci .type = CX23885_VMUX_TELEVISION, 5328c2ecf20Sopenharmony_ci .vmux = CX25840_COMPOSITE1, 5338c2ecf20Sopenharmony_ci } }, 5348c2ecf20Sopenharmony_ci }, 5358c2ecf20Sopenharmony_ci [CX23885_BOARD_MPX885] = { 5368c2ecf20Sopenharmony_ci .name = "MPX-885", 5378c2ecf20Sopenharmony_ci .porta = CX23885_ANALOG_VIDEO, 5388c2ecf20Sopenharmony_ci .input = {{ 5398c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE1, 5408c2ecf20Sopenharmony_ci .vmux = CX25840_COMPOSITE1, 5418c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO6, 5428c2ecf20Sopenharmony_ci .gpio0 = 0, 5438c2ecf20Sopenharmony_ci }, { 5448c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE2, 5458c2ecf20Sopenharmony_ci .vmux = CX25840_COMPOSITE2, 5468c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO6, 5478c2ecf20Sopenharmony_ci .gpio0 = 0, 5488c2ecf20Sopenharmony_ci }, { 5498c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE3, 5508c2ecf20Sopenharmony_ci .vmux = CX25840_COMPOSITE3, 5518c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 5528c2ecf20Sopenharmony_ci .gpio0 = 0, 5538c2ecf20Sopenharmony_ci }, { 5548c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE4, 5558c2ecf20Sopenharmony_ci .vmux = CX25840_COMPOSITE4, 5568c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 5578c2ecf20Sopenharmony_ci .gpio0 = 0, 5588c2ecf20Sopenharmony_ci } }, 5598c2ecf20Sopenharmony_ci }, 5608c2ecf20Sopenharmony_ci [CX23885_BOARD_MYGICA_X8507] = { 5618c2ecf20Sopenharmony_ci .name = "Mygica X8502/X8507 ISDB-T", 5628c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC5000, 5638c2ecf20Sopenharmony_ci .tuner_addr = 0x61, 5648c2ecf20Sopenharmony_ci .tuner_bus = 1, 5658c2ecf20Sopenharmony_ci .porta = CX23885_ANALOG_VIDEO, 5668c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 5678c2ecf20Sopenharmony_ci .input = { 5688c2ecf20Sopenharmony_ci { 5698c2ecf20Sopenharmony_ci .type = CX23885_VMUX_TELEVISION, 5708c2ecf20Sopenharmony_ci .vmux = CX25840_COMPOSITE2, 5718c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO8, 5728c2ecf20Sopenharmony_ci }, 5738c2ecf20Sopenharmony_ci { 5748c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE1, 5758c2ecf20Sopenharmony_ci .vmux = CX25840_COMPOSITE8, 5768c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 5778c2ecf20Sopenharmony_ci }, 5788c2ecf20Sopenharmony_ci { 5798c2ecf20Sopenharmony_ci .type = CX23885_VMUX_SVIDEO, 5808c2ecf20Sopenharmony_ci .vmux = CX25840_SVIDEO_LUMA3 | 5818c2ecf20Sopenharmony_ci CX25840_SVIDEO_CHROMA4, 5828c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 5838c2ecf20Sopenharmony_ci }, 5848c2ecf20Sopenharmony_ci { 5858c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPONENT, 5868c2ecf20Sopenharmony_ci .vmux = CX25840_COMPONENT_ON | 5878c2ecf20Sopenharmony_ci CX25840_VIN1_CH1 | 5888c2ecf20Sopenharmony_ci CX25840_VIN6_CH2 | 5898c2ecf20Sopenharmony_ci CX25840_VIN7_CH3, 5908c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 5918c2ecf20Sopenharmony_ci }, 5928c2ecf20Sopenharmony_ci }, 5938c2ecf20Sopenharmony_ci }, 5948c2ecf20Sopenharmony_ci [CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL] = { 5958c2ecf20Sopenharmony_ci .name = "TerraTec Cinergy T PCIe Dual", 5968c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 5978c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 5988c2ecf20Sopenharmony_ci }, 5998c2ecf20Sopenharmony_ci [CX23885_BOARD_TEVII_S471] = { 6008c2ecf20Sopenharmony_ci .name = "TeVii S471", 6018c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 6028c2ecf20Sopenharmony_ci }, 6038c2ecf20Sopenharmony_ci [CX23885_BOARD_PROF_8000] = { 6048c2ecf20Sopenharmony_ci .name = "Prof Revolution DVB-S2 8000", 6058c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 6068c2ecf20Sopenharmony_ci }, 6078c2ecf20Sopenharmony_ci [CX23885_BOARD_HAUPPAUGE_HVR4400] = { 6088c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-HVR4400/HVR5500", 6098c2ecf20Sopenharmony_ci .porta = CX23885_ANALOG_VIDEO, 6108c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 6118c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 6128c2ecf20Sopenharmony_ci .tuner_type = TUNER_NXP_TDA18271, 6138c2ecf20Sopenharmony_ci .tuner_addr = 0x60, /* 0xc0 >> 1 */ 6148c2ecf20Sopenharmony_ci .tuner_bus = 1, 6158c2ecf20Sopenharmony_ci }, 6168c2ecf20Sopenharmony_ci [CX23885_BOARD_HAUPPAUGE_STARBURST] = { 6178c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV Starburst", 6188c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 6198c2ecf20Sopenharmony_ci }, 6208c2ecf20Sopenharmony_ci [CX23885_BOARD_AVERMEDIA_HC81R] = { 6218c2ecf20Sopenharmony_ci .name = "AVerTV Hybrid Express Slim HC81R", 6228c2ecf20Sopenharmony_ci .tuner_type = TUNER_XC2028, 6238c2ecf20Sopenharmony_ci .tuner_addr = 0x61, /* 0xc2 >> 1 */ 6248c2ecf20Sopenharmony_ci .tuner_bus = 1, 6258c2ecf20Sopenharmony_ci .porta = CX23885_ANALOG_VIDEO, 6268c2ecf20Sopenharmony_ci .input = {{ 6278c2ecf20Sopenharmony_ci .type = CX23885_VMUX_TELEVISION, 6288c2ecf20Sopenharmony_ci .vmux = CX25840_VIN2_CH1 | 6298c2ecf20Sopenharmony_ci CX25840_VIN5_CH2 | 6308c2ecf20Sopenharmony_ci CX25840_NONE0_CH3 | 6318c2ecf20Sopenharmony_ci CX25840_NONE1_CH3, 6328c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO8, 6338c2ecf20Sopenharmony_ci }, { 6348c2ecf20Sopenharmony_ci .type = CX23885_VMUX_SVIDEO, 6358c2ecf20Sopenharmony_ci .vmux = CX25840_VIN8_CH1 | 6368c2ecf20Sopenharmony_ci CX25840_NONE_CH2 | 6378c2ecf20Sopenharmony_ci CX25840_VIN7_CH3 | 6388c2ecf20Sopenharmony_ci CX25840_SVIDEO_ON, 6398c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO6, 6408c2ecf20Sopenharmony_ci }, { 6418c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPONENT, 6428c2ecf20Sopenharmony_ci .vmux = CX25840_VIN1_CH1 | 6438c2ecf20Sopenharmony_ci CX25840_NONE_CH2 | 6448c2ecf20Sopenharmony_ci CX25840_NONE0_CH3 | 6458c2ecf20Sopenharmony_ci CX25840_NONE1_CH3, 6468c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO6, 6478c2ecf20Sopenharmony_ci } }, 6488c2ecf20Sopenharmony_ci }, 6498c2ecf20Sopenharmony_ci [CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP2] = { 6508c2ecf20Sopenharmony_ci .name = "DViCO FusionHDTV DVB-T Dual Express2", 6518c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 6528c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 6538c2ecf20Sopenharmony_ci }, 6548c2ecf20Sopenharmony_ci [CX23885_BOARD_HAUPPAUGE_IMPACTVCBE] = { 6558c2ecf20Sopenharmony_ci .name = "Hauppauge ImpactVCB-e", 6568c2ecf20Sopenharmony_ci .tuner_type = TUNER_ABSENT, 6578c2ecf20Sopenharmony_ci .porta = CX23885_ANALOG_VIDEO, 6588c2ecf20Sopenharmony_ci .input = {{ 6598c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE1, 6608c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 6618c2ecf20Sopenharmony_ci CX25840_VIN4_CH2 | 6628c2ecf20Sopenharmony_ci CX25840_VIN6_CH1, 6638c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 6648c2ecf20Sopenharmony_ci }, { 6658c2ecf20Sopenharmony_ci .type = CX23885_VMUX_SVIDEO, 6668c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 6678c2ecf20Sopenharmony_ci CX25840_VIN4_CH2 | 6688c2ecf20Sopenharmony_ci CX25840_VIN8_CH1 | 6698c2ecf20Sopenharmony_ci CX25840_SVIDEO_ON, 6708c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 6718c2ecf20Sopenharmony_ci } }, 6728c2ecf20Sopenharmony_ci }, 6738c2ecf20Sopenharmony_ci [CX23885_BOARD_DVBSKY_T9580] = { 6748c2ecf20Sopenharmony_ci .name = "DVBSky T9580", 6758c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 6768c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 6778c2ecf20Sopenharmony_ci }, 6788c2ecf20Sopenharmony_ci [CX23885_BOARD_DVBSKY_T980C] = { 6798c2ecf20Sopenharmony_ci .name = "DVBSky T980C", 6808c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 6818c2ecf20Sopenharmony_ci }, 6828c2ecf20Sopenharmony_ci [CX23885_BOARD_DVBSKY_S950C] = { 6838c2ecf20Sopenharmony_ci .name = "DVBSky S950C", 6848c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 6858c2ecf20Sopenharmony_ci }, 6868c2ecf20Sopenharmony_ci [CX23885_BOARD_TT_CT2_4500_CI] = { 6878c2ecf20Sopenharmony_ci .name = "Technotrend TT-budget CT2-4500 CI", 6888c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 6898c2ecf20Sopenharmony_ci }, 6908c2ecf20Sopenharmony_ci [CX23885_BOARD_DVBSKY_S950] = { 6918c2ecf20Sopenharmony_ci .name = "DVBSky S950", 6928c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 6938c2ecf20Sopenharmony_ci }, 6948c2ecf20Sopenharmony_ci [CX23885_BOARD_DVBSKY_S952] = { 6958c2ecf20Sopenharmony_ci .name = "DVBSky S952", 6968c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 6978c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 6988c2ecf20Sopenharmony_ci }, 6998c2ecf20Sopenharmony_ci [CX23885_BOARD_DVBSKY_T982] = { 7008c2ecf20Sopenharmony_ci .name = "DVBSky T982", 7018c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 7028c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 7038c2ecf20Sopenharmony_ci }, 7048c2ecf20Sopenharmony_ci [CX23885_BOARD_HAUPPAUGE_HVR5525] = { 7058c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-HVR5525", 7068c2ecf20Sopenharmony_ci .porta = CX23885_ANALOG_VIDEO, 7078c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 7088c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 7098c2ecf20Sopenharmony_ci .tuner_type = TUNER_ABSENT, 7108c2ecf20Sopenharmony_ci .force_bff = 1, 7118c2ecf20Sopenharmony_ci .input = {{ 7128c2ecf20Sopenharmony_ci .type = CX23885_VMUX_TELEVISION, 7138c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 7148c2ecf20Sopenharmony_ci CX25840_VIN5_CH2 | 7158c2ecf20Sopenharmony_ci CX25840_VIN2_CH1 | 7168c2ecf20Sopenharmony_ci CX25840_DIF_ON, 7178c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO8, 7188c2ecf20Sopenharmony_ci } }, 7198c2ecf20Sopenharmony_ci }, 7208c2ecf20Sopenharmony_ci [CX23885_BOARD_VIEWCAST_260E] = { 7218c2ecf20Sopenharmony_ci .name = "ViewCast 260e", 7228c2ecf20Sopenharmony_ci .porta = CX23885_ANALOG_VIDEO, 7238c2ecf20Sopenharmony_ci .force_bff = 1, 7248c2ecf20Sopenharmony_ci .input = {{ 7258c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE1, 7268c2ecf20Sopenharmony_ci .vmux = CX25840_VIN6_CH1, 7278c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 7288c2ecf20Sopenharmony_ci }, { 7298c2ecf20Sopenharmony_ci .type = CX23885_VMUX_SVIDEO, 7308c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 7318c2ecf20Sopenharmony_ci CX25840_VIN5_CH1 | 7328c2ecf20Sopenharmony_ci CX25840_SVIDEO_ON, 7338c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 7348c2ecf20Sopenharmony_ci }, { 7358c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPONENT, 7368c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 7378c2ecf20Sopenharmony_ci CX25840_VIN6_CH2 | 7388c2ecf20Sopenharmony_ci CX25840_VIN5_CH1 | 7398c2ecf20Sopenharmony_ci CX25840_COMPONENT_ON, 7408c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 7418c2ecf20Sopenharmony_ci } }, 7428c2ecf20Sopenharmony_ci }, 7438c2ecf20Sopenharmony_ci [CX23885_BOARD_VIEWCAST_460E] = { 7448c2ecf20Sopenharmony_ci .name = "ViewCast 460e", 7458c2ecf20Sopenharmony_ci .porta = CX23885_ANALOG_VIDEO, 7468c2ecf20Sopenharmony_ci .force_bff = 1, 7478c2ecf20Sopenharmony_ci .input = {{ 7488c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE1, 7498c2ecf20Sopenharmony_ci .vmux = CX25840_VIN4_CH1, 7508c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 7518c2ecf20Sopenharmony_ci }, { 7528c2ecf20Sopenharmony_ci .type = CX23885_VMUX_SVIDEO, 7538c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 7548c2ecf20Sopenharmony_ci CX25840_VIN6_CH1 | 7558c2ecf20Sopenharmony_ci CX25840_SVIDEO_ON, 7568c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 7578c2ecf20Sopenharmony_ci }, { 7588c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPONENT, 7598c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 7608c2ecf20Sopenharmony_ci CX25840_VIN6_CH1 | 7618c2ecf20Sopenharmony_ci CX25840_VIN5_CH2 | 7628c2ecf20Sopenharmony_ci CX25840_COMPONENT_ON, 7638c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 7648c2ecf20Sopenharmony_ci }, { 7658c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE2, 7668c2ecf20Sopenharmony_ci .vmux = CX25840_VIN6_CH1, 7678c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 7688c2ecf20Sopenharmony_ci } }, 7698c2ecf20Sopenharmony_ci }, 7708c2ecf20Sopenharmony_ci [CX23885_BOARD_HAUPPAUGE_QUADHD_DVB] = { 7718c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-QuadHD-DVB", 7728c2ecf20Sopenharmony_ci .porta = CX23885_ANALOG_VIDEO, 7738c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 7748c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 7758c2ecf20Sopenharmony_ci .tuner_type = TUNER_ABSENT, 7768c2ecf20Sopenharmony_ci .force_bff = 1, 7778c2ecf20Sopenharmony_ci .input = {{ 7788c2ecf20Sopenharmony_ci .type = CX23885_VMUX_TELEVISION, 7798c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 7808c2ecf20Sopenharmony_ci CX25840_VIN5_CH2 | 7818c2ecf20Sopenharmony_ci CX25840_VIN2_CH1 | 7828c2ecf20Sopenharmony_ci CX25840_DIF_ON, 7838c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO8, 7848c2ecf20Sopenharmony_ci } }, 7858c2ecf20Sopenharmony_ci }, 7868c2ecf20Sopenharmony_ci [CX23885_BOARD_HAUPPAUGE_QUADHD_DVB_885] = { 7878c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-QuadHD-DVB(885)", 7888c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 7898c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 7908c2ecf20Sopenharmony_ci .tuner_type = TUNER_ABSENT, 7918c2ecf20Sopenharmony_ci }, 7928c2ecf20Sopenharmony_ci [CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC] = { 7938c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-QuadHD-ATSC", 7948c2ecf20Sopenharmony_ci .porta = CX23885_ANALOG_VIDEO, 7958c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 7968c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 7978c2ecf20Sopenharmony_ci .tuner_type = TUNER_ABSENT, 7988c2ecf20Sopenharmony_ci .input = {{ 7998c2ecf20Sopenharmony_ci .type = CX23885_VMUX_TELEVISION, 8008c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 8018c2ecf20Sopenharmony_ci CX25840_VIN5_CH2 | 8028c2ecf20Sopenharmony_ci CX25840_VIN2_CH1 | 8038c2ecf20Sopenharmony_ci CX25840_DIF_ON, 8048c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO8, 8058c2ecf20Sopenharmony_ci } }, 8068c2ecf20Sopenharmony_ci }, 8078c2ecf20Sopenharmony_ci [CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC_885] = { 8088c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-QuadHD-ATSC(885)", 8098c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 8108c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 8118c2ecf20Sopenharmony_ci .tuner_type = TUNER_ABSENT, 8128c2ecf20Sopenharmony_ci }, 8138c2ecf20Sopenharmony_ci [CX23885_BOARD_HAUPPAUGE_HVR1265_K4] = { 8148c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-HVR-1265(161111)", 8158c2ecf20Sopenharmony_ci .porta = CX23885_ANALOG_VIDEO, 8168c2ecf20Sopenharmony_ci .portc = CX23885_MPEG_DVB, 8178c2ecf20Sopenharmony_ci .tuner_type = TUNER_ABSENT, 8188c2ecf20Sopenharmony_ci .input = {{ 8198c2ecf20Sopenharmony_ci .type = CX23885_VMUX_TELEVISION, 8208c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 8218c2ecf20Sopenharmony_ci CX25840_VIN5_CH2 | 8228c2ecf20Sopenharmony_ci CX25840_VIN2_CH1 | 8238c2ecf20Sopenharmony_ci CX25840_DIF_ON, 8248c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO8, 8258c2ecf20Sopenharmony_ci }, { 8268c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE1, 8278c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 8288c2ecf20Sopenharmony_ci CX25840_VIN4_CH2 | 8298c2ecf20Sopenharmony_ci CX25840_VIN6_CH1, 8308c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 8318c2ecf20Sopenharmony_ci }, { 8328c2ecf20Sopenharmony_ci .type = CX23885_VMUX_SVIDEO, 8338c2ecf20Sopenharmony_ci .vmux = CX25840_VIN7_CH3 | 8348c2ecf20Sopenharmony_ci CX25840_VIN4_CH2 | 8358c2ecf20Sopenharmony_ci CX25840_VIN8_CH1 | 8368c2ecf20Sopenharmony_ci CX25840_SVIDEO_ON, 8378c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 8388c2ecf20Sopenharmony_ci } }, 8398c2ecf20Sopenharmony_ci }, 8408c2ecf20Sopenharmony_ci [CX23885_BOARD_HAUPPAUGE_STARBURST2] = { 8418c2ecf20Sopenharmony_ci .name = "Hauppauge WinTV-Starburst2", 8428c2ecf20Sopenharmony_ci .portb = CX23885_MPEG_DVB, 8438c2ecf20Sopenharmony_ci }, 8448c2ecf20Sopenharmony_ci [CX23885_BOARD_AVERMEDIA_CE310B] = { 8458c2ecf20Sopenharmony_ci .name = "AVerMedia CE310B", 8468c2ecf20Sopenharmony_ci .porta = CX23885_ANALOG_VIDEO, 8478c2ecf20Sopenharmony_ci .force_bff = 1, 8488c2ecf20Sopenharmony_ci .input = {{ 8498c2ecf20Sopenharmony_ci .type = CX23885_VMUX_COMPOSITE1, 8508c2ecf20Sopenharmony_ci .vmux = CX25840_VIN1_CH1 | 8518c2ecf20Sopenharmony_ci CX25840_NONE_CH2 | 8528c2ecf20Sopenharmony_ci CX25840_NONE0_CH3, 8538c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 8548c2ecf20Sopenharmony_ci }, { 8558c2ecf20Sopenharmony_ci .type = CX23885_VMUX_SVIDEO, 8568c2ecf20Sopenharmony_ci .vmux = CX25840_VIN8_CH1 | 8578c2ecf20Sopenharmony_ci CX25840_NONE_CH2 | 8588c2ecf20Sopenharmony_ci CX25840_VIN7_CH3 | 8598c2ecf20Sopenharmony_ci CX25840_SVIDEO_ON, 8608c2ecf20Sopenharmony_ci .amux = CX25840_AUDIO7, 8618c2ecf20Sopenharmony_ci } }, 8628c2ecf20Sopenharmony_ci }, 8638c2ecf20Sopenharmony_ci}; 8648c2ecf20Sopenharmony_ciconst unsigned int cx23885_bcount = ARRAY_SIZE(cx23885_boards); 8658c2ecf20Sopenharmony_ci 8668c2ecf20Sopenharmony_ci/* ------------------------------------------------------------------ */ 8678c2ecf20Sopenharmony_ci/* PCI subsystem IDs */ 8688c2ecf20Sopenharmony_ci 8698c2ecf20Sopenharmony_cistruct cx23885_subid cx23885_subids[] = { 8708c2ecf20Sopenharmony_ci { 8718c2ecf20Sopenharmony_ci .subvendor = 0x0070, 8728c2ecf20Sopenharmony_ci .subdevice = 0x3400, 8738c2ecf20Sopenharmony_ci .card = CX23885_BOARD_UNKNOWN, 8748c2ecf20Sopenharmony_ci }, { 8758c2ecf20Sopenharmony_ci .subvendor = 0x0070, 8768c2ecf20Sopenharmony_ci .subdevice = 0x7600, 8778c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1800lp, 8788c2ecf20Sopenharmony_ci }, { 8798c2ecf20Sopenharmony_ci .subvendor = 0x0070, 8808c2ecf20Sopenharmony_ci .subdevice = 0x7800, 8818c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1800, 8828c2ecf20Sopenharmony_ci }, { 8838c2ecf20Sopenharmony_ci .subvendor = 0x0070, 8848c2ecf20Sopenharmony_ci .subdevice = 0x7801, 8858c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1800, 8868c2ecf20Sopenharmony_ci }, { 8878c2ecf20Sopenharmony_ci .subvendor = 0x0070, 8888c2ecf20Sopenharmony_ci .subdevice = 0x7809, 8898c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1800, 8908c2ecf20Sopenharmony_ci }, { 8918c2ecf20Sopenharmony_ci .subvendor = 0x0070, 8928c2ecf20Sopenharmony_ci .subdevice = 0x7911, 8938c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1250, 8948c2ecf20Sopenharmony_ci }, { 8958c2ecf20Sopenharmony_ci .subvendor = 0x18ac, 8968c2ecf20Sopenharmony_ci .subdevice = 0xd500, 8978c2ecf20Sopenharmony_ci .card = CX23885_BOARD_DVICO_FUSIONHDTV_5_EXP, 8988c2ecf20Sopenharmony_ci }, { 8998c2ecf20Sopenharmony_ci .subvendor = 0x0070, 9008c2ecf20Sopenharmony_ci .subdevice = 0x7790, 9018c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1500Q, 9028c2ecf20Sopenharmony_ci }, { 9038c2ecf20Sopenharmony_ci .subvendor = 0x0070, 9048c2ecf20Sopenharmony_ci .subdevice = 0x7797, 9058c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1500Q, 9068c2ecf20Sopenharmony_ci }, { 9078c2ecf20Sopenharmony_ci .subvendor = 0x0070, 9088c2ecf20Sopenharmony_ci .subdevice = 0x7710, 9098c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1500, 9108c2ecf20Sopenharmony_ci }, { 9118c2ecf20Sopenharmony_ci .subvendor = 0x0070, 9128c2ecf20Sopenharmony_ci .subdevice = 0x7717, 9138c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1500, 9148c2ecf20Sopenharmony_ci }, { 9158c2ecf20Sopenharmony_ci .subvendor = 0x0070, 9168c2ecf20Sopenharmony_ci .subdevice = 0x71d1, 9178c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1200, 9188c2ecf20Sopenharmony_ci }, { 9198c2ecf20Sopenharmony_ci .subvendor = 0x0070, 9208c2ecf20Sopenharmony_ci .subdevice = 0x71d3, 9218c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1200, 9228c2ecf20Sopenharmony_ci }, { 9238c2ecf20Sopenharmony_ci .subvendor = 0x0070, 9248c2ecf20Sopenharmony_ci .subdevice = 0x8101, 9258c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1700, 9268c2ecf20Sopenharmony_ci }, { 9278c2ecf20Sopenharmony_ci .subvendor = 0x0070, 9288c2ecf20Sopenharmony_ci .subdevice = 0x8010, 9298c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1400, 9308c2ecf20Sopenharmony_ci }, { 9318c2ecf20Sopenharmony_ci .subvendor = 0x18ac, 9328c2ecf20Sopenharmony_ci .subdevice = 0xd618, 9338c2ecf20Sopenharmony_ci .card = CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP, 9348c2ecf20Sopenharmony_ci }, { 9358c2ecf20Sopenharmony_ci .subvendor = 0x18ac, 9368c2ecf20Sopenharmony_ci .subdevice = 0xdb78, 9378c2ecf20Sopenharmony_ci .card = CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP, 9388c2ecf20Sopenharmony_ci }, { 9398c2ecf20Sopenharmony_ci .subvendor = 0x107d, 9408c2ecf20Sopenharmony_ci .subdevice = 0x6681, 9418c2ecf20Sopenharmony_ci .card = CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H, 9428c2ecf20Sopenharmony_ci }, { 9438c2ecf20Sopenharmony_ci .subvendor = 0x107d, 9448c2ecf20Sopenharmony_ci .subdevice = 0x6f21, 9458c2ecf20Sopenharmony_ci .card = CX23885_BOARD_LEADTEK_WINFAST_PXPVR2200, 9468c2ecf20Sopenharmony_ci }, { 9478c2ecf20Sopenharmony_ci .subvendor = 0x107d, 9488c2ecf20Sopenharmony_ci .subdevice = 0x6f39, 9498c2ecf20Sopenharmony_ci .card = CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H_XC4000, 9508c2ecf20Sopenharmony_ci }, { 9518c2ecf20Sopenharmony_ci .subvendor = 0x185b, 9528c2ecf20Sopenharmony_ci .subdevice = 0xe800, 9538c2ecf20Sopenharmony_ci .card = CX23885_BOARD_COMPRO_VIDEOMATE_E650F, 9548c2ecf20Sopenharmony_ci }, { 9558c2ecf20Sopenharmony_ci .subvendor = 0x6920, 9568c2ecf20Sopenharmony_ci .subdevice = 0x8888, 9578c2ecf20Sopenharmony_ci .card = CX23885_BOARD_TBS_6920, 9588c2ecf20Sopenharmony_ci }, { 9598c2ecf20Sopenharmony_ci .subvendor = 0x6980, 9608c2ecf20Sopenharmony_ci .subdevice = 0x8888, 9618c2ecf20Sopenharmony_ci .card = CX23885_BOARD_TBS_6980, 9628c2ecf20Sopenharmony_ci }, { 9638c2ecf20Sopenharmony_ci .subvendor = 0x6981, 9648c2ecf20Sopenharmony_ci .subdevice = 0x8888, 9658c2ecf20Sopenharmony_ci .card = CX23885_BOARD_TBS_6981, 9668c2ecf20Sopenharmony_ci }, { 9678c2ecf20Sopenharmony_ci .subvendor = 0xd470, 9688c2ecf20Sopenharmony_ci .subdevice = 0x9022, 9698c2ecf20Sopenharmony_ci .card = CX23885_BOARD_TEVII_S470, 9708c2ecf20Sopenharmony_ci }, { 9718c2ecf20Sopenharmony_ci .subvendor = 0x0001, 9728c2ecf20Sopenharmony_ci .subdevice = 0x2005, 9738c2ecf20Sopenharmony_ci .card = CX23885_BOARD_DVBWORLD_2005, 9748c2ecf20Sopenharmony_ci }, { 9758c2ecf20Sopenharmony_ci .subvendor = 0x1b55, 9768c2ecf20Sopenharmony_ci .subdevice = 0x2a2c, 9778c2ecf20Sopenharmony_ci .card = CX23885_BOARD_NETUP_DUAL_DVBS2_CI, 9788c2ecf20Sopenharmony_ci }, { 9798c2ecf20Sopenharmony_ci .subvendor = 0x0070, 9808c2ecf20Sopenharmony_ci .subdevice = 0x2211, 9818c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1270, 9828c2ecf20Sopenharmony_ci }, { 9838c2ecf20Sopenharmony_ci .subvendor = 0x0070, 9848c2ecf20Sopenharmony_ci .subdevice = 0x2215, 9858c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1275, 9868c2ecf20Sopenharmony_ci }, { 9878c2ecf20Sopenharmony_ci .subvendor = 0x0070, 9888c2ecf20Sopenharmony_ci .subdevice = 0x221d, 9898c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1275, 9908c2ecf20Sopenharmony_ci }, { 9918c2ecf20Sopenharmony_ci .subvendor = 0x0070, 9928c2ecf20Sopenharmony_ci .subdevice = 0x2251, 9938c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1255, 9948c2ecf20Sopenharmony_ci }, { 9958c2ecf20Sopenharmony_ci .subvendor = 0x0070, 9968c2ecf20Sopenharmony_ci .subdevice = 0x2259, 9978c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1255_22111, 9988c2ecf20Sopenharmony_ci }, { 9998c2ecf20Sopenharmony_ci .subvendor = 0x0070, 10008c2ecf20Sopenharmony_ci .subdevice = 0x2291, 10018c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1210, 10028c2ecf20Sopenharmony_ci }, { 10038c2ecf20Sopenharmony_ci .subvendor = 0x0070, 10048c2ecf20Sopenharmony_ci .subdevice = 0x2295, 10058c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1210, 10068c2ecf20Sopenharmony_ci }, { 10078c2ecf20Sopenharmony_ci .subvendor = 0x0070, 10088c2ecf20Sopenharmony_ci .subdevice = 0x2299, 10098c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1210, 10108c2ecf20Sopenharmony_ci }, { 10118c2ecf20Sopenharmony_ci .subvendor = 0x0070, 10128c2ecf20Sopenharmony_ci .subdevice = 0x229d, 10138c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1210, /* HVR1215 */ 10148c2ecf20Sopenharmony_ci }, { 10158c2ecf20Sopenharmony_ci .subvendor = 0x0070, 10168c2ecf20Sopenharmony_ci .subdevice = 0x22f0, 10178c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1210, 10188c2ecf20Sopenharmony_ci }, { 10198c2ecf20Sopenharmony_ci .subvendor = 0x0070, 10208c2ecf20Sopenharmony_ci .subdevice = 0x22f1, 10218c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1255, 10228c2ecf20Sopenharmony_ci }, { 10238c2ecf20Sopenharmony_ci .subvendor = 0x0070, 10248c2ecf20Sopenharmony_ci .subdevice = 0x22f2, 10258c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1275, 10268c2ecf20Sopenharmony_ci }, { 10278c2ecf20Sopenharmony_ci .subvendor = 0x0070, 10288c2ecf20Sopenharmony_ci .subdevice = 0x22f3, 10298c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1210, /* HVR1215 */ 10308c2ecf20Sopenharmony_ci }, { 10318c2ecf20Sopenharmony_ci .subvendor = 0x0070, 10328c2ecf20Sopenharmony_ci .subdevice = 0x22f4, 10338c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1210, 10348c2ecf20Sopenharmony_ci }, { 10358c2ecf20Sopenharmony_ci .subvendor = 0x0070, 10368c2ecf20Sopenharmony_ci .subdevice = 0x22f5, 10378c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1210, /* HVR1215 */ 10388c2ecf20Sopenharmony_ci }, { 10398c2ecf20Sopenharmony_ci .subvendor = 0x14f1, 10408c2ecf20Sopenharmony_ci .subdevice = 0x8651, 10418c2ecf20Sopenharmony_ci .card = CX23885_BOARD_MYGICA_X8506, 10428c2ecf20Sopenharmony_ci }, { 10438c2ecf20Sopenharmony_ci .subvendor = 0x14f1, 10448c2ecf20Sopenharmony_ci .subdevice = 0x8657, 10458c2ecf20Sopenharmony_ci .card = CX23885_BOARD_MAGICPRO_PROHDTVE2, 10468c2ecf20Sopenharmony_ci }, { 10478c2ecf20Sopenharmony_ci .subvendor = 0x0070, 10488c2ecf20Sopenharmony_ci .subdevice = 0x8541, 10498c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1850, 10508c2ecf20Sopenharmony_ci }, { 10518c2ecf20Sopenharmony_ci .subvendor = 0x1858, 10528c2ecf20Sopenharmony_ci .subdevice = 0xe800, 10538c2ecf20Sopenharmony_ci .card = CX23885_BOARD_COMPRO_VIDEOMATE_E800, 10548c2ecf20Sopenharmony_ci }, { 10558c2ecf20Sopenharmony_ci .subvendor = 0x0070, 10568c2ecf20Sopenharmony_ci .subdevice = 0x8551, 10578c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1290, 10588c2ecf20Sopenharmony_ci }, { 10598c2ecf20Sopenharmony_ci .subvendor = 0x14f1, 10608c2ecf20Sopenharmony_ci .subdevice = 0x8578, 10618c2ecf20Sopenharmony_ci .card = CX23885_BOARD_MYGICA_X8558PRO, 10628c2ecf20Sopenharmony_ci }, { 10638c2ecf20Sopenharmony_ci .subvendor = 0x107d, 10648c2ecf20Sopenharmony_ci .subdevice = 0x6f22, 10658c2ecf20Sopenharmony_ci .card = CX23885_BOARD_LEADTEK_WINFAST_PXTV1200, 10668c2ecf20Sopenharmony_ci }, { 10678c2ecf20Sopenharmony_ci .subvendor = 0x5654, 10688c2ecf20Sopenharmony_ci .subdevice = 0x2390, 10698c2ecf20Sopenharmony_ci .card = CX23885_BOARD_GOTVIEW_X5_3D_HYBRID, 10708c2ecf20Sopenharmony_ci }, { 10718c2ecf20Sopenharmony_ci .subvendor = 0x1b55, 10728c2ecf20Sopenharmony_ci .subdevice = 0xe2e4, 10738c2ecf20Sopenharmony_ci .card = CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF, 10748c2ecf20Sopenharmony_ci }, { 10758c2ecf20Sopenharmony_ci .subvendor = 0x14f1, 10768c2ecf20Sopenharmony_ci .subdevice = 0x8502, 10778c2ecf20Sopenharmony_ci .card = CX23885_BOARD_MYGICA_X8507, 10788c2ecf20Sopenharmony_ci }, { 10798c2ecf20Sopenharmony_ci .subvendor = 0x153b, 10808c2ecf20Sopenharmony_ci .subdevice = 0x117e, 10818c2ecf20Sopenharmony_ci .card = CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL, 10828c2ecf20Sopenharmony_ci }, { 10838c2ecf20Sopenharmony_ci .subvendor = 0xd471, 10848c2ecf20Sopenharmony_ci .subdevice = 0x9022, 10858c2ecf20Sopenharmony_ci .card = CX23885_BOARD_TEVII_S471, 10868c2ecf20Sopenharmony_ci }, { 10878c2ecf20Sopenharmony_ci .subvendor = 0x8000, 10888c2ecf20Sopenharmony_ci .subdevice = 0x3034, 10898c2ecf20Sopenharmony_ci .card = CX23885_BOARD_PROF_8000, 10908c2ecf20Sopenharmony_ci }, { 10918c2ecf20Sopenharmony_ci .subvendor = 0x0070, 10928c2ecf20Sopenharmony_ci .subdevice = 0xc108, 10938c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR4400, /* Hauppauge WinTV HVR-4400 (Model 121xxx, Hybrid DVB-T/S2, IR) */ 10948c2ecf20Sopenharmony_ci }, { 10958c2ecf20Sopenharmony_ci .subvendor = 0x0070, 10968c2ecf20Sopenharmony_ci .subdevice = 0xc138, 10978c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR4400, /* Hauppauge WinTV HVR-5500 (Model 121xxx, Hybrid DVB-T/C/S2, IR) */ 10988c2ecf20Sopenharmony_ci }, { 10998c2ecf20Sopenharmony_ci .subvendor = 0x0070, 11008c2ecf20Sopenharmony_ci .subdevice = 0xc12a, 11018c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_STARBURST, /* Hauppauge WinTV Starburst (Model 121x00, DVB-S2, IR) */ 11028c2ecf20Sopenharmony_ci }, { 11038c2ecf20Sopenharmony_ci .subvendor = 0x0070, 11048c2ecf20Sopenharmony_ci .subdevice = 0xc1f8, 11058c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR4400, /* Hauppauge WinTV HVR-5500 (Model 121xxx, Hybrid DVB-T/C/S2, IR) */ 11068c2ecf20Sopenharmony_ci }, { 11078c2ecf20Sopenharmony_ci .subvendor = 0x1461, 11088c2ecf20Sopenharmony_ci .subdevice = 0xd939, 11098c2ecf20Sopenharmony_ci .card = CX23885_BOARD_AVERMEDIA_HC81R, 11108c2ecf20Sopenharmony_ci }, { 11118c2ecf20Sopenharmony_ci .subvendor = 0x0070, 11128c2ecf20Sopenharmony_ci .subdevice = 0x7133, 11138c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_IMPACTVCBE, 11148c2ecf20Sopenharmony_ci }, { 11158c2ecf20Sopenharmony_ci .subvendor = 0x0070, 11168c2ecf20Sopenharmony_ci .subdevice = 0x7137, 11178c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_IMPACTVCBE, 11188c2ecf20Sopenharmony_ci }, { 11198c2ecf20Sopenharmony_ci .subvendor = 0x18ac, 11208c2ecf20Sopenharmony_ci .subdevice = 0xdb98, 11218c2ecf20Sopenharmony_ci .card = CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP2, 11228c2ecf20Sopenharmony_ci }, { 11238c2ecf20Sopenharmony_ci .subvendor = 0x4254, 11248c2ecf20Sopenharmony_ci .subdevice = 0x9580, 11258c2ecf20Sopenharmony_ci .card = CX23885_BOARD_DVBSKY_T9580, 11268c2ecf20Sopenharmony_ci }, { 11278c2ecf20Sopenharmony_ci .subvendor = 0x4254, 11288c2ecf20Sopenharmony_ci .subdevice = 0x980c, 11298c2ecf20Sopenharmony_ci .card = CX23885_BOARD_DVBSKY_T980C, 11308c2ecf20Sopenharmony_ci }, { 11318c2ecf20Sopenharmony_ci .subvendor = 0x4254, 11328c2ecf20Sopenharmony_ci .subdevice = 0x950c, 11338c2ecf20Sopenharmony_ci .card = CX23885_BOARD_DVBSKY_S950C, 11348c2ecf20Sopenharmony_ci }, { 11358c2ecf20Sopenharmony_ci .subvendor = 0x13c2, 11368c2ecf20Sopenharmony_ci .subdevice = 0x3013, 11378c2ecf20Sopenharmony_ci .card = CX23885_BOARD_TT_CT2_4500_CI, 11388c2ecf20Sopenharmony_ci }, { 11398c2ecf20Sopenharmony_ci .subvendor = 0x4254, 11408c2ecf20Sopenharmony_ci .subdevice = 0x0950, 11418c2ecf20Sopenharmony_ci .card = CX23885_BOARD_DVBSKY_S950, 11428c2ecf20Sopenharmony_ci }, { 11438c2ecf20Sopenharmony_ci .subvendor = 0x4254, 11448c2ecf20Sopenharmony_ci .subdevice = 0x0952, 11458c2ecf20Sopenharmony_ci .card = CX23885_BOARD_DVBSKY_S952, 11468c2ecf20Sopenharmony_ci }, { 11478c2ecf20Sopenharmony_ci .subvendor = 0x4254, 11488c2ecf20Sopenharmony_ci .subdevice = 0x0982, 11498c2ecf20Sopenharmony_ci .card = CX23885_BOARD_DVBSKY_T982, 11508c2ecf20Sopenharmony_ci }, { 11518c2ecf20Sopenharmony_ci .subvendor = 0x0070, 11528c2ecf20Sopenharmony_ci .subdevice = 0xf038, 11538c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR5525, 11548c2ecf20Sopenharmony_ci }, { 11558c2ecf20Sopenharmony_ci .subvendor = 0x1576, 11568c2ecf20Sopenharmony_ci .subdevice = 0x0260, 11578c2ecf20Sopenharmony_ci .card = CX23885_BOARD_VIEWCAST_260E, 11588c2ecf20Sopenharmony_ci }, { 11598c2ecf20Sopenharmony_ci .subvendor = 0x1576, 11608c2ecf20Sopenharmony_ci .subdevice = 0x0460, 11618c2ecf20Sopenharmony_ci .card = CX23885_BOARD_VIEWCAST_460E, 11628c2ecf20Sopenharmony_ci }, { 11638c2ecf20Sopenharmony_ci .subvendor = 0x0070, 11648c2ecf20Sopenharmony_ci .subdevice = 0x6a28, 11658c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_QUADHD_DVB, /* Tuner Pair 1 */ 11668c2ecf20Sopenharmony_ci }, { 11678c2ecf20Sopenharmony_ci .subvendor = 0x0070, 11688c2ecf20Sopenharmony_ci .subdevice = 0x6b28, 11698c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_QUADHD_DVB, /* Tuner Pair 2 */ 11708c2ecf20Sopenharmony_ci }, { 11718c2ecf20Sopenharmony_ci .subvendor = 0x0070, 11728c2ecf20Sopenharmony_ci .subdevice = 0x6a18, 11738c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC, /* Tuner Pair 1 */ 11748c2ecf20Sopenharmony_ci }, { 11758c2ecf20Sopenharmony_ci .subvendor = 0x0070, 11768c2ecf20Sopenharmony_ci .subdevice = 0x6b18, 11778c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC, /* Tuner Pair 2 */ 11788c2ecf20Sopenharmony_ci }, { 11798c2ecf20Sopenharmony_ci .subvendor = 0x0070, 11808c2ecf20Sopenharmony_ci .subdevice = 0x2a18, 11818c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_HVR1265_K4, /* Hauppauge WinTV HVR-1265 (Model 161xx1, Hybrid ATSC/QAM-B) */ 11828c2ecf20Sopenharmony_ci }, { 11838c2ecf20Sopenharmony_ci .subvendor = 0x0070, 11848c2ecf20Sopenharmony_ci .subdevice = 0xf02a, 11858c2ecf20Sopenharmony_ci .card = CX23885_BOARD_HAUPPAUGE_STARBURST2, 11868c2ecf20Sopenharmony_ci }, { 11878c2ecf20Sopenharmony_ci .subvendor = 0x1461, 11888c2ecf20Sopenharmony_ci .subdevice = 0x3100, 11898c2ecf20Sopenharmony_ci .card = CX23885_BOARD_AVERMEDIA_CE310B, 11908c2ecf20Sopenharmony_ci }, 11918c2ecf20Sopenharmony_ci}; 11928c2ecf20Sopenharmony_ciconst unsigned int cx23885_idcount = ARRAY_SIZE(cx23885_subids); 11938c2ecf20Sopenharmony_ci 11948c2ecf20Sopenharmony_civoid cx23885_card_list(struct cx23885_dev *dev) 11958c2ecf20Sopenharmony_ci{ 11968c2ecf20Sopenharmony_ci int i; 11978c2ecf20Sopenharmony_ci 11988c2ecf20Sopenharmony_ci if (0 == dev->pci->subsystem_vendor && 11998c2ecf20Sopenharmony_ci 0 == dev->pci->subsystem_device) { 12008c2ecf20Sopenharmony_ci pr_info("%s: Board has no valid PCIe Subsystem ID and can't\n" 12018c2ecf20Sopenharmony_ci "%s: be autodetected. Pass card=<n> insmod option\n" 12028c2ecf20Sopenharmony_ci "%s: to workaround that. Redirect complaints to the\n" 12038c2ecf20Sopenharmony_ci "%s: vendor of the TV card. Best regards,\n" 12048c2ecf20Sopenharmony_ci "%s: -- tux\n", 12058c2ecf20Sopenharmony_ci dev->name, dev->name, dev->name, dev->name, dev->name); 12068c2ecf20Sopenharmony_ci } else { 12078c2ecf20Sopenharmony_ci pr_info("%s: Your board isn't known (yet) to the driver.\n" 12088c2ecf20Sopenharmony_ci "%s: Try to pick one of the existing card configs via\n" 12098c2ecf20Sopenharmony_ci "%s: card=<n> insmod option. Updating to the latest\n" 12108c2ecf20Sopenharmony_ci "%s: version might help as well.\n", 12118c2ecf20Sopenharmony_ci dev->name, dev->name, dev->name, dev->name); 12128c2ecf20Sopenharmony_ci } 12138c2ecf20Sopenharmony_ci pr_info("%s: Here is a list of valid choices for the card=<n> insmod option:\n", 12148c2ecf20Sopenharmony_ci dev->name); 12158c2ecf20Sopenharmony_ci for (i = 0; i < cx23885_bcount; i++) 12168c2ecf20Sopenharmony_ci pr_info("%s: card=%d -> %s\n", 12178c2ecf20Sopenharmony_ci dev->name, i, cx23885_boards[i].name); 12188c2ecf20Sopenharmony_ci} 12198c2ecf20Sopenharmony_ci 12208c2ecf20Sopenharmony_cistatic void viewcast_eeprom(struct cx23885_dev *dev, u8 *eeprom_data) 12218c2ecf20Sopenharmony_ci{ 12228c2ecf20Sopenharmony_ci u32 sn; 12238c2ecf20Sopenharmony_ci 12248c2ecf20Sopenharmony_ci /* The serial number record begins with tag 0x59 */ 12258c2ecf20Sopenharmony_ci if (*(eeprom_data + 0x00) != 0x59) { 12268c2ecf20Sopenharmony_ci pr_info("%s() eeprom records are undefined, no serial number\n", 12278c2ecf20Sopenharmony_ci __func__); 12288c2ecf20Sopenharmony_ci return; 12298c2ecf20Sopenharmony_ci } 12308c2ecf20Sopenharmony_ci 12318c2ecf20Sopenharmony_ci sn = (*(eeprom_data + 0x06) << 24) | 12328c2ecf20Sopenharmony_ci (*(eeprom_data + 0x05) << 16) | 12338c2ecf20Sopenharmony_ci (*(eeprom_data + 0x04) << 8) | 12348c2ecf20Sopenharmony_ci (*(eeprom_data + 0x03)); 12358c2ecf20Sopenharmony_ci 12368c2ecf20Sopenharmony_ci pr_info("%s: card '%s' sn# MM%d\n", 12378c2ecf20Sopenharmony_ci dev->name, 12388c2ecf20Sopenharmony_ci cx23885_boards[dev->board].name, 12398c2ecf20Sopenharmony_ci sn); 12408c2ecf20Sopenharmony_ci} 12418c2ecf20Sopenharmony_ci 12428c2ecf20Sopenharmony_cistatic void hauppauge_eeprom(struct cx23885_dev *dev, u8 *eeprom_data) 12438c2ecf20Sopenharmony_ci{ 12448c2ecf20Sopenharmony_ci struct tveeprom tv; 12458c2ecf20Sopenharmony_ci 12468c2ecf20Sopenharmony_ci tveeprom_hauppauge_analog(&tv, eeprom_data); 12478c2ecf20Sopenharmony_ci 12488c2ecf20Sopenharmony_ci /* Make sure we support the board model */ 12498c2ecf20Sopenharmony_ci switch (tv.model) { 12508c2ecf20Sopenharmony_ci case 22001: 12518c2ecf20Sopenharmony_ci /* WinTV-HVR1270 (PCIe, Retail, half height) 12528c2ecf20Sopenharmony_ci * ATSC/QAM and basic analog, IR Blast */ 12538c2ecf20Sopenharmony_ci case 22009: 12548c2ecf20Sopenharmony_ci /* WinTV-HVR1210 (PCIe, Retail, half height) 12558c2ecf20Sopenharmony_ci * DVB-T and basic analog, IR Blast */ 12568c2ecf20Sopenharmony_ci case 22011: 12578c2ecf20Sopenharmony_ci /* WinTV-HVR1270 (PCIe, Retail, half height) 12588c2ecf20Sopenharmony_ci * ATSC/QAM and basic analog, IR Recv */ 12598c2ecf20Sopenharmony_ci case 22019: 12608c2ecf20Sopenharmony_ci /* WinTV-HVR1210 (PCIe, Retail, half height) 12618c2ecf20Sopenharmony_ci * DVB-T and basic analog, IR Recv */ 12628c2ecf20Sopenharmony_ci case 22021: 12638c2ecf20Sopenharmony_ci /* WinTV-HVR1275 (PCIe, Retail, half height) 12648c2ecf20Sopenharmony_ci * ATSC/QAM and basic analog, IR Recv */ 12658c2ecf20Sopenharmony_ci case 22029: 12668c2ecf20Sopenharmony_ci /* WinTV-HVR1210 (PCIe, Retail, half height) 12678c2ecf20Sopenharmony_ci * DVB-T and basic analog, IR Recv */ 12688c2ecf20Sopenharmony_ci case 22101: 12698c2ecf20Sopenharmony_ci /* WinTV-HVR1270 (PCIe, Retail, full height) 12708c2ecf20Sopenharmony_ci * ATSC/QAM and basic analog, IR Blast */ 12718c2ecf20Sopenharmony_ci case 22109: 12728c2ecf20Sopenharmony_ci /* WinTV-HVR1210 (PCIe, Retail, full height) 12738c2ecf20Sopenharmony_ci * DVB-T and basic analog, IR Blast */ 12748c2ecf20Sopenharmony_ci case 22111: 12758c2ecf20Sopenharmony_ci /* WinTV-HVR1270 (PCIe, Retail, full height) 12768c2ecf20Sopenharmony_ci * ATSC/QAM and basic analog, IR Recv */ 12778c2ecf20Sopenharmony_ci case 22119: 12788c2ecf20Sopenharmony_ci /* WinTV-HVR1210 (PCIe, Retail, full height) 12798c2ecf20Sopenharmony_ci * DVB-T and basic analog, IR Recv */ 12808c2ecf20Sopenharmony_ci case 22121: 12818c2ecf20Sopenharmony_ci /* WinTV-HVR1275 (PCIe, Retail, full height) 12828c2ecf20Sopenharmony_ci * ATSC/QAM and basic analog, IR Recv */ 12838c2ecf20Sopenharmony_ci case 22129: 12848c2ecf20Sopenharmony_ci /* WinTV-HVR1210 (PCIe, Retail, full height) 12858c2ecf20Sopenharmony_ci * DVB-T and basic analog, IR Recv */ 12868c2ecf20Sopenharmony_ci case 71009: 12878c2ecf20Sopenharmony_ci /* WinTV-HVR1200 (PCIe, Retail, full height) 12888c2ecf20Sopenharmony_ci * DVB-T and basic analog */ 12898c2ecf20Sopenharmony_ci case 71100: 12908c2ecf20Sopenharmony_ci /* WinTV-ImpactVCB-e (PCIe, Retail, half height) 12918c2ecf20Sopenharmony_ci * Basic analog */ 12928c2ecf20Sopenharmony_ci case 71359: 12938c2ecf20Sopenharmony_ci /* WinTV-HVR1200 (PCIe, OEM, half height) 12948c2ecf20Sopenharmony_ci * DVB-T and basic analog */ 12958c2ecf20Sopenharmony_ci case 71439: 12968c2ecf20Sopenharmony_ci /* WinTV-HVR1200 (PCIe, OEM, half height) 12978c2ecf20Sopenharmony_ci * DVB-T and basic analog */ 12988c2ecf20Sopenharmony_ci case 71449: 12998c2ecf20Sopenharmony_ci /* WinTV-HVR1200 (PCIe, OEM, full height) 13008c2ecf20Sopenharmony_ci * DVB-T and basic analog */ 13018c2ecf20Sopenharmony_ci case 71939: 13028c2ecf20Sopenharmony_ci /* WinTV-HVR1200 (PCIe, OEM, half height) 13038c2ecf20Sopenharmony_ci * DVB-T and basic analog */ 13048c2ecf20Sopenharmony_ci case 71949: 13058c2ecf20Sopenharmony_ci /* WinTV-HVR1200 (PCIe, OEM, full height) 13068c2ecf20Sopenharmony_ci * DVB-T and basic analog */ 13078c2ecf20Sopenharmony_ci case 71959: 13088c2ecf20Sopenharmony_ci /* WinTV-HVR1200 (PCIe, OEM, full height) 13098c2ecf20Sopenharmony_ci * DVB-T and basic analog */ 13108c2ecf20Sopenharmony_ci case 71979: 13118c2ecf20Sopenharmony_ci /* WinTV-HVR1200 (PCIe, OEM, half height) 13128c2ecf20Sopenharmony_ci * DVB-T and basic analog */ 13138c2ecf20Sopenharmony_ci case 71999: 13148c2ecf20Sopenharmony_ci /* WinTV-HVR1200 (PCIe, OEM, full height) 13158c2ecf20Sopenharmony_ci * DVB-T and basic analog */ 13168c2ecf20Sopenharmony_ci case 76601: 13178c2ecf20Sopenharmony_ci /* WinTV-HVR1800lp (PCIe, Retail, No IR, Dual 13188c2ecf20Sopenharmony_ci channel ATSC and MPEG2 HW Encoder */ 13198c2ecf20Sopenharmony_ci case 77001: 13208c2ecf20Sopenharmony_ci /* WinTV-HVR1500 (Express Card, OEM, No IR, ATSC 13218c2ecf20Sopenharmony_ci and Basic analog */ 13228c2ecf20Sopenharmony_ci case 77011: 13238c2ecf20Sopenharmony_ci /* WinTV-HVR1500 (Express Card, Retail, No IR, ATSC 13248c2ecf20Sopenharmony_ci and Basic analog */ 13258c2ecf20Sopenharmony_ci case 77041: 13268c2ecf20Sopenharmony_ci /* WinTV-HVR1500Q (Express Card, OEM, No IR, ATSC/QAM 13278c2ecf20Sopenharmony_ci and Basic analog */ 13288c2ecf20Sopenharmony_ci case 77051: 13298c2ecf20Sopenharmony_ci /* WinTV-HVR1500Q (Express Card, Retail, No IR, ATSC/QAM 13308c2ecf20Sopenharmony_ci and Basic analog */ 13318c2ecf20Sopenharmony_ci case 78011: 13328c2ecf20Sopenharmony_ci /* WinTV-HVR1800 (PCIe, Retail, 3.5mm in, IR, No FM, 13338c2ecf20Sopenharmony_ci Dual channel ATSC and MPEG2 HW Encoder */ 13348c2ecf20Sopenharmony_ci case 78501: 13358c2ecf20Sopenharmony_ci /* WinTV-HVR1800 (PCIe, OEM, RCA in, No IR, FM, 13368c2ecf20Sopenharmony_ci Dual channel ATSC and MPEG2 HW Encoder */ 13378c2ecf20Sopenharmony_ci case 78521: 13388c2ecf20Sopenharmony_ci /* WinTV-HVR1800 (PCIe, OEM, RCA in, No IR, FM, 13398c2ecf20Sopenharmony_ci Dual channel ATSC and MPEG2 HW Encoder */ 13408c2ecf20Sopenharmony_ci case 78531: 13418c2ecf20Sopenharmony_ci /* WinTV-HVR1800 (PCIe, OEM, RCA in, No IR, No FM, 13428c2ecf20Sopenharmony_ci Dual channel ATSC and MPEG2 HW Encoder */ 13438c2ecf20Sopenharmony_ci case 78631: 13448c2ecf20Sopenharmony_ci /* WinTV-HVR1800 (PCIe, OEM, No IR, No FM, 13458c2ecf20Sopenharmony_ci Dual channel ATSC and MPEG2 HW Encoder */ 13468c2ecf20Sopenharmony_ci case 79001: 13478c2ecf20Sopenharmony_ci /* WinTV-HVR1250 (PCIe, Retail, IR, full height, 13488c2ecf20Sopenharmony_ci ATSC and Basic analog */ 13498c2ecf20Sopenharmony_ci case 79101: 13508c2ecf20Sopenharmony_ci /* WinTV-HVR1250 (PCIe, Retail, IR, half height, 13518c2ecf20Sopenharmony_ci ATSC and Basic analog */ 13528c2ecf20Sopenharmony_ci case 79501: 13538c2ecf20Sopenharmony_ci /* WinTV-HVR1250 (PCIe, No IR, half height, 13548c2ecf20Sopenharmony_ci ATSC [at least] and Basic analog) */ 13558c2ecf20Sopenharmony_ci case 79561: 13568c2ecf20Sopenharmony_ci /* WinTV-HVR1250 (PCIe, OEM, No IR, half height, 13578c2ecf20Sopenharmony_ci ATSC and Basic analog */ 13588c2ecf20Sopenharmony_ci case 79571: 13598c2ecf20Sopenharmony_ci /* WinTV-HVR1250 (PCIe, OEM, No IR, full height, 13608c2ecf20Sopenharmony_ci ATSC and Basic analog */ 13618c2ecf20Sopenharmony_ci case 79671: 13628c2ecf20Sopenharmony_ci /* WinTV-HVR1250 (PCIe, OEM, No IR, half height, 13638c2ecf20Sopenharmony_ci ATSC and Basic analog */ 13648c2ecf20Sopenharmony_ci case 80019: 13658c2ecf20Sopenharmony_ci /* WinTV-HVR1400 (Express Card, Retail, IR, 13668c2ecf20Sopenharmony_ci * DVB-T and Basic analog */ 13678c2ecf20Sopenharmony_ci case 81509: 13688c2ecf20Sopenharmony_ci /* WinTV-HVR1700 (PCIe, OEM, No IR, half height) 13698c2ecf20Sopenharmony_ci * DVB-T and MPEG2 HW Encoder */ 13708c2ecf20Sopenharmony_ci case 81519: 13718c2ecf20Sopenharmony_ci /* WinTV-HVR1700 (PCIe, OEM, No IR, full height) 13728c2ecf20Sopenharmony_ci * DVB-T and MPEG2 HW Encoder */ 13738c2ecf20Sopenharmony_ci break; 13748c2ecf20Sopenharmony_ci case 85021: 13758c2ecf20Sopenharmony_ci /* WinTV-HVR1850 (PCIe, Retail, 3.5mm in, IR, FM, 13768c2ecf20Sopenharmony_ci Dual channel ATSC and MPEG2 HW Encoder */ 13778c2ecf20Sopenharmony_ci break; 13788c2ecf20Sopenharmony_ci case 85721: 13798c2ecf20Sopenharmony_ci /* WinTV-HVR1290 (PCIe, OEM, RCA in, IR, 13808c2ecf20Sopenharmony_ci Dual channel ATSC and Basic analog */ 13818c2ecf20Sopenharmony_ci case 121019: 13828c2ecf20Sopenharmony_ci /* WinTV-HVR4400 (PCIe, DVB-S2, DVB-C/T) */ 13838c2ecf20Sopenharmony_ci break; 13848c2ecf20Sopenharmony_ci case 121029: 13858c2ecf20Sopenharmony_ci /* WinTV-HVR5500 (PCIe, DVB-S2, DVB-C/T) */ 13868c2ecf20Sopenharmony_ci break; 13878c2ecf20Sopenharmony_ci case 150329: 13888c2ecf20Sopenharmony_ci /* WinTV-HVR5525 (PCIe, DVB-S/S2, DVB-T/T2/C) */ 13898c2ecf20Sopenharmony_ci break; 13908c2ecf20Sopenharmony_ci case 161111: 13918c2ecf20Sopenharmony_ci /* WinTV-HVR-1265 K4 (PCIe, Analog/ATSC/QAM-B) */ 13928c2ecf20Sopenharmony_ci break; 13938c2ecf20Sopenharmony_ci case 166100: /* 888 version, hybrid */ 13948c2ecf20Sopenharmony_ci case 166200: /* 885 version, DVB only */ 13958c2ecf20Sopenharmony_ci /* WinTV-QuadHD (DVB) Tuner Pair 1 (PCIe, IR, half height, 13968c2ecf20Sopenharmony_ci DVB-T/T2/C, DVB-T/T2/C */ 13978c2ecf20Sopenharmony_ci break; 13988c2ecf20Sopenharmony_ci case 166101: /* 888 version, hybrid */ 13998c2ecf20Sopenharmony_ci case 166201: /* 885 version, DVB only */ 14008c2ecf20Sopenharmony_ci /* WinTV-QuadHD (DVB) Tuner Pair 2 (PCIe, IR, half height, 14018c2ecf20Sopenharmony_ci DVB-T/T2/C, DVB-T/T2/C */ 14028c2ecf20Sopenharmony_ci break; 14038c2ecf20Sopenharmony_ci case 165100: /* 888 version, hybrid */ 14048c2ecf20Sopenharmony_ci case 165200: /* 885 version, digital only */ 14058c2ecf20Sopenharmony_ci /* WinTV-QuadHD (ATSC) Tuner Pair 1 (PCIe, IR, half height, 14068c2ecf20Sopenharmony_ci * ATSC/QAM-B, ATSC/QAM-B */ 14078c2ecf20Sopenharmony_ci break; 14088c2ecf20Sopenharmony_ci case 165101: /* 888 version, hybrid */ 14098c2ecf20Sopenharmony_ci case 165201: /* 885 version, digital only */ 14108c2ecf20Sopenharmony_ci /* WinTV-QuadHD (ATSC) Tuner Pair 2 (PCIe, IR, half height, 14118c2ecf20Sopenharmony_ci * ATSC/QAM-B, ATSC/QAM-B */ 14128c2ecf20Sopenharmony_ci break; 14138c2ecf20Sopenharmony_ci default: 14148c2ecf20Sopenharmony_ci pr_warn("%s: warning: unknown hauppauge model #%d\n", 14158c2ecf20Sopenharmony_ci dev->name, tv.model); 14168c2ecf20Sopenharmony_ci break; 14178c2ecf20Sopenharmony_ci } 14188c2ecf20Sopenharmony_ci 14198c2ecf20Sopenharmony_ci pr_info("%s: hauppauge eeprom: model=%d\n", 14208c2ecf20Sopenharmony_ci dev->name, tv.model); 14218c2ecf20Sopenharmony_ci} 14228c2ecf20Sopenharmony_ci 14238c2ecf20Sopenharmony_ci/* Some TBS cards require initing a chip using a bitbanged SPI attached 14248c2ecf20Sopenharmony_ci to the cx23885 gpio's. If this chip doesn't get init'ed the demod 14258c2ecf20Sopenharmony_ci doesn't respond to any command. */ 14268c2ecf20Sopenharmony_cistatic void tbs_card_init(struct cx23885_dev *dev) 14278c2ecf20Sopenharmony_ci{ 14288c2ecf20Sopenharmony_ci int i; 14298c2ecf20Sopenharmony_ci static const u8 buf[] = { 14308c2ecf20Sopenharmony_ci 0xe0, 0x06, 0x66, 0x33, 0x65, 14318c2ecf20Sopenharmony_ci 0x01, 0x17, 0x06, 0xde}; 14328c2ecf20Sopenharmony_ci 14338c2ecf20Sopenharmony_ci switch (dev->board) { 14348c2ecf20Sopenharmony_ci case CX23885_BOARD_TBS_6980: 14358c2ecf20Sopenharmony_ci case CX23885_BOARD_TBS_6981: 14368c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00070007); 14378c2ecf20Sopenharmony_ci usleep_range(1000, 10000); 14388c2ecf20Sopenharmony_ci cx_clear(GP0_IO, 2); 14398c2ecf20Sopenharmony_ci usleep_range(1000, 10000); 14408c2ecf20Sopenharmony_ci for (i = 0; i < 9 * 8; i++) { 14418c2ecf20Sopenharmony_ci cx_clear(GP0_IO, 7); 14428c2ecf20Sopenharmony_ci usleep_range(1000, 10000); 14438c2ecf20Sopenharmony_ci cx_set(GP0_IO, 14448c2ecf20Sopenharmony_ci ((buf[i >> 3] >> (7 - (i & 7))) & 1) | 4); 14458c2ecf20Sopenharmony_ci usleep_range(1000, 10000); 14468c2ecf20Sopenharmony_ci } 14478c2ecf20Sopenharmony_ci cx_set(GP0_IO, 7); 14488c2ecf20Sopenharmony_ci break; 14498c2ecf20Sopenharmony_ci } 14508c2ecf20Sopenharmony_ci} 14518c2ecf20Sopenharmony_ci 14528c2ecf20Sopenharmony_ciint cx23885_tuner_callback(void *priv, int component, int command, int arg) 14538c2ecf20Sopenharmony_ci{ 14548c2ecf20Sopenharmony_ci struct cx23885_tsport *port = priv; 14558c2ecf20Sopenharmony_ci struct cx23885_dev *dev = port->dev; 14568c2ecf20Sopenharmony_ci u32 bitmask = 0; 14578c2ecf20Sopenharmony_ci 14588c2ecf20Sopenharmony_ci if ((command == XC2028_RESET_CLK) || (command == XC2028_I2C_FLUSH)) 14598c2ecf20Sopenharmony_ci return 0; 14608c2ecf20Sopenharmony_ci 14618c2ecf20Sopenharmony_ci if (command != 0) { 14628c2ecf20Sopenharmony_ci pr_err("%s(): Unknown command 0x%x.\n", 14638c2ecf20Sopenharmony_ci __func__, command); 14648c2ecf20Sopenharmony_ci return -EINVAL; 14658c2ecf20Sopenharmony_ci } 14668c2ecf20Sopenharmony_ci 14678c2ecf20Sopenharmony_ci switch (dev->board) { 14688c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1400: 14698c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1500: 14708c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1500Q: 14718c2ecf20Sopenharmony_ci case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H: 14728c2ecf20Sopenharmony_ci case CX23885_BOARD_LEADTEK_WINFAST_PXPVR2200: 14738c2ecf20Sopenharmony_ci case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H_XC4000: 14748c2ecf20Sopenharmony_ci case CX23885_BOARD_COMPRO_VIDEOMATE_E650F: 14758c2ecf20Sopenharmony_ci case CX23885_BOARD_COMPRO_VIDEOMATE_E800: 14768c2ecf20Sopenharmony_ci case CX23885_BOARD_LEADTEK_WINFAST_PXTV1200: 14778c2ecf20Sopenharmony_ci /* Tuner Reset Command */ 14788c2ecf20Sopenharmony_ci bitmask = 0x04; 14798c2ecf20Sopenharmony_ci break; 14808c2ecf20Sopenharmony_ci case CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP: 14818c2ecf20Sopenharmony_ci case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP: 14828c2ecf20Sopenharmony_ci case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP2: 14838c2ecf20Sopenharmony_ci /* Two identical tuners on two different i2c buses, 14848c2ecf20Sopenharmony_ci * we need to reset the correct gpio. */ 14858c2ecf20Sopenharmony_ci if (port->nr == 1) 14868c2ecf20Sopenharmony_ci bitmask = 0x01; 14878c2ecf20Sopenharmony_ci else if (port->nr == 2) 14888c2ecf20Sopenharmony_ci bitmask = 0x04; 14898c2ecf20Sopenharmony_ci break; 14908c2ecf20Sopenharmony_ci case CX23885_BOARD_GOTVIEW_X5_3D_HYBRID: 14918c2ecf20Sopenharmony_ci /* Tuner Reset Command */ 14928c2ecf20Sopenharmony_ci bitmask = 0x02; 14938c2ecf20Sopenharmony_ci break; 14948c2ecf20Sopenharmony_ci case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF: 14958c2ecf20Sopenharmony_ci altera_ci_tuner_reset(dev, port->nr); 14968c2ecf20Sopenharmony_ci break; 14978c2ecf20Sopenharmony_ci case CX23885_BOARD_AVERMEDIA_HC81R: 14988c2ecf20Sopenharmony_ci /* XC3028L Reset Command */ 14998c2ecf20Sopenharmony_ci bitmask = 1 << 2; 15008c2ecf20Sopenharmony_ci break; 15018c2ecf20Sopenharmony_ci } 15028c2ecf20Sopenharmony_ci 15038c2ecf20Sopenharmony_ci if (bitmask) { 15048c2ecf20Sopenharmony_ci /* Drive the tuner into reset and back out */ 15058c2ecf20Sopenharmony_ci cx_clear(GP0_IO, bitmask); 15068c2ecf20Sopenharmony_ci mdelay(200); 15078c2ecf20Sopenharmony_ci cx_set(GP0_IO, bitmask); 15088c2ecf20Sopenharmony_ci } 15098c2ecf20Sopenharmony_ci 15108c2ecf20Sopenharmony_ci return 0; 15118c2ecf20Sopenharmony_ci} 15128c2ecf20Sopenharmony_ci 15138c2ecf20Sopenharmony_civoid cx23885_gpio_setup(struct cx23885_dev *dev) 15148c2ecf20Sopenharmony_ci{ 15158c2ecf20Sopenharmony_ci switch (dev->board) { 15168c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1250: 15178c2ecf20Sopenharmony_ci /* GPIO-0 cx24227 demodulator reset */ 15188c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00010001); /* Bring the part out of reset */ 15198c2ecf20Sopenharmony_ci break; 15208c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1500: 15218c2ecf20Sopenharmony_ci /* GPIO-0 cx24227 demodulator */ 15228c2ecf20Sopenharmony_ci /* GPIO-2 xc3028 tuner */ 15238c2ecf20Sopenharmony_ci 15248c2ecf20Sopenharmony_ci /* Put the parts into reset */ 15258c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00050000); 15268c2ecf20Sopenharmony_ci cx_clear(GP0_IO, 0x00000005); 15278c2ecf20Sopenharmony_ci msleep(5); 15288c2ecf20Sopenharmony_ci 15298c2ecf20Sopenharmony_ci /* Bring the parts out of reset */ 15308c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00050005); 15318c2ecf20Sopenharmony_ci break; 15328c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1500Q: 15338c2ecf20Sopenharmony_ci /* GPIO-0 cx24227 demodulator reset */ 15348c2ecf20Sopenharmony_ci /* GPIO-2 xc5000 tuner reset */ 15358c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00050005); /* Bring the part out of reset */ 15368c2ecf20Sopenharmony_ci break; 15378c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1800: 15388c2ecf20Sopenharmony_ci /* GPIO-0 656_CLK */ 15398c2ecf20Sopenharmony_ci /* GPIO-1 656_D0 */ 15408c2ecf20Sopenharmony_ci /* GPIO-2 8295A Reset */ 15418c2ecf20Sopenharmony_ci /* GPIO-3-10 cx23417 data0-7 */ 15428c2ecf20Sopenharmony_ci /* GPIO-11-14 cx23417 addr0-3 */ 15438c2ecf20Sopenharmony_ci /* GPIO-15-18 cx23417 READY, CS, RD, WR */ 15448c2ecf20Sopenharmony_ci /* GPIO-19 IR_RX */ 15458c2ecf20Sopenharmony_ci 15468c2ecf20Sopenharmony_ci /* CX23417 GPIO's */ 15478c2ecf20Sopenharmony_ci /* EIO15 Zilog Reset */ 15488c2ecf20Sopenharmony_ci /* EIO14 S5H1409/CX24227 Reset */ 15498c2ecf20Sopenharmony_ci mc417_gpio_enable(dev, GPIO_15 | GPIO_14, 1); 15508c2ecf20Sopenharmony_ci 15518c2ecf20Sopenharmony_ci /* Put the demod into reset and protect the eeprom */ 15528c2ecf20Sopenharmony_ci mc417_gpio_clear(dev, GPIO_15 | GPIO_14); 15538c2ecf20Sopenharmony_ci msleep(100); 15548c2ecf20Sopenharmony_ci 15558c2ecf20Sopenharmony_ci /* Bring the demod and blaster out of reset */ 15568c2ecf20Sopenharmony_ci mc417_gpio_set(dev, GPIO_15 | GPIO_14); 15578c2ecf20Sopenharmony_ci msleep(100); 15588c2ecf20Sopenharmony_ci 15598c2ecf20Sopenharmony_ci /* Force the TDA8295A into reset and back */ 15608c2ecf20Sopenharmony_ci cx23885_gpio_enable(dev, GPIO_2, 1); 15618c2ecf20Sopenharmony_ci cx23885_gpio_set(dev, GPIO_2); 15628c2ecf20Sopenharmony_ci msleep(20); 15638c2ecf20Sopenharmony_ci cx23885_gpio_clear(dev, GPIO_2); 15648c2ecf20Sopenharmony_ci msleep(20); 15658c2ecf20Sopenharmony_ci cx23885_gpio_set(dev, GPIO_2); 15668c2ecf20Sopenharmony_ci msleep(20); 15678c2ecf20Sopenharmony_ci break; 15688c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1200: 15698c2ecf20Sopenharmony_ci /* GPIO-0 tda10048 demodulator reset */ 15708c2ecf20Sopenharmony_ci /* GPIO-2 tda18271 tuner reset */ 15718c2ecf20Sopenharmony_ci 15728c2ecf20Sopenharmony_ci /* Put the parts into reset and back */ 15738c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00050000); 15748c2ecf20Sopenharmony_ci msleep(20); 15758c2ecf20Sopenharmony_ci cx_clear(GP0_IO, 0x00000005); 15768c2ecf20Sopenharmony_ci msleep(20); 15778c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00050005); 15788c2ecf20Sopenharmony_ci break; 15798c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1700: 15808c2ecf20Sopenharmony_ci /* GPIO-0 TDA10048 demodulator reset */ 15818c2ecf20Sopenharmony_ci /* GPIO-2 TDA8295A Reset */ 15828c2ecf20Sopenharmony_ci /* GPIO-3-10 cx23417 data0-7 */ 15838c2ecf20Sopenharmony_ci /* GPIO-11-14 cx23417 addr0-3 */ 15848c2ecf20Sopenharmony_ci /* GPIO-15-18 cx23417 READY, CS, RD, WR */ 15858c2ecf20Sopenharmony_ci 15868c2ecf20Sopenharmony_ci /* The following GPIO's are on the interna AVCore (cx25840) */ 15878c2ecf20Sopenharmony_ci /* GPIO-19 IR_RX */ 15888c2ecf20Sopenharmony_ci /* GPIO-20 IR_TX 416/DVBT Select */ 15898c2ecf20Sopenharmony_ci /* GPIO-21 IIS DAT */ 15908c2ecf20Sopenharmony_ci /* GPIO-22 IIS WCLK */ 15918c2ecf20Sopenharmony_ci /* GPIO-23 IIS BCLK */ 15928c2ecf20Sopenharmony_ci 15938c2ecf20Sopenharmony_ci /* Put the parts into reset and back */ 15948c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00050000); 15958c2ecf20Sopenharmony_ci msleep(20); 15968c2ecf20Sopenharmony_ci cx_clear(GP0_IO, 0x00000005); 15978c2ecf20Sopenharmony_ci msleep(20); 15988c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00050005); 15998c2ecf20Sopenharmony_ci break; 16008c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1400: 16018c2ecf20Sopenharmony_ci /* GPIO-0 Dibcom7000p demodulator reset */ 16028c2ecf20Sopenharmony_ci /* GPIO-2 xc3028L tuner reset */ 16038c2ecf20Sopenharmony_ci /* GPIO-13 LED */ 16048c2ecf20Sopenharmony_ci 16058c2ecf20Sopenharmony_ci /* Put the parts into reset and back */ 16068c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00050000); 16078c2ecf20Sopenharmony_ci msleep(20); 16088c2ecf20Sopenharmony_ci cx_clear(GP0_IO, 0x00000005); 16098c2ecf20Sopenharmony_ci msleep(20); 16108c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00050005); 16118c2ecf20Sopenharmony_ci break; 16128c2ecf20Sopenharmony_ci case CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP: 16138c2ecf20Sopenharmony_ci /* GPIO-0 xc5000 tuner reset i2c bus 0 */ 16148c2ecf20Sopenharmony_ci /* GPIO-1 s5h1409 demod reset i2c bus 0 */ 16158c2ecf20Sopenharmony_ci /* GPIO-2 xc5000 tuner reset i2c bus 1 */ 16168c2ecf20Sopenharmony_ci /* GPIO-3 s5h1409 demod reset i2c bus 0 */ 16178c2ecf20Sopenharmony_ci 16188c2ecf20Sopenharmony_ci /* Put the parts into reset and back */ 16198c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x000f0000); 16208c2ecf20Sopenharmony_ci msleep(20); 16218c2ecf20Sopenharmony_ci cx_clear(GP0_IO, 0x0000000f); 16228c2ecf20Sopenharmony_ci msleep(20); 16238c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x000f000f); 16248c2ecf20Sopenharmony_ci break; 16258c2ecf20Sopenharmony_ci case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP: 16268c2ecf20Sopenharmony_ci case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP2: 16278c2ecf20Sopenharmony_ci /* GPIO-0 portb xc3028 reset */ 16288c2ecf20Sopenharmony_ci /* GPIO-1 portb zl10353 reset */ 16298c2ecf20Sopenharmony_ci /* GPIO-2 portc xc3028 reset */ 16308c2ecf20Sopenharmony_ci /* GPIO-3 portc zl10353 reset */ 16318c2ecf20Sopenharmony_ci 16328c2ecf20Sopenharmony_ci /* Put the parts into reset and back */ 16338c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x000f0000); 16348c2ecf20Sopenharmony_ci msleep(20); 16358c2ecf20Sopenharmony_ci cx_clear(GP0_IO, 0x0000000f); 16368c2ecf20Sopenharmony_ci msleep(20); 16378c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x000f000f); 16388c2ecf20Sopenharmony_ci break; 16398c2ecf20Sopenharmony_ci case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H: 16408c2ecf20Sopenharmony_ci case CX23885_BOARD_LEADTEK_WINFAST_PXPVR2200: 16418c2ecf20Sopenharmony_ci case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H_XC4000: 16428c2ecf20Sopenharmony_ci case CX23885_BOARD_COMPRO_VIDEOMATE_E650F: 16438c2ecf20Sopenharmony_ci case CX23885_BOARD_COMPRO_VIDEOMATE_E800: 16448c2ecf20Sopenharmony_ci case CX23885_BOARD_LEADTEK_WINFAST_PXTV1200: 16458c2ecf20Sopenharmony_ci /* GPIO-2 xc3028 tuner reset */ 16468c2ecf20Sopenharmony_ci 16478c2ecf20Sopenharmony_ci /* The following GPIO's are on the internal AVCore (cx25840) */ 16488c2ecf20Sopenharmony_ci /* GPIO-? zl10353 demod reset */ 16498c2ecf20Sopenharmony_ci 16508c2ecf20Sopenharmony_ci /* Put the parts into reset and back */ 16518c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00040000); 16528c2ecf20Sopenharmony_ci msleep(20); 16538c2ecf20Sopenharmony_ci cx_clear(GP0_IO, 0x00000004); 16548c2ecf20Sopenharmony_ci msleep(20); 16558c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00040004); 16568c2ecf20Sopenharmony_ci break; 16578c2ecf20Sopenharmony_ci case CX23885_BOARD_TBS_6920: 16588c2ecf20Sopenharmony_ci case CX23885_BOARD_TBS_6980: 16598c2ecf20Sopenharmony_ci case CX23885_BOARD_TBS_6981: 16608c2ecf20Sopenharmony_ci case CX23885_BOARD_PROF_8000: 16618c2ecf20Sopenharmony_ci cx_write(MC417_CTL, 0x00000036); 16628c2ecf20Sopenharmony_ci cx_write(MC417_OEN, 0x00001000); 16638c2ecf20Sopenharmony_ci cx_set(MC417_RWD, 0x00000002); 16648c2ecf20Sopenharmony_ci msleep(200); 16658c2ecf20Sopenharmony_ci cx_clear(MC417_RWD, 0x00000800); 16668c2ecf20Sopenharmony_ci msleep(200); 16678c2ecf20Sopenharmony_ci cx_set(MC417_RWD, 0x00000800); 16688c2ecf20Sopenharmony_ci msleep(200); 16698c2ecf20Sopenharmony_ci break; 16708c2ecf20Sopenharmony_ci case CX23885_BOARD_NETUP_DUAL_DVBS2_CI: 16718c2ecf20Sopenharmony_ci /* GPIO-0 INTA from CiMax1 16728c2ecf20Sopenharmony_ci GPIO-1 INTB from CiMax2 16738c2ecf20Sopenharmony_ci GPIO-2 reset chips 16748c2ecf20Sopenharmony_ci GPIO-3 to GPIO-10 data/addr for CA 16758c2ecf20Sopenharmony_ci GPIO-11 ~CS0 to CiMax1 16768c2ecf20Sopenharmony_ci GPIO-12 ~CS1 to CiMax2 16778c2ecf20Sopenharmony_ci GPIO-13 ADL0 load LSB addr 16788c2ecf20Sopenharmony_ci GPIO-14 ADL1 load MSB addr 16798c2ecf20Sopenharmony_ci GPIO-15 ~RDY from CiMax 16808c2ecf20Sopenharmony_ci GPIO-17 ~RD to CiMax 16818c2ecf20Sopenharmony_ci GPIO-18 ~WR to CiMax 16828c2ecf20Sopenharmony_ci */ 16838c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00040000); /* GPIO as out */ 16848c2ecf20Sopenharmony_ci /* GPIO1 and GPIO2 as INTA and INTB from CiMaxes, reset low */ 16858c2ecf20Sopenharmony_ci cx_clear(GP0_IO, 0x00030004); 16868c2ecf20Sopenharmony_ci msleep(100);/* reset delay */ 16878c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00040004); /* GPIO as out, reset high */ 16888c2ecf20Sopenharmony_ci cx_write(MC417_CTL, 0x00000037);/* enable GPIO3-18 pins */ 16898c2ecf20Sopenharmony_ci /* GPIO-15 IN as ~ACK, rest as OUT */ 16908c2ecf20Sopenharmony_ci cx_write(MC417_OEN, 0x00001000); 16918c2ecf20Sopenharmony_ci /* ~RD, ~WR high; ADL0, ADL1 low; ~CS0, ~CS1 high */ 16928c2ecf20Sopenharmony_ci cx_write(MC417_RWD, 0x0000c300); 16938c2ecf20Sopenharmony_ci /* enable irq */ 16948c2ecf20Sopenharmony_ci cx_write(GPIO_ISM, 0x00000000);/* INTERRUPTS active low*/ 16958c2ecf20Sopenharmony_ci break; 16968c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1270: 16978c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1275: 16988c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1255: 16998c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1255_22111: 17008c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1210: 17018c2ecf20Sopenharmony_ci /* GPIO-5 RF Control: 0 = RF1 Terrestrial, 1 = RF2 Cable */ 17028c2ecf20Sopenharmony_ci /* GPIO-6 I2C Gate which can isolate the demod from the bus */ 17038c2ecf20Sopenharmony_ci /* GPIO-9 Demod reset */ 17048c2ecf20Sopenharmony_ci 17058c2ecf20Sopenharmony_ci /* Put the parts into reset and back */ 17068c2ecf20Sopenharmony_ci cx23885_gpio_enable(dev, GPIO_9 | GPIO_6 | GPIO_5, 1); 17078c2ecf20Sopenharmony_ci cx23885_gpio_set(dev, GPIO_9 | GPIO_6 | GPIO_5); 17088c2ecf20Sopenharmony_ci cx23885_gpio_clear(dev, GPIO_9); 17098c2ecf20Sopenharmony_ci msleep(20); 17108c2ecf20Sopenharmony_ci cx23885_gpio_set(dev, GPIO_9); 17118c2ecf20Sopenharmony_ci break; 17128c2ecf20Sopenharmony_ci case CX23885_BOARD_MYGICA_X8506: 17138c2ecf20Sopenharmony_ci case CX23885_BOARD_MAGICPRO_PROHDTVE2: 17148c2ecf20Sopenharmony_ci case CX23885_BOARD_MYGICA_X8507: 17158c2ecf20Sopenharmony_ci /* GPIO-0 (0)Analog / (1)Digital TV */ 17168c2ecf20Sopenharmony_ci /* GPIO-1 reset XC5000 */ 17178c2ecf20Sopenharmony_ci /* GPIO-2 demod reset */ 17188c2ecf20Sopenharmony_ci cx23885_gpio_enable(dev, GPIO_0 | GPIO_1 | GPIO_2, 1); 17198c2ecf20Sopenharmony_ci cx23885_gpio_clear(dev, GPIO_1 | GPIO_2); 17208c2ecf20Sopenharmony_ci msleep(100); 17218c2ecf20Sopenharmony_ci cx23885_gpio_set(dev, GPIO_0 | GPIO_1 | GPIO_2); 17228c2ecf20Sopenharmony_ci msleep(100); 17238c2ecf20Sopenharmony_ci break; 17248c2ecf20Sopenharmony_ci case CX23885_BOARD_MYGICA_X8558PRO: 17258c2ecf20Sopenharmony_ci /* GPIO-0 reset first ATBM8830 */ 17268c2ecf20Sopenharmony_ci /* GPIO-1 reset second ATBM8830 */ 17278c2ecf20Sopenharmony_ci cx23885_gpio_enable(dev, GPIO_0 | GPIO_1, 1); 17288c2ecf20Sopenharmony_ci cx23885_gpio_clear(dev, GPIO_0 | GPIO_1); 17298c2ecf20Sopenharmony_ci msleep(100); 17308c2ecf20Sopenharmony_ci cx23885_gpio_set(dev, GPIO_0 | GPIO_1); 17318c2ecf20Sopenharmony_ci msleep(100); 17328c2ecf20Sopenharmony_ci break; 17338c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1850: 17348c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1290: 17358c2ecf20Sopenharmony_ci /* GPIO-0 656_CLK */ 17368c2ecf20Sopenharmony_ci /* GPIO-1 656_D0 */ 17378c2ecf20Sopenharmony_ci /* GPIO-2 Wake# */ 17388c2ecf20Sopenharmony_ci /* GPIO-3-10 cx23417 data0-7 */ 17398c2ecf20Sopenharmony_ci /* GPIO-11-14 cx23417 addr0-3 */ 17408c2ecf20Sopenharmony_ci /* GPIO-15-18 cx23417 READY, CS, RD, WR */ 17418c2ecf20Sopenharmony_ci /* GPIO-19 IR_RX */ 17428c2ecf20Sopenharmony_ci /* GPIO-20 C_IR_TX */ 17438c2ecf20Sopenharmony_ci /* GPIO-21 I2S DAT */ 17448c2ecf20Sopenharmony_ci /* GPIO-22 I2S WCLK */ 17458c2ecf20Sopenharmony_ci /* GPIO-23 I2S BCLK */ 17468c2ecf20Sopenharmony_ci /* ALT GPIO: EXP GPIO LATCH */ 17478c2ecf20Sopenharmony_ci 17488c2ecf20Sopenharmony_ci /* CX23417 GPIO's */ 17498c2ecf20Sopenharmony_ci /* GPIO-14 S5H1411/CX24228 Reset */ 17508c2ecf20Sopenharmony_ci /* GPIO-13 EEPROM write protect */ 17518c2ecf20Sopenharmony_ci mc417_gpio_enable(dev, GPIO_14 | GPIO_13, 1); 17528c2ecf20Sopenharmony_ci 17538c2ecf20Sopenharmony_ci /* Put the demod into reset and protect the eeprom */ 17548c2ecf20Sopenharmony_ci mc417_gpio_clear(dev, GPIO_14 | GPIO_13); 17558c2ecf20Sopenharmony_ci msleep(100); 17568c2ecf20Sopenharmony_ci 17578c2ecf20Sopenharmony_ci /* Bring the demod out of reset */ 17588c2ecf20Sopenharmony_ci mc417_gpio_set(dev, GPIO_14); 17598c2ecf20Sopenharmony_ci msleep(100); 17608c2ecf20Sopenharmony_ci 17618c2ecf20Sopenharmony_ci /* CX24228 GPIO */ 17628c2ecf20Sopenharmony_ci /* Connected to IF / Mux */ 17638c2ecf20Sopenharmony_ci break; 17648c2ecf20Sopenharmony_ci case CX23885_BOARD_GOTVIEW_X5_3D_HYBRID: 17658c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00010001); /* Bring the part out of reset */ 17668c2ecf20Sopenharmony_ci break; 17678c2ecf20Sopenharmony_ci case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF: 17688c2ecf20Sopenharmony_ci /* GPIO-0 ~INT in 17698c2ecf20Sopenharmony_ci GPIO-1 TMS out 17708c2ecf20Sopenharmony_ci GPIO-2 ~reset chips out 17718c2ecf20Sopenharmony_ci GPIO-3 to GPIO-10 data/addr for CA in/out 17728c2ecf20Sopenharmony_ci GPIO-11 ~CS out 17738c2ecf20Sopenharmony_ci GPIO-12 ADDR out 17748c2ecf20Sopenharmony_ci GPIO-13 ~WR out 17758c2ecf20Sopenharmony_ci GPIO-14 ~RD out 17768c2ecf20Sopenharmony_ci GPIO-15 ~RDY in 17778c2ecf20Sopenharmony_ci GPIO-16 TCK out 17788c2ecf20Sopenharmony_ci GPIO-17 TDO in 17798c2ecf20Sopenharmony_ci GPIO-18 TDI out 17808c2ecf20Sopenharmony_ci */ 17818c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00060000); /* GPIO-1,2 as out */ 17828c2ecf20Sopenharmony_ci /* GPIO-0 as INT, reset & TMS low */ 17838c2ecf20Sopenharmony_ci cx_clear(GP0_IO, 0x00010006); 17848c2ecf20Sopenharmony_ci msleep(100);/* reset delay */ 17858c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00000004); /* reset high */ 17868c2ecf20Sopenharmony_ci cx_write(MC417_CTL, 0x00000037);/* enable GPIO-3..18 pins */ 17878c2ecf20Sopenharmony_ci /* GPIO-17 is TDO in, GPIO-15 is ~RDY in, rest is out */ 17888c2ecf20Sopenharmony_ci cx_write(MC417_OEN, 0x00005000); 17898c2ecf20Sopenharmony_ci /* ~RD, ~WR high; ADDR low; ~CS high */ 17908c2ecf20Sopenharmony_ci cx_write(MC417_RWD, 0x00000d00); 17918c2ecf20Sopenharmony_ci /* enable irq */ 17928c2ecf20Sopenharmony_ci cx_write(GPIO_ISM, 0x00000000);/* INTERRUPTS active low*/ 17938c2ecf20Sopenharmony_ci break; 17948c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR4400: 17958c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_STARBURST: 17968c2ecf20Sopenharmony_ci /* GPIO-8 tda10071 demod reset */ 17978c2ecf20Sopenharmony_ci /* GPIO-9 si2165 demod reset (only HVR4400/HVR5500)*/ 17988c2ecf20Sopenharmony_ci 17998c2ecf20Sopenharmony_ci /* Put the parts into reset and back */ 18008c2ecf20Sopenharmony_ci cx23885_gpio_enable(dev, GPIO_8 | GPIO_9, 1); 18018c2ecf20Sopenharmony_ci 18028c2ecf20Sopenharmony_ci cx23885_gpio_clear(dev, GPIO_8 | GPIO_9); 18038c2ecf20Sopenharmony_ci msleep(100); 18048c2ecf20Sopenharmony_ci cx23885_gpio_set(dev, GPIO_8 | GPIO_9); 18058c2ecf20Sopenharmony_ci msleep(100); 18068c2ecf20Sopenharmony_ci 18078c2ecf20Sopenharmony_ci break; 18088c2ecf20Sopenharmony_ci case CX23885_BOARD_AVERMEDIA_HC81R: 18098c2ecf20Sopenharmony_ci cx_clear(MC417_CTL, 1); 18108c2ecf20Sopenharmony_ci /* GPIO-0,1,2 setup direction as output */ 18118c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00070000); 18128c2ecf20Sopenharmony_ci usleep_range(10000, 11000); 18138c2ecf20Sopenharmony_ci /* AF9013 demod reset */ 18148c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00010001); 18158c2ecf20Sopenharmony_ci usleep_range(10000, 11000); 18168c2ecf20Sopenharmony_ci cx_clear(GP0_IO, 0x00010001); 18178c2ecf20Sopenharmony_ci usleep_range(10000, 11000); 18188c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00010001); 18198c2ecf20Sopenharmony_ci usleep_range(10000, 11000); 18208c2ecf20Sopenharmony_ci /* demod tune? */ 18218c2ecf20Sopenharmony_ci cx_clear(GP0_IO, 0x00030003); 18228c2ecf20Sopenharmony_ci usleep_range(10000, 11000); 18238c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00020002); 18248c2ecf20Sopenharmony_ci usleep_range(10000, 11000); 18258c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00010001); 18268c2ecf20Sopenharmony_ci usleep_range(10000, 11000); 18278c2ecf20Sopenharmony_ci cx_clear(GP0_IO, 0x00020002); 18288c2ecf20Sopenharmony_ci /* XC3028L tuner reset */ 18298c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00040004); 18308c2ecf20Sopenharmony_ci cx_clear(GP0_IO, 0x00040004); 18318c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00040004); 18328c2ecf20Sopenharmony_ci msleep(60); 18338c2ecf20Sopenharmony_ci break; 18348c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_T9580: 18358c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_S952: 18368c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_T982: 18378c2ecf20Sopenharmony_ci /* enable GPIO3-18 pins */ 18388c2ecf20Sopenharmony_ci cx_write(MC417_CTL, 0x00000037); 18398c2ecf20Sopenharmony_ci cx23885_gpio_enable(dev, GPIO_2 | GPIO_11, 1); 18408c2ecf20Sopenharmony_ci cx23885_gpio_clear(dev, GPIO_2 | GPIO_11); 18418c2ecf20Sopenharmony_ci msleep(100); 18428c2ecf20Sopenharmony_ci cx23885_gpio_set(dev, GPIO_2 | GPIO_11); 18438c2ecf20Sopenharmony_ci break; 18448c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_T980C: 18458c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_S950C: 18468c2ecf20Sopenharmony_ci case CX23885_BOARD_TT_CT2_4500_CI: 18478c2ecf20Sopenharmony_ci /* 18488c2ecf20Sopenharmony_ci * GPIO-0 INTA from CiMax, input 18498c2ecf20Sopenharmony_ci * GPIO-1 reset CiMax, output, high active 18508c2ecf20Sopenharmony_ci * GPIO-2 reset demod, output, low active 18518c2ecf20Sopenharmony_ci * GPIO-3 to GPIO-10 data/addr for CAM 18528c2ecf20Sopenharmony_ci * GPIO-11 ~CS0 to CiMax1 18538c2ecf20Sopenharmony_ci * GPIO-12 ~CS1 to CiMax2 18548c2ecf20Sopenharmony_ci * GPIO-13 ADL0 load LSB addr 18558c2ecf20Sopenharmony_ci * GPIO-14 ADL1 load MSB addr 18568c2ecf20Sopenharmony_ci * GPIO-15 ~RDY from CiMax 18578c2ecf20Sopenharmony_ci * GPIO-17 ~RD to CiMax 18588c2ecf20Sopenharmony_ci * GPIO-18 ~WR to CiMax 18598c2ecf20Sopenharmony_ci */ 18608c2ecf20Sopenharmony_ci 18618c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00060002); /* GPIO 1/2 as output */ 18628c2ecf20Sopenharmony_ci cx_clear(GP0_IO, 0x00010004); /* GPIO 0 as input */ 18638c2ecf20Sopenharmony_ci msleep(100); /* reset delay */ 18648c2ecf20Sopenharmony_ci cx_set(GP0_IO, 0x00060004); /* GPIO as out, reset high */ 18658c2ecf20Sopenharmony_ci cx_clear(GP0_IO, 0x00010002); 18668c2ecf20Sopenharmony_ci cx_write(MC417_CTL, 0x00000037); /* enable GPIO3-18 pins */ 18678c2ecf20Sopenharmony_ci 18688c2ecf20Sopenharmony_ci /* GPIO-15 IN as ~ACK, rest as OUT */ 18698c2ecf20Sopenharmony_ci cx_write(MC417_OEN, 0x00001000); 18708c2ecf20Sopenharmony_ci 18718c2ecf20Sopenharmony_ci /* ~RD, ~WR high; ADL0, ADL1 low; ~CS0, ~CS1 high */ 18728c2ecf20Sopenharmony_ci cx_write(MC417_RWD, 0x0000c300); 18738c2ecf20Sopenharmony_ci 18748c2ecf20Sopenharmony_ci /* enable irq */ 18758c2ecf20Sopenharmony_ci cx_write(GPIO_ISM, 0x00000000); /* INTERRUPTS active low */ 18768c2ecf20Sopenharmony_ci break; 18778c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_S950: 18788c2ecf20Sopenharmony_ci cx23885_gpio_enable(dev, GPIO_2, 1); 18798c2ecf20Sopenharmony_ci cx23885_gpio_clear(dev, GPIO_2); 18808c2ecf20Sopenharmony_ci msleep(100); 18818c2ecf20Sopenharmony_ci cx23885_gpio_set(dev, GPIO_2); 18828c2ecf20Sopenharmony_ci break; 18838c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR5525: 18848c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_STARBURST2: 18858c2ecf20Sopenharmony_ci /* 18868c2ecf20Sopenharmony_ci * HVR5525 GPIO Details: 18878c2ecf20Sopenharmony_ci * GPIO-00 IR_WIDE 18888c2ecf20Sopenharmony_ci * GPIO-02 wake# 18898c2ecf20Sopenharmony_ci * GPIO-03 VAUX Pres. 18908c2ecf20Sopenharmony_ci * GPIO-07 PROG# 18918c2ecf20Sopenharmony_ci * GPIO-08 SAT_RESN 18928c2ecf20Sopenharmony_ci * GPIO-09 TER_RESN 18938c2ecf20Sopenharmony_ci * GPIO-10 B2_SENSE 18948c2ecf20Sopenharmony_ci * GPIO-11 B1_SENSE 18958c2ecf20Sopenharmony_ci * GPIO-15 IR_LED_STATUS 18968c2ecf20Sopenharmony_ci * GPIO-19 IR_NARROW 18978c2ecf20Sopenharmony_ci * GPIO-20 Blauster1 18988c2ecf20Sopenharmony_ci * ALTGPIO VAUX_SWITCH 18998c2ecf20Sopenharmony_ci * AUX_PLL_CLK : Blaster2 19008c2ecf20Sopenharmony_ci */ 19018c2ecf20Sopenharmony_ci /* Put the parts into reset and back */ 19028c2ecf20Sopenharmony_ci cx23885_gpio_enable(dev, GPIO_8 | GPIO_9, 1); 19038c2ecf20Sopenharmony_ci cx23885_gpio_clear(dev, GPIO_8 | GPIO_9); 19048c2ecf20Sopenharmony_ci msleep(100); 19058c2ecf20Sopenharmony_ci cx23885_gpio_set(dev, GPIO_8 | GPIO_9); 19068c2ecf20Sopenharmony_ci msleep(100); 19078c2ecf20Sopenharmony_ci break; 19088c2ecf20Sopenharmony_ci case CX23885_BOARD_VIEWCAST_260E: 19098c2ecf20Sopenharmony_ci case CX23885_BOARD_VIEWCAST_460E: 19108c2ecf20Sopenharmony_ci /* For documentation purposes, it's worth noting that this 19118c2ecf20Sopenharmony_ci * card does not have any GPIO's connected to subcomponents. 19128c2ecf20Sopenharmony_ci */ 19138c2ecf20Sopenharmony_ci break; 19148c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1265_K4: 19158c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_QUADHD_DVB: 19168c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_QUADHD_DVB_885: 19178c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC: 19188c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC_885: 19198c2ecf20Sopenharmony_ci /* 19208c2ecf20Sopenharmony_ci * GPIO-08 TER1_RESN 19218c2ecf20Sopenharmony_ci * GPIO-09 TER2_RESN 19228c2ecf20Sopenharmony_ci */ 19238c2ecf20Sopenharmony_ci /* Put the parts into reset and back */ 19248c2ecf20Sopenharmony_ci cx23885_gpio_enable(dev, GPIO_8 | GPIO_9, 1); 19258c2ecf20Sopenharmony_ci cx23885_gpio_clear(dev, GPIO_8 | GPIO_9); 19268c2ecf20Sopenharmony_ci msleep(100); 19278c2ecf20Sopenharmony_ci cx23885_gpio_set(dev, GPIO_8 | GPIO_9); 19288c2ecf20Sopenharmony_ci msleep(100); 19298c2ecf20Sopenharmony_ci break; 19308c2ecf20Sopenharmony_ci } 19318c2ecf20Sopenharmony_ci} 19328c2ecf20Sopenharmony_ci 19338c2ecf20Sopenharmony_ciint cx23885_ir_init(struct cx23885_dev *dev) 19348c2ecf20Sopenharmony_ci{ 19358c2ecf20Sopenharmony_ci static struct v4l2_subdev_io_pin_config ir_rxtx_pin_cfg[] = { 19368c2ecf20Sopenharmony_ci { 19378c2ecf20Sopenharmony_ci .flags = BIT(V4L2_SUBDEV_IO_PIN_INPUT), 19388c2ecf20Sopenharmony_ci .pin = CX23885_PIN_IR_RX_GPIO19, 19398c2ecf20Sopenharmony_ci .function = CX23885_PAD_IR_RX, 19408c2ecf20Sopenharmony_ci .value = 0, 19418c2ecf20Sopenharmony_ci .strength = CX25840_PIN_DRIVE_MEDIUM, 19428c2ecf20Sopenharmony_ci }, { 19438c2ecf20Sopenharmony_ci .flags = BIT(V4L2_SUBDEV_IO_PIN_OUTPUT), 19448c2ecf20Sopenharmony_ci .pin = CX23885_PIN_IR_TX_GPIO20, 19458c2ecf20Sopenharmony_ci .function = CX23885_PAD_IR_TX, 19468c2ecf20Sopenharmony_ci .value = 0, 19478c2ecf20Sopenharmony_ci .strength = CX25840_PIN_DRIVE_MEDIUM, 19488c2ecf20Sopenharmony_ci } 19498c2ecf20Sopenharmony_ci }; 19508c2ecf20Sopenharmony_ci const size_t ir_rxtx_pin_cfg_count = ARRAY_SIZE(ir_rxtx_pin_cfg); 19518c2ecf20Sopenharmony_ci 19528c2ecf20Sopenharmony_ci static struct v4l2_subdev_io_pin_config ir_rx_pin_cfg[] = { 19538c2ecf20Sopenharmony_ci { 19548c2ecf20Sopenharmony_ci .flags = BIT(V4L2_SUBDEV_IO_PIN_INPUT), 19558c2ecf20Sopenharmony_ci .pin = CX23885_PIN_IR_RX_GPIO19, 19568c2ecf20Sopenharmony_ci .function = CX23885_PAD_IR_RX, 19578c2ecf20Sopenharmony_ci .value = 0, 19588c2ecf20Sopenharmony_ci .strength = CX25840_PIN_DRIVE_MEDIUM, 19598c2ecf20Sopenharmony_ci } 19608c2ecf20Sopenharmony_ci }; 19618c2ecf20Sopenharmony_ci const size_t ir_rx_pin_cfg_count = ARRAY_SIZE(ir_rx_pin_cfg); 19628c2ecf20Sopenharmony_ci 19638c2ecf20Sopenharmony_ci struct v4l2_subdev_ir_parameters params; 19648c2ecf20Sopenharmony_ci int ret = 0; 19658c2ecf20Sopenharmony_ci switch (dev->board) { 19668c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1500: 19678c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1500Q: 19688c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1800: 19698c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1200: 19708c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1400: 19718c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1275: 19728c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1255: 19738c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1255_22111: 19748c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1210: 19758c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_QUADHD_DVB: 19768c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC: 19778c2ecf20Sopenharmony_ci /* FIXME: Implement me */ 19788c2ecf20Sopenharmony_ci break; 19798c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1270: 19808c2ecf20Sopenharmony_ci ret = cx23888_ir_probe(dev); 19818c2ecf20Sopenharmony_ci if (ret) 19828c2ecf20Sopenharmony_ci break; 19838c2ecf20Sopenharmony_ci dev->sd_ir = cx23885_find_hw(dev, CX23885_HW_888_IR); 19848c2ecf20Sopenharmony_ci v4l2_subdev_call(dev->sd_cx25840, core, s_io_pin_config, 19858c2ecf20Sopenharmony_ci ir_rx_pin_cfg_count, ir_rx_pin_cfg); 19868c2ecf20Sopenharmony_ci break; 19878c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1850: 19888c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1290: 19898c2ecf20Sopenharmony_ci ret = cx23888_ir_probe(dev); 19908c2ecf20Sopenharmony_ci if (ret) 19918c2ecf20Sopenharmony_ci break; 19928c2ecf20Sopenharmony_ci dev->sd_ir = cx23885_find_hw(dev, CX23885_HW_888_IR); 19938c2ecf20Sopenharmony_ci v4l2_subdev_call(dev->sd_cx25840, core, s_io_pin_config, 19948c2ecf20Sopenharmony_ci ir_rxtx_pin_cfg_count, ir_rxtx_pin_cfg); 19958c2ecf20Sopenharmony_ci /* 19968c2ecf20Sopenharmony_ci * For these boards we need to invert the Tx output via the 19978c2ecf20Sopenharmony_ci * IR controller to have the LED off while idle 19988c2ecf20Sopenharmony_ci */ 19998c2ecf20Sopenharmony_ci v4l2_subdev_call(dev->sd_ir, ir, tx_g_parameters, ¶ms); 20008c2ecf20Sopenharmony_ci params.enable = false; 20018c2ecf20Sopenharmony_ci params.shutdown = false; 20028c2ecf20Sopenharmony_ci params.invert_level = true; 20038c2ecf20Sopenharmony_ci v4l2_subdev_call(dev->sd_ir, ir, tx_s_parameters, ¶ms); 20048c2ecf20Sopenharmony_ci params.shutdown = true; 20058c2ecf20Sopenharmony_ci v4l2_subdev_call(dev->sd_ir, ir, tx_s_parameters, ¶ms); 20068c2ecf20Sopenharmony_ci break; 20078c2ecf20Sopenharmony_ci case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL: 20088c2ecf20Sopenharmony_ci case CX23885_BOARD_TEVII_S470: 20098c2ecf20Sopenharmony_ci case CX23885_BOARD_MYGICA_X8507: 20108c2ecf20Sopenharmony_ci case CX23885_BOARD_TBS_6980: 20118c2ecf20Sopenharmony_ci case CX23885_BOARD_TBS_6981: 20128c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_T9580: 20138c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_T980C: 20148c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_S950C: 20158c2ecf20Sopenharmony_ci case CX23885_BOARD_TT_CT2_4500_CI: 20168c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_S950: 20178c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_S952: 20188c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_T982: 20198c2ecf20Sopenharmony_ci if (!enable_885_ir) 20208c2ecf20Sopenharmony_ci break; 20218c2ecf20Sopenharmony_ci dev->sd_ir = cx23885_find_hw(dev, CX23885_HW_AV_CORE); 20228c2ecf20Sopenharmony_ci if (dev->sd_ir == NULL) { 20238c2ecf20Sopenharmony_ci ret = -ENODEV; 20248c2ecf20Sopenharmony_ci break; 20258c2ecf20Sopenharmony_ci } 20268c2ecf20Sopenharmony_ci v4l2_subdev_call(dev->sd_cx25840, core, s_io_pin_config, 20278c2ecf20Sopenharmony_ci ir_rx_pin_cfg_count, ir_rx_pin_cfg); 20288c2ecf20Sopenharmony_ci break; 20298c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1250: 20308c2ecf20Sopenharmony_ci if (!enable_885_ir) 20318c2ecf20Sopenharmony_ci break; 20328c2ecf20Sopenharmony_ci dev->sd_ir = cx23885_find_hw(dev, CX23885_HW_AV_CORE); 20338c2ecf20Sopenharmony_ci if (dev->sd_ir == NULL) { 20348c2ecf20Sopenharmony_ci ret = -ENODEV; 20358c2ecf20Sopenharmony_ci break; 20368c2ecf20Sopenharmony_ci } 20378c2ecf20Sopenharmony_ci v4l2_subdev_call(dev->sd_cx25840, core, s_io_pin_config, 20388c2ecf20Sopenharmony_ci ir_rxtx_pin_cfg_count, ir_rxtx_pin_cfg); 20398c2ecf20Sopenharmony_ci break; 20408c2ecf20Sopenharmony_ci case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP: 20418c2ecf20Sopenharmony_ci case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP2: 20428c2ecf20Sopenharmony_ci request_module("ir-kbd-i2c"); 20438c2ecf20Sopenharmony_ci break; 20448c2ecf20Sopenharmony_ci } 20458c2ecf20Sopenharmony_ci 20468c2ecf20Sopenharmony_ci return ret; 20478c2ecf20Sopenharmony_ci} 20488c2ecf20Sopenharmony_ci 20498c2ecf20Sopenharmony_civoid cx23885_ir_fini(struct cx23885_dev *dev) 20508c2ecf20Sopenharmony_ci{ 20518c2ecf20Sopenharmony_ci switch (dev->board) { 20528c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1270: 20538c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1850: 20548c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1290: 20558c2ecf20Sopenharmony_ci cx23885_irq_remove(dev, PCI_MSK_IR); 20568c2ecf20Sopenharmony_ci cx23888_ir_remove(dev); 20578c2ecf20Sopenharmony_ci dev->sd_ir = NULL; 20588c2ecf20Sopenharmony_ci break; 20598c2ecf20Sopenharmony_ci case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL: 20608c2ecf20Sopenharmony_ci case CX23885_BOARD_TEVII_S470: 20618c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1250: 20628c2ecf20Sopenharmony_ci case CX23885_BOARD_MYGICA_X8507: 20638c2ecf20Sopenharmony_ci case CX23885_BOARD_TBS_6980: 20648c2ecf20Sopenharmony_ci case CX23885_BOARD_TBS_6981: 20658c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_T9580: 20668c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_T980C: 20678c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_S950C: 20688c2ecf20Sopenharmony_ci case CX23885_BOARD_TT_CT2_4500_CI: 20698c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_S950: 20708c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_S952: 20718c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_T982: 20728c2ecf20Sopenharmony_ci cx23885_irq_remove(dev, PCI_MSK_AV_CORE); 20738c2ecf20Sopenharmony_ci /* sd_ir is a duplicate pointer to the AV Core, just clear it */ 20748c2ecf20Sopenharmony_ci dev->sd_ir = NULL; 20758c2ecf20Sopenharmony_ci break; 20768c2ecf20Sopenharmony_ci } 20778c2ecf20Sopenharmony_ci} 20788c2ecf20Sopenharmony_ci 20798c2ecf20Sopenharmony_cistatic int netup_jtag_io(void *device, int tms, int tdi, int read_tdo) 20808c2ecf20Sopenharmony_ci{ 20818c2ecf20Sopenharmony_ci int data; 20828c2ecf20Sopenharmony_ci int tdo = 0; 20838c2ecf20Sopenharmony_ci struct cx23885_dev *dev = (struct cx23885_dev *)device; 20848c2ecf20Sopenharmony_ci /*TMS*/ 20858c2ecf20Sopenharmony_ci data = ((cx_read(GP0_IO)) & (~0x00000002)); 20868c2ecf20Sopenharmony_ci data |= (tms ? 0x00020002 : 0x00020000); 20878c2ecf20Sopenharmony_ci cx_write(GP0_IO, data); 20888c2ecf20Sopenharmony_ci 20898c2ecf20Sopenharmony_ci /*TDI*/ 20908c2ecf20Sopenharmony_ci data = ((cx_read(MC417_RWD)) & (~0x0000a000)); 20918c2ecf20Sopenharmony_ci data |= (tdi ? 0x00008000 : 0); 20928c2ecf20Sopenharmony_ci cx_write(MC417_RWD, data); 20938c2ecf20Sopenharmony_ci if (read_tdo) 20948c2ecf20Sopenharmony_ci tdo = (data & 0x00004000) ? 1 : 0; /*TDO*/ 20958c2ecf20Sopenharmony_ci 20968c2ecf20Sopenharmony_ci cx_write(MC417_RWD, data | 0x00002000); 20978c2ecf20Sopenharmony_ci udelay(1); 20988c2ecf20Sopenharmony_ci /*TCK*/ 20998c2ecf20Sopenharmony_ci cx_write(MC417_RWD, data); 21008c2ecf20Sopenharmony_ci 21018c2ecf20Sopenharmony_ci return tdo; 21028c2ecf20Sopenharmony_ci} 21038c2ecf20Sopenharmony_ci 21048c2ecf20Sopenharmony_civoid cx23885_ir_pci_int_enable(struct cx23885_dev *dev) 21058c2ecf20Sopenharmony_ci{ 21068c2ecf20Sopenharmony_ci switch (dev->board) { 21078c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1270: 21088c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1850: 21098c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1290: 21108c2ecf20Sopenharmony_ci if (dev->sd_ir) 21118c2ecf20Sopenharmony_ci cx23885_irq_add_enable(dev, PCI_MSK_IR); 21128c2ecf20Sopenharmony_ci break; 21138c2ecf20Sopenharmony_ci case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL: 21148c2ecf20Sopenharmony_ci case CX23885_BOARD_TEVII_S470: 21158c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1250: 21168c2ecf20Sopenharmony_ci case CX23885_BOARD_MYGICA_X8507: 21178c2ecf20Sopenharmony_ci case CX23885_BOARD_TBS_6980: 21188c2ecf20Sopenharmony_ci case CX23885_BOARD_TBS_6981: 21198c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_T9580: 21208c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_T980C: 21218c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_S950C: 21228c2ecf20Sopenharmony_ci case CX23885_BOARD_TT_CT2_4500_CI: 21238c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_S950: 21248c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_S952: 21258c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_T982: 21268c2ecf20Sopenharmony_ci if (dev->sd_ir) 21278c2ecf20Sopenharmony_ci cx23885_irq_add_enable(dev, PCI_MSK_AV_CORE); 21288c2ecf20Sopenharmony_ci break; 21298c2ecf20Sopenharmony_ci } 21308c2ecf20Sopenharmony_ci} 21318c2ecf20Sopenharmony_ci 21328c2ecf20Sopenharmony_civoid cx23885_card_setup(struct cx23885_dev *dev) 21338c2ecf20Sopenharmony_ci{ 21348c2ecf20Sopenharmony_ci struct cx23885_tsport *ts1 = &dev->ts1; 21358c2ecf20Sopenharmony_ci struct cx23885_tsport *ts2 = &dev->ts2; 21368c2ecf20Sopenharmony_ci 21378c2ecf20Sopenharmony_ci static u8 eeprom[256]; 21388c2ecf20Sopenharmony_ci 21398c2ecf20Sopenharmony_ci if (dev->i2c_bus[0].i2c_rc == 0) { 21408c2ecf20Sopenharmony_ci dev->i2c_bus[0].i2c_client.addr = 0xa0 >> 1; 21418c2ecf20Sopenharmony_ci tveeprom_read(&dev->i2c_bus[0].i2c_client, 21428c2ecf20Sopenharmony_ci eeprom, sizeof(eeprom)); 21438c2ecf20Sopenharmony_ci } 21448c2ecf20Sopenharmony_ci 21458c2ecf20Sopenharmony_ci switch (dev->board) { 21468c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1250: 21478c2ecf20Sopenharmony_ci if (dev->i2c_bus[0].i2c_rc == 0) { 21488c2ecf20Sopenharmony_ci if (eeprom[0x80] != 0x84) 21498c2ecf20Sopenharmony_ci hauppauge_eeprom(dev, eeprom+0xc0); 21508c2ecf20Sopenharmony_ci else 21518c2ecf20Sopenharmony_ci hauppauge_eeprom(dev, eeprom+0x80); 21528c2ecf20Sopenharmony_ci } 21538c2ecf20Sopenharmony_ci break; 21548c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1500: 21558c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1500Q: 21568c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1400: 21578c2ecf20Sopenharmony_ci if (dev->i2c_bus[0].i2c_rc == 0) 21588c2ecf20Sopenharmony_ci hauppauge_eeprom(dev, eeprom+0x80); 21598c2ecf20Sopenharmony_ci break; 21608c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1800: 21618c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1800lp: 21628c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1200: 21638c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1700: 21648c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1270: 21658c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1275: 21668c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1255: 21678c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1255_22111: 21688c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1210: 21698c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1850: 21708c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1290: 21718c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR4400: 21728c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_STARBURST: 21738c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_IMPACTVCBE: 21748c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR5525: 21758c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1265_K4: 21768c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_STARBURST2: 21778c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_QUADHD_DVB: 21788c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_QUADHD_DVB_885: 21798c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC: 21808c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC_885: 21818c2ecf20Sopenharmony_ci if (dev->i2c_bus[0].i2c_rc == 0) 21828c2ecf20Sopenharmony_ci hauppauge_eeprom(dev, eeprom+0xc0); 21838c2ecf20Sopenharmony_ci break; 21848c2ecf20Sopenharmony_ci case CX23885_BOARD_VIEWCAST_260E: 21858c2ecf20Sopenharmony_ci case CX23885_BOARD_VIEWCAST_460E: 21868c2ecf20Sopenharmony_ci dev->i2c_bus[1].i2c_client.addr = 0xa0 >> 1; 21878c2ecf20Sopenharmony_ci tveeprom_read(&dev->i2c_bus[1].i2c_client, 21888c2ecf20Sopenharmony_ci eeprom, sizeof(eeprom)); 21898c2ecf20Sopenharmony_ci if (dev->i2c_bus[0].i2c_rc == 0) 21908c2ecf20Sopenharmony_ci viewcast_eeprom(dev, eeprom); 21918c2ecf20Sopenharmony_ci break; 21928c2ecf20Sopenharmony_ci } 21938c2ecf20Sopenharmony_ci 21948c2ecf20Sopenharmony_ci switch (dev->board) { 21958c2ecf20Sopenharmony_ci case CX23885_BOARD_AVERMEDIA_HC81R: 21968c2ecf20Sopenharmony_ci /* Defaults for VID B */ 21978c2ecf20Sopenharmony_ci ts1->gen_ctrl_val = 0x4; /* Parallel */ 21988c2ecf20Sopenharmony_ci ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 21998c2ecf20Sopenharmony_ci ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 22008c2ecf20Sopenharmony_ci /* Defaults for VID C */ 22018c2ecf20Sopenharmony_ci /* DREQ_POL, SMODE, PUNC_CLK, MCLK_POL Serial bus + punc clk */ 22028c2ecf20Sopenharmony_ci ts2->gen_ctrl_val = 0x10e; 22038c2ecf20Sopenharmony_ci ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 22048c2ecf20Sopenharmony_ci ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 22058c2ecf20Sopenharmony_ci break; 22068c2ecf20Sopenharmony_ci case CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP: 22078c2ecf20Sopenharmony_ci case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP: 22088c2ecf20Sopenharmony_ci case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP2: 22098c2ecf20Sopenharmony_ci ts2->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */ 22108c2ecf20Sopenharmony_ci ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 22118c2ecf20Sopenharmony_ci ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 22128c2ecf20Sopenharmony_ci fallthrough; 22138c2ecf20Sopenharmony_ci case CX23885_BOARD_DVICO_FUSIONHDTV_5_EXP: 22148c2ecf20Sopenharmony_ci ts1->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */ 22158c2ecf20Sopenharmony_ci ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 22168c2ecf20Sopenharmony_ci ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 22178c2ecf20Sopenharmony_ci break; 22188c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1850: 22198c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1800: 22208c2ecf20Sopenharmony_ci /* Defaults for VID B - Analog encoder */ 22218c2ecf20Sopenharmony_ci /* DREQ_POL, SMODE, PUNC_CLK, MCLK_POL Serial bus + punc clk */ 22228c2ecf20Sopenharmony_ci ts1->gen_ctrl_val = 0x10e; 22238c2ecf20Sopenharmony_ci ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 22248c2ecf20Sopenharmony_ci ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 22258c2ecf20Sopenharmony_ci 22268c2ecf20Sopenharmony_ci /* APB_TSVALERR_POL (active low)*/ 22278c2ecf20Sopenharmony_ci ts1->vld_misc_val = 0x2000; 22288c2ecf20Sopenharmony_ci ts1->hw_sop_ctrl_val = (0x47 << 16 | 188 << 4 | 0xc); 22298c2ecf20Sopenharmony_ci cx_write(0x130184, 0xc); 22308c2ecf20Sopenharmony_ci 22318c2ecf20Sopenharmony_ci /* Defaults for VID C */ 22328c2ecf20Sopenharmony_ci ts2->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */ 22338c2ecf20Sopenharmony_ci ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 22348c2ecf20Sopenharmony_ci ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 22358c2ecf20Sopenharmony_ci break; 22368c2ecf20Sopenharmony_ci case CX23885_BOARD_TBS_6920: 22378c2ecf20Sopenharmony_ci ts1->gen_ctrl_val = 0x4; /* Parallel */ 22388c2ecf20Sopenharmony_ci ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 22398c2ecf20Sopenharmony_ci ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 22408c2ecf20Sopenharmony_ci break; 22418c2ecf20Sopenharmony_ci case CX23885_BOARD_TEVII_S470: 22428c2ecf20Sopenharmony_ci case CX23885_BOARD_TEVII_S471: 22438c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBWORLD_2005: 22448c2ecf20Sopenharmony_ci case CX23885_BOARD_PROF_8000: 22458c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_T980C: 22468c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_S950C: 22478c2ecf20Sopenharmony_ci case CX23885_BOARD_TT_CT2_4500_CI: 22488c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_S950: 22498c2ecf20Sopenharmony_ci ts1->gen_ctrl_val = 0x5; /* Parallel */ 22508c2ecf20Sopenharmony_ci ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 22518c2ecf20Sopenharmony_ci ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 22528c2ecf20Sopenharmony_ci break; 22538c2ecf20Sopenharmony_ci case CX23885_BOARD_NETUP_DUAL_DVBS2_CI: 22548c2ecf20Sopenharmony_ci case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF: 22558c2ecf20Sopenharmony_ci case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL: 22568c2ecf20Sopenharmony_ci ts1->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */ 22578c2ecf20Sopenharmony_ci ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 22588c2ecf20Sopenharmony_ci ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 22598c2ecf20Sopenharmony_ci ts2->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */ 22608c2ecf20Sopenharmony_ci ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 22618c2ecf20Sopenharmony_ci ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 22628c2ecf20Sopenharmony_ci break; 22638c2ecf20Sopenharmony_ci case CX23885_BOARD_TBS_6980: 22648c2ecf20Sopenharmony_ci case CX23885_BOARD_TBS_6981: 22658c2ecf20Sopenharmony_ci ts1->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */ 22668c2ecf20Sopenharmony_ci ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 22678c2ecf20Sopenharmony_ci ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 22688c2ecf20Sopenharmony_ci ts2->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */ 22698c2ecf20Sopenharmony_ci ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 22708c2ecf20Sopenharmony_ci ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 22718c2ecf20Sopenharmony_ci tbs_card_init(dev); 22728c2ecf20Sopenharmony_ci break; 22738c2ecf20Sopenharmony_ci case CX23885_BOARD_MYGICA_X8506: 22748c2ecf20Sopenharmony_ci case CX23885_BOARD_MAGICPRO_PROHDTVE2: 22758c2ecf20Sopenharmony_ci case CX23885_BOARD_MYGICA_X8507: 22768c2ecf20Sopenharmony_ci ts1->gen_ctrl_val = 0x5; /* Parallel */ 22778c2ecf20Sopenharmony_ci ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 22788c2ecf20Sopenharmony_ci ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 22798c2ecf20Sopenharmony_ci break; 22808c2ecf20Sopenharmony_ci case CX23885_BOARD_MYGICA_X8558PRO: 22818c2ecf20Sopenharmony_ci ts1->gen_ctrl_val = 0x5; /* Parallel */ 22828c2ecf20Sopenharmony_ci ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 22838c2ecf20Sopenharmony_ci ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 22848c2ecf20Sopenharmony_ci ts2->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */ 22858c2ecf20Sopenharmony_ci ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 22868c2ecf20Sopenharmony_ci ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 22878c2ecf20Sopenharmony_ci break; 22888c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR4400: 22898c2ecf20Sopenharmony_ci ts1->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */ 22908c2ecf20Sopenharmony_ci ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 22918c2ecf20Sopenharmony_ci ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 22928c2ecf20Sopenharmony_ci ts2->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */ 22938c2ecf20Sopenharmony_ci ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 22948c2ecf20Sopenharmony_ci ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 22958c2ecf20Sopenharmony_ci break; 22968c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_STARBURST: 22978c2ecf20Sopenharmony_ci ts1->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */ 22988c2ecf20Sopenharmony_ci ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 22998c2ecf20Sopenharmony_ci ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 23008c2ecf20Sopenharmony_ci break; 23018c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_T9580: 23028c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_T982: 23038c2ecf20Sopenharmony_ci ts1->gen_ctrl_val = 0x5; /* Parallel */ 23048c2ecf20Sopenharmony_ci ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 23058c2ecf20Sopenharmony_ci ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 23068c2ecf20Sopenharmony_ci ts2->gen_ctrl_val = 0x8; /* Serial bus */ 23078c2ecf20Sopenharmony_ci ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 23088c2ecf20Sopenharmony_ci ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 23098c2ecf20Sopenharmony_ci break; 23108c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_S952: 23118c2ecf20Sopenharmony_ci ts1->gen_ctrl_val = 0x5; /* Parallel */ 23128c2ecf20Sopenharmony_ci ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 23138c2ecf20Sopenharmony_ci ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 23148c2ecf20Sopenharmony_ci ts2->gen_ctrl_val = 0xe; /* Serial bus */ 23158c2ecf20Sopenharmony_ci ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 23168c2ecf20Sopenharmony_ci ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 23178c2ecf20Sopenharmony_ci break; 23188c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR5525: 23198c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_STARBURST2: 23208c2ecf20Sopenharmony_ci ts1->gen_ctrl_val = 0x5; /* Parallel */ 23218c2ecf20Sopenharmony_ci ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 23228c2ecf20Sopenharmony_ci ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 23238c2ecf20Sopenharmony_ci ts2->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */ 23248c2ecf20Sopenharmony_ci ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 23258c2ecf20Sopenharmony_ci ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 23268c2ecf20Sopenharmony_ci break; 23278c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1265_K4: 23288c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_QUADHD_DVB: 23298c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_QUADHD_DVB_885: 23308c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC: 23318c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC_885: 23328c2ecf20Sopenharmony_ci ts1->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */ 23338c2ecf20Sopenharmony_ci ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 23348c2ecf20Sopenharmony_ci ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 23358c2ecf20Sopenharmony_ci ts2->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */ 23368c2ecf20Sopenharmony_ci ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 23378c2ecf20Sopenharmony_ci ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 23388c2ecf20Sopenharmony_ci break; 23398c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1250: 23408c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1500: 23418c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1500Q: 23428c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1800lp: 23438c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1200: 23448c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1700: 23458c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1400: 23468c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_IMPACTVCBE: 23478c2ecf20Sopenharmony_ci case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H: 23488c2ecf20Sopenharmony_ci case CX23885_BOARD_LEADTEK_WINFAST_PXPVR2200: 23498c2ecf20Sopenharmony_ci case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H_XC4000: 23508c2ecf20Sopenharmony_ci case CX23885_BOARD_COMPRO_VIDEOMATE_E650F: 23518c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1270: 23528c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1275: 23538c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1255: 23548c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1255_22111: 23558c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1210: 23568c2ecf20Sopenharmony_ci case CX23885_BOARD_COMPRO_VIDEOMATE_E800: 23578c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1290: 23588c2ecf20Sopenharmony_ci case CX23885_BOARD_GOTVIEW_X5_3D_HYBRID: 23598c2ecf20Sopenharmony_ci default: 23608c2ecf20Sopenharmony_ci ts2->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */ 23618c2ecf20Sopenharmony_ci ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 23628c2ecf20Sopenharmony_ci ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; 23638c2ecf20Sopenharmony_ci } 23648c2ecf20Sopenharmony_ci 23658c2ecf20Sopenharmony_ci /* Certain boards support analog, or require the avcore to be 23668c2ecf20Sopenharmony_ci * loaded, ensure this happens. 23678c2ecf20Sopenharmony_ci */ 23688c2ecf20Sopenharmony_ci switch (dev->board) { 23698c2ecf20Sopenharmony_ci case CX23885_BOARD_TEVII_S470: 23708c2ecf20Sopenharmony_ci /* Currently only enabled for the integrated IR controller */ 23718c2ecf20Sopenharmony_ci if (!enable_885_ir) 23728c2ecf20Sopenharmony_ci break; 23738c2ecf20Sopenharmony_ci fallthrough; 23748c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1250: 23758c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1800: 23768c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_IMPACTVCBE: 23778c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1800lp: 23788c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1700: 23798c2ecf20Sopenharmony_ci case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H: 23808c2ecf20Sopenharmony_ci case CX23885_BOARD_LEADTEK_WINFAST_PXPVR2200: 23818c2ecf20Sopenharmony_ci case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H_XC4000: 23828c2ecf20Sopenharmony_ci case CX23885_BOARD_COMPRO_VIDEOMATE_E650F: 23838c2ecf20Sopenharmony_ci case CX23885_BOARD_NETUP_DUAL_DVBS2_CI: 23848c2ecf20Sopenharmony_ci case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF: 23858c2ecf20Sopenharmony_ci case CX23885_BOARD_COMPRO_VIDEOMATE_E800: 23868c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1255: 23878c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1255_22111: 23888c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1265_K4: 23898c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_QUADHD_DVB: 23908c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC: 23918c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1270: 23928c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1850: 23938c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR5525: 23948c2ecf20Sopenharmony_ci case CX23885_BOARD_MYGICA_X8506: 23958c2ecf20Sopenharmony_ci case CX23885_BOARD_MAGICPRO_PROHDTVE2: 23968c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1290: 23978c2ecf20Sopenharmony_ci case CX23885_BOARD_LEADTEK_WINFAST_PXTV1200: 23988c2ecf20Sopenharmony_ci case CX23885_BOARD_GOTVIEW_X5_3D_HYBRID: 23998c2ecf20Sopenharmony_ci case CX23885_BOARD_HAUPPAUGE_HVR1500: 24008c2ecf20Sopenharmony_ci case CX23885_BOARD_MPX885: 24018c2ecf20Sopenharmony_ci case CX23885_BOARD_MYGICA_X8507: 24028c2ecf20Sopenharmony_ci case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL: 24038c2ecf20Sopenharmony_ci case CX23885_BOARD_AVERMEDIA_HC81R: 24048c2ecf20Sopenharmony_ci case CX23885_BOARD_TBS_6980: 24058c2ecf20Sopenharmony_ci case CX23885_BOARD_TBS_6981: 24068c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_T9580: 24078c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_T980C: 24088c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_S950C: 24098c2ecf20Sopenharmony_ci case CX23885_BOARD_TT_CT2_4500_CI: 24108c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_S950: 24118c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_S952: 24128c2ecf20Sopenharmony_ci case CX23885_BOARD_DVBSKY_T982: 24138c2ecf20Sopenharmony_ci case CX23885_BOARD_VIEWCAST_260E: 24148c2ecf20Sopenharmony_ci case CX23885_BOARD_VIEWCAST_460E: 24158c2ecf20Sopenharmony_ci case CX23885_BOARD_AVERMEDIA_CE310B: 24168c2ecf20Sopenharmony_ci dev->sd_cx25840 = v4l2_i2c_new_subdev(&dev->v4l2_dev, 24178c2ecf20Sopenharmony_ci &dev->i2c_bus[2].i2c_adap, 24188c2ecf20Sopenharmony_ci "cx25840", 0x88 >> 1, NULL); 24198c2ecf20Sopenharmony_ci if (dev->sd_cx25840) { 24208c2ecf20Sopenharmony_ci /* set host data for clk_freq configuration */ 24218c2ecf20Sopenharmony_ci v4l2_set_subdev_hostdata(dev->sd_cx25840, 24228c2ecf20Sopenharmony_ci &dev->clk_freq); 24238c2ecf20Sopenharmony_ci 24248c2ecf20Sopenharmony_ci dev->sd_cx25840->grp_id = CX23885_HW_AV_CORE; 24258c2ecf20Sopenharmony_ci v4l2_subdev_call(dev->sd_cx25840, core, load_fw); 24268c2ecf20Sopenharmony_ci } 24278c2ecf20Sopenharmony_ci break; 24288c2ecf20Sopenharmony_ci } 24298c2ecf20Sopenharmony_ci 24308c2ecf20Sopenharmony_ci switch (dev->board) { 24318c2ecf20Sopenharmony_ci case CX23885_BOARD_VIEWCAST_260E: 24328c2ecf20Sopenharmony_ci v4l2_i2c_new_subdev(&dev->v4l2_dev, 24338c2ecf20Sopenharmony_ci &dev->i2c_bus[0].i2c_adap, 24348c2ecf20Sopenharmony_ci "cs3308", 0x82 >> 1, NULL); 24358c2ecf20Sopenharmony_ci break; 24368c2ecf20Sopenharmony_ci case CX23885_BOARD_VIEWCAST_460E: 24378c2ecf20Sopenharmony_ci /* This cs3308 controls the audio from the breakout cable */ 24388c2ecf20Sopenharmony_ci v4l2_i2c_new_subdev(&dev->v4l2_dev, 24398c2ecf20Sopenharmony_ci &dev->i2c_bus[0].i2c_adap, 24408c2ecf20Sopenharmony_ci "cs3308", 0x80 >> 1, NULL); 24418c2ecf20Sopenharmony_ci /* This cs3308 controls the audio from the onboard header */ 24428c2ecf20Sopenharmony_ci v4l2_i2c_new_subdev(&dev->v4l2_dev, 24438c2ecf20Sopenharmony_ci &dev->i2c_bus[0].i2c_adap, 24448c2ecf20Sopenharmony_ci "cs3308", 0x82 >> 1, NULL); 24458c2ecf20Sopenharmony_ci break; 24468c2ecf20Sopenharmony_ci } 24478c2ecf20Sopenharmony_ci 24488c2ecf20Sopenharmony_ci /* AUX-PLL 27MHz CLK */ 24498c2ecf20Sopenharmony_ci switch (dev->board) { 24508c2ecf20Sopenharmony_ci case CX23885_BOARD_NETUP_DUAL_DVBS2_CI: 24518c2ecf20Sopenharmony_ci netup_initialize(dev); 24528c2ecf20Sopenharmony_ci break; 24538c2ecf20Sopenharmony_ci case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF: { 24548c2ecf20Sopenharmony_ci int ret; 24558c2ecf20Sopenharmony_ci const struct firmware *fw; 24568c2ecf20Sopenharmony_ci const char *filename = "dvb-netup-altera-01.fw"; 24578c2ecf20Sopenharmony_ci char *action = "configure"; 24588c2ecf20Sopenharmony_ci static struct netup_card_info cinfo; 24598c2ecf20Sopenharmony_ci struct altera_config netup_config = { 24608c2ecf20Sopenharmony_ci .dev = dev, 24618c2ecf20Sopenharmony_ci .action = action, 24628c2ecf20Sopenharmony_ci .jtag_io = netup_jtag_io, 24638c2ecf20Sopenharmony_ci }; 24648c2ecf20Sopenharmony_ci 24658c2ecf20Sopenharmony_ci netup_initialize(dev); 24668c2ecf20Sopenharmony_ci 24678c2ecf20Sopenharmony_ci netup_get_card_info(&dev->i2c_bus[0].i2c_adap, &cinfo); 24688c2ecf20Sopenharmony_ci if (netup_card_rev) 24698c2ecf20Sopenharmony_ci cinfo.rev = netup_card_rev; 24708c2ecf20Sopenharmony_ci 24718c2ecf20Sopenharmony_ci switch (cinfo.rev) { 24728c2ecf20Sopenharmony_ci case 0x4: 24738c2ecf20Sopenharmony_ci filename = "dvb-netup-altera-04.fw"; 24748c2ecf20Sopenharmony_ci break; 24758c2ecf20Sopenharmony_ci default: 24768c2ecf20Sopenharmony_ci filename = "dvb-netup-altera-01.fw"; 24778c2ecf20Sopenharmony_ci break; 24788c2ecf20Sopenharmony_ci } 24798c2ecf20Sopenharmony_ci pr_info("NetUP card rev=0x%x fw_filename=%s\n", 24808c2ecf20Sopenharmony_ci cinfo.rev, filename); 24818c2ecf20Sopenharmony_ci 24828c2ecf20Sopenharmony_ci ret = request_firmware(&fw, filename, &dev->pci->dev); 24838c2ecf20Sopenharmony_ci if (ret != 0) 24848c2ecf20Sopenharmony_ci pr_err("did not find the firmware file '%s'. You can use <kernel_dir>/scripts/get_dvb_firmware to get the firmware.", 24858c2ecf20Sopenharmony_ci filename); 24868c2ecf20Sopenharmony_ci else 24878c2ecf20Sopenharmony_ci altera_init(&netup_config, fw); 24888c2ecf20Sopenharmony_ci 24898c2ecf20Sopenharmony_ci release_firmware(fw); 24908c2ecf20Sopenharmony_ci break; 24918c2ecf20Sopenharmony_ci } 24928c2ecf20Sopenharmony_ci } 24938c2ecf20Sopenharmony_ci} 2494