aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/bluetooth/btusb.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/bluetooth/btusb.c')
-rw-r--r--drivers/bluetooth/btusb.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 0e5158eaec6c..77295c36df51 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -2321,6 +2321,27 @@ static int btusb_set_bdaddr_intel(struct hci_dev *hdev, const bdaddr_t *bdaddr)
2321 return 0; 2321 return 0;
2322} 2322}
2323 2323
2324static int btusb_shutdown_intel(struct hci_dev *hdev)
2325{
2326 struct sk_buff *skb;
2327 long ret;
2328
2329 /* Some platforms have an issue with BT LED when the interface is
2330 * down or BT radio is turned off, which takes 5 seconds to BT LED
2331 * goes off. This command turns off the BT LED immediately.
2332 */
2333 skb = __hci_cmd_sync(hdev, 0xfc3f, 0, NULL, HCI_INIT_TIMEOUT);
2334 if (IS_ERR(skb)) {
2335 ret = PTR_ERR(skb);
2336 BT_ERR("%s: turning off Intel device LED failed (%ld)",
2337 hdev->name, ret);
2338 return ret;
2339 }
2340 kfree_skb(skb);
2341
2342 return 0;
2343}
2344
2324static int btusb_set_bdaddr_marvell(struct hci_dev *hdev, 2345static int btusb_set_bdaddr_marvell(struct hci_dev *hdev,
2325 const bdaddr_t *bdaddr) 2346 const bdaddr_t *bdaddr)
2326{ 2347{
@@ -2698,6 +2719,7 @@ static int btusb_probe(struct usb_interface *intf,
2698 2719
2699 if (id->driver_info & BTUSB_INTEL) { 2720 if (id->driver_info & BTUSB_INTEL) {
2700 hdev->setup = btusb_setup_intel; 2721 hdev->setup = btusb_setup_intel;
2722 hdev->shutdown = btusb_shutdown_intel;
2701 hdev->set_bdaddr = btusb_set_bdaddr_intel; 2723 hdev->set_bdaddr = btusb_set_bdaddr_intel;
2702 set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks); 2724 set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks);
2703 } 2725 }