diff --git a/components/esp_hw_support/port/esp32s31/pmu_sleep.c b/components/esp_hw_support/port/esp32s31/pmu_sleep.c index 185e078ddb1..798ba0e02aa 100644 --- a/components/esp_hw_support/port/esp32s31/pmu_sleep.c +++ b/components/esp_hw_support/port/esp32s31/pmu_sleep.c @@ -230,30 +230,26 @@ const pmu_sleep_config_t* pmu_sleep_config_default( analog_default.hp_sys.analog.pd_cur = PMU_PD_CUR_SLEEP_ON; analog_default.lp_sys[LP(SLEEP)].analog.pd_cur = PMU_PD_CUR_SLEEP_ON; } - - if (!(sleep_flags & PMU_SLEEP_PD_XTAL)) - { - // Analog parameters in HP_SLEEP - analog_default.hp_sys.analog.pd_cur = PMU_PD_CUR_SLEEP_ON; - analog_default.hp_sys.analog.bias_sleep = PMU_BIASSLP_SLEEP_ON; - analog_default.hp_sys.analog.dbg_atten = PMU_DBG_ATTEN_ACTIVE_DEFAULT; - analog_default.hp_sys.analog.dbias = HP_CALI_DBIAS_DEFAULT; - - // Analog parameters in LP_SLEEP - analog_default.lp_sys[LP(SLEEP)].analog.pd_cur = PMU_PD_CUR_SLEEP_ON; - analog_default.lp_sys[LP(SLEEP)].analog.bias_sleep = PMU_BIASSLP_SLEEP_ON; - analog_default.lp_sys[LP(SLEEP)].analog.dbg_atten = PMU_DBG_ATTEN_ACTIVE_DEFAULT; - } config->analog = analog_default; } - if (sleep_flags & RTC_SLEEP_XTAL_AS_RTC_FAST) { - // Keep XTAL on in HP_SLEEP state if it is the clock source of RTC_FAST - power_default.hp_sys.xtal.xpd_xtal = 1; + if (!(sleep_flags & PMU_SLEEP_PD_XTAL)) { config->analog.hp_sys.analog.pd_cur = PMU_PD_CUR_SLEEP_ON; - config->analog.hp_sys.analog.bias_sleep = PMU_BIASSLP_SLEEP_ON; + config->analog.lp_sys[LP(SLEEP)].analog.pd_cur = PMU_PD_CUR_SLEEP_ON; + } + + if (!(sleep_flags & PMU_SLEEP_PD_XTAL) || !(sleep_flags & PMU_SLEEP_PD_RC_FAST)) { config->analog.hp_sys.analog.dbg_atten = PMU_DBG_ATTEN_ACTIVE_DEFAULT; config->analog.hp_sys.analog.dbias = HP_CALI_DBIAS_DEFAULT; + config->analog.lp_sys[LP(SLEEP)].analog.dbg_atten = PMU_DBG_ATTEN_ACTIVE_DEFAULT; + config->analog.lp_sys[LP(SLEEP)].analog.dbias = LP_CALI_DBIAS_DEFAULT; + } + + if (sleep_flags & RTC_SLEEP_XTAL_AS_RTC_FAST) { + // Keep XTAL on in HP_SLEEP only; LP_SLEEP still follows PD_XTAL. + power_default.hp_sys.xtal.xpd_xtal = 1; + config->analog.hp_sys.analog.dbg_atten = PMU_DBG_ATTEN_ACTIVE_DEFAULT; + config->analog.hp_sys.analog.pd_cur = PMU_PD_CUR_SLEEP_ON; } config->power = power_default;