mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
regulator: ltc3589: Convert enum->pointer for data in the match tables
Convert enum->pointer for data in the match tables, so that the hw differences can be stored in pointer and there by simpily the code. Add struct ltc3589_info for hw differences between the devices and replace ltc3589_variant->ltc3589_info for data in the match table. Simplify the probe() by replacing of_device_get_match_data() and ID lookup for retrieving data by i2c_get_match_data(). Drop enum ltc3589_variant and variant from struct ltc3589_info as there are no users. While at it, dropped trailing comma in the terminator entries for ID table. Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com> Link: https://lore.kernel.org/r/20230828162830.97881-1-biju.das.jz@bp.renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
24d95bb046
commit
7169654ce0
@ -58,12 +58,6 @@
|
||||
#define LTC3589_VRRCR_SW3_RAMP_MASK GENMASK(5, 4)
|
||||
#define LTC3589_VRRCR_LDO2_RAMP_MASK GENMASK(7, 6)
|
||||
|
||||
enum ltc3589_variant {
|
||||
LTC3589,
|
||||
LTC3589_1,
|
||||
LTC3589_2,
|
||||
};
|
||||
|
||||
enum ltc3589_reg {
|
||||
LTC3589_SW1,
|
||||
LTC3589_SW2,
|
||||
@ -76,10 +70,14 @@ enum ltc3589_reg {
|
||||
LTC3589_NUM_REGULATORS,
|
||||
};
|
||||
|
||||
struct ltc3589_info {
|
||||
const unsigned int *volt_table;
|
||||
int fixed_uV;
|
||||
};
|
||||
|
||||
struct ltc3589 {
|
||||
struct regmap *regmap;
|
||||
struct device *dev;
|
||||
enum ltc3589_variant variant;
|
||||
struct regulator_desc regulator_descs[LTC3589_NUM_REGULATORS];
|
||||
struct regulator_dev *regulators[LTC3589_NUM_REGULATORS];
|
||||
};
|
||||
@ -379,8 +377,8 @@ static irqreturn_t ltc3589_isr(int irq, void *dev_id)
|
||||
|
||||
static int ltc3589_probe(struct i2c_client *client)
|
||||
{
|
||||
const struct i2c_device_id *id = i2c_client_get_device_id(client);
|
||||
struct device *dev = &client->dev;
|
||||
const struct ltc3589_info *info;
|
||||
struct regulator_desc *descs;
|
||||
struct ltc3589 *ltc3589;
|
||||
int i, ret;
|
||||
@ -390,21 +388,13 @@ static int ltc3589_probe(struct i2c_client *client)
|
||||
return -ENOMEM;
|
||||
|
||||
i2c_set_clientdata(client, ltc3589);
|
||||
if (client->dev.of_node)
|
||||
ltc3589->variant = (uintptr_t)of_device_get_match_data(&client->dev);
|
||||
else
|
||||
ltc3589->variant = id->driver_data;
|
||||
info = i2c_get_match_data(client);
|
||||
ltc3589->dev = dev;
|
||||
|
||||
descs = ltc3589->regulator_descs;
|
||||
memcpy(descs, ltc3589_regulators, sizeof(ltc3589_regulators));
|
||||
if (ltc3589->variant == LTC3589) {
|
||||
descs[LTC3589_LDO3].fixed_uV = 1800000;
|
||||
descs[LTC3589_LDO4].volt_table = ltc3589_ldo4;
|
||||
} else {
|
||||
descs[LTC3589_LDO3].fixed_uV = 2800000;
|
||||
descs[LTC3589_LDO4].volt_table = ltc3589_12_ldo4;
|
||||
}
|
||||
descs[LTC3589_LDO3].fixed_uV = info->fixed_uV;
|
||||
descs[LTC3589_LDO4].volt_table = info->volt_table;
|
||||
|
||||
ltc3589->regmap = devm_regmap_init_i2c(client, <c3589_regmap_config);
|
||||
if (IS_ERR(ltc3589->regmap)) {
|
||||
@ -444,28 +434,29 @@ static int ltc3589_probe(struct i2c_client *client)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct ltc3589_info ltc3589_info = {
|
||||
.fixed_uV = 1800000,
|
||||
.volt_table = ltc3589_ldo4,
|
||||
};
|
||||
|
||||
static const struct ltc3589_info ltc3589_12_info = {
|
||||
.fixed_uV = 2800000,
|
||||
.volt_table = ltc3589_12_ldo4,
|
||||
};
|
||||
|
||||
static const struct i2c_device_id ltc3589_i2c_id[] = {
|
||||
{ "ltc3589", LTC3589 },
|
||||
{ "ltc3589-1", LTC3589_1 },
|
||||
{ "ltc3589-2", LTC3589_2 },
|
||||
{ "ltc3589", (kernel_ulong_t)<c3589_info },
|
||||
{ "ltc3589-1", (kernel_ulong_t)<c3589_12_info },
|
||||
{ "ltc3589-2", (kernel_ulong_t)<c3589_12_info },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, ltc3589_i2c_id);
|
||||
|
||||
static const struct of_device_id __maybe_unused ltc3589_of_match[] = {
|
||||
{
|
||||
.compatible = "lltc,ltc3589",
|
||||
.data = (void *)LTC3589,
|
||||
},
|
||||
{
|
||||
.compatible = "lltc,ltc3589-1",
|
||||
.data = (void *)LTC3589_1,
|
||||
},
|
||||
{
|
||||
.compatible = "lltc,ltc3589-2",
|
||||
.data = (void *)LTC3589_2,
|
||||
},
|
||||
{ },
|
||||
{ .compatible = "lltc,ltc3589", .data = <c3589_info },
|
||||
{ .compatible = "lltc,ltc3589-1", .data = <c3589_12_info },
|
||||
{ .compatible = "lltc,ltc3589-2", .data = <c3589_12_info },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, ltc3589_of_match);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user