diff --git a/components/esp_pm/pm_impl.c b/components/esp_pm/pm_impl.c index d11f987dbd..ebfa63fb38 100644 --- a/components/esp_pm/pm_impl.c +++ b/components/esp_pm/pm_impl.c @@ -455,6 +455,16 @@ esp_err_t esp_pm_configure(const void* vconfig) res = rtc_clk_cpu_freq_mhz_to_config(min_freq_mhz, &s_cpu_freq_by_mode[PM_MODE_APB_MIN]); assert(res); s_cpu_freq_by_mode[PM_MODE_LIGHT_SLEEP] = s_cpu_freq_by_mode[PM_MODE_APB_MIN]; + + if (config->light_sleep_enable) { + // Enable the wakeup source here because the `esp_sleep_disable_wakeup_source` in the `else` + // branch must be called if corresponding wakeup source is already enabled. + esp_sleep_enable_timer_wakeup(0); + } else if (s_light_sleep_en) { + // Since auto light-sleep will enable the timer wakeup source, to avoid affecting subsequent possible + // deepsleep requests, disable the timer wakeup source here. + esp_sleep_disable_wakeup_source(ESP_SLEEP_WAKEUP_TIMER); + } s_light_sleep_en = config->light_sleep_enable; s_config_changed = true; portEXIT_CRITICAL(&s_switch_lock);