openwrt/target/linux/bcm27xx/patches-5.4/950-0841-ARM-dts-Add-Blueto...

284 lines
7.1 KiB
Diff

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";
+ };
};