1// SPDX-License-Identifier: (GPL-2.0 OR MIT)
2// Copyright (C) Harald Geyer <harald@ccbib.org>
3// based on sun50i-a64-olinuxino.dts by Jagan Teki <jteki@openedev.com>
4
5/dts-v1/;
6
7#include "sun50i-a64.dtsi"
8#include "sun50i-a64-cpu-opp.dtsi"
9
10#include <dt-bindings/gpio/gpio.h>
11#include <dt-bindings/input/input.h>
12#include <dt-bindings/pwm/pwm.h>
13
14/ {
15	model = "Olimex A64 Teres-I";
16	compatible = "olimex,a64-teres-i", "allwinner,sun50i-a64";
17	chassis-type = "laptop";
18
19	aliases {
20		serial0 = &uart0;
21	};
22
23	backlight: backlight {
24		compatible = "pwm-backlight";
25		pwms = <&pwm 0 50000 0>;
26		power-supply = <&reg_dcdc1>;
27		brightness-levels = <0 5 7 10 14 20 28 40 56 80 112>;
28		default-brightness-level = <5>;
29		enable-gpios = <&pio 3 23 GPIO_ACTIVE_HIGH>; /* PD23 */
30	};
31
32	chosen {
33		stdout-path = "serial0:115200n8";
34
35		framebuffer-lcd {
36			eDP25-supply = <&reg_dldo2>;
37			eDP12-supply = <&reg_dldo3>;
38		};
39	};
40
41	gpio-keys {
42		compatible = "gpio-keys";
43
44		lid-switch {
45			label = "Lid Switch";
46			gpios = <&r_pio 0 8 GPIO_ACTIVE_LOW>; /* PL8 */
47			linux,input-type = <EV_SW>;
48			linux,code = <SW_LID>;
49			wakeup-source;
50		};
51	};
52
53	leds {
54		compatible = "gpio-leds";
55
56		led-0 {
57			label = "teres-i:green:capslock";
58			gpios = <&pio 2 7 GPIO_ACTIVE_HIGH>; /* PC7 */
59		};
60
61		led-1 {
62			label = "teres-i:green:numlock";
63			gpios = <&pio 2 4 GPIO_ACTIVE_HIGH>; /* PC4 */
64		};
65	};
66
67	reg_usb1_vbus: usb1-vbus {
68		compatible = "regulator-fixed";
69		regulator-name = "usb1-vbus";
70		regulator-min-microvolt = <5000000>;
71		regulator-max-microvolt = <5000000>;
72		enable-active-high;
73		gpio = <&r_pio 0 7 GPIO_ACTIVE_HIGH>; /* PL7 */
74		status = "okay";
75	};
76
77	wifi_pwrseq: wifi_pwrseq {
78		compatible = "mmc-pwrseq-simple";
79		reset-gpios = <&r_pio 0 2 GPIO_ACTIVE_LOW>; /* PL2 */
80	};
81
82	speaker_amp: audio-amplifier {
83		compatible = "simple-audio-amplifier";
84		enable-gpios = <&r_pio 0 12 GPIO_ACTIVE_HIGH>; /* PL12 */
85		sound-name-prefix = "Speaker Amp";
86	};
87};
88
89&codec {
90	status = "okay";
91};
92
93&codec_analog {
94	cpvdd-supply = <&reg_eldo1>;
95	status = "okay";
96};
97
98&dai {
99	status = "okay";
100};
101
102&de {
103	status = "okay";
104};
105
106&cpu0 {
107	cpu-supply = <&reg_dcdc2>;
108};
109
110&cpu1 {
111	cpu-supply = <&reg_dcdc2>;
112};
113
114&cpu2 {
115	cpu-supply = <&reg_dcdc2>;
116};
117
118&cpu3 {
119	cpu-supply = <&reg_dcdc2>;
120};
121
122&ehci1 {
123	status = "okay";
124};
125
126
127&i2c0 {
128	clock-frequency = <100000>;
129	status = "okay";
130
131	anx6345: anx6345@38 {
132		compatible = "analogix,anx6345";
133		reg = <0x38>;
134		reset-gpios = <&pio 3 24 GPIO_ACTIVE_LOW>; /* PD24 */
135		dvdd25-supply = <&reg_dldo2>;
136		dvdd12-supply = <&reg_dldo3>;
137
138		ports {
139			#address-cells = <1>;
140			#size-cells = <0>;
141
142			port@0 {
143				reg = <0>;
144
145				anx6345_in: endpoint {
146					remote-endpoint = <&tcon0_out_anx6345>;
147				};
148			};
149		};
150	};
151};
152
153&mixer0 {
154	status = "okay";
155};
156
157&mmc0 {
158	pinctrl-names = "default";
159	pinctrl-0 = <&mmc0_pins>;
160	vmmc-supply = <&reg_dcdc1>;
161	cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>;
162	disable-wp;
163	bus-width = <4>;
164	status = "okay";
165};
166
167&mmc1 {
168	pinctrl-names = "default";
169	pinctrl-0 = <&mmc1_pins>;
170	vmmc-supply = <&reg_aldo2>;
171	vqmmc-supply = <&reg_dldo4>;
172	mmc-pwrseq = <&wifi_pwrseq>;
173	bus-width = <4>;
174	non-removable;
175	status = "okay";
176
177	rtl8723bs: wifi@1 {
178		reg = <1>;
179		interrupt-parent = <&r_pio>;
180		interrupts = <0 3 IRQ_TYPE_LEVEL_LOW>; /* PL3 */
181		interrupt-names = "host-wake";
182	};
183};
184
185&mmc2 {
186	pinctrl-names = "default";
187	pinctrl-0 = <&mmc2_pins>;
188	vmmc-supply = <&reg_dcdc1>;
189	vqmmc-supply = <&reg_dcdc1>;
190	bus-width = <8>;
191	non-removable;
192	cap-mmc-hw-reset;
193	status = "okay";
194};
195
196&ohci1 {
197	status = "okay";
198};
199
200&pio {
201	vcc-pc-supply = <&reg_dcdc1>;
202	vcc-pd-supply = <&reg_dldo2>;
203	vcc-pe-supply = <&reg_aldo1>;
204	vcc-pf-supply = <&reg_dcdc1>;  /* No dedicated supply-pin for this */
205	vcc-pg-supply = <&reg_aldo2>;
206};
207
208&pwm {
209	status = "okay";
210};
211
212&r_rsb {
213	status = "okay";
214
215	axp803: pmic@3a3 {
216		compatible = "x-powers,axp803";
217		reg = <0x3a3>;
218		interrupt-parent = <&r_intc>;
219		interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_LOW>;
220	};
221};
222
223#include "axp803.dtsi"
224
225&ac_power_supply {
226	status = "okay";
227};
228
229&battery_power_supply {
230	status = "okay";
231};
232
233&reg_aldo1 {
234	regulator-always-on;
235	regulator-min-microvolt = <2800000>;
236	regulator-max-microvolt = <2800000>;
237	regulator-name = "vcc-pe";
238};
239
240&reg_aldo2 {
241	regulator-always-on;
242	regulator-min-microvolt = <3300000>;
243	regulator-max-microvolt = <3300000>;
244	regulator-name = "vcc-pl";
245};
246
247&reg_aldo3 {
248	regulator-always-on;
249	regulator-min-microvolt = <3000000>;
250	regulator-max-microvolt = <3000000>;
251	regulator-name = "vcc-pll-avcc";
252};
253
254&reg_dcdc1 {
255	regulator-always-on;
256	regulator-min-microvolt = <3300000>;
257	regulator-max-microvolt = <3300000>;
258	regulator-name = "vcc-3v3";
259};
260
261&reg_dcdc2 {
262	regulator-always-on;
263	regulator-min-microvolt = <1040000>;
264	regulator-max-microvolt = <1300000>;
265	regulator-name = "vdd-cpux";
266};
267
268/* DCDC3 is polyphased with DCDC2 */
269
270&reg_dcdc5 {
271	regulator-always-on;
272	regulator-min-microvolt = <1500000>;
273	regulator-max-microvolt = <1500000>;
274	regulator-name = "vcc-ddr3";
275};
276
277&reg_dcdc6 {
278	regulator-always-on;
279	regulator-min-microvolt = <1100000>;
280	regulator-max-microvolt = <1100000>;
281	regulator-name = "vdd-sys";
282};
283
284&reg_dldo1 {
285	regulator-min-microvolt = <3300000>;
286	regulator-max-microvolt = <3300000>;
287	regulator-name = "vcc-hdmi";
288};
289
290&reg_dldo2 {
291	regulator-min-microvolt = <2500000>;
292	regulator-max-microvolt = <2500000>;
293	regulator-name = "vcc-pd";
294};
295
296&reg_dldo3 {
297	regulator-min-microvolt = <1200000>;
298	regulator-max-microvolt = <1200000>;
299	regulator-name = "vdd-edp";
300};
301
302&reg_dldo4 {
303	regulator-min-microvolt = <3300000>;
304	regulator-max-microvolt = <3300000>;
305	regulator-name = "vcc-wifi-io";
306};
307
308&reg_eldo1 {
309	regulator-min-microvolt = <1800000>;
310	regulator-max-microvolt = <1800000>;
311	regulator-name = "cpvdd";
312};
313
314&reg_eldo2 {
315	regulator-min-microvolt = <1800000>;
316	regulator-max-microvolt = <1800000>;
317	regulator-name = "vcc-dvdd-csi";
318};
319
320&reg_fldo1 {
321	regulator-min-microvolt = <1200000>;
322	regulator-max-microvolt = <1200000>;
323	regulator-name = "vcc-1v2-hsic";
324};
325
326/*
327 * The A64 chip cannot work with this regulator off, although
328 * it seems to be only driving the AR100 core.
329 * Maybe we don't still know well about CPUs domain.
330 */
331&reg_fldo2 {
332	regulator-always-on;
333	regulator-min-microvolt = <1100000>;
334	regulator-max-microvolt = <1100000>;
335	regulator-name = "vdd-cpus";
336};
337
338&reg_rtc_ldo {
339	regulator-name = "vcc-rtc";
340};
341
342&simplefb_hdmi {
343	vcc-hdmi-supply = <&reg_dldo1>;
344};
345
346&sound {
347	simple-audio-card,aux-devs = <&codec_analog>, <&speaker_amp>;
348	simple-audio-card,widgets = "Headphone", "Headphone Jack",
349				    "Microphone", "Headset Microphone",
350				    "Microphone", "Internal Microphone",
351				    "Speaker", "Internal Speaker";
352	simple-audio-card,routing =
353			"Left DAC", "DACL",
354			"Right DAC", "DACR",
355			"ADCL", "Left ADC",
356			"ADCR", "Right ADC",
357			"Headphone Jack", "HP",
358			"Speaker Amp INL", "LINEOUT",
359			"Speaker Amp INR", "LINEOUT",
360			"Internal Speaker", "Speaker Amp OUTL",
361			"Internal Speaker", "Speaker Amp OUTR",
362			"Internal Microphone", "MBIAS",
363			"MIC1", "Internal Microphone",
364			"Headset Microphone", "HBIAS",
365			"MIC2", "Headset Microphone";
366	status = "okay";
367};
368
369&tcon0 {
370	pinctrl-names = "default";
371	pinctrl-0 = <&lcd_rgb666_pins>;
372
373	status = "okay";
374};
375
376&tcon0_out {
377	tcon0_out_anx6345: endpoint@0 {
378		reg = <0>;
379		remote-endpoint = <&anx6345_in>;
380	};
381};
382
383&uart0 {
384	pinctrl-names = "default";
385	pinctrl-0 = <&uart0_pb_pins>;
386	status = "okay";
387};
388
389&usbphy {
390	usb1_vbus-supply = <&reg_usb1_vbus>;
391	status = "okay";
392};
393