[PATCH 06/12] iio: dac: ad5686: consume optional reset signal
From: Rodrigo Alencar via B4 Relay
Date: Tue Jun 02 2026 - 12:40:38 EST
From: Rodrigo Alencar <rodrigo.alencar@xxxxxxxxxx>
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 <rodrigo.alencar@xxxxxxxxxx>
---
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");
+
+ 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