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 > >

