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