feat(sleep_modem): allow multi modem to enable rf with regdma

This commit is contained in:
cjin
2025-07-08 11:58:11 +08:00
parent fd844bd2d3
commit 85fece0652
10 changed files with 124 additions and 73 deletions

View File

@@ -47,6 +47,7 @@
#include "esp_rom_sys.h" #include "esp_rom_sys.h"
#include "hli_api.h" #include "hli_api.h"
#include "esp_private/sleep_modem.h"
#if CONFIG_BLE_LOG_ENABLED #if CONFIG_BLE_LOG_ENABLED
#include "ble_log.h" #include "ble_log.h"
@@ -1692,7 +1693,7 @@ esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg)
ESP_LOGI(BTDM_LOG_TAG, "BT controller compile version [%s]", btdm_controller_get_compile_version()); ESP_LOGI(BTDM_LOG_TAG, "BT controller compile version [%s]", btdm_controller_get_compile_version());
esp_phy_modem_init(); esp_phy_modem_init(SLEEP_MODEM_BT);
esp_bt_power_domain_on(); esp_bt_power_domain_on();
@@ -1867,7 +1868,7 @@ static void bt_controller_deinit_internal(void)
esp_bt_power_domain_off(); esp_bt_power_domain_off();
esp_phy_modem_deinit(); esp_phy_modem_deinit(SLEEP_MODEM_BT);
} }
static void bt_controller_shutdown(void* arg) static void bt_controller_shutdown(void* arg)

View File

@@ -48,9 +48,7 @@
#include "esp_private/esp_clk_tree_common.h" #include "esp_private/esp_clk_tree_common.h"
#include "bt_osi_mem.h" #include "bt_osi_mem.h"
#if CONFIG_FREERTOS_USE_TICKLESS_IDLE
#include "esp_private/sleep_modem.h" #include "esp_private/sleep_modem.h"
#endif // CONFIG_FREERTOS_USE_TICKLESS_IDLE
#include "esp_private/esp_modem_clock.h" #include "esp_private/esp_modem_clock.h"
#include "freertos/FreeRTOS.h" #include "freertos/FreeRTOS.h"
@@ -957,7 +955,7 @@ esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg)
os_msys_init(); os_msys_init();
esp_phy_modem_init(); esp_phy_modem_init(SLEEP_MODEM_BT);
periph_module_enable(PERIPH_BT_MODULE); periph_module_enable(PERIPH_BT_MODULE);
periph_module_reset(PERIPH_BT_MODULE); periph_module_reset(PERIPH_BT_MODULE);
@@ -1037,7 +1035,7 @@ controller_init_err:
#endif // CONFIG_BT_LE_CONTROLLER_LOG_ENABLED #endif // CONFIG_BT_LE_CONTROLLER_LOG_ENABLED
ble_controller_deinit(); ble_controller_deinit();
modem_deint: modem_deint:
esp_phy_modem_deinit(); esp_phy_modem_deinit(SLEEP_MODEM_BT);
periph_module_disable(PERIPH_BT_MODULE); periph_module_disable(PERIPH_BT_MODULE);
free_mem: free_mem:
@@ -1077,7 +1075,7 @@ esp_err_t esp_bt_controller_deinit(void)
npl_freertos_mempool_deinit(); npl_freertos_mempool_deinit();
esp_phy_modem_deinit(); esp_phy_modem_deinit(SLEEP_MODEM_BT);
ble_controller_status = ESP_BT_CONTROLLER_STATUS_IDLE; ble_controller_status = ESP_BT_CONTROLLER_STATUS_IDLE;

View File

