summaryrefslogtreecommitdiffstats
path: root/net/bluetooth/hci_core.c
diff options
context:
space:
mode:
authorMarcel Holtmann2014-07-04 16:54:37 +0200
committerJohan Hedberg2014-07-04 17:09:32 +0200
commit89bc22d23f63c2d437f677d7eae0fa922bedcdcb (patch)
tree2c797d8fe591af18be6f453abcfa2c14b74ead1a /net/bluetooth/hci_core.c
parentBluetooth: Document the existing device quirks (diff)
downloadkernel-qcow2-linux-89bc22d23f63c2d437f677d7eae0fa922bedcdcb.tar.gz
kernel-qcow2-linux-89bc22d23f63c2d437f677d7eae0fa922bedcdcb.tar.xz
kernel-qcow2-linux-89bc22d23f63c2d437f677d7eae0fa922bedcdcb.zip
Bluetooth: Add quirk for invalid controller address setting
When a Bluetooth controller does not have a valid public Bluetooth address, then allow the driver to indicate this. If the quirk is set, the Bluetooth core will switch to unconfigured state first and will allow userspace to configure the address before starting the full initialization of the controller. Signed-off-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Diffstat (limited to 'net/bluetooth/hci_core.c')
-rw-r--r--net/bluetooth/hci_core.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index 038b4748375b..c92bee84413f 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -2246,9 +2246,13 @@ 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))
+ if (hdev->setup && test_bit(HCI_SETUP, &hdev->dev_flags)) {
ret = hdev->setup(hdev);
+ if (test_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks))
+ set_bit(HCI_UNCONFIGURED, &hdev->dev_flags);
+ }
+
/* If public address change is configured, ensure that the
* address gets programmed. If the driver does not support
* changing the public address, fail the power on procedure.