diff --git a/arch/arm/boot/dts/bcm2708-rpi-bt.dtsi b/arch/arm/boot/dts/bcm2708-rpi-bt.dtsi new file mode 100644 index 00000000000000..a18f80af97d324 --- /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"; + }; +}; diff --git a/arch/arm/boot/dts/bcm2708-rpi-zero-w.dts b/arch/arm/boot/dts/bcm2708-rpi-zero-w.dts index 6ec6b88e03cedf..111f61915947a3 100644 --- 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"; diff --git a/arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts b/arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts index 3ca70650287cb7..0d6a47118b83e1 100644 --- 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"; diff --git a/arch/arm/boot/dts/bcm2710-rpi-3-b.dts b/arch/arm/boot/dts/bcm2710-rpi-3-b.dts index abdf7e1c02476f..e833915a7854d3 100644 --- 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"; diff --git a/arch/arm/boot/dts/bcm2711-rpi-4-b.dts b/arch/arm/boot/dts/bcm2711-rpi-4-b.dts index 194764c73424f6..2913815aba6210 100644 --- a/arch/arm/boot/dts/bcm2711-rpi-4-b.dts +++ b/arch/arm/boot/dts/bcm2711-rpi-4-b.dts @@ -219,6 +219,7 @@ // Downstream rpi- changes #include "bcm270x.dtsi" +#include "bcm271x-rpi-bt.dtsi" / { soc { @@ -287,8 +288,6 @@ &uart0 { pinctrl-0 = <&uart0_pins &bt_pins>; status = "okay"; - - /delete-node/ bluetooth; }; &uart1 { diff --git a/arch/arm/boot/dts/bcm271x-rpi-bt.dtsi b/arch/arm/boot/dts/bcm271x-rpi-bt.dtsi new file mode 100644 index 00000000000000..6b9b79f74cf365 --- /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"; + }; +}; diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README index 073d7dadcc95a6..bd24434a07c227 100644 --- 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") @@ -1748,8 +1755,9 @@ Info: Switch the onboard Bluetooth function on Pi 3B, 3B+, 3A+, 4B and Zero W 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: +Load: dtoverlay=miniuart-bt,= +Params: krnbt Set to "on" to enable autoprobing of Bluetooth + driver without need of hciattach/btattach Name: mmc diff --git a/arch/arm/boot/dts/overlays/disable-bt-overlay.dts b/arch/arm/boot/dts/overlays/disable-bt-overlay.dts index 2f1b655a133c38..d5a66e5d76a942 100644 --- 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 + /{ 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"; diff --git a/arch/arm/boot/dts/overlays/miniuart-bt-overlay.dts b/arch/arm/boot/dts/overlays/miniuart-bt-overlay.dts index 30d3d8549da0af..44d8e10ef735c9 100644 --- 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 + /{ 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"; + }; }; diff --git a/arch/arm/configs/bcm2709_defconfig b/arch/arm/configs/bcm2709_defconfig index 914c0177c307a3..42e318be75d762 100644 --- a/arch/arm/configs/bcm2709_defconfig +++ b/arch/arm/configs/bcm2709_defconfig @@ -648,7 +648,8 @@ CONFIG_SERIAL_AMBA_PL011=y CONFIG_SERIAL_AMBA_PL011_CONSOLE=y CONFIG_SERIAL_SC16IS7XX=m CONFIG_SERIAL_SC16IS7XX_SPI=y -CONFIG_SERIAL_DEV_BUS=m +CONFIG_SERIAL_DEV_BUS=y +CONFIG_SERIAL_DEV_CTRL_TTYPORT=y CONFIG_TTY_PRINTK=y CONFIG_HW_RANDOM=y CONFIG_RAW_DRIVER=y diff --git a/arch/arm/configs/bcm2711_defconfig b/arch/arm/configs/bcm2711_defconfig index a5f2c656e882cf..58df7533907733 100644 --- a/arch/arm/configs/bcm2711_defconfig +++ b/arch/arm/configs/bcm2711_defconfig @@ -659,7 +659,8 @@ CONFIG_SERIAL_AMBA_PL011=y CONFIG_SERIAL_AMBA_PL011_CONSOLE=y CONFIG_SERIAL_SC16IS7XX=m CONFIG_SERIAL_SC16IS7XX_SPI=y -CONFIG_SERIAL_DEV_BUS=m +CONFIG_SERIAL_DEV_BUS=y +CONFIG_SERIAL_DEV_CTRL_TTYPORT=y CONFIG_TTY_PRINTK=y CONFIG_HW_RANDOM=y CONFIG_RAW_DRIVER=y diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig index af80e7ff71955c..4f305554749def 100644 --- a/arch/arm/configs/bcmrpi_defconfig +++ b/arch/arm/configs/bcmrpi_defconfig @@ -638,7 +638,8 @@ CONFIG_SERIAL_AMBA_PL011=y CONFIG_SERIAL_AMBA_PL011_CONSOLE=y CONFIG_SERIAL_SC16IS7XX=m CONFIG_SERIAL_SC16IS7XX_SPI=y -CONFIG_SERIAL_DEV_BUS=m +CONFIG_SERIAL_DEV_BUS=y +CONFIG_SERIAL_DEV_CTRL_TTYPORT=y CONFIG_TTY_PRINTK=y CONFIG_HW_RANDOM=y CONFIG_RAW_DRIVER=y diff --git a/arch/arm64/configs/bcm2711_defconfig b/arch/arm64/configs/bcm2711_defconfig index 3f0c4629d2e5c1..7a8d54bfb76304 100644 --- a/arch/arm64/configs/bcm2711_defconfig +++ b/arch/arm64/configs/bcm2711_defconfig @@ -652,7 +652,8 @@ CONFIG_SERIAL_AMBA_PL011=y CONFIG_SERIAL_AMBA_PL011_CONSOLE=y CONFIG_SERIAL_SC16IS7XX=m CONFIG_SERIAL_SC16IS7XX_SPI=y -CONFIG_SERIAL_DEV_BUS=m +CONFIG_SERIAL_DEV_BUS=y +CONFIG_SERIAL_DEV_CTRL_TTYPORT=y CONFIG_TTY_PRINTK=y CONFIG_HW_RANDOM=y CONFIG_RAW_DRIVER=y diff --git a/arch/arm64/configs/bcmrpi3_defconfig b/arch/arm64/configs/bcmrpi3_defconfig index f349b006a858dc..139bd126d3eb1c 100644 --- a/arch/arm64/configs/bcmrpi3_defconfig +++ b/arch/arm64/configs/bcmrpi3_defconfig @@ -628,7 +628,8 @@ CONFIG_SERIAL_AMBA_PL011=y CONFIG_SERIAL_AMBA_PL011_CONSOLE=y CONFIG_SERIAL_SC16IS7XX=m CONFIG_SERIAL_SC16IS7XX_SPI=y -CONFIG_SERIAL_DEV_BUS=m +CONFIG_SERIAL_DEV_BUS=y +CONFIG_SERIAL_DEV_CTRL_TTYPORT=y CONFIG_TTY_PRINTK=y CONFIG_HW_RANDOM=y CONFIG_RAW_DRIVER=y