On Tue, Jun 02, 2026 at 05:33:53PM +0100, Rodrigo Alencar via B4 Relay wrote:
> From: Rodrigo Alencar <[email protected]>
> 
> Add RESET pin GPIO support through an optional reset control, which is
> local to the probe function. Also, include delays for power-up time and
> reset pulse width.
> 
> Signed-off-by: Rodrigo Alencar <[email protected]>
> ---
>  drivers/iio/dac/ad5686.c | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
> 
> diff --git a/drivers/iio/dac/ad5686.c b/drivers/iio/dac/ad5686.c
> index 4a8c587ff116..345ca2436332 100644
> --- a/drivers/iio/dac/ad5686.c
> +++ b/drivers/iio/dac/ad5686.c
> @@ -8,12 +8,14 @@
>  #include <linux/array_size.h>
>  #include <linux/bitfield.h>
>  #include <linux/bitops.h>
> +#include <linux/delay.h>
>  #include <linux/dev_printk.h>
>  #include <linux/errno.h>
>  #include <linux/export.h>
>  #include <linux/kstrtox.h>
>  #include <linux/module.h>
>  #include <linux/regulator/consumer.h>
> +#include <linux/reset.h>
>  #include <linux/sysfs.h>
>  #include <linux/wordpart.h>
>  
> @@ -471,6 +473,7 @@ int ad5686_probe(struct device *dev,
>                const struct ad5686_chip_info *chip_info,
>                const char *name, const struct ad5686_bus_ops *ops)
>  {
> +     struct reset_control *rstc;
>       struct ad5686_state *st;
>       struct iio_dev *indio_dev;
>       int ret, i;
> @@ -506,6 +509,16 @@ int ad5686_probe(struct device *dev,
>               return dev_err_probe(dev, -EINVAL,
>                                    "invalid or not provided vref voltage\n");
>  
> +     rstc = devm_reset_control_get_optional_exclusive(dev, NULL);
> +     if (IS_ERR(rstc))
> +             return dev_err_probe(dev, PTR_ERR(rstc),
> +                                  "Failed to get reset control\n");

On top of what Andy stated, I'm fairly sure
devm_reset_control_get_optional_exclusive() returns with the GPIO
asserted.

> +
> +     udelay(5); /* power-up time */
> +     reset_control_assert(rstc);
> +     udelay(1); /* reset pulse: comfortably bigger than the spec */
> +     reset_control_deassert(rstc);
> +
>       /* Initialize masks to all ones */
>       st->pwr_down_mask = ~0;
>       st->pwr_down_mode = ~0;
> 
> -- 
> 2.43.0
> 
> 

Reply via email to