1// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2// Copyright (C) 2017 Icenowy Zheng <icenowy@aosc.xyz>
3// Copyright (C) 2018 Vasily Khoruzhick <anarsoul@gmail.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/gpio-keys.h>
12#include <dt-bindings/input/input.h>
13#include <dt-bindings/pwm/pwm.h>
14
15/ {
16	model = "Pinebook";
17	compatible = "pine64,pinebook", "allwinner,sun50i-a64";
18	chassis-type = "laptop";
19
20	aliases {
21		serial0 = &uart0;
22		ethernet0 = &rtl8723cs;
23	};
24
25	backlight: backlight {
26		compatible = "pwm-backlight";
27		pwms = <&pwm 0 50000 0>;
28		brightness-levels = <0 5 10 15 20 30 40 55 70 85 100>;
29		default-brightness-level = <2>;
30		enable-gpios = <&pio 3 23 GPIO_ACTIVE_HIGH>; /* PD23 */
31		power-supply = <&reg_vbklt>;
32	};
33
34	chosen {
35		stdout-path = "serial0:115200n8";
36	};
37
38	gpio-keys {
39		compatible = "gpio-keys";
40
41		lid-switch {
42			label = "Lid Switch";
43			gpios = <&r_pio 0 12 GPIO_ACTIVE_LOW>; /* PL12 */
44			linux,input-type = <EV_SW>;
45			linux,code = <SW_LID>;
46			linux,can-disable;
47			wakeup-source;
48			wakeup-event-action = <EV_ACT_DEASSERTED>;
49		};
50	};
51
52	panel_edp: panel-edp {
53		compatible = "neweast,wjfh116008a";
54		backlight = <&backlight>;
55		power-supply = <&reg_dc1sw>;
56
57		port {
58			panel_edp_in: endpoint {
59				remote-endpoint = <&anx6345_out_edp>;
60			};
61		};
62	};
63
64	reg_vbklt: vbklt {
65		compatible = "regulator-fixed";
66		regulator-name = "vbklt";
67		regulator-min-microvolt = <18000000>;
68		regulator-max-microvolt = <18000000>;
69		gpio = <&pio 7 6 GPIO_ACTIVE_HIGH>; /* PH6 */
70		enable-active-high;
71	};
72
73	reg_vcc5v0: vcc5v0 {
74		compatible = "regulator-fixed";
75		regulator-name = "vcc5v0";
76		regulator-min-microvolt = <5000000>;
77		regulator-max-microvolt = <5000000>;
78		gpio = <&axp_gpio 0 GPIO_ACTIVE_HIGH>;
79		enable-active-high;
80	};
81
82	wifi_pwrseq: wifi_pwrseq {
83		compatible = "mmc-pwrseq-simple";
84		reset-gpios = <&r_pio 0 2 GPIO_ACTIVE_LOW>; /* PL2 */
85	};
86
87	speaker_amp: audio-amplifier {
88		compatible = "simple-audio-amplifier";
89		VCC-supply = <&reg_vcc5v0>;
90		enable-gpios = <&pio 7 7 GPIO_ACTIVE_HIGH>; /* PH7 */
91		sound-name-prefix = "Speaker Amp";
92	};
93
94};
95
96&codec {
97	status = "okay";
98};
99
100&codec_analog {
101	cpvdd-supply = <&reg_eldo1>;
102	status = "okay";
103};
104
105&cpu0 {
106	cpu-supply = <&reg_dcdc2>;
107};
108
109&cpu1 {
110	cpu-supply = <&reg_dcdc2>;
111};
112
113&cpu2 {
114	cpu-supply = <&reg_dcdc2>;
115};
116
117&cpu3 {
118	cpu-supply = <&reg_dcdc2>;
119};
120
121&dai {
122	status = "okay";
123};
124
125&de {
126	status = "okay";
127};
128
129&ehci0 {
130	status = "okay";
131};
132
133&ehci1 {
134	status = "okay";
135};
136
137&mixer0 {
138	status = "okay";
139};
140
141&mmc0 {
142	pinctrl-names = "default";
143	pinctrl-0 = <&mmc0_pins>;
144	vmmc-supply = <&reg_dcdc1>;
145	cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */
146	disable-wp;
147	bus-width = <4>;
148	status = "okay";
149};
150
151&mmc1 {
152	pinctrl-names = "default";
153	pinctrl-0 = <&mmc1_pins>;
154	vmmc-supply = <&reg_dldo4>;
155	vqmmc-supply = <&reg_eldo1>;
156	mmc-pwrseq = <&wifi_pwrseq>;
157	bus-width = <4>;
158	non-removable;
159	status = "okay";
160
161	rtl8723cs: wifi@1 {
162		reg = <1>;
163	};
164};
165
166&mmc2 {
167	pinctrl-names = "default";
168	pinctrl-0 = <&mmc2_pins>, <&mmc2_ds_pin>;
169	vmmc-supply = <&reg_dcdc1>;
170	vqmmc-supply = <&reg_eldo1>;
171	max-frequency = <200000000>;
172	bus-width = <8>;
173	non-removable;
174	cap-mmc-hw-reset;
175	mmc-hs200-1_8v;
176	status = "okay";
177};
178
179&ohci0 {
180	status = "okay";
181};
182
183&ohci1 {
184	status = "okay";
185};
186
187&pio {
188	vcc-pc-supply = <&reg_eldo1>;
189	vcc-pd-supply = <&reg_dcdc1>;
190	vcc-pe-supply = <&reg_aldo1>;
191	vcc-pg-supply = <&reg_eldo1>;
192};
193
194&pwm {
195	status = "okay";
196};
197
198&r_i2c {
199	clock-frequency = <100000>;
200	pinctrl-names = "default";
201	pinctrl-0 = <&r_i2c_pl89_pins>;
202	status = "okay";
203
204	anx6345: anx6345@38 {
205		compatible = "analogix,anx6345";
206		reg = <0x38>;
207		reset-gpios = <&pio 3 24 GPIO_ACTIVE_LOW>; /* PD24 */
208		dvdd25-supply = <&reg_dldo2>;
209		dvdd12-supply = <&reg_fldo1>;
210
211		ports {
212			#address-cells = <1>;
213			#size-cells = <0>;
214
215			anx6345_in: port@0 {
216				reg = <0>;
217				anx6345_in_tcon0: endpoint {
218					remote-endpoint = <&tcon0_out_anx6345>;
219				};
220			};
221
222			anx6345_out: port@1 {
223				reg = <1>;
224				anx6345_out_edp: endpoint {
225					remote-endpoint = <&panel_edp_in>;
226				};
227			};
228		};
229	};
230};
231
232&r_pio {
233	/*
234	 * FIXME: We can't add that supply for now since it would
235	 * create a circular dependency between pinctrl, the regulator
236	 * and the RSB Bus.
237	 *
238	 * vcc-pl-supply = <&reg_aldo2>;
239	 */
240};
241
242&r_rsb {
243	status = "okay";
244
245	axp803: pmic@3a3 {
246		compatible = "x-powers,axp803";
247		reg = <0x3a3>;
248		interrupt-parent = <&r_intc>;
249		interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_LOW>;
250	};
251};
252
253#include "axp803.dtsi"
254
255&ac_power_supply {
256	status = "okay";
257};
258
259&battery_power_supply {
260	status = "okay";
261};
262
263&reg_aldo1 {
264	regulator-name = "vcc-pe";
265};
266
267&reg_aldo2 {
268	regulator-always-on;
269	regulator-min-microvolt = <1800000>;
270	regulator-max-microvolt = <3300000>;
271	regulator-name = "vcc-pl";
272};
273
274&reg_aldo3 {
275	regulator-always-on;
276	regulator-min-microvolt = <2700000>;
277	regulator-max-microvolt = <3300000>;
278	regulator-name = "vcc-pll-avcc";
279};
280
281&reg_dc1sw {
282	regulator-name = "vcc-lcd";
283};
284
285&reg_dcdc1 {
286	regulator-always-on;
287	regulator-min-microvolt = <3300000>;
288	regulator-max-microvolt = <3300000>;
289	regulator-name = "vcc-3v3";
290};
291
292&reg_dcdc2 {
293	regulator-always-on;
294	regulator-min-microvolt = <1000000>;
295	regulator-max-microvolt = <1300000>;
296	regulator-name = "vdd-cpux";
297};
298
299/* DCDC3 is polyphased with DCDC2 */
300
301&reg_dcdc5 {
302	regulator-always-on;
303	regulator-min-microvolt = <1200000>;
304	regulator-max-microvolt = <1200000>;
305	regulator-name = "vcc-dram";
306};
307
308&reg_dcdc6 {
309	regulator-always-on;
310	regulator-min-microvolt = <1100000>;
311	regulator-max-microvolt = <1100000>;
312	regulator-name = "vdd-sys";
313};
314
315&reg_dldo1 {
316	regulator-min-microvolt = <3300000>;
317	regulator-max-microvolt = <3300000>;
318	regulator-name = "vcc-hdmi";
319};
320
321&reg_dldo2 {
322	regulator-min-microvolt = <2500000>;
323	regulator-max-microvolt = <2500000>;
324	regulator-name = "vcc-edp";
325};
326
327&reg_dldo4 {
328	regulator-min-microvolt = <3300000>;
329	regulator-max-microvolt = <3300000>;
330	regulator-name = "vcc-wifi";
331};
332
333&reg_eldo1 {
334	regulator-always-on;
335	regulator-min-microvolt = <1800000>;
336	regulator-max-microvolt = <1800000>;
337	regulator-name = "cpvdd";
338};
339
340&reg_fldo1 {
341	regulator-min-microvolt = <1200000>;
342	regulator-max-microvolt = <1200000>;
343	regulator-name = "vcc-1v2-hsic";
344};
345
346&reg_fldo2 {
347	regulator-always-on;
348	regulator-min-microvolt = <1100000>;
349	regulator-max-microvolt = <1100000>;
350	regulator-name = "vdd-cpus";
351};
352
353&reg_rtc_ldo {
354	regulator-name = "vcc-rtc";
355};
356
357&simplefb_lcd {
358	panel-supply = <&reg_dc1sw>;
359	dvdd25-supply = <&reg_dldo2>;
360	dvdd12-supply = <&reg_fldo1>;
361};
362
363&simplefb_hdmi {
364	vcc-hdmi-supply = <&reg_dldo1>;
365};
366
367&sound {
368	status = "okay";
369	simple-audio-card,aux-devs = <&codec_analog>, <&speaker_amp>;
370	simple-audio-card,widgets = "Microphone", "Internal Microphone Left",
371				    "Microphone", "Internal Microphone Right",
372				    "Headphone", "Headphone Jack",
373				    "Speaker", "Internal Speaker";
374	simple-audio-card,routing =
375			"Left DAC", "DACL",
376			"Right DAC", "DACR",
377			"Speaker Amp INL", "LINEOUT",
378			"Speaker Amp INR", "LINEOUT",
379			"Internal Speaker", "Speaker Amp OUTL",
380			"Internal Speaker", "Speaker Amp OUTR",
381			"Headphone Jack", "HP",
382			"ADCL", "Left ADC",
383			"ADCR", "Right ADC",
384			"Internal Microphone Left", "MBIAS",
385			"MIC1", "Internal Microphone Left",
386			"Internal Microphone Right", "HBIAS",
387			"MIC2", "Internal Microphone Right";
388};
389
390&tcon0 {
391	pinctrl-names = "default";
392	pinctrl-0 = <&lcd_rgb666_pins>;
393
394	status = "okay";
395};
396
397&tcon0_out {
398	tcon0_out_anx6345: endpoint {
399		remote-endpoint = <&anx6345_in_tcon0>;
400	};
401};
402
403&uart0 {
404	pinctrl-names = "default";
405	pinctrl-0 = <&uart0_pb_pins>;
406	status = "okay";
407};
408
409&usb_otg {
410	dr_mode = "host";
411};
412
413&usbphy {
414	usb0_vbus-supply = <&reg_vcc5v0>;
415	usb1_vbus-supply = <&reg_vcc5v0>;
416	status = "okay";
417};
418