1// 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 = <IRQID_GPIOAO_7 IRQ_TYPE_LEVEL_LOW>; /* GPIOAO_7 */
384		#clock-cells = <1>;
385
386		vcc1-supply = <&vdd_sys>;
387		vcc2-supply = <&vdd_sys>;
388		vcc3-supply = <&vdd_sys>;
389		vcc4-supply = <&vdd_sys>;
390		vcc6-supply = <&vdd_sys>;
391		vcc7-supply = <&vcc_2v3>;
392		vcc8-supply = <&vcc_2v3>;
393		vcc9-supply = <&vddao_3v3>;
394		boost-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 = <IRQID_GPIOAO_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-state {
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};
723