Merge tag 'regulator-v6.10' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie...
[linux-2.6-block.git] / drivers / hwmon / da9052-hwmon.c
index 2bd7ae8100d7c83a2407e773da8bb25eccbaf296..7fb0c57dfef5049b61707459120a9b067b1ddb90 100644 (file)
@@ -26,7 +26,6 @@ struct da9052_hwmon {
        struct mutex            hwmon_lock;
        bool                    tsi_as_adc;
        int                     tsiref_mv;
-       struct regulator        *tsiref;
        struct completion       tsidone;
 };
 
@@ -397,7 +396,7 @@ static int da9052_hwmon_probe(struct platform_device *pdev)
        struct device *dev = &pdev->dev;
        struct da9052_hwmon *hwmon;
        struct device *hwmon_dev;
-       int err;
+       int err, tsiref_uv;
 
        hwmon = devm_kzalloc(dev, sizeof(struct da9052_hwmon), GFP_KERNEL);
        if (!hwmon)
@@ -414,32 +413,20 @@ static int da9052_hwmon_probe(struct platform_device *pdev)
                device_property_read_bool(pdev->dev.parent, "dlg,tsi-as-adc");
 
        if (hwmon->tsi_as_adc) {
-               hwmon->tsiref = devm_regulator_get(pdev->dev.parent, "tsiref");
-               if (IS_ERR(hwmon->tsiref)) {
-                       err = PTR_ERR(hwmon->tsiref);
-                       dev_err(&pdev->dev, "failed to get tsiref: %d", err);
-                       return err;
-               }
-
-               err = regulator_enable(hwmon->tsiref);
-               if (err)
-                       return err;
-
-               hwmon->tsiref_mv = regulator_get_voltage(hwmon->tsiref);
-               if (hwmon->tsiref_mv < 0) {
-                       err = hwmon->tsiref_mv;
-                       goto exit_regulator;
-               }
+               tsiref_uv = devm_regulator_get_enable_read_voltage(dev->parent,
+                                                                  "tsiref");
+               if (tsiref_uv < 0)
+                       return dev_err_probe(dev, tsiref_uv,
+                                            "failed to get tsiref voltage\n");
 
                /* convert from microvolt (DT) to millivolt (hwmon) */
-               hwmon->tsiref_mv /= 1000;
+               hwmon->tsiref_mv = tsiref_uv / 1000;
 
                /* TSIREF limits from datasheet */
                if (hwmon->tsiref_mv < 1800 || hwmon->tsiref_mv > 2600) {
                        dev_err(hwmon->da9052->dev, "invalid TSIREF voltage: %d",
                                hwmon->tsiref_mv);
-                       err = -ENXIO;
-                       goto exit_regulator;
+                       return -ENXIO;
                }
 
                /* disable touchscreen features */
@@ -456,7 +443,7 @@ static int da9052_hwmon_probe(struct platform_device *pdev)
                if (err) {
                        dev_err(&pdev->dev, "Failed to register TSIRDY IRQ: %d",
                                err);
-                       goto exit_regulator;
+                       return err;
                }
        }
 
@@ -472,9 +459,6 @@ static int da9052_hwmon_probe(struct platform_device *pdev)
 exit_irq:
        if (hwmon->tsi_as_adc)
                da9052_free_irq(hwmon->da9052, DA9052_IRQ_TSIREADY, hwmon);
-exit_regulator:
-       if (hwmon->tsiref)
-               regulator_disable(hwmon->tsiref);
 
        return err;
 }
@@ -483,10 +467,8 @@ static void da9052_hwmon_remove(struct platform_device *pdev)
 {
        struct da9052_hwmon *hwmon = platform_get_drvdata(pdev);
 
-       if (hwmon->tsi_as_adc) {
+       if (hwmon->tsi_as_adc)
                da9052_free_irq(hwmon->da9052, DA9052_IRQ_TSIREADY, hwmon);
-               regulator_disable(hwmon->tsiref);
-       }
 }
 
 static struct platform_driver da9052_hwmon_driver = {