diff options
-rw-r--r-- | net/bluetooth/hci_core.c | 6 | ||||
-rw-r--r-- | net/bluetooth/mgmt.c | 9 |
2 files changed, 12 insertions, 3 deletions
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index c04197347c90..34c17a0645ce 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c | |||
@@ -933,10 +933,8 @@ static int __hci_init(struct hci_dev *hdev) | |||
933 | if (lmp_bredr_capable(hdev)) | 933 | if (lmp_bredr_capable(hdev)) |
934 | hci_debugfs_create_bredr(hdev); | 934 | hci_debugfs_create_bredr(hdev); |
935 | 935 | ||
936 | if (lmp_le_capable(hdev)) { | 936 | if (lmp_le_capable(hdev)) |
937 | hci_debugfs_create_le(hdev); | 937 | hci_debugfs_create_le(hdev); |
938 | smp_register(hdev); | ||
939 | } | ||
940 | 938 | ||
941 | return 0; | 939 | return 0; |
942 | } | 940 | } |
@@ -2133,6 +2131,8 @@ static void hci_power_off(struct work_struct *work) | |||
2133 | BT_DBG("%s", hdev->name); | 2131 | BT_DBG("%s", hdev->name); |
2134 | 2132 | ||
2135 | hci_dev_do_close(hdev); | 2133 | hci_dev_do_close(hdev); |
2134 | |||
2135 | smp_unregister(hdev); | ||
2136 | } | 2136 | } |
2137 | 2137 | ||
2138 | static void hci_discov_off(struct work_struct *work) | 2138 | static void hci_discov_off(struct work_struct *work) |
diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c index cae612658ba9..f5c4d2eed9a1 100644 --- a/net/bluetooth/mgmt.c +++ b/net/bluetooth/mgmt.c | |||
@@ -6232,6 +6232,15 @@ static void powered_complete(struct hci_dev *hdev, u8 status, u16 opcode) | |||
6232 | 6232 | ||
6233 | BT_DBG("status 0x%02x", status); | 6233 | BT_DBG("status 0x%02x", status); |
6234 | 6234 | ||
6235 | if (!status) { | ||
6236 | /* Register the available SMP channels (BR/EDR and LE) only | ||
6237 | * when successfully powering on the controller. This late | ||
6238 | * registration is required so that LE SMP can clearly | ||
6239 | * decide if the public address or static address is used. | ||
6240 | */ | ||
6241 | smp_register(hdev); | ||
6242 | } | ||
6243 | |||
6235 | hci_dev_lock(hdev); | 6244 | hci_dev_lock(hdev); |
6236 | 6245 | ||
6237 | mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp, &match); | 6246 | mgmt_pending_foreach(MGMT_OP_SET_POWERED, hdev, settings_rsp, &match); |