summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcel Holtmann2014-07-05 10:48:03 +0200
committerJohan Hedberg2014-07-05 14:48:28 +0200
commite30d3f5fef378cd14ba8c331a5c7a2f9239c2770 (patch)
treed012bca32e42ff5d6a6d2407aa2cd0d4034d48bd
parentBluetooth: Run special init procedure for unconfigured controllers (diff)
downloadkernel-qcow2-linux-e30d3f5fef378cd14ba8c331a5c7a2f9239c2770.tar.gz
kernel-qcow2-linux-e30d3f5fef378cd14ba8c331a5c7a2f9239c2770.tar.xz
kernel-qcow2-linux-e30d3f5fef378cd14ba8c331a5c7a2f9239c2770.zip
Bluetooth: Store Bluetooth address from controller setup
During the setup phase of a controller, the Bluetooth address will be read and to have that original address available for later use, store it as setup address. Signed-off-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
-rw-r--r--include/net/bluetooth/hci_core.h1
-rw-r--r--net/bluetooth/hci_event.c8
2 files changed, 8 insertions, 1 deletions
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
index 1cae4d3a629d..aff285698c85 100644
--- a/include/net/bluetooth/hci_core.h
+++ b/include/net/bluetooth/hci_core.h
@@ -171,6 +171,7 @@ struct hci_dev {
__u8 bus;
__u8 dev_type;
bdaddr_t bdaddr;
+ bdaddr_t setup_addr;
bdaddr_t public_addr;
bdaddr_t random_addr;
bdaddr_t static_addr;
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 013c371d3c87..c2ba79c8fe51 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -645,8 +645,14 @@ static void hci_cc_read_bd_addr(struct hci_dev *hdev, struct sk_buff *skb)
BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
- if (!rp->status)
+ if (rp->status)
+ return;
+
+ if (test_bit(HCI_INIT, &hdev->flags))
bacpy(&hdev->bdaddr, &rp->bdaddr);
+
+ if (test_bit(HCI_SETUP, &hdev->dev_flags))
+ bacpy(&hdev->setup_addr, &rp->bdaddr);
}
static void hci_cc_read_page_scan_activity(struct hci_dev *hdev,