summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatti Vaittinen <mazziesaccount@gmail.com>2025-08-11 11:51:17 +0300
committerJonathan Cameron <Jonathan.Cameron@huawei.com>2025-08-16 13:21:20 +0100
commit0be6a47ec4505df0731ad943ee427b84e4c2a5fb (patch)
treea8b25bfc067ef8e329d52930e9291c819d0448c1
parent5e6847a02e44be0fa8e61d081d64666f6748793e (diff)
downloadlinux-0be6a47ec4505df0731ad943ee427b84e4c2a5fb.tar.gz
linux-0be6a47ec4505df0731ad943ee427b84e4c2a5fb.zip
iio: adc: ad7476: use *_cansleep GPIO APIs
The ad7476 driver supports ADCs which require a GPIO pin to be used to start conversion. The GPIO line status seems to be always toggled from a process context, either from the user-initiated "raw-read conversion", or from a threaded IRQ handler. Furthermore, these ICs are connected via SPI bus, which is usually implemented in a way that the access to the device can sleep. The GPIO here is toggled from the same context which is reading the results over SPI. Thus it seems very likely these GPIOs are toggled from a context which can sleep. Swap the gpiod_set_value() to gpiod_set_value_cansleep() accordinlgy. Suggested-by: Nuno Sá <noname.nuno@gmail.com> Signed-off-by: Matti Vaittinen <mazziesaccount@gmail.com> Reviewed-by: Nuno Sá <nuno.sa@analog.com> Reviewed-by: Andy Shevchenko <andy@kernel.org> Link: https://patch.msgid.link/a2d4b77e9739662797a1609f436b7f9807e1ac67.1754901948.git.mazziesaccount@gmail.com Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
-rw-r--r--drivers/iio/adc/ad7476.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/iio/adc/ad7476.c b/drivers/iio/adc/ad7476.c
index fc701267358e..1445f0f599d9 100644
--- a/drivers/iio/adc/ad7476.c
+++ b/drivers/iio/adc/ad7476.c
@@ -57,9 +57,9 @@ static void ad7091_convst(struct ad7476_state *st)
if (!st->convst_gpio)
return;
- gpiod_set_value(st->convst_gpio, 0);
+ gpiod_set_value_cansleep(st->convst_gpio, 0);
udelay(1); /* CONVST pulse width: 10 ns min */
- gpiod_set_value(st->convst_gpio, 1);
+ gpiod_set_value_cansleep(st->convst_gpio, 1);
udelay(1); /* Conversion time: 650 ns max */
}