diff --git a/arch/xtensa/src/esp32/esp32_pm.c b/arch/xtensa/src/esp32/esp32_pm.c index 9c638e101ba..18a44857d6b 100644 --- a/arch/xtensa/src/esp32/esp32_pm.c +++ b/arch/xtensa/src/esp32/esp32_pm.c @@ -577,11 +577,11 @@ static int IRAM_ATTR esp32_sleep_start(uint32_t pd_flags) esp32_timer_wakeup_prepare(); } - esp32_rtc_sleep_start(s_config.wakeup_triggers, 0); + result = esp32_rtc_sleep_start(s_config.wakeup_triggers, 0); /* Restore CPU frequency */ - result = esp32_configure_cpu_freq(cur_freq); + esp32_configure_cpu_freq(cur_freq); esp32_resume_uarts(); return result; diff --git a/arch/xtensa/src/esp32/esp32_rtc.c b/arch/xtensa/src/esp32/esp32_rtc.c index 0966f73c9de..a23cec991e4 100644 --- a/arch/xtensa/src/esp32/esp32_rtc.c +++ b/arch/xtensa/src/esp32/esp32_rtc.c @@ -1353,9 +1353,10 @@ void IRAM_ATTR esp32_rtc_sleep_init(uint32_t flags) * ****************************************************************************/ -void IRAM_ATTR esp32_rtc_sleep_start(uint32_t wakeup_opt, +int IRAM_ATTR esp32_rtc_sleep_start(uint32_t wakeup_opt, uint32_t reject_opt) { + int reject; REG_SET_FIELD(RTC_CNTL_WAKEUP_STATE_REG, RTC_CNTL_WAKEUP_ENA, wakeup_opt); putreg32((uint32_t)reject_opt, RTC_CNTL_SLP_REJECT_CONF_REG); @@ -1368,6 +1369,8 @@ void IRAM_ATTR esp32_rtc_sleep_start(uint32_t wakeup_opt, /* In deep sleep mode, we never get here */ + reject = REG_GET_FIELD(RTC_CNTL_INT_RAW_REG, RTC_CNTL_SLP_REJECT_INT_RAW); + modifyreg32(RTC_CNTL_INT_CLR_REG, 0, RTC_CNTL_SLP_REJECT_INT_CLR | RTC_CNTL_SLP_WAKEUP_INT_CLR); @@ -1375,4 +1378,5 @@ void IRAM_ATTR esp32_rtc_sleep_start(uint32_t wakeup_opt, REG_SET_FIELD(RTC_CNTL_BIAS_CONF_REG, RTC_CNTL_DBG_ATTEN, RTC_CNTL_DBG_ATTEN_DEFAULT); + return reject; } diff --git a/arch/xtensa/src/esp32/esp32_rtc.h b/arch/xtensa/src/esp32/esp32_rtc.h index bf514076951..9615e0ff1e0 100644 --- a/arch/xtensa/src/esp32/esp32_rtc.h +++ b/arch/xtensa/src/esp32/esp32_rtc.h @@ -289,7 +289,7 @@ void esp32_rtc_sleep_init(uint32_t flags); * ****************************************************************************/ -void esp32_rtc_sleep_start(uint32_t wakeup_opt, uint32_t reject_opt); +int esp32_rtc_sleep_start(uint32_t wakeup_opt, uint32_t reject_opt); #ifdef __cplusplus }