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		clocks = <&clkc CLKID_MPLL2>,
238			 <&clkc CLKID_MPLL0>,
239			 <&clkc CLKID_MPLL1>;
240
241		assigned-clocks = <&clkc CLKID_MPLL2>,
242				  <&clkc CLKID_MPLL0>,
243				  <&clkc CLKID_MPLL1>;
244		assigned-clock-parents = <0>, <0>, <0>;
245		assigned-clock-rates = <294912000>,
246				       <270950400>,
247				       <393216000>;
248
249		dai-link-0 {
250			sound-dai = <&frddr_a>;
251		};
252
253		dai-link-1 {
254			sound-dai = <&toddr_a>;
255		};
256
257		dai-link-2 {
258			sound-dai = <&tdmif_b>;
259			dai-format = "i2s";
260			dai-tdm-slot-tx-mask-0 = <1 1>;
261			mclk-fs = <256>;
262
263			codec-0 {
264				sound-dai = <&rk817>;
265			};
266		};
267	};
268
269	speaker_amp: speaker-amplifier {
270		compatible = "simple-audio-amplifier";
271		sound-name-prefix = "Speaker Amplifier";
272		VCC-supply = <&hp_5v>;
273	};
274};
275
276&arb {
277	status = "okay";
278};
279
280&cpu0 {
281	cpu-supply = <&vddcpu_b>;
282	operating-points-v2 = <&cpu_opp_table_0>;
283	clocks = <&clkc CLKID_CPU_CLK>;
284	clock-latency = <50000>;
285};
286
287&cpu1 {
288	cpu-supply = <&vddcpu_b>;
289	operating-points-v2 = <&cpu_opp_table_0>;
290	clocks = <&clkc CLKID_CPU_CLK>;
291	clock-latency = <50000>;
292};
293
294&cpu100 {
295	cpu-supply = <&vddcpu_a>;
296	operating-points-v2 = <&cpub_opp_table_1>;
297	clocks = <&clkc CLKID_CPUB_CLK>;
298	clock-latency = <50000>;
299};
300
301&cpu101 {
302	cpu-supply = <&vddcpu_a>;
303	operating-points-v2 = <&cpub_opp_table_1>;
304	clocks = <&clkc CLKID_CPUB_CLK>;
305	clock-latency = <50000>;
306};
307
308&cpu102 {
309	cpu-supply = <&vddcpu_a>;
310	operating-points-v2 = <&cpub_opp_table_1>;
311	clocks = <&clkc CLKID_CPUB_CLK>;
312	clock-latency = <50000>;
313};
314
315&cpu103 {
316	cpu-supply = <&vddcpu_a>;
317	operating-points-v2 = <&cpub_opp_table_1>;
318	clocks = <&clkc CLKID_CPUB_CLK>;
319	clock-latency = <50000>;
320};
321
322/* RK817 only supports 12.5mV steps, round up the values */
323&cpu_opp_table_0 {
324	opp-1000000000 {
325		opp-microvolt = <737500>;
326	};
327	opp-1200000000 {
328		opp-microvolt = <737500>;
329	};
330	opp-1398000000 {
331		opp-microvolt = <762500>;
332	};
333	opp-1512000000 {
334		opp-microvolt = <800000>;
335	};
336	opp-1608000000 {
337		opp-microvolt = <837500>;
338	};
339	opp-1704000000 {
340		opp-microvolt = <862500>;
341	};
342	opp-1896000000 {
343		opp-microvolt = <987500>;
344	};
345	opp-1992000000 {
346		opp-microvolt = <1012500>;
347	};
348};
349
350/* RK818 only supports 12.5mV steps, round up the values */
351&cpub_opp_table_1 {
352	opp-1000000000 {
353		opp-microvolt = <775000>;
354	};
355	opp-1200000000 {
356		opp-microvolt = <775000>;
357	};
358	opp-1398000000 {
359		opp-microvolt = <800000>;
360	};
361	opp-1512000000 {
362		opp-microvolt = <825000>;
363	};
364	opp-1608000000 {
365		opp-microvolt = <862500>;
366	};
367	opp-1704000000 {
368		opp-microvolt = <900000>;
369	};
370	opp-1800000000 {
371		opp-microvolt = <987500>;
372	};
373	opp-1908000000 {
374		opp-microvolt = <1025000>;
375	};
376};
377
378&i2c_AO {
379	status = "okay";
380	pinctrl-0 = <&i2c_ao_sck_pins>, <&i2c_ao_sda_pins>;
381	pinctrl-names = "default";
382
383	rk818: pmic@1c {
384		compatible = "rockchip,rk818";
385		reg = <0x1c>;
386		interrupt-parent = <&gpio_intc>;
387		interrupts = <IRQID_GPIOAO_7 IRQ_TYPE_LEVEL_LOW>; /* GPIOAO_7 */
388		#clock-cells = <1>;
389
390		vcc1-supply = <&vdd_sys>;
391		vcc2-supply = <&vdd_sys>;
392		vcc3-supply = <&vdd_sys>;
393		vcc4-supply = <&vdd_sys>;
394		vcc6-supply = <&vdd_sys>;
395		vcc7-supply = <&vcc_2v3>;
396		vcc8-supply = <&vcc_2v3>;
397		vcc9-supply = <&vddao_3v3>;
398		boost-supply = <&vdd_sys>;
399
400		regulators {
401			vddcpu_a: DCDC_REG1 {
402				regulator-name = "vddcpu_a";
403				regulator-always-on;
404				regulator-boot-on;
405				regulator-min-microvolt = <775000>;
406				regulator-max-microvolt = <1025000>;
407				regulator-ramp-delay = <6001>;
408				regulator-state-mem {
409					regulator-on-in-suspend;
410					regulator-suspend-microvolt = <775000>;
411				};
412			};
413
414			vdd_ee: DCDC_REG2 {
415				regulator-name = "vdd_ee";
416				regulator-always-on;
417				regulator-boot-on;
418				regulator-min-microvolt = <875000>;
419				regulator-max-microvolt = <1250000>;
420				regulator-ramp-delay = <6001>;
421				regulator-state-mem {
422					regulator-on-in-suspend;
423					regulator-suspend-microvolt = <875000>;
424				};
425			};
426
427			vddq_1v1: DCDC_REG3 {
428				regulator-name = "vddq_1v1";
429				regulator-always-on;
430				regulator-boot-on;
431				regulator-state-mem {
432					regulator-on-in-suspend;
433				};
434			};
435
436			vddao_3v3: DCDC_REG4 {
437				regulator-always-on;
438				regulator-boot-on;
439				regulator-min-microvolt = <3300000>;
440				regulator-max-microvolt = <3300000>;
441				regulator-name = "vddao_3v3";
442				regulator-state-mem {
443					regulator-on-in-suspend;
444					regulator-suspend-microvolt = <3300000>;
445				};
446			};
447
448			hp_5v: DCDC_BOOST {
449				regulator-always-on;
450				regulator-boot-on;
451				regulator-name = "hp_5v";
452				regulator-min-microvolt = <5000000>;
453				regulator-max-microvolt = <5000000>;
454				regulator-state-mem {
455					regulator-off-in-suspend;
456				};
457			};
458
459			vddio_ao1v8: LDO_REG5 {
460				regulator-always-on;
461				regulator-boot-on;
462				regulator-min-microvolt = <1800000>;
463				regulator-max-microvolt = <1800000>;
464				regulator-name = "vddio_ao1v8";
465				regulator-state-mem {
466					regulator-on-in-suspend;
467					regulator-suspend-microvolt = <1800000>;
468				};
469			};
470
471			vddq_1v8: LDO_REG7 {
472				regulator-always-on;
473				regulator-boot-on;
474				regulator-min-microvolt = <1800000>;
475				regulator-max-microvolt = <1800000>;
476				regulator-name = "vddq_1v8";
477				regulator-state-mem {
478					regulator-on-in-suspend;
479					regulator-suspend-microvolt = <1800000>;
480				};
481			};
482
483			vddio_c: LDO_REG9 {
484				regulator-always-on;
485				regulator-boot-on;
486				regulator-min-microvolt = <1800000>;
487				regulator-max-microvolt = <3300000>;
488				regulator-name = "vddio_c";
489				regulator-state-mem {
490					regulator-on-in-suspend;
491					regulator-suspend-microvolt = <3300000>;
492				};
493			};
494
495			vcc_sd: SWITCH_REG {
496				regulator-name = "vcc_sd";
497				regulator-always-on;
498				regulator-boot-on;
499				regulator-min-microvolt = <3300000>;
500				regulator-max-microvolt = <3300000>;
501				regulator-state-mem {
502					regulator-on-in-suspend;
503				};
504			};
505
506			OTG_SWITCH {
507				regulator-name = "otg_switch";
508				regulator-state-mem {
509					regulator-off-in-suspend;
510				};
511			};
512		};
513	};
514};
515
516&i2c3 {
517	status = "okay";
518	pinctrl-0 = <&i2c3_sda_a_pins>, <&i2c3_sck_a_pins>;
519	pinctrl-names = "default";
520
521	rk817: pmic@20 {
522		compatible = "rockchip,rk817";
523		reg = <0x20>;
524		interrupt-parent = <&gpio_intc>;
525
526		interrupts = <IRQID_GPIOAO_5 IRQ_TYPE_LEVEL_LOW>; /* GPIOAO_5 */
527
528		vcc1-supply = <&vdd_sys>;
529		vcc2-supply = <&vdd_sys>;
530		vcc3-supply = <&vdd_sys>;
531		vcc4-supply = <&vdd_sys>;
532		vcc5-supply = <&vdd_sys>;
533		vcc6-supply = <&vdd_sys>;
534		vcc7-supply = <&vdd_sys>;
535		vcc8-supply = <&vdd_sys>;
536		vcc9-supply = <&rk817_boost>;
537
538		#sound-dai-cells = <0>;
539		clocks = <&codec_clk>;
540		clock-names = "mclk";
541
542		#clock-cells = <1>;
543
544		regulators {
545			vddcpu_b: DCDC_REG2 {
546				regulator-always-on;
547				regulator-boot-on;
548				regulator-min-microvolt = <737500>;
549				regulator-max-microvolt = <1012500>;
550				regulator-ramp-delay = <6001>;
551				regulator-initial-mode = <0x2>;
552				regulator-name = "vddcpu_b";
553				regulator-state-mem {
554					regulator-on-in-suspend;
555					regulator-suspend-microvolt = <1000000>;
556				};
557			};
558
559			vcc_2v3: DCDC_REG3 {
560				regulator-always-on;
561				regulator-boot-on;
562				regulator-min-microvolt = <2300000>;
563				regulator-max-microvolt = <2400000>;
564				regulator-initial-mode = <0x2>;
565				regulator-name = "vcc_2v3";
566				regulator-state-mem {
567					regulator-on-in-suspend;
568				};
569			};
570
571			LDO_REG4 {
572				regulator-always-on;
573				regulator-boot-on;
574				regulator-min-microvolt = <3300000>;
575				regulator-max-microvolt = <3300000>;
576				regulator-name = "vdd_codec";
577				regulator-state-mem {
578					regulator-off-in-suspend;
579				};
580			};
581
582			vcc_lcd: LDO_REG8 {
583				regulator-min-microvolt = <3300000>;
584				regulator-max-microvolt = <3300000>;
585				regulator-name = "vcc_lcd";
586				regulator-state-mem {
587					regulator-off-in-suspend;
588				};
589			};
590
591			rk817_boost: BOOST {
592				regulator-always-on;
593				regulator-boot-on;
594				regulator-min-microvolt = <5000000>;
595				regulator-max-microvolt = <5400000>;
596				regulator-name = "rk817_boost";
597				regulator-state-mem {
598					regulator-off-in-suspend;
599				};
600			};
601
602			usb_host: OTG_SWITCH {
603				regulator-name = "usb_host";
604				regulator-min-microvolt = <5000000>;
605				regulator-max-microvolt = <5000000>;
606				regulator-state-mem {
607					regulator-off-in-suspend;
608				};
609			};
610		};
611	};
612};
613
614&clkc_audio {
615	status = "okay";
616};
617
618&eth_phy {
619	status = "disabled";
620};
621
622&frddr_a {
623	status = "okay";
624};
625
626&periphs_pinctrl {
627	keypad_gpio_pins: keypad-gpio-state {
628		mux {
629			groups = "GPIOX_0", "GPIOX_1", "GPIOX_2", "GPIOX_3",
630			         "GPIOX_4", "GPIOX_5", "GPIOX_6", "GPIOX_7",
631				 "GPIOX_8", "GPIOX_9", "GPIOX_10", "GPIOX_11",
632				 "GPIOX_12", "GPIOX_13", "GPIOX_14",  "GPIOX_15",
633				 "GPIOX_16", "GPIOX_17", "GPIOX_18",  "GPIOX_19";
634			function = "gpio_periphs";
635			bias-pull-up;
636			output-disable;
637		};
638	};
639};
640
641&saradc {
642	status = "okay";
643	vref-supply = <&vddio_ao1v8>;
644};
645
646/* SD card */
647&sd_emmc_b {
648	status = "okay";
649	pinctrl-0 = <&sdcard_c_pins>;
650	pinctrl-1 = <&sdcard_clk_gate_c_pins>;
651	pinctrl-names = "default", "clk-gate";
652
653	bus-width = <4>;
654	cap-sd-highspeed;
655	max-frequency = <50000000>;
656	disable-wp;
657
658	cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>;
659	vmmc-supply = <&vcc_sd>;
660	vqmmc-supply = <&vddio_c>;
661
662};
663
664/* eMMC */
665&sd_emmc_c {
666	status = "okay";
667	pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_8b_pins>, <&emmc_ds_pins>;
668	pinctrl-1 = <&emmc_clk_gate_pins>;
669	pinctrl-names = "default", "clk-gate";
670
671	bus-width = <8>;
672	cap-mmc-highspeed;
673	mmc-ddr-1_8v;
674	mmc-hs200-1_8v;
675	max-frequency = <200000000>;
676	disable-wp;
677
678	mmc-pwrseq = <&emmc_pwrseq>;
679	vmmc-supply = <&vcc_sd>;
680	vqmmc-supply = <&vddio_ao1v8>;
681};
682
683
684&tdmif_b {
685	pinctrl-0 = <&tdm_b_dout0_pins>, <&tdm_b_fs_pins>, <&tdm_b_sclk_pins>, <&tdm_b_din1_pins>;
686	pinctrl-names = "default";
687	status = "okay";
688
689	assigned-clocks = <&clkc_audio AUD_CLKID_TDM_SCLK_PAD1>,
690			  <&clkc_audio AUD_CLKID_TDM_LRCLK_PAD1>;
691	assigned-clock-parents = <&clkc_audio AUD_CLKID_MST_B_SCLK>,
692				 <&clkc_audio AUD_CLKID_MST_B_LRCLK>;
693	assigned-clock-rates = <0>, <0>;
694};
695
696&tdmin_b {
697	status = "okay";
698};
699
700&tdmout_b {
701	status = "okay";
702};
703
704&toddr_a {
705	status = "okay";
706};
707
708&uart_AO {
709	status = "okay";
710	pinctrl-0 = <&uart_ao_a_pins>;
711	pinctrl-names = "default";
712};
713
714&usb {
715	status = "okay";
716	dr_mode = "peripheral";
717};
718
719&usb2_phy0 {
720	status = "okay";
721};
722
723&usb2_phy1 {
724	status = "okay";
725	phy-supply = <&usb_host>;
726};
727