|
|
@@ -4669,6 +4669,17 @@ void mgmt_index_removed(struct hci_dev *hdev)
|
|
|
mgmt_event(MGMT_EV_INDEX_REMOVED, hdev, NULL, 0, NULL);
|
|
|
}
|
|
|
|
|
|
+/* This function requires the caller holds hdev->lock */
|
|
|
+static void restart_le_auto_conns(struct hci_dev *hdev)
|
|
|
+{
|
|
|
+ struct hci_conn_params *p;
|
|
|
+
|
|
|
+ list_for_each_entry(p, &hdev->le_conn_params, list) {
|
|
|
+ if (p->auto_connect == HCI_AUTO_CONN_ALWAYS)
|
|
|
+ hci_pend_le_conn_add(hdev, &p->addr, p->addr_type);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static void powered_complete(struct hci_dev *hdev, u8 status)
|
|
|
{
|
|
|
struct cmd_lookup match = { NULL, hdev };
|
|
|
@@ -4677,6 +4688,8 @@ static void powered_complete(struct hci_dev *hdev, u8 status)
|
|
|
|
|
|
hci_dev_lock(hdev);
|
|
|
|
|
|
+ restart_le_auto_conns(hdev);
|
|
|
+
|
|
|
mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp, &match);
|
|
|
|
|
|
new_settings(hdev, match.sk);
|