1// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2/*
3 * Copyright (c) 2019 Shenzhen Wesion Technology Co., Ltd.
4 * (https://www.khadas.com)
5 */
6
7/dts-v1/;
8#include <dt-bindings/input/linux-event-codes.h>
9#include <dt-bindings/pwm/pwm.h>
10#include "rk3399.dtsi"
11#include "rk3399-opp.dtsi"
12
13/ {
14	chosen {
15		stdout-path = "serial2:1500000n8";
16	};
17
18	clkin_gmac: external-gmac-clock {
19		compatible = "fixed-clock";
20		clock-frequency = <125000000>;
21		clock-output-names = "clkin_gmac";
22		#clock-cells = <0>;
23	};
24
25	sdio_pwrseq: sdio-pwrseq {
26		compatible = "mmc-pwrseq-simple";
27		clocks = <&rk808 1>;
28		clock-names = "ext_clock";
29		pinctrl-names = "default";
30		pinctrl-0 = <&wifi_enable_h>;
31
32		/*
33		 * On the module itself this is one of these (depending
34		 * on the actual card populated):
35		 * - SDIO_RESET_L_WL_REG_ON
36		 * - PDN (power down when low)
37		 */
38		reset-gpios = <&gpio2 RK_PD4 GPIO_ACTIVE_LOW>;
39	};
40
41	/* switched by pmic_sleep */
42	vcc1v8_s3: vcca1v8_s3: vcc1v8-s3 {
43		compatible = "regulator-fixed";
44		regulator-name = "vcc1v8_s3";
45		regulator-always-on;
46		regulator-boot-on;
47		regulator-min-microvolt = <1800000>;
48		regulator-max-microvolt = <1800000>;
49		vin-supply = <&vcc_1v8>;
50	};
51
52	vcc3v3_pcie: vcc3v3-pcie-regulator {
53		compatible = "regulator-fixed";
54		regulator-name = "vcc3v3_pcie";
55		regulator-always-on;
56		regulator-boot-on;
57		regulator-min-microvolt = <3300000>;
58		regulator-max-microvolt = <3300000>;
59		vin-supply = <&vsys_3v3>;
60	};
61
62	/* Actually 3 regulators (host0, 1, 2) controlled by the same gpio */
63	vcc5v0_host: vcc5v0-host-regulator {
64		compatible = "regulator-fixed";
65		enable-active-high;
66		gpio = <&gpio4 RK_PD1 GPIO_ACTIVE_HIGH>;
67		pinctrl-names = "default";
68		pinctrl-0 = <&vcc5v0_host_en>;
69		regulator-name = "vcc5v0_host";
70		regulator-always-on;
71		vin-supply = <&vsys_5v0>;
72	};
73
74	vdd_log: vdd-log {
75		compatible = "pwm-regulator";
76		pwms = <&pwm2 0 25000 1>;
77		regulator-name = "vdd_log";
78		regulator-always-on;
79		regulator-boot-on;
80		regulator-min-microvolt = <800000>;
81		regulator-max-microvolt = <1400000>;
82		vin-supply = <&vsys_3v3>;
83	};
84
85	vsys: vsys {
86		compatible = "regulator-fixed";
87		regulator-name = "vsys";
88		regulator-always-on;
89		regulator-boot-on;
90	};
91
92	vsys_3v3: vsys-3v3 {
93		compatible = "regulator-fixed";
94		regulator-name = "vsys_3v3";
95		regulator-always-on;
96		regulator-boot-on;
97		regulator-min-microvolt = <3300000>;
98		regulator-max-microvolt = <3300000>;
99		vin-supply = <&vsys>;
100	};
101
102	vsys_5v0: vsys-5v0 {
103		compatible = "regulator-fixed";
104		regulator-name = "vsys_5v0";
105		regulator-always-on;
106		regulator-boot-on;
107		regulator-min-microvolt = <5000000>;
108		regulator-max-microvolt = <5000000>;
109		vin-supply = <&vsys>;
110	};
111
112	adc-keys {
113		compatible = "adc-keys";
114		io-channels = <&saradc 1>;
115		io-channel-names = "buttons";
116		keyup-threshold-microvolt = <1800000>;
117		poll-interval = <100>;
118
119		recovery {
120			label = "Recovery";
121			linux,code = <KEY_VENDOR>;
122			press-threshold-microvolt = <18000>;
123		};
124	};
125
126	gpio-keys {
127		compatible = "gpio-keys";
128		autorepeat;
129		pinctrl-names = "default";
130		pinctrl-0 = <&pwrbtn>;
131
132		power {
133			debounce-interval = <100>;
134			gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>;
135			label = "GPIO Key Power";
136			linux,code = <KEY_POWER>;
137			wakeup-source;
138		};
139	};
140
141	leds {
142		compatible = "gpio-leds";
143		pinctrl-names = "default";
144		pinctrl-0 = <&sys_led_pin>, <&user_led_pin>;
145
146		sys_led: led-0 {
147			label = "sys_led";
148			linux,default-trigger = "heartbeat";
149			gpios = <&gpio0 RK_PA6 GPIO_ACTIVE_HIGH>;
150		};
151
152		user_led: led-1 {
153			label = "user_led";
154			default-state = "off";
155			gpios = <&gpio4 RK_PD0 GPIO_ACTIVE_HIGH>;
156		};
157	};
158
159	fan: pwm-fan {
160		compatible = "pwm-fan";
161		cooling-levels = <0 150 200 255>;
162		#cooling-cells = <2>;
163		fan-supply = <&vsys_5v0>;
164		pwms = <&pwm0 0 40000 0>;
165	};
166};
167
168&cpu_l0 {
169	cpu-supply = <&vdd_cpu_l>;
170};
171
172&cpu_l1 {
173	cpu-supply = <&vdd_cpu_l>;
174};
175
176&cpu_l2 {
177	cpu-supply = <&vdd_cpu_l>;
178};
179
180&cpu_l3 {
181	cpu-supply = <&vdd_cpu_l>;
182};
183
184&cpu_b0 {
185	cpu-supply = <&vdd_cpu_b>;
186};
187
188&cpu_b1 {
189	cpu-supply = <&vdd_cpu_b>;
190};
191
192&cpu_thermal {
193	trips {
194		cpu_warm: cpu_warm {
195			temperature = <55000>;
196			hysteresis = <2000>;
197			type = "active";
198		};
199
200		cpu_hot: cpu_hot {
201			temperature = <65000>;
202			hysteresis = <2000>;
203			type = "active";
204		};
205	};
206
207	cooling-maps {
208		map2 {
209			trip = <&cpu_warm>;
210			cooling-device = <&fan THERMAL_NO_LIMIT 1>;
211		};
212
213		map3 {
214			trip = <&cpu_hot>;
215			cooling-device = <&fan 2 THERMAL_NO_LIMIT>;
216		};
217	};
218};
219
220&emmc_phy {
221	status = "okay";
222};
223
224&gmac {
225	assigned-clocks = <&cru SCLK_RMII_SRC>;
226	assigned-clock-parents = <&clkin_gmac>;
227	clock_in_out = "input";
228	phy-supply = <&vcc_lan>;
229	phy-mode = "rgmii";
230	pinctrl-names = "default";
231	pinctrl-0 = <&rgmii_pins>;
232	snps,reset-gpio = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>;
233	snps,reset-active-low;
234	snps,reset-delays-us = <0 10000 50000>;
235	tx_delay = <0x28>;
236	rx_delay = <0x11>;
237};
238
239&gpu {
240	mali-supply = <&vdd_gpu>;
241	status = "okay";
242};
243
244&gpu_thermal {
245	trips {
246		gpu_warm: gpu_warm {
247			temperature = <55000>;
248			hysteresis = <2000>;
249			type = "active";
250		};
251
252		gpu_hot: gpu_hot {
253			temperature = <65000>;
254			hysteresis = <2000>;
255			type = "active";
256		};
257	};
258
259	cooling-maps {
260		map1 {
261			trip = <&gpu_warm>;
262			cooling-device = <&fan THERMAL_NO_LIMIT 1>;
263		};
264
265		map2 {
266			trip = <&gpu_hot>;
267			cooling-device = <&fan 2 THERMAL_NO_LIMIT>;
268		};
269	};
270};
271
272&hdmi {
273	ddc-i2c-bus = <&i2c3>;
274	pinctrl-names = "default";
275	pinctrl-0 = <&hdmi_cec>;
276	status = "okay";
277};
278
279&hdmi_sound {
280	status = "okay";
281};
282
283&i2c3 {
284	i2c-scl-rising-time-ns = <450>;
285	i2c-scl-falling-time-ns = <15>;
286	status = "okay";
287};
288
289&i2c4 {
290	clock-frequency = <400000>;
291	i2c-scl-rising-time-ns = <168>;
292	i2c-scl-falling-time-ns = <4>;
293	status = "okay";
294
295	rk808: pmic@1b {
296		compatible = "rockchip,rk808";
297		reg = <0x1b>;
298		interrupt-parent = <&gpio1>;
299		interrupts = <RK_PC6 IRQ_TYPE_LEVEL_LOW>;
300		#clock-cells = <1>;
301		clock-output-names = "xin32k", "rk808-clkout2";
302		pinctrl-names = "default";
303		pinctrl-0 = <&pmic_int_l>;
304		rockchip,system-power-controller;
305		wakeup-source;
306
307		vcc1-supply = <&vsys_3v3>;
308		vcc2-supply = <&vsys_3v3>;
309		vcc3-supply = <&vsys_3v3>;
310		vcc4-supply = <&vsys_3v3>;
311		vcc6-supply = <&vsys_3v3>;
312		vcc7-supply = <&vsys_3v3>;
313		vcc8-supply = <&vsys_3v3>;
314		vcc9-supply = <&vsys_3v3>;
315		vcc10-supply = <&vsys_3v3>;
316		vcc11-supply = <&vsys_3v3>;
317		vcc12-supply = <&vsys_3v3>;
318		vddio-supply = <&vcc_1v8>;
319
320		regulators {
321			vdd_center: DCDC_REG1 {
322				regulator-name = "vdd_center";
323				regulator-always-on;
324				regulator-boot-on;
325				regulator-min-microvolt = <750000>;
326				regulator-max-microvolt = <1350000>;
327				regulator-ramp-delay = <6001>;
328
329				regulator-state-mem {
330					regulator-off-in-suspend;
331				};
332			};
333
334			vdd_cpu_l: DCDC_REG2 {
335				regulator-name = "vdd_cpu_l";
336				regulator-always-on;
337				regulator-boot-on;
338				regulator-min-microvolt = <750000>;
339				regulator-max-microvolt = <1350000>;
340				regulator-ramp-delay = <6001>;
341
342				regulator-state-mem {
343					regulator-off-in-suspend;
344				};
345			};
346
347			vcc_ddr: DCDC_REG3 {
348				regulator-name = "vcc_ddr";
349				regulator-always-on;
350				regulator-boot-on;
351
352				regulator-state-mem {
353					regulator-on-in-suspend;
354				};
355			};
356
357			vcc_1v8: DCDC_REG4 {
358				regulator-name = "vcc_1v8";
359				regulator-always-on;
360				regulator-boot-on;
361				regulator-min-microvolt = <1800000>;
362				regulator-max-microvolt = <1800000>;
363
364				regulator-state-mem {
365					regulator-on-in-suspend;
366					regulator-suspend-microvolt = <1800000>;
367				};
368			};
369
370			vcc1v8_apio2: LDO_REG1 {
371				regulator-name = "vcc1v8_apio2";
372				regulator-always-on;
373				regulator-boot-on;
374				regulator-min-microvolt = <1800000>;
375				regulator-max-microvolt = <1800000>;
376
377				regulator-state-mem {
378					regulator-off-in-suspend;
379				};
380			};
381
382			vcc_vldo2: LDO_REG2 {
383				regulator-name = "vcc_vldo2";
384				regulator-always-on;
385				regulator-boot-on;
386				regulator-min-microvolt = <3000000>;
387				regulator-max-microvolt = <3000000>;
388
389				regulator-state-mem {
390					regulator-off-in-suspend;
391				};
392			};
393
394			vcc1v8_pmupll: LDO_REG3 {
395				regulator-name = "vcc1v8_pmupll";
396				regulator-always-on;
397				regulator-boot-on;
398				regulator-min-microvolt = <1800000>;
399				regulator-max-microvolt = <1800000>;
400
401				regulator-state-mem {
402					regulator-on-in-suspend;
403					regulator-suspend-microvolt = <1800000>;
404				};
405			};
406
407			vccio_sd: LDO_REG4 {
408				regulator-name = "vccio_sd";
409				regulator-always-on;
410				regulator-boot-on;
411				regulator-min-microvolt = <1800000>;
412				regulator-max-microvolt = <3000000>;
413
414				regulator-state-mem {
415					regulator-on-in-suspend;
416					regulator-suspend-microvolt = <3000000>;
417				};
418			};
419
420			vcc_vldo5: LDO_REG5 {
421				regulator-name = "vcc_vldo5";
422				regulator-always-on;
423				regulator-boot-on;
424				regulator-min-microvolt = <3000000>;
425				regulator-max-microvolt = <3000000>;
426
427				regulator-state-mem {
428					regulator-off-in-suspend;
429				};
430			};
431
432			vcc_1v5: LDO_REG6 {
433				regulator-name = "vcc_1v5";
434				regulator-always-on;
435				regulator-boot-on;
436				regulator-min-microvolt = <1500000>;
437				regulator-max-microvolt = <1500000>;
438
439				regulator-state-mem {
440					regulator-on-in-suspend;
441					regulator-suspend-microvolt = <1500000>;
442				};
443			};
444
445			vcc1v8_codec: LDO_REG7 {
446				regulator-name = "vcc1v8_codec";
447				regulator-always-on;
448				regulator-boot-on;
449				regulator-min-microvolt = <1800000>;
450				regulator-max-microvolt = <1800000>;
451
452				regulator-state-mem {
453					regulator-off-in-suspend;
454				};
455			};
456
457			vcc_3v0: LDO_REG8 {
458				regulator-name = "vcc_3v0";
459				regulator-always-on;
460				regulator-boot-on;
461				regulator-min-microvolt = <3000000>;
462				regulator-max-microvolt = <3000000>;
463
464				regulator-state-mem {
465					regulator-on-in-suspend;
466					regulator-suspend-microvolt = <3000000>;
467				};
468			};
469
470			vcc3v3_s3: vcc_lan: SWITCH_REG1 {
471				regulator-name = "vcc3v3_s3";
472				regulator-always-on;
473				regulator-boot-on;
474
475				regulator-state-mem {
476					regulator-off-in-suspend;
477				};
478			};
479
480			vcc3v3_s0: SWITCH_REG2 {
481				regulator-name = "vcc3v3_s0";
482				regulator-always-on;
483				regulator-boot-on;
484
485				regulator-state-mem {
486					regulator-off-in-suspend;
487				};
488			};
489		};
490	};
491
492	vdd_cpu_b: regulator@40 {
493		compatible = "silergy,syr827";
494		reg = <0x40>;
495		fcs,suspend-voltage-selector = <1>;
496		pinctrl-names = "default";
497		pinctrl-0 = <&cpu_b_sleep>;
498		regulator-name = "vdd_cpu_b";
499		regulator-min-microvolt = <712500>;
500		regulator-max-microvolt = <1500000>;
501		regulator-ramp-delay = <1000>;
502		regulator-always-on;
503		regulator-boot-on;
504		vin-supply = <&vsys_3v3>;
505
506		regulator-state-mem {
507			regulator-off-in-suspend;
508		};
509	};
510
511	vdd_gpu: regulator@41 {
512		compatible = "silergy,syr828";
513		reg = <0x41>;
514		fcs,suspend-voltage-selector = <1>;
515		pinctrl-names = "default";
516		pinctrl-0 = <&gpu_sleep>;
517		regulator-name = "vdd_gpu";
518		regulator-min-microvolt = <712500>;
519		regulator-max-microvolt = <1500000>;
520		regulator-ramp-delay = <1000>;
521		regulator-always-on;
522		regulator-boot-on;
523		vin-supply = <&vsys_3v3>;
524
525		regulator-state-mem {
526			regulator-off-in-suspend;
527		};
528	};
529};
530
531&i2c8 {
532	clock-frequency = <400000>;
533	i2c-scl-rising-time-ns = <160>;
534	i2c-scl-falling-time-ns = <30>;
535	status = "okay";
536};
537
538&i2s0 {
539	rockchip,playback-channels = <8>;
540	rockchip,capture-channels = <8>;
541	status = "okay";
542};
543
544&i2s1 {
545	rockchip,playback-channels = <2>;
546	rockchip,capture-channels = <2>;
547	status = "okay";
548};
549
550&i2s2 {
551	status = "okay";
552};
553
554&io_domains {
555	bt656-supply = <&vcc1v8_apio2>;
556	audio-supply = <&vcc1v8_codec>;
557	sdmmc-supply = <&vccio_sd>;
558	gpio1830-supply = <&vcc_3v0>;
559	status = "okay";
560};
561
562&pmu_io_domains {
563	pmu1830-supply = <&vcc_1v8>;
564	status = "okay";
565};
566
567&pinctrl {
568	bt {
569		bt_host_wake_l: bt-host-wake-l {
570			rockchip,pins = <0 RK_PA4 RK_FUNC_GPIO &pcfg_pull_none>;
571		};
572
573		bt_reg_on_h: bt-reg-on-h {
574			rockchip,pins = <2 RK_PD3 RK_FUNC_GPIO &pcfg_pull_none>;
575		};
576
577		bt_wake_l: bt-wake-l {
578			rockchip,pins = <2 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>;
579		};
580	};
581
582	buttons {
583		pwrbtn: pwrbtn {
584			rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_up>;
585		};
586	};
587
588	leds {
589		sys_led_pin: sys-led-pin {
590			rockchip,pins = <0 RK_PA6 RK_FUNC_GPIO &pcfg_pull_none>;
591		};
592
593		user_led_pin: user-led-pin {
594			rockchip,pins = <4 RK_PD0 RK_FUNC_GPIO &pcfg_pull_none>;
595		};
596	};
597
598	pmic {
599		pmic_int_l: pmic-int-l {
600			rockchip,pins = <1 RK_PC6 RK_FUNC_GPIO &pcfg_pull_up>;
601		};
602
603		cpu_b_sleep: cpu-b-sleep {
604			rockchip,pins = <1 RK_PB5 RK_FUNC_GPIO &pcfg_pull_down>;
605		};
606
607		gpu_sleep: gpu-sleep {
608			rockchip,pins = <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_down>;
609		};
610	};
611
612	sdio-pwrseq {
613		wifi_enable_h: wifi-enable-h {
614			rockchip,pins = <2 RK_PD4 RK_FUNC_GPIO &pcfg_pull_none>;
615		};
616	};
617
618	usb2 {
619		vcc5v0_host_en: vcc5v0-host-en {
620			rockchip,pins = <4 RK_PD1 RK_FUNC_GPIO &pcfg_pull_none>;
621		};
622	};
623
624	wifi {
625		wifi_host_wake_l: wifi-host-wake-l {
626			rockchip,pins = <0 RK_PA3 RK_FUNC_GPIO &pcfg_pull_none>;
627		};
628	};
629};
630
631&pwm0 {
632	status = "okay";
633};
634
635&pwm2 {
636	status = "okay";
637};
638
639&saradc {
640	vref-supply = <&vcca1v8_s3>;
641	status = "okay";
642};
643
644&sdio0 {
645	/* WiFi & BT combo module Ampak AP6356S */
646	bus-width = <4>;
647	cap-sdio-irq;
648	cap-sd-highspeed;
649	keep-power-in-suspend;
650	mmc-pwrseq = <&sdio_pwrseq>;
651	non-removable;
652	pinctrl-names = "default";
653	pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>;
654	sd-uhs-sdr104;
655	vqmmc-supply = <&vcc1v8_s3>;
656	vmmc-supply = <&vccio_sd>;
657	#address-cells = <1>;
658	#size-cells = <0>;
659	status = "okay";
660
661	brcmf: wifi@1 {
662		reg = <1>;
663		compatible = "brcm,bcm4329-fmac";
664		interrupt-parent = <&gpio0>;
665		interrupts = <RK_PA3 GPIO_ACTIVE_HIGH>;
666		interrupt-names = "host-wake";
667		brcm,drive-strength = <5>;
668		pinctrl-names = "default";
669		pinctrl-0 = <&wifi_host_wake_l>;
670	};
671};
672
673&sdmmc {
674	bus-width = <4>;
675	cap-mmc-highspeed;
676	cap-sd-highspeed;
677	cd-gpios = <&gpio0 RK_PA7 GPIO_ACTIVE_LOW>;
678	disable-wp;
679	max-frequency = <150000000>;
680	pinctrl-names = "default";
681	pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_bus4>;
682	status = "okay";
683};
684
685&sdhci {
686	bus-width = <8>;
687	mmc-hs400-1_8v;
688	mmc-hs400-enhanced-strobe;
689	non-removable;
690	status = "okay";
691};
692
693&tcphy0 {
694	status = "okay";
695};
696
697&tcphy1 {
698	status = "okay";
699};
700
701&tsadc {
702	/* tshut mode 0:CRU 1:GPIO */
703	rockchip,hw-tshut-mode = <1>;
704	/* tshut polarity 0:LOW 1:HIGH */
705	rockchip,hw-tshut-polarity = <1>;
706	status = "okay";
707};
708
709&u2phy0 {
710	status = "okay";
711
712	u2phy0_otg: otg-port {
713		status = "okay";
714	};
715
716	u2phy0_host: host-port {
717		phy-supply = <&vcc5v0_host>;
718		status = "okay";
719	};
720};
721
722&u2phy1 {
723	status = "okay";
724
725	u2phy1_otg: otg-port {
726		status = "okay";
727	};
728
729	u2phy1_host: host-port {
730		phy-supply = <&vcc5v0_host>;
731		status = "okay";
732	};
733};
734
735&uart0 {
736	pinctrl-names = "default";
737	pinctrl-0 = <&uart0_xfer &uart0_rts &uart0_cts>;
738	status = "okay";
739
740	bluetooth {
741		compatible = "brcm,bcm43438-bt";
742		clocks = <&rk808 1>;
743		clock-names = "lpo";
744		device-wakeup-gpios = <&gpio2 RK_PD2 GPIO_ACTIVE_HIGH>;
745		host-wakeup-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_HIGH>;
746		shutdown-gpios = <&gpio2 RK_PD3 GPIO_ACTIVE_HIGH>;
747		max-speed = <4000000>;
748		pinctrl-names = "default";
749		pinctrl-0 = <&bt_reg_on_h &bt_host_wake_l &bt_wake_l>;
750		vbat-supply = <&vsys_3v3>;
751		vddio-supply = <&vcc_1v8>;
752	};
753};
754
755&uart2 {
756	status = "okay";
757};
758
759&usb_host0_ehci {
760	status = "okay";
761};
762
763&usb_host0_ohci {
764	status = "okay";
765};
766
767&usb_host1_ehci {
768	status = "okay";
769};
770
771&usb_host1_ohci {
772	status = "okay";
773};
774
775&usbdrd3_0 {
776	status = "okay";
777};
778
779&usbdrd_dwc3_0 {
780	status = "okay";
781	dr_mode = "otg";
782};
783
784&usbdrd3_1 {
785	status = "okay";
786};
787
788&usbdrd_dwc3_1 {
789	status = "okay";
790	dr_mode = "host";
791};
792
793&vopb {
794	status = "okay";
795};
796
797&vopb_mmu {
798	status = "okay";
799};
800
801&vopl {
802	status = "okay";
803};
804
805&vopl_mmu {
806	status = "okay";
807};
808