1// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2
3/dts-v1/;
4
5#include <dt-bindings/gpio/gpio.h>
6#include <dt-bindings/pinctrl/rockchip.h>
7#include "rk3566.dtsi"
8
9/ {
10	model = "Pine64 RK3566 Quartz64-B Board";
11	compatible = "pine64,quartz64-b", "rockchip,rk3566";
12
13	aliases {
14		ethernet0 = &gmac1;
15		mmc0 = &sdmmc0;
16		mmc1 = &sdhci;
17		mmc2 = &sdmmc1;
18	};
19
20	chosen: chosen {
21		stdout-path = "serial2:1500000n8";
22	};
23
24	gmac1_clkin: external-gmac1-clock {
25		compatible = "fixed-clock";
26		clock-frequency = <125000000>;
27		clock-output-names = "gmac1_clkin";
28		#clock-cells = <0>;
29	};
30
31	leds {
32		compatible = "gpio-leds";
33
34		led-user {
35			label = "user-led";
36			default-state = "on";
37			gpios = <&gpio0 RK_PA0 GPIO_ACTIVE_HIGH>;
38			linux,default-trigger = "heartbeat";
39			pinctrl-names = "default";
40			pinctrl-0 = <&user_led_enable_h>;
41			retain-state-suspended;
42		};
43	};
44
45	sdio_pwrseq: sdio-pwrseq {
46		status = "okay";
47		compatible = "mmc-pwrseq-simple";
48		clocks = <&rk809 1>;
49		clock-names = "ext_clock";
50		pinctrl-names = "default";
51		pinctrl-0 = <&wifi_enable_h>;
52		reset-gpios = <&gpio0 RK_PC0 GPIO_ACTIVE_LOW>;
53		post-power-on-delay-ms = <100>;
54		power-off-delay-us = <5000000>;
55	};
56
57	vcc5v0_in: vcc5v0-in-regulator {
58		compatible = "regulator-fixed";
59		regulator-name = "vcc5v0_in";
60		regulator-always-on;
61		regulator-boot-on;
62		regulator-min-microvolt = <5000000>;
63		regulator-max-microvolt = <5000000>;
64	};
65
66	vcc5v0_sys: vcc5v0-sys-regulator {
67		compatible = "regulator-fixed";
68		regulator-name = "vcc5v0_sys";
69		regulator-always-on;
70		regulator-boot-on;
71		regulator-min-microvolt = <5000000>;
72		regulator-max-microvolt = <5000000>;
73		vin-supply = <&vcc5v0_in>;
74	};
75
76	vcc3v3_sys: vcc3v3-sys-regulator {
77		compatible = "regulator-fixed";
78		regulator-name = "vcc3v3_sys";
79		regulator-min-microvolt = <3300000>;
80		regulator-max-microvolt = <3300000>;
81		regulator-always-on;
82		vin-supply = <&vcc5v0_sys>;
83	};
84
85	vcc5v0_usb30_host: vcc5v0-usb30-host-regulator {
86		compatible = "regulator-fixed";
87		regulator-name = "vcc5v0_usb30_host";
88		enable-active-high;
89		gpio = <&gpio0 RK_PC5 GPIO_ACTIVE_HIGH>;
90		pinctrl-names = "default";
91		pinctrl-0 = <&vcc5v0_usb30_host_en_h>;
92		regulator-always-on;
93		regulator-min-microvolt = <5000000>;
94		regulator-max-microvolt = <5000000>;
95		vin-supply = <&vcc5v0_sys>;
96	};
97
98	vcc5v0_usb_otg: vcc5v0-usb-otg-regulator {
99		compatible = "regulator-fixed";
100		regulator-name = "vcc5v0_usb_otg";
101		enable-active-high;
102		gpio = <&gpio0 RK_PC6 GPIO_ACTIVE_HIGH>;
103		pinctrl-names = "default";
104		pinctrl-0 = <&vcc5v0_usb_otg_en_h>;
105		regulator-always-on;
106		regulator-min-microvolt = <5000000>;
107		regulator-max-microvolt = <5000000>;
108		vin-supply = <&vcc5v0_sys>;
109	};
110};
111
112&combphy1 {
113	status = "okay";
114};
115
116&cpu0 {
117	cpu-supply = <&vdd_cpu>;
118};
119
120&cpu1 {
121	cpu-supply = <&vdd_cpu>;
122};
123
124&cpu2 {
125	cpu-supply = <&vdd_cpu>;
126};
127
128&cpu3 {
129	cpu-supply = <&vdd_cpu>;
130};
131
132&gmac1 {
133	assigned-clocks = <&cru SCLK_GMAC1_RX_TX>, <&cru SCLK_GMAC1_RGMII_SPEED>, <&cru SCLK_GMAC1>;
134	assigned-clock-parents = <&cru SCLK_GMAC1_RGMII_SPEED>, <&cru SCLK_GMAC1>, <&gmac1_clkin>;
135	clock_in_out = "input";
136	phy-mode = "rgmii";
137	phy-supply = <&vcc_3v3>;
138	pinctrl-names = "default";
139	pinctrl-0 = <&gmac1m1_miim
140		     &gmac1m1_tx_bus2
141		     &gmac1m1_rx_bus2
142		     &gmac1m1_rgmii_clk
143		     &gmac1m1_clkinout
144		     &gmac1m1_rgmii_bus>;
145	snps,reset-gpio = <&gpio3 RK_PC0 GPIO_ACTIVE_LOW>;
146	snps,reset-active-low;
147	/* Reset time is 20ms, 100ms for rtl8211f, also works well here */
148	snps,reset-delays-us = <0 20000 100000>;
149	tx_delay = <0x4f>;
150	rx_delay = <0x24>;
151	phy-handle = <&rgmii_phy1>;
152	status = "okay";
153};
154
155&i2c0 {
156	status = "okay";
157
158	vdd_cpu: regulator@1c {
159		compatible = "tcs,tcs4525";
160		reg = <0x1c>;
161		fcs,suspend-voltage-selector = <1>;
162		regulator-name = "vdd_cpu";
163		regulator-min-microvolt = <800000>;
164		regulator-max-microvolt = <1150000>;
165		regulator-ramp-delay = <2300>;
166		regulator-always-on;
167		regulator-boot-on;
168		vin-supply = <&vcc5v0_sys>;
169
170		regulator-state-mem {
171			regulator-off-in-suspend;
172		};
173	};
174
175	rk809: pmic@20 {
176		compatible = "rockchip,rk809";
177		reg = <0x20>;
178		interrupt-parent = <&gpio0>;
179		interrupts = <RK_PA7 IRQ_TYPE_LEVEL_LOW>;
180		clock-output-names = "rk808-clkout1", "rk808-clkout2";
181
182		pinctrl-names = "default";
183		pinctrl-0 = <&pmic_int>;
184		rockchip,system-power-controller;
185		wakeup-source;
186		#clock-cells = <1>;
187
188		vcc1-supply = <&vcc3v3_sys>;
189		vcc2-supply = <&vcc3v3_sys>;
190		vcc3-supply = <&vcc3v3_sys>;
191		vcc4-supply = <&vcc3v3_sys>;
192		vcc5-supply = <&vcc3v3_sys>;
193		vcc6-supply = <&vcc3v3_sys>;
194		vcc7-supply = <&vcc3v3_sys>;
195		vcc8-supply = <&vcc3v3_sys>;
196		vcc9-supply = <&vcc3v3_sys>;
197
198		regulators {
199			vdd_log: DCDC_REG1 {
200				regulator-name = "vdd_log";
201				regulator-always-on;
202				regulator-boot-on;
203				regulator-min-microvolt = <500000>;
204				regulator-max-microvolt = <1350000>;
205				regulator-init-microvolt = <900000>;
206				regulator-ramp-delay = <6001>;
207
208				regulator-state-mem {
209					regulator-on-in-suspend;
210					regulator-suspend-microvolt = <900000>;
211				};
212			};
213
214			vdd_gpu: DCDC_REG2 {
215				regulator-name = "vdd_gpu";
216				regulator-always-on;
217				regulator-boot-on;
218				regulator-min-microvolt = <900000>;
219				regulator-max-microvolt = <1350000>;
220				regulator-init-microvolt = <900000>;
221				regulator-ramp-delay = <6001>;
222
223				regulator-state-mem {
224					regulator-off-in-suspend;
225					regulator-suspend-microvolt = <900000>;
226				};
227			};
228
229			vcc_ddr: DCDC_REG3 {
230				regulator-name = "vcc_ddr";
231				regulator-always-on;
232				regulator-boot-on;
233				regulator-initial-mode = <0x2>;
234				regulator-state-mem {
235					regulator-on-in-suspend;
236				};
237			};
238
239			vdd_npu: DCDC_REG4 {
240				regulator-name = "vdd_npu";
241				regulator-min-microvolt = <900000>;
242				regulator-max-microvolt = <1350000>;
243				regulator-initial-mode = <0x2>;
244				regulator-state-mem {
245					regulator-off-in-suspend;
246				};
247			};
248
249			vcc_1v8: DCDC_REG5 {
250				regulator-name = "vcc_1v8";
251				regulator-always-on;
252				regulator-boot-on;
253				regulator-min-microvolt = <1800000>;
254				regulator-max-microvolt = <1800000>;
255
256				regulator-state-mem {
257					regulator-on-in-suspend;
258					regulator-suspend-microvolt = <1800000>;
259				};
260			};
261
262			vdda0v9_image: LDO_REG1 {
263				regulator-name = "vdda0v9_image";
264				regulator-always-on;
265				regulator-boot-on;
266				regulator-min-microvolt = <900000>;
267				regulator-max-microvolt = <900000>;
268
269				regulator-state-mem {
270					regulator-on-in-suspend;
271					regulator-suspend-microvolt = <900000>;
272				};
273			};
274
275			vdda_0v9: LDO_REG2 {
276				regulator-name = "vdda_0v9";
277				regulator-always-on;
278				regulator-boot-on;
279				regulator-min-microvolt = <900000>;
280				regulator-max-microvolt = <900000>;
281
282				regulator-state-mem {
283					regulator-on-in-suspend;
284					regulator-suspend-microvolt = <900000>;
285				};
286			};
287
288			vdda0v9_pmu: LDO_REG3 {
289				regulator-name = "vdda0v9_pmu";
290				regulator-always-on;
291				regulator-boot-on;
292				regulator-min-microvolt = <900000>;
293				regulator-max-microvolt = <900000>;
294				regulator-state-mem {
295					regulator-on-in-suspend;
296					regulator-suspend-microvolt = <900000>;
297				};
298			};
299
300			vccio_acodec: LDO_REG4 {
301				regulator-name = "vccio_acodec";
302				regulator-always-on;
303				regulator-boot-on;
304				regulator-min-microvolt = <3300000>;
305				regulator-max-microvolt = <3300000>;
306
307				regulator-state-mem {
308					regulator-on-in-suspend;
309					regulator-suspend-microvolt = <3300000>;
310
311				};
312			};
313
314			vccio_sd: LDO_REG5 {
315				regulator-name = "vccio_sd";
316				regulator-always-on;
317				regulator-boot-on;
318				regulator-min-microvolt = <1800000>;
319				regulator-max-microvolt = <3300000>;
320
321				regulator-state-mem {
322					regulator-on-in-suspend;
323					regulator-suspend-microvolt = <3300000>;
324				};
325			};
326
327			vcc3v3_pmu: LDO_REG6 {
328				regulator-name = "vcc3v3_pmu";
329				regulator-always-on;
330				regulator-boot-on;
331				regulator-min-microvolt = <3300000>;
332				regulator-max-microvolt = <3300000>;
333
334				regulator-state-mem {
335					regulator-on-in-suspend;
336					regulator-suspend-microvolt = <3300000>;
337				};
338			};
339
340			vcca_1v8: LDO_REG7 {
341				regulator-name = "vcca_1v8";
342				regulator-always-on;
343				regulator-boot-on;
344				regulator-min-microvolt = <1800000>;
345				regulator-max-microvolt = <1800000>;
346
347				regulator-state-mem {
348					regulator-on-in-suspend;
349					regulator-suspend-microvolt = <1800000>;
350				};
351			};
352
353			vcca1v8_pmu: LDO_REG8 {
354				regulator-name = "vcca1v8_pmu";
355				regulator-always-on;
356				regulator-boot-on;
357				regulator-min-microvolt = <1800000>;
358				regulator-max-microvolt = <1800000>;
359
360				regulator-state-mem {
361					regulator-on-in-suspend;
362					regulator-suspend-microvolt = <1800000>;
363				};
364			};
365
366			vcca1v8_image: LDO_REG9 {
367				regulator-name = "vcca1v8_image";
368				regulator-always-on;
369				regulator-boot-on;
370				regulator-min-microvolt = <1800000>;
371				regulator-max-microvolt = <1800000>;
372
373				regulator-state-mem {
374					regulator-on-in-suspend;
375					regulator-suspend-microvolt = <1800000>;
376				};
377			};
378
379			vcc_3v3: SWITCH_REG1 {
380				regulator-boot-on;
381				regulator-name = "vcc_3v3";
382			};
383
384			vcc3v3_sd: SWITCH_REG2 {
385				regulator-name = "vcc3v3_sd";
386			};
387		};
388	};
389};
390
391/* i2c2_m1 exposed on csi port, pulled up to vcc_3v3 */
392&i2c2 {
393	pinctrl-names = "default";
394	pinctrl-0 = <&i2c2m1_xfer>;
395	status = "okay";
396};
397
398/* i2c3_m1 exposed on dsi port, pulled up to vcc_3v3 */
399&i2c3 {
400	pinctrl-names = "default";
401	pinctrl-0 = <&i2c3m1_xfer>;
402	status = "okay";
403};
404
405/*
406 * i2c4_m0 is exposed on PI40, pulled up to vcc_3v3
407 * pin 27 - i2c4_sda_m0
408 * pin 28 - i2c4_scl_m0
409 */
410&i2c4 {
411	status = "okay";
412};
413
414/*
415 * i2c5_m0 is exposed on PI40
416 * pin 29 - i2c5_scl_m0
417 * pin 31 - i2c5_sda_m0
418 */
419&i2c5 {
420	status = "disabled";
421};
422
423&mdio1 {
424	rgmii_phy1: ethernet-phy@1 {
425		compatible = "ethernet-phy-ieee802.3-c22";
426		reg = <0x1>;
427	};
428};
429
430&pinctrl {
431	bt {
432		bt_enable_h: bt-enable-h {
433			rockchip,pins = <0 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none>;
434		};
435
436		bt_host_wake_l: bt-host-wake-l {
437			rockchip,pins = <0 RK_PB3 RK_FUNC_GPIO &pcfg_pull_down>;
438		};
439
440		bt_wake_l: bt-wake-l {
441			rockchip,pins = <0 RK_PB4 RK_FUNC_GPIO &pcfg_pull_none>;
442		};
443	};
444
445	leds {
446		user_led_enable_h: user-led-enable-h {
447			rockchip,pins = <0 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>;
448		};
449	};
450
451	pmic {
452		pmic_int: pmic_int {
453			rockchip,pins =
454				<0 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>;
455		};
456	};
457
458	sdio-pwrseq {
459		wifi_enable_h: wifi-enable-h {
460			rockchip,pins = <0 RK_PC0 RK_FUNC_GPIO &pcfg_pull_none>;
461		};
462	};
463
464	usb {
465		vcc5v0_usb30_host_en_h: vcc5v0-usb30-host-en_h {
466			rockchip,pins = <0 RK_PC5 RK_FUNC_GPIO &pcfg_pull_none>;
467		};
468
469		vcc5v0_usb_otg_en_h: vcc5v0-usb-otg-en_h {
470			rockchip,pins = <0 RK_PC6 RK_FUNC_GPIO &pcfg_pull_none>;
471		};
472	};
473};
474
475&pmu_io_domains {
476	status = "okay";
477	pmuio1-supply = <&vcc3v3_pmu>;
478	pmuio2-supply = <&vcca1v8_pmu>;
479	vccio1-supply = <&vccio_acodec>;
480	vccio2-supply = <&vcc_1v8>;
481	vccio3-supply = <&vccio_sd>;
482	vccio4-supply = <&vcca1v8_pmu>;
483	vccio5-supply = <&vcc_3v3>;
484	vccio6-supply = <&vcc_3v3>;
485	vccio7-supply = <&vcc_3v3>;
486};
487
488&saradc {
489	vref-supply = <&vcca_1v8>;
490	status = "okay";
491};
492
493&sdhci {
494	bus-width = <8>;
495	mmc-hs200-1_8v;
496	non-removable;
497	vmmc-supply = <&vcc_3v3>;
498	vqmmc-supply = <&vcc_1v8>;
499	status = "okay";
500};
501
502&sdmmc0 {
503	bus-width = <4>;
504	cap-sd-highspeed;
505	cd-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_LOW>;
506	disable-wp;
507	pinctrl-names = "default";
508	pinctrl-0 = <&sdmmc0_bus4 &sdmmc0_clk &sdmmc0_cmd &sdmmc0_det>;
509	sd-uhs-sdr50;
510	vmmc-supply = <&vcc3v3_sd>;
511	vqmmc-supply = <&vccio_sd>;
512	status = "okay";
513};
514
515&sdmmc1 {
516	bus-width = <4>;
517	cap-sd-highspeed;
518	cap-sdio-irq;
519	keep-power-in-suspend;
520	mmc-pwrseq = <&sdio_pwrseq>;
521	non-removable;
522	pinctrl-names = "default";
523	pinctrl-0 = <&sdmmc1_bus4 &sdmmc1_cmd &sdmmc1_clk>;
524	vmmc-supply = <&vcc3v3_sys>;
525	vqmmc-supply = <&vcca1v8_pmu>;
526	status = "okay";
527};
528
529&sfc {
530	pinctrl-0 = <&fspi_pins>;
531	pinctrl-names = "default";
532	#address-cells = <1>;
533	#size-cells = <0>;
534	status = "okay";
535
536	flash@0 {
537		compatible = "jedec,spi-nor";
538		reg = <0>;
539		spi-max-frequency = <24000000>;
540		spi-rx-bus-width = <4>;
541		spi-tx-bus-width = <1>;
542	};
543};
544
545&tsadc {
546	status = "okay";
547};
548
549&uart1 {
550	pinctrl-names = "default";
551	pinctrl-0 = <&uart1m0_xfer &uart1m0_ctsn &uart1m0_rtsn>;
552	status = "okay";
553	uart-has-rtscts;
554
555	bluetooth {
556		compatible = "brcm,bcm4345c5";
557		clocks = <&rk809 1>;
558		clock-names = "lpo";
559		device-wakeup-gpios = <&gpio0 RK_PB4 GPIO_ACTIVE_HIGH>;
560		host-wakeup-gpios = <&gpio0 RK_PB3 GPIO_ACTIVE_HIGH>;
561		shutdown-gpios = <&gpio0 RK_PC1 GPIO_ACTIVE_HIGH>;
562		pinctrl-names = "default";
563		pinctrl-0 = <&bt_host_wake_l &bt_wake_l &bt_enable_h>;
564		vbat-supply = <&vcc3v3_sys>;
565		vddio-supply = <&vcca1v8_pmu>;
566	};
567};
568
569/*
570 * uart2_m0 is exposed on PI40
571 * pin 8  - uart2_tx_m0
572 * pin 10 - uart2_rx_m0
573 */
574&uart2 {
575	status = "okay";
576};
577
578&usb2phy0_host {
579	phy-supply = <&vcc5v0_usb30_host>;
580	status = "okay";
581};
582
583&usb2phy0_otg {
584	phy-supply = <&vcc5v0_usb_otg>;
585	status = "okay";
586};
587
588&usb2phy1_otg {
589	phy-supply = <&vcc5v0_usb30_host>;
590	status = "okay";
591};
592
593&usb2phy0 {
594	status = "okay";
595};
596
597&usb2phy1 {
598	status = "okay";
599};
600
601&usb_host0_xhci {
602	status = "okay";
603};
604
605&usb_host1_xhci {
606	status = "okay";
607};
608
609&usb_host0_ehci {
610	status = "okay";
611};
612
613&usb_host0_ohci {
614	status = "okay";
615};
616