regulator: max597x: Align for simple_mfd_i2c driver
authorNaresh Solanki <naresh.solanki@9elements.com>
Thu, 16 Feb 2023 07:53:01 +0000 (08:53 +0100)
committerMark Brown <broonie@kernel.org>
Thu, 16 Feb 2023 15:54:02 +0000 (15:54 +0000)
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 <Naresh.Solanki@9elements.com>
Link: https://lore.kernel.org/r/20230216075302.68935-1-Naresh.Solanki@9elements.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/regulator/max597x-regulator.c

index ab9dc18..f0fb0f5 100644 (file)
@@ -425,41 +425,59 @@ 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 if (of_device_is_compatible(i2c->dev.of_node, "maxim,max5970"))
+               max597x->num_switches = MAX597x_TYPE_MAX5970;
+       else
+               return -ENODEV;
+
+       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 +485,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;
                }
        }