From: toolmmy <tool...@gmail.com> This patch adds the bluetooth support for the brcm43438 module on the raspberrypi3 by deploying the modules firmware and changing the targeting firmware path. In addition the brcm43438.service adds the automatically attaching (hciattach) for systemd environments. The following steps can be used to manually configure the brcm43438:
root@raspberrypi3:~# hciattach /dev/ttyAMA0 bcm43xx-3wire bcm43xx_init Flash firmware /lib/firmware/brcm/BCM43430A1.hcd Set Controller UART speed to 3000000 bit/s Device setup complete root@raspberrypi3:~# hciconfig hci0: Type: BR/EDR Bus: UART BD Address: B8:27:EB:6C:85:BE ACL MTU: 1021:8 SCO MTU: 64:1 DOWN RX bytes:983 acl:0 sco:0 events:33 errors:0 TX bytes:887 acl:0 sco:0 commands:33 errors:0 root@raspberrypi3:~# /usr/lib/bluez5/bluetooth/bluetoothd -e -n -E root@raspberrypi3:~# bluetoothctl [NEW] Controller B8:27:EB:6C:85:BE raspberrypi3 [default] [bluetooth]# power on [CHG] Controller B8:27:EB:6C:85:BE Class: 0x400000 Changing power on succeeded [CHG] Controller B8:27:EB:6C:85:BE Powered: yes [bluetooth]# scan on Discovery started [CHG] Controller B8:27:EB:6C:85:BE Discovering: yes [NEW] Device 00:1C:05:FF:F9:F8 Nonin3230_501585326 NOTE: SERIAL_CONSOLE must configured to ttyS0 instead of ttyAMA0 (used by the brcm43438). See pending patch from Martin Bergek Signed-off-by: Tom Doehring <tool...@gmail.com> Signed-off-by: Andrei Gherzan <and...@gherzan.ro> --- .../0001-bcm43xx-Add-bcm43xx-3wire-variant.patch | 26 +++++++++++++++ ...-UART-speed-must-be-reset-after-the-firmw.patch | 37 +++++++++++++++++++++ ...003-Increase-firmware-load-timeout-to-30s.patch | 25 ++++++++++++++ ...-Move-the-43xx-firmware-into-lib-firmware.patch | 25 ++++++++++++++ recipes-connectivity/bluez5/bluez5/BCM43430A1.hcd | Bin 0 -> 35976 bytes .../bluez5/bluez5/brcm43438.service | 12 +++++++ recipes-connectivity/bluez5/bluez5_%.bbappend | 26 +++++++++++++++ 7 files changed, 151 insertions(+) create mode 100644 recipes-connectivity/bluez5/bluez5/0001-bcm43xx-Add-bcm43xx-3wire-variant.patch create mode 100644 recipes-connectivity/bluez5/bluez5/0002-bcm43xx-The-UART-speed-must-be-reset-after-the-firmw.patch create mode 100644 recipes-connectivity/bluez5/bluez5/0003-Increase-firmware-load-timeout-to-30s.patch create mode 100644 recipes-connectivity/bluez5/bluez5/0004-Move-the-43xx-firmware-into-lib-firmware.patch create mode 100644 recipes-connectivity/bluez5/bluez5/BCM43430A1.hcd create mode 100644 recipes-connectivity/bluez5/bluez5/brcm43438.service create mode 100644 recipes-connectivity/bluez5/bluez5_%.bbappend diff --git a/recipes-connectivity/bluez5/bluez5/0001-bcm43xx-Add-bcm43xx-3wire-variant.patch b/recipes-connectivity/bluez5/bluez5/0001-bcm43xx-Add-bcm43xx-3wire-variant.patch new file mode 100644 index 0000000..3bc02c4 --- /dev/null +++ b/recipes-connectivity/bluez5/bluez5/0001-bcm43xx-Add-bcm43xx-3wire-variant.patch @@ -0,0 +1,26 @@ +From b4f2b77472aeb967d3a7595e8a965785c7a37c87 Mon Sep 17 00:00:00 2001 +From: Phil Elwell <p...@raspberrypi.org> +Date: Tue, 16 Feb 2016 16:40:46 +0000 +Subject: [PATCH 1/4] bcm43xx: Add bcm43xx-3wire variant + +--- + tools/hciattach.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/tools/hciattach.c b/tools/hciattach.c +index 59a76a7..5861d33 100644 +--- a/tools/hciattach.c ++++ b/tools/hciattach.c +@@ -1144,6 +1144,9 @@ struct uart_t uart[] = { + { "bcm43xx", 0x0000, 0x0000, HCI_UART_H4, 115200, 3000000, + FLOW_CTL, DISABLE_PM, NULL, bcm43xx, NULL }, + ++ { "bcm43xx-3wire", 0x0000, 0x0000, HCI_UART_3WIRE, 115200, 3000000, ++ 0, DISABLE_PM, NULL, bcm43xx, NULL }, ++ + { "ath3k", 0x0000, 0x0000, HCI_UART_ATH3K, 115200, 115200, + FLOW_CTL, DISABLE_PM, NULL, ath3k_ps, ath3k_pm }, + +-- +1.9.1 + diff --git a/recipes-connectivity/bluez5/bluez5/0002-bcm43xx-The-UART-speed-must-be-reset-after-the-firmw.patch b/recipes-connectivity/bluez5/bluez5/0002-bcm43xx-The-UART-speed-must-be-reset-after-the-firmw.patch new file mode 100644 index 0000000..5a0a434 --- /dev/null +++ b/recipes-connectivity/bluez5/bluez5/0002-bcm43xx-The-UART-speed-must-be-reset-after-the-firmw.patch @@ -0,0 +1,37 @@ +From e145c9621f976063e5c573db1f2053d906f63427 Mon Sep 17 00:00:00 2001 +From: Phil Elwell <p...@raspberrypi.org> +Date: Tue, 16 Feb 2016 16:39:09 +0000 +Subject: [PATCH 2/4] bcm43xx: The UART speed must be reset after the firmware download + +--- + tools/hciattach_bcm43xx.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/tools/hciattach_bcm43xx.c b/tools/hciattach_bcm43xx.c +index 81f38cb..0b792e0 100644 +--- a/tools/hciattach_bcm43xx.c ++++ b/tools/hciattach_bcm43xx.c +@@ -366,11 +366,8 @@ int bcm43xx_init(int fd, int def_speed, int speed, struct termios *ti, + return -1; + + if (bcm43xx_locate_patch(FIRMWARE_DIR, chip_name, fw_path)) { +- fprintf(stderr, "Patch not found, continue anyway\n"); ++ fprintf(stderr, "Patch not found for %s, continue anyway\n", chip_name); + } else { +- if (bcm43xx_set_speed(fd, ti, speed)) +- return -1; +- + if (bcm43xx_load_firmware(fd, fw_path)) + return -1; + +@@ -380,6 +377,7 @@ int bcm43xx_init(int fd, int def_speed, int speed, struct termios *ti, + return -1; + } + ++ sleep(1); + if (bcm43xx_reset(fd)) + return -1; + } +-- +1.9.1 + diff --git a/recipes-connectivity/bluez5/bluez5/0003-Increase-firmware-load-timeout-to-30s.patch b/recipes-connectivity/bluez5/bluez5/0003-Increase-firmware-load-timeout-to-30s.patch new file mode 100644 index 0000000..f9f09eb --- /dev/null +++ b/recipes-connectivity/bluez5/bluez5/0003-Increase-firmware-load-timeout-to-30s.patch @@ -0,0 +1,25 @@ +From d41dc2046dd08d8c95197f677e224506f5b39bdd Mon Sep 17 00:00:00 2001 +From: Phil Elwell <p...@raspberrypi.org> +Date: Wed, 20 Jan 2016 16:00:37 +0000 +Subject: [PATCH 3/4] Increase firmware load timeout to 30s + +--- + tools/hciattach.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tools/hciattach.c b/tools/hciattach.c +index 5861d33..4141796 100644 +--- a/tools/hciattach.c ++++ b/tools/hciattach.c +@@ -1293,7 +1293,7 @@ int main(int argc, char *argv[]) + { + struct uart_t *u = NULL; + int detach, printpid, raw, opt, i, n, ld, err; +- int to = 10; ++ int to = 30; + int init_speed = 0; + int send_break = 0; + pid_t pid; +-- +1.9.1 + diff --git a/recipes-connectivity/bluez5/bluez5/0004-Move-the-43xx-firmware-into-lib-firmware.patch b/recipes-connectivity/bluez5/bluez5/0004-Move-the-43xx-firmware-into-lib-firmware.patch new file mode 100644 index 0000000..dadce35 --- /dev/null +++ b/recipes-connectivity/bluez5/bluez5/0004-Move-the-43xx-firmware-into-lib-firmware.patch @@ -0,0 +1,25 @@ +From 76681284b0ea49852041fdb97a35175089a08781 Mon Sep 17 00:00:00 2001 +From: Phil Elwell <p...@raspberrypi.org> +Date: Tue, 23 Feb 2016 17:52:29 +0000 +Subject: [PATCH 4/4] Move the 43xx firmware into /lib/firmware + +--- + tools/hciattach_bcm43xx.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tools/hciattach_bcm43xx.c b/tools/hciattach_bcm43xx.c +index 0b792e0..207f668 100644 +--- a/tools/hciattach_bcm43xx.c ++++ b/tools/hciattach_bcm43xx.c +@@ -43,7 +43,7 @@ + #include "hciattach.h" + + #ifndef FIRMWARE_DIR +-#define FIRMWARE_DIR "/etc/firmware" ++#define FIRMWARE_DIR "/lib/firmware" + #endif + + #define FW_EXT ".hcd" +-- +1.9.1 + diff --git a/recipes-connectivity/bluez5/bluez5/BCM43430A1.hcd b/recipes-connectivity/bluez5/bluez5/BCM43430A1.hcd new file mode 100644 index 0000000000000000000000000000000000000000..162275ac0b18c7c29ec0589e00a303867d5a998f GIT binary patch literal 35976 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 literal 0 HcmV?d00001 diff --git a/recipes-connectivity/bluez5/bluez5/brcm43438.service b/recipes-connectivity/bluez5/bluez5/brcm43438.service new file mode 100644 index 0000000..d57125c --- /dev/null +++ b/recipes-connectivity/bluez5/bluez5/brcm43438.service @@ -0,0 +1,12 @@ +[Unit] +Description=Broadcom BCM43438 bluetooth HCI +ConditionPathIsDirectory=/proc/device-tree/soc/gpio@7e200000/bt_pins +Before=bluetooth.service +After=dev-ttyAMA0.device + +[Service] +Type=simple +ExecStart=/usr/bin/hciattach -n /dev/ttyAMA0 bcm43xx 921600 noflow - + +[Install] +WantedBy=multi-user.target diff --git a/recipes-connectivity/bluez5/bluez5_%.bbappend b/recipes-connectivity/bluez5/bluez5_%.bbappend new file mode 100644 index 0000000..eec52e0 --- /dev/null +++ b/recipes-connectivity/bluez5/bluez5_%.bbappend @@ -0,0 +1,26 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" + +SRC_URI_append_raspberrypi3 = " \ + file://BCM43430A1.hcd \ + file://0001-bcm43xx-Add-bcm43xx-3wire-variant.patch \ + file://0002-bcm43xx-The-UART-speed-must-be-reset-after-the-firmw.patch \ + file://0003-Increase-firmware-load-timeout-to-30s.patch \ + file://0004-Move-the-43xx-firmware-into-lib-firmware.patch \ + file://brcm43438.service \ + " + +do_install_append_raspberrypi3() { + install -d ${D}/lib/firmware/brcm/ + install -m 0644 ${WORKDIR}/BCM43430A1.hcd ${D}/lib/firmware/brcm/BCM43430A1.hcd + + if ${@base_contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then + install -d ${D}${systemd_unitdir}/system + install -m 0644 ${WORKDIR}/brcm43438.service ${D}${systemd_unitdir}/system + fi +} + +FILES_${PN}_append_raspberrypi3 = " \ + /lib/firmware/brcm/BCM43430A1.hcd \ + " + +SYSTEMD_SERVICE_${PN}_raspberrypi3 += "brcm43438.service" -- 2.8.0 -- _______________________________________________ yocto mailing list yocto@yoctoproject.org https://lists.yoctoproject.org/listinfo/yocto