1// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2/*
3 * Copyright (c) 2017 Fuzhou Rockchip Electronics Co., Ltd.
4 */
5
6#include "dt-bindings/pwm/pwm.h"
7#include "dt-bindings/input/input.h"
8#include "rk3399.dtsi"
9#include "rk3399-opp.dtsi"
10
11/ {
12	compatible = "rockchip,rk3399-sapphire", "rockchip,rk3399";
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	dc_12v: dc-12v {
31		compatible = "regulator-fixed";
32		regulator-name = "dc_12v";
33		regulator-always-on;
34		regulator-boot-on;
35		regulator-min-microvolt = <12000000>;
36		regulator-max-microvolt = <12000000>;
37	};
38
39	/*
40	 * The fan power supply comes from the baseboard.
41	 * For the standalone Sapphire one option is to connect a wire
42	 * from  R90030 DNP R0805 pin2  to  C90002 10uF C0805 pin1 (vcc_sys).
43	 */
44	fan0: gpio-fan {
45		#cooling-cells = <2>;
46		compatible = "gpio-fan";
47		gpio-fan,speed-map = <0 0 3000 1>;
48		gpios = <&gpio1 RK_PC2 GPIO_ACTIVE_HIGH>;
49		status = "okay";
50	};
51
52	keys: gpio-keys {
53		compatible = "gpio-keys";
54		autorepeat;
55
56		key-power {
57			debounce-interval = <100>;
58			gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>;
59			label = "GPIO Power";
60			linux,code = <KEY_POWER>;
61			linux,input-type = <1>;
62			pinctrl-names = "default";
63			pinctrl-0 = <&pwr_btn>;
64			wakeup-source;
65		};
66	};
67
68	/* switched by pmic_sleep */
69	vcc1v8_s3: vcca1v8_s3: vcc1v8-s3 {
70		compatible = "regulator-fixed";
71		regulator-name = "vcc1v8_s3";
72		regulator-always-on;
73		regulator-boot-on;
74		regulator-min-microvolt = <1800000>;
75		regulator-max-microvolt = <1800000>;
76		vin-supply = <&vcc_1v8>;
77	};
78
79	vcc3v0_sd: vcc3v0-sd {
80		compatible = "regulator-fixed";
81		enable-active-high;
82		gpio = <&gpio0 RK_PA1 GPIO_ACTIVE_HIGH>;
83		pinctrl-names = "default";
84		pinctrl-0 = <&sdmmc0_pwr_h>;
85		regulator-always-on;
86		regulator-max-microvolt = <3000000>;
87		regulator-min-microvolt = <3000000>;
88		regulator-name = "vcc3v0_sd";
89		vin-supply = <&vcc3v3_sys>;
90	};
91
92	vcc3v3_sys: vcc3v3-sys {
93		compatible = "regulator-fixed";
94		regulator-name = "vcc3v3_sys";
95		regulator-always-on;
96		regulator-boot-on;
97		regulator-min-microvolt = <3300000>;
98		regulator-max-microvolt = <3300000>;
99		vin-supply = <&vcc_sys>;
100	};
101
102	vcc5v0_host: vcc5v0-host-regulator {
103		compatible = "regulator-fixed";
104		enable-active-high;
105		gpio = <&gpio4 RK_PD1 GPIO_ACTIVE_HIGH>;
106		pinctrl-names = "default";
107		pinctrl-0 = <&vcc5v0_host_en>;
108		regulator-name = "vcc5v0_host";
109		regulator-always-on;
110		vin-supply = <&vcc_sys>;
111	};
112
113	vcc5v0_typec0: vcc5v0-typec0-regulator {
114		compatible = "regulator-fixed";
115		enable-active-high;
116		gpio = <&gpio2 RK_PA0 GPIO_ACTIVE_HIGH>;
117		pinctrl-names = "default";
118		pinctrl-0 = <&vcc5v0_typec0_en>;
119		regulator-name = "vcc5v0_typec0";
120		vin-supply = <&vcc_sys>;
121	};
122
123	vcc_sys: vcc-sys {
124		compatible = "regulator-fixed";
125		regulator-name = "vcc_sys";
126		regulator-always-on;
127		regulator-boot-on;
128		regulator-min-microvolt = <5000000>;
129		regulator-max-microvolt = <5000000>;
130		vin-supply = <&dc_12v>;
131	};
132
133	vdd_log: vdd-log {
134		compatible = "pwm-regulator";
135		pwms = <&pwm2 0 25000 1>;
136		pwm-supply = <&vcc_sys>;
137		regulator-name = "vdd_log";
138		regulator-always-on;
139		regulator-boot-on;
140		regulator-min-microvolt = <800000>;
141		regulator-max-microvolt = <1400000>;
142	};
143};
144
145&cpu_l0 {
146	cpu-supply = <&vdd_cpu_l>;
147};
148
149&cpu_l1 {
150	cpu-supply = <&vdd_cpu_l>;
151};
152
153&cpu_l2 {
154	cpu-supply = <&vdd_cpu_l>;
155};
156
157&cpu_l3 {
158	cpu-supply = <&vdd_cpu_l>;
159};
160
161&cpu_b0 {
162	cpu-supply = <&vdd_cpu_b>;
163};
164
165&cpu_b1 {
166	cpu-supply = <&vdd_cpu_b>;
167};
168
169&cpu_thermal {
170	trips {
171		cpu_hot: cpu_hot {
172			hysteresis = <10000>;
173			temperature = <55000>;
174			type = "active";
175		};
176	};
177
178	cooling-maps {
179		map2 {
180			cooling-device =
181				<&fan0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
182			trip = <&cpu_hot>;
183		};
184	};
185};
186
187&emmc_phy {
188	status = "okay";
189};
190
191&gmac {
192	assigned-clocks = <&cru SCLK_RMII_SRC>;
193	assigned-clock-parents = <&clkin_gmac>;
194	clock_in_out = "input";
195	phy-supply = <&vcc_lan>;
196	phy-mode = "rgmii";
197	pinctrl-names = "default";
198	pinctrl-0 = <&rgmii_pins>;
199	snps,reset-gpio = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>;
200	snps,reset-active-low;
201	snps,reset-delays-us = <0 10000 50000>;
202	tx_delay = <0x28>;
203	rx_delay = <0x11>;
204	status = "okay";
205};
206
207&gpu {
208	mali-supply = <&vdd_gpu>;
209	status = "okay";
210};
211
212&hdmi {
213	ddc-i2c-bus = <&i2c3>;
214	status = "okay";
215};
216
217&hdmi_sound {
218	status = "okay";
219};
220
221&i2c0 {
222	clock-frequency = <400000>;
223	i2c-scl-rising-time-ns = <168>;
224	i2c-scl-falling-time-ns = <4>;
225	status = "okay";
226
227	rk808: pmic@1b {
228		compatible = "rockchip,rk808";
229		reg = <0x1b>;
230		interrupt-parent = <&gpio1>;
231		interrupts = <21 IRQ_TYPE_LEVEL_LOW>;
232		#clock-cells = <1>;
233		clock-output-names = "xin32k", "rk808-clkout2";
234		pinctrl-names = "default";
235		pinctrl-0 = <&pmic_int_l>;
236		rockchip,system-power-controller;
237		wakeup-source;
238
239		vcc1-supply = <&vcc_sys>;
240		vcc2-supply = <&vcc_sys>;
241		vcc3-supply = <&vcc_sys>;
242		vcc4-supply = <&vcc_sys>;
243		vcc6-supply = <&vcc_sys>;
244		vcc7-supply = <&vcc_sys>;
245		vcc8-supply = <&vcc3v3_sys>;
246		vcc9-supply = <&vcc_sys>;
247		vcc10-supply = <&vcc_sys>;
248		vcc11-supply = <&vcc_sys>;
249		vcc12-supply = <&vcc3v3_sys>;
250		vddio-supply = <&vcc1v8_pmu>;
251
252		regulators {
253			vdd_center: DCDC_REG1 {
254				regulator-name = "vdd_center";
255				regulator-always-on;
256				regulator-boot-on;
257				regulator-min-microvolt = <750000>;
258				regulator-max-microvolt = <1350000>;
259				regulator-ramp-delay = <6001>;
260				regulator-state-mem {
261					regulator-off-in-suspend;
262				};
263			};
264
265			vdd_cpu_l: DCDC_REG2 {
266				regulator-name = "vdd_cpu_l";
267				regulator-always-on;
268				regulator-boot-on;
269				regulator-min-microvolt = <750000>;
270				regulator-max-microvolt = <1350000>;
271				regulator-ramp-delay = <6001>;
272				regulator-state-mem {
273					regulator-off-in-suspend;
274				};
275			};
276
277			vcc_ddr: DCDC_REG3 {
278				regulator-name = "vcc_ddr";
279				regulator-always-on;
280				regulator-boot-on;
281				regulator-state-mem {
282					regulator-on-in-suspend;
283				};
284			};
285
286			vcc_1v8: DCDC_REG4 {
287				regulator-name = "vcc_1v8";
288				regulator-always-on;
289				regulator-boot-on;
290				regulator-min-microvolt = <1800000>;
291				regulator-max-microvolt = <1800000>;
292				regulator-state-mem {
293					regulator-on-in-suspend;
294					regulator-suspend-microvolt = <1800000>;
295				};
296			};
297
298			vcc1v8_dvp: LDO_REG1 {
299				regulator-name = "vcc1v8_dvp";
300				regulator-always-on;
301				regulator-boot-on;
302				regulator-min-microvolt = <1800000>;
303				regulator-max-microvolt = <1800000>;
304				regulator-state-mem {
305					regulator-off-in-suspend;
306				};
307			};
308
309			vcc3v0_tp: LDO_REG2 {
310				regulator-name = "vcc3v0_tp";
311				regulator-always-on;
312				regulator-boot-on;
313				regulator-min-microvolt = <3000000>;
314				regulator-max-microvolt = <3000000>;
315				regulator-state-mem {
316					regulator-off-in-suspend;
317				};
318			};
319
320			vcc1v8_pmu: LDO_REG3 {
321				regulator-name = "vcc1v8_pmu";
322				regulator-always-on;
323				regulator-boot-on;
324				regulator-min-microvolt = <1800000>;
325				regulator-max-microvolt = <1800000>;
326				regulator-state-mem {
327					regulator-on-in-suspend;
328					regulator-suspend-microvolt = <1800000>;
329				};
330			};
331
332			vcc_sdio: LDO_REG4 {
333				regulator-name = "vcc_sdio";
334				regulator-always-on;
335				regulator-boot-on;
336				regulator-min-microvolt = <1800000>;
337				regulator-max-microvolt = <3300000>;
338				regulator-state-mem {
339					regulator-on-in-suspend;
340					regulator-suspend-microvolt = <3000000>;
341				};
342			};
343
344			vcca3v0_codec: LDO_REG5 {
345				regulator-name = "vcca3v0_codec";
346				regulator-always-on;
347				regulator-boot-on;
348				regulator-min-microvolt = <3000000>;
349				regulator-max-microvolt = <3000000>;
350				regulator-state-mem {
351					regulator-off-in-suspend;
352				};
353			};
354
355			vcc_1v5: LDO_REG6 {
356				regulator-name = "vcc_1v5";
357				regulator-always-on;
358				regulator-boot-on;
359				regulator-min-microvolt = <1500000>;
360				regulator-max-microvolt = <1500000>;
361				regulator-state-mem {
362					regulator-on-in-suspend;
363					regulator-suspend-microvolt = <1500000>;
364				};
365			};
366
367			vcca1v8_codec: LDO_REG7 {
368				regulator-name = "vcca1v8_codec";
369				regulator-always-on;
370				regulator-boot-on;
371				regulator-min-microvolt = <1800000>;
372				regulator-max-microvolt = <1800000>;
373				regulator-state-mem {
374					regulator-off-in-suspend;
375				};
376			};
377
378			vcc_3v0: LDO_REG8 {
379				regulator-name = "vcc_3v0";
380				regulator-always-on;
381				regulator-boot-on;
382				regulator-min-microvolt = <3000000>;
383				regulator-max-microvolt = <3000000>;
384				regulator-state-mem {
385					regulator-on-in-suspend;
386					regulator-suspend-microvolt = <3000000>;
387				};
388			};
389
390			vcc3v3_s3: vcc_lan: SWITCH_REG1 {
391				regulator-name = "vcc3v3_s3";
392				regulator-always-on;
393				regulator-boot-on;
394				regulator-state-mem {
395					regulator-off-in-suspend;
396				};
397			};
398
399			vcc3v3_s0: SWITCH_REG2 {
400				regulator-name = "vcc3v3_s0";
401				regulator-always-on;
402				regulator-boot-on;
403				regulator-state-mem {
404					regulator-off-in-suspend;
405				};
406			};
407		};
408	};
409
410	vdd_cpu_b: regulator@40 {
411		compatible = "silergy,syr827";
412		reg = <0x40>;
413		fcs,suspend-voltage-selector = <1>;
414		regulator-name = "vdd_cpu_b";
415		regulator-min-microvolt = <712500>;
416		regulator-max-microvolt = <1500000>;
417		regulator-ramp-delay = <1000>;
418		regulator-always-on;
419		regulator-boot-on;
420		vin-supply = <&vcc_sys>;
421
422		regulator-state-mem {
423			regulator-off-in-suspend;
424		};
425	};
426
427	vdd_gpu: regulator@41 {
428		compatible = "silergy,syr828";
429		reg = <0x41>;
430		fcs,suspend-voltage-selector = <1>;
431		regulator-name = "vdd_gpu";
432		regulator-min-microvolt = <712500>;
433		regulator-max-microvolt = <1500000>;
434		regulator-ramp-delay = <1000>;
435		regulator-always-on;
436		regulator-boot-on;
437		vin-supply = <&vcc_sys>;
438
439		regulator-state-mem {
440			regulator-off-in-suspend;
441		};
442	};
443};
444
445&i2c3 {
446	i2c-scl-rising-time-ns = <450>;
447	i2c-scl-falling-time-ns = <15>;
448	status = "okay";
449};
450
451&i2s2 {
452	status = "okay";
453};
454
455&io_domains {
456	status = "okay";
457
458	bt656-supply = <&vcc_3v0>;
459	audio-supply = <&vcca1v8_codec>;
460	sdmmc-supply = <&vcc_sdio>;
461	gpio1830-supply = <&vcc_3v0>;
462};
463
464&pmu_io_domains {
465	pmu1830-supply = <&vcc_3v0>;
466	status = "okay";
467};
468
469&pinctrl {
470	buttons {
471		pwr_btn: pwr-btn {
472			rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_up>;
473		};
474	};
475
476	fan {
477		motor_pwr: motor-pwr {
478			rockchip,pins =
479				<1 RK_PC2 RK_FUNC_GPIO &pcfg_pull_none>;
480		};
481	};
482
483	pmic {
484		pmic_int_l: pmic-int-l {
485			rockchip,pins =
486				<1 RK_PC5 RK_FUNC_GPIO &pcfg_pull_up>;
487		};
488
489		vsel1_pin: vsel1-pin {
490			rockchip,pins = <1 RK_PC1 RK_FUNC_GPIO &pcfg_pull_down>;
491		};
492
493		vsel2_pin: vsel2-pin {
494			rockchip,pins = <1 RK_PB6 RK_FUNC_GPIO &pcfg_pull_down>;
495		};
496	};
497
498	sd {
499		sdmmc0_pwr_h: sdmmc0-pwr-h {
500			rockchip,pins =
501				<0 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>;
502		};
503	};
504
505	usb2 {
506		vcc5v0_host_en: vcc5v0-host-en {
507			rockchip,pins =
508				<4 RK_PD1 RK_FUNC_GPIO &pcfg_pull_none>;
509		};
510		vcc5v0_typec0_en: vcc5v0-typec0-en {
511			rockchip,pins =
512				<2 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>;
513		};
514	};
515};
516
517&pwm0 {
518	status = "okay";
519};
520
521&pwm2 {
522	status = "okay";
523};
524
525&saradc {
526	vref-supply = <&vcca1v8_s3>;
527	status = "okay";
528};
529
530&sdhci {
531	bus-width = <8>;
532	mmc-hs400-1_8v;
533	mmc-hs400-enhanced-strobe;
534	non-removable;
535	status = "okay";
536};
537
538&sdmmc {
539	broken-cd;
540	bus-width = <4>;
541	cap-mmc-highspeed;
542	cap-sd-highspeed;
543	clock-frequency = <150000000>;
544	disable-wp;
545	max-frequency = <150000000>;
546	pinctrl-names = "default";
547	pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;
548	vmmc-supply = <&vcc3v0_sd>;
549	vqmmc-supply = <&vcc_sdio>;
550	status = "okay";
551};
552
553&tcphy0 {
554	status = "okay";
555};
556
557&tcphy1 {
558	status = "okay";
559};
560
561&tsadc {
562	/* tshut mode 0:CRU 1:GPIO */
563	rockchip,hw-tshut-mode = <1>;
564	/* tshut polarity 0:LOW 1:HIGH */
565	rockchip,hw-tshut-polarity = <1>;
566	status = "okay";
567};
568
569&u2phy0 {
570	status = "okay";
571
572	u2phy0_otg: otg-port {
573		status = "okay";
574	};
575
576	u2phy0_host: host-port {
577		phy-supply = <&vcc5v0_typec0>;
578		status = "okay";
579	};
580};
581
582&u2phy1 {
583	status = "okay";
584
585	u2phy1_otg: otg-port {
586		status = "okay";
587	};
588
589	u2phy1_host: host-port {
590		phy-supply = <&vcc5v0_host>;
591		status = "okay";
592	};
593};
594
595&uart0 {
596	pinctrl-names = "default";
597	pinctrl-0 = <&uart0_xfer &uart0_cts>;
598	status = "okay";
599};
600
601&uart2 {
602	status = "okay";
603};
604
605&usb_host0_ehci {
606	status = "okay";
607};
608
609&usb_host0_ohci {
610	status = "okay";
611};
612
613&usb_host1_ehci {
614	status = "okay";
615};
616
617&usb_host1_ohci {
618	status = "okay";
619};
620
621&usbdrd3_0 {
622	status = "okay";
623};
624
625&usbdrd_dwc3_0 {
626	status = "okay";
627	dr_mode = "host";
628};
629
630&usbdrd3_1 {
631	status = "okay";
632};
633
634&usbdrd_dwc3_1 {
635	status = "okay";
636	dr_mode = "host";
637};
638
639&vopb {
640	status = "okay";
641};
642
643&vopb_mmu {
644	status = "okay";
645};
646
647&vopl {
648	status = "okay";
649};
650
651&vopl_mmu {
652	status = "okay";
653};
654