Skip to content

Commit 44e7ac1

Browse files
committed
iio: adc: ad7768: Fix scale reading
ad7768_scale() is dependent on the st->vref voltage. Hence, simplify the code and get the voltage only during probe (as it should not change at runtime) with devm_regulator_get_enable_read_voltage() Fixes: 92cc452 ("iio: adc: ad7768: simplify probe") Co-developed-by: Dragos Bogdan <dragos.bogdan@analog.com> Signed-off-by: Dragos Bogdan <dragos.bogdan@analog.com> Signed-off-by: Nuno Sa <nuno.sa@analog.com>
1 parent fc37eed commit 44e7ac1

File tree

1 file changed

+6
-11
lines changed

1 file changed

+6
-11
lines changed

drivers/iio/adc/ad7768.c

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,9 @@ struct ad7768_avail_freq {
103103
struct ad7768_state {
104104
struct spi_device *spi;
105105
struct mutex lock;
106-
struct regulator *vref;
107106
struct clk *mclk;
108107
struct gpio_chip gpiochip;
108+
u64 vref_nv;
109109
unsigned int datalines;
110110
unsigned int sampling_freq;
111111
enum ad7768_power_modes power_mode;
@@ -473,16 +473,9 @@ static ssize_t ad7768_scale(struct device *dev,
473473
struct iio_dev *indio_dev = dev_to_iio_dev(dev);
474474
const struct iio_chan_spec *chan = &indio_dev->channels[0];
475475
struct ad7768_state *st = ad7768_get_data(indio_dev);
476-
u64 vref_nv;
477476
u64 scale;
478-
int ret;
479477

480-
ret = regulator_get_voltage(st->vref);
481-
if (ret < 0)
482-
return ret;
483-
484-
vref_nv = (u64)ret * NANO * 2;
485-
scale = div64_ul(vref_nv, BIT(chan->scan_type.realbits));
478+
scale = div64_ul(st->vref_nv, BIT(chan->scan_type.realbits));
486479

487480
return scnprintf(buf, PAGE_SIZE, "0.%012llu\n", scale);
488481
}
@@ -806,10 +799,12 @@ static int ad7768_probe(struct spi_device *spi)
806799
if (!st->chip_info)
807800
return -ENODEV;
808801

809-
ret = devm_regulator_get_enable(&spi->dev, "vref");
810-
if (ret)
802+
ret = devm_regulator_get_enable_read_voltage(&spi->dev, "vref");
803+
if (ret < 0)
811804
return ret;
812805

806+
st->vref_nv = (u64)ret * NANO * 2;
807+
813808
st->mclk = devm_clk_get_enabled(&spi->dev, "mclk");
814809
if (IS_ERR(st->mclk))
815810
return PTR_ERR(st->mclk);

0 commit comments

Comments
 (0)