summaryrefslogtreecommitdiffstats
path: root/drivers/bluetooth/btbcm.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2017-06-10 08:33:16 -0400
committerSzymon Janc <szymon.janc@codecoup.pl>2017-06-12 05:46:12 -0400
commit4284ecbeda81083f4c7a3ce325b4a9d675657e61 (patch)
treeea2ffc003708f4a19e07cf9aab657010cbd8579f /drivers/bluetooth/btbcm.c
parent313f6888c8fbb1bc8b36c9012ce4e1de848df696 (diff)
Bluetooth: btbcm: Read controller features during configuration
Read the Broadcom specific controller features during configuration and print them for informational purposes. < HCI Command: Broadcom Read Controller Features (0x3f|0x006e) plen 0 > HCI Event: Command Complete (0x0e) plen 12 Broadcom Read Controller Features (0x3f|0x006e) ncmd 1 Status: Success (0x00) Features: 0x07 0x00 0x00 0x00 0x00 0x00 0x00 0x00 Multi-AV transport bandwidth reducer WBS SBC FW LC-PLC Signed-off-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Szymon Janc <szymon.janc@codecoup.pl>
Diffstat (limited to 'drivers/bluetooth/btbcm.c')
-rw-r--r--drivers/bluetooth/btbcm.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/drivers/bluetooth/btbcm.c b/drivers/bluetooth/btbcm.c
index ba3dd2eafc09..24f8c4e93f4e 100644
--- a/drivers/bluetooth/btbcm.c
+++ b/drivers/bluetooth/btbcm.c
@@ -246,6 +246,27 @@ static struct sk_buff *btbcm_read_verbose_config(struct hci_dev *hdev)
246 return skb; 246 return skb;
247} 247}
248 248
249static struct sk_buff *btbcm_read_controller_features(struct hci_dev *hdev)
250{
251 struct sk_buff *skb;
252
253 skb = __hci_cmd_sync(hdev, 0xfc6e, 0, NULL, HCI_INIT_TIMEOUT);
254 if (IS_ERR(skb)) {
255 BT_ERR("%s: BCM: Read controller features failed (%ld)",
256 hdev->name, PTR_ERR(skb));
257 return skb;
258 }
259
260 if (skb->len != 9) {
261 BT_ERR("%s: BCM: Controller features length mismatch",
262 hdev->name);
263 kfree_skb(skb);
264 return ERR_PTR(-EIO);
265 }
266
267 return skb;
268}
269
249static struct sk_buff *btbcm_read_usb_product(struct hci_dev *hdev) 270static struct sk_buff *btbcm_read_usb_product(struct hci_dev *hdev)
250{ 271{
251 struct sk_buff *skb; 272 struct sk_buff *skb;
@@ -417,6 +438,14 @@ int btbcm_setup_patchram(struct hci_dev *hdev)
417 BT_INFO("%s: BCM: chip id %u", hdev->name, skb->data[1]); 438 BT_INFO("%s: BCM: chip id %u", hdev->name, skb->data[1]);
418 kfree_skb(skb); 439 kfree_skb(skb);
419 440
441 /* Read Controller Features */
442 skb = btbcm_read_controller_features(hdev);
443 if (IS_ERR(skb))
444 return PTR_ERR(skb);
445
446 BT_INFO("%s: BCM: features 0x%2.2x", hdev->name, skb->data[1]);
447 kfree_skb(skb);
448
420 /* Read Local Name */ 449 /* Read Local Name */
421 skb = btbcm_read_local_name(hdev); 450 skb = btbcm_read_local_name(hdev);
422 if (IS_ERR(skb)) 451 if (IS_ERR(skb))
@@ -540,6 +569,13 @@ int btbcm_setup_apple(struct hci_dev *hdev)
540 kfree_skb(skb); 569 kfree_skb(skb);
541 } 570 }
542 571
572 /* Read Controller Features */
573 skb = btbcm_read_controller_features(hdev);
574 if (!IS_ERR(skb)) {
575 BT_INFO("%s: BCM: features 0x%2.2x", hdev->name, skb->data[1]);
576 kfree_skb(skb);
577 }
578
543 /* Read Local Name */ 579 /* Read Local Name */
544 skb = btbcm_read_local_name(hdev); 580 skb = btbcm_read_local_name(hdev);
545 if (!IS_ERR(skb)) { 581 if (!IS_ERR(skb)) {