// SPDX-License-Identifier: GPL-2.0 /dts-v1/; #include "bcm2711.dtsi" #include "bcm2835-rpi.dtsi" / { compatible = "raspberrypi,4-model-b", "brcm,bcm2711"; model = "Raspberry Pi 4 Model B"; chosen { /* 8250 auxiliary UART instead of pl011 */ stdout-path = "serial1:115200n8"; }; /* Will be filled by the bootloader */ memory@0 { device_type = "memory"; reg = <0 0 0>; }; aliases { emmc2bus = &emmc2bus; ethernet0 = &genet; pcie0 = &pcie0; }; leds { act { gpios = <&gpio 42 GPIO_ACTIVE_HIGH>; }; pwr { label = "PWR"; gpios = <&expgpio 2 GPIO_ACTIVE_LOW>; default-state = "keep"; linux,default-trigger = "default-on"; }; }; wifi_pwrseq: wifi-pwrseq { compatible = "mmc-pwrseq-simple"; reset-gpios = <&expgpio 1 GPIO_ACTIVE_LOW>; }; sd_io_1v8_reg: sd_io_1v8_reg { 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 = <&expgpio 4 GPIO_ACTIVE_HIGH>; states = <1800000 0x1 3300000 0x0>; status = "okay"; }; }; &firmware { expgpio: gpio { compatible = "raspberrypi,firmware-gpio"; gpio-controller; #gpio-cells = <2>; gpio-line-names = "BT_ON", "WL_ON", "PWR_LED_OFF", "GLOBAL_RESET", "VDD_SD_IO_SEL", "CAM_GPIO", "SD_PWR_ON", "SD_OC_N"; status = "okay"; }; }; &gpio { /* * Parts taken from rpi_SCH_4b_4p0_reduced.pdf and * the official GPU firmware DT blob. * * Legend: * "FOO" = GPIO line named "FOO" on the schematic * "FOO_N" = GPIO line named "FOO" on schematic, active low */ gpio-line-names = "ID_SDA", "ID_SCL", "SDA1", "SCL1", "GPIO_GCLK", "GPIO5", "GPIO6", "SPI_CE1_N", "SPI_CE0_N", "SPI_MISO", "SPI_MOSI", "SPI_SCLK", "GPIO12", "GPIO13", /* Serial port */ "TXD1", "RXD1", "GPIO16", "GPIO17", "GPIO18", "GPIO19", "GPIO20", "GPIO21", "GPIO22", "GPIO23", "GPIO24", "GPIO25", "GPIO26", "GPIO27", "RGMII_MDIO", "RGMIO_MDC", /* Used by BT module */ "CTS0", "RTS0", "TXD0", "RXD0", /* Used by Wifi */ "SD1_CLK", "SD1_CMD", "SD1_DATA0", "SD1_DATA1", "SD1_DATA2", "SD1_DATA3", /* Shared with SPI flash */ "PWM0_MISO", "PWM1_MOSI", "STATUS_LED_G_CLK", "SPIFLASH_CE_N", "SDA0", "SCL0", "RGMII_RXCLK", "RGMII_RXCTL", "RGMII_RXD0", "RGMII_RXD1", "RGMII_RXD2", "RGMII_RXD3", "RGMII_TXCLK", "RGMII_TXCTL", "RGMII_TXD0", "RGMII_TXD1", "RGMII_TXD2", "RGMII_TXD3"; }; &pwm1 { pinctrl-names = "default"; pinctrl-0 = <&pwm1_0_gpio40 &pwm1_1_gpio41>; status = "okay"; }; /* SDHCI is used to control the SDIO for wireless */ &sdhci { #address-cells = <1>; #size-cells = <0>; pinctrl-names = "default"; pinctrl-0 = <&emmc_gpio34>; bus-width = <4>; non-removable; mmc-pwrseq = <&wifi_pwrseq>; status = "okay"; brcmf: wifi@1 { reg = <1>; compatible = "brcm,bcm4329-fmac"; }; }; /* EMMC2 is used to drive the SD card */ &emmc2 { vqmmc-supply = <&sd_io_1v8_reg>; broken-cd; status = "okay"; }; &genet { phy-handle = <&phy1>; phy-mode = "rgmii-rxid"; status = "okay"; }; &genet_mdio { phy1: ethernet-phy@1 { /* No PHY interrupt */ reg = <0x1>; }; }; /* uart0 communicates with the BT module */ &uart0 { pinctrl-names = "default"; pinctrl-0 = <&uart0_ctsrts_gpio30 &uart0_gpio32>; uart-has-rtscts; status = "okay"; bluetooth { compatible = "brcm,bcm43438-bt"; max-speed = <2000000>; shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>; }; }; /* uart1 is mapped to the pin header */ &uart1 { pinctrl-names = "default"; pinctrl-0 = <&uart1_gpio14>; status = "okay"; }; &vchiq { interrupts = ; }; // ============================================= // Downstream rpi- changes #include "bcm270x.dtsi" #include "bcm271x-rpi-bt.dtsi" / { soc { /delete-node/ pixelvalve@7e807000; /delete-node/ hdmi@7e902000; }; }; #include "bcm2711-rpi.dtsi" #include "bcm283x-rpi-csi1-2lane.dtsi" #include "bcm283x-rpi-i2c0mux_0_44.dtsi" / { chosen { bootargs = "coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_headphones=1"; }; aliases { serial0 = &uart1; serial1 = &uart0; mmc0 = &emmc2; mmc1 = &mmcnr; mmc2 = &sdhost; /delete-property/ i2c2; i2c3 = &i2c3; i2c4 = &i2c4; i2c5 = &i2c5; i2c6 = &i2c6; /delete-property/ intc; }; vcc: fixedregulator@0 { compatible = "regulator-fixed"; regulator-name = "fixed-supply"; regulator-min-microvolt = <2500000>; regulator-max-microvolt = <2500000>; regulator-boot-on; }; osc: oscillator { #clock-cells = <0>; compatible = "fixed-clock"; clock-frequency = <25000000>; clock-output-names = "mclk"; }; /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>; status = "okay"; ad9832@0{ #clock-cells = <0>; compatible = "ad9832"; reg = <0>; spi-max-frequency = <1000000>; spi-cpol; //spi-cpha; // mode 2 => CPHA = CPOL = 1 clocks = <&osc>; clock-names="mclk"; vcc-supply = <&vcc>; }; //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 { spi0_pins: spi0_pins { brcm,pins = <9 10 11>; brcm,function = ; }; spi0_cs_pins: spi0_cs_pins { brcm,pins = <8 7>; brcm,function = ; }; spi3_pins: spi3_pins { brcm,pins = <1 2 3>; brcm,function = ; }; spi3_cs_pins: spi3_cs_pins { brcm,pins = <0 24>; brcm,function = ; }; spi4_pins: spi4_pins { brcm,pins = <5 6 7>; brcm,function = ; }; spi4_cs_pins: spi4_cs_pins { brcm,pins = <4 25>; brcm,function = ; }; spi5_pins: spi5_pins { brcm,pins = <13 14 15>; brcm,function = ; }; spi5_cs_pins: spi5_cs_pins { brcm,pins = <12 26>; brcm,function = ; }; spi6_pins: spi6_pins { brcm,pins = <19 20 21>; brcm,function = ; }; spi6_cs_pins: spi6_cs_pins { brcm,pins = <18 27>; brcm,function = ; }; i2c0_pins: i2c0 { brcm,pins = <0 1>; brcm,function = ; brcm,pull = ; }; i2c1_pins: i2c1 { brcm,pins = <2 3>; brcm,function = ; brcm,pull = ; }; i2c3_pins: i2c3 { brcm,pins = <4 5>; brcm,function = ; brcm,pull = ; }; i2c4_pins: i2c4 { brcm,pins = <8 9>; brcm,function = ; brcm,pull = ; }; i2c5_pins: i2c5 { brcm,pins = <12 13>; brcm,function = ; brcm,pull = ; }; i2c6_pins: i2c6 { brcm,pins = <22 23>; brcm,function = ; brcm,pull = ; }; i2s_pins: i2s { brcm,pins = <18 19 20 21>; brcm,function = ; }; sdio_pins: sdio_pins { brcm,pins = <34 35 36 37 38 39>; brcm,function = ; // alt3 = SD1 brcm,pull = <0 2 2 2 2 2>; }; 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; }; uart2_pins: uart2_pins { brcm,pins = <0 1>; brcm,function = ; brcm,pull = <0 2>; }; uart3_pins: uart3_pins { brcm,pins = <4 5>; brcm,function = ; brcm,pull = <0 2>; }; uart4_pins: uart4_pins { brcm,pins = <8 9>; brcm,function = ; brcm,pull = <0 2>; }; uart5_pins: uart5_pins { brcm,pins = <12 13>; brcm,function = ; brcm,pull = <0 2>; }; }; &i2c0if { clock-frequency = <100000>; }; &i2c1 { pinctrl-names = "default"; pinctrl-0 = <&i2c1_pins>; clock-frequency = <100000>; }; &i2s { pinctrl-names = "default"; pinctrl-0 = <&i2s_pins>; }; / { __overrides__ { /delete-property/ i2c2_baudrate; /delete-property/ i2c2_iknowwhatimdoing; }; }; &firmwarekms { compatible = "raspberrypi,rpi-firmware-kms-2711"; }; // ============================================= // Board specific stuff here / { sd_vcc_reg: sd_vcc_reg { compatible = "regulator-fixed"; regulator-name = "vcc-sd"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-boot-on; enable-active-high; gpio = <&expgpio 6 GPIO_ACTIVE_HIGH>; }; }; &sdhost { status = "disabled"; }; &emmc2 { vmmc-supply = <&sd_vcc_reg>; }; &phy1 { led-modes = <0x00 0x08>; /* link/activity link */ }; &gpio { audio_pins: audio_pins { brcm,pins = <40 41>; brcm,function = <4>; }; }; &leds { act_led: act { label = "led0"; linux,default-trigger = "mmc0"; gpios = <&gpio 42 GPIO_ACTIVE_HIGH>; }; pwr_led: pwr { label = "led1"; linux,default-trigger = "default-on"; gpios = <&expgpio 2 GPIO_ACTIVE_LOW>; }; }; &pwm1 { status = "disabled"; }; &audio { pinctrl-names = "default"; pinctrl-0 = <&audio_pins>; }; &vc4 { status = "disabled"; }; &pixelvalve0 { status = "disabled"; }; &pixelvalve1 { status = "disabled"; }; &pixelvalve2 { status = "disabled"; }; &pixelvalve3 { status = "disabled"; }; &pixelvalve4 { status = "disabled"; }; &hdmi0 { status = "disabled"; }; &ddc0 { status = "disabled"; }; &hdmi1 { status = "disabled"; }; &ddc1 { status = "disabled"; }; / { __overrides__ { act_led_gpio = <&act_led>,"gpios:4"; act_led_activelow = <&act_led>,"gpios:8"; act_led_trigger = <&act_led>,"linux,default-trigger"; pwr_led_gpio = <&pwr_led>,"gpios:4"; pwr_led_activelow = <&pwr_led>,"gpios:8"; pwr_led_trigger = <&pwr_led>,"linux,default-trigger"; eth_led0 = <&phy1>,"led-modes:0"; eth_led1 = <&phy1>,"led-modes:4"; sd_poll_once = <&emmc2>, "non-removable?"; spi_dma4 = <&spi0>, "dmas:0=", <&dma40>, <&spi0>, "dmas:8=", <&dma40>; }; };