Merge branch 'bugfix/esp32c3_light_sleep_gpio_reset_issue' into 'master'
light sleep: add software workaround for esp32c3 gpio reset issue See merge request espressif/esp-idf!12715
This commit is contained in:
@@ -435,24 +435,23 @@ esp_deep_sleep_wake_stub_fn_t esp_get_deep_sleep_wake_stub(void);
|
||||
void esp_default_wake_deep_sleep(void);
|
||||
|
||||
/**
|
||||
* @brief Disable logging from the ROM code after deep sleep.
|
||||
* @brief Disable logging from the ROM code after deep sleep.
|
||||
*
|
||||
* Using LSB of RTC_STORE4.
|
||||
* Using LSB of RTC_STORE4.
|
||||
*/
|
||||
void esp_deep_sleep_disable_rom_logging(void);
|
||||
|
||||
#if SOC_GPIO_SUPPORT_SLP_SWITCH
|
||||
/**
|
||||
* @brief Disable all GPIO pins at slept status.
|
||||
*
|
||||
* @brief Configure to isolate all GPIO pins in sleep state
|
||||
*/
|
||||
void esp_sleep_gpio_status_init(void);
|
||||
void esp_sleep_config_gpio_isolate(void);
|
||||
|
||||
/**
|
||||
* @brief Configure GPIO pins status switching between slept status and waked status.
|
||||
* @param enable decide whether to switch status or not
|
||||
* @brief Enable or disable GPIO pins status switching between slept status and waked status.
|
||||
* @param enable decide whether to switch status or not
|
||||
*/
|
||||
void esp_sleep_gpio_status_switch_configure(bool enable);
|
||||
void esp_sleep_enable_gpio_switch(bool enable);
|
||||
#endif
|
||||
|
||||
#if CONFIG_MAC_BB_PD
|
||||
|
||||
@@ -410,9 +410,9 @@ static inline void gpio_sleep_mode_config_unapply(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
void esp_sleep_gpio_status_init(void)
|
||||
void esp_sleep_config_gpio_isolate(void)
|
||||
{
|
||||
ESP_LOGI(TAG, "Init to disable all pins at light sleep");
|
||||
ESP_LOGI(TAG, "Configure to isolate all GPIO pins in sleep state");
|
||||
for (gpio_num_t gpio_num = GPIO_NUM_0; gpio_num < GPIO_NUM_MAX; gpio_num++) {
|
||||
if (GPIO_IS_VALID_GPIO(gpio_num)) {
|
||||
gpio_sleep_set_direction(gpio_num, GPIO_MODE_DISABLE);
|
||||
@@ -421,13 +421,9 @@ void esp_sleep_gpio_status_init(void)
|
||||
}
|
||||
}
|
||||
|
||||
void esp_sleep_gpio_status_switch_configure(bool enable)
|
||||
void esp_sleep_enable_gpio_switch(bool enable)
|
||||
{
|
||||
if (enable) {
|
||||
ESP_LOGI(TAG, "Light sleep enabled, start GPIO status switching");
|
||||
} else {
|
||||
ESP_LOGI(TAG, "Light sleep disabled, stop GPIO status switching");
|
||||
}
|
||||
ESP_LOGI(TAG, "%s automatic switching of GPIO sleep configuration", enable ? "Enable" : "Disable");
|
||||
for (gpio_num_t gpio_num = GPIO_NUM_0; gpio_num < GPIO_NUM_MAX; gpio_num++) {
|
||||
if (GPIO_IS_VALID_GPIO(gpio_num)) {
|
||||
if (enable) {
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
#include "esp_efuse.h"
|
||||
#include "esp_flash_encrypt.h"
|
||||
#include "esp_secure_boot.h"
|
||||
#include "esp_sleep.h"
|
||||
|
||||
/***********************************************/
|
||||
// Headers for other components init functions
|
||||
@@ -413,6 +414,14 @@ IRAM_ATTR ESP_SYSTEM_INIT_FN(init_components0, BIT(0))
|
||||
{
|
||||
esp_timer_init();
|
||||
|
||||
#if CONFIG_ESP32C3_LIGHTSLEEP_GPIO_RESET_WORKAROUND && !CONFIG_PM_SLP_DISABLE_GPIO
|
||||
// Configure to isolate (disable the Input/Output/Pullup/Pulldown
|
||||
// function of the pin) all GPIO pins in sleep state
|
||||
esp_sleep_config_gpio_isolate();
|
||||
// Enable automatic switching of GPIO configuration
|
||||
esp_sleep_enable_gpio_switch(true);
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_PM_ENABLE)
|
||||
esp_pm_impl_init();
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user