Skip to content

Commit 603ad05

Browse files
committed
fix(esp_hw_support): hold LP_IO mode if LP_PERI domain powerdown in sleep
1 parent 074035a commit 603ad05

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

components/esp_hw_support/port/esp32p4/pmu_sleep.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,10 @@ const pmu_sleep_config_t* pmu_sleep_config_default(
154154

155155
if (dslp) {
156156
config->param.lp_sys.analog_wait_target_cycle = rtc_time_us_to_slowclk(PMU_LP_ANALOG_WAIT_TARGET_TIME_DSLP_US, slowclk_period);
157+
158+
pmu_sleep_digital_config_t digital_default = PMU_SLEEP_DIGITAL_DSLP_CONFIG_DEFAULT(pd_flags);
159+
config->digital = digital_default;
160+
157161
pmu_sleep_analog_config_t analog_default = PMU_SLEEP_ANALOG_DSLP_CONFIG_DEFAULT(pd_flags);
158162
config->analog = analog_default;
159163
} else {
@@ -200,6 +204,7 @@ static void pmu_sleep_power_init(pmu_context_t *ctx, const pmu_sleep_power_confi
200204
static void pmu_sleep_digital_init(pmu_context_t *ctx, const pmu_sleep_digital_config_t *dig)
201205
{
202206
pmu_ll_hp_set_dig_pad_slp_sel (ctx->hal->dev, HP(SLEEP), dig->syscntl.dig_pad_slp_sel);
207+
pmu_ll_hp_set_hold_all_lp_pad (ctx->hal->dev, HP(SLEEP), dig->syscntl.lp_pad_hold_all);
203208
}
204209

205210
static void pmu_sleep_analog_init(pmu_context_t *ctx, const pmu_sleep_analog_config_t *analog, bool dslp)
@@ -255,9 +260,7 @@ void pmu_sleep_init(const pmu_sleep_config_t *config, bool dslp)
255260
{
256261
assert(PMU_instance());
257262
pmu_sleep_power_init(PMU_instance(), &config->power, dslp);
258-
if(!dslp){
259-
pmu_sleep_digital_init(PMU_instance(), &config->digital);
260-
}
263+
pmu_sleep_digital_init(PMU_instance(), &config->digital);
261264
pmu_sleep_analog_init(PMU_instance(), &config->analog, dslp);
262265
pmu_sleep_param_init(PMU_instance(), &config->param, dslp);
263266
}

components/esp_hw_support/port/esp32p4/private_include/pmu_param.h

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,9 +314,18 @@ typedef struct {
314314
pmu_hp_sys_cntl_reg_t syscntl;
315315
} pmu_sleep_digital_config_t;
316316

317+
318+
#define PMU_SLEEP_DIGITAL_DSLP_CONFIG_DEFAULT(pd_flags) { \
319+
.syscntl = { \
320+
.dig_pad_slp_sel = 0, \
321+
.lp_pad_hold_all = (pd_flags & PMU_SLEEP_PD_LP_PERIPH) ? 1 : 0, \
322+
} \
323+
}
324+
317325
#define PMU_SLEEP_DIGITAL_LSLP_CONFIG_DEFAULT(pd_flags) { \
318326
.syscntl = { \
319-
.dig_pad_slp_sel = ((pd_flags) & PMU_SLEEP_PD_TOP) ? 0 : 1, \
327+
.dig_pad_slp_sel = (pd_flags & PMU_SLEEP_PD_TOP) ? 0 : 1, \
328+
.lp_pad_hold_all = (pd_flags & PMU_SLEEP_PD_LP_PERIPH) ? 1 : 0, \
320329
} \
321330
}
322331

0 commit comments

Comments
 (0)