Skip to content

Commit

Permalink
Merge branch 'bugfix/sleep_current_issue_caused_by_sar_adc' into 'mas…
Browse files Browse the repository at this point in the history
…ter'

sleep current issue caused by sar adc

Closes IDF-6111 and WIFI-4370

See merge request espressif/esp-idf!22769
  • Loading branch information
jack0c committed Mar 17, 2023
2 parents 16f6ea4 + a25ce78 commit 73c06b5
Show file tree
Hide file tree
Showing 10 changed files with 67 additions and 0 deletions.
10 changes: 10 additions & 0 deletions components/esp_hw_support/include/esp_private/sar_periph_ctrl.h
Expand Up @@ -62,6 +62,16 @@ void sar_periph_ctrl_pwdet_power_acquire(void);
*/
void sar_periph_ctrl_pwdet_power_release(void);

/**
* @brief Enable SAR power when system wakes up
*/
void sar_periph_ctrl_power_enable(void);

/**
* @brief Disable SAR power when system goes to sleep
*/
void sar_periph_ctrl_power_disable(void);

#ifdef __cplusplus
}
#endif
7 changes: 7 additions & 0 deletions components/esp_hw_support/port/esp32/sar_periph_ctrl.c
Expand Up @@ -32,6 +32,13 @@ void sar_periph_ctrl_init(void)
//Add other periph power control initialisation here
}

void sar_periph_ctrl_power_enable(void)
{
portENTER_CRITICAL_SAFE(&rtc_spinlock);
sar_ctrl_ll_set_power_mode(SAR_CTRL_LL_POWER_ON);
portEXIT_CRITICAL_SAFE(&rtc_spinlock);
}

void sar_periph_ctrl_power_disable(void)
{
portENTER_CRITICAL_SAFE(&rtc_spinlock);
Expand Down
7 changes: 7 additions & 0 deletions components/esp_hw_support/port/esp32c2/sar_periph_ctrl.c
Expand Up @@ -34,6 +34,13 @@ void sar_periph_ctrl_init(void)
//Add other periph power control initialisation here
}

void sar_periph_ctrl_power_enable(void)
{
portENTER_CRITICAL_SAFE(&rtc_spinlock);
sar_ctrl_ll_set_power_mode(SAR_CTRL_LL_POWER_FSM);
portEXIT_CRITICAL_SAFE(&rtc_spinlock);
}

void sar_periph_ctrl_power_disable(void)
{
portENTER_CRITICAL_SAFE(&rtc_spinlock);
Expand Down
7 changes: 7 additions & 0 deletions components/esp_hw_support/port/esp32c3/sar_periph_ctrl.c
Expand Up @@ -34,6 +34,13 @@ void sar_periph_ctrl_init(void)
//Add other periph power control initialisation here
}

void sar_periph_ctrl_power_enable(void)
{
portENTER_CRITICAL_SAFE(&rtc_spinlock);
sar_ctrl_ll_set_power_mode(SAR_CTRL_LL_POWER_FSM);
portEXIT_CRITICAL_SAFE(&rtc_spinlock);
}

void sar_periph_ctrl_power_disable(void)
{
portENTER_CRITICAL_SAFE(&rtc_spinlock);
Expand Down
7 changes: 7 additions & 0 deletions components/esp_hw_support/port/esp32c6/sar_periph_ctrl.c
Expand Up @@ -31,6 +31,13 @@ void sar_periph_ctrl_init(void)
//Add other periph power control initialisation here
}

void sar_periph_ctrl_power_enable(void)
{
portENTER_CRITICAL_SAFE(&rtc_spinlock);
sar_ctrl_ll_force_power_ctrl_from_pwdet(true);
portEXIT_CRITICAL_SAFE(&rtc_spinlock);
}

void sar_periph_ctrl_power_disable(void)
{
portENTER_CRITICAL_SAFE(&rtc_spinlock);
Expand Down
7 changes: 7 additions & 0 deletions components/esp_hw_support/port/esp32h2/sar_periph_ctrl.c
Expand Up @@ -30,6 +30,13 @@ void sar_periph_ctrl_init(void)
//Add other periph power control initialisation here
}

void sar_periph_ctrl_power_enable(void)
{
portENTER_CRITICAL_SAFE(&rtc_spinlock);
sar_ctrl_ll_force_power_ctrl_from_pwdet(true);
portEXIT_CRITICAL_SAFE(&rtc_spinlock);
}

void sar_periph_ctrl_power_disable(void)
{
portENTER_CRITICAL_SAFE(&rtc_spinlock);
Expand Down
5 changes: 5 additions & 0 deletions components/esp_hw_support/port/esp32h4/sar_periph_ctrl.c
Expand Up @@ -29,6 +29,11 @@ void sar_periph_ctrl_init(void)
//TODO: IDF-6123
}

void sar_periph_ctrl_power_enable(void)
{
//TODO: IDF-6123
}

void sar_periph_ctrl_power_disable(void)
{
//TODO: IDF-6123
Expand Down
7 changes: 7 additions & 0 deletions components/esp_hw_support/port/esp32s2/sar_periph_ctrl.c
Expand Up @@ -34,6 +34,13 @@ void sar_periph_ctrl_init(void)
//Add other periph power control initialisation here
}

void sar_periph_ctrl_power_enable(void)
{
portENTER_CRITICAL_SAFE(&rtc_spinlock);
sar_ctrl_ll_set_power_mode(SAR_CTRL_LL_POWER_FSM);
portEXIT_CRITICAL_SAFE(&rtc_spinlock);
}

void sar_periph_ctrl_power_disable(void)
{
portENTER_CRITICAL_SAFE(&rtc_spinlock);
Expand Down
7 changes: 7 additions & 0 deletions components/esp_hw_support/port/esp32s3/sar_periph_ctrl.c
Expand Up @@ -34,6 +34,13 @@ void sar_periph_ctrl_init(void)
//Add other periph power control initialisation here
}

void sar_periph_ctrl_power_enable(void)
{
portENTER_CRITICAL_SAFE(&rtc_spinlock);
sar_ctrl_ll_set_power_mode(SAR_CTRL_LL_POWER_FSM);
portEXIT_CRITICAL_SAFE(&rtc_spinlock);
}

void sar_periph_ctrl_power_disable(void)
{
portENTER_CRITICAL_SAFE(&rtc_spinlock);
Expand Down
3 changes: 3 additions & 0 deletions components/esp_hw_support/sleep_modes.c
Expand Up @@ -60,6 +60,7 @@
#include "esp_private/esp_clk.h"
#include "esp_private/esp_task_wdt.h"
#include "esp_private/spi_flash_os.h"
#include "esp_private/sar_periph_ctrl.h"

#ifdef CONFIG_IDF_TARGET_ESP32
#include "esp32/rom/cache.h"
Expand Down Expand Up @@ -405,13 +406,15 @@ inline static void IRAM_ATTR misc_modules_sleep_prepare(void)
#if REGI2C_ANA_CALI_PD_WORKAROUND
regi2c_analog_cali_reg_read();
#endif
sar_periph_ctrl_power_disable();
}

/**
* These save-restore workaround should be moved to lower layer
*/
inline static void IRAM_ATTR misc_modules_wake_prepare(void)
{
sar_periph_ctrl_power_enable();
#if SOC_PM_SUPPORT_CPU_PD && SOC_PM_CPU_RETENTION_BY_RTCCNTL
sleep_disable_cpu_retention();
#endif
Expand Down

0 comments on commit 73c06b5

Please sign in to comment.