drivers: bluetooth: hci_nxp_setup: support for bt disable and reinit
- added flag in nxp setup driver to perform HCI controller firmware-
load and configuration only once. This avoid loading/setting-up
controller fw on successive bt_init() after bt_disable() call.
Signed-off-by: Nirav Agrawal <nirav.agrawal@nxp.com>
diff --git a/drivers/bluetooth/hci/hci_nxp_setup.c b/drivers/bluetooth/hci/hci_nxp_setup.c
index bacc9f3..6bd0e5d 100644
--- a/drivers/bluetooth/hci/hci_nxp_setup.c
+++ b/drivers/bluetooth/hci/hci_nxp_setup.c
@@ -194,6 +194,7 @@
bool is_error_case;
bool is_cmd7_req;
bool is_entry_point_req;
+ bool is_setup_done;
uint8_t last_5bytes_buffer[6];
};
@@ -1171,11 +1172,15 @@
int bt_hci_transport_setup(const struct device *dev)
{
+ int ret = 0;
if (dev != uart_dev) {
return -EINVAL;
}
- return bt_nxp_ctlr_init();
+ if (!fw_upload.is_setup_done) {
+ ret = bt_nxp_ctlr_init();
+ }
+ return ret;
}
#define BT_HCI_VSC_BAUDRATE_UPDATE_LENGTH 4
@@ -1228,13 +1233,15 @@
return 0;
}
- err = bt_hci_baudrate_update(dev, operation_speed);
- if (err) {
- return err;
- }
+ if (!fw_upload.is_setup_done) {
+ err = bt_hci_baudrate_update(dev, operation_speed);
+ if (err) {
+ return err;
+ }
- /* BT waiting time after controller bandrate updated */
- (void)k_msleep(CONFIG_BT_H4_NXP_CTLR_WAIT_TIME_AFTER_BAUDRATE_UPDATE);
+ /* BT waiting time after controller bandrate updated */
+ (void)k_msleep(CONFIG_BT_H4_NXP_CTLR_WAIT_TIME_AFTER_BAUDRATE_UPDATE);
+ }
err = fw_upload_uart_reconfig(operation_speed, flowcontrol_of_hci);
if (err) {
@@ -1242,5 +1249,7 @@
return err;
}
+ fw_upload.is_setup_done = true;
+
return 0;
}