summaryrefslogtreecommitdiffstats
path: root/drivers/bluetooth/btbcm.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2017-08-17 05:02:40 -0400
committerJohan Hedberg <johan.hedberg@intel.com>2017-08-17 05:11:24 -0400
commite76dc1dd0065a6bc6fbda062b96d6df817a21c1c (patch)
treefe91cd8de2b35b62f4ef8d06bd7bd742efc06582 /drivers/bluetooth/btbcm.c
parent74183a1c50a3c61e62d2e585107ea3c0b942a3ff (diff)
Bluetooth: btbcm: Consolidate the controller information commands
The commands that read the basic vendor information about the Broadcom controller are duplicated for UART and USB devices. Combine them into a single function to reduce the code complexity. Signed-off-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Diffstat (limited to 'drivers/bluetooth/btbcm.c')
-rw-r--r--drivers/bluetooth/btbcm.c69
1 files changed, 39 insertions, 30 deletions
diff --git a/drivers/bluetooth/btbcm.c b/drivers/bluetooth/btbcm.c
index 9ab6cfbb831d..cc4bdefa6648 100644
--- a/drivers/bluetooth/btbcm.c
+++ b/drivers/bluetooth/btbcm.c
@@ -287,6 +287,37 @@ static struct sk_buff *btbcm_read_usb_product(struct hci_dev *hdev)
287 return skb; 287 return skb;
288} 288}
289 289
290static int btbcm_read_info(struct hci_dev *hdev)
291{
292 struct sk_buff *skb;
293
294 /* Read Verbose Config Version Info */
295 skb = btbcm_read_verbose_config(hdev);
296 if (IS_ERR(skb))
297 return PTR_ERR(skb);
298
299 BT_INFO("%s: BCM: chip id %u", hdev->name, skb->data[1]);
300 kfree_skb(skb);
301
302 /* Read Controller Features */
303 skb = btbcm_read_controller_features(hdev);
304 if (IS_ERR(skb))
305 return PTR_ERR(skb);
306
307 BT_INFO("%s: BCM: features 0x%2.2x", hdev->name, skb->data[1]);
308 kfree_skb(skb);
309
310 /* Read Local Name */
311 skb = btbcm_read_local_name(hdev);
312 if (IS_ERR(skb))
313 return PTR_ERR(skb);
314
315 BT_INFO("%s: %s", hdev->name, (char *)(skb->data + 1));
316 kfree_skb(skb);
317
318 return 0;
319}
320
290static const struct { 321static const struct {
291 u16 subver; 322 u16 subver;
292 const char *name; 323 const char *name;
@@ -322,13 +353,10 @@ int btbcm_initialize(struct hci_dev *hdev, char *fw_name, size_t len)
322 subver = le16_to_cpu(ver->lmp_subver); 353 subver = le16_to_cpu(ver->lmp_subver);
323 kfree_skb(skb); 354 kfree_skb(skb);
324 355
325 /* Read Verbose Config Version Info */ 356 /* Read controller information */
326 skb = btbcm_read_verbose_config(hdev); 357 err = btbcm_read_info(hdev);
327 if (IS_ERR(skb)) 358 if (err)
328 return PTR_ERR(skb); 359 return err;
329
330 BT_INFO("%s: BCM: chip id %u", hdev->name, skb->data[1]);
331 kfree_skb(skb);
332 360
333 switch ((rev & 0xf000) >> 12) { 361 switch ((rev & 0xf000) >> 12) {
334 case 0: 362 case 0:
@@ -431,29 +459,10 @@ int btbcm_setup_patchram(struct hci_dev *hdev)
431 subver = le16_to_cpu(ver->lmp_subver); 459 subver = le16_to_cpu(ver->lmp_subver);
432 kfree_skb(skb); 460 kfree_skb(skb);
433 461
434 /* Read Verbose Config Version Info */ 462 /* Read controller information */
435 skb = btbcm_read_verbose_config(hdev); 463 err = btbcm_read_info(hdev);
436 if (IS_ERR(skb)) 464 if (err)
437 return PTR_ERR(skb); 465 return err;
438
439 BT_INFO("%s: BCM: chip id %u", hdev->name, skb->data[1]);
440 kfree_skb(skb);
441
442 /* Read Controller Features */
443 skb = btbcm_read_controller_features(hdev);
444 if (IS_ERR(skb))
445 return PTR_ERR(skb);
446
447 BT_INFO("%s: BCM: features 0x%2.2x", hdev->name, skb->data[1]);
448 kfree_skb(skb);
449
450 /* Read Local Name */
451 skb = btbcm_read_local_name(hdev);
452 if (IS_ERR(skb))
453 return PTR_ERR(skb);
454
455 BT_INFO("%s: %s", hdev->name, (char *)(skb->data + 1));
456 kfree_skb(skb);
457 466
458 switch ((rev & 0xf000) >> 12) { 467 switch ((rev & 0xf000) >> 12) {
459 case 0: 468 case 0: