91 | | Building: |
92 | | * Ubuntu (on target): |
| 91 | kernel drivers: |
| 92 | * CONFIG_BT (bluetooth support; bt.ko if module) |
| 93 | * CONFIG_BT_HCIUART (UART based HCI support; hci_uart.ko if module) |
| 94 | * CONFIG_BT_HCIUART_BCM (Broadcom protocol support) |
| 95 | |
| 96 | If using a Linux 5.0+ kernel the HCI should be brought up {{{/sys/class/bluetooth/hci0}}} and configured via device-tree bindings if there is a node with a compatible string of 'brcm,bcm4330-bt'. If such bindings exist the kernel will attempt to load firmware patches from {{{/lib/firmware/brcm/BCM43430A1.hcd}}}. This looks like the following in kernel log: |
| 97 | {{{#!bash |
| 98 | [ 8.123246] Bluetooth: Core ver 2.22 |
| 99 | [ 8.123338] Bluetooth: HCI device and connection manager initialized |
| 100 | [ 8.123357] Bluetooth: HCI socket layer initialized |
| 101 | [ 8.123373] Bluetooth: L2CAP socket layer initialized |
| 102 | [ 8.123388] Bluetooth: SCO socket layer initialized |
| 103 | [ 8.191235] Bluetooth: HCI UART driver ver 2.3 |
| 104 | [ 8.194993] Bluetooth: HCI UART protocol Broadcom registered |
| 105 | [ 8.550960] Bluetooth: hci0: BCM: chip id 94 |
| 106 | [ 8.554052] Bluetooth: hci0: BCM: features 0x2e |
| 107 | [ 8.577738] Bluetooth: hci0: BCM43430A1 |
| 108 | [ 8.577755] Bluetooth: hci0: BCM43430A1 (001.002.009) build 0000 |
| 109 | [ 8.577899] Bluetooth: hci0: BCM: btbcm_patchram |
| 110 | [ 12.044095] Bluetooth: hci0: BCM43430A1 (001.002.009) build 0182 |
| 111 | }}} |
| 112 | |
| 113 | If you see messages regarding 'brcm/BCM43430A1.hcd' not found this means that the patchram firmware could not be located on your filesystem. Note that hci_uart should be compiled as a kernel module if you need to load this firmware: |
| 114 | {{{#!bash |
| 115 | [ 8.577899] bluetooth hci0: Direct firmware load for brcm/BCM43430A1.hcd failed with error -2 |
| 116 | [ 8.577910] Bluetooth: hci0: BCM: Patch brcm/BCM43430A1.hcd not found |
| 117 | }}} |
| 118 | |
| 119 | It is not entirely clear what the benefits are of the BCM43430A1.hcd firmware over the firmware already inside the part. If the firmware is not found, the HCI interface is still registered with the kernel and appears to work. |
| 120 | |
| 121 | If you have an older kernel or are missing the 'brcm,bcm4330-bt' device-tree binding you can use the {{{brcm_patchram_plus}}} utility to load a firmware via Linux userspace and register the HCI device with the kernel: |
| 122 | * Building: |
| 123 | - Ubuntu (on target): |