OSDN Git Service

iio: pressure: ms5611: Use devm_regulator_get_enable()
authorJonathan Cameron <Jonathan.Cameron@huawei.com>
Sun, 16 Oct 2022 16:34:08 +0000 (17:34 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Wed, 28 Dec 2022 17:19:45 +0000 (17:19 +0000)
This driver only turns the power on at probe and off at remove.
The new devm_regulator_get_enable() replaces this boilerplate code.
Some additional refactoring to drop now unnecessary unwinding after
this change.

Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Tomasz Duszynski <tduszyns@gmail.com>
Reviewed-by: Matti Vaittinen <mazziesaccount@gmail.com>
Link: https://lore.kernel.org/r/20221016163409.320197-14-jic23@kernel.org
drivers/iio/pressure/ms5611.h
drivers/iio/pressure/ms5611_core.c

index 550b75b..6656ec9 100644 (file)
@@ -13,8 +13,6 @@
 #include <linux/iio/iio.h>
 #include <linux/mutex.h>
 
-struct regulator;
-
 #define MS5611_RESET                   0x1e
 #define MS5611_READ_ADC                        0x00
 #define MS5611_READ_PROM_WORD          0xA0
@@ -52,7 +50,6 @@ struct ms5611_state {
 
        int (*compensate_temp_and_pressure)(struct ms5611_state *st, s32 *temp,
                                          s32 *pressure);
-       struct regulator *vdd;
 };
 
 int ms5611_probe(struct iio_dev *indio_dev, struct device *dev,
index c564a1d..a80f1d6 100644 (file)
@@ -380,40 +380,21 @@ static const struct iio_info ms5611_info = {
 static int ms5611_init(struct iio_dev *indio_dev)
 {
        int ret;
-       struct ms5611_state *st = iio_priv(indio_dev);
 
        /* Enable attached regulator if any. */
-       st->vdd = devm_regulator_get(indio_dev->dev.parent, "vdd");
-       if (IS_ERR(st->vdd))
-               return PTR_ERR(st->vdd);
-
-       ret = regulator_enable(st->vdd);
-       if (ret) {
-               dev_err(indio_dev->dev.parent,
-                       "failed to enable Vdd supply: %d\n", ret);
+       ret = devm_regulator_get_enable(indio_dev->dev.parent, "vdd");
+       if (ret)
                return ret;
-       }
 
        ret = ms5611_reset(indio_dev);
        if (ret < 0)
-               goto err_regulator_disable;
+               return ret;
 
        ret = ms5611_read_prom(indio_dev);
        if (ret < 0)
-               goto err_regulator_disable;
+               return ret;
 
        return 0;
-
-err_regulator_disable:
-       regulator_disable(st->vdd);
-       return ret;
-}
-
-static void ms5611_fini(const struct iio_dev *indio_dev)
-{
-       const struct ms5611_state *st = iio_priv(indio_dev);
-
-       regulator_disable(st->vdd);
 }
 
 int ms5611_probe(struct iio_dev *indio_dev, struct device *dev,
@@ -457,7 +438,7 @@ int ms5611_probe(struct iio_dev *indio_dev, struct device *dev,
                                         ms5611_trigger_handler, NULL);
        if (ret < 0) {
                dev_err(dev, "iio triggered buffer setup failed\n");
-               goto err_fini;
+               return ret;
        }
 
        ret = iio_device_register(indio_dev);
@@ -470,8 +451,6 @@ int ms5611_probe(struct iio_dev *indio_dev, struct device *dev,
 
 err_buffer_cleanup:
        iio_triggered_buffer_cleanup(indio_dev);
-err_fini:
-       ms5611_fini(indio_dev);
        return ret;
 }
 EXPORT_SYMBOL_NS(ms5611_probe, IIO_MS5611);
@@ -480,7 +459,6 @@ void ms5611_remove(struct iio_dev *indio_dev)
 {
        iio_device_unregister(indio_dev);
        iio_triggered_buffer_cleanup(indio_dev);
-       ms5611_fini(indio_dev);
 }
 EXPORT_SYMBOL_NS(ms5611_remove, IIO_MS5611);