hci_unregister_suspend_notifier(hdev);
 
-       msft_unregister(hdev);
-
        hci_dev_do_close(hdev);
 
        if (!test_bit(HCI_INIT, &hdev->flags) &&
        hci_discovery_filter_clear(hdev);
        hci_blocked_keys_clear(hdev);
        hci_codec_list_clear(&hdev->local_codecs);
+       msft_release(hdev);
        hci_dev_unlock(hdev);
 
        ida_destroy(&hdev->unset_handle_ida);
 
        mutex_init(&msft->filter_lock);
 }
 
-void msft_unregister(struct hci_dev *hdev)
+void msft_release(struct hci_dev *hdev)
 {
        struct msft_data *msft = hdev->msft_data;
 
 
 
 bool msft_monitor_supported(struct hci_dev *hdev);
 void msft_register(struct hci_dev *hdev);
-void msft_unregister(struct hci_dev *hdev);
+void msft_release(struct hci_dev *hdev);
 void msft_do_open(struct hci_dev *hdev);
 void msft_do_close(struct hci_dev *hdev);
 void msft_vendor_evt(struct hci_dev *hdev, void *data, struct sk_buff *skb);
 }
 
 static inline void msft_register(struct hci_dev *hdev) {}
-static inline void msft_unregister(struct hci_dev *hdev) {}
+static inline void msft_release(struct hci_dev *hdev) {}
 static inline void msft_do_open(struct hci_dev *hdev) {}
 static inline void msft_do_close(struct hci_dev *hdev) {}
 static inline void msft_vendor_evt(struct hci_dev *hdev, void *data,