1// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2// Copyright (C) 2019 Icenowy Zheng <icenowy@aosc.xyz>
3// Copyright (C) 2020 Martijn Braam <martijn@brixit.nl>
4// Copyright (C) 2020 Ondrej Jirman <megous@megous.com>
5
6#include "sun50i-a64.dtsi"
7#include "sun50i-a64-cpu-opp.dtsi"
8
9#include <dt-bindings/gpio/gpio.h>
10#include <dt-bindings/input/input.h>
11#include <dt-bindings/leds/common.h>
12#include <dt-bindings/pwm/pwm.h>
13
14/ {
15	chassis-type = "handset";
16
17	aliases {
18		ethernet0 = &rtl8723cs;
19		serial0 = &uart0;
20	};
21
22	backlight: backlight {
23		compatible = "pwm-backlight";
24		pwms = <&r_pwm 0 50000 PWM_POLARITY_INVERTED>;
25		enable-gpios = <&pio 7 10 GPIO_ACTIVE_HIGH>; /* PH10 */
26		power-supply = <&reg_ps>;
27		/* Backlight configuration differs per PinePhone revision. */
28	};
29
30	bt_sco_codec: bt-sco-codec {
31		#sound-dai-cells = <1>;
32		compatible = "linux,bt-sco";
33	};
34
35	chosen {
36		stdout-path = "serial0:115200n8";
37	};
38
39	leds {
40		compatible = "gpio-leds";
41
42		led-0 {
43			function = LED_FUNCTION_INDICATOR;
44			color = <LED_COLOR_ID_BLUE>;
45			gpios = <&pio 3 20 GPIO_ACTIVE_HIGH>; /* PD20 */
46		};
47
48		led-1 {
49			function = LED_FUNCTION_INDICATOR;
50			color = <LED_COLOR_ID_GREEN>;
51			gpios = <&pio 3 18 GPIO_ACTIVE_HIGH>; /* PD18 */
52		};
53
54		led-2 {
55			function = LED_FUNCTION_INDICATOR;
56			color = <LED_COLOR_ID_RED>;
57			gpios = <&pio 3 19 GPIO_ACTIVE_HIGH>; /* PD19 */
58		};
59	};
60
61	reg_ps: ps-regulator {
62		compatible = "regulator-fixed";
63		regulator-name = "ps";
64		regulator-min-microvolt = <5000000>;
65		regulator-max-microvolt = <5000000>;
66		regulator-boot-on;
67	};
68
69	reg_vbat_wifi: vbat-wifi {
70		compatible = "regulator-fixed";
71		regulator-min-microvolt = <3300000>;
72		regulator-max-microvolt = <3300000>;
73		regulator-name = "vbat-wifi";
74	};
75
76	sgm3140: led-controller {
77		compatible = "sgmicro,sgm3140";
78		vin-supply = <&reg_dcdc1>;
79
80		sgm3140_flash: led {
81			function = LED_FUNCTION_FLASH;
82			color = <LED_COLOR_ID_WHITE>;
83			flash-max-timeout-us = <250000>;
84		};
85	};
86
87	speaker_amp: audio-amplifier {
88		compatible = "simple-audio-amplifier";
89		enable-gpios = <&pio 2 7 GPIO_ACTIVE_HIGH>; /* PC7 */
90		sound-name-prefix = "Speaker Amp";
91	};
92
93	vibrator {
94		compatible = "gpio-vibrator";
95		enable-gpios = <&pio 3 2 GPIO_ACTIVE_HIGH>; /* PD2 */
96		vcc-supply = <&reg_dcdc1>;
97	};
98};
99
100&codec {
101	pinctrl-names = "default";
102	pinctrl-0 = <&aif3_pins>;
103	status = "okay";
104};
105
106&codec_analog {
107	cpvdd-supply = <&reg_eldo1>;
108	status = "okay";
109};
110
111&cpu0 {
112	cpu-supply = <&reg_dcdc2>;
113};
114
115&cpu1 {
116	cpu-supply = <&reg_dcdc2>;
117};
118
119&cpu2 {
120	cpu-supply = <&reg_dcdc2>;
121};
122
123&cpu3 {
124	cpu-supply = <&reg_dcdc2>;
125};
126
127&dai {
128	status = "okay";
129};
130
131&de {
132	status = "okay";
133};
134
135&dphy {
136	status = "okay";
137};
138
139&dsi {
140	vcc-dsi-supply = <&reg_dldo1>;
141	status = "okay";
142
143	panel@0 {
144		compatible = "xingbangda,xbd599";
145		reg = <0>;
146		reset-gpios = <&pio 3 23 GPIO_ACTIVE_LOW>; /* PD23 */
147		iovcc-supply = <&reg_dldo2>;
148		vcc-supply = <&reg_ldo_io0>;
149		backlight = <&backlight>;
150	};
151};
152
153&ehci0 {
154	status = "okay";
155};
156
157&ehci1 {
158	status = "okay";
159};
160
161&i2c0 {
162	status = "okay";
163
164	touchscreen@5d {
165		compatible = "goodix,gt917s";
166		reg = <0x5d>;
167		interrupt-parent = <&pio>;
168		interrupts = <7 4 IRQ_TYPE_LEVEL_HIGH>; /* PH4 */
169		irq-gpios = <&pio 7 4 GPIO_ACTIVE_HIGH>; /* PH4 */
170		reset-gpios = <&pio 7 11 GPIO_ACTIVE_HIGH>; /* PH11 */
171		AVDD28-supply = <&reg_ldo_io0>;
172		VDDIO-supply = <&reg_ldo_io0>;
173		touchscreen-size-x = <720>;
174		touchscreen-size-y = <1440>;
175	};
176};
177
178&i2c1 {
179	status = "okay";
180
181	/* Magnetometer */
182	lis3mdl: magnetometer@1e {
183		compatible = "st,lis3mdl-magn";
184		reg = <0x1e>;
185		vdd-supply = <&reg_dldo1>;
186		vddio-supply = <&reg_dldo1>;
187	};
188
189	/* Light/proximity sensor */
190	light-sensor@48 {
191		compatible = "sensortek,stk3311";
192		reg = <0x48>;
193		interrupt-parent = <&pio>;
194		interrupts = <1 0 IRQ_TYPE_EDGE_FALLING>; /* PB0 */
195	};
196
197	/* Accelerometer/gyroscope */
198	accelerometer@68 {
199		compatible = "invensense,mpu6050";
200		reg = <0x68>;
201		interrupt-parent = <&pio>;
202		interrupts = <7 5 IRQ_TYPE_EDGE_RISING>; /* PH5 */
203		vdd-supply = <&reg_dldo1>;
204		vddio-supply = <&reg_dldo1>;
205	};
206};
207
208/* Connected to pogo pins (external spring based pinheader for user addons) */
209&i2c2 {
210	status = "okay";
211};
212
213&lradc {
214	vref-supply = <&reg_aldo3>;
215	wakeup-source;
216	status = "okay";
217
218	button-200 {
219		label = "Volume Up";
220		linux,code = <KEY_VOLUMEUP>;
221		channel = <0>;
222		voltage = <200000>;
223	};
224
225	button-400 {
226		label = "Volume Down";
227		linux,code = <KEY_VOLUMEDOWN>;
228		channel = <0>;
229		voltage = <400000>;
230	};
231};
232
233&mmc0 {
234	pinctrl-names = "default";
235	pinctrl-0 = <&mmc0_pins>;
236	vmmc-supply = <&reg_dcdc1>;
237	vqmmc-supply = <&reg_dcdc1>;
238	cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */
239	disable-wp;
240	bus-width = <4>;
241	status = "okay";
242};
243
244&mmc1 {
245	pinctrl-names = "default";
246	pinctrl-0 = <&mmc1_pins>;
247	vmmc-supply = <&reg_vbat_wifi>;
248	vqmmc-supply = <&reg_dldo4>;
249	bus-width = <4>;
250	non-removable;
251	status = "okay";
252
253	rtl8723cs: wifi@1 {
254		reg = <1>;
255	};
256};
257
258&mmc2 {
259	pinctrl-names = "default";
260	pinctrl-0 = <&mmc2_pins>;
261	vmmc-supply = <&reg_dcdc1>;
262	vqmmc-supply = <&reg_dcdc1>;
263	bus-width = <8>;
264	non-removable;
265	cap-mmc-hw-reset;
266	status = "okay";
267};
268
269&ohci0 {
270	status = "okay";
271};
272
273&ohci1 {
274	status = "okay";
275};
276
277&pio {
278	vcc-pb-supply = <&reg_dcdc1>;
279	vcc-pc-supply = <&reg_dcdc1>;
280	vcc-pd-supply = <&reg_dcdc1>;
281	vcc-pe-supply = <&reg_aldo1>;
282	vcc-pf-supply = <&reg_dcdc1>;
283	vcc-pg-supply = <&reg_dldo4>;
284	vcc-ph-supply = <&reg_dcdc1>;
285};
286
287&r_pio {
288	/*
289	 * FIXME: We can't add that supply for now since it would
290	 * create a circular dependency between pinctrl, the regulator
291	 * and the RSB Bus.
292	 *
293	 * vcc-pl-supply = <&reg_aldo2>;
294	 */
295};
296
297&r_pwm {
298	status = "okay";
299};
300
301&r_rsb {
302	status = "okay";
303
304	axp803: pmic@3a3 {
305		compatible = "x-powers,axp803";
306		reg = <0x3a3>;
307		interrupt-parent = <&r_intc>;
308		interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_LOW>;
309	};
310};
311
312#include "axp803.dtsi"
313
314&battery_power_supply {
315	status = "okay";
316};
317
318&reg_aldo1 {
319	regulator-min-microvolt = <1800000>;
320	regulator-max-microvolt = <1800000>;
321	regulator-name = "dovdd-csi";
322};
323
324&reg_aldo2 {
325	regulator-always-on;
326	regulator-min-microvolt = <1800000>;
327	regulator-max-microvolt = <1800000>;
328	regulator-name = "vcc-pl";
329};
330
331&reg_aldo3 {
332	regulator-always-on;
333	regulator-min-microvolt = <3000000>;
334	regulator-max-microvolt = <3000000>;
335	regulator-name = "vcc-pll-avcc";
336};
337
338&reg_dcdc1 {
339	regulator-always-on;
340	regulator-min-microvolt = <3300000>;
341	regulator-max-microvolt = <3300000>;
342	regulator-name = "vcc-3v3";
343};
344
345&reg_dcdc2 {
346	regulator-always-on;
347	regulator-min-microvolt = <1000000>;
348	regulator-max-microvolt = <1300000>;
349	regulator-name = "vdd-cpux";
350};
351
352/* DCDC3 is polyphased with DCDC2 */
353
354&reg_dcdc5 {
355	regulator-always-on;
356	regulator-min-microvolt = <1200000>;
357	regulator-max-microvolt = <1200000>;
358	regulator-name = "vcc-dram";
359};
360
361&reg_dcdc6 {
362	regulator-always-on;
363	regulator-min-microvolt = <1100000>;
364	regulator-max-microvolt = <1100000>;
365	regulator-name = "vdd-sys";
366};
367
368&reg_dldo1 {
369	regulator-min-microvolt = <3300000>;
370	regulator-max-microvolt = <3300000>;
371	regulator-name = "vcc-dsi-sensor";
372};
373
374&reg_dldo2 {
375	regulator-min-microvolt = <1800000>;
376	regulator-max-microvolt = <1800000>;
377	regulator-name = "vcc-mipi-io";
378};
379
380&reg_dldo3 {
381	regulator-min-microvolt = <2800000>;
382	regulator-max-microvolt = <2800000>;
383	regulator-name = "avdd-csi";
384};
385
386&reg_dldo4 {
387	regulator-min-microvolt = <1800000>;
388	regulator-max-microvolt = <1800000>;
389	regulator-name = "vcc-wifi-io";
390};
391
392&reg_eldo1 {
393	regulator-always-on;
394	regulator-min-microvolt = <1800000>;
395	regulator-max-microvolt = <1800000>;
396	regulator-name = "vcc-lpddr";
397};
398
399&reg_eldo3 {
400	regulator-min-microvolt = <1800000>;
401	regulator-max-microvolt = <1800000>;
402	regulator-name = "dvdd-1v8-csi";
403};
404
405&reg_fldo1 {
406	regulator-min-microvolt = <1200000>;
407	regulator-max-microvolt = <1200000>;
408	regulator-name = "vcc-1v2-hsic";
409};
410
411&reg_fldo2 {
412	regulator-always-on;
413	regulator-min-microvolt = <1100000>;
414	regulator-max-microvolt = <1100000>;
415	regulator-name = "vdd-cpus";
416};
417
418&reg_ldo_io0 {
419	regulator-min-microvolt = <3300000>;
420	regulator-max-microvolt = <3300000>;
421	regulator-name = "vcc-lcd-ctp-stk";
422	status = "okay";
423};
424
425&reg_ldo_io1 {
426	regulator-min-microvolt = <1800000>;
427	regulator-max-microvolt = <1800000>;
428	regulator-name = "vcc-1v8-typec";
429	status = "okay";
430};
431
432&reg_rtc_ldo {
433	regulator-name = "vcc-rtc";
434};
435
436&sound {
437	status = "okay";
438	simple-audio-card,name = "PinePhone";
439	simple-audio-card,aux-devs = <&codec_analog>, <&speaker_amp>;
440	simple-audio-card,widgets = "Microphone", "Headset Microphone",
441				    "Microphone", "Internal Microphone",
442				    "Headphone", "Headphone Jack",
443				    "Speaker", "Internal Earpiece",
444				    "Speaker", "Internal Speaker";
445	simple-audio-card,routing =
446			"Headphone Jack", "HP",
447			"Internal Earpiece", "EARPIECE",
448			"Internal Speaker", "Speaker Amp OUTL",
449			"Internal Speaker", "Speaker Amp OUTR",
450			"Speaker Amp INL", "LINEOUT",
451			"Speaker Amp INR", "LINEOUT",
452			"Left DAC", "DACL",
453			"Right DAC", "DACR",
454			"ADCL", "Left ADC",
455			"ADCR", "Right ADC",
456			"Internal Microphone", "MBIAS",
457			"MIC1", "Internal Microphone",
458			"Headset Microphone", "HBIAS",
459			"MIC2", "Headset Microphone";
460
461	simple-audio-card,dai-link@2 {
462		format = "dsp_a";
463		frame-master = <&link2_codec>;
464		bitclock-master = <&link2_codec>;
465		bitclock-inversion;
466
467		link2_cpu: cpu {
468			sound-dai = <&bt_sco_codec 0>;
469		};
470
471		link2_codec: codec {
472			sound-dai = <&codec 2>;
473			dai-tdm-slot-num = <1>;
474			dai-tdm-slot-width = <32>;
475		};
476	};
477};
478
479&uart0 {
480	pinctrl-names = "default";
481	pinctrl-0 = <&uart0_pb_pins>;
482	status = "okay";
483};
484
485&uart1 {
486	pinctrl-names = "default";
487	pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>;
488	status = "okay";
489
490	bluetooth {
491		compatible = "realtek,rtl8723cs-bt";
492		device-wake-gpios = <&pio 7 6 GPIO_ACTIVE_LOW>; /* PH6 */
493		enable-gpios = <&r_pio 0 4 GPIO_ACTIVE_HIGH>; /* PL4 */
494		host-wake-gpios = <&r_pio 0 5 GPIO_ACTIVE_HIGH>; /* PL5 */
495	};
496};
497
498/* Connected to the modem (hardware flow control can't be used) */
499&uart3 {
500	pinctrl-names = "default";
501	pinctrl-0 = <&uart3_pins>;
502	status = "okay";
503};
504
505&usb_otg {
506	dr_mode = "peripheral";
507	status = "okay";
508};
509
510&usb_power_supply {
511	status = "okay";
512};
513
514&usbphy {
515	status = "okay";
516};
517