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"); + + 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

