Bluetooth: btintel: Set quirk for non-persistent diagnostic settings
authorMarcel Holtmann <marcel@holtmann.org>
Sat, 17 Oct 2015 14:00:27 +0000 (16:00 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Tue, 20 Oct 2015 22:49:22 +0000 (00:49 +0200)
For Intel controllers the diagnostics settings are not persistent over
HCI Reset. So set the quirk to programm them again on every power up.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
drivers/bluetooth/btintel.c
drivers/bluetooth/btusb.c

index 95652aa..8d48917 100644 (file)
@@ -97,9 +97,6 @@ int btintel_set_diag(struct hci_dev *hdev, bool enable)
        u8 param[3];
        int err;
 
-       if (!test_bit(HCI_RUNNING, &hdev->flags))
-               return -ENETDOWN;
-
        if (enable) {
                param[0] = 0x03;
                param[1] = 0x03;
@@ -113,6 +110,8 @@ int btintel_set_diag(struct hci_dev *hdev, bool enable)
        skb = __hci_cmd_sync(hdev, 0xfc43, 3, param, HCI_INIT_TIMEOUT);
        if (IS_ERR(skb)) {
                err = PTR_ERR(skb);
+               if (err == -ENODATA)
+                       return 0;
                BT_ERR("%s: Changing Intel diagnostic mode failed (%d)",
                       hdev->name, err);
                return err;
index 27830da..ab82c02 100644 (file)
@@ -2894,6 +2894,7 @@ static int btusb_probe(struct usb_interface *intf,
                hdev->set_diag = btintel_set_diag;
                hdev->set_bdaddr = btintel_set_bdaddr;
                set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks);
+               set_bit(HCI_QUIRK_NON_PERSISTENT_DIAG, &hdev->quirks);
        }
 
        if (id->driver_info & BTUSB_MARVELL)