drivers: nordic: support pin retention for AIN
Devices which use AIN (COMP, LPCOMP, SAADC) don't use pinctrl to
configure their pins, thus pinctrl can't manage pin retention like
is done for other devices. Thus for now, add manually disabling
pin retention to the drivers.
In the future, we should probably use pinctrl for these inputs
as well, at which point this commit can be reverted.
Signed-off-by: Bjarki Arge Andreasen <bjarki.andreasen@nordicsemi.no>
diff --git a/drivers/adc/adc_nrfx_saadc.c b/drivers/adc/adc_nrfx_saadc.c
index 2c56e79..32be982 100644
--- a/drivers/adc/adc_nrfx_saadc.c
+++ b/drivers/adc/adc_nrfx_saadc.c
@@ -16,6 +16,7 @@
#include <zephyr/pm/device_runtime.h>
#include <dmm.h>
#include <soc.h>
+#include <hal/nrf_gpio.h>
LOG_MODULE_REGISTER(adc_nrfx_saadc, CONFIG_ADC_LOG_LEVEL);
@@ -200,6 +201,10 @@
*pin_p = saadc_psels[channel_cfg->input_positive];
+#if NRF_GPIO_HAS_RETENTION_SETCLEAR
+ nrf_gpio_pin_retain_disable(saadc_psels[channel_cfg->input_positive]);
+#endif
+
if (channel_cfg->differential) {
if (channel_cfg->input_negative > ARRAY_SIZE(saadc_psels) ||
(IS_ENABLED(CONFIG_NRF_PLATFORM_HALTIUM) &&
@@ -212,6 +217,12 @@
*pin_n = channel_cfg->input_negative == NRF_SAADC_GND ?
NRF_SAADC_INPUT_DISABLED :
saadc_psels[channel_cfg->input_negative];
+
+#if NRF_GPIO_HAS_RETENTION_SETCLEAR
+ if (channel_cfg->input_negative != NRF_SAADC_GND) {
+ nrf_gpio_pin_retain_disable(saadc_psels[channel_cfg->input_negative]);
+ }
+#endif
} else {
*pin_n = NRF_SAADC_INPUT_DISABLED;
}
diff --git a/drivers/comparator/comparator_nrf_comp.c b/drivers/comparator/comparator_nrf_comp.c
index 6c5acdf..7178c51 100644
--- a/drivers/comparator/comparator_nrf_comp.c
+++ b/drivers/comparator/comparator_nrf_comp.c
@@ -5,6 +5,7 @@
*/
#include <nrfx_comp.h>
+#include <hal/nrf_gpio.h>
#include <zephyr/drivers/comparator/nrf_comp.h>
#include <zephyr/kernel.h>
@@ -249,6 +250,11 @@
}
*nrf = shim_nrf_comp_ain_map[shim];
+
+#if NRF_GPIO_HAS_RETENTION_SETCLEAR
+ nrf_gpio_pin_retain_disable(shim_nrf_comp_ain_map[shim]);
+#endif
+
return 0;
}
#else
diff --git a/drivers/comparator/comparator_nrf_lpcomp.c b/drivers/comparator/comparator_nrf_lpcomp.c
index 6faba2b..dbd58d3 100644
--- a/drivers/comparator/comparator_nrf_lpcomp.c
+++ b/drivers/comparator/comparator_nrf_lpcomp.c
@@ -5,6 +5,7 @@
*/
#include <nrfx_lpcomp.h>
+#include <hal/nrf_gpio.h>
#include <zephyr/drivers/comparator/nrf_lpcomp.h>
#include <zephyr/kernel.h>
@@ -142,6 +143,11 @@
}
*nrf = shim_nrf_comp_ain_map[shim];
+
+#if NRF_GPIO_HAS_RETENTION_SETCLEAR
+ nrf_gpio_pin_retain_disable(shim_nrf_comp_ain_map[shim]);
+#endif
+
return 0;
}
#else