On Wed, 22 Apr 2026 15:45:48 +0100
Rodrigo Alencar via B4 Relay <[email protected]> 
wrote:

> From: Rodrigo Alencar <[email protected]>
> 
> Get optional regulators for vdd, vlogic and vref input power pins. vdd is
> the input power supply, while vlogic powers the digital side. vref is
> replacing vcc, which is being deprecated, but still supported. The value
> of vref_mv is checked so that a device without internal voltage reference
> cannot proceed without an explicit supply. Error report uses
> dev_err_probe(), which helps debugging an init issue.
> 
> Signed-off-by: Rodrigo Alencar <[email protected]>
> ---
>  drivers/iio/dac/ad5686.c | 19 +++++++++++++++++--
>  1 file changed, 17 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/iio/dac/ad5686.c b/drivers/iio/dac/ad5686.c
> index 07a944311f0e..4989404a7b6e 100644
> --- a/drivers/iio/dac/ad5686.c
> +++ b/drivers/iio/dac/ad5686.c
> @@ -7,6 +7,7 @@
>  
>  #include <linux/array_size.h>
>  #include <linux/bitfield.h>
> +#include <linux/dev_printk.h>
>  #include <linux/err.h>
>  #include <linux/export.h>
>  #include <linux/module.h>
> @@ -471,13 +472,27 @@ int ad5686_probe(struct device *dev,
>       st->read = read;
>       st->chip_info = chip_info;
>  
> -     ret = devm_regulator_get_enable_read_voltage(dev, "vcc");
> +     ret = devm_regulator_get_enable_optional(dev, "vdd");
> +     if (ret && ret != -ENODEV)
> +             return dev_err_probe(dev, ret, "failed to enable vdd supply\n");
vdd is very rarely optional.  Can we not rely on the stub regulator
that will be provided if there isn't one in DT?
> +
> +     ret = devm_regulator_get_enable_optional(dev, "vlogic");
Also doesn't sound very optional.

> +     if (ret && ret != -ENODEV)
> +             return dev_err_probe(dev, ret, "failed to enable vlogic 
> supply\n");
> +
> +     ret = devm_regulator_get_enable_read_voltage(dev, "vref");
> +     if (ret == -ENODEV) /* vcc-supply is deprecated, but supported still */
> +             ret = devm_regulator_get_enable_read_voltage(dev, "vcc");
>       if (ret < 0 && ret != -ENODEV)
> -             return ret;
> +             return dev_err_probe(dev, ret, "failed to read vref voltage\n");
>  
>       st->use_internal_vref = ret == -ENODEV;
>       st->vref_mv = st->use_internal_vref ? st->chip_info->int_vref_mv : ret 
> / 1000;
>  
> +     if (!st->vref_mv)
> +             return dev_err_probe(dev, -EINVAL,
> +                                  "invalid or not provided vref voltage\n");
> +
>       /* Set all the power down mode for all channels to 1K pulldown */
>       st->pwr_down_mode = ~0U;
>       st->pwr_down_mask = ~0U;
> 


Reply via email to