Linux 6.7-rc7
[linux-modified.git] / arch / arm64 / boot / dts / amlogic / meson-g12a-x96-max.dts
1 // 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/gpio.h>
10 #include <dt-bindings/gpio/meson-g12a-gpio.h>
11 #include <dt-bindings/sound/meson-g12a-tohdmitx.h>
12
13 / {
14         compatible = "amediatech,x96-max", "amlogic,g12a";
15         model = "Shenzhen Amediatech Technology Co., Ltd X96 Max";
16
17         aliases {
18                 serial0 = &uart_AO;
19                 ethernet0 = &ethmac;
20         };
21
22         spdif_dit: audio-codec-1 {
23                 #sound-dai-cells = <0>;
24                 compatible = "linux,spdif-dit";
25                 status = "okay";
26                 sound-name-prefix = "DIT";
27         };
28
29         chosen {
30                 stdout-path = "serial0:115200n8";
31         };
32         memory@0 {
33                 device_type = "memory";
34                 reg = <0x0 0x0 0x0 0x40000000>;
35         };
36
37         cvbs-connector {
38                 compatible = "composite-video-connector";
39
40                 port {
41                         cvbs_connector_in: endpoint {
42                                 remote-endpoint = <&cvbs_vdac_out>;
43                         };
44                 };
45         };
46
47         hdmi-connector {
48                 compatible = "hdmi-connector";
49                 type = "a";
50
51                 port {
52                         hdmi_connector_in: endpoint {
53                                 remote-endpoint = <&hdmi_tx_tmds_out>;
54                         };
55                 };
56         };
57
58         emmc_pwrseq: emmc-pwrseq {
59                 compatible = "mmc-pwrseq-emmc";
60                 reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>;
61         };
62
63         sdio_pwrseq: sdio-pwrseq {
64                 compatible = "mmc-pwrseq-simple";
65                 reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>;
66                 clocks = <&wifi32k>;
67                 clock-names = "ext_clock";
68         };
69
70         flash_1v8: regulator-flash_1v8 {
71                 compatible = "regulator-fixed";
72                 regulator-name = "FLASH_1V8";
73                 regulator-min-microvolt = <1800000>;
74                 regulator-max-microvolt = <1800000>;
75                 vin-supply = <&vcc_3v3>;
76                 regulator-always-on;
77         };
78
79         dc_in: regulator-dc_in {
80                 compatible = "regulator-fixed";
81                 regulator-name = "DC_IN";
82                 regulator-min-microvolt = <5000000>;
83                 regulator-max-microvolt = <5000000>;
84                 regulator-always-on;
85         };
86
87         vcc_1v8: regulator-vcc_1v8 {
88                 compatible = "regulator-fixed";
89                 regulator-name = "VCC_1V8";
90                 regulator-min-microvolt = <1800000>;
91                 regulator-max-microvolt = <1800000>;
92                 vin-supply = <&vcc_3v3>;
93                 regulator-always-on;
94         };
95
96         vcc_3v3: regulator-vcc_3v3 {
97                 compatible = "regulator-fixed";
98                 regulator-name = "VCC_3V3";
99                 regulator-min-microvolt = <3300000>;
100                 regulator-max-microvolt = <3300000>;
101                 vin-supply = <&vddao_3v3>;
102                 regulator-always-on;
103                 /* FIXME: actually controlled by VDDCPU_B_EN */
104         };
105
106         vcc_5v: regulator-vcc_5v {
107                 compatible = "regulator-fixed";
108                 regulator-name = "VCC_5V";
109                 regulator-min-microvolt = <5000000>;
110                 regulator-max-microvolt = <5000000>;
111                 vin-supply = <&dc_in>;
112
113                 gpio = <&gpio GPIOH_8 GPIO_OPEN_DRAIN>;
114         };
115
116         vddao_1v8: regulator-vddao_1v8 {
117                 compatible = "regulator-fixed";
118                 regulator-name = "VDDAO_1V8";
119                 regulator-min-microvolt = <1800000>;
120                 regulator-max-microvolt = <1800000>;
121                 vin-supply = <&vddao_3v3>;
122                 regulator-always-on;
123         };
124
125         vddao_3v3: regulator-vddao_3v3 {
126                 compatible = "regulator-fixed";
127                 regulator-name = "VDDAO_3V3";
128                 regulator-min-microvolt = <3300000>;
129                 regulator-max-microvolt = <3300000>;
130                 vin-supply = <&dc_in>;
131                 regulator-always-on;
132         };
133
134         vddcpu: regulator-vddcpu {
135                 compatible = "pwm-regulator";
136
137                 regulator-name = "VDDCPU";
138                 regulator-min-microvolt = <721000>;
139                 regulator-max-microvolt = <1022000>;
140
141                 pwm-supply = <&dc_in>;
142
143                 pwms = <&pwm_AO_cd 1 1250 0>;
144                 pwm-dutycycle-range = <100 0>;
145
146                 regulator-boot-on;
147                 regulator-always-on;
148         };
149
150         sound {
151                 compatible = "amlogic,axg-sound-card";
152                 model = "X96-MAX";
153                 audio-aux-devs = <&tdmout_b>;
154                 audio-routing = "TDMOUT_B IN 0", "FRDDR_A OUT 1",
155                                 "TDMOUT_B IN 1", "FRDDR_B OUT 1",
156                                 "TDMOUT_B IN 2", "FRDDR_C OUT 1",
157                                 "TDM_B Playback", "TDMOUT_B OUT",
158                                 "SPDIFOUT_A IN 0", "FRDDR_A OUT 3",
159                                 "SPDIFOUT_A IN 1", "FRDDR_B OUT 3",
160                                 "SPDIFOUT_A IN 2", "FRDDR_C OUT 3";
161
162                 assigned-clocks = <&clkc CLKID_MPLL2>,
163                                   <&clkc CLKID_MPLL0>,
164                                   <&clkc CLKID_MPLL1>;
165                 assigned-clock-parents = <0>, <0>, <0>;
166                 assigned-clock-rates = <294912000>,
167                                        <270950400>,
168                                        <393216000>;
169
170                 dai-link-0 {
171                         sound-dai = <&frddr_a>;
172                 };
173
174                 dai-link-1 {
175                         sound-dai = <&frddr_b>;
176                 };
177
178                 dai-link-2 {
179                         sound-dai = <&frddr_c>;
180                 };
181
182                 /* 8ch hdmi interface */
183                 dai-link-3 {
184                         sound-dai = <&tdmif_b>;
185                         dai-format = "i2s";
186                         dai-tdm-slot-tx-mask-0 = <1 1>;
187                         dai-tdm-slot-tx-mask-1 = <1 1>;
188                         dai-tdm-slot-tx-mask-2 = <1 1>;
189                         dai-tdm-slot-tx-mask-3 = <1 1>;
190                         mclk-fs = <256>;
191
192                         codec {
193                                 sound-dai = <&tohdmitx TOHDMITX_I2S_IN_B>;
194                         };
195                 };
196
197                 /* spdif hdmi or toslink interface */
198                 dai-link-4 {
199                         sound-dai = <&spdifout_a>;
200
201                         codec-0 {
202                                 sound-dai = <&spdif_dit>;
203                         };
204
205                         codec-1 {
206                                 sound-dai = <&tohdmitx TOHDMITX_SPDIF_IN_A>;
207                         };
208                 };
209
210                 /* spdif hdmi interface */
211                 dai-link-5 {
212                         sound-dai = <&spdifout_b>;
213
214                         codec {
215                                 sound-dai = <&tohdmitx TOHDMITX_SPDIF_IN_B>;
216                         };
217                 };
218
219                 /* hdmi glue */
220                 dai-link-6 {
221                         sound-dai = <&tohdmitx TOHDMITX_I2S_OUT>;
222
223                         codec {
224                                 sound-dai = <&hdmi_tx>;
225                         };
226                 };
227         };
228
229         wifi32k: wifi32k {
230                 compatible = "pwm-clock";
231                 #clock-cells = <0>;
232                 clock-frequency = <32768>;
233                 pwms = <&pwm_ef 0 30518 0>; /* PWM_E at 32.768KHz */
234         };
235 };
236
237 &arb {
238         status = "okay";
239 };
240
241 &cec_AO {
242         pinctrl-0 = <&cec_ao_a_h_pins>;
243         pinctrl-names = "default";
244         status = "disabled";
245         hdmi-phandle = <&hdmi_tx>;
246 };
247
248 &cecb_AO {
249         pinctrl-0 = <&cec_ao_b_h_pins>;
250         pinctrl-names = "default";
251         status = "okay";
252         hdmi-phandle = <&hdmi_tx>;
253 };
254
255 &clkc_audio {
256         status = "okay";
257 };
258
259 &cpu0 {
260         cpu-supply = <&vddcpu>;
261         operating-points-v2 = <&cpu_opp_table>;
262         clocks = <&clkc CLKID_CPU_CLK>;
263         clock-latency = <50000>;
264 };
265
266 &cpu1 {
267         cpu-supply = <&vddcpu>;
268         operating-points-v2 = <&cpu_opp_table>;
269         clocks = <&clkc CLKID_CPU_CLK>;
270         clock-latency = <50000>;
271 };
272
273 &cpu2 {
274         cpu-supply = <&vddcpu>;
275         operating-points-v2 = <&cpu_opp_table>;
276         clocks = <&clkc CLKID_CPU_CLK>;
277         clock-latency = <50000>;
278 };
279
280 &cpu3 {
281         cpu-supply = <&vddcpu>;
282         operating-points-v2 = <&cpu_opp_table>;
283         clocks = <&clkc CLKID_CPU_CLK>;
284         clock-latency = <50000>;
285 };
286
287 &cvbs_vdac_port {
288         cvbs_vdac_out: endpoint {
289                 remote-endpoint = <&cvbs_connector_in>;
290         };
291 };
292
293 &frddr_a {
294         status = "okay";
295 };
296
297 &frddr_b {
298         status = "okay";
299 };
300
301 &frddr_c {
302         status = "okay";
303 };
304
305 &hdmi_tx {
306         status = "okay";
307         pinctrl-0 = <&hdmitx_hpd_pins>, <&hdmitx_ddc_pins>;
308         pinctrl-names = "default";
309         hdmi-supply = <&vcc_5v>;
310 };
311
312 &hdmi_tx_tmds_port {
313         hdmi_tx_tmds_out: endpoint {
314                 remote-endpoint = <&hdmi_connector_in>;
315         };
316 };
317
318 &ir {
319         status = "okay";
320         pinctrl-0 = <&remote_input_ao_pins>;
321         pinctrl-names = "default";
322         linux,rc-map-name = "rc-x96max";
323 };
324
325 &pwm_AO_cd {
326         pinctrl-0 = <&pwm_ao_d_e_pins>;
327         pinctrl-names = "default";
328         clocks = <&xtal>;
329         clock-names = "clkin1";
330         status = "okay";
331 };
332
333 &ext_mdio {
334         external_phy: ethernet-phy@0 {
335                 /* Realtek RTL8211F (0x001cc916) */
336                 reg = <0>;
337                 max-speed = <1000>;
338                 eee-broken-1000t;
339
340                 reset-assert-us = <10000>;
341                 reset-deassert-us = <80000>;
342                 reset-gpios = <&gpio GPIOZ_15 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>;
343
344                 interrupt-parent = <&gpio_intc>;
345                 /* MAC_INTR on GPIOZ_14 */
346                 interrupts = <IRQID_GPIOZ_14 IRQ_TYPE_LEVEL_LOW>;
347         };
348 };
349
350 &ethmac {
351         pinctrl-0 = <&eth_pins>, <&eth_rgmii_pins>;
352         pinctrl-names = "default";
353         status = "okay";
354         phy-mode = "rgmii";
355         phy-handle = <&external_phy>;
356         amlogic,tx-delay-ns = <2>;
357 };
358
359 &pwm_ef {
360         status = "okay";
361         pinctrl-0 = <&pwm_e_pins>;
362         pinctrl-names = "default";
363         clocks = <&xtal>;
364         clock-names = "clkin0";
365 };
366
367 &uart_A {
368         status = "okay";
369         pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>;
370         pinctrl-names = "default";
371         uart-has-rtscts;
372
373         bluetooth {
374                 compatible = "brcm,bcm43438-bt";
375                 shutdown-gpios = <&gpio GPIOX_17 GPIO_ACTIVE_HIGH>;
376                 max-speed = <2000000>;
377                 clocks = <&wifi32k>;
378                 clock-names = "lpo";
379         };
380 };
381
382 &uart_AO {
383         status = "okay";
384         pinctrl-0 = <&uart_ao_a_pins>;
385         pinctrl-names = "default";
386 };
387
388 &usb {
389         status = "okay";
390         dr_mode = "host";
391 };
392
393 /* SDIO */
394 &sd_emmc_a {
395         status = "okay";
396         pinctrl-0 = <&sdio_pins>;
397         pinctrl-1 = <&sdio_clk_gate_pins>;
398         pinctrl-names = "default", "clk-gate";
399         #address-cells = <1>;
400         #size-cells = <0>;
401
402         bus-width = <4>;
403         cap-sd-highspeed;
404         sd-uhs-sdr50;
405         max-frequency = <100000000>;
406
407         non-removable;
408         disable-wp;
409
410         /* WiFi firmware requires power to be kept while in suspend */
411         keep-power-in-suspend;
412
413         mmc-pwrseq = <&sdio_pwrseq>;
414
415         vmmc-supply = <&vddao_3v3>;
416         vqmmc-supply = <&vddao_1v8>;
417
418         brcmf: wifi@1 {
419                 reg = <1>;
420                 compatible = "brcm,bcm4329-fmac";
421         };
422 };
423
424 /* SD card */
425 &sd_emmc_b {
426         status = "okay";
427         pinctrl-0 = <&sdcard_c_pins>;
428         pinctrl-1 = <&sdcard_clk_gate_c_pins>;
429         pinctrl-names = "default", "clk-gate";
430
431         bus-width = <4>;
432         cap-sd-highspeed;
433         max-frequency = <100000000>;
434         disable-wp;
435
436         cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>;
437         vmmc-supply = <&vddao_3v3>;
438         vqmmc-supply = <&vddao_3v3>;
439 };
440
441 /* eMMC */
442 &sd_emmc_c {
443         status = "okay";
444         pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_8b_pins>, <&emmc_ds_pins>;
445         pinctrl-1 = <&emmc_clk_gate_pins>;
446         pinctrl-names = "default", "clk-gate";
447
448         bus-width = <8>;
449         cap-mmc-highspeed;
450         max-frequency = <100000000>;
451         non-removable;
452         disable-wp;
453
454         mmc-pwrseq = <&emmc_pwrseq>;
455         vmmc-supply = <&vcc_3v3>;
456         vqmmc-supply = <&flash_1v8>;
457 };
458
459 &spdifout_a {
460         pinctrl-0 = <&spdif_out_h_pins>;
461         pinctrl-names = "default";
462         status = "okay";
463 };
464
465 &spdifout_b {
466         status = "okay";
467 };
468
469 &tdmif_b {
470         status = "okay";
471 };
472
473 &tdmout_b {
474         status = "okay";
475 };
476
477 &tohdmitx {
478         status = "okay";
479 };