xref: /linux/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts (revision cdd30ebb1b9f36159d66f088b61aee264e649d7a)
1// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2/*
3 * Copyright (c) 2020 Martijn Braam <martijn@brixit.nl>
4 * Copyright (c) 2021 Kamil Trzciński <ayufan@ayufan.eu>
5 */
6
7/*
8 * PinePhone Pro datasheet:
9 * https://files.pine64.org/doc/PinePhonePro/PinephonePro-Schematic-V1.0-20211127.pdf
10 */
11
12/dts-v1/;
13#include <dt-bindings/input/gpio-keys.h>
14#include <dt-bindings/input/linux-event-codes.h>
15#include <dt-bindings/leds/common.h>
16#include "rk3399-s.dtsi"
17
18/ {
19	model = "Pine64 PinePhone Pro";
20	compatible = "pine64,pinephone-pro", "rockchip,rk3399";
21	chassis-type = "handset";
22
23	aliases {
24		mmc0 = &sdio0;
25		mmc1 = &sdmmc;
26		mmc2 = &sdhci;
27	};
28
29	chosen {
30		stdout-path = "serial2:115200n8";
31	};
32
33	adc-keys {
34		compatible = "adc-keys";
35		io-channels = <&saradc 1>;
36		io-channel-names = "buttons";
37		keyup-threshold-microvolt = <1600000>;
38		poll-interval = <100>;
39
40		button-up {
41			label = "Volume Up";
42			linux,code = <KEY_VOLUMEUP>;
43			press-threshold-microvolt = <100000>;
44		};
45
46		button-down {
47			label = "Volume Down";
48			linux,code = <KEY_VOLUMEDOWN>;
49			press-threshold-microvolt = <600000>;
50		};
51	};
52
53	backlight: backlight {
54		compatible = "pwm-backlight";
55		pwms = <&pwm0 0 50000 0>;
56	};
57
58	gpio-keys {
59		compatible = "gpio-keys";
60		pinctrl-names = "default";
61		pinctrl-0 = <&pwrbtn_pin>;
62
63		key-power {
64			debounce-interval = <20>;
65			gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>;
66			label = "Power";
67			linux,code = <KEY_POWER>;
68			wakeup-source;
69		};
70	};
71
72	leds {
73		compatible = "gpio-leds";
74		pinctrl-names = "default";
75		pinctrl-0 = <&red_led_pin &green_led_pin &blue_led_pin>;
76
77		led_red: led-0 {
78			color = <LED_COLOR_ID_RED>;
79			gpios = <&gpio4 RK_PD2 GPIO_ACTIVE_HIGH>;
80		};
81
82		led_green: led-1 {
83			color = <LED_COLOR_ID_GREEN>;
84			gpios = <&gpio4 RK_PD5 GPIO_ACTIVE_HIGH>;
85		};
86
87		led_blue: led-2 {
88			color = <LED_COLOR_ID_BLUE>;
89			gpios = <&gpio4 RK_PD6 GPIO_ACTIVE_HIGH>;
90		};
91	};
92
93	multi-led {
94		compatible = "leds-group-multicolor";
95		color = <LED_COLOR_ID_RGB>;
96		function = LED_FUNCTION_INDICATOR;
97		leds = <&led_red>, <&led_green>, <&led_blue>;
98	};
99
100	vcc_sys: regulator-vcc-sys {
101		compatible = "regulator-fixed";
102		regulator-name = "vcc_sys";
103		regulator-always-on;
104		regulator-boot-on;
105	};
106
107	vcc3v3_sys: regulator-vcc3v3-sys {
108		compatible = "regulator-fixed";
109		regulator-name = "vcc3v3_sys";
110		regulator-always-on;
111		regulator-boot-on;
112		regulator-min-microvolt = <3300000>;
113		regulator-max-microvolt = <3300000>;
114		vin-supply = <&vcc_sys>;
115	};
116
117	vcca1v8_s3: regulator-vcc1v8-s3 {
118		compatible = "regulator-fixed";
119		regulator-name = "vcca1v8_s3";
120		regulator-min-microvolt = <1800000>;
121		regulator-max-microvolt = <1800000>;
122		vin-supply = <&vcc3v3_sys>;
123		regulator-always-on;
124		regulator-boot-on;
125	};
126
127	vcc1v8_codec: regulator-vcc1v8-codec {
128		compatible = "regulator-fixed";
129		enable-active-high;
130		gpio = <&gpio3 RK_PA4 GPIO_ACTIVE_HIGH>;
131		pinctrl-names = "default";
132		pinctrl-0 = <&vcc1v8_codec_en>;
133		regulator-name = "vcc1v8_codec";
134		regulator-min-microvolt = <1800000>;
135		regulator-max-microvolt = <1800000>;
136		vin-supply = <&vcc3v3_sys>;
137	};
138
139	wifi_pwrseq: sdio-wifi-pwrseq {
140		compatible = "mmc-pwrseq-simple";
141		clocks = <&rk818 1>;
142		clock-names = "ext_clock";
143		pinctrl-names = "default";
144		pinctrl-0 = <&wifi_enable_h_pin>;
145		/*
146		 * Wait between power-on and SDIO access for CYP43455
147		 * POR circuit.
148		 */
149		post-power-on-delay-ms = <110>;
150		/*
151		 * Wait between consecutive toggles for CYP43455 CBUCK
152		 * regulator discharge.
153		 */
154		power-off-delay-us = <10000>;
155
156		/* WL_REG_ON on module */
157		reset-gpios = <&gpio0 RK_PB2 GPIO_ACTIVE_LOW>;
158	};
159
160	/* MIPI DSI panel 1.8v supply */
161	vcc1v8_lcd: regulator-vcc1v8-lcd {
162		compatible = "regulator-fixed";
163		enable-active-high;
164		regulator-name = "vcc1v8_lcd";
165		regulator-min-microvolt = <1800000>;
166		regulator-max-microvolt = <1800000>;
167		vin-supply = <&vcc3v3_sys>;
168		gpio = <&gpio3 RK_PA5 GPIO_ACTIVE_HIGH>;
169	};
170
171	/* MIPI DSI panel 2.8v supply */
172	vcc2v8_lcd: regulator-vcc2v8-lcd {
173		compatible = "regulator-fixed";
174		enable-active-high;
175		regulator-name = "vcc2v8_lcd";
176		regulator-min-microvolt = <2800000>;
177		regulator-max-microvolt = <2800000>;
178		vin-supply = <&vcc3v3_sys>;
179		gpio = <&gpio3 RK_PA1 GPIO_ACTIVE_HIGH>;
180	};
181
182	vibrator {
183		compatible = "gpio-vibrator";
184		enable-gpios = <&gpio3 RK_PB1 GPIO_ACTIVE_HIGH>;
185		vcc-supply = <&vcc3v3_sys>;
186	};
187};
188
189&cpu_alert0 {
190	temperature = <65000>;
191};
192&cpu_alert1 {
193	temperature = <68000>;
194};
195
196&cpu_l0 {
197	cpu-supply = <&vdd_cpu_l>;
198};
199
200&cpu_l1 {
201	cpu-supply = <&vdd_cpu_l>;
202};
203
204&cpu_l2 {
205	cpu-supply = <&vdd_cpu_l>;
206};
207
208&cpu_l3 {
209	cpu-supply = <&vdd_cpu_l>;
210};
211
212&cpu_b0 {
213	cpu-supply = <&vdd_cpu_b>;
214};
215
216&cpu_b1 {
217	cpu-supply = <&vdd_cpu_b>;
218};
219
220&emmc_phy {
221	status = "okay";
222};
223
224&gpu {
225	mali-supply = <&vdd_gpu>;
226	status = "okay";
227};
228
229&i2c0 {
230	clock-frequency = <400000>;
231	i2c-scl-rising-time-ns = <168>;
232	i2c-scl-falling-time-ns = <4>;
233	status = "okay";
234
235	rk818: pmic@1c {
236		compatible = "rockchip,rk818";
237		reg = <0x1c>;
238		interrupt-parent = <&gpio1>;
239		interrupts = <RK_PC5 IRQ_TYPE_LEVEL_LOW>;
240		#clock-cells = <1>;
241		clock-output-names = "xin32k", "rk808-clkout2";
242		pinctrl-names = "default";
243		pinctrl-0 = <&pmic_int_l>;
244		system-power-controller;
245		wakeup-source;
246
247		vcc1-supply = <&vcc_sys>;
248		vcc2-supply = <&vcc_sys>;
249		vcc3-supply = <&vcc_sys>;
250		vcc4-supply = <&vcc_sys>;
251		vcc6-supply = <&vcc_sys>;
252		vcc7-supply = <&vcc3v3_sys>;
253		vcc8-supply = <&vcc_sys>;
254		vcc9-supply = <&vcc3v3_sys>;
255
256		regulators {
257			vdd_cpu_l: DCDC_REG1 {
258				regulator-name = "vdd_cpu_l";
259				regulator-always-on;
260				regulator-boot-on;
261				regulator-min-microvolt = <875000>;
262				regulator-max-microvolt = <975000>;
263				regulator-ramp-delay = <6001>;
264				regulator-state-mem {
265					regulator-off-in-suspend;
266				};
267			};
268
269			vdd_center: DCDC_REG2 {
270				regulator-name = "vdd_center";
271				regulator-always-on;
272				regulator-boot-on;
273				regulator-min-microvolt = <800000>;
274				regulator-max-microvolt = <1000000>;
275				regulator-ramp-delay = <6001>;
276				regulator-state-mem {
277					regulator-off-in-suspend;
278				};
279			};
280
281			vcc_ddr: DCDC_REG3 {
282				regulator-name = "vcc_ddr";
283				regulator-always-on;
284				regulator-boot-on;
285				regulator-state-mem {
286					regulator-on-in-suspend;
287				};
288			};
289
290			vcc_1v8: DCDC_REG4 {
291				regulator-name = "vcc_1v8";
292				regulator-always-on;
293				regulator-boot-on;
294				regulator-min-microvolt = <1800000>;
295				regulator-max-microvolt = <1800000>;
296				regulator-state-mem {
297					regulator-on-in-suspend;
298				};
299			};
300
301			vcca3v0_codec: LDO_REG1 {
302				regulator-name = "vcca3v0_codec";
303				regulator-min-microvolt = <3000000>;
304				regulator-max-microvolt = <3000000>;
305			};
306
307			vcc3v0_touch: LDO_REG2 {
308				regulator-name = "vcc3v0_touch";
309				regulator-min-microvolt = <3000000>;
310				regulator-max-microvolt = <3000000>;
311			};
312
313			vcca1v8_codec: LDO_REG3 {
314				regulator-name = "vcca1v8_codec";
315				regulator-min-microvolt = <1800000>;
316				regulator-max-microvolt = <1800000>;
317			};
318
319			rk818_pwr_on: LDO_REG4 {
320				regulator-name = "rk818_pwr_on";
321				regulator-always-on;
322				regulator-boot-on;
323				regulator-min-microvolt = <3300000>;
324				regulator-max-microvolt = <3300000>;
325				regulator-state-mem {
326					regulator-on-in-suspend;
327				};
328			};
329
330			vcc_3v0: LDO_REG5 {
331				regulator-name = "vcc_3v0";
332				regulator-always-on;
333				regulator-boot-on;
334				regulator-min-microvolt = <3000000>;
335				regulator-max-microvolt = <3000000>;
336				regulator-state-mem {
337					regulator-on-in-suspend;
338				};
339			};
340
341			vcc_1v5: LDO_REG6 {
342				regulator-name = "vcc_1v5";
343				regulator-always-on;
344				regulator-boot-on;
345				regulator-min-microvolt = <1500000>;
346				regulator-max-microvolt = <1500000>;
347				regulator-state-mem {
348					regulator-on-in-suspend;
349				};
350			};
351
352			vcc1v8_dvp: LDO_REG7 {
353				regulator-name = "vcc1v8_dvp";
354				regulator-min-microvolt = <1800000>;
355				regulator-max-microvolt = <1800000>;
356			};
357
358			vcc3v3_s3: LDO_REG8 {
359				regulator-name = "vcc3v3_s3";
360				regulator-always-on;
361				regulator-boot-on;
362				regulator-min-microvolt = <3300000>;
363				regulator-max-microvolt = <3300000>;
364				regulator-state-mem {
365					regulator-off-in-suspend;
366				};
367			};
368
369			vccio_sd: LDO_REG9 {
370				regulator-name = "vccio_sd";
371				regulator-min-microvolt = <1800000>;
372				regulator-max-microvolt = <3300000>;
373			};
374
375			vcc3v3_s0: SWITCH_REG {
376				regulator-name = "vcc3v3_s0";
377				regulator-always-on;
378				regulator-boot-on;
379				regulator-state-mem {
380					regulator-on-in-suspend;
381				};
382			};
383		};
384	};
385
386	vdd_cpu_b: regulator@40 {
387		compatible = "silergy,syr827";
388		reg = <0x40>;
389		fcs,suspend-voltage-selector = <1>;
390		pinctrl-names = "default";
391		pinctrl-0 = <&vsel1_pin>;
392		regulator-name = "vdd_cpu_b";
393		regulator-min-microvolt = <875000>;
394		regulator-max-microvolt = <1150000>;
395		regulator-ramp-delay = <1000>;
396		regulator-always-on;
397		regulator-boot-on;
398
399		regulator-state-mem {
400			regulator-off-in-suspend;
401		};
402	};
403
404	vdd_gpu: regulator@41 {
405		compatible = "silergy,syr828";
406		reg = <0x41>;
407		fcs,suspend-voltage-selector = <1>;
408		pinctrl-names = "default";
409		pinctrl-0 = <&vsel2_pin>;
410		regulator-name = "vdd_gpu";
411		regulator-min-microvolt = <875000>;
412		regulator-max-microvolt = <975000>;
413		regulator-ramp-delay = <1000>;
414		regulator-always-on;
415		regulator-boot-on;
416
417		regulator-state-mem {
418			regulator-off-in-suspend;
419		};
420	};
421};
422
423&i2c3 {
424	i2c-scl-rising-time-ns = <450>;
425	i2c-scl-falling-time-ns = <15>;
426	status = "okay";
427
428	touchscreen@14 {
429		compatible = "goodix,gt1158";
430		reg = <0x14>;
431		interrupt-parent = <&gpio3>;
432		interrupts = <RK_PB5 IRQ_TYPE_EDGE_RISING>;
433		irq-gpios = <&gpio3 RK_PB5 GPIO_ACTIVE_HIGH>;
434		reset-gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_HIGH>;
435		AVDD28-supply = <&vcc3v0_touch>;
436		VDDIO-supply = <&vcc3v0_touch>;
437		touchscreen-size-x = <720>;
438		touchscreen-size-y = <1440>;
439	};
440};
441
442&i2c4 {
443	i2c-scl-rising-time-ns = <600>;
444	i2c-scl-falling-time-ns = <20>;
445	status = "okay";
446
447	/* Accelerometer/gyroscope */
448	mpu6500@68 {
449		compatible = "invensense,mpu6500";
450		reg = <0x68>;
451		interrupt-parent = <&gpio1>;
452		interrupts = <RK_PC6 IRQ_TYPE_LEVEL_LOW>;
453		vddio-supply = <&vcc_1v8>;
454	};
455};
456
457&io_domains {
458	bt656-supply = <&vcc1v8_dvp>;
459	audio-supply = <&vcca1v8_codec>;
460	sdmmc-supply = <&vccio_sd>;
461	gpio1830-supply = <&vcc_3v0>;
462	status = "okay";
463};
464
465&mipi_dsi {
466	status = "okay";
467	clock-master;
468
469	ports {
470		mipi_out: port@1 {
471			#address-cells = <0>;
472			#size-cells = <0>;
473			reg = <1>;
474
475			mipi_out_panel: endpoint {
476				remote-endpoint = <&mipi_in_panel>;
477			};
478		};
479	};
480
481	panel@0 {
482		compatible = "hannstar,hsd060bhw4";
483		reg = <0>;
484		backlight = <&backlight>;
485		reset-gpios = <&gpio4 RK_PD1 GPIO_ACTIVE_LOW>;
486		vcc-supply = <&vcc2v8_lcd>;
487		iovcc-supply = <&vcc1v8_lcd>;
488		pinctrl-names = "default";
489
490		port {
491			mipi_in_panel: endpoint {
492				remote-endpoint = <&mipi_out_panel>;
493			};
494		};
495	};
496};
497
498&pmu_io_domains {
499	pmu1830-supply = <&vcc_1v8>;
500	status = "okay";
501};
502
503&pinctrl {
504	buttons {
505		pwrbtn_pin: pwrbtn-pin {
506			rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_up>;
507		};
508	};
509
510	leds {
511		red_led_pin: red-led-pin {
512			rockchip,pins = <4 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>;
513		};
514
515		green_led_pin: green-led-pin {
516			rockchip,pins = <4 RK_PD5 RK_FUNC_GPIO &pcfg_pull_none>;
517		};
518
519		blue_led_pin: blue-led-pin {
520			rockchip,pins = <4 RK_PD6 RK_FUNC_GPIO &pcfg_pull_none>;
521		};
522	};
523
524	pmic {
525		pmic_int_l: pmic-int-l {
526			rockchip,pins = <1 RK_PC5 RK_FUNC_GPIO &pcfg_pull_up>;
527		};
528
529		vsel1_pin: vsel1-pin {
530			rockchip,pins = <1 RK_PC1 RK_FUNC_GPIO &pcfg_pull_down>;
531		};
532
533		vsel2_pin: vsel2-pin {
534			rockchip,pins = <1 RK_PB6 RK_FUNC_GPIO &pcfg_pull_down>;
535		};
536	};
537
538	sdio-pwrseq {
539		wifi_enable_h_pin: wifi-enable-h-pin {
540			rockchip,pins = <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>;
541		};
542	};
543
544	sound {
545		vcc1v8_codec_en: vcc1v8-codec-en {
546			rockchip,pins = <3 RK_PA4 RK_FUNC_GPIO &pcfg_pull_down>;
547		};
548	};
549
550	wireless-bluetooth {
551		bt_wake_pin: bt-wake-pin {
552			rockchip,pins = <2 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>;
553		};
554
555		bt_host_wake_pin: bt-host-wake-pin {
556			rockchip,pins = <0 RK_PA4 RK_FUNC_GPIO &pcfg_pull_none>;
557		};
558
559		bt_reset_pin: bt-reset-pin {
560			rockchip,pins = <0 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>;
561		};
562	};
563};
564
565&sdio0 {
566	bus-width = <4>;
567	cap-sd-highspeed;
568	cap-sdio-irq;
569	disable-wp;
570	keep-power-in-suspend;
571	mmc-pwrseq = <&wifi_pwrseq>;
572	non-removable;
573	pinctrl-names = "default";
574	pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>;
575	sd-uhs-sdr104;
576	status = "okay";
577};
578
579&pwm0 {
580	status = "okay";
581};
582
583&saradc {
584	vref-supply = <&vcca1v8_s3>;
585	status = "okay";
586};
587
588&sdmmc {
589	bus-width = <4>;
590	cap-sd-highspeed;
591	cd-gpios = <&gpio0 RK_PA7 GPIO_ACTIVE_LOW>;
592	disable-wp;
593	max-frequency = <150000000>;
594	pinctrl-names = "default";
595	pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;
596	vmmc-supply = <&vcc3v3_sys>;
597	vqmmc-supply = <&vccio_sd>;
598	status = "okay";
599};
600
601&sdhci {
602	bus-width = <8>;
603	mmc-hs200-1_8v;
604	non-removable;
605	status = "okay";
606};
607
608&spi1 {
609	status = "okay";
610
611	flash@0 {
612		compatible = "jedec,spi-nor";
613		reg = <0>;
614		spi-max-frequency = <10000000>;
615	};
616};
617
618&tsadc {
619	rockchip,hw-tshut-mode = <1>;
620	rockchip,hw-tshut-polarity = <1>;
621	status = "okay";
622};
623
624&uart0 {
625	pinctrl-names = "default";
626	pinctrl-0 = <&uart0_xfer &uart0_cts &uart0_rts>;
627	uart-has-rtscts;
628	status = "okay";
629
630	bluetooth {
631		compatible = "brcm,bcm4345c5";
632		clocks = <&rk818 1>;
633		clock-names = "lpo";
634		device-wakeup-gpios = <&gpio2 RK_PD2 GPIO_ACTIVE_HIGH>;
635		host-wakeup-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_HIGH>;
636		max-speed = <1500000>;
637		pinctrl-names = "default";
638		pinctrl-0 = <&bt_host_wake_pin &bt_wake_pin &bt_reset_pin>;
639		shutdown-gpios = <&gpio0 RK_PB1 GPIO_ACTIVE_HIGH>;
640		vbat-supply = <&vcc3v3_sys>;
641		vddio-supply = <&vcc_1v8>;
642	};
643};
644
645&uart2 {
646	status = "okay";
647};
648
649&vopb {
650	status = "okay";
651	assigned-clocks = <&cru DCLK_VOP0_DIV>, <&cru DCLK_VOP0>,
652			  <&cru ACLK_VOP0>, <&cru HCLK_VOP0>;
653	assigned-clock-rates = <0>, <0>, <400000000>, <100000000>;
654	assigned-clock-parents = <&cru PLL_GPLL>, <&cru DCLK_VOP0_DIV>;
655};
656
657&vopb_mmu {
658	status = "okay";
659};
660
661&vopl {
662	status = "okay";
663	assigned-clocks = <&cru DCLK_VOP1_DIV>, <&cru DCLK_VOP1>,
664			  <&cru ACLK_VOP1>, <&cru HCLK_VOP1>;
665	assigned-clock-rates = <0>, <0>, <400000000>, <100000000>;
666	assigned-clock-parents = <&cru PLL_GPLL>, <&cru DCLK_VOP1_DIV>;
667};
668
669&vopl_mmu {
670	status = "okay";
671};
672