blob: 1e40709610c52e6b273c525d826f6c4b7915bde7 [file] [log] [blame]
Neil Armstrong2acbc332023-01-19 14:44:17 +01001// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2/*
3 * Copyright (c) 2022 Neil Armstrong <neil.armstrong@linaro.org>
4 */
5
6/dts-v1/;
7
8#include "meson-g12b-s922x.dtsi"
9#include <dt-bindings/input/input.h>
10#include <dt-bindings/leds/common.h>
11#include <dt-bindings/gpio/meson-g12a-gpio.h>
12#include <dt-bindings/sound/meson-g12a-toacodec.h>
13#include <dt-bindings/sound/meson-g12a-tohdmitx.h>
14
15/ {
16 compatible = "hardkernel,odroid-go-ultra", "amlogic,s922x", "amlogic,g12b";
17 model = "Hardkernel ODROID-GO-Ultra";
18
19 aliases {
20 serial0 = &uart_AO;
21 rtc0 = &vrtc;
22 };
23
24 adc-joystick-left {
25 compatible = "adc-joystick";
26 io-channels = <&saradc 2>, <&saradc 3>;
27 poll-interval = <10>;
28 #address-cells = <1>;
29 #size-cells = <0>;
30
31 axis@0 {
32 reg = <0>;
33 linux,code = <ABS_Y>;
34 abs-range = <3150 950>;
35 abs-fuzz = <32>;
36 abs-flat = <64>;
37 };
38 axis@1 {
39 reg = <1>;
40 linux,code = <ABS_X>;
41 abs-range = <700 2900>;
42 abs-fuzz = <32>;
43 abs-flat = <64>;
44 };
45 };
46
47 adc-joystick-right {
48 compatible = "adc-joystick";
49 io-channels = <&saradc 0>, <&saradc 1>;
50 poll-interval = <10>;
51 #address-cells = <1>;
52 #size-cells = <0>;
53
54 axis@0 {
55 reg = <0>;
56 linux,code = <ABS_RY>;
57 abs-range = <3150 950>;
58 abs-fuzz = <32>;
59 abs-flat = <64>;
60 };
61 axis@1 {
62 reg = <1>;
63 linux,code = <ABS_RX>;
64 abs-range = <800 3000>;
65 abs-fuzz = <32>;
66 abs-flat = <64>;
67 };
68 };
69
70 chosen {
71 stdout-path = "serial0:115200n8";
72 };
73
74 codec_clk: codec-clk {
75 compatible = "fixed-clock";
76 clock-frequency = <12288000>;
77 clock-output-names = "codec_clk";
78 #clock-cells = <0>;
79 };
80
81 gpio-keys {
82 compatible = "gpio-keys-polled";
83 poll-interval = <10>;
84 pinctrl-0 = <&keypad_gpio_pins>;
85 pinctrl-names = "default";
86
87 volume-up-button {
88 label = "VOLUME-UP";
89 linux,code = <KEY_VOLUMEUP>;
90 gpios = <&gpio GPIOX_8 GPIO_ACTIVE_LOW>;
91 };
92 volume-down-button {
93 label = "VOLUME-DOWN";
94 linux,code = <KEY_VOLUMEDOWN>;
95 gpios = <&gpio GPIOX_9 GPIO_ACTIVE_LOW>;
96 };
97 dpad-up-button {
98 label = "DPAD-UP";
99 linux,code = <BTN_DPAD_UP>;
100 gpios = <&gpio GPIOX_0 GPIO_ACTIVE_LOW>;
101 };
102 dpad-down-button {
103 label = "DPAD-DOWN";
104 linux,code = <BTN_DPAD_DOWN>;
105 gpios = <&gpio GPIOX_1 GPIO_ACTIVE_LOW>;
106 };
107 dpad-left-button {
108 label = "DPAD-LEFT";
109 linux,code = <BTN_DPAD_LEFT>;
110 gpios = <&gpio GPIOX_2 GPIO_ACTIVE_LOW>;
111 };
112 dpad-right-button {
113 label = "DPAD-RIGHT";
114 linux,code = <BTN_DPAD_RIGHT>;
115 gpios = <&gpio GPIOX_3 GPIO_ACTIVE_LOW>;
116 };
117 a-button {
118 label = "A";
119 linux,code = <BTN_EAST>;
120 gpios = <&gpio GPIOX_4 GPIO_ACTIVE_LOW>;
121 };
122 b-button {
123 label = "B";
124 linux,code = <BTN_SOUTH>;
125 gpios = <&gpio GPIOX_5 GPIO_ACTIVE_LOW>;
126 };
127 y-button {
128 label = "Y";
129 linux,code = <BTN_WEST>;
130 gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>;
131 };
132 x-button {
133 label = "X";
134 linux,code = <BTN_NORTH>;
135 gpios = <&gpio GPIOX_7 GPIO_ACTIVE_LOW>;
136 };
137 f1-button {
138 label = "F1";
139 linux,code = <BTN_TRIGGER_HAPPY1>;
140 gpios = <&gpio GPIOX_17 GPIO_ACTIVE_LOW>;
141 };
142 f2-button {
143 label = "F2";
144 linux,code = <BTN_TRIGGER_HAPPY2>;
145 gpios = <&gpio GPIOX_10 GPIO_ACTIVE_LOW>;
146 };
147 f3-button {
148 label = "F3";
149 linux,code = <BTN_TRIGGER_HAPPY3>;
150 gpios = <&gpio GPIOX_11 GPIO_ACTIVE_LOW>;
151 };
152 f4-button {
153 label = "F4";
154 linux,code = <BTN_TRIGGER_HAPPY4>;
155 gpios = <&gpio GPIOX_12 GPIO_ACTIVE_LOW>;
156 };
157 f5-button {
158 label = "F5";
159 linux,code = <BTN_TRIGGER_HAPPY5>;
160 gpios = <&gpio GPIOX_13 GPIO_ACTIVE_LOW>;
161 };
162 f6-button {
163 label = "F6";
164 linux,code = <BTN_TRIGGER_HAPPY6>;
165 gpios = <&gpio GPIOX_16 GPIO_ACTIVE_LOW>;
166 };
167 top-left-button {
168 label = "TOP Left";
169 linux,code = <BTN_TL>;
170 gpios = <&gpio GPIOX_14 GPIO_ACTIVE_LOW>;
171 };
172 top-left2-button {
173 label = "TOP Left 2";
174 linux,code = <BTN_TL2>;
175 gpios = <&gpio GPIOX_19 GPIO_ACTIVE_LOW>;
176 };
177 top-right-button {
178 label = "TOP Right";
179 linux,code = <BTN_TR>;
180 gpios = <&gpio GPIOX_15 GPIO_ACTIVE_LOW>;
181 };
182 top-right2-button {
183 label = "TOP Right 2";
184 linux,code = <BTN_TR2>;
185 gpios = <&gpio GPIOX_18 GPIO_ACTIVE_LOW>;
186 };
187 };
188
189 memory@0 {
190 device_type = "memory";
191 reg = <0x0 0x0 0x0 0x40000000>;
192 };
193
194 emmc_pwrseq: emmc-pwrseq {
195 compatible = "mmc-pwrseq-emmc";
196 reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>;
197 };
198
199 leds {
200 compatible = "gpio-leds";
201
202 led-blue {
203 color = <LED_COLOR_ID_BLUE>;
204 gpios = <&gpio_ao GPIOAO_11 GPIO_ACTIVE_HIGH>;
205 linux,default-trigger = "heartbeat";
206 };
207 };
208
209 vdd_sys: regulator-vdd-sys {
210 compatible = "regulator-fixed";
211 regulator-name = "VDD_SYS";
212 regulator-min-microvolt = <3800000>;
213 regulator-max-microvolt = <3800000>;
214 regulator-always-on;
215 };
216
217 sound {
218 compatible = "amlogic,axg-sound-card";
219 model = "Odroid GO Ultra";
220 audio-widgets = "Microphone", "Mic Jack",
221 "Headphone", "Headphones",
222 "Speaker", "Internal Speakers";
223 audio-aux-devs = <&tdmout_b>, <&tdmin_b>, <&speaker_amp>;
224 audio-routing = "TDMOUT_B IN 0", "FRDDR_A OUT 1",
225 "TDM_B Playback", "TDMOUT_B OUT",
226 "TDMIN_B IN 1", "TDM_B Capture",
227 "TDMIN_B IN 4", "TDM_B Loopback",
228 "TODDR_A IN 1", "TDMIN_B OUT",
229 "MICL", "Mic Jack",
230 "Headphones", "HPOL",
231 "Headphones", "HPOR",
232 "Speaker Amplifier INL", "HPOL",
233 "Speaker Amplifier INR", "HPOR",
234 "Internal Speakers", "Speaker Amplifier OUTL",
235 "Internal Speakers", "Speaker Amplifier OUTR";
236
237 assigned-clocks = <&clkc CLKID_MPLL2>,
238 <&clkc CLKID_MPLL0>,
239 <&clkc CLKID_MPLL1>;
240 assigned-clock-parents = <0>, <0>, <0>;
241 assigned-clock-rates = <294912000>,
242 <270950400>,
243 <393216000>;
244
245 dai-link-0 {
246 sound-dai = <&frddr_a>;
247 };
248
249 dai-link-1 {
250 sound-dai = <&toddr_a>;
251 };
252
253 dai-link-2 {
254 sound-dai = <&tdmif_b>;
255 dai-format = "i2s";
256 dai-tdm-slot-tx-mask-0 = <1 1>;
257 mclk-fs = <256>;
258
259 codec-0 {
260 sound-dai = <&rk817>;
261 };
262 };
263 };
264
265 speaker_amp: speaker-amplifier {
266 compatible = "simple-audio-amplifier";
267 sound-name-prefix = "Speaker Amplifier";
268 VCC-supply = <&hp_5v>;
269 };
270};
271
272&arb {
273 status = "okay";
274};
275
276&cpu0 {
277 cpu-supply = <&vddcpu_b>;
278 operating-points-v2 = <&cpu_opp_table_0>;
279 clocks = <&clkc CLKID_CPU_CLK>;
280 clock-latency = <50000>;
281};
282
283&cpu1 {
284 cpu-supply = <&vddcpu_b>;
285 operating-points-v2 = <&cpu_opp_table_0>;
286 clocks = <&clkc CLKID_CPU_CLK>;
287 clock-latency = <50000>;
288};
289
290&cpu100 {
291 cpu-supply = <&vddcpu_a>;
292 operating-points-v2 = <&cpub_opp_table_1>;
293 clocks = <&clkc CLKID_CPUB_CLK>;
294 clock-latency = <50000>;
295};
296
297&cpu101 {
298 cpu-supply = <&vddcpu_a>;
299 operating-points-v2 = <&cpub_opp_table_1>;
300 clocks = <&clkc CLKID_CPUB_CLK>;
301 clock-latency = <50000>;
302};
303
304&cpu102 {
305 cpu-supply = <&vddcpu_a>;
306 operating-points-v2 = <&cpub_opp_table_1>;
307 clocks = <&clkc CLKID_CPUB_CLK>;
308 clock-latency = <50000>;
309};
310
311&cpu103 {
312 cpu-supply = <&vddcpu_a>;
313 operating-points-v2 = <&cpub_opp_table_1>;
314 clocks = <&clkc CLKID_CPUB_CLK>;
315 clock-latency = <50000>;
316};
317
318/* RK817 only supports 12.5mV steps, round up the values */
319&cpu_opp_table_0 {
320 opp-1000000000 {
321 opp-microvolt = <737500>;
322 };
323 opp-1200000000 {
324 opp-microvolt = <737500>;
325 };
326 opp-1398000000 {
327 opp-microvolt = <762500>;
328 };
329 opp-1512000000 {
330 opp-microvolt = <800000>;
331 };
332 opp-1608000000 {
333 opp-microvolt = <837500>;
334 };
335 opp-1704000000 {
336 opp-microvolt = <862500>;
337 };
338 opp-1896000000 {
339 opp-microvolt = <987500>;
340 };
341 opp-1992000000 {
342 opp-microvolt = <1012500>;
343 };
344};
345
346/* RK818 only supports 12.5mV steps, round up the values */
347&cpub_opp_table_1 {
348 opp-1000000000 {
349 opp-microvolt = <775000>;
350 };
351 opp-1200000000 {
352 opp-microvolt = <775000>;
353 };
354 opp-1398000000 {
355 opp-microvolt = <800000>;
356 };
357 opp-1512000000 {
358 opp-microvolt = <825000>;
359 };
360 opp-1608000000 {
361 opp-microvolt = <862500>;
362 };
363 opp-1704000000 {
364 opp-microvolt = <900000>;
365 };
366 opp-1800000000 {
367 opp-microvolt = <987500>;
368 };
369 opp-1908000000 {
370 opp-microvolt = <1025000>;
371 };
372};
373
374&i2c_AO {
375 status = "okay";
376 pinctrl-0 = <&i2c_ao_sck_pins>, <&i2c_ao_sda_pins>;
377 pinctrl-names = "default";
378
379 rk818: pmic@1c {
380 compatible = "rockchip,rk818";
381 reg = <0x1c>;
382 interrupt-parent = <&gpio_intc>;
383 interrupts = <7 IRQ_TYPE_LEVEL_LOW>; /* GPIOAO_7 */
384
385 vcc1-supply = <&vdd_sys>;
386 vcc2-supply = <&vdd_sys>;
387 vcc3-supply = <&vdd_sys>;
388 vcc4-supply = <&vdd_sys>;
389 vcc6-supply = <&vdd_sys>;
390 vcc7-supply = <&vcc_2v3>;
391 vcc8-supply = <&vcc_2v3>;
392 vcc9-supply = <&vddao_3v3>;
393 boost-supply = <&vdd_sys>;
394 switch-supply = <&vdd_sys>;
395
396 regulators {
397 vddcpu_a: DCDC_REG1 {
398 regulator-name = "vddcpu_a";
399 regulator-always-on;
400 regulator-boot-on;
401 regulator-min-microvolt = <775000>;
402 regulator-max-microvolt = <1025000>;
403 regulator-ramp-delay = <6001>;
404 regulator-state-mem {
405 regulator-on-in-suspend;
406 regulator-suspend-microvolt = <775000>;
407 };
408 };
409
410 vdd_ee: DCDC_REG2 {
411 regulator-name = "vdd_ee";
412 regulator-always-on;
413 regulator-boot-on;
414 regulator-min-microvolt = <875000>;
415 regulator-max-microvolt = <1250000>;
416 regulator-ramp-delay = <6001>;
417 regulator-state-mem {
418 regulator-on-in-suspend;
419 regulator-suspend-microvolt = <875000>;
420 };
421 };
422
423 vddq_1v1: DCDC_REG3 {
424 regulator-name = "vddq_1v1";
425 regulator-always-on;
426 regulator-boot-on;
427 regulator-state-mem {
428 regulator-on-in-suspend;
429 };
430 };
431
432 vddao_3v3: DCDC_REG4 {
433 regulator-always-on;
434 regulator-boot-on;
435 regulator-min-microvolt = <3300000>;
436 regulator-max-microvolt = <3300000>;
437 regulator-name = "vddao_3v3";
438 regulator-state-mem {
439 regulator-on-in-suspend;
440 regulator-suspend-microvolt = <3300000>;
441 };
442 };
443
444 hp_5v: DCDC_BOOST {
445 regulator-always-on;
446 regulator-boot-on;
447 regulator-name = "hp_5v";
448 regulator-min-microvolt = <5000000>;
449 regulator-max-microvolt = <5000000>;
450 regulator-state-mem {
451 regulator-off-in-suspend;
452 };
453 };
454
455 vddio_ao1v8: LDO_REG5 {
456 regulator-always-on;
457 regulator-boot-on;
458 regulator-min-microvolt = <1800000>;
459 regulator-max-microvolt = <1800000>;
460 regulator-name = "vddio_ao1v8";
461 regulator-state-mem {
462 regulator-on-in-suspend;
463 regulator-suspend-microvolt = <1800000>;
464 };
465 };
466
467 vddq_1v8: LDO_REG7 {
468 regulator-always-on;
469 regulator-boot-on;
470 regulator-min-microvolt = <1800000>;
471 regulator-max-microvolt = <1800000>;
472 regulator-name = "vddq_1v8";
473 regulator-state-mem {
474 regulator-on-in-suspend;
475 regulator-suspend-microvolt = <1800000>;
476 };
477 };
478
479 vddio_c: LDO_REG9 {
480 regulator-always-on;
481 regulator-boot-on;
482 regulator-min-microvolt = <1800000>;
483 regulator-max-microvolt = <3300000>;
484 regulator-name = "vddio_c";
485 regulator-state-mem {
486 regulator-on-in-suspend;
487 regulator-suspend-microvolt = <3300000>;
488 };
489 };
490
491 vcc_sd: SWITCH_REG {
492 regulator-name = "vcc_sd";
493 regulator-always-on;
494 regulator-boot-on;
495 regulator-min-microvolt = <3300000>;
496 regulator-max-microvolt = <3300000>;
497 regulator-state-mem {
498 regulator-on-in-suspend;
499 };
500 };
501
502 OTG_SWITCH {
503 regulator-name = "otg_switch";
504 regulator-state-mem {
505 regulator-off-in-suspend;
506 };
507 };
508 };
509 };
510};
511
512&i2c3 {
513 status = "okay";
514 pinctrl-0 = <&i2c3_sda_a_pins>, <&i2c3_sck_a_pins>;
515 pinctrl-names = "default";
516
517 rk817: pmic@20 {
518 compatible = "rockchip,rk817";
519 reg = <0x20>;
520 interrupt-parent = <&gpio_intc>;
521
522 interrupts = <5 IRQ_TYPE_LEVEL_LOW>; /* GPIOAO_5 */
523
524 vcc1-supply = <&vdd_sys>;
525 vcc2-supply = <&vdd_sys>;
526 vcc3-supply = <&vdd_sys>;
527 vcc4-supply = <&vdd_sys>;
528 vcc5-supply = <&vdd_sys>;
529 vcc6-supply = <&vdd_sys>;
530 vcc7-supply = <&vdd_sys>;
531 vcc8-supply = <&vdd_sys>;
532 vcc9-supply = <&rk817_boost>;
533
534 #sound-dai-cells = <0>;
535 clocks = <&codec_clk>;
536 clock-names = "mclk";
537
538 #clock-cells = <1>;
539
540 regulators {
541 vddcpu_b: DCDC_REG2 {
542 regulator-always-on;
543 regulator-boot-on;
544 regulator-min-microvolt = <737500>;
545 regulator-max-microvolt = <1012500>;
546 regulator-ramp-delay = <6001>;
547 regulator-initial-mode = <0x2>;
548 regulator-name = "vddcpu_b";
549 regulator-state-mem {
550 regulator-on-in-suspend;
551 regulator-suspend-microvolt = <1000000>;
552 };
553 };
554
555 vcc_2v3: DCDC_REG3 {
556 regulator-always-on;
557 regulator-boot-on;
558 regulator-min-microvolt = <2300000>;
559 regulator-max-microvolt = <2400000>;
560 regulator-initial-mode = <0x2>;
561 regulator-name = "vcc_2v3";
562 regulator-state-mem {
563 regulator-on-in-suspend;
564 };
565 };
566
567 LDO_REG4 {
568 regulator-always-on;
569 regulator-boot-on;
570 regulator-min-microvolt = <3300000>;
571 regulator-max-microvolt = <3300000>;
572 regulator-name = "vdd_codec";
573 regulator-state-mem {
574 regulator-off-in-suspend;
575 };
576 };
577
578 vcc_lcd: LDO_REG8 {
579 regulator-min-microvolt = <3300000>;
580 regulator-max-microvolt = <3300000>;
581 regulator-name = "vcc_lcd";
582 regulator-state-mem {
583 regulator-off-in-suspend;
584 };
585 };
586
587 rk817_boost: BOOST {
588 regulator-always-on;
589 regulator-boot-on;
590 regulator-min-microvolt = <5000000>;
591 regulator-max-microvolt = <5400000>;
592 regulator-name = "rk817_boost";
593 regulator-state-mem {
594 regulator-off-in-suspend;
595 };
596 };
597
598 usb_host: OTG_SWITCH {
599 regulator-name = "usb_host";
600 regulator-min-microvolt = <5000000>;
601 regulator-max-microvolt = <5000000>;
602 regulator-state-mem {
603 regulator-off-in-suspend;
604 };
605 };
606 };
607 };
608};
609
610&clkc_audio {
611 status = "okay";
612};
613
614&eth_phy {
615 status = "disabled";
616};
617
618&frddr_a {
619 status = "okay";
620};
621
622&periphs_pinctrl {
623 keypad_gpio_pins: keypad-gpio {
624 mux {
625 groups = "GPIOX_0", "GPIOX_1", "GPIOX_2", "GPIOX_3",
626 "GPIOX_4", "GPIOX_5", "GPIOX_6", "GPIOX_7",
627 "GPIOX_8", "GPIOX_9", "GPIOX_10", "GPIOX_11",
628 "GPIOX_12", "GPIOX_13", "GPIOX_14", "GPIOX_15",
629 "GPIOX_16", "GPIOX_17", "GPIOX_18", "GPIOX_19";
630 function = "gpio_periphs";
631 bias-pull-up;
632 output-disable;
633 };
634 };
635};
636
637&saradc {
638 status = "okay";
639 vref-supply = <&vddio_ao1v8>;
640};
641
642/* SD card */
643&sd_emmc_b {
644 status = "okay";
645 pinctrl-0 = <&sdcard_c_pins>;
646 pinctrl-1 = <&sdcard_clk_gate_c_pins>;
647 pinctrl-names = "default", "clk-gate";
648
649 bus-width = <4>;
650 cap-sd-highspeed;
651 max-frequency = <50000000>;
652 disable-wp;
653
654 cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>;
655 vmmc-supply = <&vcc_sd>;
656 vqmmc-supply = <&vddio_c>;
657
658};
659
660/* eMMC */
661&sd_emmc_c {
662 status = "okay";
663 pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_8b_pins>, <&emmc_ds_pins>;
664 pinctrl-1 = <&emmc_clk_gate_pins>;
665 pinctrl-names = "default", "clk-gate";
666
667 bus-width = <8>;
668 cap-mmc-highspeed;
669 mmc-ddr-1_8v;
670 mmc-hs200-1_8v;
671 max-frequency = <200000000>;
672 disable-wp;
673
674 mmc-pwrseq = <&emmc_pwrseq>;
675 vmmc-supply = <&vcc_sd>;
676 vqmmc-supply = <&vddio_ao1v8>;
677};
678
679
680&tdmif_b {
681 pinctrl-0 = <&tdm_b_dout0_pins>, <&tdm_b_fs_pins>, <&tdm_b_sclk_pins>, <&tdm_b_din1_pins>;
682 pinctrl-names = "default";
683 status = "okay";
684
685 assigned-clocks = <&clkc_audio AUD_CLKID_TDM_SCLK_PAD1>,
686 <&clkc_audio AUD_CLKID_TDM_LRCLK_PAD1>;
687 assigned-clock-parents = <&clkc_audio AUD_CLKID_MST_B_SCLK>,
688 <&clkc_audio AUD_CLKID_MST_B_LRCLK>;
689 assigned-clock-rates = <0>, <0>;
690};
691
692&tdmin_b {
693 status = "okay";
694};
695
696&tdmout_b {
697 status = "okay";
698};
699
700&toddr_a {
701 status = "okay";
702};
703
704&uart_AO {
705 status = "okay";
706 pinctrl-0 = <&uart_ao_a_pins>;
707 pinctrl-names = "default";
708};
709
710&usb {
711 status = "okay";
712 dr_mode = "peripheral";
713};
714
715&usb2_phy0 {
716 status = "okay";
717};
718
719&usb2_phy1 {
720 status = "okay";
721 phy-supply = <&usb_host>;
722};