162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * ddbridge-hw.c: Digital Devices bridge hardware maps
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2010-2017 Digital Devices GmbH
662306a36Sopenharmony_ci *                         Ralph Metzler <rjkm@metzlerbros.de>
762306a36Sopenharmony_ci *                         Marcus Metzler <mocm@metzlerbros.de>
862306a36Sopenharmony_ci */
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#include "ddbridge.h"
1162306a36Sopenharmony_ci#include "ddbridge-hw.h"
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci/******************************************************************************/
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_cistatic const struct ddb_regset octopus_input = {
1662306a36Sopenharmony_ci	.base = 0x200,
1762306a36Sopenharmony_ci	.num  = 0x08,
1862306a36Sopenharmony_ci	.size = 0x10,
1962306a36Sopenharmony_ci};
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_cistatic const struct ddb_regset octopus_output = {
2262306a36Sopenharmony_ci	.base = 0x280,
2362306a36Sopenharmony_ci	.num  = 0x08,
2462306a36Sopenharmony_ci	.size = 0x10,
2562306a36Sopenharmony_ci};
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_cistatic const struct ddb_regset octopus_idma = {
2862306a36Sopenharmony_ci	.base = 0x300,
2962306a36Sopenharmony_ci	.num  = 0x08,
3062306a36Sopenharmony_ci	.size = 0x10,
3162306a36Sopenharmony_ci};
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_cistatic const struct ddb_regset octopus_idma_buf = {
3462306a36Sopenharmony_ci	.base = 0x2000,
3562306a36Sopenharmony_ci	.num  = 0x08,
3662306a36Sopenharmony_ci	.size = 0x100,
3762306a36Sopenharmony_ci};
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_cistatic const struct ddb_regset octopus_odma = {
4062306a36Sopenharmony_ci	.base = 0x380,
4162306a36Sopenharmony_ci	.num  = 0x04,
4262306a36Sopenharmony_ci	.size = 0x10,
4362306a36Sopenharmony_ci};
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_cistatic const struct ddb_regset octopus_odma_buf = {
4662306a36Sopenharmony_ci	.base = 0x2800,
4762306a36Sopenharmony_ci	.num  = 0x04,
4862306a36Sopenharmony_ci	.size = 0x100,
4962306a36Sopenharmony_ci};
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_cistatic const struct ddb_regset octopus_i2c = {
5262306a36Sopenharmony_ci	.base = 0x80,
5362306a36Sopenharmony_ci	.num  = 0x04,
5462306a36Sopenharmony_ci	.size = 0x20,
5562306a36Sopenharmony_ci};
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_cistatic const struct ddb_regset octopus_i2c_buf = {
5862306a36Sopenharmony_ci	.base = 0x1000,
5962306a36Sopenharmony_ci	.num  = 0x04,
6062306a36Sopenharmony_ci	.size = 0x200,
6162306a36Sopenharmony_ci};
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci/****************************************************************************/
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_cistatic const struct ddb_regmap octopus_map = {
6662306a36Sopenharmony_ci	.irq_base_i2c = 0,
6762306a36Sopenharmony_ci	.irq_base_idma = 8,
6862306a36Sopenharmony_ci	.irq_base_odma = 16,
6962306a36Sopenharmony_ci	.i2c = &octopus_i2c,
7062306a36Sopenharmony_ci	.i2c_buf = &octopus_i2c_buf,
7162306a36Sopenharmony_ci	.idma = &octopus_idma,
7262306a36Sopenharmony_ci	.idma_buf = &octopus_idma_buf,
7362306a36Sopenharmony_ci	.odma = &octopus_odma,
7462306a36Sopenharmony_ci	.odma_buf = &octopus_odma_buf,
7562306a36Sopenharmony_ci	.input = &octopus_input,
7662306a36Sopenharmony_ci	.output = &octopus_output,
7762306a36Sopenharmony_ci};
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci/****************************************************************************/
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_cistatic const struct ddb_info ddb_none = {
8262306a36Sopenharmony_ci	.type     = DDB_NONE,
8362306a36Sopenharmony_ci	.name     = "unknown Digital Devices PCIe card, install newer driver",
8462306a36Sopenharmony_ci	.regmap   = &octopus_map,
8562306a36Sopenharmony_ci};
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_cistatic const struct ddb_info ddb_octopus = {
8862306a36Sopenharmony_ci	.type     = DDB_OCTOPUS,
8962306a36Sopenharmony_ci	.name     = "Digital Devices Octopus DVB adapter",
9062306a36Sopenharmony_ci	.regmap   = &octopus_map,
9162306a36Sopenharmony_ci	.port_num = 4,
9262306a36Sopenharmony_ci	.i2c_mask = 0x0f,
9362306a36Sopenharmony_ci};
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_cistatic const struct ddb_info ddb_octopusv3 = {
9662306a36Sopenharmony_ci	.type     = DDB_OCTOPUS,
9762306a36Sopenharmony_ci	.name     = "Digital Devices Octopus V3 DVB adapter",
9862306a36Sopenharmony_ci	.regmap   = &octopus_map,
9962306a36Sopenharmony_ci	.port_num = 4,
10062306a36Sopenharmony_ci	.i2c_mask = 0x0f,
10162306a36Sopenharmony_ci};
10262306a36Sopenharmony_ci
10362306a36Sopenharmony_cistatic const struct ddb_info ddb_octopus_le = {
10462306a36Sopenharmony_ci	.type     = DDB_OCTOPUS,
10562306a36Sopenharmony_ci	.name     = "Digital Devices Octopus LE DVB adapter",
10662306a36Sopenharmony_ci	.regmap   = &octopus_map,
10762306a36Sopenharmony_ci	.port_num = 2,
10862306a36Sopenharmony_ci	.i2c_mask = 0x03,
10962306a36Sopenharmony_ci};
11062306a36Sopenharmony_ci
11162306a36Sopenharmony_cistatic const struct ddb_info ddb_octopus_oem = {
11262306a36Sopenharmony_ci	.type     = DDB_OCTOPUS,
11362306a36Sopenharmony_ci	.name     = "Digital Devices Octopus OEM",
11462306a36Sopenharmony_ci	.regmap   = &octopus_map,
11562306a36Sopenharmony_ci	.port_num = 4,
11662306a36Sopenharmony_ci	.i2c_mask = 0x0f,
11762306a36Sopenharmony_ci	.led_num  = 1,
11862306a36Sopenharmony_ci	.fan_num  = 1,
11962306a36Sopenharmony_ci	.temp_num = 1,
12062306a36Sopenharmony_ci	.temp_bus = 0,
12162306a36Sopenharmony_ci};
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_cistatic const struct ddb_info ddb_octopus_mini = {
12462306a36Sopenharmony_ci	.type     = DDB_OCTOPUS,
12562306a36Sopenharmony_ci	.name     = "Digital Devices Octopus Mini",
12662306a36Sopenharmony_ci	.regmap   = &octopus_map,
12762306a36Sopenharmony_ci	.port_num = 4,
12862306a36Sopenharmony_ci	.i2c_mask = 0x0f,
12962306a36Sopenharmony_ci};
13062306a36Sopenharmony_ci
13162306a36Sopenharmony_cistatic const struct ddb_info ddb_v6 = {
13262306a36Sopenharmony_ci	.type     = DDB_OCTOPUS,
13362306a36Sopenharmony_ci	.name     = "Digital Devices Cine S2 V6 DVB adapter",
13462306a36Sopenharmony_ci	.regmap   = &octopus_map,
13562306a36Sopenharmony_ci	.port_num = 3,
13662306a36Sopenharmony_ci	.i2c_mask = 0x07,
13762306a36Sopenharmony_ci};
13862306a36Sopenharmony_ci
13962306a36Sopenharmony_cistatic const struct ddb_info ddb_v6_5 = {
14062306a36Sopenharmony_ci	.type     = DDB_OCTOPUS,
14162306a36Sopenharmony_ci	.name     = "Digital Devices Cine S2 V6.5 DVB adapter",
14262306a36Sopenharmony_ci	.regmap   = &octopus_map,
14362306a36Sopenharmony_ci	.port_num = 4,
14462306a36Sopenharmony_ci	.i2c_mask = 0x0f,
14562306a36Sopenharmony_ci};
14662306a36Sopenharmony_ci
14762306a36Sopenharmony_cistatic const struct ddb_info ddb_v7 = {
14862306a36Sopenharmony_ci	.type     = DDB_OCTOPUS,
14962306a36Sopenharmony_ci	.name     = "Digital Devices Cine S2 V7 DVB adapter",
15062306a36Sopenharmony_ci	.regmap   = &octopus_map,
15162306a36Sopenharmony_ci	.port_num = 4,
15262306a36Sopenharmony_ci	.i2c_mask = 0x0f,
15362306a36Sopenharmony_ci	.board_control   = 2,
15462306a36Sopenharmony_ci	.board_control_2 = 4,
15562306a36Sopenharmony_ci	.ts_quirks = TS_QUIRK_REVERSED,
15662306a36Sopenharmony_ci};
15762306a36Sopenharmony_ci
15862306a36Sopenharmony_cistatic const struct ddb_info ddb_v7a = {
15962306a36Sopenharmony_ci	.type     = DDB_OCTOPUS,
16062306a36Sopenharmony_ci	.name     = "Digital Devices Cine S2 V7 Advanced DVB adapter",
16162306a36Sopenharmony_ci	.regmap   = &octopus_map,
16262306a36Sopenharmony_ci	.port_num = 4,
16362306a36Sopenharmony_ci	.i2c_mask = 0x0f,
16462306a36Sopenharmony_ci	.board_control   = 2,
16562306a36Sopenharmony_ci	.board_control_2 = 4,
16662306a36Sopenharmony_ci	.ts_quirks = TS_QUIRK_REVERSED,
16762306a36Sopenharmony_ci};
16862306a36Sopenharmony_ci
16962306a36Sopenharmony_cistatic const struct ddb_info ddb_ctv7 = {
17062306a36Sopenharmony_ci	.type     = DDB_OCTOPUS,
17162306a36Sopenharmony_ci	.name     = "Digital Devices Cine CT V7 DVB adapter",
17262306a36Sopenharmony_ci	.regmap   = &octopus_map,
17362306a36Sopenharmony_ci	.port_num = 4,
17462306a36Sopenharmony_ci	.i2c_mask = 0x0f,
17562306a36Sopenharmony_ci	.board_control   = 3,
17662306a36Sopenharmony_ci	.board_control_2 = 4,
17762306a36Sopenharmony_ci};
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_cistatic const struct ddb_info ddb_satixs2v3 = {
18062306a36Sopenharmony_ci	.type     = DDB_OCTOPUS,
18162306a36Sopenharmony_ci	.name     = "Mystique SaTiX-S2 V3 DVB adapter",
18262306a36Sopenharmony_ci	.regmap   = &octopus_map,
18362306a36Sopenharmony_ci	.port_num = 3,
18462306a36Sopenharmony_ci	.i2c_mask = 0x07,
18562306a36Sopenharmony_ci};
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_cistatic const struct ddb_info ddb_ci = {
18862306a36Sopenharmony_ci	.type     = DDB_OCTOPUS_CI,
18962306a36Sopenharmony_ci	.name     = "Digital Devices Octopus CI",
19062306a36Sopenharmony_ci	.regmap   = &octopus_map,
19162306a36Sopenharmony_ci	.port_num = 4,
19262306a36Sopenharmony_ci	.i2c_mask = 0x03,
19362306a36Sopenharmony_ci};
19462306a36Sopenharmony_ci
19562306a36Sopenharmony_cistatic const struct ddb_info ddb_cis = {
19662306a36Sopenharmony_ci	.type     = DDB_OCTOPUS_CI,
19762306a36Sopenharmony_ci	.name     = "Digital Devices Octopus CI single",
19862306a36Sopenharmony_ci	.regmap   = &octopus_map,
19962306a36Sopenharmony_ci	.port_num = 3,
20062306a36Sopenharmony_ci	.i2c_mask = 0x03,
20162306a36Sopenharmony_ci};
20262306a36Sopenharmony_ci
20362306a36Sopenharmony_cistatic const struct ddb_info ddb_ci_s2_pro = {
20462306a36Sopenharmony_ci	.type     = DDB_OCTOPUS_CI,
20562306a36Sopenharmony_ci	.name     = "Digital Devices Octopus CI S2 Pro",
20662306a36Sopenharmony_ci	.regmap   = &octopus_map,
20762306a36Sopenharmony_ci	.port_num = 4,
20862306a36Sopenharmony_ci	.i2c_mask = 0x01,
20962306a36Sopenharmony_ci	.board_control   = 2,
21062306a36Sopenharmony_ci	.board_control_2 = 4,
21162306a36Sopenharmony_ci};
21262306a36Sopenharmony_ci
21362306a36Sopenharmony_cistatic const struct ddb_info ddb_ci_s2_pro_a = {
21462306a36Sopenharmony_ci	.type     = DDB_OCTOPUS_CI,
21562306a36Sopenharmony_ci	.name     = "Digital Devices Octopus CI S2 Pro Advanced",
21662306a36Sopenharmony_ci	.regmap   = &octopus_map,
21762306a36Sopenharmony_ci	.port_num = 4,
21862306a36Sopenharmony_ci	.i2c_mask = 0x01,
21962306a36Sopenharmony_ci	.board_control   = 2,
22062306a36Sopenharmony_ci	.board_control_2 = 4,
22162306a36Sopenharmony_ci};
22262306a36Sopenharmony_ci
22362306a36Sopenharmony_cistatic const struct ddb_info ddb_dvbct = {
22462306a36Sopenharmony_ci	.type     = DDB_OCTOPUS,
22562306a36Sopenharmony_ci	.name     = "Digital Devices DVBCT V6.1 DVB adapter",
22662306a36Sopenharmony_ci	.regmap   = &octopus_map,
22762306a36Sopenharmony_ci	.port_num = 3,
22862306a36Sopenharmony_ci	.i2c_mask = 0x07,
22962306a36Sopenharmony_ci};
23062306a36Sopenharmony_ci
23162306a36Sopenharmony_ci/****************************************************************************/
23262306a36Sopenharmony_ci
23362306a36Sopenharmony_cistatic const struct ddb_info ddb_ct2_8 = {
23462306a36Sopenharmony_ci	.type     = DDB_OCTOPUS_MAX_CT,
23562306a36Sopenharmony_ci	.name     = "Digital Devices MAX A8 CT2",
23662306a36Sopenharmony_ci	.regmap   = &octopus_map,
23762306a36Sopenharmony_ci	.port_num = 4,
23862306a36Sopenharmony_ci	.i2c_mask = 0x0f,
23962306a36Sopenharmony_ci	.board_control   = 0x0ff,
24062306a36Sopenharmony_ci	.board_control_2 = 0xf00,
24162306a36Sopenharmony_ci	.ts_quirks = TS_QUIRK_SERIAL,
24262306a36Sopenharmony_ci	.tempmon_irq = 24,
24362306a36Sopenharmony_ci};
24462306a36Sopenharmony_ci
24562306a36Sopenharmony_cistatic const struct ddb_info ddb_c2t2_8 = {
24662306a36Sopenharmony_ci	.type     = DDB_OCTOPUS_MAX_CT,
24762306a36Sopenharmony_ci	.name     = "Digital Devices MAX A8 C2T2",
24862306a36Sopenharmony_ci	.regmap   = &octopus_map,
24962306a36Sopenharmony_ci	.port_num = 4,
25062306a36Sopenharmony_ci	.i2c_mask = 0x0f,
25162306a36Sopenharmony_ci	.board_control   = 0x0ff,
25262306a36Sopenharmony_ci	.board_control_2 = 0xf00,
25362306a36Sopenharmony_ci	.ts_quirks = TS_QUIRK_SERIAL,
25462306a36Sopenharmony_ci	.tempmon_irq = 24,
25562306a36Sopenharmony_ci};
25662306a36Sopenharmony_ci
25762306a36Sopenharmony_cistatic const struct ddb_info ddb_isdbt_8 = {
25862306a36Sopenharmony_ci	.type     = DDB_OCTOPUS_MAX_CT,
25962306a36Sopenharmony_ci	.name     = "Digital Devices MAX A8 ISDBT",
26062306a36Sopenharmony_ci	.regmap   = &octopus_map,
26162306a36Sopenharmony_ci	.port_num = 4,
26262306a36Sopenharmony_ci	.i2c_mask = 0x0f,
26362306a36Sopenharmony_ci	.board_control   = 0x0ff,
26462306a36Sopenharmony_ci	.board_control_2 = 0xf00,
26562306a36Sopenharmony_ci	.ts_quirks = TS_QUIRK_SERIAL,
26662306a36Sopenharmony_ci	.tempmon_irq = 24,
26762306a36Sopenharmony_ci};
26862306a36Sopenharmony_ci
26962306a36Sopenharmony_cistatic const struct ddb_info ddb_c2t2i_v0_8 = {
27062306a36Sopenharmony_ci	.type     = DDB_OCTOPUS_MAX_CT,
27162306a36Sopenharmony_ci	.name     = "Digital Devices MAX A8 C2T2I V0",
27262306a36Sopenharmony_ci	.regmap   = &octopus_map,
27362306a36Sopenharmony_ci	.port_num = 4,
27462306a36Sopenharmony_ci	.i2c_mask = 0x0f,
27562306a36Sopenharmony_ci	.board_control   = 0x0ff,
27662306a36Sopenharmony_ci	.board_control_2 = 0xf00,
27762306a36Sopenharmony_ci	.ts_quirks = TS_QUIRK_SERIAL | TS_QUIRK_ALT_OSC,
27862306a36Sopenharmony_ci	.tempmon_irq = 24,
27962306a36Sopenharmony_ci};
28062306a36Sopenharmony_ci
28162306a36Sopenharmony_cistatic const struct ddb_info ddb_c2t2i_8 = {
28262306a36Sopenharmony_ci	.type     = DDB_OCTOPUS_MAX_CT,
28362306a36Sopenharmony_ci	.name     = "Digital Devices MAX A8 C2T2I",
28462306a36Sopenharmony_ci	.regmap   = &octopus_map,
28562306a36Sopenharmony_ci	.port_num = 4,
28662306a36Sopenharmony_ci	.i2c_mask = 0x0f,
28762306a36Sopenharmony_ci	.board_control   = 0x0ff,
28862306a36Sopenharmony_ci	.board_control_2 = 0xf00,
28962306a36Sopenharmony_ci	.ts_quirks = TS_QUIRK_SERIAL,
29062306a36Sopenharmony_ci	.tempmon_irq = 24,
29162306a36Sopenharmony_ci};
29262306a36Sopenharmony_ci
29362306a36Sopenharmony_ci/****************************************************************************/
29462306a36Sopenharmony_ci
29562306a36Sopenharmony_cistatic const struct ddb_info ddb_s2_48 = {
29662306a36Sopenharmony_ci	.type     = DDB_OCTOPUS_MAX,
29762306a36Sopenharmony_ci	.name     = "Digital Devices MAX S8 4/8",
29862306a36Sopenharmony_ci	.regmap   = &octopus_map,
29962306a36Sopenharmony_ci	.port_num = 4,
30062306a36Sopenharmony_ci	.i2c_mask = 0x01,
30162306a36Sopenharmony_ci	.board_control = 1,
30262306a36Sopenharmony_ci	.tempmon_irq = 24,
30362306a36Sopenharmony_ci};
30462306a36Sopenharmony_ci
30562306a36Sopenharmony_cistatic const struct ddb_info ddb_s2x_48 = {
30662306a36Sopenharmony_ci	.type     = DDB_OCTOPUS_MCI,
30762306a36Sopenharmony_ci	.name     = "Digital Devices MAX SX8",
30862306a36Sopenharmony_ci	.regmap   = &octopus_map,
30962306a36Sopenharmony_ci	.port_num = 4,
31062306a36Sopenharmony_ci	.i2c_mask = 0x00,
31162306a36Sopenharmony_ci	.tempmon_irq = 24,
31262306a36Sopenharmony_ci	.mci_ports = 4,
31362306a36Sopenharmony_ci	.mci_type = 0,
31462306a36Sopenharmony_ci};
31562306a36Sopenharmony_ci
31662306a36Sopenharmony_ci/****************************************************************************/
31762306a36Sopenharmony_ci/****************************************************************************/
31862306a36Sopenharmony_ci/****************************************************************************/
31962306a36Sopenharmony_ci
32062306a36Sopenharmony_ci#define DDB_DEVID(_device, _subdevice, _info) { \
32162306a36Sopenharmony_ci	.vendor = DDVID, \
32262306a36Sopenharmony_ci	.device = _device, \
32362306a36Sopenharmony_ci	.subvendor = DDVID, \
32462306a36Sopenharmony_ci	.subdevice = _subdevice, \
32562306a36Sopenharmony_ci	.info = &_info }
32662306a36Sopenharmony_ci
32762306a36Sopenharmony_cistatic const struct ddb_device_id ddb_device_ids[] = {
32862306a36Sopenharmony_ci	/* PCIe devices */
32962306a36Sopenharmony_ci	DDB_DEVID(0x0002, 0x0001, ddb_octopus),
33062306a36Sopenharmony_ci	DDB_DEVID(0x0003, 0x0001, ddb_octopus),
33162306a36Sopenharmony_ci	DDB_DEVID(0x0005, 0x0004, ddb_octopusv3),
33262306a36Sopenharmony_ci	DDB_DEVID(0x0003, 0x0002, ddb_octopus_le),
33362306a36Sopenharmony_ci	DDB_DEVID(0x0003, 0x0003, ddb_octopus_oem),
33462306a36Sopenharmony_ci	DDB_DEVID(0x0003, 0x0010, ddb_octopus_mini),
33562306a36Sopenharmony_ci	DDB_DEVID(0x0005, 0x0011, ddb_octopus_mini),
33662306a36Sopenharmony_ci	DDB_DEVID(0x0003, 0x0020, ddb_v6),
33762306a36Sopenharmony_ci	DDB_DEVID(0x0003, 0x0021, ddb_v6_5),
33862306a36Sopenharmony_ci	DDB_DEVID(0x0006, 0x0022, ddb_v7),
33962306a36Sopenharmony_ci	DDB_DEVID(0x0006, 0x0024, ddb_v7a),
34062306a36Sopenharmony_ci	DDB_DEVID(0x0003, 0x0030, ddb_dvbct),
34162306a36Sopenharmony_ci	DDB_DEVID(0x0003, 0xdb03, ddb_satixs2v3),
34262306a36Sopenharmony_ci	DDB_DEVID(0x0006, 0x0031, ddb_ctv7),
34362306a36Sopenharmony_ci	DDB_DEVID(0x0006, 0x0032, ddb_ctv7),
34462306a36Sopenharmony_ci	DDB_DEVID(0x0006, 0x0033, ddb_ctv7),
34562306a36Sopenharmony_ci	DDB_DEVID(0x0007, 0x0023, ddb_s2_48),
34662306a36Sopenharmony_ci	DDB_DEVID(0x0008, 0x0034, ddb_ct2_8),
34762306a36Sopenharmony_ci	DDB_DEVID(0x0008, 0x0035, ddb_c2t2_8),
34862306a36Sopenharmony_ci	DDB_DEVID(0x0008, 0x0036, ddb_isdbt_8),
34962306a36Sopenharmony_ci	DDB_DEVID(0x0008, 0x0037, ddb_c2t2i_v0_8),
35062306a36Sopenharmony_ci	DDB_DEVID(0x0008, 0x0038, ddb_c2t2i_8),
35162306a36Sopenharmony_ci	DDB_DEVID(0x0009, 0x0025, ddb_s2x_48),
35262306a36Sopenharmony_ci	DDB_DEVID(0x0006, 0x0039, ddb_ctv7),
35362306a36Sopenharmony_ci	DDB_DEVID(0x0011, 0x0040, ddb_ci),
35462306a36Sopenharmony_ci	DDB_DEVID(0x0011, 0x0041, ddb_cis),
35562306a36Sopenharmony_ci	DDB_DEVID(0x0012, 0x0042, ddb_ci),
35662306a36Sopenharmony_ci	DDB_DEVID(0x0013, 0x0043, ddb_ci_s2_pro),
35762306a36Sopenharmony_ci	DDB_DEVID(0x0013, 0x0044, ddb_ci_s2_pro_a),
35862306a36Sopenharmony_ci};
35962306a36Sopenharmony_ci
36062306a36Sopenharmony_ci/****************************************************************************/
36162306a36Sopenharmony_ci
36262306a36Sopenharmony_ciconst struct ddb_info *get_ddb_info(u16 vendor, u16 device,
36362306a36Sopenharmony_ci				    u16 subvendor, u16 subdevice)
36462306a36Sopenharmony_ci{
36562306a36Sopenharmony_ci	int i;
36662306a36Sopenharmony_ci
36762306a36Sopenharmony_ci	for (i = 0; i < ARRAY_SIZE(ddb_device_ids); i++) {
36862306a36Sopenharmony_ci		const struct ddb_device_id *id = &ddb_device_ids[i];
36962306a36Sopenharmony_ci
37062306a36Sopenharmony_ci		if (vendor == id->vendor &&
37162306a36Sopenharmony_ci		    device == id->device &&
37262306a36Sopenharmony_ci		    subvendor == id->subvendor &&
37362306a36Sopenharmony_ci		    (subdevice == id->subdevice ||
37462306a36Sopenharmony_ci		     id->subdevice == 0xffff))
37562306a36Sopenharmony_ci			return id->info;
37662306a36Sopenharmony_ci	}
37762306a36Sopenharmony_ci
37862306a36Sopenharmony_ci	return &ddb_none;
37962306a36Sopenharmony_ci}
380