@@ -62,6 +62,8 @@
#endif // CONFIG_BT_CTRL_LE_LOG_STORAGE_EN #endif // CONFIG_BT_CTRL_LE_LOG_STORAGE_EN
#include "esp_rom_gpio.h" #include "esp_rom_gpio.h"
#if CONFIG_BT_ENABLED #if CONFIG_BT_ENABLED
#include "esp_private/sleep_modem.h"
/* Macro definition /* Macro definition
************************************************************************ ************************************************************************
@@ -1851,7 +1853,7 @@ esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg)
#if CONFIG_MAC_BB_PD #if CONFIG_MAC_BB_PD
esp_mac_bb_pd_mem_init(); esp_mac_bb_pd_mem_init();
#endif #endif
esp_phy_modem_init(); esp_phy_modem_init(SLEEP_MODEM_BT);
esp_bt_power_domain_on(); esp_bt_power_domain_on();
btdm_controller_mem_init(); btdm_controller_mem_init();
@@ -2050,7 +2052,7 @@ static void bt_controller_deinit_internal(void)
#if CONFIG_MAC_BB_PD #if CONFIG_MAC_BB_PD
esp_mac_bb_pd_mem_deinit(); esp_mac_bb_pd_mem_deinit();
#endif #endif
esp_phy_modem_deinit(); esp_phy_modem_deinit(SLEEP_MODEM_BT);
#if CONFIG_BT_CTRL_LE_LOG_EN #if CONFIG_BT_CTRL_LE_LOG_EN
esp_bt_controller_log_deinit(); esp_bt_controller_log_deinit();

View File

@@ -44,8 +44,8 @@
#include "soc/regdma.h" #include "soc/regdma.h"
#include "bt_osi_mem.h" #include "bt_osi_mem.h"
#if CONFIG_FREERTOS_USE_TICKLESS_IDLE
#include "esp_private/sleep_modem.h" #include "esp_private/sleep_modem.h"
#if CONFIG_FREERTOS_USE_TICKLESS_IDLE
#include "esp_private/sleep_retention.h" #include "esp_private/sleep_retention.h"
#endif // CONFIG_FREERTOS_USE_TICKLESS_IDLE #endif // CONFIG_FREERTOS_USE_TICKLESS_IDLE
@@ -957,7 +957,7 @@ esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg)
modem_clock_module_mac_reset(PERIPH_BT_MODULE); modem_clock_module_mac_reset(PERIPH_BT_MODULE);
/* Select slow clock source for BT momdule */ /* Select slow clock source for BT momdule */
ble_rtc_clk_init(cfg); ble_rtc_clk_init(cfg);
esp_phy_modem_init(); esp_phy_modem_init(SLEEP_MODEM_BT);
if (ble_osi_coex_funcs_register((struct osi_coex_funcs_t *)&s_osi_coex_funcs_ro) != 0) { if (ble_osi_coex_funcs_register((struct osi_coex_funcs_t *)&s_osi_coex_funcs_ro) != 0) {
ESP_LOGW(NIMBLE_PORT_LOG_TAG, "osi coex funcs reg failed"); ESP_LOGW(NIMBLE_PORT_LOG_TAG, "osi coex funcs reg failed");
@@ -1045,8 +1045,8 @@ modem_deint:
#if CONFIG_BT_LE_CONTROLLER_LOG_ENABLED #if CONFIG_BT_LE_CONTROLLER_LOG_ENABLED
esp_bt_controller_log_deinit(); esp_bt_controller_log_deinit();
#endif // CONFIG_BT_LE_CONTROLLER_LOG_ENABLED #endif // CONFIG_BT_LE_CONTROLLER_LOG_ENABLED
esp_phy_modem_deinit(); esp_phy_modem_deinit(SLEEP_MODEM_BT);
// modem_clock_deselect_lp_clock_source(PERIPH_BT_MODULE); modem_clock_deselect_lp_clock_source(PERIPH_BT_MODULE);
modem_clock_module_disable(PERIPH_BT_MODULE); modem_clock_module_disable(PERIPH_BT_MODULE);
free_mem: free_mem:
@@ -1070,8 +1070,8 @@ esp_err_t esp_bt_controller_deinit(void)
os_msys_deinit(); os_msys_deinit();
esp_phy_modem_deinit(); esp_phy_modem_deinit(SLEEP_MODEM_BT);
// modem_clock_deselect_lp_clock_source(PERIPH_BT_MODULE); modem_clock_deselect_lp_clock_source(PERIPH_BT_MODULE);
modem_clock_module_disable(PERIPH_BT_MODULE); modem_clock_module_disable(PERIPH_BT_MODULE);
ble_stack_deinitEnv(); ble_stack_deinitEnv();

View File

@@ -45,8 +45,8 @@
#include "esp_private/esp_clk_tree_common.h" #include "esp_private/esp_clk_tree_common.h"
#include "bt_osi_mem.h" #include "bt_osi_mem.h"
#if CONFIG_FREERTOS_USE_TICKLESS_IDLE
#include "esp_private/sleep_modem.h" #include "esp_private/sleep_modem.h"
#if CONFIG_FREERTOS_USE_TICKLESS_IDLE
#include "esp_private/sleep_retention.h" #include "esp_private/sleep_retention.h"
#include "esp_private/pm_impl.h" #include "esp_private/pm_impl.h"
#endif // CONFIG_FREERTOS_USE_TICKLESS_IDLE #endif // CONFIG_FREERTOS_USE_TICKLESS_IDLE
@@ -1096,7 +1096,7 @@ esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg)
modem_clock_module_mac_reset(PERIPH_BT_MODULE); modem_clock_module_mac_reset(PERIPH_BT_MODULE);
/* Select slow clock source for BT momdule */ /* Select slow clock source for BT momdule */
ble_rtc_clk_init(cfg); ble_rtc_clk_init(cfg);
esp_phy_modem_init(); esp_phy_modem_init(SLEEP_MODEM_BT);
if (ble_osi_coex_funcs_register((struct osi_coex_funcs_t *)&s_osi_coex_funcs_ro) != 0) { if (ble_osi_coex_funcs_register((struct osi_coex_funcs_t *)&s_osi_coex_funcs_ro) != 0) {
ESP_LOGW(NIMBLE_PORT_LOG_TAG, "osi coex funcs reg failed"); ESP_LOGW(NIMBLE_PORT_LOG_TAG, "osi coex funcs reg failed");
@@ -1194,7 +1194,7 @@ modem_deint:
#if CONFIG_BT_LE_CONTROLLER_LOG_ENABLED #if CONFIG_BT_LE_CONTROLLER_LOG_ENABLED
esp_bt_controller_log_deinit(); esp_bt_controller_log_deinit();
#endif // CONFIG_BT_LE_CONTROLLER_LOG_ENABLED #endif // CONFIG_BT_LE_CONTROLLER_LOG_ENABLED
esp_phy_modem_deinit(); esp_phy_modem_deinit(SLEEP_MODEM_BT);
modem_clock_deselect_lp_clock_source(PERIPH_BT_MODULE); modem_clock_deselect_lp_clock_source(PERIPH_BT_MODULE);
modem_clock_module_disable(PERIPH_BT_MODULE); modem_clock_module_disable(PERIPH_BT_MODULE);
@@ -1219,7 +1219,7 @@ esp_err_t esp_bt_controller_deinit(void)
os_msys_deinit(); os_msys_deinit();
esp_phy_modem_deinit(); esp_phy_modem_deinit(SLEEP_MODEM_BT);
modem_clock_deselect_lp_clock_source(PERIPH_BT_MODULE); modem_clock_deselect_lp_clock_source(PERIPH_BT_MODULE);
modem_clock_module_disable(PERIPH_BT_MODULE); modem_clock_module_disable(PERIPH_BT_MODULE);

View File

@@ -15,6 +15,18 @@
extern "C" { extern "C" {
#endif #endif
#if SOC_PM_SUPPORT_PMU_MODEM_STATE
#define SLEEP_MODEM_SKIP_I2C_MST_CLK_RETENTION (BIT(0))
#define SLEEP_MODEM_SKIP_WIFI_RETENTION (BIT(1))
#define SLEEP_MODEM_RESET_RETENTION (0)
#endif // SOC_PM_SUPPORT_PMU_MODEM_STATE
typedef enum {
SLEEP_MODEM_WIFI = 1,
SLEEP_MODEM_BT = 2,
SLEEP_MODEM_IEEE802154 = 4,
} sleep_modem_type_t;
#define SLEEP_MODEM_MAX_CNT 3
/** /**
* @file sleep_modem.h * @file sleep_modem.h
* *
@@ -87,18 +99,18 @@ void sleep_modem_mac_bb_power_up_prepare(void);
void sleep_modem_do_phy_retention(bool restore); void sleep_modem_do_phy_retention(bool restore);
/** /**
* @brief Get WiFi modem state * @brief Get phy link state
* *
* @return true or false for WiFi modem state is enabled or disabled * @return true or false for phy link is enabled or disabled
*/ */
bool sleep_modem_modem_state_enabled(void); bool sleep_modem_phy_link_enabled(void);
/** /**
* @brief Get WiFi modem link done state * @brief Get phy link done state
* *
* @return true or false for WiFi modem link can be used to enable RF by REGDMA or can not be used * @return true or false for phy link can be used to enable RF by REGDMA or can not be used
*/ */
bool sleep_modem_modem_link_done(void); bool sleep_modem_phy_link_done(void);
#endif /* SOC_PM_SUPPORT_PMU_MODEM_STATE */ #endif /* SOC_PM_SUPPORT_PMU_MODEM_STATE */
@@ -203,18 +215,31 @@ void esp_pm_unregister_light_sleep_default_params_config_callback(void);
* @brief Init phy link. * @brief Init phy link.
* *
* This function init phy link. * This function init phy link.
* @return *
* - ESP_OK on success * @param modem_mask bit mask of modems
* - ESP_ERR_NO_MEM if no memory for link * @return
* - ESP_OK on success
* - ESP_ERR_NO_MEM if no memory for link
*/ */
esp_err_t sleep_modem_phy_init(void); esp_err_t sleep_modem_phy_init(sleep_modem_type_t modem_mask);
/** /**
* @brief Deinit phy link. * @brief Deinit phy link.
* *
* This function deinit phy link. * This function deinit phy link.
*
* @param modem_mask bit mask of modems
*/ */
void sleep_modem_phy_deinit(void); void sleep_modem_phy_deinit(sleep_modem_type_t modem_mask);
/**
* @brief Check if Wi-Fi modem state is enabled
*
* @return
* - true Wi-Fi modem state is enabled
* - false Wi-Fi modem state is disabled
*/
bool sleep_modem_wifi_modem_state_is_enabled(void);
/** /**
* @brief Function to check Wi-Fi modem state to skip light sleep. * @brief Function to check Wi-Fi modem state to skip light sleep.
@@ -253,14 +278,7 @@ esp_err_t sleep_phy_link_deinit(void *link_head);
* @param flags A bitmap to indicate the PHY link regdma description configuration flag * @param flags A bitmap to indicate the PHY link regdma description configuration flag
*/ */
void sleep_phy_link_config(void *link_context, uint32_t flags); void sleep_phy_link_config(void *link_context, uint32_t flags);
#endif /* SOC_PM_SUPPORT_PMU_MODEM_STATE */
/**
* @brief Function to skip the retention entries involving Wi-Fi registers
*
* @param skip
*/
void sleep_phy_skip_wifi_reg(bool skip);
#endif
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@@ -132,43 +132,68 @@ void IRAM_ATTR mac_bb_power_up_cb_execute(void)
#if SOC_PM_SUPPORT_PMU_MODEM_STATE #if SOC_PM_SUPPORT_PMU_MODEM_STATE
typedef struct sleep_modem_config { typedef struct sleep_modem_config {
struct { _lock_t phy_link_lock;
void *phy_link; void *phy_link;
union { union {
struct { struct {
uint32_t phy_link_done: 1; uint32_t phy_link_done: 1;
uint32_t reserved: 31; uint32_t modem_mask: SLEEP_MODEM_MAX_CNT;
}; uint32_t reserved: 27 - SLEEP_MODEM_MAX_CNT;
uint32_t flags;
}; };
uint32_t flags;
}; };
} sleep_modem_config_t; } sleep_modem_config_t;
static sleep_modem_config_t s_sleep_modem = { .phy_link = NULL, .flags = 0 }; sleep_modem_config_t s_sleep_modem = { .phy_link = NULL, .flags = 0 };
bool IRAM_ATTR sleep_modem_wifi_modem_state_is_enabled(void)
{
return !!(s_sleep_modem.modem_mask & SLEEP_MODEM_WIFI);
}
esp_err_t sleep_modem_phy_init(void) esp_err_t sleep_modem_phy_init(sleep_modem_type_t modem_mask)
{ {
esp_err_t err = ESP_OK; esp_err_t err = ESP_OK;
void *link = NULL; void *link = NULL;
if (s_sleep_modem.phy_link == NULL) {
err = sleep_phy_link_init(&link); _lock_acquire(&s_sleep_modem.phy_link_lock);
if (err == ESP_OK) { if (s_sleep_modem.modem_mask & modem_mask) {
s_sleep_modem.phy_link = link; _lock_release(&s_sleep_modem.phy_link_lock);
s_sleep_modem.flags = 0; return ESP_ERR_INVALID_ARG;
}
if (!s_sleep_modem.modem_mask) {
s_sleep_modem.flags = 0;
if (!s_sleep_modem.phy_link) {
err = sleep_phy_link_init(&link);
if (err == ESP_OK) {
s_sleep_modem.phy_link = link;
} else {
_lock_release(&s_sleep_modem.phy_link_lock);
return err;
}
} }
} }
s_sleep_modem.modem_mask |= modem_mask;
_lock_release(&s_sleep_modem.phy_link_lock);
return err; return err;
} }
__attribute__((unused)) void sleep_modem_phy_deinit(void) __attribute__((unused)) void sleep_modem_phy_deinit(sleep_modem_type_t modem_mask)
{ {
if (s_sleep_modem.phy_link) { _lock_acquire(&s_sleep_modem.phy_link_lock);
if (!(s_sleep_modem.modem_mask & modem_mask)) {
_lock_release(&s_sleep_modem.phy_link_lock);
return;
}
s_sleep_modem.modem_mask &= ~modem_mask;
if (s_sleep_modem.phy_link && !s_sleep_modem.modem_mask) {
sleep_phy_link_deinit(s_sleep_modem.phy_link); sleep_phy_link_deinit(s_sleep_modem.phy_link);
s_sleep_modem.phy_link = NULL; s_sleep_modem.phy_link = NULL;
s_sleep_modem.flags = 0; s_sleep_modem.flags = 0;
} }
_lock_release(&s_sleep_modem.phy_link_lock);
} }
void IRAM_ATTR sleep_modem_do_phy_retention(bool restore) void IRAM_ATTR sleep_modem_do_phy_retention(bool restore)
@@ -227,7 +252,7 @@ uint32_t IRAM_ATTR sleep_modem_reject_triggers(void)
uint32_t reject_triggers = 0; uint32_t reject_triggers = 0;
#if SOC_PM_SUPPORT_PMU_MODEM_STATE #if SOC_PM_SUPPORT_PMU_MODEM_STATE
reject_triggers = (s_sleep_modem.phy_link != NULL) ? BIT(16) : 0; reject_triggers = (s_sleep_modem.phy_link != NULL) ? BIT(16) : 0;
#endif #endif /* SOC_PM_SUPPORT_PMU_MODEM_STATE */
return reject_triggers; return reject_triggers;
} }
@@ -238,8 +263,8 @@ bool IRAM_ATTR sleep_modem_wifi_modem_state_skip_light_sleep(void)
/* To block the system from entering sleep before modem link done. In light /* To block the system from entering sleep before modem link done. In light
* sleep mode, the system may switch to modem state, which will cause * sleep mode, the system may switch to modem state, which will cause
* hardware to fail to enable RF */ * hardware to fail to enable RF */
skip = sleep_modem_phy_link_enabled() && !sleep_modem_phy_link_done(); skip = sleep_modem_wifi_modem_state_is_enabled() && !sleep_modem_phy_link_done();
#endif #endif /* SOC_PM_SUPPORT_PMU_MODEM_STATE */
return skip; return skip;
} }

View File

@@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD * SPDX-FileCopyrightText: 2015-2026 Espressif Systems (Shanghai) CO LTD
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
@@ -200,15 +200,18 @@ void esp_phy_load_cal_and_init(void);
/** /**
* @brief Initialize backup memory for Phy power up/down * @brief Initialize backup memory for Phy power up/down
*
* @param modem Modem calling phy retention
*/ */
void esp_phy_modem_init(void); void esp_phy_modem_init(uint8_t modem);
/** /**
* @brief Deinitialize backup memory for Phy power up/down * @brief Deinitialize backup memory for Phy power up/down
* Set phy_init_flag if all modems deinit on ESP32C3 * Set phy_init_flag if all modems deinit on ESP32C3
*
* @param modem Modem calling phy retention
*/ */
void esp_phy_modem_deinit(void); void esp_phy_modem_deinit(uint8_t modem);
#if CONFIG_MAC_BB_PD #if CONFIG_MAC_BB_PD
/** /**
* @brief Initialize backup memory for MAC and Baseband power up/down * @brief Initialize backup memory for MAC and Baseband power up/down

View File

@@ -470,7 +470,7 @@ void esp_wifi_bt_power_domain_off(void)
#endif // SOC_PM_SUPPORT_MODEM_PD || SOC_PM_SUPPORT_WIFI_PD #endif // SOC_PM_SUPPORT_MODEM_PD || SOC_PM_SUPPORT_WIFI_PD
} }
void esp_phy_modem_init(void) void esp_phy_modem_init(uint8_t modem)
{ {
#if SOC_PM_MODEM_RETENTION_BY_BACKUPDMA || CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP #if SOC_PM_MODEM_RETENTION_BY_BACKUPDMA || CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP
_lock_acquire(&s_phy_access_lock); _lock_acquire(&s_phy_access_lock);
@@ -481,17 +481,21 @@ void esp_phy_modem_init(void)
} }
#endif // SOC_PM_MODEM_RETENTION_BY_BACKUPDMA #endif // SOC_PM_MODEM_RETENTION_BY_BACKUPDMA
#if SOC_PM_SUPPORT_PMU_MODEM_STATE && CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP #if SOC_PM_SUPPORT_PMU_MODEM_STATE && CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP
sleep_modem_phy_init(); sleep_modem_phy_init(modem);
#endif // CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP #endif // CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP
_lock_release(&s_phy_access_lock); _lock_release(&s_phy_access_lock);
#endif // SOC_PM_MODEM_RETENTION_BY_BACKUPDMA || CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP #endif // SOC_PM_MODEM_RETENTION_BY_BACKUPDMA || CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP
} }
void esp_phy_modem_deinit(void) void esp_phy_modem_deinit(uint8_t modem)
{ {
#if SOC_PM_MODEM_RETENTION_BY_BACKUPDMA || CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP #if SOC_PM_MODEM_RETENTION_BY_BACKUPDMA || CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP
_lock_acquire(&s_phy_access_lock); _lock_acquire(&s_phy_access_lock);
if (s_phy_modem_init_ref == 0) {
_lock_release(&s_phy_access_lock);
return;
}
s_phy_modem_init_ref--; s_phy_modem_init_ref--;
if (s_phy_modem_init_ref == 0) { if (s_phy_modem_init_ref == 0) {
#if SOC_PM_MODEM_RETENTION_BY_BACKUPDMA #if SOC_PM_MODEM_RETENTION_BY_BACKUPDMA
@@ -505,10 +509,10 @@ void esp_phy_modem_deinit(void)
phy_init_flag(); phy_init_flag();
#endif // CONFIG_IDF_TARGET_ESP32C3 #endif // CONFIG_IDF_TARGET_ESP32C3
#endif // SOC_PM_MODEM_RETENTION_BY_BACKUPDMA #endif // SOC_PM_MODEM_RETENTION_BY_BACKUPDMA
#if SOC_PM_SUPPORT_PMU_MODEM_STATE && CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP
sleep_modem_phy_deinit();
#endif // CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP
} }
#if SOC_PM_SUPPORT_PMU_MODEM_STATE && CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP
sleep_modem_phy_deinit(modem);
#endif // SOC_PM_SUPPORT_PMU_MODEM_STATE && CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP
_lock_release(&s_phy_access_lock); _lock_release(&s_phy_access_lock);
#endif // SOC_PM_MODEM_RETENTION_BY_BACKUPDMA || CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP #endif // SOC_PM_MODEM_RETENTION_BY_BACKUPDMA || CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP
} }

View File

@@ -236,7 +236,7 @@ static esp_err_t wifi_deinit_internal(void)
#endif #endif
#endif /* CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP */ #endif /* CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP */
#ifdef CONFIG_ESP_PHY_ENABLED #ifdef CONFIG_ESP_PHY_ENABLED
esp_phy_modem_deinit(); esp_phy_modem_deinit(SLEEP_MODEM_WIFI);
#endif #endif
s_wifi_inited = false; s_wifi_inited = false;
@@ -424,10 +424,10 @@ esp_err_t esp_wifi_init(const wifi_init_config_t *config)
esp_wifi_mac_pd_mem_init(); esp_wifi_mac_pd_mem_init();
#endif #endif
#ifdef CONFIG_ESP_PHY_ENABLED #ifdef CONFIG_ESP_PHY_ENABLED
esp_phy_modem_init(); esp_phy_modem_init(SLEEP_MODEM_WIFI);
#endif #endif
#if CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP #if CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP
if (sleep_modem_phy_link_enabled()) { if (sleep_modem_wifi_modem_state_is_enabled()) {
esp_pm_register_skip_light_sleep_callback(sleep_modem_wifi_modem_state_skip_light_sleep); esp_pm_register_skip_light_sleep_callback(sleep_modem_wifi_modem_state_skip_light_sleep);
esp_wifi_internal_modem_state_configure(true); /* require WiFi to enable automatically receives the beacon */ esp_wifi_internal_modem_state_configure(true); /* require WiFi to enable automatically receives the beacon */
#if ESP_MODEM_RF_FLAG_UPDATE_CB_REQUIRED #if ESP_MODEM_RF_FLAG_UPDATE_CB_REQUIRED