OSDN Git Service

iio: frequency: ad9523: Use devm_regulator_get_enable()
authorJonathan Cameron <Jonathan.Cameron@huawei.com>
Sun, 16 Oct 2022 16:34:03 +0000 (17:34 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Wed, 23 Nov 2022 19:44:01 +0000 (19:44 +0000)
This driver only turns the power on at probe and off via a custom
devm_add_action_or_reset() callback. The new devm_regulator_get_enable()
replaces this boilerplate code.

Note that in event of an error on the devm_regulator_get() the driver
would have continued without enabling the regulator which is probably
not a good idea.  So here we handle any error as a reason to fail the
probe(). In theory this may expose breakage on a platform that was
previously papered over but it seems low risk.

Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Michael Hennerich <michael.hennerich@analog.com>
Reviewed-by: Matti Vaittinen <mazziesaccount@gmail.com>
Reviewed-by: Nuno Sá <nuno.sa@analog.com>
Link: https://lore.kernel.org/r/20221016163409.320197-9-jic23@kernel.org
drivers/iio/frequency/ad9523.c

index 97662ca..b391c6e 100644 (file)
@@ -265,7 +265,6 @@ enum {
 
 struct ad9523_state {
        struct spi_device               *spi;
-       struct regulator                *reg;
        struct ad9523_platform_data     *pdata;
        struct iio_chan_spec            ad9523_channels[AD9523_NUM_CHAN];
        struct gpio_desc                *pwrdown_gpio;
@@ -969,13 +968,6 @@ static int ad9523_setup(struct iio_dev *indio_dev)
        return 0;
 }
 
-static void ad9523_reg_disable(void *data)
-{
-       struct regulator *reg = data;
-
-       regulator_disable(reg);
-}
-
 static int ad9523_probe(struct spi_device *spi)
 {
        struct ad9523_platform_data *pdata = spi->dev.platform_data;
@@ -996,17 +988,9 @@ static int ad9523_probe(struct spi_device *spi)
 
        mutex_init(&st->lock);
 
-       st->reg = devm_regulator_get(&spi->dev, "vcc");
-       if (!IS_ERR(st->reg)) {
-               ret = regulator_enable(st->reg);
-               if (ret)
-                       return ret;
-
-               ret = devm_add_action_or_reset(&spi->dev, ad9523_reg_disable,
-                                              st->reg);
-               if (ret)
-                       return ret;
-       }
+       ret = devm_regulator_get_enable(&spi->dev, "vcc");
+       if (ret)
+               return ret;
 
        st->pwrdown_gpio = devm_gpiod_get_optional(&spi->dev, "powerdown",
                GPIOD_OUT_HIGH);