1*0923a6c6SRyan Walklin// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2*0923a6c6SRyan Walklin/*
3*0923a6c6SRyan Walklin * Copyright (C) 2024 Ryan Walklin <ryan@testtoast.com>.
4*0923a6c6SRyan Walklin */
5*0923a6c6SRyan Walklin
6*0923a6c6SRyan Walklin/dts-v1/;
7*0923a6c6SRyan Walklin
8*0923a6c6SRyan Walklin#include "sun50i-h616.dtsi"
9*0923a6c6SRyan Walklin
10*0923a6c6SRyan Walklin#include <dt-bindings/gpio/gpio.h>
11*0923a6c6SRyan Walklin#include <dt-bindings/input/linux-event-codes.h>
12*0923a6c6SRyan Walklin#include <dt-bindings/interrupt-controller/arm-gic.h>
13*0923a6c6SRyan Walklin#include <dt-bindings/leds/common.h>
14*0923a6c6SRyan Walklin
15*0923a6c6SRyan Walklin/ {
16*0923a6c6SRyan Walklin	model = "Anbernic RG35XX 2024";
17*0923a6c6SRyan Walklin	chassis-type = "handset";
18*0923a6c6SRyan Walklin	compatible = "anbernic,rg35xx-2024", "allwinner,sun50i-h700";
19*0923a6c6SRyan Walklin
20*0923a6c6SRyan Walklin	aliases {
21*0923a6c6SRyan Walklin		serial0 = &uart0;
22*0923a6c6SRyan Walklin	};
23*0923a6c6SRyan Walklin
24*0923a6c6SRyan Walklin	chosen {
25*0923a6c6SRyan Walklin		stdout-path = "serial0:115200n8";
26*0923a6c6SRyan Walklin	};
27*0923a6c6SRyan Walklin
28*0923a6c6SRyan Walklin	gpio_keys_gamepad: gpio-keys-gamepad {
29*0923a6c6SRyan Walklin		compatible = "gpio-keys";
30*0923a6c6SRyan Walklin
31*0923a6c6SRyan Walklin		button-a {
32*0923a6c6SRyan Walklin			label = "Action-Pad A";
33*0923a6c6SRyan Walklin			gpios = <&pio 0 0 GPIO_ACTIVE_LOW>; /* PA0 */
34*0923a6c6SRyan Walklin			linux,input-type = <EV_KEY>;
35*0923a6c6SRyan Walklin			linux,code = <BTN_EAST>;
36*0923a6c6SRyan Walklin		};
37*0923a6c6SRyan Walklin
38*0923a6c6SRyan Walklin		button-b {
39*0923a6c6SRyan Walklin			label = "Action-Pad B";
40*0923a6c6SRyan Walklin			gpios = <&pio 0 1 GPIO_ACTIVE_LOW>; /* PA1 */
41*0923a6c6SRyan Walklin			linux,input-type = <EV_KEY>;
42*0923a6c6SRyan Walklin			linux,code = <BTN_SOUTH>;
43*0923a6c6SRyan Walklin		};
44*0923a6c6SRyan Walklin
45*0923a6c6SRyan Walklin		button-down {
46*0923a6c6SRyan Walklin			label = "D-Pad Down";
47*0923a6c6SRyan Walklin			gpios = <&pio 4 0 GPIO_ACTIVE_LOW>; /* PE0 */
48*0923a6c6SRyan Walklin			linux,input-type = <EV_KEY>;
49*0923a6c6SRyan Walklin			linux,code = <BTN_DPAD_DOWN>;
50*0923a6c6SRyan Walklin		};
51*0923a6c6SRyan Walklin
52*0923a6c6SRyan Walklin		button-l1 {
53*0923a6c6SRyan Walklin			label = "Key L1";
54*0923a6c6SRyan Walklin			gpios = <&pio 0 10 GPIO_ACTIVE_LOW>; /* PA10 */
55*0923a6c6SRyan Walklin			linux,input-type = <EV_KEY>;
56*0923a6c6SRyan Walklin			linux,code = <BTN_TL>;
57*0923a6c6SRyan Walklin		};
58*0923a6c6SRyan Walklin
59*0923a6c6SRyan Walklin		button-l2 {
60*0923a6c6SRyan Walklin			label = "Key L2";
61*0923a6c6SRyan Walklin			gpios = <&pio 0 11 GPIO_ACTIVE_LOW>; /* PA11 */
62*0923a6c6SRyan Walklin			linux,input-type = <EV_KEY>;
63*0923a6c6SRyan Walklin			linux,code = <BTN_TL2>;
64*0923a6c6SRyan Walklin		};
65*0923a6c6SRyan Walklin
66*0923a6c6SRyan Walklin		button-left {
67*0923a6c6SRyan Walklin			label = "D-Pad left";
68*0923a6c6SRyan Walklin			gpios = <&pio 0 8 GPIO_ACTIVE_LOW>; /* PA8 */
69*0923a6c6SRyan Walklin			linux,input-type = <EV_KEY>;
70*0923a6c6SRyan Walklin			linux,code = <BTN_DPAD_LEFT>;
71*0923a6c6SRyan Walklin		};
72*0923a6c6SRyan Walklin
73*0923a6c6SRyan Walklin		button-menu {
74*0923a6c6SRyan Walklin			label = "Key Menu";
75*0923a6c6SRyan Walklin			gpios = <&pio 4 3 GPIO_ACTIVE_LOW>; /* PE3 */
76*0923a6c6SRyan Walklin			linux,input-type = <EV_KEY>;
77*0923a6c6SRyan Walklin			linux,code = <BTN_MODE>;
78*0923a6c6SRyan Walklin		};
79*0923a6c6SRyan Walklin
80*0923a6c6SRyan Walklin		button-r1 {
81*0923a6c6SRyan Walklin			label = "Key R1";
82*0923a6c6SRyan Walklin			gpios = <&pio 0 12 GPIO_ACTIVE_LOW>; /* PA12 */
83*0923a6c6SRyan Walklin			linux,input-type = <EV_KEY>;
84*0923a6c6SRyan Walklin			linux,code = <BTN_TR>;
85*0923a6c6SRyan Walklin		};
86*0923a6c6SRyan Walklin
87*0923a6c6SRyan Walklin		button-r2 {
88*0923a6c6SRyan Walklin			label = "Key R2";
89*0923a6c6SRyan Walklin			gpios = <&pio 0 7 GPIO_ACTIVE_LOW>; /* PA7 */
90*0923a6c6SRyan Walklin			linux,input-type = <EV_KEY>;
91*0923a6c6SRyan Walklin			linux,code = <BTN_TR2>;
92*0923a6c6SRyan Walklin		};
93*0923a6c6SRyan Walklin
94*0923a6c6SRyan Walklin		button-right {
95*0923a6c6SRyan Walklin			label = "D-Pad Right";
96*0923a6c6SRyan Walklin			gpios = <&pio 0 9 GPIO_ACTIVE_LOW>; /* PA9 */
97*0923a6c6SRyan Walklin			linux,input-type = <EV_KEY>;
98*0923a6c6SRyan Walklin			linux,code = <BTN_DPAD_RIGHT>;
99*0923a6c6SRyan Walklin		};
100*0923a6c6SRyan Walklin
101*0923a6c6SRyan Walklin		button-select {
102*0923a6c6SRyan Walklin			label = "Key Select";
103*0923a6c6SRyan Walklin			gpios = <&pio 0 5 GPIO_ACTIVE_LOW>; /* PA5 */
104*0923a6c6SRyan Walklin			linux,input-type = <EV_KEY>;
105*0923a6c6SRyan Walklin			linux,code = <BTN_SELECT>;
106*0923a6c6SRyan Walklin		};
107*0923a6c6SRyan Walklin		button-start {
108*0923a6c6SRyan Walklin			label = "Key Start";
109*0923a6c6SRyan Walklin			gpios = <&pio 0 4 GPIO_ACTIVE_LOW>; /* PA4 */
110*0923a6c6SRyan Walklin			linux,input-type = <EV_KEY>;
111*0923a6c6SRyan Walklin			linux,code = <BTN_START>;
112*0923a6c6SRyan Walklin		};
113*0923a6c6SRyan Walklin
114*0923a6c6SRyan Walklin		button-up {
115*0923a6c6SRyan Walklin			label = "D-Pad Up";
116*0923a6c6SRyan Walklin			gpios = <&pio 0 6 GPIO_ACTIVE_LOW>; /* PA6 */
117*0923a6c6SRyan Walklin			linux,input-type = <EV_KEY>;
118*0923a6c6SRyan Walklin			linux,code = <BTN_DPAD_UP>;
119*0923a6c6SRyan Walklin		};
120*0923a6c6SRyan Walklin
121*0923a6c6SRyan Walklin		button-x {
122*0923a6c6SRyan Walklin			label = "Action-Pad X";
123*0923a6c6SRyan Walklin			gpios = <&pio 0 3 GPIO_ACTIVE_LOW>; /* PA3 */
124*0923a6c6SRyan Walklin			linux,input-type = <EV_KEY>;
125*0923a6c6SRyan Walklin			linux,code = <BTN_NORTH>;
126*0923a6c6SRyan Walklin		};
127*0923a6c6SRyan Walklin
128*0923a6c6SRyan Walklin		button-y {
129*0923a6c6SRyan Walklin			label = "Action Pad Y";
130*0923a6c6SRyan Walklin			gpios = <&pio 0 2 GPIO_ACTIVE_LOW>; /* PA2 */
131*0923a6c6SRyan Walklin			linux,input-type = <EV_KEY>;
132*0923a6c6SRyan Walklin			linux,code = <BTN_WEST>;
133*0923a6c6SRyan Walklin		};
134*0923a6c6SRyan Walklin	};
135*0923a6c6SRyan Walklin
136*0923a6c6SRyan Walklin	gpio-keys-volume {
137*0923a6c6SRyan Walklin		compatible = "gpio-keys";
138*0923a6c6SRyan Walklin		autorepeat;
139*0923a6c6SRyan Walklin
140*0923a6c6SRyan Walklin		button-vol-up {
141*0923a6c6SRyan Walklin			label = "Key Volume Up";
142*0923a6c6SRyan Walklin			gpios = <&pio 4 1 GPIO_ACTIVE_LOW>; /* PE1 */
143*0923a6c6SRyan Walklin			linux,input-type = <EV_KEY>;
144*0923a6c6SRyan Walklin			linux,code = <KEY_VOLUMEUP>;
145*0923a6c6SRyan Walklin		};
146*0923a6c6SRyan Walklin
147*0923a6c6SRyan Walklin		button-vol-down {
148*0923a6c6SRyan Walklin			label = "Key Volume Down";
149*0923a6c6SRyan Walklin			gpios = <&pio 4 2 GPIO_ACTIVE_LOW>; /* PE2 */
150*0923a6c6SRyan Walklin			linux,input-type = <EV_KEY>;
151*0923a6c6SRyan Walklin			linux,code = <KEY_VOLUMEDOWN>;
152*0923a6c6SRyan Walklin		};
153*0923a6c6SRyan Walklin	};
154*0923a6c6SRyan Walklin
155*0923a6c6SRyan Walklin	leds {
156*0923a6c6SRyan Walklin		compatible = "gpio-leds";
157*0923a6c6SRyan Walklin
158*0923a6c6SRyan Walklin		led-0 {
159*0923a6c6SRyan Walklin			function = LED_FUNCTION_POWER;
160*0923a6c6SRyan Walklin			color = <LED_COLOR_ID_GREEN>;
161*0923a6c6SRyan Walklin			gpios = <&pio 8 12 GPIO_ACTIVE_HIGH>; /* PI12 */
162*0923a6c6SRyan Walklin			default-state = "on";
163*0923a6c6SRyan Walklin		};
164*0923a6c6SRyan Walklin	};
165*0923a6c6SRyan Walklin
166*0923a6c6SRyan Walklin	reg_vcc5v: regulator-vcc5v { /* USB-C power input */
167*0923a6c6SRyan Walklin		compatible = "regulator-fixed";
168*0923a6c6SRyan Walklin		regulator-name = "vcc-5v";
169*0923a6c6SRyan Walklin		regulator-min-microvolt = <5000000>;
170*0923a6c6SRyan Walklin		regulator-max-microvolt = <5000000>;
171*0923a6c6SRyan Walklin	};
172*0923a6c6SRyan Walklin};
173*0923a6c6SRyan Walklin
174*0923a6c6SRyan Walklin&cpu0 {
175*0923a6c6SRyan Walklin	cpu-supply = <&reg_dcdc1>;
176*0923a6c6SRyan Walklin};
177*0923a6c6SRyan Walklin
178*0923a6c6SRyan Walklin&ehci0 {
179*0923a6c6SRyan Walklin	status = "okay";
180*0923a6c6SRyan Walklin};
181*0923a6c6SRyan Walklin
182*0923a6c6SRyan Walklin&mmc0 {
183*0923a6c6SRyan Walklin	vmmc-supply = <&reg_cldo3>;
184*0923a6c6SRyan Walklin	disable-wp;
185*0923a6c6SRyan Walklin	cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>;  /* PF6 */
186*0923a6c6SRyan Walklin	bus-width = <4>;
187*0923a6c6SRyan Walklin	status = "okay";
188*0923a6c6SRyan Walklin};
189*0923a6c6SRyan Walklin
190*0923a6c6SRyan Walklin&ohci0 {
191*0923a6c6SRyan Walklin	status = "okay";
192*0923a6c6SRyan Walklin};
193*0923a6c6SRyan Walklin
194*0923a6c6SRyan Walklin&pio {
195*0923a6c6SRyan Walklin	vcc-pa-supply = <&reg_cldo3>;
196*0923a6c6SRyan Walklin	vcc-pc-supply = <&reg_cldo3>;
197*0923a6c6SRyan Walklin	vcc-pe-supply = <&reg_cldo3>;
198*0923a6c6SRyan Walklin	vcc-pf-supply = <&reg_cldo3>;
199*0923a6c6SRyan Walklin	vcc-pg-supply = <&reg_aldo4>;
200*0923a6c6SRyan Walklin	vcc-ph-supply = <&reg_cldo3>;
201*0923a6c6SRyan Walklin	vcc-pi-supply = <&reg_cldo3>;
202*0923a6c6SRyan Walklin};
203*0923a6c6SRyan Walklin
204*0923a6c6SRyan Walklin&r_rsb {
205*0923a6c6SRyan Walklin	status = "okay";
206*0923a6c6SRyan Walklin
207*0923a6c6SRyan Walklin	axp717: pmic@3a3 {
208*0923a6c6SRyan Walklin		compatible = "x-powers,axp717";
209*0923a6c6SRyan Walklin		reg = <0x3a3>;
210*0923a6c6SRyan Walklin		interrupt-controller;
211*0923a6c6SRyan Walklin		#interrupt-cells = <1>;
212*0923a6c6SRyan Walklin		interrupt-parent = <&nmi_intc>;
213*0923a6c6SRyan Walklin		interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
214*0923a6c6SRyan Walklin
215*0923a6c6SRyan Walklin		vin1-supply = <&reg_vcc5v>;
216*0923a6c6SRyan Walklin		vin2-supply = <&reg_vcc5v>;
217*0923a6c6SRyan Walklin		vin3-supply = <&reg_vcc5v>;
218*0923a6c6SRyan Walklin		vin4-supply = <&reg_vcc5v>;
219*0923a6c6SRyan Walklin
220*0923a6c6SRyan Walklin		regulators {
221*0923a6c6SRyan Walklin			reg_dcdc1: dcdc1 {
222*0923a6c6SRyan Walklin				regulator-always-on;
223*0923a6c6SRyan Walklin				regulator-min-microvolt = <900000>;
224*0923a6c6SRyan Walklin				regulator-max-microvolt = <1100000>;
225*0923a6c6SRyan Walklin				regulator-name = "vdd-cpu";
226*0923a6c6SRyan Walklin			};
227*0923a6c6SRyan Walklin
228*0923a6c6SRyan Walklin			reg_dcdc2: dcdc2 {
229*0923a6c6SRyan Walklin				regulator-always-on;
230*0923a6c6SRyan Walklin				regulator-min-microvolt = <940000>;
231*0923a6c6SRyan Walklin				regulator-max-microvolt = <940000>;
232*0923a6c6SRyan Walklin				regulator-name = "vdd-gpu-sys";
233*0923a6c6SRyan Walklin			};
234*0923a6c6SRyan Walklin
235*0923a6c6SRyan Walklin			reg_dcdc3: dcdc3 {
236*0923a6c6SRyan Walklin				regulator-always-on;
237*0923a6c6SRyan Walklin				regulator-min-microvolt = <1100000>;
238*0923a6c6SRyan Walklin				regulator-max-microvolt = <1100000>;
239*0923a6c6SRyan Walklin				regulator-name = "vdd-dram";
240*0923a6c6SRyan Walklin			};
241*0923a6c6SRyan Walklin
242*0923a6c6SRyan Walklin			reg_aldo1: aldo1 {
243*0923a6c6SRyan Walklin				/* 1.8v - unused */
244*0923a6c6SRyan Walklin			};
245*0923a6c6SRyan Walklin
246*0923a6c6SRyan Walklin			reg_aldo2: aldo2 {
247*0923a6c6SRyan Walklin				/* 1.8v - unused */
248*0923a6c6SRyan Walklin			};
249*0923a6c6SRyan Walklin
250*0923a6c6SRyan Walklin			reg_aldo3: aldo3 {
251*0923a6c6SRyan Walklin				/* 1.8v - unused */
252*0923a6c6SRyan Walklin			};
253*0923a6c6SRyan Walklin
254*0923a6c6SRyan Walklin			reg_aldo4: aldo4 {
255*0923a6c6SRyan Walklin				regulator-min-microvolt = <1800000>;
256*0923a6c6SRyan Walklin				regulator-max-microvolt = <1800000>;
257*0923a6c6SRyan Walklin				regulator-name = "vcc-pg";
258*0923a6c6SRyan Walklin			};
259*0923a6c6SRyan Walklin
260*0923a6c6SRyan Walklin			reg_bldo1: bldo1 {
261*0923a6c6SRyan Walklin				/* 1.8v - unused */
262*0923a6c6SRyan Walklin			};
263*0923a6c6SRyan Walklin
264*0923a6c6SRyan Walklin			reg_bldo2: bldo2 {
265*0923a6c6SRyan Walklin				regulator-always-on;
266*0923a6c6SRyan Walklin				regulator-min-microvolt = <1800000>;
267*0923a6c6SRyan Walklin				regulator-max-microvolt = <1800000>;
268*0923a6c6SRyan Walklin				regulator-name = "vcc-pll";
269*0923a6c6SRyan Walklin			};
270*0923a6c6SRyan Walklin
271*0923a6c6SRyan Walklin			reg_bldo3: bldo3 {
272*0923a6c6SRyan Walklin				/* 2.8v - unused */
273*0923a6c6SRyan Walklin			};
274*0923a6c6SRyan Walklin
275*0923a6c6SRyan Walklin			reg_bldo4: bldo4 {
276*0923a6c6SRyan Walklin				/* 1.2v - unused */
277*0923a6c6SRyan Walklin			};
278*0923a6c6SRyan Walklin
279*0923a6c6SRyan Walklin			reg_cldo1: cldo1 {
280*0923a6c6SRyan Walklin				/* 3.3v - audio codec - not yet implemented */
281*0923a6c6SRyan Walklin			};
282*0923a6c6SRyan Walklin
283*0923a6c6SRyan Walklin			reg_cldo2: cldo2 {
284*0923a6c6SRyan Walklin				/* 3.3v - unused */
285*0923a6c6SRyan Walklin			};
286*0923a6c6SRyan Walklin
287*0923a6c6SRyan Walklin			reg_cldo3: cldo3 {
288*0923a6c6SRyan Walklin				regulator-always-on;
289*0923a6c6SRyan Walklin				regulator-min-microvolt = <3300000>;
290*0923a6c6SRyan Walklin				regulator-max-microvolt = <3300000>;
291*0923a6c6SRyan Walklin				regulator-name = "vcc-io";
292*0923a6c6SRyan Walklin			};
293*0923a6c6SRyan Walklin
294*0923a6c6SRyan Walklin			reg_cldo4: cldo4 {
295*0923a6c6SRyan Walklin				regulator-min-microvolt = <3300000>;
296*0923a6c6SRyan Walklin				regulator-max-microvolt = <3300000>;
297*0923a6c6SRyan Walklin				regulator-name = "vcc-wifi";
298*0923a6c6SRyan Walklin			};
299*0923a6c6SRyan Walklin
300*0923a6c6SRyan Walklin			reg_boost: boost {
301*0923a6c6SRyan Walklin				regulator-min-microvolt = <5000000>;
302*0923a6c6SRyan Walklin				regulator-max-microvolt = <5200000>;
303*0923a6c6SRyan Walklin				regulator-name = "boost";
304*0923a6c6SRyan Walklin			};
305*0923a6c6SRyan Walklin
306*0923a6c6SRyan Walklin			reg_cpusldo: cpusldo {
307*0923a6c6SRyan Walklin				/* unused */
308*0923a6c6SRyan Walklin			};
309*0923a6c6SRyan Walklin		};
310*0923a6c6SRyan Walklin	};
311*0923a6c6SRyan Walklin};
312*0923a6c6SRyan Walklin
313*0923a6c6SRyan Walklin&uart0 {
314*0923a6c6SRyan Walklin	pinctrl-names = "default";
315*0923a6c6SRyan Walklin	pinctrl-0 = <&uart0_ph_pins>;
316*0923a6c6SRyan Walklin	status = "okay";
317*0923a6c6SRyan Walklin};
318*0923a6c6SRyan Walklin
319*0923a6c6SRyan Walklin/* the AXP717 has USB type-C role switch functionality, not yet described by the binding */
320*0923a6c6SRyan Walklin&usbotg {
321*0923a6c6SRyan Walklin	dr_mode = "peripheral";   /* USB type-C receptable */
322*0923a6c6SRyan Walklin	status = "okay";
323*0923a6c6SRyan Walklin};
324*0923a6c6SRyan Walklin
325*0923a6c6SRyan Walklin&usbphy {
326*0923a6c6SRyan Walklin	status = "okay";
327*0923a6c6SRyan Walklin};
328