blob: 7b46555ac55a1afc35aee0b5e6971312b320ba06 [file] [log] [blame]
Andreas Färber1a87cc72019-10-09 16:03:54 +02001// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2/*
3 * Copyright (c) 2019 BayLibre, SAS
4 * Author: Neil Armstrong <narmstrong@baylibre.com>
5 * Copyright (c) 2019 Christian Hewitt <christianshewitt@gmail.com>
6 */
7
8#include <dt-bindings/input/input.h>
9#include <dt-bindings/gpio/meson-g12a-gpio.h>
Neil Armstrongee731352020-10-02 09:47:37 +020010#include <dt-bindings/sound/meson-g12a-tohdmitx.h>
Andreas Färber1a87cc72019-10-09 16:03:54 +020011
12/ {
Andreas Färber1a87cc72019-10-09 16:03:54 +020013 aliases {
14 serial0 = &uart_AO;
15 ethernet0 = &ethmac;
16 };
17
18 chosen {
19 stdout-path = "serial0:115200n8";
20 };
21
22 memory@0 {
23 device_type = "memory";
24 reg = <0x0 0x0 0x0 0x80000000>;
25 };
26
27 adc-keys {
28 compatible = "adc-keys";
29 io-channels = <&saradc 2>;
30 io-channel-names = "buttons";
31 keyup-threshold-microvolt = <1710000>;
32
33 button-function {
34 label = "Function";
35 linux,code = <KEY_FN>;
36 press-threshold-microvolt = <10000>;
37 };
38 };
39
40 leds {
41 compatible = "gpio-leds";
42
Christian Hewittda77a7872020-04-24 02:58:30 +000043 led-white {
Andreas Färber1a87cc72019-10-09 16:03:54 +020044 label = "vim3:white:sys";
Neil Armstrongee731352020-10-02 09:47:37 +020045 gpios = <&gpio_ao GPIOAO_4 GPIO_ACTIVE_HIGH>;
Andreas Färber1a87cc72019-10-09 16:03:54 +020046 linux,default-trigger = "heartbeat";
47 };
48
Christian Hewittda77a7872020-04-24 02:58:30 +000049 led-red {
Andreas Färber1a87cc72019-10-09 16:03:54 +020050 label = "vim3:red";
Neil Armstrongee731352020-10-02 09:47:37 +020051 gpios = <&gpio_expander 5 GPIO_ACTIVE_HIGH>;
Andreas Färber1a87cc72019-10-09 16:03:54 +020052 };
53 };
54
55 emmc_pwrseq: emmc-pwrseq {
56 compatible = "mmc-pwrseq-emmc";
57 reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>;
58 };
59
60 gpio-keys-polled {
61 compatible = "gpio-keys-polled";
62 poll-interval = <100>;
63
64 power-button {
65 label = "power";
66 linux,code = <KEY_POWER>;
67 gpios = <&gpio_ao GPIOAO_7 GPIO_ACTIVE_LOW>;
68 };
69 };
70
71 sdio_pwrseq: sdio-pwrseq {
72 compatible = "mmc-pwrseq-simple";
73 reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>;
74 clocks = <&wifi32k>;
75 clock-names = "ext_clock";
76 };
77
78 dc_in: regulator-dc_in {
79 compatible = "regulator-fixed";
80 regulator-name = "DC_IN";
81 regulator-min-microvolt = <5000000>;
82 regulator-max-microvolt = <5000000>;
83 regulator-always-on;
84 };
85
86 vcc_5v: regulator-vcc_5v {
87 compatible = "regulator-fixed";
88 regulator-name = "VCC_5V";
89 regulator-min-microvolt = <5000000>;
90 regulator-max-microvolt = <5000000>;
91 vin-supply = <&dc_in>;
92
93 gpio = <&gpio GPIOH_8 GPIO_OPEN_DRAIN>;
94 enable-active-high;
95 };
96
97 vcc_1v8: regulator-vcc_1v8 {
98 compatible = "regulator-fixed";
99 regulator-name = "VCC_1V8";
100 regulator-min-microvolt = <1800000>;
101 regulator-max-microvolt = <1800000>;
102 vin-supply = <&vcc_3v3>;
103 regulator-always-on;
104 };
105
106 vcc_3v3: regulator-vcc_3v3 {
107 compatible = "regulator-fixed";
108 regulator-name = "VCC_3V3";
109 regulator-min-microvolt = <3300000>;
110 regulator-max-microvolt = <3300000>;
111 vin-supply = <&vsys_3v3>;
112 regulator-always-on;
113 /* FIXME: actually controlled by VDDCPU_B_EN */
114 };
115
116 vddao_1v8: regulator-vddao_1v8 {
117 compatible = "regulator-fixed";
118 regulator-name = "VDDIO_AO1V8";
119 regulator-min-microvolt = <1800000>;
120 regulator-max-microvolt = <1800000>;
121 vin-supply = <&vsys_3v3>;
122 regulator-always-on;
123 };
124
125 emmc_1v8: regulator-emmc_1v8 {
126 compatible = "regulator-fixed";
127 regulator-name = "EMMC_AO1V8";
128 regulator-min-microvolt = <1800000>;
129 regulator-max-microvolt = <1800000>;
130 vin-supply = <&vcc_3v3>;
131 regulator-always-on;
132 };
133
134 vsys_3v3: regulator-vsys_3v3 {
135 compatible = "regulator-fixed";
136 regulator-name = "VSYS_3V3";
137 regulator-min-microvolt = <3300000>;
138 regulator-max-microvolt = <3300000>;
139 vin-supply = <&dc_in>;
140 regulator-always-on;
141 };
142
143 usb_pwr: regulator-usb_pwr {
144 compatible = "regulator-fixed";
145 regulator-name = "USB_PWR";
146 regulator-min-microvolt = <5000000>;
147 regulator-max-microvolt = <5000000>;
148 vin-supply = <&vcc_5v>;
149
150 gpio = <&gpio GPIOA_6 GPIO_ACTIVE_HIGH>;
151 enable-active-high;
152 };
153
154 hdmi-connector {
155 compatible = "hdmi-connector";
156 type = "a";
157
158 port {
159 hdmi_connector_in: endpoint {
160 remote-endpoint = <&hdmi_tx_tmds_out>;
161 };
162 };
163 };
164
Neil Armstrongee731352020-10-02 09:47:37 +0200165
166 sound {
167 compatible = "amlogic,axg-sound-card";
168 model = "G12B-KHADAS-VIM3";
169 audio-aux-devs = <&tdmout_a>;
170 audio-routing = "TDMOUT_A IN 0", "FRDDR_A OUT 0",
171 "TDMOUT_A IN 1", "FRDDR_B OUT 0",
172 "TDMOUT_A IN 2", "FRDDR_C OUT 0",
173 "TDM_A Playback", "TDMOUT_A OUT";
174
175 assigned-clocks = <&clkc CLKID_MPLL2>,
176 <&clkc CLKID_MPLL0>,
177 <&clkc CLKID_MPLL1>;
178 assigned-clock-parents = <0>, <0>, <0>;
179 assigned-clock-rates = <294912000>,
180 <270950400>,
181 <393216000>;
182 status = "okay";
183
184 dai-link-0 {
185 sound-dai = <&frddr_a>;
186 };
187
188 dai-link-1 {
189 sound-dai = <&frddr_b>;
190 };
191
192 dai-link-2 {
193 sound-dai = <&frddr_c>;
194 };
195
196 /* 8ch hdmi interface */
197 dai-link-3 {
198 sound-dai = <&tdmif_a>;
199 dai-format = "i2s";
200 dai-tdm-slot-tx-mask-0 = <1 1>;
201 dai-tdm-slot-tx-mask-1 = <1 1>;
202 dai-tdm-slot-tx-mask-2 = <1 1>;
203 dai-tdm-slot-tx-mask-3 = <1 1>;
204 mclk-fs = <256>;
205
206 codec {
207 sound-dai = <&tohdmitx TOHDMITX_I2S_IN_A>;
208 };
209 };
210
211 /* hdmi glue */
212 dai-link-4 {
213 sound-dai = <&tohdmitx TOHDMITX_I2S_OUT>;
214
215 codec {
216 sound-dai = <&hdmi_tx>;
217 };
218 };
219 };
220
Andreas Färber1a87cc72019-10-09 16:03:54 +0200221 wifi32k: wifi32k {
222 compatible = "pwm-clock";
223 #clock-cells = <0>;
224 clock-frequency = <32768>;
225 pwms = <&pwm_ef 0 30518 0>; /* PWM_E at 32.768KHz */
226 };
227};
228
Neil Armstrongee731352020-10-02 09:47:37 +0200229&arb {
230 status = "okay";
231};
232
233&clkc_audio {
234 status = "okay";
235};
236
Andreas Färber1a87cc72019-10-09 16:03:54 +0200237&cec_AO {
238 pinctrl-0 = <&cec_ao_a_h_pins>;
239 pinctrl-names = "default";
240 status = "disabled";
241 hdmi-phandle = <&hdmi_tx>;
242};
243
244&cecb_AO {
245 pinctrl-0 = <&cec_ao_b_h_pins>;
246 pinctrl-names = "default";
247 status = "okay";
248 hdmi-phandle = <&hdmi_tx>;
249};
250
Neil Armstrong1110e492020-09-21 09:34:12 +0200251&cpu_thermal {
252 trips {
253 cpu_active: cpu-active {
254 temperature = <80000>; /* millicelsius */
255 hysteresis = <2000>; /* millicelsius */
256 type = "active";
257 };
258 };
259
260 cooling-maps {
261 map {
262 trip = <&cpu_active>;
263 cooling-device = <&khadas_mcu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
264 };
265 };
266};
267
Andreas Färber1a87cc72019-10-09 16:03:54 +0200268&ext_mdio {
269 external_phy: ethernet-phy@0 {
270 /* Realtek RTL8211F (0x001cc916) */
271 reg = <0>;
272 max-speed = <1000>;
273
274 interrupt-parent = <&gpio_intc>;
275 /* MAC_INTR on GPIOZ_14 */
276 interrupts = <26 IRQ_TYPE_LEVEL_LOW>;
277 };
278};
279
280&ethmac {
281 pinctrl-0 = <&eth_pins>, <&eth_rgmii_pins>;
282 pinctrl-names = "default";
283 status = "okay";
284 phy-mode = "rgmii";
285 phy-handle = <&external_phy>;
286 amlogic,tx-delay-ns = <2>;
287};
288
Neil Armstrongee731352020-10-02 09:47:37 +0200289&frddr_a {
290 status = "okay";
291};
292
293&frddr_b {
294 status = "okay";
295};
296
297&frddr_c {
298 status = "okay";
299};
300
Andreas Färber1a87cc72019-10-09 16:03:54 +0200301&hdmi_tx {
302 status = "okay";
303 pinctrl-0 = <&hdmitx_hpd_pins>, <&hdmitx_ddc_pins>;
304 pinctrl-names = "default";
305 hdmi-supply = <&vcc_5v>;
306};
307
308&hdmi_tx_tmds_port {
309 hdmi_tx_tmds_out: endpoint {
310 remote-endpoint = <&hdmi_connector_in>;
311 };
312};
313
314&i2c_AO {
315 status = "okay";
316 pinctrl-0 = <&i2c_ao_sck_pins>, <&i2c_ao_sda_pins>;
317 pinctrl-names = "default";
318
Neil Armstrong1110e492020-09-21 09:34:12 +0200319 khadas_mcu: system-controller@18 {
320 compatible = "khadas,mcu";
321 reg = <0x18>;
322 #cooling-cells = <2>;
323 };
324
Andreas Färber1a87cc72019-10-09 16:03:54 +0200325 gpio_expander: gpio-controller@20 {
326 compatible = "ti,tca6408";
327 reg = <0x20>;
328 vcc-supply = <&vcc_3v3>;
329 gpio-controller;
330 #gpio-cells = <2>;
331 };
332
333 rtc@51 {
334 compatible = "haoyu,hym8563";
335 reg = <0x51>;
336 #clock-cells = <0>;
337 };
338};
339
340&ir {
341 status = "okay";
342 pinctrl-0 = <&remote_input_ao_pins>;
343 pinctrl-names = "default";
344 linux,rc-map-name = "rc-khadas";
345};
346
Jerome Brunetdd5f2352020-03-05 12:12:38 +0100347&pcie {
348 reset-gpios = <&gpio GPIOA_8 GPIO_ACTIVE_LOW>;
349};
350
Andreas Färber1a87cc72019-10-09 16:03:54 +0200351&pwm_ef {
352 status = "okay";
353 pinctrl-0 = <&pwm_e_pins>;
354 pinctrl-names = "default";
355};
356
357&saradc {
358 status = "okay";
359 vref-supply = <&vddao_1v8>;
360};
361
362/* SDIO */
363&sd_emmc_a {
364 status = "okay";
365 pinctrl-0 = <&sdio_pins>;
366 pinctrl-1 = <&sdio_clk_gate_pins>;
367 pinctrl-names = "default", "clk-gate";
368 #address-cells = <1>;
369 #size-cells = <0>;
370
371 bus-width = <4>;
372 cap-sd-highspeed;
Andreas Färber1a87cc72019-10-09 16:03:54 +0200373 max-frequency = <100000000>;
374
375 non-removable;
376 disable-wp;
377
Jerome Brunetdd5f2352020-03-05 12:12:38 +0100378 /* WiFi firmware requires power to be kept while in suspend */
379 keep-power-in-suspend;
380
Andreas Färber1a87cc72019-10-09 16:03:54 +0200381 mmc-pwrseq = <&sdio_pwrseq>;
382
383 vmmc-supply = <&vsys_3v3>;
384 vqmmc-supply = <&vddao_1v8>;
385
386 brcmf: wifi@1 {
387 reg = <1>;
388 compatible = "brcm,bcm4329-fmac";
389 };
390};
391
392/* SD card */
393&sd_emmc_b {
394 status = "okay";
395 pinctrl-0 = <&sdcard_c_pins>;
396 pinctrl-1 = <&sdcard_clk_gate_c_pins>;
397 pinctrl-names = "default", "clk-gate";
398
399 bus-width = <4>;
400 cap-sd-highspeed;
401 max-frequency = <50000000>;
402 disable-wp;
403
404 cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>;
405 vmmc-supply = <&vsys_3v3>;
406 vqmmc-supply = <&vsys_3v3>;
407};
408
409/* eMMC */
410&sd_emmc_c {
411 status = "okay";
Neil Armstrong3a7d6a92020-04-20 15:44:41 +0200412 pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_8b_pins>, <&emmc_ds_pins>;
Andreas Färber1a87cc72019-10-09 16:03:54 +0200413 pinctrl-1 = <&emmc_clk_gate_pins>;
414 pinctrl-names = "default", "clk-gate";
415
416 bus-width = <8>;
417 cap-mmc-highspeed;
418 mmc-ddr-1_8v;
419 mmc-hs200-1_8v;
420 max-frequency = <200000000>;
421 disable-wp;
422
423 mmc-pwrseq = <&emmc_pwrseq>;
424 vmmc-supply = <&vcc_3v3>;
425 vqmmc-supply = <&emmc_1v8>;
426};
427
Neil Armstrong3a7d6a92020-04-20 15:44:41 +0200428/*
429 * EMMC_D4, EMMC_D5, EMMC_D6 and EMMC_D7 pins are shared between SPI NOR CS
430 * and eMMC Data 4 to 7 pins.
431 * Replace emmc_data_8b_pins to emmc_data_4b_pins from sd_emmc_c pinctrl-0,
432 * and change bus-width to 4 then spifc can be enabled.
433 */
434&spifc {
435 status = "disabled";
436 pinctrl-0 = <&nor_pins>;
437 pinctrl-names = "default";
438
Neil Armstrong1110e492020-09-21 09:34:12 +0200439 w25q128: spi-flash@0 {
Neil Armstrong3a7d6a92020-04-20 15:44:41 +0200440 #address-cells = <1>;
441 #size-cells = <1>;
442 compatible = "winbond,w25q128fw", "jedec,spi-nor";
443 reg = <0>;
444 spi-max-frequency = <104000000>;
445 };
446};
447
Neil Armstrongee731352020-10-02 09:47:37 +0200448
449&tdmif_a {
450 status = "okay";
451};
452
453&tdmout_a {
454 status = "okay";
455};
456
457&tohdmitx {
458 status = "okay";
459};
460
Andreas Färber1a87cc72019-10-09 16:03:54 +0200461&uart_A {
462 status = "okay";
463 pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>;
464 pinctrl-names = "default";
465 uart-has-rtscts;
466
467 bluetooth {
468 compatible = "brcm,bcm43438-bt";
469 shutdown-gpios = <&gpio GPIOX_17 GPIO_ACTIVE_HIGH>;
470 max-speed = <2000000>;
471 clocks = <&wifi32k>;
472 clock-names = "lpo";
473 };
474};
475
476&uart_AO {
477 status = "okay";
478 pinctrl-0 = <&uart_ao_a_pins>;
479 pinctrl-names = "default";
480};
481
482&usb2_phy0 {
483 phy-supply = <&dc_in>;
484};
485
486&usb2_phy1 {
487 phy-supply = <&usb_pwr>;
488};
489
490&usb3_pcie_phy {
491 phy-supply = <&usb_pwr>;
492};
493
494&usb {
495 status = "okay";
496 dr_mode = "peripheral";
497};