18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * ddbridge-hw.c: Digital Devices bridge hardware maps 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) 2010-2017 Digital Devices GmbH 68c2ecf20Sopenharmony_ci * Ralph Metzler <rjkm@metzlerbros.de> 78c2ecf20Sopenharmony_ci * Marcus Metzler <mocm@metzlerbros.de> 88c2ecf20Sopenharmony_ci * 98c2ecf20Sopenharmony_ci * This program is free software; you can redistribute it and/or 108c2ecf20Sopenharmony_ci * modify it under the terms of the GNU General Public License 118c2ecf20Sopenharmony_ci * version 2 only, as published by the Free Software Foundation. 128c2ecf20Sopenharmony_ci * 138c2ecf20Sopenharmony_ci * This program is distributed in the hope that it will be useful, 148c2ecf20Sopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 158c2ecf20Sopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 168c2ecf20Sopenharmony_ci * GNU General Public License for more details. 178c2ecf20Sopenharmony_ci */ 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci#include "ddbridge.h" 208c2ecf20Sopenharmony_ci#include "ddbridge-hw.h" 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_ci/******************************************************************************/ 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_cistatic const struct ddb_regset octopus_input = { 258c2ecf20Sopenharmony_ci .base = 0x200, 268c2ecf20Sopenharmony_ci .num = 0x08, 278c2ecf20Sopenharmony_ci .size = 0x10, 288c2ecf20Sopenharmony_ci}; 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_cistatic const struct ddb_regset octopus_output = { 318c2ecf20Sopenharmony_ci .base = 0x280, 328c2ecf20Sopenharmony_ci .num = 0x08, 338c2ecf20Sopenharmony_ci .size = 0x10, 348c2ecf20Sopenharmony_ci}; 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_cistatic const struct ddb_regset octopus_idma = { 378c2ecf20Sopenharmony_ci .base = 0x300, 388c2ecf20Sopenharmony_ci .num = 0x08, 398c2ecf20Sopenharmony_ci .size = 0x10, 408c2ecf20Sopenharmony_ci}; 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_cistatic const struct ddb_regset octopus_idma_buf = { 438c2ecf20Sopenharmony_ci .base = 0x2000, 448c2ecf20Sopenharmony_ci .num = 0x08, 458c2ecf20Sopenharmony_ci .size = 0x100, 468c2ecf20Sopenharmony_ci}; 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_cistatic const struct ddb_regset octopus_odma = { 498c2ecf20Sopenharmony_ci .base = 0x380, 508c2ecf20Sopenharmony_ci .num = 0x04, 518c2ecf20Sopenharmony_ci .size = 0x10, 528c2ecf20Sopenharmony_ci}; 538c2ecf20Sopenharmony_ci 548c2ecf20Sopenharmony_cistatic const struct ddb_regset octopus_odma_buf = { 558c2ecf20Sopenharmony_ci .base = 0x2800, 568c2ecf20Sopenharmony_ci .num = 0x04, 578c2ecf20Sopenharmony_ci .size = 0x100, 588c2ecf20Sopenharmony_ci}; 598c2ecf20Sopenharmony_ci 608c2ecf20Sopenharmony_cistatic const struct ddb_regset octopus_i2c = { 618c2ecf20Sopenharmony_ci .base = 0x80, 628c2ecf20Sopenharmony_ci .num = 0x04, 638c2ecf20Sopenharmony_ci .size = 0x20, 648c2ecf20Sopenharmony_ci}; 658c2ecf20Sopenharmony_ci 668c2ecf20Sopenharmony_cistatic const struct ddb_regset octopus_i2c_buf = { 678c2ecf20Sopenharmony_ci .base = 0x1000, 688c2ecf20Sopenharmony_ci .num = 0x04, 698c2ecf20Sopenharmony_ci .size = 0x200, 708c2ecf20Sopenharmony_ci}; 718c2ecf20Sopenharmony_ci 728c2ecf20Sopenharmony_ci/****************************************************************************/ 738c2ecf20Sopenharmony_ci 748c2ecf20Sopenharmony_cistatic const struct ddb_regmap octopus_map = { 758c2ecf20Sopenharmony_ci .irq_base_i2c = 0, 768c2ecf20Sopenharmony_ci .irq_base_idma = 8, 778c2ecf20Sopenharmony_ci .irq_base_odma = 16, 788c2ecf20Sopenharmony_ci .i2c = &octopus_i2c, 798c2ecf20Sopenharmony_ci .i2c_buf = &octopus_i2c_buf, 808c2ecf20Sopenharmony_ci .idma = &octopus_idma, 818c2ecf20Sopenharmony_ci .idma_buf = &octopus_idma_buf, 828c2ecf20Sopenharmony_ci .odma = &octopus_odma, 838c2ecf20Sopenharmony_ci .odma_buf = &octopus_odma_buf, 848c2ecf20Sopenharmony_ci .input = &octopus_input, 858c2ecf20Sopenharmony_ci .output = &octopus_output, 868c2ecf20Sopenharmony_ci}; 878c2ecf20Sopenharmony_ci 888c2ecf20Sopenharmony_ci/****************************************************************************/ 898c2ecf20Sopenharmony_ci 908c2ecf20Sopenharmony_cistatic const struct ddb_info ddb_none = { 918c2ecf20Sopenharmony_ci .type = DDB_NONE, 928c2ecf20Sopenharmony_ci .name = "unknown Digital Devices PCIe card, install newer driver", 938c2ecf20Sopenharmony_ci .regmap = &octopus_map, 948c2ecf20Sopenharmony_ci}; 958c2ecf20Sopenharmony_ci 968c2ecf20Sopenharmony_cistatic const struct ddb_info ddb_octopus = { 978c2ecf20Sopenharmony_ci .type = DDB_OCTOPUS, 988c2ecf20Sopenharmony_ci .name = "Digital Devices Octopus DVB adapter", 998c2ecf20Sopenharmony_ci .regmap = &octopus_map, 1008c2ecf20Sopenharmony_ci .port_num = 4, 1018c2ecf20Sopenharmony_ci .i2c_mask = 0x0f, 1028c2ecf20Sopenharmony_ci}; 1038c2ecf20Sopenharmony_ci 1048c2ecf20Sopenharmony_cistatic const struct ddb_info ddb_octopusv3 = { 1058c2ecf20Sopenharmony_ci .type = DDB_OCTOPUS, 1068c2ecf20Sopenharmony_ci .name = "Digital Devices Octopus V3 DVB adapter", 1078c2ecf20Sopenharmony_ci .regmap = &octopus_map, 1088c2ecf20Sopenharmony_ci .port_num = 4, 1098c2ecf20Sopenharmony_ci .i2c_mask = 0x0f, 1108c2ecf20Sopenharmony_ci}; 1118c2ecf20Sopenharmony_ci 1128c2ecf20Sopenharmony_cistatic const struct ddb_info ddb_octopus_le = { 1138c2ecf20Sopenharmony_ci .type = DDB_OCTOPUS, 1148c2ecf20Sopenharmony_ci .name = "Digital Devices Octopus LE DVB adapter", 1158c2ecf20Sopenharmony_ci .regmap = &octopus_map, 1168c2ecf20Sopenharmony_ci .port_num = 2, 1178c2ecf20Sopenharmony_ci .i2c_mask = 0x03, 1188c2ecf20Sopenharmony_ci}; 1198c2ecf20Sopenharmony_ci 1208c2ecf20Sopenharmony_cistatic const struct ddb_info ddb_octopus_oem = { 1218c2ecf20Sopenharmony_ci .type = DDB_OCTOPUS, 1228c2ecf20Sopenharmony_ci .name = "Digital Devices Octopus OEM", 1238c2ecf20Sopenharmony_ci .regmap = &octopus_map, 1248c2ecf20Sopenharmony_ci .port_num = 4, 1258c2ecf20Sopenharmony_ci .i2c_mask = 0x0f, 1268c2ecf20Sopenharmony_ci .led_num = 1, 1278c2ecf20Sopenharmony_ci .fan_num = 1, 1288c2ecf20Sopenharmony_ci .temp_num = 1, 1298c2ecf20Sopenharmony_ci .temp_bus = 0, 1308c2ecf20Sopenharmony_ci}; 1318c2ecf20Sopenharmony_ci 1328c2ecf20Sopenharmony_cistatic const struct ddb_info ddb_octopus_mini = { 1338c2ecf20Sopenharmony_ci .type = DDB_OCTOPUS, 1348c2ecf20Sopenharmony_ci .name = "Digital Devices Octopus Mini", 1358c2ecf20Sopenharmony_ci .regmap = &octopus_map, 1368c2ecf20Sopenharmony_ci .port_num = 4, 1378c2ecf20Sopenharmony_ci .i2c_mask = 0x0f, 1388c2ecf20Sopenharmony_ci}; 1398c2ecf20Sopenharmony_ci 1408c2ecf20Sopenharmony_cistatic const struct ddb_info ddb_v6 = { 1418c2ecf20Sopenharmony_ci .type = DDB_OCTOPUS, 1428c2ecf20Sopenharmony_ci .name = "Digital Devices Cine S2 V6 DVB adapter", 1438c2ecf20Sopenharmony_ci .regmap = &octopus_map, 1448c2ecf20Sopenharmony_ci .port_num = 3, 1458c2ecf20Sopenharmony_ci .i2c_mask = 0x07, 1468c2ecf20Sopenharmony_ci}; 1478c2ecf20Sopenharmony_ci 1488c2ecf20Sopenharmony_cistatic const struct ddb_info ddb_v6_5 = { 1498c2ecf20Sopenharmony_ci .type = DDB_OCTOPUS, 1508c2ecf20Sopenharmony_ci .name = "Digital Devices Cine S2 V6.5 DVB adapter", 1518c2ecf20Sopenharmony_ci .regmap = &octopus_map, 1528c2ecf20Sopenharmony_ci .port_num = 4, 1538c2ecf20Sopenharmony_ci .i2c_mask = 0x0f, 1548c2ecf20Sopenharmony_ci}; 1558c2ecf20Sopenharmony_ci 1568c2ecf20Sopenharmony_cistatic const struct ddb_info ddb_v7 = { 1578c2ecf20Sopenharmony_ci .type = DDB_OCTOPUS, 1588c2ecf20Sopenharmony_ci .name = "Digital Devices Cine S2 V7 DVB adapter", 1598c2ecf20Sopenharmony_ci .regmap = &octopus_map, 1608c2ecf20Sopenharmony_ci .port_num = 4, 1618c2ecf20Sopenharmony_ci .i2c_mask = 0x0f, 1628c2ecf20Sopenharmony_ci .board_control = 2, 1638c2ecf20Sopenharmony_ci .board_control_2 = 4, 1648c2ecf20Sopenharmony_ci .ts_quirks = TS_QUIRK_REVERSED, 1658c2ecf20Sopenharmony_ci}; 1668c2ecf20Sopenharmony_ci 1678c2ecf20Sopenharmony_cistatic const struct ddb_info ddb_v7a = { 1688c2ecf20Sopenharmony_ci .type = DDB_OCTOPUS, 1698c2ecf20Sopenharmony_ci .name = "Digital Devices Cine S2 V7 Advanced DVB adapter", 1708c2ecf20Sopenharmony_ci .regmap = &octopus_map, 1718c2ecf20Sopenharmony_ci .port_num = 4, 1728c2ecf20Sopenharmony_ci .i2c_mask = 0x0f, 1738c2ecf20Sopenharmony_ci .board_control = 2, 1748c2ecf20Sopenharmony_ci .board_control_2 = 4, 1758c2ecf20Sopenharmony_ci .ts_quirks = TS_QUIRK_REVERSED, 1768c2ecf20Sopenharmony_ci}; 1778c2ecf20Sopenharmony_ci 1788c2ecf20Sopenharmony_cistatic const struct ddb_info ddb_ctv7 = { 1798c2ecf20Sopenharmony_ci .type = DDB_OCTOPUS, 1808c2ecf20Sopenharmony_ci .name = "Digital Devices Cine CT V7 DVB adapter", 1818c2ecf20Sopenharmony_ci .regmap = &octopus_map, 1828c2ecf20Sopenharmony_ci .port_num = 4, 1838c2ecf20Sopenharmony_ci .i2c_mask = 0x0f, 1848c2ecf20Sopenharmony_ci .board_control = 3, 1858c2ecf20Sopenharmony_ci .board_control_2 = 4, 1868c2ecf20Sopenharmony_ci}; 1878c2ecf20Sopenharmony_ci 1888c2ecf20Sopenharmony_cistatic const struct ddb_info ddb_satixs2v3 = { 1898c2ecf20Sopenharmony_ci .type = DDB_OCTOPUS, 1908c2ecf20Sopenharmony_ci .name = "Mystique SaTiX-S2 V3 DVB adapter", 1918c2ecf20Sopenharmony_ci .regmap = &octopus_map, 1928c2ecf20Sopenharmony_ci .port_num = 3, 1938c2ecf20Sopenharmony_ci .i2c_mask = 0x07, 1948c2ecf20Sopenharmony_ci}; 1958c2ecf20Sopenharmony_ci 1968c2ecf20Sopenharmony_cistatic const struct ddb_info ddb_ci = { 1978c2ecf20Sopenharmony_ci .type = DDB_OCTOPUS_CI, 1988c2ecf20Sopenharmony_ci .name = "Digital Devices Octopus CI", 1998c2ecf20Sopenharmony_ci .regmap = &octopus_map, 2008c2ecf20Sopenharmony_ci .port_num = 4, 2018c2ecf20Sopenharmony_ci .i2c_mask = 0x03, 2028c2ecf20Sopenharmony_ci}; 2038c2ecf20Sopenharmony_ci 2048c2ecf20Sopenharmony_cistatic const struct ddb_info ddb_cis = { 2058c2ecf20Sopenharmony_ci .type = DDB_OCTOPUS_CI, 2068c2ecf20Sopenharmony_ci .name = "Digital Devices Octopus CI single", 2078c2ecf20Sopenharmony_ci .regmap = &octopus_map, 2088c2ecf20Sopenharmony_ci .port_num = 3, 2098c2ecf20Sopenharmony_ci .i2c_mask = 0x03, 2108c2ecf20Sopenharmony_ci}; 2118c2ecf20Sopenharmony_ci 2128c2ecf20Sopenharmony_cistatic const struct ddb_info ddb_ci_s2_pro = { 2138c2ecf20Sopenharmony_ci .type = DDB_OCTOPUS_CI, 2148c2ecf20Sopenharmony_ci .name = "Digital Devices Octopus CI S2 Pro", 2158c2ecf20Sopenharmony_ci .regmap = &octopus_map, 2168c2ecf20Sopenharmony_ci .port_num = 4, 2178c2ecf20Sopenharmony_ci .i2c_mask = 0x01, 2188c2ecf20Sopenharmony_ci .board_control = 2, 2198c2ecf20Sopenharmony_ci .board_control_2 = 4, 2208c2ecf20Sopenharmony_ci}; 2218c2ecf20Sopenharmony_ci 2228c2ecf20Sopenharmony_cistatic const struct ddb_info ddb_ci_s2_pro_a = { 2238c2ecf20Sopenharmony_ci .type = DDB_OCTOPUS_CI, 2248c2ecf20Sopenharmony_ci .name = "Digital Devices Octopus CI S2 Pro Advanced", 2258c2ecf20Sopenharmony_ci .regmap = &octopus_map, 2268c2ecf20Sopenharmony_ci .port_num = 4, 2278c2ecf20Sopenharmony_ci .i2c_mask = 0x01, 2288c2ecf20Sopenharmony_ci .board_control = 2, 2298c2ecf20Sopenharmony_ci .board_control_2 = 4, 2308c2ecf20Sopenharmony_ci}; 2318c2ecf20Sopenharmony_ci 2328c2ecf20Sopenharmony_cistatic const struct ddb_info ddb_dvbct = { 2338c2ecf20Sopenharmony_ci .type = DDB_OCTOPUS, 2348c2ecf20Sopenharmony_ci .name = "Digital Devices DVBCT V6.1 DVB adapter", 2358c2ecf20Sopenharmony_ci .regmap = &octopus_map, 2368c2ecf20Sopenharmony_ci .port_num = 3, 2378c2ecf20Sopenharmony_ci .i2c_mask = 0x07, 2388c2ecf20Sopenharmony_ci}; 2398c2ecf20Sopenharmony_ci 2408c2ecf20Sopenharmony_ci/****************************************************************************/ 2418c2ecf20Sopenharmony_ci 2428c2ecf20Sopenharmony_cistatic const struct ddb_info ddb_ct2_8 = { 2438c2ecf20Sopenharmony_ci .type = DDB_OCTOPUS_MAX_CT, 2448c2ecf20Sopenharmony_ci .name = "Digital Devices MAX A8 CT2", 2458c2ecf20Sopenharmony_ci .regmap = &octopus_map, 2468c2ecf20Sopenharmony_ci .port_num = 4, 2478c2ecf20Sopenharmony_ci .i2c_mask = 0x0f, 2488c2ecf20Sopenharmony_ci .board_control = 0x0ff, 2498c2ecf20Sopenharmony_ci .board_control_2 = 0xf00, 2508c2ecf20Sopenharmony_ci .ts_quirks = TS_QUIRK_SERIAL, 2518c2ecf20Sopenharmony_ci .tempmon_irq = 24, 2528c2ecf20Sopenharmony_ci}; 2538c2ecf20Sopenharmony_ci 2548c2ecf20Sopenharmony_cistatic const struct ddb_info ddb_c2t2_8 = { 2558c2ecf20Sopenharmony_ci .type = DDB_OCTOPUS_MAX_CT, 2568c2ecf20Sopenharmony_ci .name = "Digital Devices MAX A8 C2T2", 2578c2ecf20Sopenharmony_ci .regmap = &octopus_map, 2588c2ecf20Sopenharmony_ci .port_num = 4, 2598c2ecf20Sopenharmony_ci .i2c_mask = 0x0f, 2608c2ecf20Sopenharmony_ci .board_control = 0x0ff, 2618c2ecf20Sopenharmony_ci .board_control_2 = 0xf00, 2628c2ecf20Sopenharmony_ci .ts_quirks = TS_QUIRK_SERIAL, 2638c2ecf20Sopenharmony_ci .tempmon_irq = 24, 2648c2ecf20Sopenharmony_ci}; 2658c2ecf20Sopenharmony_ci 2668c2ecf20Sopenharmony_cistatic const struct ddb_info ddb_isdbt_8 = { 2678c2ecf20Sopenharmony_ci .type = DDB_OCTOPUS_MAX_CT, 2688c2ecf20Sopenharmony_ci .name = "Digital Devices MAX A8 ISDBT", 2698c2ecf20Sopenharmony_ci .regmap = &octopus_map, 2708c2ecf20Sopenharmony_ci .port_num = 4, 2718c2ecf20Sopenharmony_ci .i2c_mask = 0x0f, 2728c2ecf20Sopenharmony_ci .board_control = 0x0ff, 2738c2ecf20Sopenharmony_ci .board_control_2 = 0xf00, 2748c2ecf20Sopenharmony_ci .ts_quirks = TS_QUIRK_SERIAL, 2758c2ecf20Sopenharmony_ci .tempmon_irq = 24, 2768c2ecf20Sopenharmony_ci}; 2778c2ecf20Sopenharmony_ci 2788c2ecf20Sopenharmony_cistatic const struct ddb_info ddb_c2t2i_v0_8 = { 2798c2ecf20Sopenharmony_ci .type = DDB_OCTOPUS_MAX_CT, 2808c2ecf20Sopenharmony_ci .name = "Digital Devices MAX A8 C2T2I V0", 2818c2ecf20Sopenharmony_ci .regmap = &octopus_map, 2828c2ecf20Sopenharmony_ci .port_num = 4, 2838c2ecf20Sopenharmony_ci .i2c_mask = 0x0f, 2848c2ecf20Sopenharmony_ci .board_control = 0x0ff, 2858c2ecf20Sopenharmony_ci .board_control_2 = 0xf00, 2868c2ecf20Sopenharmony_ci .ts_quirks = TS_QUIRK_SERIAL | TS_QUIRK_ALT_OSC, 2878c2ecf20Sopenharmony_ci .tempmon_irq = 24, 2888c2ecf20Sopenharmony_ci}; 2898c2ecf20Sopenharmony_ci 2908c2ecf20Sopenharmony_cistatic const struct ddb_info ddb_c2t2i_8 = { 2918c2ecf20Sopenharmony_ci .type = DDB_OCTOPUS_MAX_CT, 2928c2ecf20Sopenharmony_ci .name = "Digital Devices MAX A8 C2T2I", 2938c2ecf20Sopenharmony_ci .regmap = &octopus_map, 2948c2ecf20Sopenharmony_ci .port_num = 4, 2958c2ecf20Sopenharmony_ci .i2c_mask = 0x0f, 2968c2ecf20Sopenharmony_ci .board_control = 0x0ff, 2978c2ecf20Sopenharmony_ci .board_control_2 = 0xf00, 2988c2ecf20Sopenharmony_ci .ts_quirks = TS_QUIRK_SERIAL, 2998c2ecf20Sopenharmony_ci .tempmon_irq = 24, 3008c2ecf20Sopenharmony_ci}; 3018c2ecf20Sopenharmony_ci 3028c2ecf20Sopenharmony_ci/****************************************************************************/ 3038c2ecf20Sopenharmony_ci 3048c2ecf20Sopenharmony_cistatic const struct ddb_info ddb_s2_48 = { 3058c2ecf20Sopenharmony_ci .type = DDB_OCTOPUS_MAX, 3068c2ecf20Sopenharmony_ci .name = "Digital Devices MAX S8 4/8", 3078c2ecf20Sopenharmony_ci .regmap = &octopus_map, 3088c2ecf20Sopenharmony_ci .port_num = 4, 3098c2ecf20Sopenharmony_ci .i2c_mask = 0x01, 3108c2ecf20Sopenharmony_ci .board_control = 1, 3118c2ecf20Sopenharmony_ci .tempmon_irq = 24, 3128c2ecf20Sopenharmony_ci}; 3138c2ecf20Sopenharmony_ci 3148c2ecf20Sopenharmony_cistatic const struct ddb_info ddb_s2x_48 = { 3158c2ecf20Sopenharmony_ci .type = DDB_OCTOPUS_MCI, 3168c2ecf20Sopenharmony_ci .name = "Digital Devices MAX SX8", 3178c2ecf20Sopenharmony_ci .regmap = &octopus_map, 3188c2ecf20Sopenharmony_ci .port_num = 4, 3198c2ecf20Sopenharmony_ci .i2c_mask = 0x00, 3208c2ecf20Sopenharmony_ci .tempmon_irq = 24, 3218c2ecf20Sopenharmony_ci .mci_ports = 4, 3228c2ecf20Sopenharmony_ci .mci_type = 0, 3238c2ecf20Sopenharmony_ci}; 3248c2ecf20Sopenharmony_ci 3258c2ecf20Sopenharmony_ci/****************************************************************************/ 3268c2ecf20Sopenharmony_ci/****************************************************************************/ 3278c2ecf20Sopenharmony_ci/****************************************************************************/ 3288c2ecf20Sopenharmony_ci 3298c2ecf20Sopenharmony_ci#define DDB_DEVID(_device, _subdevice, _info) { \ 3308c2ecf20Sopenharmony_ci .vendor = DDVID, \ 3318c2ecf20Sopenharmony_ci .device = _device, \ 3328c2ecf20Sopenharmony_ci .subvendor = DDVID, \ 3338c2ecf20Sopenharmony_ci .subdevice = _subdevice, \ 3348c2ecf20Sopenharmony_ci .info = &_info } 3358c2ecf20Sopenharmony_ci 3368c2ecf20Sopenharmony_cistatic const struct ddb_device_id ddb_device_ids[] = { 3378c2ecf20Sopenharmony_ci /* PCIe devices */ 3388c2ecf20Sopenharmony_ci DDB_DEVID(0x0002, 0x0001, ddb_octopus), 3398c2ecf20Sopenharmony_ci DDB_DEVID(0x0003, 0x0001, ddb_octopus), 3408c2ecf20Sopenharmony_ci DDB_DEVID(0x0005, 0x0004, ddb_octopusv3), 3418c2ecf20Sopenharmony_ci DDB_DEVID(0x0003, 0x0002, ddb_octopus_le), 3428c2ecf20Sopenharmony_ci DDB_DEVID(0x0003, 0x0003, ddb_octopus_oem), 3438c2ecf20Sopenharmony_ci DDB_DEVID(0x0003, 0x0010, ddb_octopus_mini), 3448c2ecf20Sopenharmony_ci DDB_DEVID(0x0005, 0x0011, ddb_octopus_mini), 3458c2ecf20Sopenharmony_ci DDB_DEVID(0x0003, 0x0020, ddb_v6), 3468c2ecf20Sopenharmony_ci DDB_DEVID(0x0003, 0x0021, ddb_v6_5), 3478c2ecf20Sopenharmony_ci DDB_DEVID(0x0006, 0x0022, ddb_v7), 3488c2ecf20Sopenharmony_ci DDB_DEVID(0x0006, 0x0024, ddb_v7a), 3498c2ecf20Sopenharmony_ci DDB_DEVID(0x0003, 0x0030, ddb_dvbct), 3508c2ecf20Sopenharmony_ci DDB_DEVID(0x0003, 0xdb03, ddb_satixs2v3), 3518c2ecf20Sopenharmony_ci DDB_DEVID(0x0006, 0x0031, ddb_ctv7), 3528c2ecf20Sopenharmony_ci DDB_DEVID(0x0006, 0x0032, ddb_ctv7), 3538c2ecf20Sopenharmony_ci DDB_DEVID(0x0006, 0x0033, ddb_ctv7), 3548c2ecf20Sopenharmony_ci DDB_DEVID(0x0007, 0x0023, ddb_s2_48), 3558c2ecf20Sopenharmony_ci DDB_DEVID(0x0008, 0x0034, ddb_ct2_8), 3568c2ecf20Sopenharmony_ci DDB_DEVID(0x0008, 0x0035, ddb_c2t2_8), 3578c2ecf20Sopenharmony_ci DDB_DEVID(0x0008, 0x0036, ddb_isdbt_8), 3588c2ecf20Sopenharmony_ci DDB_DEVID(0x0008, 0x0037, ddb_c2t2i_v0_8), 3598c2ecf20Sopenharmony_ci DDB_DEVID(0x0008, 0x0038, ddb_c2t2i_8), 3608c2ecf20Sopenharmony_ci DDB_DEVID(0x0009, 0x0025, ddb_s2x_48), 3618c2ecf20Sopenharmony_ci DDB_DEVID(0x0006, 0x0039, ddb_ctv7), 3628c2ecf20Sopenharmony_ci DDB_DEVID(0x0011, 0x0040, ddb_ci), 3638c2ecf20Sopenharmony_ci DDB_DEVID(0x0011, 0x0041, ddb_cis), 3648c2ecf20Sopenharmony_ci DDB_DEVID(0x0012, 0x0042, ddb_ci), 3658c2ecf20Sopenharmony_ci DDB_DEVID(0x0013, 0x0043, ddb_ci_s2_pro), 3668c2ecf20Sopenharmony_ci DDB_DEVID(0x0013, 0x0044, ddb_ci_s2_pro_a), 3678c2ecf20Sopenharmony_ci}; 3688c2ecf20Sopenharmony_ci 3698c2ecf20Sopenharmony_ci/****************************************************************************/ 3708c2ecf20Sopenharmony_ci 3718c2ecf20Sopenharmony_ciconst struct ddb_info *get_ddb_info(u16 vendor, u16 device, 3728c2ecf20Sopenharmony_ci u16 subvendor, u16 subdevice) 3738c2ecf20Sopenharmony_ci{ 3748c2ecf20Sopenharmony_ci int i; 3758c2ecf20Sopenharmony_ci 3768c2ecf20Sopenharmony_ci for (i = 0; i < ARRAY_SIZE(ddb_device_ids); i++) { 3778c2ecf20Sopenharmony_ci const struct ddb_device_id *id = &ddb_device_ids[i]; 3788c2ecf20Sopenharmony_ci 3798c2ecf20Sopenharmony_ci if (vendor == id->vendor && 3808c2ecf20Sopenharmony_ci device == id->device && 3818c2ecf20Sopenharmony_ci subvendor == id->subvendor && 3828c2ecf20Sopenharmony_ci (subdevice == id->subdevice || 3838c2ecf20Sopenharmony_ci id->subdevice == 0xffff)) 3848c2ecf20Sopenharmony_ci return id->info; 3858c2ecf20Sopenharmony_ci } 3868c2ecf20Sopenharmony_ci 3878c2ecf20Sopenharmony_ci return &ddb_none; 3888c2ecf20Sopenharmony_ci} 389