From e87dcb9c67ac27bd34c7704e66f82c79a6f3030d Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Fri, 23 Oct 2026 11:18:18 +0100 Subject: [PATCH 1/4] pinctrl: bcm2835: Allow interrupts on GPIOs 54-57 The driver already allows BCM2711's GPIOs 54-57 to be controlled, but an interrupt for one of these will not be handled, likely causing an interrupt storm. Extend the mask for bank 2 to include these higher GPIOs. Signed-off-by: Phil Elwell --- drivers/pinctrl/bcm/pinctrl-bcm2835.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/pinctrl/bcm/pinctrl-bcm2835.c b/drivers/pinctrl/bcm/pinctrl-bcm2835.c index 2b6739bfd216c2..0e54d431938e35 100644 --- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c +++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c @@ -485,7 +485,7 @@ static void bcm2835_gpio_irq_handler(struct irq_desc *desc) bcm2835_gpio_irq_handle_bank(pc, 1, 0x00003fff); break; case 2: /* IRQ2 covers GPIOs 46-57 */ - bcm2835_gpio_irq_handle_bank(pc, 1, 0x003fc000); + bcm2835_gpio_irq_handle_bank(pc, 1, 0x03ffc000); break; } From 8ae739d8d3614216f2a79095a38d030c13d02d28 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Fri, 23 Oct 2026 11:06:18 +0100 Subject: [PATCH 2/4] ARM: dts: Drop downstream GPIO IRQ restriction The downstream dtsi files for BCM283x and BCM2711 have only ever declared 2 interrupts - those for bank 0 and bank 1 - whereas the upstream sources declare all 4 0 banks 0-2 and the "any bank" interrupt. Drop that restriction, as we can see no reason for it. Signed-off-by: Phil Elwell --- arch/arm/boot/dts/broadcom/bcm270x.dtsi | 2 -- arch/arm/boot/dts/broadcom/bcm2711-rpi-ds.dtsi | 3 --- 2 files changed, 5 deletions(-) diff --git a/arch/arm/boot/dts/broadcom/bcm270x.dtsi b/arch/arm/boot/dts/broadcom/bcm270x.dtsi index a3cb24cdcdb31f..e7ff462b59c06d 100644 --- a/arch/arm/boot/dts/broadcom/bcm270x.dtsi +++ b/arch/arm/boot/dts/broadcom/bcm270x.dtsi @@ -187,8 +187,6 @@ }; &gpio { - interrupts = <2 17>, <2 18>; - dpi_18bit_cpadhi_gpio0: dpi_18bit_cpadhi_gpio0 { brcm,pins = <0 1 2 3 4 5 6 7 8 9 12 13 14 15 16 17 diff --git a/arch/arm/boot/dts/broadcom/bcm2711-rpi-ds.dtsi b/arch/arm/boot/dts/broadcom/bcm2711-rpi-ds.dtsi index e498c634fb727c..d91016a18e5a0e 100644 --- a/arch/arm/boot/dts/broadcom/bcm2711-rpi-ds.dtsi +++ b/arch/arm/boot/dts/broadcom/bcm2711-rpi-ds.dtsi @@ -219,9 +219,6 @@ }; &gpio { - interrupts = , - ; - spi0_pins: spi0_pins { brcm,pins = <9 10 11>; brcm,function = ; From 1afad193173c7e17fd1d4e802e5e2d7c8ee3fc09 Mon Sep 17 00:00:00 2001 From: Marta Momotko Date: Fri, 23 Oct 2026 16:13:45 +0100 Subject: [PATCH 3/4] ARM: dts: Add Raspberry Pi Zero 3 W Add a device tree for the Raspberry Pi Zero 3 W. Signed-off-by: Marta Momotko --- arch/arm/boot/dts/broadcom/Makefile | 2 + .../dts/broadcom/bcm2711-rpi-zero-3-w.dts | 373 ++++++++++++++++++ arch/arm64/boot/dts/broadcom/Makefile | 1 + .../dts/broadcom/bcm2711-rpi-zero-3-w.dts | 2 + 4 files changed, 378 insertions(+) create mode 100644 arch/arm/boot/dts/broadcom/bcm2711-rpi-zero-3-w.dts create mode 100644 arch/arm64/boot/dts/broadcom/bcm2711-rpi-zero-3-w.dts diff --git a/arch/arm/boot/dts/broadcom/Makefile b/arch/arm/boot/dts/broadcom/Makefile index 47f461a9b27a7f..401521c66b4ef8 100644 --- a/arch/arm/boot/dts/broadcom/Makefile +++ b/arch/arm/boot/dts/broadcom/Makefile @@ -16,6 +16,7 @@ DTC_FLAGS_bcm2837-rpi-zero-2-w := -@ DTC_FLAGS_bcm2711-rpi-400 := -@ DTC_FLAGS_bcm2711-rpi-4-b := -@ DTC_FLAGS_bcm2711-rpi-cm4-io := -@ +DTC_FLAGS_bcm2711-rpi-zero-3-w := -@ DTC_FLAGS_bcm2835-rpi-zero := -@ DTC_FLAGS_bcm2835-rpi-zero-w := -@ dtb-$(CONFIG_ARCH_BCM2835) += \ @@ -35,6 +36,7 @@ dtb-$(CONFIG_ARCH_BCM2835) += \ bcm2711-rpi-400.dtb \ bcm2711-rpi-4-b.dtb \ bcm2711-rpi-cm4-io.dtb \ + bcm2711-rpi-zero-3-w.dtb \ bcm2835-rpi-zero.dtb \ bcm2835-rpi-zero-w.dtb diff --git a/arch/arm/boot/dts/broadcom/bcm2711-rpi-zero-3-w.dts b/arch/arm/boot/dts/broadcom/bcm2711-rpi-zero-3-w.dts new file mode 100644 index 00000000000000..ef2a0355328bfa --- /dev/null +++ b/arch/arm/boot/dts/broadcom/bcm2711-rpi-zero-3-w.dts @@ -0,0 +1,373 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; +#define BCM2711 +#define i2c0 i2c0if +#include "bcm2711.dtsi" +#include "bcm2711-rpi.dtsi" +/delete-node/&i2c0mux; +#include "bcm283x-rpi-wifi-bt.dtsi" +#include +#undef i2c0 +#include "bcm270x.dtsi" +#define i2c0 i2c0mux +#undef i2c0 + +/ { + compatible = "raspberrypi,model-zero-3-w", "brcm,bcm2711"; + model = "Raspberry Pi Zero 3 W"; + + chosen { + /* 8250 auxiliary UART instead of pl011 */ + stdout-path = "serial1:115200n8"; + }; + + leds: leds { + compatible = "gpio-leds"; + + led_act: led-act { + label = "ACT"; + gpios = <&gpio 47 GPIO_ACTIVE_HIGH>; + default-state = "off"; + linux,default-trigger = "actpwr"; + }; + }; + + sd_io_1v8_reg: regulator-sd-io-1v8 { + compatible = "regulator-gpio"; + regulator-name = "vdd-sd-io"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + regulator-boot-on; + regulator-always-on; + regulator-settling-time-us = <5000>; + gpios = <&gpio 56 GPIO_ACTIVE_HIGH>; + states = <1800000 0x1>, + <3300000 0x0>; + status = "okay"; + }; + + sd_vcc_reg: regulator-sd-vcc { + compatible = "regulator-fixed"; + regulator-name = "vcc-sd"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + regulator-boot-on; + enable-active-high; + gpio = <&gpio 49 GPIO_ACTIVE_HIGH>; + }; + + pwr_button { + compatible = "gpio-keys"; + + pwr_key: pwr { + label = "pwr_button"; + linux,code = <116>; // KEY_POWER + gpios = <&gpio 46 GPIO_ACTIVE_LOW>; + debounce-interval = <50>; // ms + }; + }; +}; + +&bt { + shutdown-gpios = <&gpio 28 GPIO_ACTIVE_HIGH>; +}; + +&ddc0 { + status = "okay"; +}; + +/* Permanently disable DDC1 */ +&ddc1 { + status = "disabled"; +}; + +/delete-node/ &expgpio; + +&gpio { + /* + * These names are (mostly) from the schematic. + * + * Legend: + * "FOO" = GPIO line named "FOO" on the schematic + * "FOO_N" = GPIO line named "FOO" on schematic, active low + */ + gpio-line-names = "ID_SDA", /* 0 */ + "ID_SCL", + "GPIO2", + "GPIO3", + "GPIO4", + "GPIO5", /* 5 */ + "GPIO6", + "GPIO7", + "GPIO8", + "GPIO9", + "GPIO10", /* 10 */ + "GPIO11", + "GPIO12", + "GPIO13", + /* Serial port */ + "GPIO14", + "GPIO15", /* 15 */ + "GPIO16", + "GPIO17", + "GPIO18", + "GPIO19", + "GPIO20", /* 20 */ + "GPIO21", + "GPIO22", + "GPIO23", + "GPIO24", + "GPIO25", /* 25 */ + "GPIO26", + "GPIO27", + "BT_ON", + "WL_ON", + /* Used by BT module */ + "BT_CTS", /* 30 */ + "BT_RTS", + "BT_TXD", + "BT_RXD", + /* Used by Wifi */ + "WIFI_SDIO_CLK", + "WIFI_SDIO_CMD", /* 35 */ + "WIFI_SDIO_D0", + "WIFI_SDIO_D1", + "WIFI_SDIO_D2", + "WIFI_SDIO_D3", + /* Used by SPI flash */ + "FLASH_MISO", /* 40 */ + "FLASH_MOSI", + "ACT_CLK_R", + "SPIFLASH_CE_N", + "SDA0", + "SCL0", /* 45 */ + "PWR_GPIO", + "PWR_LED_ON", + "PWR_GPIO", + "SD_PWR_ON", + "PCIE_DET_WAKE", /* 50 */ + "PCIE_PWR_EN", + "CAM_GPIO1", + "CAM_GPIO0", + "SD_OC_N", + "USB_MUX_SEL", /* 55 */ + "VDD_SD_IO_SEL", + "-"; +}; + +&hdmi0 { + status = "okay"; +}; + +/* Permanently disable HDMI1 */ +&hdmi1 { + status = "disabled"; +}; + +&pixelvalve0 { + status = "okay"; +}; + +&pixelvalve1 { + status = "okay"; +}; + +&pixelvalve2 { + status = "okay"; +}; + +/* EMMC2 is used to drive the eMMC/SD card */ +&emmc2 { + bus-width = <8>; + vqmmc-supply = <&sd_io_1v8_reg>; + vmmc-supply = <&sd_vcc_reg>; + broken-cd; + status = "okay"; +}; + +&pcie0 { + pci@0,0 { + device_type = "pci"; + #address-cells = <3>; + #size-cells = <2>; + ranges; + + reg = <0 0 0 0 0>; + }; +}; + +/* uart0 communicates with the BT module */ +&uart0 { + pinctrl-names = "default"; + pinctrl-0 = <&uart0_ctsrts_gpio30 &uart0_gpio32>; + uart-has-rtscts; +}; + +/* uart1 is mapped to the pin header */ +&uart1 { + pinctrl-names = "default"; + pinctrl-0 = <&uart1_gpio14>; + status = "okay"; +}; + +&vc4 { + status = "okay"; +}; + +&vec { + status = "disabled"; +}; + +&wifi_pwrseq { + reset-gpios = <&gpio 29 GPIO_ACTIVE_LOW>; +}; + +// ============================================= +// Downstream rpi- changes + +#include "bcm271x-rpi-bt.dtsi" + +&bt { + shutdown-gpios = <&gpio 28 GPIO_ACTIVE_HIGH>; +}; + +&minibt { + shutdown-gpios = <&gpio 28 GPIO_ACTIVE_HIGH>; +}; + +/ { + soc { + /delete-node/ pixelvalve@7e807000; + /delete-node/ hdmi@7e902000; + }; +}; + +#include "bcm2711-rpi-ds.dtsi" +#include "bcm283x-rpi-csi1-4lane.dtsi" +#include "bcm283x-rpi-i2c0mux_0_44.dtsi" + +/ { + /delete-node/ wifi-pwrseq; +}; + +&mmcnr { + pinctrl-names = "default"; + pinctrl-0 = <&sdio_pins>; + bus-width = <4>; + status = "okay"; +}; + +&uart0 { + pinctrl-0 = <&uart0_pins &bt_pins>; + status = "okay"; +}; + +&uart1 { + pinctrl-0 = <&uart1_pins>; +}; + +&spi0 { + pinctrl-names = "default"; + pinctrl-0 = <&spi0_pins &spi0_cs_pins>; + cs-gpios = <&gpio 8 1>, <&gpio 7 1>; + + spidev0: spidev@0{ + compatible = "spidev"; + reg = <0>; /* CE0 */ + #address-cells = <1>; + #size-cells = <0>; + spi-max-frequency = <125000000>; + }; + + spidev1: spidev@1{ + compatible = "spidev"; + reg = <1>; /* CE1 */ + #address-cells = <1>; + #size-cells = <0>; + spi-max-frequency = <125000000>; + }; +}; + +&gpio { + bt_pins: bt_pins { + brcm,pins = "-"; // non-empty to keep btuart happy, //4 = 0 + // to fool pinctrl + brcm,function = <0>; + brcm,pull = <2>; + }; + + uart0_pins: uart0_pins { + brcm,pins = <32 33>; + brcm,function = ; + brcm,pull = <0 2>; + }; + + uart1_pins: uart1_pins { + brcm,pins; + brcm,function; + brcm,pull; + }; + + uart1_bt_pins: uart1_bt_pins { + brcm,pins = <32 33 30 31>; + brcm,function = ; /* alt5=UART1 */ + brcm,pull = <0 2 2 0>; + }; +}; + +&i2c0if { + clock-frequency = <100000>; +}; + +&i2c1 { + pinctrl-names = "default"; + pinctrl-0 = <&i2c1_pins>; + clock-frequency = <100000>; +}; + +&i2s { + pinctrl-names = "default"; + pinctrl-0 = <&i2s_pins>; +}; + +// ============================================= +// Board specific stuff here + +&sdhost { + status = "disabled"; +}; + + +&gpio { + audio_pins: audio_pins { + brcm,pins = <>; + brcm,function = <>; + }; +}; + +&vchiq { + pinctrl-names = "default"; + pinctrl-0 = <&audio_pins>; +}; + +&cam1_reg { + gpio = <&gpio 53 GPIO_ACTIVE_HIGH>; +}; + +cam0_reg: &cam_dummy_reg { +}; + +i2c_csi_dsi0: &i2c0 { +}; + +/ { + __overrides__ { + audio = <&chosen>,"bootargs{on='snd_bcm2835.enable_hdmi=1',off='snd_bcm2835.enable_hdmi=0'}"; + + act_led_gpio = <&led_act>,"gpios:4"; + act_led_activelow = <&led_act>,"gpios:8"; + act_led_trigger = <&led_act>,"linux,default-trigger"; + + pcie_tperst_clk_ms = <&pcie0>,"brcm,tperst-clk-ms:0"; + }; +}; diff --git a/arch/arm64/boot/dts/broadcom/Makefile b/arch/arm64/boot/dts/broadcom/Makefile index ec59cc4a4524b4..09fb5236441098 100644 --- a/arch/arm64/boot/dts/broadcom/Makefile +++ b/arch/arm64/boot/dts/broadcom/Makefile @@ -6,6 +6,7 @@ DTC_FLAGS := -@ dtb-$(CONFIG_ARCH_BCM2835) += bcm2711-rpi-400.dtb \ bcm2711-rpi-4-b.dtb \ bcm2711-rpi-cm4-io.dtb \ + bcm2711-rpi-zero-3-w.dtb \ bcm2712-rpi-5-b.dtb \ bcm2712-d-rpi-5-b.dtb \ bcm2837-rpi-2-b.dtb \ diff --git a/arch/arm64/boot/dts/broadcom/bcm2711-rpi-zero-3-w.dts b/arch/arm64/boot/dts/broadcom/bcm2711-rpi-zero-3-w.dts new file mode 100644 index 00000000000000..4e52b67ad366c7 --- /dev/null +++ b/arch/arm64/boot/dts/broadcom/bcm2711-rpi-zero-3-w.dts @@ -0,0 +1,2 @@ +// SPDX-License-Identifier: GPL-2.0 +#include "arm/broadcom/bcm2711-rpi-zero-3-w.dts" From c17dd5f6e7accd9b62a7f272c6e69e40efb7563c Mon Sep 17 00:00:00 2001 From: Marta Momotko Date: Fri, 23 Oct 2026 16:14:43 +0100 Subject: [PATCH 4/4] ARM: dts: Add Raspberry Pi 4 A Add a device tree for the Raspberry Pi 4 A. Signed-off-by: Marta Momotko --- arch/arm/boot/dts/broadcom/Makefile | 2 + .../arm/boot/dts/broadcom/bcm2711-rpi-4-a.dts | 412 ++++++++++++++++++ arch/arm64/boot/dts/broadcom/Makefile | 1 + .../boot/dts/broadcom/bcm2711-rpi-4-a.dts | 2 + 4 files changed, 417 insertions(+) create mode 100644 arch/arm/boot/dts/broadcom/bcm2711-rpi-4-a.dts create mode 100644 arch/arm64/boot/dts/broadcom/bcm2711-rpi-4-a.dts diff --git a/arch/arm/boot/dts/broadcom/Makefile b/arch/arm/boot/dts/broadcom/Makefile index 401521c66b4ef8..2231f7b76d9072 100644 --- a/arch/arm/boot/dts/broadcom/Makefile +++ b/arch/arm/boot/dts/broadcom/Makefile @@ -14,6 +14,7 @@ DTC_FLAGS_bcm2837-rpi-3-b-plus := -@ DTC_FLAGS_bcm2837-rpi-cm3-io3 := -@ DTC_FLAGS_bcm2837-rpi-zero-2-w := -@ DTC_FLAGS_bcm2711-rpi-400 := -@ +DTC_FLAGS_bcm2711-rpi-4-a := -@ DTC_FLAGS_bcm2711-rpi-4-b := -@ DTC_FLAGS_bcm2711-rpi-cm4-io := -@ DTC_FLAGS_bcm2711-rpi-zero-3-w := -@ @@ -34,6 +35,7 @@ dtb-$(CONFIG_ARCH_BCM2835) += \ bcm2837-rpi-cm3-io3.dtb \ bcm2837-rpi-zero-2-w.dtb \ bcm2711-rpi-400.dtb \ + bcm2711-rpi-4-a.dtb \ bcm2711-rpi-4-b.dtb \ bcm2711-rpi-cm4-io.dtb \ bcm2711-rpi-zero-3-w.dtb \ diff --git a/arch/arm/boot/dts/broadcom/bcm2711-rpi-4-a.dts b/arch/arm/boot/dts/broadcom/bcm2711-rpi-4-a.dts new file mode 100644 index 00000000000000..2b383748c7cb89 --- /dev/null +++ b/arch/arm/boot/dts/broadcom/bcm2711-rpi-4-a.dts @@ -0,0 +1,412 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; +#define BCM2711 +#define i2c0 i2c0if +#include "bcm2711.dtsi" +#include "bcm2711-rpi.dtsi" +/delete-node/&i2c0mux; +#include "bcm283x-rpi-wifi-bt.dtsi" +#include +#undef i2c0 +#include "bcm270x.dtsi" +#define i2c0 i2c0mux +#undef i2c0 + +/ { + compatible = "raspberrypi,4-model-a", "brcm,bcm2711"; + model = "Raspberry Pi 4 Model A"; + + chosen { + /* 8250 auxiliary UART instead of pl011 */ + stdout-path = "serial1:115200n8"; + }; + + leds: leds { + compatible = "gpio-leds"; + + led_pwr: led-pwr { + label = "PWR"; + gpios = <&gpio 47 GPIO_ACTIVE_LOW>; + default-state = "off"; + linux,default-trigger = "default-on"; + }; + + led_act: led-act { + label = "ACT"; + gpios = <&gpio 42 GPIO_ACTIVE_HIGH>; + default-state = "off"; + linux,default-trigger = "mmc0"; + }; + }; + + sd_io_1v8_reg: regulator-sd-io-1v8 { + compatible = "regulator-gpio"; + regulator-name = "vdd-sd-io"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + regulator-boot-on; + regulator-always-on; + regulator-settling-time-us = <5000>; + gpios = <&gpio 56 GPIO_ACTIVE_HIGH>; + states = <1800000 0x1>, + <3300000 0x0>; + status = "okay"; + }; + + sd_vcc_reg: regulator-sd-vcc { + compatible = "regulator-fixed"; + regulator-name = "vcc-sd"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + regulator-boot-on; + enable-active-high; + gpio = <&gpio 49 GPIO_ACTIVE_HIGH>; + }; + + pwr_button { + compatible = "gpio-keys"; + + pwr_key: pwr { + label = "pwr_button"; + linux,code = <116>; // KEY_POWER + gpios = <&gpio 46 GPIO_ACTIVE_LOW>; + debounce-interval = <50>; // ms + }; + }; +}; + +&bt { + shutdown-gpios = <&gpio 28 GPIO_ACTIVE_HIGH>; +}; + +&ddc0 { + status = "okay"; +}; + +/* Permanently disable DDC1 */ +&ddc1 { + status = "disabled"; +}; + +/delete-node/ &expgpio; + +&gpio { + /* + * These names are (mostly) from the schematic. + * + * Legend: + * "FOO" = GPIO line named "FOO" on the schematic + * "FOO_N" = GPIO line named "FOO" on schematic, active low + */ + gpio-line-names = "ID_SDA", /* 0 */ + "ID_SCL", + "GPIO2", + "GPIO3", + "GPIO4", + "GPIO5", /* 5 */ + "GPIO6", + "GPIO7", + "GPIO8", + "GPIO9", + "GPIO10", /* 10 */ + "GPIO11", + "GPIO12", + "GPIO13", + /* Serial port */ + "GPIO14", + "GPIO15", /* 15 */ + "GPIO16", + "GPIO17", + "GPIO18", + "GPIO19", + "GPIO20", /* 20 */ + "GPIO21", + "GPIO22", + "GPIO23", + "GPIO24", + "GPIO25", /* 25 */ + "GPIO26", + "GPIO27", + "BT_ON", + "WL_ON", + /* Used by BT module */ + "BT_CTS", /* 30 */ + "BT_RTS", + "BT_TXD", + "BT_RXD", + /* Used by Wifi */ + "WIFI_SDIO_CLK", + "WIFI_SDIO_CMD", /* 35 */ + "WIFI_SDIO_D0", + "WIFI_SDIO_D1", + "WIFI_SDIO_D2", + "WIFI_SDIO_D3", + /* Used by SPI flash */ + "FLASH_MISO", /* 40 */ + "FLASH_MOSI", + "STATUS_LED_G_CLK", + "SPIFLASH_CE_N", + "SDA0", + "SCL0", /* 45 */ + "PWR_GPIO", + "PWR_LED_OFF", + "ANT_CTRL1", + "SD_PWR_ON", + "PCIE_DET_WAKE", /* 50 */ + "PCIE_PWR_EN", + "CAM_GPIO1", + "CAM_GPIO0", + "SD_OC_N", + "USB_MUX_SEL", /* 55 */ + "VDD_SD_IO_SEL", + "ANT_CTRL2"; +}; + +&hdmi0 { + status = "okay"; +}; + +/* Permanently disable HDMI1 */ +&hdmi1 { + status = "disabled"; +}; + +&pixelvalve0 { + status = "okay"; +}; + +&pixelvalve1 { + status = "okay"; +}; + +&pixelvalve2 { + status = "okay"; +}; + +/* EMMC2 is used to drive the SD card */ +&emmc2 { + vqmmc-supply = <&sd_io_1v8_reg>; + vmmc-supply = <&sd_vcc_reg>; + broken-cd; + status = "okay"; +}; + +&pcie0 { + pci@0,0 { + device_type = "pci"; + #address-cells = <3>; + #size-cells = <2>; + ranges; + + reg = <0 0 0 0 0>; + }; +}; + +/* uart0 communicates with the BT module */ +&uart0 { + pinctrl-names = "default"; + pinctrl-0 = <&uart0_ctsrts_gpio30 &uart0_gpio32>; + uart-has-rtscts; +}; + +/* uart1 is mapped to the pin header */ +&uart1 { + pinctrl-names = "default"; + pinctrl-0 = <&uart1_gpio14>; + status = "okay"; +}; + +&vc4 { + status = "okay"; +}; + +&vec { + status = "disabled"; +}; + +&wifi_pwrseq { + reset-gpios = <&gpio 29 GPIO_ACTIVE_LOW>; +}; + +// ============================================= +// Downstream rpi- changes + +#include "bcm271x-rpi-bt.dtsi" + +&bt { + shutdown-gpios = <&gpio 28 GPIO_ACTIVE_HIGH>; +}; + +&minibt { + shutdown-gpios = <&gpio 28 GPIO_ACTIVE_HIGH>; +}; + +/ { + soc { + /delete-node/ pixelvalve@7e807000; + /delete-node/ hdmi@7e902000; + }; +}; + +#include "bcm2711-rpi-ds.dtsi" +#include "bcm283x-rpi-csi1-4lane.dtsi" +#include "bcm283x-rpi-i2c0mux_0_44.dtsi" + +/ { + /delete-node/ wifi-pwrseq; +}; + +&mmcnr { + pinctrl-names = "default"; + pinctrl-0 = <&sdio_pins>; + bus-width = <4>; + status = "okay"; +}; + +&uart0 { + pinctrl-0 = <&uart0_pins &bt_pins>; + status = "okay"; +}; + +&uart1 { + pinctrl-0 = <&uart1_pins>; +}; + +&spi0 { + pinctrl-names = "default"; + pinctrl-0 = <&spi0_pins &spi0_cs_pins>; + cs-gpios = <&gpio 8 1>, <&gpio 7 1>; + + spidev0: spidev@0{ + compatible = "spidev"; + reg = <0>; /* CE0 */ + #address-cells = <1>; + #size-cells = <0>; + spi-max-frequency = <125000000>; + }; + + spidev1: spidev@1{ + compatible = "spidev"; + reg = <1>; /* CE1 */ + #address-cells = <1>; + #size-cells = <0>; + spi-max-frequency = <125000000>; + }; +}; + +&gpio { + bt_pins: bt_pins { + brcm,pins = "-"; // non-empty to keep btuart happy, //4 = 0 + // to fool pinctrl + brcm,function = <0>; + brcm,pull = <2>; + }; + + uart0_pins: uart0_pins { + brcm,pins = <32 33>; + brcm,function = ; + brcm,pull = <0 2>; + }; + + uart1_pins: uart1_pins { + brcm,pins; + brcm,function; + brcm,pull; + }; + + uart1_bt_pins: uart1_bt_pins { + brcm,pins = <32 33 30 31>; + brcm,function = ; /* alt5=UART1 */ + brcm,pull = <0 2 2 0>; + }; +}; + +&i2c0if { + clock-frequency = <100000>; +}; + +&i2c1 { + pinctrl-names = "default"; + pinctrl-0 = <&i2c1_pins>; + clock-frequency = <100000>; +}; + +&i2s { + pinctrl-names = "default"; + pinctrl-0 = <&i2s_pins>; +}; + +// ============================================= +// Board specific stuff here + +&sdhost { + status = "disabled"; +}; + + +&gpio { + audio_pins: audio_pins { + brcm,pins = <>; + brcm,function = <>; + }; + + ant1: ant1 { + gpio-hog; + gpios = <48 GPIO_ACTIVE_HIGH>; + output-high; + line-name = "ant1"; + }; + + ant2: ant2 { + gpio-hog; + gpios = <57 GPIO_ACTIVE_HIGH>; + output-low; + line-name = "ant2"; + }; +}; + +&vchiq { + pinctrl-names = "default"; + pinctrl-0 = <&audio_pins>; +}; + +&cam1_reg { + gpio = <&gpio 53 GPIO_ACTIVE_HIGH>; +}; + +cam0_reg: &cam_dummy_reg { +}; + +i2c_csi_dsi0: &i2c0 { +}; + +/ { + __overrides__ { + audio = <&chosen>,"bootargs{on='snd_bcm2835.enable_hdmi=1',off='snd_bcm2835.enable_hdmi=0'}"; + + act_led_gpio = <&led_act>,"gpios:4"; + act_led_activelow = <&led_act>,"gpios:8"; + act_led_trigger = <&led_act>,"linux,default-trigger"; + + pwr_led_gpio = <&led_pwr>,"gpios:4"; + pwr_led_activelow = <&led_pwr>,"gpios:8"; + pwr_led_trigger = <&led_pwr>,"linux,default-trigger"; + + ant1 = <&ant1>,"output-high?=on", + <&ant1>, "output-low?=off", + <&ant2>, "output-high?=off", + <&ant2>, "output-low?=on"; + ant2 = <&ant1>,"output-high?=off", + <&ant1>, "output-low?=on", + <&ant2>, "output-high?=on", + <&ant2>, "output-low?=off"; + noant = <&ant1>,"output-high?=off", + <&ant1>, "output-low?=on", + <&ant2>, "output-high?=off", + <&ant2>, "output-low?=on"; + noanthogs = <&ant1>,"status=disabled", + <&ant2>, "status=disabled"; + + pcie_tperst_clk_ms = <&pcie0>,"brcm,tperst-clk-ms:0"; + }; +}; diff --git a/arch/arm64/boot/dts/broadcom/Makefile b/arch/arm64/boot/dts/broadcom/Makefile index 09fb5236441098..a35836bf4dbc23 100644 --- a/arch/arm64/boot/dts/broadcom/Makefile +++ b/arch/arm64/boot/dts/broadcom/Makefile @@ -4,6 +4,7 @@ DTC_FLAGS := -@ dtb-$(CONFIG_ARCH_BCM2835) += bcm2711-rpi-400.dtb \ + bcm2711-rpi-4-a.dtb \ bcm2711-rpi-4-b.dtb \ bcm2711-rpi-cm4-io.dtb \ bcm2711-rpi-zero-3-w.dtb \ diff --git a/arch/arm64/boot/dts/broadcom/bcm2711-rpi-4-a.dts b/arch/arm64/boot/dts/broadcom/bcm2711-rpi-4-a.dts new file mode 100644 index 00000000000000..b3b6718b7ccbcf --- /dev/null +++ b/arch/arm64/boot/dts/broadcom/bcm2711-rpi-4-a.dts @@ -0,0 +1,2 @@ +// SPDX-License-Identifier: GPL-2.0 +#include "arm/broadcom/bcm2711-rpi-4-a.dts"