diff options
Diffstat (limited to 'target/linux/bcm27xx/patches-5.4/950-0841-ARM-dts-Add-Bluetooth-nodes-for-Raspberry-Pi.patch')
-rw-r--r-- | target/linux/bcm27xx/patches-5.4/950-0841-ARM-dts-Add-Bluetooth-nodes-for-Raspberry-Pi.patch | 283 |
1 files changed, 283 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.4/950-0841-ARM-dts-Add-Bluetooth-nodes-for-Raspberry-Pi.patch b/target/linux/bcm27xx/patches-5.4/950-0841-ARM-dts-Add-Bluetooth-nodes-for-Raspberry-Pi.patch new file mode 100644 index 0000000000..fd66e6590d --- /dev/null +++ b/target/linux/bcm27xx/patches-5.4/950-0841-ARM-dts-Add-Bluetooth-nodes-for-Raspberry-Pi.patch @@ -0,0 +1,283 @@ +From c46a59c99e53ab41096afcf7f7879bb12769346b Mon Sep 17 00:00:00 2001 +From: Maxim Mikityanskiy <maxtram95@gmail.com> +Date: Sat, 27 Jun 2020 13:08:26 +0300 +Subject: [PATCH] ARM: dts: Add Bluetooth nodes for Raspberry Pi + +Add device tree nodes for Bluetooth on supported Raspberry Pi boards. +It's disabled by default and can be enabled by `krnbt=on` dtparam. It's +an alternative way of configuring Bluetooth, as compared to hciattach or +btattach. When the dtparam is enabled, the Bluetooth driver is probed +automatically and doesn't require any additional bring-up scripts. + +Note that Raspberry Pi 3 B rev 1.2 doesn't have the required hardware +flow control pins of UART0 connected to the Bluetooth module, so the +user should decrease the baudrate by passing `krnbt_baudrate=921600` +dtparam to make it more stable. It resembles the behavior of the btuart +script from Raspbian. + +The miniuart-bt overlay was modified to support Bluetooth probing with +device tree, too. It's disabled by default and can be enabled by +`krnbt=on` parameter of the miniuart-bt overlay. + +Signed-off-by: Maxim Mikityanskiy <maxtram95@gmail.com> +--- + arch/arm/boot/dts/bcm2708-rpi-bt.dtsi | 26 +++++++++++++++++++ + arch/arm/boot/dts/bcm2708-rpi-zero-w.dts | 1 + + arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts | 1 + + arch/arm/boot/dts/bcm2710-rpi-3-b.dts | 1 + + arch/arm/boot/dts/bcm2711-rpi-4-b.dts | 3 +-- + arch/arm/boot/dts/bcm271x-rpi-bt.dtsi | 26 +++++++++++++++++++ + arch/arm/boot/dts/overlays/README | 12 +++++++-- + .../boot/dts/overlays/disable-bt-overlay.dts | 13 ++++++++-- + .../boot/dts/overlays/miniuart-bt-overlay.dts | 21 ++++++++++++--- + 9 files changed, 94 insertions(+), 10 deletions(-) + create mode 100644 arch/arm/boot/dts/bcm2708-rpi-bt.dtsi + create mode 100644 arch/arm/boot/dts/bcm271x-rpi-bt.dtsi + +--- /dev/null ++++ b/arch/arm/boot/dts/bcm2708-rpi-bt.dtsi +@@ -0,0 +1,26 @@ ++// SPDX-License-Identifier: GPL-2.0 ++ ++&uart0 { ++ bt: bluetooth { ++ compatible = "brcm,bcm43438-bt"; ++ max-speed = <3000000>; ++ shutdown-gpios = <&gpio 45 GPIO_ACTIVE_HIGH>; ++ status = "disabled"; ++ }; ++}; ++ ++&uart1 { ++ minibt: bluetooth { ++ compatible = "brcm,bcm43438-bt"; ++ max-speed = <460800>; ++ shutdown-gpios = <&gpio 45 GPIO_ACTIVE_HIGH>; ++ status = "disabled"; ++ }; ++}; ++ ++/ { ++ __overrides__ { ++ krnbt = <&bt>,"status"; ++ krnbt_baudrate = <&bt>,"max-speed:0"; ++ }; ++}; +--- a/arch/arm/boot/dts/bcm2708-rpi-zero-w.dts ++++ b/arch/arm/boot/dts/bcm2708-rpi-zero-w.dts +@@ -4,6 +4,7 @@ + #include "bcm2708-rpi.dtsi" + #include "bcm283x-rpi-csi1-2lane.dtsi" + #include "bcm283x-rpi-i2c0mux_0_28.dtsi" ++#include "bcm2708-rpi-bt.dtsi" + + / { + compatible = "raspberrypi,model-zero-w", "brcm,bcm2835"; +--- a/arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts ++++ b/arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts +@@ -5,6 +5,7 @@ + #include "bcm283x-rpi-lan7515.dtsi" + #include "bcm283x-rpi-csi1-2lane.dtsi" + #include "bcm283x-rpi-i2c0mux_0_44.dtsi" ++#include "bcm271x-rpi-bt.dtsi" + + / { + compatible = "raspberrypi,3-model-b-plus", "brcm,bcm2837"; +--- a/arch/arm/boot/dts/bcm2710-rpi-3-b.dts ++++ b/arch/arm/boot/dts/bcm2710-rpi-3-b.dts +@@ -5,6 +5,7 @@ + #include "bcm283x-rpi-smsc9514.dtsi" + #include "bcm283x-rpi-csi1-2lane.dtsi" + #include "bcm283x-rpi-i2c0mux_0_44.dtsi" ++#include "bcm271x-rpi-bt.dtsi" + + / { + compatible = "raspberrypi,3-model-b", "brcm,bcm2837"; +--- a/arch/arm/boot/dts/bcm2711-rpi-4-b.dts ++++ b/arch/arm/boot/dts/bcm2711-rpi-4-b.dts +@@ -182,6 +182,7 @@ + // Downstream rpi- changes + + #include "bcm270x.dtsi" ++#include "bcm271x-rpi-bt.dtsi" + + / { + soc { +@@ -250,8 +251,6 @@ + &uart0 { + pinctrl-0 = <&uart0_pins &bt_pins>; + status = "okay"; +- +- /delete-node/ bluetooth; + }; + + &uart1 { +--- /dev/null ++++ b/arch/arm/boot/dts/bcm271x-rpi-bt.dtsi +@@ -0,0 +1,26 @@ ++// SPDX-License-Identifier: GPL-2.0 ++ ++&uart0 { ++ bt: bluetooth { ++ compatible = "brcm,bcm43438-bt"; ++ max-speed = <3000000>; ++ shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>; ++ status = "disabled"; ++ }; ++}; ++ ++&uart1 { ++ minibt: bluetooth { ++ compatible = "brcm,bcm43438-bt"; ++ max-speed = <460800>; ++ shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>; ++ status = "disabled"; ++ }; ++}; ++ ++/ { ++ __overrides__ { ++ krnbt = <&bt>,"status"; ++ krnbt_baudrate = <&bt>,"max-speed:0"; ++ }; ++}; +--- a/arch/arm/boot/dts/overlays/README ++++ b/arch/arm/boot/dts/overlays/README +@@ -162,6 +162,13 @@ Params: + i2s Set to "on" to enable the i2s interface + (default "off") + ++ krnbt Set to "on" to enable autoprobing of Bluetooth ++ driver without need of hciattach/btattach ++ (default "off") ++ ++ krnbt_baudrate Set the baudrate of the PL011 UART when used ++ with krnbt=on ++ + spi Set to "on" to enable the spi interfaces + (default "off") + +@@ -1764,8 +1771,9 @@ Info: Switch the onboard Bluetooth fun + in which case use /dev/serial1 instead because it will always be + correct. Furthermore, you must also set core_freq and core_freq_min to + the same value in config.txt or the miniuart will not work. +-Load: dtoverlay=miniuart-bt +-Params: <None> ++Load: dtoverlay=miniuart-bt,<param>=<val> ++Params: krnbt Set to "on" to enable autoprobing of Bluetooth ++ driver without need of hciattach/btattach + + + Name: mmc +--- a/arch/arm/boot/dts/overlays/disable-bt-overlay.dts ++++ b/arch/arm/boot/dts/overlays/disable-bt-overlay.dts +@@ -8,6 +8,8 @@ + sudo systemctl disable hciuart + */ + ++#include <dt-bindings/gpio/gpio.h> ++ + /{ + compatible = "brcm,bcm2835"; + +@@ -28,6 +30,13 @@ + }; + + fragment@2 { ++ target = <&bt>; ++ __overlay__ { ++ status = "disabled"; ++ }; ++ }; ++ ++ fragment@3 { + target = <&uart0_pins>; + __overlay__ { + brcm,pins; +@@ -36,7 +45,7 @@ + }; + }; + +- fragment@3 { ++ fragment@4 { + target = <&bt_pins>; + __overlay__ { + brcm,pins; +@@ -45,7 +54,7 @@ + }; + }; + +- fragment@4 { ++ fragment@5 { + target-path = "/aliases"; + __overlay__ { + serial0 = "/soc/serial@7e201000"; +--- a/arch/arm/boot/dts/overlays/miniuart-bt-overlay.dts ++++ b/arch/arm/boot/dts/overlays/miniuart-bt-overlay.dts +@@ -15,6 +15,8 @@ + this overlay is used. + */ + ++#include <dt-bindings/gpio/gpio.h> ++ + /{ + compatible = "brcm,bcm2835"; + +@@ -28,6 +30,13 @@ + }; + + fragment@1 { ++ target = <&bt>; ++ __overlay__ { ++ status = "disabled"; ++ }; ++ }; ++ ++ fragment@2 { + target = <&uart1>; + __overlay__ { + pinctrl-names = "default"; +@@ -36,7 +45,7 @@ + }; + }; + +- fragment@2 { ++ fragment@3 { + target = <&uart0_pins>; + __overlay__ { + brcm,pins; +@@ -45,7 +54,7 @@ + }; + }; + +- fragment@3 { ++ fragment@4 { + target = <&uart1_pins>; + __overlay__ { + brcm,pins = <32 33>; +@@ -54,7 +63,7 @@ + }; + }; + +- fragment@4 { ++ fragment@5 { + target = <&gpio>; + __overlay__ { + fake_bt_cts: fake_bt_cts { +@@ -64,11 +73,15 @@ + }; + }; + +- fragment@5 { ++ fragment@6 { + target-path = "/aliases"; + __overlay__ { + serial0 = "/soc/serial@7e201000"; + serial1 = "/soc/serial@7e215040"; + }; + }; ++ ++ __overrides__ { ++ krnbt = <&minibt>,"status"; ++ }; + }; |