]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
iio: dac: ltc2688: use devm_regulator_get_enable_read_voltage()
authorDavid Lechner <dlechner@baylibre.com>
Wed, 20 Nov 2024 21:33:33 +0000 (15:33 -0600)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sat, 7 Dec 2024 17:47:58 +0000 (17:47 +0000)
Simplify the code by using devm_regulator_get_enable_read_voltage().

Signed-off-by: David Lechner <dlechner@baylibre.com>
Link: https://patch.msgid.link/20241120-iio-regulator-cleanup-round-6-v1-10-d5a5360f7ec3@baylibre.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/dac/ltc2688.c

index 376dca163c91bedadcb948cfac4bc1c80fdc57c4..bdc857c7fa6d8d33cbb81e2d498ea24196a27c13 100644 (file)
@@ -842,7 +842,7 @@ static int ltc2688_channel_config(struct ltc2688_state *st)
        return 0;
 }
 
-static int ltc2688_setup(struct ltc2688_state *st, struct regulator *vref)
+static int ltc2688_setup(struct ltc2688_state *st, bool has_external_vref)
 {
        struct device *dev = &st->spi->dev;
        struct gpio_desc *gpio;
@@ -881,18 +881,13 @@ static int ltc2688_setup(struct ltc2688_state *st, struct regulator *vref)
        if (ret)
                return ret;
 
-       if (!vref)
+       if (!has_external_vref)
                return 0;
 
        return regmap_set_bits(st->regmap, LTC2688_CMD_CONFIG,
                               LTC2688_CONFIG_EXT_REF);
 }
 
-static void ltc2688_disable_regulator(void *regulator)
-{
-       regulator_disable(regulator);
-}
-
 static bool ltc2688_reg_readable(struct device *dev, unsigned int reg)
 {
        switch (reg) {
@@ -947,8 +942,8 @@ static int ltc2688_probe(struct spi_device *spi)
        static const char * const regulators[] = { "vcc", "iovcc" };
        struct ltc2688_state *st;
        struct iio_dev *indio_dev;
-       struct regulator *vref_reg;
        struct device *dev = &spi->dev;
+       bool has_external_vref;
        int ret;
 
        indio_dev = devm_iio_device_alloc(dev, sizeof(*st));
@@ -973,34 +968,15 @@ static int ltc2688_probe(struct spi_device *spi)
        if (ret)
                return dev_err_probe(dev, ret, "Failed to enable regulators\n");
 
-       vref_reg = devm_regulator_get_optional(dev, "vref");
-       if (IS_ERR(vref_reg)) {
-               if (PTR_ERR(vref_reg) != -ENODEV)
-                       return dev_err_probe(dev, PTR_ERR(vref_reg),
-                                            "Failed to get vref regulator");
-
-               vref_reg = NULL;
-               /* internal reference */
-               st->vref = 4096;
-       } else {
-               ret = regulator_enable(vref_reg);
-               if (ret)
-                       return dev_err_probe(dev, ret,
-                                            "Failed to enable vref regulators\n");
-
-               ret = devm_add_action_or_reset(dev, ltc2688_disable_regulator,
-                                              vref_reg);
-               if (ret)
-                       return ret;
-
-               ret = regulator_get_voltage(vref_reg);
-               if (ret < 0)
-                       return dev_err_probe(dev, ret, "Failed to get vref\n");
+       ret = devm_regulator_get_enable_read_voltage(dev, "vref");
+       if (ret < 0 && ret != -ENODEV)
+               return dev_err_probe(dev, ret,
+                                    "Failed to get vref regulator voltage\n");
 
-               st->vref = ret / 1000;
-       }
+       has_external_vref = ret != -ENODEV;
+       st->vref = has_external_vref ? ret / 1000 : 0;
 
-       ret = ltc2688_setup(st, vref_reg);
+       ret = ltc2688_setup(st, has_external_vref);
        if (ret)
                return ret;