From cbb8bf9f88fd462331eb43d59818c693baf1060f Mon Sep 17 00:00:00 2001 From: wangmengyang Date: Fri, 17 Mar 2023 16:18:27 +0800 Subject: [PATCH] esp_phy: added API esp_btbb_disable APIs esp_btbb_enable and esp_btbb_disable are supposed to be used by 802.15.4 and Bluetooth module, and implemented with reference counter for resource management --- components/bt/controller/esp32c6/bt.c | 7 ++++--- components/bt/controller/esp32h2/bt.c | 6 ++++-- components/bt/controller/esp32h4/bt.c | 7 ++++--- components/esp_phy/include/esp_phy_init.h | 9 +++++++++ components/esp_phy/src/btbb_init.c | 9 +++++++++ components/esp_phy/src/phy_init_esp32hxx.c | 1 - 6 files changed, 30 insertions(+), 9 deletions(-) diff --git a/components/bt/controller/esp32c6/bt.c b/components/bt/controller/esp32c6/bt.c index b9793bd4f7..e4626bf987 100644 --- a/components/bt/controller/esp32c6/bt.c +++ b/components/bt/controller/esp32c6/bt.c @@ -67,7 +67,6 @@ #define ACL_DATA_MBUF_LEADINGSPCAE 4 #endif // CONFIG_BT_BLUEDROID_ENABLED -#define PHY_ENABLE_VERSION_PRINT (1) /* Types definition ************************************************************************ @@ -120,7 +119,6 @@ extern int esp_ble_ll_set_public_addr(const uint8_t *addr); extern int esp_register_npl_funcs (struct npl_funcs_t *p_npl_func); extern void esp_unregister_npl_funcs (void); extern void npl_freertos_mempool_deinit(void); -extern void bt_bb_v2_init_cmplx(uint8_t i); extern int os_msys_buf_alloc(void); extern uint32_t r_os_cputime_get32(void); extern uint32_t r_os_cputime_ticks_to_usecs(uint32_t ticks); @@ -631,7 +629,7 @@ esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg) modem_clock_select_lp_clock_source(PERIPH_BT_MODULE, MODEM_CLOCK_LPCLK_SRC_MAIN_XTAL, 249); esp_phy_modem_init(); esp_phy_enable(); - bt_bb_v2_init_cmplx(PHY_ENABLE_VERSION_PRINT); + esp_btbb_enable(); s_ble_active = true; if (ble_osi_coex_funcs_register((struct osi_coex_funcs_t *)&s_osi_coex_funcs_ro) != 0) { @@ -669,6 +667,7 @@ esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg) free_controller: controller_sleep_deinit(); ble_controller_deinit(); + esp_btbb_disable(); esp_phy_disable(); esp_phy_modem_deinit(); modem_clock_deselect_lp_clock_source(PERIPH_BT_MODULE); @@ -695,6 +694,8 @@ esp_err_t esp_bt_controller_deinit(void) controller_sleep_deinit(); + esp_btbb_disable(); + if (s_ble_active) { esp_phy_disable(); s_ble_active = false; diff --git a/components/bt/controller/esp32h2/bt.c b/components/bt/controller/esp32h2/bt.c index a8e4e90306..c7c8ba77c9 100644 --- a/components/bt/controller/esp32h2/bt.c +++ b/components/bt/controller/esp32h2/bt.c @@ -67,7 +67,6 @@ #define ACL_DATA_MBUF_LEADINGSPCAE 4 #endif // CONFIG_BT_BLUEDROID_ENABLED -#define PHY_ENABLE_VERSION_PRINT (1) /* Types definition ************************************************************************ @@ -120,7 +119,6 @@ extern int esp_ble_ll_set_public_addr(const uint8_t *addr); extern int esp_register_npl_funcs (struct npl_funcs_t *p_npl_func); extern void esp_unregister_npl_funcs (void); extern void npl_freertos_mempool_deinit(void); -extern void bt_bb_v2_init_cmplx(uint8_t i); extern int os_msys_buf_alloc(void); extern uint32_t r_os_cputime_get32(void); extern uint32_t r_os_cputime_ticks_to_usecs(uint32_t ticks); @@ -659,6 +657,7 @@ esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg) // modem_clock_select_lp_clock_source(PERIPH_BT_MODULE, MODEM_CLOCK_LPCLK_SRC_MAIN_XTAL, 249); // esp_phy_modem_init(); esp_phy_enable(); + esp_btbb_enable(); s_ble_active = true; if (ble_osi_coex_funcs_register((struct osi_coex_funcs_t *)&s_osi_coex_funcs_ro) != 0) { @@ -696,6 +695,7 @@ esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg) free_controller: controller_sleep_deinit(); ble_controller_deinit(); + esp_btbb_disable(); esp_phy_disable(); // esp_phy_modem_deinit(); // modem_clock_deselect_lp_clock_source(PERIPH_BT_MODULE); @@ -722,6 +722,8 @@ esp_err_t esp_bt_controller_deinit(void) controller_sleep_deinit(); + esp_btbb_disable(); + if (s_ble_active) { esp_phy_disable(); s_ble_active = false; diff --git a/components/bt/controller/esp32h4/bt.c b/components/bt/controller/esp32h4/bt.c index 568f1ebb0d..67a66f0c97 100644 --- a/components/bt/controller/esp32h4/bt.c +++ b/components/bt/controller/esp32h4/bt.c @@ -123,7 +123,6 @@ extern int esp_ble_ll_set_public_addr(const uint8_t *addr); extern int esp_register_npl_funcs (struct npl_funcs_t *p_npl_func); extern void esp_unregister_npl_funcs (void); extern void npl_freertos_mempool_deinit(void); -extern void bt_bb_v2_init_cmplx(uint8_t i); extern int os_msys_buf_alloc(void); extern uint32_t r_os_cputime_get32(void); extern uint32_t r_os_cputime_ticks_to_usecs(uint32_t ticks); @@ -641,6 +640,7 @@ esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg) // init phy esp_phy_enable(); + esp_btbb_enable(); s_ble_active = true; // set bb delay bt_bb_set_le_tx_on_delay(50); @@ -681,6 +681,7 @@ esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg) free_controller: controller_sleep_deinit(); ble_controller_deinit(); + esp_btbb_disable(); esp_phy_disable(); #if CONFIG_BT_NIMBLE_ENABLED ble_npl_eventq_deinit(nimble_port_get_dflt_eventq()); @@ -703,6 +704,8 @@ esp_err_t esp_bt_controller_deinit(void) controller_sleep_deinit(); + esp_btbb_disable(); + if (s_ble_active) { esp_phy_disable(); s_ble_active = false; @@ -725,8 +728,6 @@ esp_err_t esp_bt_controller_deinit(void) npl_freertos_mempool_deinit(); - esp_phy_disable(); - ble_controller_status = ESP_BT_CONTROLLER_STATUS_IDLE; return ESP_OK; diff --git a/components/esp_phy/include/esp_phy_init.h b/components/esp_phy/include/esp_phy_init.h index 4f30c7795f..4813e5bdee 100644 --- a/components/esp_phy/include/esp_phy_init.h +++ b/components/esp_phy/include/esp_phy_init.h @@ -180,6 +180,15 @@ void esp_phy_disable(void); */ void esp_btbb_enable(void); +/** + * @brief Disable BTBB module + * + * Dsiable BTBB module, used by IEEE802154 or Bluetooth. + * Users should not call this API in their application. + * + */ +void esp_btbb_disable(void); + /** * @brief Load calibration data from NVS and initialize PHY and RF module */ diff --git a/components/esp_phy/src/btbb_init.c b/components/esp_phy/src/btbb_init.c index 5ae016391a..726afd0e9d 100644 --- a/components/esp_phy/src/btbb_init.c +++ b/components/esp_phy/src/btbb_init.c @@ -23,3 +23,12 @@ void esp_btbb_enable(void) s_btbb_access_ref++; _lock_release(&s_btbb_access_lock); } + +void esp_btbb_disable(void) +{ + _lock_acquire(&s_btbb_access_lock); + if (s_btbb_access_ref > 0) { + s_btbb_access_ref--; + } + _lock_release(&s_btbb_access_lock); +} diff --git a/components/esp_phy/src/phy_init_esp32hxx.c b/components/esp_phy/src/phy_init_esp32hxx.c index db6c257fcd..d1ac1f454f 100644 --- a/components/esp_phy/src/phy_init_esp32hxx.c +++ b/components/esp_phy/src/phy_init_esp32hxx.c @@ -48,7 +48,6 @@ void esp_phy_enable(void) _lock_acquire(&s_phy_access_lock); if (s_phy_access_ref == 0) { register_chipv7_phy(NULL, NULL, PHY_RF_CAL_FULL); - bt_bb_v2_init_cmplx(PHY_ENABLE_VERSION_PRINT); phy_version_print(); }