aboutsummaryrefslogtreecommitdiffstats
path: root/net/bluetooth/hci_event.c
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@intel.com>2012-02-22 21:06:55 +0200
committerJohan Hedberg <johan.hedberg@intel.com>2012-02-23 13:07:00 +0200
commit28cc7bde5978cbc58c9026123fa5f33b62ad66b3 (patch)
treeb50261ffeb89292456e02c817c2af8c07a351fa9 /net/bluetooth/hci_event.c
parentBluetooth: Fix read_name updating when HCI_SETUP is not set (diff)
downloadlinux-dev-28cc7bde5978cbc58c9026123fa5f33b62ad66b3.tar.xz
linux-dev-28cc7bde5978cbc58c9026123fa5f33b62ad66b3.zip
Bluetooth: mgmt: Allow local name changes while powered off
This patch makes it possible to set the local name before powering on the device. The name will be applied using the hci_write_local_name command once the device gets powered on. Signed-off-by: Johan Hedberg <johan.hedberg@intel.com> Acked-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'net/bluetooth/hci_event.c')
-rw-r--r--net/bluetooth/hci_event.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 9917fe3d1d18..9b30587c0de6 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -209,11 +209,10 @@ static void hci_cc_write_local_name(struct hci_dev *hdev, struct sk_buff *skb)
hci_dev_lock(hdev);
- if (status == 0)
- memcpy(hdev->dev_name, sent, HCI_MAX_NAME_LENGTH);
-
if (test_bit(HCI_MGMT, &hdev->dev_flags))
mgmt_set_local_name_complete(hdev, sent, status);
+ else if (!status)
+ memcpy(hdev->dev_name, sent, HCI_MAX_NAME_LENGTH);
hci_dev_unlock(hdev);
}
@@ -563,6 +562,14 @@ static void hci_setup(struct hci_dev *hdev)
if (hdev->hci_ver > BLUETOOTH_VER_1_1)
hci_send_cmd(hdev, HCI_OP_READ_LOCAL_COMMANDS, 0, NULL);
+ if (!test_bit(HCI_SETUP, &hdev->dev_flags) &&
+ test_bit(HCI_MGMT, &hdev->dev_flags)) {
+ struct hci_cp_write_local_name cp;
+
+ memcpy(cp.name, hdev->dev_name, sizeof(cp.name));
+ hci_send_cmd(hdev, HCI_OP_WRITE_LOCAL_NAME, sizeof(cp), &cp);
+ }
+
if (hdev->features[6] & LMP_SIMPLE_PAIR) {
if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) {
u8 mode = 0x01;