Skip to content

Commit b55e545

Browse files
dlechnunojsa
authored andcommitted
iio: adc: ad7944: use devm_regulator_get_enable_read_voltage
This makes use of the new devm_regulator_get_enable_read_voltage() function to reduce boilerplate code. Signed-off-by: David Lechner <dlechner@baylibre.com> Reviewed-by: Nuno Sa <nuno.sa@analog.com> Link: https://patch.msgid.link/20240612-iio-adc-ref-supply-refactor-v2-5-fa622e7354e9@baylibre.com Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
1 parent 7aa4f42 commit b55e545

File tree

1 file changed

+12
-42
lines changed

1 file changed

+12
-42
lines changed

drivers/iio/adc/ad7944.c

Lines changed: 12 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -464,23 +464,17 @@ static const char * const ad7944_power_supplies[] = {
464464
"avdd", "dvdd", "bvdd", "vio"
465465
};
466466

467-
static void ad7944_ref_disable(void *ref)
468-
{
469-
regulator_disable(ref);
470-
}
471-
472467
static int ad7944_probe(struct spi_device *spi)
473468
{
474469
const struct ad7944_chip_info *chip_info;
475470
struct device *dev = &spi->dev;
476471
struct iio_dev *indio_dev;
477472
struct ad7944_adc *adc;
478-
bool have_refin = false;
479-
struct regulator *ref;
473+
bool have_refin;
480474
struct iio_chan_spec *chain_chan;
481475
unsigned long *chain_scan_masks;
482476
u32 n_chain_dev;
483-
int ret;
477+
int ret, ref_mv;
484478

485479
indio_dev = devm_iio_device_alloc(dev, sizeof(*adc));
486480
if (!indio_dev)
@@ -531,47 +525,23 @@ static int ad7944_probe(struct spi_device *spi)
531525
* - external reference: REF is connected, REFIN is not connected
532526
*/
533527

534-
ref = devm_regulator_get_optional(dev, "ref");
535-
if (IS_ERR(ref)) {
536-
if (PTR_ERR(ref) != -ENODEV)
537-
return dev_err_probe(dev, PTR_ERR(ref),
538-
"failed to get REF supply\n");
528+
ret = devm_regulator_get_enable_read_voltage(dev, "ref");
529+
if (ret < 0 && ret != -ENODEV)
530+
return dev_err_probe(dev, ret, "failed to get REF voltage\n");
539531

540-
ref = NULL;
541-
}
532+
ref_mv = ret == -ENODEV ? 0 : ret / 1000;
542533

543534
ret = devm_regulator_get_enable_optional(dev, "refin");
544-
if (ret == 0)
545-
have_refin = true;
546-
else if (ret != -ENODEV)
547-
return dev_err_probe(dev, ret,
548-
"failed to get and enable REFIN supply\n");
535+
if (ret < 0 && ret != -ENODEV)
536+
return dev_err_probe(dev, ret, "failed to get REFIN voltage\n");
537+
538+
have_refin = ret != -ENODEV;
549539

550-
if (have_refin && ref)
540+
if (have_refin && ref_mv)
551541
return dev_err_probe(dev, -EINVAL,
552542
"cannot have both refin and ref supplies\n");
553543

554-
if (ref) {
555-
ret = regulator_enable(ref);
556-
if (ret)
557-
return dev_err_probe(dev, ret,
558-
"failed to enable REF supply\n");
559-
560-
ret = devm_add_action_or_reset(dev, ad7944_ref_disable, ref);
561-
if (ret)
562-
return ret;
563-
564-
ret = regulator_get_voltage(ref);
565-
if (ret < 0)
566-
return dev_err_probe(dev, ret,
567-
"failed to get REF voltage\n");
568-
569-
/* external reference */
570-
adc->ref_mv = ret / 1000;
571-
} else {
572-
/* internal reference */
573-
adc->ref_mv = AD7944_INTERNAL_REF_MV;
574-
}
544+
adc->ref_mv = ref_mv ?: AD7944_INTERNAL_REF_MV;
575545

576546
adc->cnv = devm_gpiod_get_optional(dev, "cnv", GPIOD_OUT_LOW);
577547
if (IS_ERR(adc->cnv))

0 commit comments

Comments
 (0)