mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-02 20:24:32 +02:00
sleep: fix gpio wakeup not working properly in some cases
Before this fix, when we call esp_pm_configure after gpio_wakeup_enable, the configuration of GPIO in sleep state in gpio_wakeup_enable will be overwritten by esp_pm_configure.
This commit is contained in:
@@ -573,7 +573,7 @@ esp_err_t gpio_wakeup_enable(gpio_num_t gpio_num, gpio_int_type_t intr_type)
|
|||||||
#endif
|
#endif
|
||||||
portENTER_CRITICAL(&gpio_context.gpio_spinlock);
|
portENTER_CRITICAL(&gpio_context.gpio_spinlock);
|
||||||
gpio_hal_wakeup_enable(gpio_context.gpio_hal, gpio_num, intr_type);
|
gpio_hal_wakeup_enable(gpio_context.gpio_hal, gpio_num, intr_type);
|
||||||
#if CONFIG_ESP32C3_LIGHTSLEEP_GPIO_RESET_WORKAROUND
|
#if CONFIG_ESP32C3_LIGHTSLEEP_GPIO_RESET_WORKAROUND || CONFIG_PM_SLP_DISABLE_GPIO
|
||||||
gpio_hal_sleep_sel_dis(gpio_context.gpio_hal, gpio_num);
|
gpio_hal_sleep_sel_dis(gpio_context.gpio_hal, gpio_num);
|
||||||
#endif
|
#endif
|
||||||
portEXIT_CRITICAL(&gpio_context.gpio_spinlock);
|
portEXIT_CRITICAL(&gpio_context.gpio_spinlock);
|
||||||
@@ -596,7 +596,7 @@ esp_err_t gpio_wakeup_disable(gpio_num_t gpio_num)
|
|||||||
#endif
|
#endif
|
||||||
portENTER_CRITICAL(&gpio_context.gpio_spinlock);
|
portENTER_CRITICAL(&gpio_context.gpio_spinlock);
|
||||||
gpio_hal_wakeup_disable(gpio_context.gpio_hal, gpio_num);
|
gpio_hal_wakeup_disable(gpio_context.gpio_hal, gpio_num);
|
||||||
#if CONFIG_ESP32C3_LIGHTSLEEP_GPIO_RESET_WORKAROUND
|
#if CONFIG_ESP32C3_LIGHTSLEEP_GPIO_RESET_WORKAROUND || CONFIG_PM_SLP_DISABLE_GPIO
|
||||||
gpio_hal_sleep_sel_en(gpio_context.gpio_hal, gpio_num);
|
gpio_hal_sleep_sel_en(gpio_context.gpio_hal, gpio_num);
|
||||||
#endif
|
#endif
|
||||||
portEXIT_CRITICAL(&gpio_context.gpio_spinlock);
|
portEXIT_CRITICAL(&gpio_context.gpio_spinlock);
|
||||||
@@ -919,7 +919,7 @@ esp_err_t gpio_deep_sleep_wakeup_enable(gpio_num_t gpio_num, gpio_int_type_t int
|
|||||||
}
|
}
|
||||||
portENTER_CRITICAL(&gpio_context.gpio_spinlock);
|
portENTER_CRITICAL(&gpio_context.gpio_spinlock);
|
||||||
gpio_hal_deepsleep_wakeup_enable(gpio_context.gpio_hal, gpio_num, intr_type);
|
gpio_hal_deepsleep_wakeup_enable(gpio_context.gpio_hal, gpio_num, intr_type);
|
||||||
#if CONFIG_ESP32C3_LIGHTSLEEP_GPIO_RESET_WORKAROUND
|
#if CONFIG_ESP32C3_LIGHTSLEEP_GPIO_RESET_WORKAROUND || CONFIG_PM_SLP_DISABLE_GPIO
|
||||||
gpio_hal_sleep_sel_dis(gpio_context.gpio_hal, gpio_num);
|
gpio_hal_sleep_sel_dis(gpio_context.gpio_hal, gpio_num);
|
||||||
#endif
|
#endif
|
||||||
portEXIT_CRITICAL(&gpio_context.gpio_spinlock);
|
portEXIT_CRITICAL(&gpio_context.gpio_spinlock);
|
||||||
@@ -934,7 +934,7 @@ esp_err_t gpio_deep_sleep_wakeup_disable(gpio_num_t gpio_num)
|
|||||||
}
|
}
|
||||||
portENTER_CRITICAL(&gpio_context.gpio_spinlock);
|
portENTER_CRITICAL(&gpio_context.gpio_spinlock);
|
||||||
gpio_hal_deepsleep_wakeup_disable(gpio_context.gpio_hal, gpio_num);
|
gpio_hal_deepsleep_wakeup_disable(gpio_context.gpio_hal, gpio_num);
|
||||||
#if CONFIG_ESP32C3_LIGHTSLEEP_GPIO_RESET_WORKAROUND
|
#if CONFIG_ESP32C3_LIGHTSLEEP_GPIO_RESET_WORKAROUND || CONFIG_PM_SLP_DISABLE_GPIO
|
||||||
gpio_hal_sleep_sel_en(gpio_context.gpio_hal, gpio_num);
|
gpio_hal_sleep_sel_en(gpio_context.gpio_hal, gpio_num);
|
||||||
#endif
|
#endif
|
||||||
portEXIT_CRITICAL(&gpio_context.gpio_spinlock);
|
portEXIT_CRITICAL(&gpio_context.gpio_spinlock);
|
||||||
|
@@ -301,10 +301,6 @@ esp_err_t esp_pm_configure(const void* vconfig)
|
|||||||
s_config_changed = true;
|
s_config_changed = true;
|
||||||
portEXIT_CRITICAL(&s_switch_lock);
|
portEXIT_CRITICAL(&s_switch_lock);
|
||||||
|
|
||||||
#if CONFIG_PM_SLP_DISABLE_GPIO
|
|
||||||
esp_sleep_enable_gpio_switch(config->light_sleep_enable);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if CONFIG_ESP_SYSTEM_PM_POWER_DOWN_CPU && SOC_PM_SUPPORT_CPU_PD
|
#if CONFIG_ESP_SYSTEM_PM_POWER_DOWN_CPU && SOC_PM_SUPPORT_CPU_PD
|
||||||
esp_err_t ret = esp_sleep_cpu_pd_low_init(config->light_sleep_enable);
|
esp_err_t ret = esp_sleep_cpu_pd_low_init(config->light_sleep_enable);
|
||||||
if (config->light_sleep_enable && ret != ESP_OK) {
|
if (config->light_sleep_enable && ret != ESP_OK) {
|
||||||
@@ -726,9 +722,6 @@ void esp_pm_impl_init(void)
|
|||||||
esp_pm_trace_init();
|
esp_pm_trace_init();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if CONFIG_PM_SLP_DISABLE_GPIO
|
|
||||||
esp_sleep_config_gpio_isolate();
|
|
||||||
#endif
|
|
||||||
ESP_ERROR_CHECK(esp_pm_lock_create(ESP_PM_CPU_FREQ_MAX, 0, "rtos0",
|
ESP_ERROR_CHECK(esp_pm_lock_create(ESP_PM_CPU_FREQ_MAX, 0, "rtos0",
|
||||||
&s_rtos_lock_handle[0]));
|
&s_rtos_lock_handle[0]));
|
||||||
ESP_ERROR_CHECK(esp_pm_lock_acquire(s_rtos_lock_handle[0]));
|
ESP_ERROR_CHECK(esp_pm_lock_acquire(s_rtos_lock_handle[0]));
|
||||||
|
@@ -407,7 +407,7 @@ IRAM_ATTR ESP_SYSTEM_INIT_FN(init_components0, BIT(0))
|
|||||||
{
|
{
|
||||||
esp_timer_init();
|
esp_timer_init();
|
||||||
|
|
||||||
#if CONFIG_ESP32C3_LIGHTSLEEP_GPIO_RESET_WORKAROUND && !CONFIG_PM_SLP_DISABLE_GPIO
|
#if CONFIG_ESP32C3_LIGHTSLEEP_GPIO_RESET_WORKAROUND || CONFIG_PM_SLP_DISABLE_GPIO
|
||||||
/* Configure to isolate (disable the Input/Output/Pullup/Pulldown
|
/* Configure to isolate (disable the Input/Output/Pullup/Pulldown
|
||||||
* function of the pin) all GPIO pins in sleep state
|
* function of the pin) all GPIO pins in sleep state
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user