Bluetooth: Fix quirks that are valid during setup driver callback
authorMarcel Holtmann <marcel@holtmann.org>
Fri, 4 Jul 2014 15:23:34 +0000 (17:23 +0200)
committerJohan Hedberg <johan.hedberg@intel.com>
Fri, 4 Jul 2014 18:09:59 +0000 (21:09 +0300)
For the quirks that are allow to be set during setup callback, the
check needs to be modified so that they are applied even if no
setup callback provided by the driver.

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

index c007b3543e702f39c7b9a1dec4b7da7d40de74b5..b29f3938e6b38954412b56c64913934434a3a569 100644 (file)
@@ -2246,9 +2246,16 @@ static int hci_dev_do_open(struct hci_dev *hdev)
        atomic_set(&hdev->cmd_cnt, 1);
        set_bit(HCI_INIT, &hdev->flags);
 
-       if (hdev->setup && test_bit(HCI_SETUP, &hdev->dev_flags)) {
-               ret = hdev->setup(hdev);
+       if (test_bit(HCI_SETUP, &hdev->dev_flags)) {
+               if (hdev->setup)
+                       ret = hdev->setup(hdev);
 
+               /* The transport driver can set these quirks before
+                * creating the HCI device or in its setup callback.
+                *
+                * In case any of them is set, the controller has to
+                * start up as unconfigured.
+                */
                if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks) ||
                    test_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks))
                        set_bit(HCI_UNCONFIGURED, &hdev->dev_flags);