Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/arm64/boot/dts/broadcom/bcm2712-rpi-5-b-ovl-rp1.dts
29274 views
// SPDX-License-Identifier: (GPL-2.0 OR MIT)
/dts-v1/;

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include "bcm2712.dtsi"

/ {
	compatible = "raspberrypi,5-model-b", "brcm,bcm2712";
	model = "Raspberry Pi 5";

	aliases {
		serial10 = &uart10;
	};

	chosen: chosen {
		stdout-path = "serial10:115200n8";
	};

	clk_rp1_xosc: clock-50000000 {
		compatible = "fixed-clock";
		#clock-cells = <0>;
		clock-output-names = "rp1-xosc";
		clock-frequency = <50000000>;
	};

	/* Will be filled by the bootloader */
	memory@0 {
		device_type = "memory";
		reg = <0 0 0 0x28000000>;
	};

	gpio-keys {
		compatible = "gpio-keys";
		pinctrl-names = "default";
		pinctrl-0 = <&pwr_button_default>;
		status = "okay";

		power_button: power-button {
			label = "pwr_button";
			linux,code = <KEY_POWER>;
			gpios = <&gio 20 GPIO_ACTIVE_LOW>;
			debounce-interval = <50>;
		};
	};

	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 = <&gio_aon 3 GPIO_ACTIVE_HIGH>;
		states = <1800000 1>,
			 <3300000 0>;
	};

	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;
		gpios = <&gio_aon 4 GPIO_ACTIVE_HIGH>;
	};

	wl_on_reg: wl-on-reg {
		compatible = "regulator-fixed";
		regulator-name = "wl-on-regulator";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		pinctrl-0 = <&wl_on_default>;
		pinctrl-names = "default";
		gpio = <&gio 28 GPIO_ACTIVE_HIGH>;
		startup-delay-us = <150000>;
		enable-active-high;
	};
};

&pinctrl {
	bt_shutdown_default: bt-shutdown-default-state {
		function = "gpio";
		pins = "gpio29";
	};

	emmc_sd_default: emmc-sd-default-state {
		pins = "emmc_cmd", "emmc_dat0", "emmc_dat1", "emmc_dat2", "emmc_dat3";
		bias-pull-up;
	};

	pwr_button_default: pwr-button-default-state {
		function = "gpio";
		pins = "gpio20";
		bias-pull-up;
	};

	sdio2_30_default: sdio2-30-default-state {
		clk-pins {
			function = "sd2";
			pins = "gpio30";
			bias-disable;
		};
		cmd-pins {
			function = "sd2";
			pins = "gpio31";
			bias-pull-up;
		};
		dat-pins {
			function = "sd2";
			pins = "gpio32", "gpio33", "gpio34", "gpio35";
			bias-pull-up;
		};
	};

	uarta_24_default: uarta-24-default-state {
		rts-pins {
			function = "uart0";
			pins = "gpio24";
			bias-disable;
		};
		cts-pins {
			function = "uart0";
			pins = "gpio25";
			bias-pull-up;
		};
		txd-pins {
			function = "uart0";
			pins = "gpio26";
			bias-disable;
		};
		rxd-pins {
			function = "uart0";
			pins = "gpio27";
			bias-pull-up;
		};
	};

	wl_on_default: wl-on-default-state {
		function = "gpio";
		pins = "gpio28";
	};
};

&pinctrl_aon {
	emmc_aon_cd_default: emmc-aon-cd-default-state {
		function = "sd_card_g";
		pins = "aon_gpio5";
		bias-pull-up;
	};
};

/* The Debug UART, on Rpi5 it's on JST-SH 1.0mm 3-pin connector
 * labeled "UART", i.e. the interface with the system console.
 */
&uart10 {
	status = "okay";
};

/* SDIO1 is used to drive the SD card */
&sdio1 {
	pinctrl-0 = <&emmc_sd_default>, <&emmc_aon_cd_default>;
	pinctrl-names = "default";
	vqmmc-supply = <&sd_io_1v8_reg>;
	vmmc-supply = <&sd_vcc_reg>;
	bus-width = <4>;
	sd-uhs-sdr50;
	sd-uhs-ddr50;
	sd-uhs-sdr104;
	cd-gpios = <&gio_aon 5 GPIO_ACTIVE_LOW>;
};

&sdio2 {
	pinctrl-0 = <&sdio2_30_default>;
	pinctrl-names = "default";
	bus-width = <4>;
	vmmc-supply = <&wl_on_reg>;
	sd-uhs-ddr50;
	non-removable;
	status = "okay";
	#address-cells = <1>;
	#size-cells = <0>;

	wifi: wifi@1 {
		reg = <1>;
		compatible = "brcm,bcm4329-fmac";
	};
};

&soc {
	firmware: firmware {
		compatible = "raspberrypi,bcm2835-firmware", "simple-mfd";
		#address-cells = <1>;
		#size-cells = <1>;

		mboxes = <&mailbox>;
		dma-ranges;

		firmware_clocks: clocks {
			compatible = "raspberrypi,firmware-clocks";
			#clock-cells = <1>;
		};

		reset: reset {
			compatible = "raspberrypi,firmware-reset";
			#reset-cells = <1>;
		};
	};

	power: power {
		compatible = "raspberrypi,bcm2835-power";
		firmware = <&firmware>;
		#power-domain-cells = <1>;
	};
};

/* uarta communicates with the BT module */
&uarta {
	uart-has-rtscts;
	pinctrl-0 = <&uarta_24_default &bt_shutdown_default>;
	pinctrl-names = "default";
	status = "okay";

	bluetooth: bluetooth {
		compatible = "brcm,bcm43438-bt";
		max-speed = <3000000>;
		shutdown-gpios = <&gio 29 GPIO_ACTIVE_HIGH>;
	};
};

&hvs {
	clocks = <&firmware_clocks 4>, <&firmware_clocks 16>;
	clock-names = "core", "disp";
};

&hdmi0 {
	clocks = <&firmware_clocks 13>, <&firmware_clocks 14>, <&dvp 0>, <&clk_27MHz>;
	clock-names = "hdmi", "bvb", "audio", "cec";
};

&hdmi1 {
	clocks = <&firmware_clocks 13>, <&firmware_clocks 14>, <&dvp 1>, <&clk_27MHz>;
	clock-names = "hdmi", "bvb", "audio", "cec";
};

&pcie1 {
	status = "okay";
};

&pcie2 {
	status = "okay";
};