Merge branch 'fix/fix_io_wakeup_issues' into 'master'

fix(esp_hw_support): make esp_deep_sleep_enable_gpio_wakeup available to PD_TOP lightsleep

See merge request espressif/esp-idf!45337
This commit is contained in:
Wu Zheng Hui
2026-02-09 12:21:31 +08:00
2 changed files with 20 additions and 7 deletions
+11 -7
View File
@@ -372,7 +372,7 @@ static void touch_wakeup_prepare(void);
#if SOC_VBAT_SUPPORTED
static void vbat_under_volt_wakeup_prepare(void);
#endif
#if SOC_GPIO_SUPPORT_HP_PERIPH_PD_SLEEP_WAKEUP && SOC_DEEP_SLEEP_SUPPORTED
#if SOC_GPIO_SUPPORT_HP_PERIPH_PD_SLEEP_WAKEUP
static void esp_sleep_gpio_wakeup_prepare_on_hp_periph_powerdown(void);
#endif
@@ -1039,8 +1039,8 @@ static esp_err_t SLEEP_FN_ATTR esp_sleep_start(uint32_t sleep_flags, uint32_t cl
// for !(s_config.wakeup_triggers & RTC_EXT1_TRIG_EN), ext1 wakeup will be turned off in hardware in the real call to sleep
#endif
#if SOC_GPIO_SUPPORT_HP_PERIPH_PD_SLEEP_WAKEUP && SOC_DEEP_SLEEP_SUPPORTED
if (deep_sleep && (s_config.wakeup_triggers & RTC_GPIO_TRIG_EN)) {
#if SOC_GPIO_SUPPORT_HP_PERIPH_PD_SLEEP_WAKEUP
if ((sleep_flags & RTC_SLEEP_PD_DIG) && (s_config.wakeup_triggers & RTC_GPIO_TRIG_EN)) {
esp_sleep_gpio_wakeup_prepare_on_hp_periph_powerdown();
}
#endif
@@ -1726,6 +1726,10 @@ esp_err_t esp_sleep_disable_wakeup_source(esp_sleep_source_t source)
s_config.wakeup_triggers &= ~RTC_TOUCH_TRIG_EN;
#endif
} else if (CHECK_SOURCE(source, ESP_SLEEP_WAKEUP_GPIO, RTC_GPIO_TRIG_EN)) {
#if SOC_GPIO_SUPPORT_DEEPSLEEP_WAKEUP
s_config.gpio_wakeup_mask = 0;
s_config.gpio_trigger_mode = 0;
#endif
s_config.wakeup_triggers &= ~RTC_GPIO_TRIG_EN;
#if SOC_PMU_SUPPORTED && (SOC_UART_HP_NUM > 2)
} else if (CHECK_SOURCE(source, ESP_SLEEP_WAKEUP_UART, (RTC_UART0_TRIG_EN | RTC_UART1_TRIG_EN | RTC_UART2_TRIG_EN))) {
@@ -2173,7 +2177,7 @@ uint64_t esp_sleep_get_ext1_wakeup_status(void)
#endif // SOC_PM_SUPPORT_EXT1_WAKEUP && SOC_RTCIO_PIN_COUNT > 0
#if SOC_GPIO_SUPPORT_HP_PERIPH_PD_SLEEP_WAKEUP && SOC_DEEP_SLEEP_SUPPORTED
#if SOC_GPIO_SUPPORT_HP_PERIPH_PD_SLEEP_WAKEUP
uint64_t esp_sleep_get_gpio_wakeup_status(void)
{
if (!(esp_sleep_get_wakeup_causes() & BIT(ESP_SLEEP_WAKEUP_GPIO))) {
@@ -2233,12 +2237,12 @@ esp_err_t esp_sleep_enable_gpio_wakeup_on_hp_periph_powerdown(uint64_t gpio_pin_
continue;
}
err = gpio_wakeup_enable_on_hp_periph_powerdown_sleep(gpio_idx, intr_type);
if (err != ESP_OK) return err;
s_config.gpio_wakeup_mask |= BIT(gpio_idx);
if (mode == ESP_GPIO_WAKEUP_GPIO_HIGH) {
s_config.gpio_trigger_mode |= (mode << gpio_idx);
s_config.gpio_trigger_mode |= BIT(gpio_idx);
} else {
s_config.gpio_trigger_mode &= ~(mode << gpio_idx);
s_config.gpio_trigger_mode &= ~BIT(gpio_idx);
}
}
s_config.wakeup_triggers |= RTC_GPIO_TRIG_EN;