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