diff options
author | Frederic Danis <frederic.danis@linux.intel.com> | 2015-05-28 05:25:02 -0400 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2015-06-06 01:30:12 -0400 |
commit | a8f3b9418ad2dd8f3efee0c08cdd61ac3763e739 (patch) | |
tree | 5b1da660970f22f8930907b47faa6f4986306439 /drivers/bluetooth/btbcm.c | |
parent | 18aeb4445aa00f6f402ba3a92a2e9ff3d13882b4 (diff) |
Bluetooth: btbcm: Add BCM4324B3 UART device
Add "waiting for configuration" address.
Add lmp_subver and firmware name for BCM4324B3 controller.
Signed-off-by: Frederic Danis <frederic.danis@linux.intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'drivers/bluetooth/btbcm.c')
-rw-r--r-- | drivers/bluetooth/btbcm.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/bluetooth/btbcm.c b/drivers/bluetooth/btbcm.c index c7aec9776620..14e4647686bd 100644 --- a/drivers/bluetooth/btbcm.c +++ b/drivers/bluetooth/btbcm.c | |||
@@ -33,6 +33,7 @@ | |||
33 | #define VERSION "0.1" | 33 | #define VERSION "0.1" |
34 | 34 | ||
35 | #define BDADDR_BCM20702A0 (&(bdaddr_t) {{0x00, 0xa0, 0x02, 0x70, 0x20, 0x00}}) | 35 | #define BDADDR_BCM20702A0 (&(bdaddr_t) {{0x00, 0xa0, 0x02, 0x70, 0x20, 0x00}}) |
36 | #define BDADDR_BCM4324B3 (&(bdaddr_t) {{0x00, 0x00, 0x00, 0xb3, 0x24, 0x43}}) | ||
36 | 37 | ||
37 | int btbcm_check_bdaddr(struct hci_dev *hdev) | 38 | int btbcm_check_bdaddr(struct hci_dev *hdev) |
38 | { | 39 | { |
@@ -56,10 +57,18 @@ int btbcm_check_bdaddr(struct hci_dev *hdev) | |||
56 | 57 | ||
57 | bda = (struct hci_rp_read_bd_addr *)skb->data; | 58 | bda = (struct hci_rp_read_bd_addr *)skb->data; |
58 | 59 | ||
59 | /* The address 00:20:70:02:A0:00 indicates a BCM20702A0 controller | 60 | /* Check if the address indicates a controller with either an |
61 | * invalid or default address. In both cases the device needs | ||
62 | * to be marked as not having a valid address. | ||
63 | * | ||
64 | * The address 00:20:70:02:A0:00 indicates a BCM20702A0 controller | ||
60 | * with no configured address. | 65 | * with no configured address. |
66 | * | ||
67 | * The address 43:24:B3:00:00:00 indicates a BCM4324B3 controller | ||
68 | * with waiting for configuration state. | ||
61 | */ | 69 | */ |
62 | if (!bacmp(&bda->bdaddr, BDADDR_BCM20702A0)) { | 70 | if (!bacmp(&bda->bdaddr, BDADDR_BCM20702A0) || |
71 | !bacmp(&bda->bdaddr, BDADDR_BCM4324B3)) { | ||
63 | BT_INFO("%s: BCM: Using default device address (%pMR)", | 72 | BT_INFO("%s: BCM: Using default device address (%pMR)", |
64 | hdev->name, &bda->bdaddr); | 73 | hdev->name, &bda->bdaddr); |
65 | set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks); | 74 | set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks); |
@@ -233,6 +242,7 @@ static const struct { | |||
233 | const char *name; | 242 | const char *name; |
234 | } bcm_uart_subver_table[] = { | 243 | } bcm_uart_subver_table[] = { |
235 | { 0x410e, "BCM43341B0" }, /* 002.001.014 */ | 244 | { 0x410e, "BCM43341B0" }, /* 002.001.014 */ |
245 | { 0x4406, "BCM4324B3" }, /* 002.004.006 */ | ||
236 | { } | 246 | { } |
237 | }; | 247 | }; |
238 | 248 | ||
@@ -288,6 +298,7 @@ int btbcm_setup_patchram(struct hci_dev *hdev) | |||
288 | 298 | ||
289 | switch ((rev & 0xf000) >> 12) { | 299 | switch ((rev & 0xf000) >> 12) { |
290 | case 0: | 300 | case 0: |
301 | case 3: | ||
291 | for (i = 0; bcm_uart_subver_table[i].name; i++) { | 302 | for (i = 0; bcm_uart_subver_table[i].name; i++) { |
292 | if (subver == bcm_uart_subver_table[i].subver) { | 303 | if (subver == bcm_uart_subver_table[i].subver) { |
293 | hw_name = bcm_uart_subver_table[i].name; | 304 | hw_name = bcm_uart_subver_table[i].name; |