diff options
| -rw-r--r-- | drivers/bluetooth/btbcm.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/drivers/bluetooth/btbcm.c b/drivers/bluetooth/btbcm.c index ad7371da5aaa..2fc363a0393d 100644 --- a/drivers/bluetooth/btbcm.c +++ b/drivers/bluetooth/btbcm.c | |||
| @@ -181,6 +181,27 @@ static int btbcm_reset(struct hci_dev *hdev) | |||
| 181 | return 0; | 181 | return 0; |
| 182 | } | 182 | } |
| 183 | 183 | ||
| 184 | static struct sk_buff *btbcm_read_local_name(struct hci_dev *hdev) | ||
| 185 | { | ||
| 186 | struct sk_buff *skb; | ||
| 187 | |||
| 188 | skb = __hci_cmd_sync(hdev, HCI_OP_READ_LOCAL_NAME, 0, NULL, | ||
| 189 | HCI_INIT_TIMEOUT); | ||
| 190 | if (IS_ERR(skb)) { | ||
| 191 | BT_ERR("%s: BCM: Reading local name failed (%ld)", | ||
| 192 | hdev->name, PTR_ERR(skb)); | ||
| 193 | return skb; | ||
| 194 | } | ||
| 195 | |||
| 196 | if (skb->len != sizeof(struct hci_rp_read_local_name)) { | ||
| 197 | BT_ERR("%s: BCM: Local name length mismatch", hdev->name); | ||
| 198 | kfree_skb(skb); | ||
| 199 | return ERR_PTR(-EIO); | ||
| 200 | } | ||
| 201 | |||
| 202 | return skb; | ||
| 203 | } | ||
| 204 | |||
| 184 | static struct sk_buff *btbcm_read_local_version(struct hci_dev *hdev) | 205 | static struct sk_buff *btbcm_read_local_version(struct hci_dev *hdev) |
| 185 | { | 206 | { |
| 186 | struct sk_buff *skb; | 207 | struct sk_buff *skb; |
| @@ -393,6 +414,14 @@ int btbcm_setup_patchram(struct hci_dev *hdev) | |||
| 393 | BT_INFO("%s: BCM: chip id %u", hdev->name, skb->data[1]); | 414 | BT_INFO("%s: BCM: chip id %u", hdev->name, skb->data[1]); |
| 394 | kfree_skb(skb); | 415 | kfree_skb(skb); |
| 395 | 416 | ||
| 417 | /* Read Local Name */ | ||
| 418 | skb = btbcm_read_local_name(hdev); | ||
| 419 | if (IS_ERR(skb)) | ||
| 420 | return PTR_ERR(skb); | ||
| 421 | |||
| 422 | BT_INFO("%s: %s", hdev->name, (char *)(skb->data + 1)); | ||
| 423 | kfree_skb(skb); | ||
| 424 | |||
| 396 | switch ((rev & 0xf000) >> 12) { | 425 | switch ((rev & 0xf000) >> 12) { |
| 397 | case 0: | 426 | case 0: |
| 398 | case 3: | 427 | case 3: |
| @@ -464,6 +493,14 @@ int btbcm_setup_patchram(struct hci_dev *hdev) | |||
| 464 | hw_name ? : "BCM", (subver & 0x7000) >> 13, | 493 | hw_name ? : "BCM", (subver & 0x7000) >> 13, |
| 465 | (subver & 0x1f00) >> 8, (subver & 0x00ff), rev & 0x0fff); | 494 | (subver & 0x1f00) >> 8, (subver & 0x00ff), rev & 0x0fff); |
| 466 | 495 | ||
| 496 | /* Read Local Name */ | ||
| 497 | skb = btbcm_read_local_name(hdev); | ||
| 498 | if (IS_ERR(skb)) | ||
| 499 | return PTR_ERR(skb); | ||
| 500 | |||
| 501 | BT_INFO("%s: %s", hdev->name, (char *)(skb->data + 1)); | ||
| 502 | kfree_skb(skb); | ||
| 503 | |||
| 467 | btbcm_check_bdaddr(hdev); | 504 | btbcm_check_bdaddr(hdev); |
| 468 | 505 | ||
| 469 | set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks); | 506 | set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks); |
| @@ -490,6 +527,13 @@ int btbcm_setup_apple(struct hci_dev *hdev) | |||
| 490 | kfree_skb(skb); | 527 | kfree_skb(skb); |
| 491 | } | 528 | } |
| 492 | 529 | ||
| 530 | /* Read Local Name */ | ||
| 531 | skb = btbcm_read_local_name(hdev); | ||
| 532 | if (!IS_ERR(skb)) { | ||
| 533 | BT_INFO("%s: %s", hdev->name, (char *)(skb->data + 1)); | ||
| 534 | kfree_skb(skb); | ||
| 535 | } | ||
| 536 | |||
| 493 | set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks); | 537 | set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks); |
| 494 | 538 | ||
| 495 | return 0; | 539 | return 0; |
