1// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2/*
3 * Copyright (c) 2019 Akash Gajjar <Akash_Gajjar@mentor.com>
4 * Copyright (c) 2019 Pragnesh Patel <Pragnesh_Patel@mentor.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	aliases {
15		mmc0 = &sdmmc;
16		mmc1 = &sdhci;
17	};
18
19	chosen {
20		stdout-path = "serial2:1500000n8";
21	};
22
23	clkin_gmac: external-gmac-clock {
24		compatible = "fixed-clock";
25		clock-frequency = <125000000>;
26		clock-output-names = "clkin_gmac";
27		#clock-cells = <0>;
28	};
29
30	sdio_pwrseq: sdio-pwrseq {
31		compatible = "mmc-pwrseq-simple";
32		clocks = <&rk808 1>;
33		clock-names = "ext_clock";
34		pinctrl-names = "default";
35		pinctrl-0 = <&wifi_enable_h>;
36		reset-gpios = <&gpio0 RK_PB2 GPIO_ACTIVE_LOW>;
37	};
38
39	sound: sound {
40		compatible = "audio-graph-card";
41		label = "Analog";
42		dais = <&i2s0_p0>;
43	};
44
45	sound-dit {
46		compatible = "audio-graph-card";
47		label = "SPDIF";
48		dais = <&spdif_p0>;
49	};
50
51	spdif-dit {
52		compatible = "linux,spdif-dit";
53		#sound-dai-cells = <0>;
54
55		port {
56			dit_p0_0: endpoint {
57				remote-endpoint = <&spdif_p0_0>;
58			};
59		};
60	};
61
62	vcc12v_dcin: dc-12v {
63		compatible = "regulator-fixed";
64		regulator-name = "vcc12v_dcin";
65		regulator-always-on;
66		regulator-boot-on;
67		regulator-min-microvolt = <12000000>;
68		regulator-max-microvolt = <12000000>;
69	};
70
71	vcc5v0_sys: vcc-sys {
72		compatible = "regulator-fixed";
73		regulator-name = "vcc5v0_sys";
74		regulator-always-on;
75		regulator-boot-on;
76		regulator-min-microvolt = <5000000>;
77		regulator-max-microvolt = <5000000>;
78		vin-supply = <&vcc12v_dcin>;
79	};
80
81	vcc_0v9: vcc-0v9 {
82		compatible = "regulator-fixed";
83		regulator-name = "vcc_0v9";
84		regulator-always-on;
85		regulator-boot-on;
86		regulator-min-microvolt = <900000>;
87		regulator-max-microvolt = <900000>;
88		vin-supply = <&vcc3v3_sys>;
89	};
90
91	vcc3v3_pcie: vcc3v3-pcie-regulator {
92		compatible = "regulator-fixed";
93		enable-active-high;
94		gpio = <&gpio2 RK_PD2 GPIO_ACTIVE_HIGH>;
95		pinctrl-names = "default";
96		pinctrl-0 = <&pcie_pwr_en>;
97		regulator-name = "vcc3v3_pcie";
98		regulator-always-on;
99		regulator-boot-on;
100		vin-supply = <&vcc5v0_sys>;
101	};
102
103	vcc3v3_sys: vcc3v3-sys {
104		compatible = "regulator-fixed";
105		regulator-name = "vcc3v3_sys";
106		regulator-always-on;
107		regulator-boot-on;
108		regulator-min-microvolt = <3300000>;
109		regulator-max-microvolt = <3300000>;
110		vin-supply = <&vcc5v0_sys>;
111	};
112
113	vcc5v0_host: vcc5v0-host-regulator {
114		compatible = "regulator-fixed";
115		enable-active-high;
116		gpio = <&gpio4 RK_PD1 GPIO_ACTIVE_HIGH>;
117		pinctrl-names = "default";
118		pinctrl-0 = <&vcc5v0_host_en>;
119		regulator-name = "vcc5v0_host";
120		regulator-always-on;
121		vin-supply = <&vcc5v0_sys>;
122	};
123
124	vcc5v0_typec: vcc5v0-typec-regulator {
125		compatible = "regulator-fixed";
126		enable-active-high;
127		gpio = <&gpio1 RK_PA3 GPIO_ACTIVE_HIGH>;
128		pinctrl-names = "default";
129		pinctrl-0 = <&vcc5v0_typec_en>;
130		regulator-name = "vcc5v0_typec";
131		regulator-always-on;
132		vin-supply = <&vcc5v0_sys>;
133	};
134
135	vcc_lan: vcc3v3-phy-regulator {
136		compatible = "regulator-fixed";
137		regulator-name = "vcc_lan";
138		regulator-always-on;
139		regulator-boot-on;
140		regulator-min-microvolt = <3300000>;
141		regulator-max-microvolt = <3300000>;
142	};
143
144	vdd_log: vdd-log {
145		compatible = "pwm-regulator";
146		pwms = <&pwm2 0 25000 1>;
147		pwm-supply = <&vcc5v0_sys>;
148		regulator-name = "vdd_log";
149		regulator-always-on;
150		regulator-boot-on;
151		regulator-min-microvolt = <800000>;
152		regulator-max-microvolt = <1400000>;
153	};
154};
155
156&cpu_l0 {
157	cpu-supply = <&vdd_cpu_l>;
158};
159
160&cpu_l1 {
161	cpu-supply = <&vdd_cpu_l>;
162};
163
164&cpu_l2 {
165	cpu-supply = <&vdd_cpu_l>;
166};
167
168&cpu_l3 {
169	cpu-supply = <&vdd_cpu_l>;
170};
171
172&cpu_b0 {
173	cpu-supply = <&vdd_cpu_b>;
174};
175
176&cpu_b1 {
177	cpu-supply = <&vdd_cpu_b>;
178};
179
180&emmc_phy {
181	status = "okay";
182};
183
184&gmac {
185	assigned-clocks = <&cru SCLK_RMII_SRC>;
186	assigned-clock-parents = <&clkin_gmac>;
187	clock_in_out = "input";
188	phy-supply = <&vcc_lan>;
189	phy-mode = "rgmii";
190	pinctrl-names = "default";
191	pinctrl-0 = <&rgmii_pins>;
192	snps,reset-gpio = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>;
193	snps,reset-active-low;
194	snps,reset-delays-us = <0 10000 50000>;
195	tx_delay = <0x28>;
196	rx_delay = <0x11>;
197	status = "okay";
198};
199
200&gpu {
201	mali-supply = <&vdd_gpu>;
202	status = "okay";
203};
204
205&hdmi {
206	ddc-i2c-bus = <&i2c3>;
207	pinctrl-names = "default";
208	pinctrl-0 = <&hdmi_cec>;
209	status = "okay";
210};
211
212&hdmi_sound {
213	status = "okay";
214};
215
216&i2c0 {
217	clock-frequency = <400000>;
218	i2c-scl-rising-time-ns = <168>;
219	i2c-scl-falling-time-ns = <4>;
220	status = "okay";
221
222	rk808: pmic@1b {
223		compatible = "rockchip,rk808";
224		reg = <0x1b>;
225		interrupt-parent = <&gpio1>;
226		interrupts = <21 IRQ_TYPE_LEVEL_LOW>;
227		#clock-cells = <1>;
228		clock-output-names = "xin32k", "rk808-clkout2";
229		pinctrl-names = "default";
230		pinctrl-0 = <&pmic_int_l>;
231		rockchip,system-power-controller;
232		wakeup-source;
233
234		vcc1-supply = <&vcc5v0_sys>;
235		vcc2-supply = <&vcc5v0_sys>;
236		vcc3-supply = <&vcc5v0_sys>;
237		vcc4-supply = <&vcc5v0_sys>;
238		vcc6-supply = <&vcc5v0_sys>;
239		vcc7-supply = <&vcc5v0_sys>;
240		vcc8-supply = <&vcc3v3_sys>;
241		vcc9-supply = <&vcc5v0_sys>;
242		vcc10-supply = <&vcc5v0_sys>;
243		vcc11-supply = <&vcc5v0_sys>;
244		vcc12-supply = <&vcc3v3_sys>;
245		vddio-supply = <&vcc_1v8>;
246
247		regulators {
248			vdd_center: DCDC_REG1 {
249				regulator-name = "vdd_center";
250				regulator-always-on;
251				regulator-boot-on;
252				regulator-min-microvolt = <750000>;
253				regulator-max-microvolt = <1350000>;
254				regulator-ramp-delay = <6001>;
255				regulator-state-mem {
256					regulator-off-in-suspend;
257				};
258			};
259
260			vdd_cpu_l: DCDC_REG2 {
261				regulator-name = "vdd_cpu_l";
262				regulator-always-on;
263				regulator-boot-on;
264				regulator-min-microvolt = <750000>;
265				regulator-max-microvolt = <1350000>;
266				regulator-ramp-delay = <6001>;
267				regulator-state-mem {
268					regulator-off-in-suspend;
269				};
270			};
271
272			vcc_ddr: DCDC_REG3 {
273				regulator-name = "vcc_ddr";
274				regulator-always-on;
275				regulator-boot-on;
276				regulator-state-mem {
277					regulator-on-in-suspend;
278				};
279			};
280
281			vcc_1v8: DCDC_REG4 {
282				regulator-name = "vcc_1v8";
283				regulator-always-on;
284				regulator-boot-on;
285				regulator-min-microvolt = <1800000>;
286				regulator-max-microvolt = <1800000>;
287				regulator-state-mem {
288					regulator-on-in-suspend;
289					regulator-suspend-microvolt = <1800000>;
290				};
291			};
292
293			vcc1v8_codec: LDO_REG1 {
294				regulator-name = "vcc1v8_codec";
295				regulator-always-on;
296				regulator-boot-on;
297				regulator-min-microvolt = <1800000>;
298				regulator-max-microvolt = <1800000>;
299				regulator-state-mem {
300					regulator-off-in-suspend;
301				};
302			};
303
304			vcc1v8_hdmi: LDO_REG2 {
305				regulator-name = "vcc1v8_hdmi";
306				regulator-always-on;
307				regulator-boot-on;
308				regulator-min-microvolt = <1800000>;
309				regulator-max-microvolt = <1800000>;
310				regulator-state-mem {
311					regulator-off-in-suspend;
312				};
313			};
314
315			vcca_1v8: LDO_REG3 {
316				regulator-name = "vcca_1v8";
317				regulator-always-on;
318				regulator-boot-on;
319				regulator-min-microvolt = <1800000>;
320				regulator-max-microvolt = <1800000>;
321				regulator-state-mem {
322					regulator-on-in-suspend;
323					regulator-suspend-microvolt = <1800000>;
324				};
325			};
326
327			vcc_sdio: LDO_REG4 {
328				regulator-name = "vcc_sdio";
329				regulator-always-on;
330				regulator-boot-on;
331				regulator-min-microvolt = <3000000>;
332				regulator-max-microvolt = <3000000>;
333				regulator-state-mem {
334					regulator-on-in-suspend;
335					regulator-suspend-microvolt = <3000000>;
336				};
337			};
338
339			vcca3v0_codec: LDO_REG5 {
340				regulator-name = "vcca3v0_codec";
341				regulator-always-on;
342				regulator-boot-on;
343				regulator-min-microvolt = <3000000>;
344				regulator-max-microvolt = <3000000>;
345				regulator-state-mem {
346					regulator-off-in-suspend;
347				};
348			};
349
350			vcc_1v5: LDO_REG6 {
351				regulator-name = "vcc_1v5";
352				regulator-always-on;
353				regulator-boot-on;
354				regulator-min-microvolt = <1500000>;
355				regulator-max-microvolt = <1500000>;
356				regulator-state-mem {
357					regulator-on-in-suspend;
358					regulator-suspend-microvolt = <1500000>;
359				};
360			};
361
362			vcc0v9_hdmi: LDO_REG7 {
363				regulator-name = "vcc0v9_hdmi";
364				regulator-always-on;
365				regulator-boot-on;
366				regulator-min-microvolt = <900000>;
367				regulator-max-microvolt = <900000>;
368				regulator-state-mem {
369					regulator-off-in-suspend;
370				};
371			};
372
373			vcc_3v0: LDO_REG8 {
374				regulator-name = "vcc_3v0";
375				regulator-always-on;
376				regulator-boot-on;
377				regulator-min-microvolt = <3000000>;
378				regulator-max-microvolt = <3000000>;
379				regulator-state-mem {
380					regulator-on-in-suspend;
381					regulator-suspend-microvolt = <3000000>;
382				};
383			};
384
385			vcc_cam: SWITCH_REG1 {
386				regulator-name = "vcc_cam";
387				regulator-always-on;
388				regulator-boot-on;
389				regulator-state-mem {
390					regulator-off-in-suspend;
391				};
392			};
393
394			vcc_mipi: SWITCH_REG2 {
395				regulator-name = "vcc_mipi";
396				regulator-always-on;
397				regulator-boot-on;
398				regulator-state-mem {
399					regulator-off-in-suspend;
400				};
401			};
402		};
403	};
404
405	vdd_cpu_b: regulator@40 {
406		compatible = "silergy,syr827";
407		reg = <0x40>;
408		fcs,suspend-voltage-selector = <1>;
409		pinctrl-names = "default";
410		pinctrl-0 = <&vsel1_pin>;
411		regulator-name = "vdd_cpu_b";
412		regulator-min-microvolt = <712500>;
413		regulator-max-microvolt = <1500000>;
414		regulator-ramp-delay = <1000>;
415		regulator-always-on;
416		regulator-boot-on;
417		vin-supply = <&vcc5v0_sys>;
418
419		regulator-state-mem {
420			regulator-off-in-suspend;
421		};
422	};
423
424	vdd_gpu: regulator@41 {
425		compatible = "silergy,syr828";
426		reg = <0x41>;
427		fcs,suspend-voltage-selector = <1>;
428		pinctrl-names = "default";
429		pinctrl-0 = <&vsel2_pin>;
430		regulator-name = "vdd_gpu";
431		regulator-min-microvolt = <712500>;
432		regulator-max-microvolt = <1500000>;
433		regulator-ramp-delay = <1000>;
434		regulator-always-on;
435		regulator-boot-on;
436		vin-supply = <&vcc5v0_sys>;
437
438		regulator-state-mem {
439			regulator-off-in-suspend;
440		};
441	};
442};
443
444&i2c1 {
445	i2c-scl-rising-time-ns = <300>;
446	i2c-scl-falling-time-ns = <15>;
447	status = "okay";
448
449	es8316: codec@11 {
450		compatible = "everest,es8316";
451		reg = <0x11>;
452		clocks = <&cru SCLK_I2S_8CH_OUT>;
453		clock-names = "mclk";
454		#sound-dai-cells = <0>;
455
456		port {
457			es8316_p0_0: endpoint {
458				remote-endpoint = <&i2s0_p0_0>;
459			};
460		};
461	};
462};
463
464&i2c3 {
465	i2c-scl-rising-time-ns = <450>;
466	i2c-scl-falling-time-ns = <15>;
467	status = "okay";
468};
469
470&i2c4 {
471	i2c-scl-rising-time-ns = <600>;
472	i2c-scl-falling-time-ns = <20>;
473	status = "okay";
474};
475
476&i2s0 {
477	pinctrl-0 = <&i2s0_2ch_bus>;
478	rockchip,capture-channels = <2>;
479	rockchip,playback-channels = <2>;
480	status = "okay";
481
482	i2s0_p0: port {
483		i2s0_p0_0: endpoint {
484			dai-format = "i2s";
485			mclk-fs = <256>;
486			remote-endpoint = <&es8316_p0_0>;
487		};
488	};
489};
490
491&i2s1 {
492	rockchip,playback-channels = <2>;
493	rockchip,capture-channels = <2>;
494	status = "okay";
495};
496
497&i2s2 {
498	status = "okay";
499};
500
501&io_domains {
502	status = "okay";
503
504	bt656-supply = <&vcc_3v0>;
505	audio-supply = <&vcc1v8_codec>;
506	sdmmc-supply = <&vcc_sdio>;
507	gpio1830-supply = <&vcc_3v0>;
508};
509
510&pmu_io_domains {
511	status = "okay";
512
513	pmu1830-supply = <&vcc_3v0>;
514};
515
516&pcie_phy {
517	status = "okay";
518};
519
520&pcie0 {
521	ep-gpios = <&gpio4 RK_PD3 GPIO_ACTIVE_HIGH>;
522	num-lanes = <4>;
523	pinctrl-0 = <&pcie_clkreqnb_cpm>;
524	pinctrl-names = "default";
525	vpcie0v9-supply = <&vcc_0v9>;
526	vpcie1v8-supply = <&vcc_1v8>;
527	vpcie3v3-supply = <&vcc3v3_pcie>;
528	status = "okay";
529};
530
531&pinctrl {
532	bt {
533		bt_enable_h: bt-enable-h {
534			rockchip,pins = <0 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>;
535		};
536
537		bt_host_wake_l: bt-host-wake-l {
538			rockchip,pins = <0 RK_PA4 RK_FUNC_GPIO &pcfg_pull_none>;
539		};
540
541		bt_wake_l: bt-wake-l {
542			rockchip,pins = <2 RK_PD3 RK_FUNC_GPIO &pcfg_pull_none>;
543		};
544	};
545
546	es8316 {
547		hp_detect: hp-detect {
548			rockchip,pins = <1 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>;
549		};
550
551		hp_int: hp-int {
552			rockchip,pins = <1 RK_PA1 RK_FUNC_GPIO &pcfg_pull_up>;
553		};
554	};
555
556	pcie {
557		pcie_pwr_en: pcie-pwr-en {
558			rockchip,pins = <2 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>;
559		};
560	};
561
562	sdio0 {
563		sdio0_bus4: sdio0-bus4 {
564			rockchip,pins = <2 RK_PC4 1 &pcfg_pull_up_20ma>,
565					<2 RK_PC5 1 &pcfg_pull_up_20ma>,
566					<2 RK_PC6 1 &pcfg_pull_up_20ma>,
567					<2 RK_PC7 1 &pcfg_pull_up_20ma>;
568		};
569
570		sdio0_cmd: sdio0-cmd {
571			rockchip,pins = <2 RK_PD0 1 &pcfg_pull_up_20ma>;
572		};
573
574		sdio0_clk: sdio0-clk {
575			rockchip,pins = <2 RK_PD1 1 &pcfg_pull_none_20ma>;
576		};
577	};
578
579	pmic {
580		pmic_int_l: pmic-int-l {
581			rockchip,pins = <1 RK_PC5 RK_FUNC_GPIO &pcfg_pull_up>;
582		};
583
584		vsel1_pin: vsel1-pin {
585			rockchip,pins = <1 RK_PC1 RK_FUNC_GPIO &pcfg_pull_down>;
586		};
587
588		vsel2_pin: vsel2-pin {
589			rockchip,pins = <1 RK_PB6 RK_FUNC_GPIO &pcfg_pull_down>;
590		};
591	};
592
593	usb-typec {
594		vcc5v0_typec_en: vcc5v0-typec-en {
595			rockchip,pins = <1 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>;
596		};
597	};
598
599	usb2 {
600		vcc5v0_host_en: vcc5v0-host-en {
601			rockchip,pins = <4 RK_PD1 RK_FUNC_GPIO &pcfg_pull_none>;
602		};
603	};
604
605	wifi {
606		wifi_enable_h: wifi-enable-h {
607			rockchip,pins = <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>;
608		};
609
610		wifi_host_wake_l: wifi-host-wake-l {
611			rockchip,pins = <0 RK_PA3 RK_FUNC_GPIO &pcfg_pull_none>;
612		};
613	};
614};
615
616&pwm2 {
617	status = "okay";
618};
619
620&saradc {
621	status = "okay";
622
623	vref-supply = <&vcc_1v8>;
624};
625
626&sdio0 {
627	#address-cells = <1>;
628	#size-cells = <0>;
629	bus-width = <4>;
630	clock-frequency = <50000000>;
631	cap-sdio-irq;
632	cap-sd-highspeed;
633	keep-power-in-suspend;
634	mmc-pwrseq = <&sdio_pwrseq>;
635	non-removable;
636	pinctrl-names = "default";
637	pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>;
638	sd-uhs-sdr104;
639};
640
641&sdmmc {
642	bus-width = <4>;
643	cap-mmc-highspeed;
644	cap-sd-highspeed;
645	cd-gpios = <&gpio0 RK_PA7 GPIO_ACTIVE_LOW>;
646	disable-wp;
647	max-frequency = <150000000>;
648	pinctrl-names = "default";
649	pinctrl-0 = <&sdmmc_clk &sdmmc_cd &sdmmc_cmd &sdmmc_bus4>;
650	status = "okay";
651};
652
653&sdhci {
654	bus-width = <8>;
655	mmc-hs400-1_8v;
656	mmc-hs400-enhanced-strobe;
657	non-removable;
658	status = "okay";
659};
660
661&spdif {
662
663	spdif_p0: port {
664		spdif_p0_0: endpoint {
665			remote-endpoint = <&dit_p0_0>;
666		};
667	};
668};
669
670&tcphy0 {
671	status = "okay";
672};
673
674&tcphy1 {
675	status = "okay";
676};
677
678&tsadc {
679	status = "okay";
680
681	/* tshut mode 0:CRU 1:GPIO */
682	rockchip,hw-tshut-mode = <1>;
683	/* tshut polarity 0:LOW 1:HIGH */
684	rockchip,hw-tshut-polarity = <1>;
685};
686
687&u2phy0 {
688	status = "okay";
689
690	u2phy0_otg: otg-port {
691		status = "okay";
692	};
693
694	u2phy0_host: host-port {
695		phy-supply = <&vcc5v0_host>;
696		status = "okay";
697	};
698};
699
700&u2phy1 {
701	status = "okay";
702
703	u2phy1_otg: otg-port {
704		status = "okay";
705	};
706
707	u2phy1_host: host-port {
708		phy-supply = <&vcc5v0_host>;
709		status = "okay";
710	};
711};
712
713&uart0 {
714	pinctrl-names = "default";
715	pinctrl-0 = <&uart0_xfer &uart0_cts &uart0_rts>;
716};
717
718&uart2 {
719	status = "okay";
720};
721
722&usb_host0_ehci {
723	status = "okay";
724};
725
726&usb_host0_ohci {
727	status = "okay";
728};
729
730&usb_host1_ehci {
731	status = "okay";
732};
733
734&usb_host1_ohci {
735	status = "okay";
736};
737
738&usbdrd3_0 {
739	status = "okay";
740};
741
742&usbdrd_dwc3_0 {
743	status = "okay";
744	dr_mode = "host";
745};
746
747&usbdrd3_1 {
748	status = "okay";
749};
750
751&usbdrd_dwc3_1 {
752	status = "okay";
753	dr_mode = "host";
754};
755
756&vopb {
757	status = "okay";
758};
759
760&vopb_mmu {
761	status = "okay";
762};
763
764&vopl {
765	status = "okay";
766};
767
768&vopl_mmu {
769	status = "okay";
770};
771