10262f273SNeil Armstrong// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
20262f273SNeil Armstrong/*
30262f273SNeil Armstrong * Copyright (c) 2023 Neil Armstrong <neil.armstrong@linaro.org>
40262f273SNeil Armstrong */
50262f273SNeil Armstrong
60262f273SNeil Armstrong#include "meson-g12b-a311d.dtsi"
70262f273SNeil Armstrong#include <dt-bindings/gpio/meson-g12a-gpio.h>
80262f273SNeil Armstrong
90262f273SNeil Armstrong/ {
100262f273SNeil Armstrong	aliases {
110262f273SNeil Armstrong		serial0 = &uart_AO;
120262f273SNeil Armstrong		rtc1 = &vrtc;
130262f273SNeil Armstrong	};
140262f273SNeil Armstrong
150262f273SNeil Armstrong	chosen {
160262f273SNeil Armstrong		stdout-path = "serial0:115200n8";
170262f273SNeil Armstrong	};
180262f273SNeil Armstrong
190262f273SNeil Armstrong	emmc_pwrseq: emmc-pwrseq {
200262f273SNeil Armstrong		compatible = "mmc-pwrseq-emmc";
210262f273SNeil Armstrong		reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>;
220262f273SNeil Armstrong	};
230262f273SNeil Armstrong
240262f273SNeil Armstrong	memory@0 {
250262f273SNeil Armstrong		device_type = "memory";
260262f273SNeil Armstrong		reg = <0x0 0x0 0x0 0x40000000>;
270262f273SNeil Armstrong	};
280262f273SNeil Armstrong
290262f273SNeil Armstrong	sdio_pwrseq: sdio-pwrseq {
300262f273SNeil Armstrong		compatible = "mmc-pwrseq-simple";
310262f273SNeil Armstrong		reset-gpios = <&gpio GPIOAO_6 GPIO_ACTIVE_LOW>;
320262f273SNeil Armstrong		clocks = <&wifi32k>;
330262f273SNeil Armstrong		clock-names = "ext_clock";
340262f273SNeil Armstrong	};
350262f273SNeil Armstrong
360262f273SNeil Armstrong	emmc_1v8: regulator-emmc-1v8 {
370262f273SNeil Armstrong		compatible = "regulator-fixed";
380262f273SNeil Armstrong		regulator-name = "EMMC_1V8";
390262f273SNeil Armstrong		regulator-min-microvolt = <1800000>;
400262f273SNeil Armstrong		regulator-max-microvolt = <1800000>;
410262f273SNeil Armstrong		vin-supply = <&vddao_3v3>;
420262f273SNeil Armstrong		regulator-always-on;
430262f273SNeil Armstrong	};
440262f273SNeil Armstrong
450262f273SNeil Armstrong	dc_in: regulator-dc-in {
460262f273SNeil Armstrong		compatible = "regulator-fixed";
470262f273SNeil Armstrong		regulator-name = "DC_IN";
480262f273SNeil Armstrong		regulator-min-microvolt = <5000000>;
490262f273SNeil Armstrong		regulator-max-microvolt = <5000000>;
500262f273SNeil Armstrong		regulator-always-on;
510262f273SNeil Armstrong	};
520262f273SNeil Armstrong
530262f273SNeil Armstrong	vddio_c: regulator-vddio-c {
540262f273SNeil Armstrong		compatible = "regulator-gpio";
550262f273SNeil Armstrong		regulator-name = "VDDIO_C";
560262f273SNeil Armstrong		regulator-min-microvolt = <1800000>;
570262f273SNeil Armstrong		regulator-max-microvolt = <3300000>;
580262f273SNeil Armstrong
590262f273SNeil Armstrong		enable-gpios = <&gpio_ao GPIOAO_3 GPIO_OPEN_DRAIN>;
600262f273SNeil Armstrong		enable-active-high;
610262f273SNeil Armstrong		regulator-always-on;
620262f273SNeil Armstrong
630262f273SNeil Armstrong		gpios = <&gpio_ao GPIOAO_9 GPIO_OPEN_DRAIN>;
640262f273SNeil Armstrong		gpios-states = <1>;
650262f273SNeil Armstrong
660262f273SNeil Armstrong		states = <1800000 0>,
670262f273SNeil Armstrong			 <3300000 1>;
680262f273SNeil Armstrong	};
690262f273SNeil Armstrong
700262f273SNeil Armstrong	vddao_1v8: regulator-vddao-1v8 {
710262f273SNeil Armstrong		compatible = "regulator-fixed";
720262f273SNeil Armstrong		regulator-name = "VDDAO_1V8";
730262f273SNeil Armstrong		regulator-min-microvolt = <1800000>;
740262f273SNeil Armstrong		regulator-max-microvolt = <1800000>;
750262f273SNeil Armstrong		vin-supply = <&vddao_3v3>;
760262f273SNeil Armstrong		regulator-always-on;
770262f273SNeil Armstrong	};
780262f273SNeil Armstrong
790262f273SNeil Armstrong	vddao_3v3: regulator-vddao-3v3 {
800262f273SNeil Armstrong		compatible = "regulator-fixed";
810262f273SNeil Armstrong		regulator-name = "VDDAO_3V3";
820262f273SNeil Armstrong		regulator-min-microvolt = <3300000>;
830262f273SNeil Armstrong		regulator-max-microvolt = <3300000>;
840262f273SNeil Armstrong		vin-supply = <&dc_in>;
850262f273SNeil Armstrong		regulator-always-on;
860262f273SNeil Armstrong	};
870262f273SNeil Armstrong
880262f273SNeil Armstrong	vddcpu_a: regulator-vddcpu-a {
890262f273SNeil Armstrong		/*
900262f273SNeil Armstrong		 * MP8756GD DC/DC Regulator.
910262f273SNeil Armstrong		 */
920262f273SNeil Armstrong		compatible = "pwm-regulator";
930262f273SNeil Armstrong
940262f273SNeil Armstrong		regulator-name = "VDDCPU_A";
950262f273SNeil Armstrong		regulator-min-microvolt = <680000>;
960262f273SNeil Armstrong		regulator-max-microvolt = <1040000>;
970262f273SNeil Armstrong
980262f273SNeil Armstrong		pwm-supply = <&dc_in>;
990262f273SNeil Armstrong
1000262f273SNeil Armstrong		pwms = <&pwm_ab 0 1250 0>;
1010262f273SNeil Armstrong		pwm-dutycycle-range = <100 0>;
1020262f273SNeil Armstrong
1030262f273SNeil Armstrong		regulator-boot-on;
1040262f273SNeil Armstrong		regulator-always-on;
1050262f273SNeil Armstrong	};
1060262f273SNeil Armstrong
1070262f273SNeil Armstrong	vddcpu_b: regulator-vddcpu-b {
1080262f273SNeil Armstrong		/*
1090262f273SNeil Armstrong		 * SY8120B1ABC DC/DC Regulator.
1100262f273SNeil Armstrong		 */
1110262f273SNeil Armstrong		compatible = "pwm-regulator";
1120262f273SNeil Armstrong
1130262f273SNeil Armstrong		regulator-name = "VDDCPU_B";
1140262f273SNeil Armstrong		regulator-min-microvolt = <680000>;
1150262f273SNeil Armstrong		regulator-max-microvolt = <1040000>;
1160262f273SNeil Armstrong
1170262f273SNeil Armstrong		pwm-supply = <&dc_in>;
1180262f273SNeil Armstrong
1190262f273SNeil Armstrong		pwms = <&pwm_AO_cd 1 1250 0>;
1200262f273SNeil Armstrong		pwm-dutycycle-range = <100 0>;
1210262f273SNeil Armstrong
1220262f273SNeil Armstrong		regulator-boot-on;
1230262f273SNeil Armstrong		regulator-always-on;
1240262f273SNeil Armstrong	};
1250262f273SNeil Armstrong
1260262f273SNeil Armstrong	wifi32k: wifi32k {
1270262f273SNeil Armstrong		compatible = "pwm-clock";
1280262f273SNeil Armstrong		#clock-cells = <0>;
1290262f273SNeil Armstrong		clock-frequency = <32768>;
1300262f273SNeil Armstrong		pwms = <&pwm_ef 0 30518 0>; /* PWM_E at 32.768KHz */
1310262f273SNeil Armstrong	};
1320262f273SNeil Armstrong};
1330262f273SNeil Armstrong
1340262f273SNeil Armstrong&arb {
1350262f273SNeil Armstrong	status = "okay";
1360262f273SNeil Armstrong};
1370262f273SNeil Armstrong
1380262f273SNeil Armstrong&clkc_audio {
1390262f273SNeil Armstrong	status = "okay";
1400262f273SNeil Armstrong};
1410262f273SNeil Armstrong
1420262f273SNeil Armstrong&cec_AO {
1430262f273SNeil Armstrong	pinctrl-0 = <&cec_ao_a_h_pins>;
1440262f273SNeil Armstrong	pinctrl-names = "default";
1450262f273SNeil Armstrong	hdmi-phandle = <&hdmi_tx>;
1460262f273SNeil Armstrong};
1470262f273SNeil Armstrong
1480262f273SNeil Armstrong&cecb_AO {
1490262f273SNeil Armstrong	pinctrl-0 = <&cec_ao_b_h_pins>;
1500262f273SNeil Armstrong	pinctrl-names = "default";
1510262f273SNeil Armstrong	hdmi-phandle = <&hdmi_tx>;
1520262f273SNeil Armstrong};
1530262f273SNeil Armstrong
1540262f273SNeil Armstrong&cpu0 {
1550262f273SNeil Armstrong	cpu-supply = <&vddcpu_b>;
1560262f273SNeil Armstrong	operating-points-v2 = <&cpu_opp_table_0>;
1570262f273SNeil Armstrong	clocks = <&clkc CLKID_CPU_CLK>;
1580262f273SNeil Armstrong	clock-latency = <50000>;
1590262f273SNeil Armstrong};
1600262f273SNeil Armstrong
1610262f273SNeil Armstrong&cpu1 {
1620262f273SNeil Armstrong	cpu-supply = <&vddcpu_b>;
1630262f273SNeil Armstrong	operating-points-v2 = <&cpu_opp_table_0>;
1640262f273SNeil Armstrong	clocks = <&clkc CLKID_CPU_CLK>;
1650262f273SNeil Armstrong	clock-latency = <50000>;
1660262f273SNeil Armstrong};
1670262f273SNeil Armstrong
1680262f273SNeil Armstrong&cpu100 {
1690262f273SNeil Armstrong	cpu-supply = <&vddcpu_a>;
1700262f273SNeil Armstrong	operating-points-v2 = <&cpub_opp_table_1>;
1710262f273SNeil Armstrong	clocks = <&clkc CLKID_CPUB_CLK>;
1720262f273SNeil Armstrong	clock-latency = <50000>;
1730262f273SNeil Armstrong};
1740262f273SNeil Armstrong
1750262f273SNeil Armstrong&cpu101 {
1760262f273SNeil Armstrong	cpu-supply = <&vddcpu_a>;
1770262f273SNeil Armstrong	operating-points-v2 = <&cpub_opp_table_1>;
1780262f273SNeil Armstrong	clocks = <&clkc CLKID_CPUB_CLK>;
1790262f273SNeil Armstrong	clock-latency = <50000>;
1800262f273SNeil Armstrong};
1810262f273SNeil Armstrong
1820262f273SNeil Armstrong&cpu102 {
1830262f273SNeil Armstrong	cpu-supply = <&vddcpu_a>;
1840262f273SNeil Armstrong	operating-points-v2 = <&cpub_opp_table_1>;
1850262f273SNeil Armstrong	clocks = <&clkc CLKID_CPUB_CLK>;
1860262f273SNeil Armstrong	clock-latency = <50000>;
1870262f273SNeil Armstrong};
1880262f273SNeil Armstrong
1890262f273SNeil Armstrong&cpu103 {
1900262f273SNeil Armstrong	cpu-supply = <&vddcpu_a>;
1910262f273SNeil Armstrong	operating-points-v2 = <&cpub_opp_table_1>;
1920262f273SNeil Armstrong	clocks = <&clkc CLKID_CPUB_CLK>;
1930262f273SNeil Armstrong	clock-latency = <50000>;
1940262f273SNeil Armstrong};
1950262f273SNeil Armstrong
1960262f273SNeil Armstrong&ext_mdio {
1970262f273SNeil Armstrong	external_phy: ethernet-phy@0 {
1980262f273SNeil Armstrong		/* Realtek RTL8211F (0x001cc916) */
1990262f273SNeil Armstrong		reg = <0>;
2000262f273SNeil Armstrong		max-speed = <1000>;
2010262f273SNeil Armstrong
2020262f273SNeil Armstrong		interrupt-parent = <&gpio_intc>;
2030262f273SNeil Armstrong		/* MAC_INTR on GPIOZ_14 */
204*6387e0aaSHuqiang Qin		interrupts = <IRQID_GPIOZ_14 IRQ_TYPE_LEVEL_LOW>;
2050262f273SNeil Armstrong	};
2060262f273SNeil Armstrong};
2070262f273SNeil Armstrong
2080262f273SNeil Armstrong/* Ethernet to be enabled in baseboard DT */
2090262f273SNeil Armstrong&ethmac {
2100262f273SNeil Armstrong	pinctrl-0 = <&eth_pins>, <&eth_rgmii_pins>;
2110262f273SNeil Armstrong	pinctrl-names = "default";
2120262f273SNeil Armstrong	phy-mode = "rgmii-txid";
2130262f273SNeil Armstrong	phy-handle = <&external_phy>;
2140262f273SNeil Armstrong};
2150262f273SNeil Armstrong
2160262f273SNeil Armstrong&frddr_a {
2170262f273SNeil Armstrong	status = "okay";
2180262f273SNeil Armstrong};
2190262f273SNeil Armstrong
2200262f273SNeil Armstrong&frddr_b {
2210262f273SNeil Armstrong	status = "okay";
2220262f273SNeil Armstrong};
2230262f273SNeil Armstrong
2240262f273SNeil Armstrong&frddr_c {
2250262f273SNeil Armstrong	status = "okay";
2260262f273SNeil Armstrong};
2270262f273SNeil Armstrong
2280262f273SNeil Armstrong/* HDMI to be enabled in baseboard DT */
2290262f273SNeil Armstrong&hdmi_tx {
2300262f273SNeil Armstrong	pinctrl-0 = <&hdmitx_hpd_pins>, <&hdmitx_ddc_pins>;
2310262f273SNeil Armstrong	pinctrl-names = "default";
2320262f273SNeil Armstrong	hdmi-supply = <&dc_in>;
2330262f273SNeil Armstrong};
2340262f273SNeil Armstrong
2350262f273SNeil Armstrong/* "Camera" I2C bus */
2360262f273SNeil Armstrong&i2c1 {
2370262f273SNeil Armstrong	pinctrl-0 = <&i2c1_sda_h6_pins>, <&i2c1_sck_h7_pins>;
2380262f273SNeil Armstrong	pinctrl-names = "default";
2390262f273SNeil Armstrong};
2400262f273SNeil Armstrong
2410262f273SNeil Armstrong/* Main I2C bus */
2420262f273SNeil Armstrong&i2c2 {
2430262f273SNeil Armstrong	pinctrl-0 = <&i2c2_sda_x_pins>, <&i2c2_sck_x_pins>;
2440262f273SNeil Armstrong	pinctrl-names = "default";
2450262f273SNeil Armstrong};
2460262f273SNeil Armstrong
2470262f273SNeil Armstrong/* "ID" I2C bus */
2480262f273SNeil Armstrong&i2c3 {
2490262f273SNeil Armstrong	pinctrl-0 = <&i2c3_sda_a_pins>, <&i2c3_sck_a_pins>;
2500262f273SNeil Armstrong	pinctrl-names = "default";
2510262f273SNeil Armstrong};
2520262f273SNeil Armstrong
2530262f273SNeil Armstrong&pcie {
2540262f273SNeil Armstrong	reset-gpios = <&gpio GPIOA_8 GPIO_ACTIVE_LOW>;
2550262f273SNeil Armstrong};
2560262f273SNeil Armstrong
2570262f273SNeil Armstrong&pwm_ab {
2580262f273SNeil Armstrong	pinctrl-0 = <&pwm_a_e_pins>;
2590262f273SNeil Armstrong	pinctrl-names = "default";
2600262f273SNeil Armstrong	clocks = <&xtal>;
2610262f273SNeil Armstrong	clock-names = "clkin0";
2620262f273SNeil Armstrong
2630262f273SNeil Armstrong	status = "okay";
2640262f273SNeil Armstrong};
2650262f273SNeil Armstrong
2660262f273SNeil Armstrong&pwm_ef {
2670262f273SNeil Armstrong	pinctrl-0 = <&pwm_e_pins>;
2680262f273SNeil Armstrong	pinctrl-names = "default";
2690262f273SNeil Armstrong
2700262f273SNeil Armstrong	status = "okay";
2710262f273SNeil Armstrong};
2720262f273SNeil Armstrong
2730262f273SNeil Armstrong&pwm_AO_cd {
2740262f273SNeil Armstrong	pinctrl-0 = <&pwm_ao_d_e_pins>;
2750262f273SNeil Armstrong	pinctrl-names = "default";
2760262f273SNeil Armstrong	clocks = <&xtal>;
2770262f273SNeil Armstrong	clock-names = "clkin1";
2780262f273SNeil Armstrong
2790262f273SNeil Armstrong	status = "okay";
2800262f273SNeil Armstrong};
2810262f273SNeil Armstrong
2820262f273SNeil Armstrong&saradc {
2830262f273SNeil Armstrong	vref-supply = <&vddao_1v8>;
2840262f273SNeil Armstrong
2850262f273SNeil Armstrong	status = "okay";
2860262f273SNeil Armstrong};
2870262f273SNeil Armstrong
2880262f273SNeil Armstrong/* on-module SDIO WiFi */
2890262f273SNeil Armstrong&sd_emmc_a {
2900262f273SNeil Armstrong	pinctrl-0 = <&sdio_pins>;
2910262f273SNeil Armstrong	pinctrl-1 = <&sdio_clk_gate_pins>;
2920262f273SNeil Armstrong	pinctrl-names = "default", "clk-gate";
2930262f273SNeil Armstrong	#address-cells = <1>;
2940262f273SNeil Armstrong	#size-cells = <0>;
2950262f273SNeil Armstrong
2960262f273SNeil Armstrong	bus-width = <4>;
2970262f273SNeil Armstrong	sd-uhs-sdr104;
2980262f273SNeil Armstrong	max-frequency = <50000000>;
2990262f273SNeil Armstrong
3000262f273SNeil Armstrong	non-removable;
3010262f273SNeil Armstrong	disable-wp;
3020262f273SNeil Armstrong
3030262f273SNeil Armstrong	/* WiFi firmware requires power in suspend */
3040262f273SNeil Armstrong	keep-power-in-suspend;
3050262f273SNeil Armstrong
3060262f273SNeil Armstrong	mmc-pwrseq = <&sdio_pwrseq>;
3070262f273SNeil Armstrong
3080262f273SNeil Armstrong	vmmc-supply = <&vddao_3v3>;
3090262f273SNeil Armstrong	vqmmc-supply = <&vddao_3v3>;
3100262f273SNeil Armstrong
3110262f273SNeil Armstrong	status = "okay";
3120262f273SNeil Armstrong
3130262f273SNeil Armstrong	rtl8822cs: wifi@1 {
3140262f273SNeil Armstrong		reg = <1>;
3150262f273SNeil Armstrong	};
3160262f273SNeil Armstrong};
3170262f273SNeil Armstrong
3180262f273SNeil Armstrong/* SD card to be enabled in baseboard DT */
3190262f273SNeil Armstrong&sd_emmc_b {
3200262f273SNeil Armstrong	pinctrl-0 = <&sdcard_c_pins>;
3210262f273SNeil Armstrong	pinctrl-1 = <&sdcard_clk_gate_c_pins>;
3220262f273SNeil Armstrong	pinctrl-names = "default", "clk-gate";
3230262f273SNeil Armstrong
3240262f273SNeil Armstrong	bus-width = <4>;
3250262f273SNeil Armstrong	cap-sd-highspeed;
3260262f273SNeil Armstrong	max-frequency = <50000000>;
3270262f273SNeil Armstrong	disable-wp;
3280262f273SNeil Armstrong
3290262f273SNeil Armstrong	cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>;
3300262f273SNeil Armstrong	vmmc-supply = <&vddao_3v3>;
3310262f273SNeil Armstrong	vqmmc-supply = <&vddio_c>;
3320262f273SNeil Armstrong};
3330262f273SNeil Armstrong
3340262f273SNeil Armstrong/* on-module eMMC */
3350262f273SNeil Armstrong&sd_emmc_c {
3360262f273SNeil Armstrong	pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_8b_pins>, <&emmc_ds_pins>;
3370262f273SNeil Armstrong	pinctrl-1 = <&emmc_clk_gate_pins>;
3380262f273SNeil Armstrong	pinctrl-names = "default", "clk-gate";
3390262f273SNeil Armstrong
3400262f273SNeil Armstrong	bus-width = <8>;
3410262f273SNeil Armstrong	cap-mmc-highspeed;
3420262f273SNeil Armstrong	mmc-ddr-1_8v;
3430262f273SNeil Armstrong	mmc-hs200-1_8v;
3440262f273SNeil Armstrong	max-frequency = <200000000>;
3450262f273SNeil Armstrong	disable-wp;
3460262f273SNeil Armstrong
3470262f273SNeil Armstrong	mmc-pwrseq = <&emmc_pwrseq>;
3480262f273SNeil Armstrong	vmmc-supply = <&vddao_3v3>;
3490262f273SNeil Armstrong	vqmmc-supply = <&vddao_1v8>;
3500262f273SNeil Armstrong
3510262f273SNeil Armstrong	status = "okay";
3520262f273SNeil Armstrong};
3530262f273SNeil Armstrong
3540262f273SNeil Armstrong&tdmif_b {
3550262f273SNeil Armstrong	status = "okay";
3560262f273SNeil Armstrong};
3570262f273SNeil Armstrong
3580262f273SNeil Armstrong&tdmout_b {
3590262f273SNeil Armstrong	status = "okay";
3600262f273SNeil Armstrong};
3610262f273SNeil Armstrong
3620262f273SNeil Armstrong/* on-module UART BT */
3630262f273SNeil Armstrong&uart_A {
3640262f273SNeil Armstrong	pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>;
3650262f273SNeil Armstrong	pinctrl-names = "default";
3660262f273SNeil Armstrong	uart-has-rtscts;
3670262f273SNeil Armstrong
3680262f273SNeil Armstrong	status = "okay";
3690262f273SNeil Armstrong
3700262f273SNeil Armstrong	bluetooth {
3710262f273SNeil Armstrong		compatible = "realtek,rtl8822cs-bt";
3720262f273SNeil Armstrong		enable-gpios  = <&gpio GPIOX_17 GPIO_ACTIVE_HIGH>;
3730262f273SNeil Armstrong		host-wake-gpios = <&gpio GPIOX_19 GPIO_ACTIVE_HIGH>;
3740262f273SNeil Armstrong		device-wake-gpios = <&gpio GPIOX_18 GPIO_ACTIVE_HIGH>;
3750262f273SNeil Armstrong	};
3760262f273SNeil Armstrong};
3770262f273SNeil Armstrong
3780262f273SNeil Armstrong&uart_AO {
3790262f273SNeil Armstrong	pinctrl-0 = <&uart_ao_a_pins>;
3800262f273SNeil Armstrong	pinctrl-names = "default";
3810262f273SNeil Armstrong
3820262f273SNeil Armstrong	status = "okay";
3830262f273SNeil Armstrong};
3840262f273SNeil Armstrong
3850262f273SNeil Armstrong&usb {
3860262f273SNeil Armstrong	phys = <&usb2_phy0>, <&usb2_phy1>;
3870262f273SNeil Armstrong	phy-names = "usb2-phy0", "usb2-phy1";
3880262f273SNeil Armstrong};
389