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