2023-02-14 10:13:33

by Naresh Solanki

[permalink] [raw]
Subject: [PATCH] regulator: max597x: Align for simple_mfd_i2c driver

Use regmap provided by simple_mfd_i2c driver and remove unused variable.
Identify device variant by checking compatible property in DT.

Signed-off-by: Naresh Solanki <[email protected]>
---
drivers/regulator/max597x-regulator.c | 44 ++++++++++++++++++---------
1 file changed, 30 insertions(+), 14 deletions(-)

diff --git a/drivers/regulator/max597x-regulator.c b/drivers/regulator/max597x-regulator.c
index ab9dc18f98e3..5cc695b9d77a 100644
--- a/drivers/regulator/max597x-regulator.c
+++ b/drivers/regulator/max597x-regulator.c
@@ -425,41 +425,57 @@ static int max597x_setup_irq(struct device *dev,

static int max597x_regulator_probe(struct platform_device *pdev)
{
-
-
- struct max597x_data *max597x = dev_get_drvdata(pdev->dev.parent);
+ struct max597x_data *max597x;
+ struct regmap *regmap = dev_get_regmap(pdev->dev.parent, NULL);
struct max597x_regulator *data;
-
+ struct i2c_client *i2c = to_i2c_client(pdev->dev.parent);
struct regulator_config config = { };
struct regulator_dev *rdev;
struct regulator_dev *rdevs[MAX5970_NUM_SWITCHES];
- int num_switches = max597x->num_switches;
+ int num_switches;
int ret, i;

+ if (!regmap)
+ return -EPROBE_DEFER;
+
+ max597x = devm_kzalloc(&i2c->dev, sizeof(struct max597x_data), GFP_KERNEL);
+ if (!max597x)
+ return -ENOMEM;
+
+ i2c_set_clientdata(i2c, max597x);
+
+ if (of_device_is_compatible(i2c->dev.of_node, "maxim,max5978"))
+ max597x->num_switches = MAX597x_TYPE_MAX5978;
+ else
+ max597x->num_switches = MAX597x_TYPE_MAX5970;
+
+ i2c_set_clientdata(i2c, max597x);
+ num_switches = max597x->num_switches;
+
for (i = 0; i < num_switches; i++) {
data =
- devm_kzalloc(max597x->dev, sizeof(struct max597x_regulator),
+ devm_kzalloc(&i2c->dev, sizeof(struct max597x_regulator),
GFP_KERNEL);
if (!data)
return -ENOMEM;

data->num_switches = num_switches;
- data->regmap = max597x->regmap;
+ data->regmap = regmap;

- ret = max597x_adc_range(data->regmap, i, &max597x->irng[i], &max597x->mon_rng[i]);
+ ret = max597x_adc_range(regmap, i, &max597x->irng[i], &max597x->mon_rng[i]);
if (ret < 0)
return ret;

data->irng = max597x->irng[i];
data->mon_rng = max597x->mon_rng[i];

- config.dev = max597x->dev;
+ config.dev = &i2c->dev;
config.driver_data = (void *)data;
config.regmap = data->regmap;
- rdev = devm_regulator_register(max597x->dev,
+ rdev = devm_regulator_register(&i2c->dev,
&regulators[i], &config);
if (IS_ERR(rdev)) {
- dev_err(max597x->dev, "failed to register regulator %s\n",
+ dev_err(&i2c->dev, "failed to register regulator %s\n",
regulators[i].name);
return PTR_ERR(rdev);
}
@@ -467,12 +483,12 @@ static int max597x_regulator_probe(struct platform_device *pdev)
max597x->shunt_micro_ohms[i] = data->shunt_micro_ohms;
}

- if (max597x->irq) {
+ if (i2c->irq) {
ret =
- max597x_setup_irq(max597x->dev, max597x->irq, rdevs, num_switches,
+ max597x_setup_irq(&i2c->dev, i2c->irq, rdevs, num_switches,
data);
if (ret) {
- dev_err(max597x->dev, "IRQ setup failed");
+ dev_err(&i2c->dev, "IRQ setup failed");
return ret;
}
}

base-commit: ea3efd52e96287ce8d93563b1084429686b6e824
--
2.39.1



2023-02-15 14:01:37

by Mark Brown

[permalink] [raw]
Subject: Re: [PATCH] regulator: max597x: Align for simple_mfd_i2c driver

On Tue, Feb 14, 2023 at 11:13:20AM +0100, Naresh Solanki wrote:

> + if (of_device_is_compatible(i2c->dev.of_node, "maxim,max5978"))
> + max597x->num_switches = MAX597x_TYPE_MAX5978;
> + else
> + max597x->num_switches = MAX597x_TYPE_MAX5970;

It looks like this will break if there's any more variants, it
looks like it should be checking each compatible in turn and
erroring out if nothing matches somehow.


Attachments:
(No filename) (410.00 B)
signature.asc (488.00 B)
Download all attachments