From 7aa7e7954eee80f1decd5546098a33d2f43aae0a Mon Sep 17 00:00:00 2001 From: Dylan Laduranty Date: Wed, 17 Apr 2024 19:02:57 +0200 Subject: [PATCH] cpu/nrf5x: implement pm_off() for nRF53/9160 Signed-off-by: Dylan Laduranty --- cpu/nrf5x_common/periph/pm.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/cpu/nrf5x_common/periph/pm.c b/cpu/nrf5x_common/periph/pm.c index 4f09682eb718..946c74438778 100644 --- a/cpu/nrf5x_common/periph/pm.c +++ b/cpu/nrf5x_common/periph/pm.c @@ -27,19 +27,22 @@ #define NRF_POWER NRF_POWER_S #endif -/* TODO: implement proper pm_off for nRF9160 */ +/* Workaround inconsistency between nRF9160 / nRF53 headers */ +#ifdef REGULATORS_SYSTEMOFF_SYSTEMOFF_Enable +#define REGULATORS_SYSTEMOFF_SYSTEMOFF_Enter REGULATORS_SYSTEMOFF_SYSTEMOFF_Enable +#endif + void pm_off(void) { -#if (!defined(CPU_FAM_NRF9160) && !defined(CPU_FAM_NRF53)) -#ifdef CPU_FAM_NRF51 +#if defined(REGULATORS_SYSTEMOFF_SYSTEMOFF_Enter) + NRF_REGULATORS_S->SYSTEMOFF = REGULATORS_SYSTEMOFF_SYSTEMOFF_Enter; +#elif defined(CPU_FAM_NRF51) NRF_POWER->RAMON = 0; #else - for (int i = 0; i < 8; i++) { + for (unsigned int i = 0; i < ARRAY_SIZE(NRF_POWER->RAM); i++) { NRF_POWER->RAM[i].POWERCLR = (POWER_RAM_POWERCLR_S1RETENTION_Msk | POWER_RAM_POWERCLR_S0RETENTION_Msk); } #endif - NRF_POWER->SYSTEMOFF = 1; while (1) {} -#endif /* ndef CPU_FAM_NRF9160 */ }