Skip to content

Commit 4e30e88

Browse files
igrrespressif-bot
authored andcommitted
sleep: enable sleep reject when entering light sleep
1 parent 440574d commit 4e30e88

File tree

3 files changed

+22
-2
lines changed

3 files changed

+22
-2
lines changed

components/esp32/sleep_modes.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,14 @@ static uint32_t IRAM_ATTR esp_sleep_start(uint32_t pd_flags)
202202
SET_PERI_REG_MASK(RTC_CNTL_STATE0_REG, RTC_CNTL_ULP_CP_WAKEUP_FORCE_EN);
203203
}
204204

205+
uint32_t reject_triggers = 0;
206+
if ((pd_flags & RTC_SLEEP_PD_DIG) == 0 && (s_config.wakeup_triggers & RTC_GPIO_TRIG_EN)) {
207+
/* Light sleep, enable sleep reject for faster return from this function,
208+
* in case the wakeup is already triggerred.
209+
*/
210+
reject_triggers = RTC_CNTL_LIGHT_SLP_REJECT_EN_M | RTC_CNTL_GPIO_REJECT_EN_M;
211+
}
212+
205213
// Enter sleep
206214
rtc_sleep_config_t config = RTC_SLEEP_CONFIG_DEFAULT(pd_flags);
207215
rtc_sleep_init(config);
@@ -211,7 +219,7 @@ static uint32_t IRAM_ATTR esp_sleep_start(uint32_t pd_flags)
211219
s_config.sleep_duration > 0) {
212220
timer_wakeup_prepare();
213221
}
214-
uint32_t result = rtc_sleep_start(s_config.wakeup_triggers, 0);
222+
uint32_t result = rtc_sleep_start(s_config.wakeup_triggers, reject_triggers);
215223

216224
// Restore CPU frequency
217225
rtc_clk_cpu_freq_set_config(&cpu_freq_config);

components/esp32s2/sleep_modes.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,14 @@ static uint32_t IRAM_ATTR esp_sleep_start(uint32_t pd_flags)
207207
touch_wakeup_prepare();
208208
}
209209

210+
uint32_t reject_triggers = 0;
211+
if ((pd_flags & RTC_SLEEP_PD_DIG) == 0) {
212+
/* Light sleep, enable sleep reject for faster return from this function,
213+
* in case the wakeup is already triggerred.
214+
*/
215+
reject_triggers = s_config.wakeup_triggers;
216+
}
217+
210218
// Enter sleep
211219
rtc_sleep_config_t config = RTC_SLEEP_CONFIG_DEFAULT(pd_flags);
212220
rtc_sleep_init(config);
@@ -216,7 +224,8 @@ static uint32_t IRAM_ATTR esp_sleep_start(uint32_t pd_flags)
216224
s_config.sleep_duration > 0) {
217225
timer_wakeup_prepare();
218226
}
219-
uint32_t result = rtc_sleep_start(s_config.wakeup_triggers, 0, 1);
227+
228+
uint32_t result = rtc_sleep_start(s_config.wakeup_triggers, reject_triggers, 1);
220229

221230
// Restore CPU frequency
222231
rtc_clk_cpu_freq_set_config(&cpu_freq_config);

components/soc/src/esp32s2/rtc_sleep.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,9 @@ uint32_t rtc_sleep_start(uint32_t wakeup_opt, uint32_t reject_opt, uint32_t lslp
135135
{
136136
REG_SET_FIELD(RTC_CNTL_WAKEUP_STATE_REG, RTC_CNTL_WAKEUP_ENA, wakeup_opt);
137137
REG_SET_FIELD(RTC_CNTL_SLP_REJECT_CONF_REG, RTC_CNTL_SLEEP_REJECT_ENA, reject_opt);
138+
if (reject_opt != 0) {
139+
REG_SET_BIT(RTC_CNTL_SLP_REJECT_CONF_REG, RTC_CNTL_LIGHT_SLP_REJECT_EN);
140+
}
138141

139142
/* Start entry into sleep mode */
140143
SET_PERI_REG_MASK(RTC_CNTL_STATE0_REG, RTC_CNTL_SLEEP_EN);

0 commit comments

Comments
 (0)