Bluetooth: Add shutdown callback before closing the device
authorTedd Ho-Jeong An <tedd.an@intel.com>
Fri, 13 Feb 2015 17:20:50 +0000 (09:20 -0800)
committerMarcel Holtmann <marcel@holtmann.org>
Sat, 14 Feb 2015 23:37:52 +0000 (00:37 +0100)
This callback allows a vendor to send the vendor specific commands
before cloing the hci interface.

Signed-off-by: Tedd Ho-Jeong An <tedd.an@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
include/net/bluetooth/hci_core.h
net/bluetooth/hci_core.c

index 52863c3..5f1ca33 100644 (file)
@@ -373,6 +373,7 @@ struct hci_dev {
        int (*close)(struct hci_dev *hdev);
        int (*flush)(struct hci_dev *hdev);
        int (*setup)(struct hci_dev *hdev);
+       int (*shutdown)(struct hci_dev *hdev);
        int (*send)(struct hci_dev *hdev, struct sk_buff *skb);
        void (*notify)(struct hci_dev *hdev, unsigned int evt);
        void (*hw_error)(struct hci_dev *hdev, u8 code);
index 3322d3f..4135a44 100644 (file)
@@ -1591,6 +1591,12 @@ static int hci_dev_do_close(struct hci_dev *hdev)
 {
        BT_DBG("%s %p", hdev->name, hdev);
 
+       if (!test_bit(HCI_UNREGISTER, &hdev->dev_flags)) {
+               /* Execute vendor specific shutdown routine */
+               if (hdev->shutdown)
+                       hdev->shutdown(hdev);
+       }
+
        cancel_delayed_work(&hdev->power_off);
 
        hci_req_cancel(hdev, ENODEV);