From d80462761ca031ee5835b815f442dd994b6adee3 Mon Sep 17 00:00:00 2001 From: gongyantao Date: Wed, 20 May 2026 10:42:51 +0800 Subject: [PATCH] feat(bt): add new feature hold mode --- components/bt/porting_btdm/controller/bredr/Kconfig.in | 6 ++++++ .../controller/bredr/include/bredr_user_cfg.h | 6 ++++++ components/bt/porting_btdm/controller/bredr/src/bredr.c | 9 +++++++++ 3 files changed, 21 insertions(+) diff --git a/components/bt/porting_btdm/controller/bredr/Kconfig.in b/components/bt/porting_btdm/controller/bredr/Kconfig.in index 36bf81e9338..fd82c0f2576 100644 --- a/components/bt/porting_btdm/controller/bredr/Kconfig.in +++ b/components/bt/porting_btdm/controller/bredr/Kconfig.in @@ -167,6 +167,12 @@ config BT_CTRL_BR_EDR_CPB_RX_EN help Enable BR/EDR Connectionless Peripheral Broadcast Receive +config BT_CTRL_BR_EDR_HOLD_EN + bool "Enable BR/EDR Hold Mode" + default n + help + Enable BR/EDR Hold Mode + config BT_CTRL_BR_EDR_LK_STORE_EN bool "Enable BR/EDR controller link key storage" default n diff --git a/components/bt/porting_btdm/controller/bredr/include/bredr_user_cfg.h b/components/bt/porting_btdm/controller/bredr/include/bredr_user_cfg.h index a4d812c2283..942caad1b02 100644 --- a/components/bt/porting_btdm/controller/bredr/include/bredr_user_cfg.h +++ b/components/bt/porting_btdm/controller/bredr/include/bredr_user_cfg.h @@ -59,6 +59,12 @@ extern "C" { #define UC_BR_EDR_APB_EXT_PCA_EN 0 #endif +#if defined(CONFIG_BT_CTRL_BR_EDR_HOLD_EN) && CONFIG_BT_CTRL_BR_EDR_HOLD_EN +#define UC_BR_EDR_HOLD_EN 1 +#else +#define UC_BR_EDR_HOLD_EN 0 +#endif + #if defined(CONFIG_BT_CTRL_BR_EDR_LK_STORE_EN) && CONFIG_BT_CTRL_BR_EDR_LK_STORE_EN #define UC_BR_EDR_LK_STORE_EN 1 #else diff --git a/components/bt/porting_btdm/controller/bredr/src/bredr.c b/components/bt/porting_btdm/controller/bredr/src/bredr.c index beaa9f6272d..67e68b68778 100644 --- a/components/bt/porting_btdm/controller/bredr/src/bredr.c +++ b/components/bt/porting_btdm/controller/bredr/src/bredr.c @@ -110,6 +110,7 @@ extern int bredr_ctrl_feat_sync_en(void); extern int bredr_ctrl_feat_apb_en(void); extern int bredr_ctrl_feat_bcst_enc_en(void); extern int bredr_ctrl_feat_pca_en(void); +extern int bredr_ctrl_feat_hold_en(void); extern int bredr_ctrl_feat_cpb_rx_en(void); extern int bredr_ctrl_feat_cpb_tx_en(void); extern int bredr_ctrl_feat_dtm_en(void); @@ -626,6 +627,14 @@ static int bredr_ctrl_setup_callback(void) } #endif /* UC_BR_EDR_APB_EXT_PCA_EN */ +#if UC_BR_EDR_HOLD_EN + ret = bredr_ctrl_feat_hold_en(); + if (ret != 0) { + ESP_LOGE(BREDR_LOG_TAG, "bredr_ctrl_feat_hold_en failed, ret:%d", ret); + break; + } +#endif /* UC_BR_EDR_HOLD_EN */ + #if UC_BR_EDR_CPB_RX_LINK_NB ret = bredr_ctrl_feat_cpb_rx_en(); if (ret != 0) {