summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/bluetooth/btbcm.c44
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
184static 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
184static struct sk_buff *btbcm_read_local_version(struct hci_dev *hdev) 205static 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;