#include "bt.h"
#include "esp_err.h"
#include "esp_log.h"
+#include "esp_pm.h"
#if CONFIG_BT_ENABLED
static portMUX_TYPE global_int_mux = portMUX_INITIALIZER_UNLOCKED;
+#ifdef CONFIG_PM_ENABLE
+static esp_pm_lock_handle_t s_pm_lock;
+#endif
+
static void IRAM_ATTR interrupt_disable(void)
{
portENTER_CRITICAL(&global_int_mux);
return ESP_ERR_INVALID_ARG;
}
+#ifdef CONFIG_PM_ENABLE
+ esp_err_t err = esp_pm_lock_create(ESP_PM_APB_FREQ_MAX, 0, "bt", &s_pm_lock);
+ if (err != ESP_OK) {
+ return err;
+ }
+#endif
+
btdm_osi_funcs_register(&osi_funcs);
btdm_controller_mem_init();
ret = btdm_controller_init(btdm_cfg_mask, cfg);
if (ret) {
+#ifdef CONFIG_PM_ENABLE
+ esp_pm_lock_delete(s_pm_lock);
+ s_pm_lock = NULL;
+#endif
return ESP_ERR_NO_MEM;
}
}
btdm_controller_status = ESP_BT_CONTROLLER_STATUS_IDLE;
+
+#ifdef CONFIG_PM_ENABLE
+ esp_pm_lock_delete(s_pm_lock);
+ s_pm_lock = NULL;
+#endif
+
return ESP_OK;
}
return ESP_ERR_INVALID_ARG;
}
+#ifdef CONFIG_PM_ENABLE
+ esp_pm_lock_acquire(s_pm_lock);
+#endif
+
esp_phy_load_cal_and_init();
if (btdm_bb_init_flag == false) {
btdm_controller_status = ESP_BT_CONTROLLER_STATUS_INITED;
}
+#ifdef CONFIG_PM_ENABLE
+ esp_pm_lock_release(s_pm_lock);
+#endif
+
return ESP_OK;
}