blob: c779a5da7d1ea06f4b7dfb626928f4cb1b90f7e8 [file] [log] [blame]
Tom Rini53633a82024-02-29 12:33:36 -05001// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2/*
3 * Copyright (c) 2018 BayLibre SAS. All rights reserved.
4 */
5
6/dts-v1/;
7
8#include "meson-g12a.dtsi"
9#include <dt-bindings/gpio/meson-g12a-gpio.h>
10#include <dt-bindings/sound/meson-g12a-tohdmitx.h>
11
12/ {
13 compatible = "radxa,zero", "amlogic,g12a";
14 model = "Radxa Zero";
15
16 aliases {
17 serial0 = &uart_AO;
18 };
19
20 chosen {
21 stdout-path = "serial0:115200n8";
22 };
23
24 memory@0 {
25 device_type = "memory";
26 reg = <0x0 0x0 0x0 0x40000000>;
27 };
28
29 cvbs-connector {
30 status = "disabled";
31 compatible = "composite-video-connector";
32
33 port {
34 cvbs_connector_in: endpoint {
35 remote-endpoint = <&cvbs_vdac_out>;
36 };
37 };
38 };
39
40 hdmi-connector {
41 compatible = "hdmi-connector";
42 type = "a";
43
44 port {
45 hdmi_connector_in: endpoint {
46 remote-endpoint = <&hdmi_tx_tmds_out>;
47 };
48 };
49 };
50
51 emmc_pwrseq: emmc-pwrseq {
52 compatible = "mmc-pwrseq-emmc";
53 reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>;
54 };
55
56 sdio_pwrseq: sdio-pwrseq {
57 compatible = "mmc-pwrseq-simple";
58 reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>;
59 clocks = <&wifi32k>;
60 clock-names = "ext_clock";
61 };
62
Tom Rini6bb92fc2024-05-20 09:54:58 -060063 ao_5v: regulator-ao-5v {
Tom Rini53633a82024-02-29 12:33:36 -050064 compatible = "regulator-fixed";
65 regulator-name = "AO_5V";
66 regulator-min-microvolt = <5000000>;
67 regulator-max-microvolt = <5000000>;
68 regulator-always-on;
69 };
70
Tom Rini6bb92fc2024-05-20 09:54:58 -060071 vcc_1v8: regulator-vcc-1v8 {
Tom Rini53633a82024-02-29 12:33:36 -050072 compatible = "regulator-fixed";
73 regulator-name = "VCC_1V8";
74 regulator-min-microvolt = <1800000>;
75 regulator-max-microvolt = <1800000>;
76 vin-supply = <&vcc_3v3>;
77 regulator-always-on;
78 };
79
Tom Rini6bb92fc2024-05-20 09:54:58 -060080 vcc_3v3: regulator-vcc-3v3 {
Tom Rini53633a82024-02-29 12:33:36 -050081 compatible = "regulator-fixed";
82 regulator-name = "VCC_3V3";
83 regulator-min-microvolt = <3300000>;
84 regulator-max-microvolt = <3300000>;
85 vin-supply = <&vddao_3v3>;
86 regulator-always-on;
87 };
88
Tom Rini6bb92fc2024-05-20 09:54:58 -060089 hdmi_pw: regulator-hdmi-pw {
Tom Rini53633a82024-02-29 12:33:36 -050090 compatible = "regulator-fixed";
91 regulator-name = "HDMI_PW";
92 regulator-min-microvolt = <5000000>;
93 regulator-max-microvolt = <5000000>;
94 vin-supply = <&ao_5v>;
95 regulator-always-on;
96 };
97
Tom Rini6bb92fc2024-05-20 09:54:58 -060098 vddao_1v8: regulator-vddao-1v8 {
Tom Rini53633a82024-02-29 12:33:36 -050099 compatible = "regulator-fixed";
100 regulator-name = "VDDAO_1V8";
101 regulator-min-microvolt = <1800000>;
102 regulator-max-microvolt = <1800000>;
103 vin-supply = <&vddao_3v3>;
104 regulator-always-on;
105 };
106
Tom Rini6bb92fc2024-05-20 09:54:58 -0600107 vddao_3v3: regulator-vddao-3v3 {
Tom Rini53633a82024-02-29 12:33:36 -0500108 compatible = "regulator-fixed";
109 regulator-name = "VDDAO_3V3";
110 regulator-min-microvolt = <3300000>;
111 regulator-max-microvolt = <3300000>;
112 vin-supply = <&ao_5v>;
113 regulator-always-on;
114 };
115
116 vddcpu: regulator-vddcpu {
117 compatible = "pwm-regulator";
118
119 regulator-name = "VDDCPU";
120 regulator-min-microvolt = <721000>;
121 regulator-max-microvolt = <1022000>;
122
123 vin-supply = <&ao_5v>;
124
125 pwms = <&pwm_AO_cd 1 1250 0>;
126 pwm-dutycycle-range = <100 0>;
127
128 regulator-boot-on;
129 regulator-always-on;
130 };
131
132 sound {
133 compatible = "amlogic,axg-sound-card";
134 model = "RADXA-ZERO";
135 audio-aux-devs = <&tdmout_b>;
136 audio-routing = "TDMOUT_B IN 0", "FRDDR_A OUT 1",
137 "TDMOUT_B IN 1", "FRDDR_B OUT 1",
138 "TDMOUT_B IN 2", "FRDDR_C OUT 1",
139 "TDM_B Playback", "TDMOUT_B OUT";
140
Tom Rini9c8af152024-12-24 12:03:04 -0600141 clocks = <&clkc CLKID_MPLL2>,
142 <&clkc CLKID_MPLL0>,
143 <&clkc CLKID_MPLL1>;
144
Tom Rini53633a82024-02-29 12:33:36 -0500145 assigned-clocks = <&clkc CLKID_MPLL2>,
146 <&clkc CLKID_MPLL0>,
147 <&clkc CLKID_MPLL1>;
148 assigned-clock-parents = <0>, <0>, <0>;
149 assigned-clock-rates = <294912000>,
150 <270950400>,
151 <393216000>;
152
153 dai-link-0 {
154 sound-dai = <&frddr_a>;
155 };
156
157 dai-link-1 {
158 sound-dai = <&frddr_b>;
159 };
160
161 dai-link-2 {
162 sound-dai = <&frddr_c>;
163 };
164
165 /* 8ch hdmi interface */
166 dai-link-3 {
167 sound-dai = <&tdmif_b>;
168 dai-format = "i2s";
169 dai-tdm-slot-tx-mask-0 = <1 1>;
170 dai-tdm-slot-tx-mask-1 = <1 1>;
171 dai-tdm-slot-tx-mask-2 = <1 1>;
172 dai-tdm-slot-tx-mask-3 = <1 1>;
173 mclk-fs = <256>;
174
175 codec {
176 sound-dai = <&tohdmitx TOHDMITX_I2S_IN_B>;
177 };
178 };
179
180 dai-link-4 {
181 sound-dai = <&tohdmitx TOHDMITX_I2S_OUT>;
182
183 codec {
184 sound-dai = <&hdmi_tx>;
185 };
186 };
187 };
188
189 wifi32k: wifi32k {
190 compatible = "pwm-clock";
191 #clock-cells = <0>;
192 clock-frequency = <32768>;
193 pwms = <&pwm_ef 0 30518 0>; /* PWM_E at 32.768KHz */
194 };
195};
196
197&arb {
198 status = "okay";
199};
200
201&cec_AO {
202 pinctrl-0 = <&cec_ao_a_h_pins>;
203 pinctrl-names = "default";
204 status = "disabled";
205 hdmi-phandle = <&hdmi_tx>;
206};
207
208&cecb_AO {
209 pinctrl-0 = <&cec_ao_b_h_pins>;
210 pinctrl-names = "default";
211 status = "okay";
212 hdmi-phandle = <&hdmi_tx>;
213};
214
215&clkc_audio {
216 status = "okay";
217};
218
219&cpu0 {
220 cpu-supply = <&vddcpu>;
221 operating-points-v2 = <&cpu_opp_table>;
222 clocks = <&clkc CLKID_CPU_CLK>;
223 clock-latency = <50000>;
224};
225
226&cpu1 {
227 cpu-supply = <&vddcpu>;
228 operating-points-v2 = <&cpu_opp_table>;
229 clocks = <&clkc CLKID_CPU_CLK>;
230 clock-latency = <50000>;
231};
232
233&cpu2 {
234 cpu-supply = <&vddcpu>;
235 operating-points-v2 = <&cpu_opp_table>;
236 clocks = <&clkc CLKID_CPU_CLK>;
237 clock-latency = <50000>;
238};
239
240&cpu3 {
241 cpu-supply = <&vddcpu>;
242 operating-points-v2 = <&cpu_opp_table>;
243 clocks = <&clkc CLKID_CPU_CLK>;
244 clock-latency = <50000>;
245};
246
247&cvbs_vdac_port {
248 cvbs_vdac_out: endpoint {
249 remote-endpoint = <&cvbs_connector_in>;
250 };
251};
252
253&frddr_a {
254 status = "okay";
255};
256
257&frddr_b {
258 status = "okay";
259};
260
261&frddr_c {
262 status = "okay";
263};
264
265&hdmi_tx {
266 status = "okay";
267 pinctrl-0 = <&hdmitx_hpd_pins>, <&hdmitx_ddc_pins>;
268 pinctrl-names = "default";
269 hdmi-supply = <&hdmi_pw>;
270};
271
272&hdmi_tx_tmds_port {
273 hdmi_tx_tmds_out: endpoint {
274 remote-endpoint = <&hdmi_connector_in>;
275 };
276};
277
278&ir {
279 status = "disabled";
280 pinctrl-0 = <&remote_input_ao_pins>;
281 pinctrl-names = "default";
282};
283
284&pwm_AO_cd {
285 pinctrl-0 = <&pwm_ao_d_e_pins>;
286 pinctrl-names = "default";
287 clocks = <&xtal>;
288 clock-names = "clkin1";
289 status = "okay";
290};
291
292&pwm_ef {
293 status = "okay";
294 pinctrl-0 = <&pwm_e_pins>;
295 pinctrl-names = "default";
296 clocks = <&xtal>;
297 clock-names = "clkin0";
298};
299
300&saradc {
301 status = "okay";
302 vref-supply = <&vddao_1v8>;
303};
304
305/* SDIO */
306&sd_emmc_a {
307 status = "okay";
308 pinctrl-0 = <&sdio_pins>;
309 pinctrl-1 = <&sdio_clk_gate_pins>;
310 pinctrl-names = "default", "clk-gate";
311 #address-cells = <1>;
312 #size-cells = <0>;
313
314 bus-width = <4>;
315 cap-sd-highspeed;
316 sd-uhs-sdr50;
317 max-frequency = <100000000>;
318
319 non-removable;
320 disable-wp;
321
322 /* WiFi firmware requires power to be kept while in suspend */
323 keep-power-in-suspend;
324
325 mmc-pwrseq = <&sdio_pwrseq>;
326
327 vmmc-supply = <&vddao_3v3>;
328 vqmmc-supply = <&vddao_1v8>;
329
330 brcmf: wifi@1 {
331 reg = <1>;
332 compatible = "brcm,bcm4329-fmac";
333 };
334};
335
336/* SD card */
337&sd_emmc_b {
338 status = "okay";
339 pinctrl-0 = <&sdcard_c_pins>;
340 pinctrl-1 = <&sdcard_clk_gate_c_pins>;
341 pinctrl-names = "default", "clk-gate";
342
343 bus-width = <4>;
344 cap-sd-highspeed;
345 max-frequency = <100000000>;
346 disable-wp;
347
348 cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>;
349 vmmc-supply = <&vddao_3v3>;
350 vqmmc-supply = <&vddao_3v3>;
351};
352
353/* eMMC */
354&sd_emmc_c {
355 status = "okay";
356 pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_8b_pins>, <&emmc_ds_pins>;
357 pinctrl-1 = <&emmc_clk_gate_pins>;
358 pinctrl-names = "default", "clk-gate";
359
360 bus-width = <8>;
361 cap-mmc-highspeed;
362 mmc-ddr-1_8v;
363 mmc-hs200-1_8v;
364 max-frequency = <200000000>;
365 disable-wp;
366
367 mmc-pwrseq = <&emmc_pwrseq>;
368 vmmc-supply = <&vcc_3v3>;
369 vqmmc-supply = <&vcc_1v8>;
370};
371
372&tdmif_b {
373 status = "okay";
374};
375
376&tdmout_b {
377 status = "okay";
378};
379
380&tohdmitx {
381 status = "okay";
382};
383
384&uart_A {
385 status = "okay";
386 pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>;
387 pinctrl-names = "default";
388 uart-has-rtscts;
389
390 bluetooth {
391 compatible = "brcm,bcm43438-bt";
392 shutdown-gpios = <&gpio GPIOX_17 GPIO_ACTIVE_HIGH>;
393 max-speed = <2000000>;
394 clocks = <&wifi32k>;
395 clock-names = "lpo";
396 };
397};
398
399&uart_AO {
400 status = "okay";
401 pinctrl-0 = <&uart_ao_a_pins>;
402 pinctrl-names = "default";
403};
404
405&usb {
406 status = "okay";
407};