1// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2/*
3 * Copyright (c) 2023 Neil Armstrong <neil.armstrong@linaro.org>
4 */
5
6#include "meson-g12b-a311d.dtsi"
7#include <dt-bindings/gpio/meson-g12a-gpio.h>
8
9/ {
10	aliases {
11		serial0 = &uart_AO;
12		rtc1 = &vrtc;
13	};
14
15	chosen {
16		stdout-path = "serial0:115200n8";
17	};
18
19	emmc_pwrseq: emmc-pwrseq {
20		compatible = "mmc-pwrseq-emmc";
21		reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>;
22	};
23
24	memory@0 {
25		device_type = "memory";
26		reg = <0x0 0x0 0x0 0x40000000>;
27	};
28
29	sdio_pwrseq: sdio-pwrseq {
30		compatible = "mmc-pwrseq-simple";
31		reset-gpios = <&gpio GPIOAO_6 GPIO_ACTIVE_LOW>;
32		clocks = <&wifi32k>;
33		clock-names = "ext_clock";
34	};
35
36	emmc_1v8: regulator-emmc-1v8 {
37		compatible = "regulator-fixed";
38		regulator-name = "EMMC_1V8";
39		regulator-min-microvolt = <1800000>;
40		regulator-max-microvolt = <1800000>;
41		vin-supply = <&vddao_3v3>;
42		regulator-always-on;
43	};
44
45	dc_in: regulator-dc-in {
46		compatible = "regulator-fixed";
47		regulator-name = "DC_IN";
48		regulator-min-microvolt = <5000000>;
49		regulator-max-microvolt = <5000000>;
50		regulator-always-on;
51	};
52
53	vddio_c: regulator-vddio-c {
54		compatible = "regulator-gpio";
55		regulator-name = "VDDIO_C";
56		regulator-min-microvolt = <1800000>;
57		regulator-max-microvolt = <3300000>;
58
59		enable-gpios = <&gpio_ao GPIOAO_3 GPIO_OPEN_DRAIN>;
60		enable-active-high;
61		regulator-always-on;
62
63		gpios = <&gpio_ao GPIOAO_9 GPIO_OPEN_DRAIN>;
64		gpios-states = <1>;
65
66		states = <1800000 0>,
67			 <3300000 1>;
68	};
69
70	vddao_1v8: regulator-vddao-1v8 {
71		compatible = "regulator-fixed";
72		regulator-name = "VDDAO_1V8";
73		regulator-min-microvolt = <1800000>;
74		regulator-max-microvolt = <1800000>;
75		vin-supply = <&vddao_3v3>;
76		regulator-always-on;
77	};
78
79	vddao_3v3: regulator-vddao-3v3 {
80		compatible = "regulator-fixed";
81		regulator-name = "VDDAO_3V3";
82		regulator-min-microvolt = <3300000>;
83		regulator-max-microvolt = <3300000>;
84		vin-supply = <&dc_in>;
85		regulator-always-on;
86	};
87
88	vddcpu_a: regulator-vddcpu-a {
89		/*
90		 * MP8756GD DC/DC Regulator.
91		 */
92		compatible = "pwm-regulator";
93
94		regulator-name = "VDDCPU_A";
95		regulator-min-microvolt = <680000>;
96		regulator-max-microvolt = <1040000>;
97
98		pwm-supply = <&dc_in>;
99
100		pwms = <&pwm_ab 0 1250 0>;
101		pwm-dutycycle-range = <100 0>;
102
103		regulator-boot-on;
104		regulator-always-on;
105	};
106
107	vddcpu_b: regulator-vddcpu-b {
108		/*
109		 * SY8120B1ABC DC/DC Regulator.
110		 */
111		compatible = "pwm-regulator";
112
113		regulator-name = "VDDCPU_B";
114		regulator-min-microvolt = <680000>;
115		regulator-max-microvolt = <1040000>;
116
117		pwm-supply = <&dc_in>;
118
119		pwms = <&pwm_AO_cd 1 1250 0>;
120		pwm-dutycycle-range = <100 0>;
121
122		regulator-boot-on;
123		regulator-always-on;
124	};
125
126	wifi32k: wifi32k {
127		compatible = "pwm-clock";
128		#clock-cells = <0>;
129		clock-frequency = <32768>;
130		pwms = <&pwm_ef 0 30518 0>; /* PWM_E at 32.768KHz */
131	};
132};
133
134&arb {
135	status = "okay";
136};
137
138&clkc_audio {
139	status = "okay";
140};
141
142&cec_AO {
143	pinctrl-0 = <&cec_ao_a_h_pins>;
144	pinctrl-names = "default";
145	hdmi-phandle = <&hdmi_tx>;
146};
147
148&cecb_AO {
149	pinctrl-0 = <&cec_ao_b_h_pins>;
150	pinctrl-names = "default";
151	hdmi-phandle = <&hdmi_tx>;
152};
153
154&cpu0 {
155	cpu-supply = <&vddcpu_b>;
156	operating-points-v2 = <&cpu_opp_table_0>;
157	clocks = <&clkc CLKID_CPU_CLK>;
158	clock-latency = <50000>;
159};
160
161&cpu1 {
162	cpu-supply = <&vddcpu_b>;
163	operating-points-v2 = <&cpu_opp_table_0>;
164	clocks = <&clkc CLKID_CPU_CLK>;
165	clock-latency = <50000>;
166};
167
168&cpu100 {
169	cpu-supply = <&vddcpu_a>;
170	operating-points-v2 = <&cpub_opp_table_1>;
171	clocks = <&clkc CLKID_CPUB_CLK>;
172	clock-latency = <50000>;
173};
174
175&cpu101 {
176	cpu-supply = <&vddcpu_a>;
177	operating-points-v2 = <&cpub_opp_table_1>;
178	clocks = <&clkc CLKID_CPUB_CLK>;
179	clock-latency = <50000>;
180};
181
182&cpu102 {
183	cpu-supply = <&vddcpu_a>;
184	operating-points-v2 = <&cpub_opp_table_1>;
185	clocks = <&clkc CLKID_CPUB_CLK>;
186	clock-latency = <50000>;
187};
188
189&cpu103 {
190	cpu-supply = <&vddcpu_a>;
191	operating-points-v2 = <&cpub_opp_table_1>;
192	clocks = <&clkc CLKID_CPUB_CLK>;
193	clock-latency = <50000>;
194};
195
196&ext_mdio {
197	external_phy: ethernet-phy@0 {
198		/* Realtek RTL8211F (0x001cc916) */
199		reg = <0>;
200		max-speed = <1000>;
201
202		interrupt-parent = <&gpio_intc>;
203		/* MAC_INTR on GPIOZ_14 */
204		interrupts = <IRQID_GPIOZ_14 IRQ_TYPE_LEVEL_LOW>;
205	};
206};
207
208/* Ethernet to be enabled in baseboard DT */
209&ethmac {
210	pinctrl-0 = <&eth_pins>, <&eth_rgmii_pins>;
211	pinctrl-names = "default";
212	phy-mode = "rgmii-txid";
213	phy-handle = <&external_phy>;
214};
215
216&frddr_a {
217	status = "okay";
218};
219
220&frddr_b {
221	status = "okay";
222};
223
224&frddr_c {
225	status = "okay";
226};
227
228/* HDMI to be enabled in baseboard DT */
229&hdmi_tx {
230	pinctrl-0 = <&hdmitx_hpd_pins>, <&hdmitx_ddc_pins>;
231	pinctrl-names = "default";
232	hdmi-supply = <&dc_in>;
233};
234
235/* "Camera" I2C bus */
236&i2c1 {
237	pinctrl-0 = <&i2c1_sda_h6_pins>, <&i2c1_sck_h7_pins>;
238	pinctrl-names = "default";
239};
240
241/* Main I2C bus */
242&i2c2 {
243	pinctrl-0 = <&i2c2_sda_x_pins>, <&i2c2_sck_x_pins>;
244	pinctrl-names = "default";
245};
246
247/* "ID" I2C bus */
248&i2c3 {
249	pinctrl-0 = <&i2c3_sda_a_pins>, <&i2c3_sck_a_pins>;
250	pinctrl-names = "default";
251};
252
253&pcie {
254	reset-gpios = <&gpio GPIOA_8 GPIO_ACTIVE_LOW>;
255};
256
257&pwm_ab {
258	pinctrl-0 = <&pwm_a_e_pins>;
259	pinctrl-names = "default";
260
261	status = "okay";
262};
263
264&pwm_ef {
265	pinctrl-0 = <&pwm_e_pins>;
266	pinctrl-names = "default";
267
268	status = "okay";
269};
270
271&pwm_AO_cd {
272	pinctrl-0 = <&pwm_ao_d_e_pins>;
273	pinctrl-names = "default";
274
275	status = "okay";
276};
277
278&saradc {
279	vref-supply = <&vddao_1v8>;
280
281	status = "okay";
282};
283
284/* on-module SDIO WiFi */
285&sd_emmc_a {
286	pinctrl-0 = <&sdio_pins>;
287	pinctrl-1 = <&sdio_clk_gate_pins>;
288	pinctrl-names = "default", "clk-gate";
289	#address-cells = <1>;
290	#size-cells = <0>;
291
292	bus-width = <4>;
293	sd-uhs-sdr104;
294	max-frequency = <50000000>;
295
296	non-removable;
297	disable-wp;
298
299	/* WiFi firmware requires power in suspend */
300	keep-power-in-suspend;
301
302	mmc-pwrseq = <&sdio_pwrseq>;
303
304	vmmc-supply = <&vddao_3v3>;
305	vqmmc-supply = <&vddao_3v3>;
306
307	status = "okay";
308
309	rtl8822cs: wifi@1 {
310		reg = <1>;
311	};
312};
313
314/* SD card to be enabled in baseboard DT */
315&sd_emmc_b {
316	pinctrl-0 = <&sdcard_c_pins>;
317	pinctrl-1 = <&sdcard_clk_gate_c_pins>;
318	pinctrl-names = "default", "clk-gate";
319
320	bus-width = <4>;
321	cap-sd-highspeed;
322	max-frequency = <50000000>;
323	disable-wp;
324
325	cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>;
326	vmmc-supply = <&vddao_3v3>;
327	vqmmc-supply = <&vddio_c>;
328};
329
330/* on-module eMMC */
331&sd_emmc_c {
332	pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_8b_pins>, <&emmc_ds_pins>;
333	pinctrl-1 = <&emmc_clk_gate_pins>;
334	pinctrl-names = "default", "clk-gate";
335
336	bus-width = <8>;
337	cap-mmc-highspeed;
338	mmc-ddr-1_8v;
339	mmc-hs200-1_8v;
340	max-frequency = <200000000>;
341	disable-wp;
342
343	mmc-pwrseq = <&emmc_pwrseq>;
344	vmmc-supply = <&vddao_3v3>;
345	vqmmc-supply = <&vddao_1v8>;
346
347	status = "okay";
348};
349
350&tdmif_b {
351	status = "okay";
352};
353
354&tdmout_b {
355	status = "okay";
356};
357
358/* on-module UART BT */
359&uart_A {
360	pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>;
361	pinctrl-names = "default";
362	uart-has-rtscts;
363
364	status = "okay";
365
366	bluetooth {
367		compatible = "realtek,rtl8822cs-bt";
368		enable-gpios = <&gpio GPIOX_17 GPIO_ACTIVE_HIGH>;
369		host-wake-gpios = <&gpio GPIOX_19 GPIO_ACTIVE_HIGH>;
370		device-wake-gpios = <&gpio GPIOX_18 GPIO_ACTIVE_HIGH>;
371	};
372};
373
374&uart_AO {
375	pinctrl-0 = <&uart_ao_a_pins>;
376	pinctrl-names = "default";
377
378	status = "okay";
379};
380
381&usb {
382	phys = <&usb2_phy0>, <&usb2_phy1>;
383	phy-names = "usb2-phy0", "usb2-phy1";
384};
385