Skip to content

Commit 41b94bc

Browse files
dlechbroonie
authored andcommitted
iio: addac: ad74115: Use devm_regulator_get_enable_read_voltage()
We can reduce boilerplate code by using devm_regulator_get_enable_read_voltage(). To maintain backwards compatibility in the case a DT does not provide an avdd-supply, we fall back to calling devm_regulator_get_enable() so that there is no change in user-facing behavior (e.g. dummy regulator will still be in sysfs). Also add an informative error message when we failed to get the voltage and knowing the voltage is required while we are touching this. Signed-off-by: David Lechner <dlechner@baylibre.com> Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Link: https://lore.kernel.org/r/20240429-regulator-get-enable-get-votlage-v2-4-b1f11ab766c1@baylibre.com Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent 346fe0c commit 41b94bc

File tree

1 file changed

+15
-25
lines changed

1 file changed

+15
-25
lines changed

drivers/iio/addac/ad74115.c

Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,6 @@ struct ad74115_state {
199199
struct spi_device *spi;
200200
struct regmap *regmap;
201201
struct iio_trigger *trig;
202-
struct regulator *avdd;
203202

204203
/*
205204
* Synchronize consecutive operations when doing a one-shot
@@ -1672,13 +1671,9 @@ static int ad74115_setup(struct iio_dev *indio_dev)
16721671
if (ret)
16731672
return ret;
16741673

1675-
if (val == AD74115_DIN_THRESHOLD_MODE_AVDD) {
1676-
ret = regulator_get_voltage(st->avdd);
1677-
if (ret < 0)
1678-
return ret;
1679-
1680-
st->avdd_mv = ret / 1000;
1681-
}
1674+
if (val == AD74115_DIN_THRESHOLD_MODE_AVDD && !st->avdd_mv)
1675+
return dev_err_probe(dev, -EINVAL,
1676+
"AVDD voltage is required for digital input threshold mode AVDD\n");
16821677

16831678
st->din_threshold_mode = val;
16841679

@@ -1788,11 +1783,6 @@ static int ad74115_reset(struct ad74115_state *st)
17881783
return 0;
17891784
}
17901785

1791-
static void ad74115_regulator_disable(void *data)
1792-
{
1793-
regulator_disable(data);
1794-
}
1795-
17961786
static int ad74115_setup_trigger(struct iio_dev *indio_dev)
17971787
{
17981788
struct ad74115_state *st = iio_priv(indio_dev);
@@ -1855,20 +1845,20 @@ static int ad74115_probe(struct spi_device *spi)
18551845
indio_dev->modes = INDIO_DIRECT_MODE;
18561846
indio_dev->info = &ad74115_info;
18571847

1858-
st->avdd = devm_regulator_get(dev, "avdd");
1859-
if (IS_ERR(st->avdd))
1860-
return PTR_ERR(st->avdd);
1861-
1862-
ret = regulator_enable(st->avdd);
1863-
if (ret) {
1864-
dev_err(dev, "Failed to enable avdd regulator\n");
1865-
return ret;
1848+
ret = devm_regulator_get_enable_read_voltage(dev, "avdd");
1849+
if (ret < 0) {
1850+
/*
1851+
* Since this is both a power supply and only optionally a
1852+
* reference voltage, make sure to enable it even when the
1853+
* voltage is not available.
1854+
*/
1855+
ret = devm_regulator_get_enable(dev, "avdd");
1856+
if (ret)
1857+
return dev_err_probe(dev, ret, "failed to enable avdd\n");
1858+
} else {
1859+
st->avdd_mv = ret / 1000;
18661860
}
18671861

1868-
ret = devm_add_action_or_reset(dev, ad74115_regulator_disable, st->avdd);
1869-
if (ret)
1870-
return ret;
1871-
18721862
ret = devm_regulator_bulk_get_enable(dev, ARRAY_SIZE(regulator_names),
18731863
regulator_names);
18741864
if (ret)

0 commit comments

Comments
 (0)