diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2017-08-17 05:02:40 -0400 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@intel.com> | 2017-08-17 05:11:24 -0400 |
commit | e76dc1dd0065a6bc6fbda062b96d6df817a21c1c (patch) | |
tree | fe91cd8de2b35b62f4ef8d06bd7bd742efc06582 /drivers/bluetooth/btbcm.c | |
parent | 74183a1c50a3c61e62d2e585107ea3c0b942a3ff (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.c | 69 |
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 | ||
290 | static 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 | |||
290 | static const struct { | 321 | static 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: |