1// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2/*
3 * Google Veyron (and derivatives) board device tree source
4 *
5 * Copyright 2015 Google, Inc
6 */
7
8#include <dt-bindings/clock/rockchip,rk808.h>
9#include <dt-bindings/input/input.h>
10#include "rk3288.dtsi"
11
12/ {
13	chosen {
14		stdout-path = "serial2:115200n8";
15	};
16
17	/*
18	 * The default coreboot on veyron devices ignores memory@0 nodes
19	 * and would instead create another memory node.
20	 */
21	memory {
22		device_type = "memory";
23		reg = <0x0 0x0 0x0 0x80000000>;
24	};
25
26
27	power_button: power-button {
28		compatible = "gpio-keys";
29		pinctrl-names = "default";
30		pinctrl-0 = <&pwr_key_l>;
31
32		power {
33			label = "Power";
34			gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>;
35			linux,code = <KEY_POWER>;
36			debounce-interval = <100>;
37			wakeup-source;
38		};
39	};
40
41	gpio-restart {
42		compatible = "gpio-restart";
43		gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_HIGH>;
44		pinctrl-names = "default";
45		pinctrl-0 = <&ap_warm_reset_h>;
46		priority = <200>;
47	};
48
49	emmc_pwrseq: emmc-pwrseq {
50		compatible = "mmc-pwrseq-emmc";
51		pinctrl-0 = <&emmc_reset>;
52		pinctrl-names = "default";
53		reset-gpios = <&gpio2 RK_PB1 GPIO_ACTIVE_HIGH>;
54	};
55
56	sdio_pwrseq: sdio-pwrseq {
57		compatible = "mmc-pwrseq-simple";
58		clocks = <&rk808 RK808_CLKOUT1>;
59		clock-names = "ext_clock";
60		pinctrl-names = "default";
61		pinctrl-0 = <&wifi_enable_h>;
62
63		/*
64		 * Depending on the actual card populated GPIO4 D4
65		 * correspond to one of these signals on the module:
66		 *
67		 * D4:
68		 * - SDIO_RESET_L_WL_REG_ON
69		 * - PDN (power down when low)
70		 */
71		reset-gpios = <&gpio4 RK_PD4 GPIO_ACTIVE_LOW>;
72	};
73
74	vcc_5v: vcc-5v {
75		compatible = "regulator-fixed";
76		regulator-name = "vcc_5v";
77		regulator-always-on;
78		regulator-boot-on;
79		regulator-min-microvolt = <5000000>;
80		regulator-max-microvolt = <5000000>;
81	};
82
83	vcc33_sys: vcc33-sys {
84		compatible = "regulator-fixed";
85		regulator-name = "vcc33_sys";
86		regulator-always-on;
87		regulator-boot-on;
88		regulator-min-microvolt = <3300000>;
89		regulator-max-microvolt = <3300000>;
90	};
91
92	vcc50_hdmi: vcc50-hdmi {
93		compatible = "regulator-fixed";
94		regulator-name = "vcc50_hdmi";
95		regulator-always-on;
96		regulator-boot-on;
97		vin-supply = <&vcc_5v>;
98	};
99
100	vdd_logic: vdd-logic {
101		compatible = "pwm-regulator";
102		regulator-name = "vdd_logic";
103
104		pwms = <&pwm1 0 1994 0>;
105		pwm-supply = <&vcc33_sys>;
106
107		pwm-dutycycle-range = <0x7b 0>;
108		pwm-dutycycle-unit = <0x94>;
109
110		regulator-always-on;
111		regulator-boot-on;
112		regulator-min-microvolt = <950000>;
113		regulator-max-microvolt = <1350000>;
114		regulator-ramp-delay = <4000>;
115	};
116};
117
118&cpu0 {
119	cpu0-supply = <&vdd_cpu>;
120};
121
122&cpu_crit {
123	temperature = <100000>;
124};
125
126/* rk3288-c used in Veyron Chrome-devices has slightly changed OPPs */
127&cpu_opp_table {
128	/delete-node/ opp-312000000;
129
130	opp-1512000000 {
131		opp-microvolt = <1250000>;
132	};
133	opp-1608000000 {
134		opp-microvolt = <1300000>;
135	};
136	opp-1704000000 {
137		opp-hz = /bits/ 64 <1704000000>;
138		opp-microvolt = <1350000>;
139	};
140	opp-1800000000 {
141		opp-hz = /bits/ 64 <1800000000>;
142		opp-microvolt = <1400000>;
143	};
144};
145
146&emmc {
147	status = "okay";
148
149	bus-width = <8>;
150	cap-mmc-highspeed;
151	rockchip,default-sample-phase = <158>;
152	disable-wp;
153	mmc-hs200-1_8v;
154	mmc-pwrseq = <&emmc_pwrseq>;
155	non-removable;
156	pinctrl-names = "default";
157	pinctrl-0 = <&emmc_clk &emmc_cmd &emmc_bus8>;
158};
159
160&gpu {
161	mali-supply = <&vdd_gpu>;
162	status = "okay";
163};
164
165&gpu_alert0 {
166	temperature = <72500>;
167};
168
169&gpu_crit {
170	temperature = <100000>;
171};
172
173&hdmi {
174	pinctrl-names = "default", "unwedge";
175	pinctrl-0 = <&hdmi_ddc>;
176	pinctrl-1 = <&hdmi_ddc_unwedge>;
177	status = "okay";
178};
179
180&i2c0 {
181	status = "okay";
182
183	clock-frequency = <400000>;
184	i2c-scl-falling-time-ns = <50>;		/* 2.5ns measured */
185	i2c-scl-rising-time-ns = <100>;		/* 45ns measured */
186
187	rk808: pmic@1b {
188		compatible = "rockchip,rk808";
189		reg = <0x1b>;
190		clock-output-names = "xin32k", "wifibt_32kin";
191		interrupt-parent = <&gpio0>;
192		interrupts = <RK_PA4 IRQ_TYPE_LEVEL_LOW>;
193		pinctrl-names = "default";
194		pinctrl-0 = <&pmic_int_l>;
195		rockchip,system-power-controller;
196		wakeup-source;
197		#clock-cells = <1>;
198
199		vcc1-supply = <&vcc33_sys>;
200		vcc2-supply = <&vcc33_sys>;
201		vcc3-supply = <&vcc33_sys>;
202		vcc4-supply = <&vcc33_sys>;
203		vcc6-supply = <&vcc_5v>;
204		vcc7-supply = <&vcc33_sys>;
205		vcc8-supply = <&vcc33_sys>;
206		vcc12-supply = <&vcc_18>;
207		vddio-supply = <&vcc33_io>;
208
209		regulators {
210			vdd_cpu: DCDC_REG1 {
211				regulator-name = "vdd_arm";
212				regulator-always-on;
213				regulator-boot-on;
214				regulator-min-microvolt = <750000>;
215				regulator-max-microvolt = <1450000>;
216				regulator-ramp-delay = <6001>;
217				regulator-state-mem {
218					regulator-off-in-suspend;
219				};
220			};
221
222			vdd_gpu: DCDC_REG2 {
223				regulator-name = "vdd_gpu";
224				regulator-always-on;
225				regulator-boot-on;
226				regulator-min-microvolt = <800000>;
227				regulator-max-microvolt = <1250000>;
228				regulator-ramp-delay = <6001>;
229				regulator-state-mem {
230					regulator-off-in-suspend;
231				};
232			};
233
234			vcc135_ddr: DCDC_REG3 {
235				regulator-name = "vcc135_ddr";
236				regulator-always-on;
237				regulator-boot-on;
238				regulator-state-mem {
239					regulator-on-in-suspend;
240				};
241			};
242
243			/*
244			 * vcc_18 has several aliases.  (vcc18_flashio and
245			 * vcc18_wl).  We'll add those aliases here just to
246			 * make it easier to follow the schematic.  The signals
247			 * are actually hooked together and only separated for
248			 * power measurement purposes).
249			 */
250			vcc18_wl: vcc18_flashio: vcc_18: DCDC_REG4 {
251				regulator-name = "vcc_18";
252				regulator-always-on;
253				regulator-boot-on;
254				regulator-min-microvolt = <1800000>;
255				regulator-max-microvolt = <1800000>;
256				regulator-state-mem {
257					regulator-on-in-suspend;
258					regulator-suspend-microvolt = <1800000>;
259				};
260			};
261
262			/*
263			 * Note that both vcc33_io and vcc33_pmuio are always
264			 * powered together. To simplify the logic in the dts
265			 * we just refer to vcc33_io every time something is
266			 * powered from vcc33_pmuio. In fact, on later boards
267			 * (such as danger) they're the same net.
268			 */
269			vcc33_io: LDO_REG1 {
270				regulator-name = "vcc33_io";
271				regulator-always-on;
272				regulator-boot-on;
273				regulator-min-microvolt = <3300000>;
274				regulator-max-microvolt = <3300000>;
275				regulator-state-mem {
276					regulator-on-in-suspend;
277					regulator-suspend-microvolt = <3300000>;
278				};
279			};
280
281			vdd_10: LDO_REG3 {
282				regulator-name = "vdd_10";
283				regulator-always-on;
284				regulator-boot-on;
285				regulator-min-microvolt = <1000000>;
286				regulator-max-microvolt = <1000000>;
287				regulator-state-mem {
288					regulator-on-in-suspend;
289					regulator-suspend-microvolt = <1000000>;
290				};
291			};
292
293			vdd10_lcd_pwren_h: LDO_REG7 {
294				regulator-name = "vdd10_lcd_pwren_h";
295				regulator-always-on;
296				regulator-boot-on;
297				regulator-min-microvolt = <2500000>;
298				regulator-max-microvolt = <2500000>;
299				regulator-state-mem {
300					regulator-off-in-suspend;
301				};
302			};
303
304			vcc33_lcd: SWITCH_REG1 {
305				regulator-name = "vcc33_lcd";
306				regulator-always-on;
307				regulator-boot-on;
308				regulator-state-mem {
309					regulator-off-in-suspend;
310				};
311			};
312		};
313	};
314};
315
316&i2c1 {
317	status = "okay";
318
319	clock-frequency = <400000>;
320	i2c-scl-falling-time-ns = <50>;		/* 2.5ns measured */
321	i2c-scl-rising-time-ns = <100>;		/* 40ns measured */
322
323	tpm: tpm@20 {
324		compatible = "infineon,slb9645tt";
325		reg = <0x20>;
326		powered-while-suspended;
327	};
328};
329
330&i2c2 {
331	status = "okay";
332
333	/* 100kHz since 4.7k resistors don't rise fast enough */
334	clock-frequency = <100000>;
335	i2c-scl-falling-time-ns = <50>;		/* 10ns measured */
336	i2c-scl-rising-time-ns = <800>;		/* 600ns measured */
337};
338
339&i2c4 {
340	status = "okay";
341
342	clock-frequency = <400000>;
343	i2c-scl-falling-time-ns = <50>;		/* 11ns measured */
344	i2c-scl-rising-time-ns = <300>;		/* 225ns measured */
345};
346
347&io_domains {
348	status = "okay";
349
350	bb-supply = <&vcc33_io>;
351	dvp-supply = <&vcc_18>;
352	flash0-supply = <&vcc18_flashio>;
353	gpio1830-supply = <&vcc33_io>;
354	gpio30-supply = <&vcc33_io>;
355	lcdc-supply = <&vcc33_lcd>;
356	wifi-supply = <&vcc18_wl>;
357};
358
359&pwm1 {
360	status = "okay";
361};
362
363&sdio0 {
364	status = "okay";
365
366	bus-width = <4>;
367	cap-sd-highspeed;
368	cap-sdio-irq;
369	keep-power-in-suspend;
370	mmc-pwrseq = <&sdio_pwrseq>;
371	non-removable;
372	pinctrl-names = "default";
373	pinctrl-0 = <&sdio0_clk &sdio0_cmd &sdio0_bus4>;
374	sd-uhs-sdr12;
375	sd-uhs-sdr25;
376	sd-uhs-sdr50;
377	sd-uhs-sdr104;
378	vmmc-supply = <&vcc33_sys>;
379	vqmmc-supply = <&vcc18_wl>;
380};
381
382&spi2 {
383	status = "okay";
384
385	rx-sample-delay-ns = <12>;
386
387	flash@0 {
388		compatible = "jedec,spi-nor";
389		spi-max-frequency = <50000000>;
390		reg = <0>;
391	};
392};
393
394&tsadc {
395	status = "okay";
396
397	rockchip,hw-tshut-mode = <1>; /* tshut mode 0:CRU 1:GPIO */
398	rockchip,hw-tshut-polarity = <1>; /* tshut polarity 0:LOW 1:HIGH */
399	rockchip,hw-tshut-temp = <125000>;
400};
401
402&uart0 {
403	status = "okay";
404
405	/* Pins don't include flow control by default; add that in */
406	pinctrl-names = "default";
407	pinctrl-0 = <&uart0_xfer &uart0_cts &uart0_rts>;
408};
409
410&uart1 {
411	status = "okay";
412};
413
414&uart2 {
415	status = "okay";
416};
417
418&usbphy {
419	status = "okay";
420};
421
422&usb_host0_ehci {
423	status = "okay";
424
425	needs-reset-on-resume;
426};
427
428&usb_host1 {
429	status = "okay";
430	snps,need-phy-for-wake;
431};
432
433&usb_otg {
434	status = "okay";
435
436	assigned-clocks = <&cru SCLK_USBPHY480M_SRC>;
437	assigned-clock-parents = <&usbphy0>;
438	dr_mode = "host";
439	snps,need-phy-for-wake;
440};
441
442&vopb {
443	status = "okay";
444};
445
446&vopb_mmu {
447	status = "okay";
448};
449
450&wdt {
451	status = "okay";
452};
453
454&pinctrl {
455	pcfg_pull_none_drv_8ma: pcfg-pull-none-drv-8ma {
456		bias-disable;
457		drive-strength = <8>;
458	};
459
460	pcfg_pull_up_drv_8ma: pcfg-pull-up-drv-8ma {
461		bias-pull-up;
462		drive-strength = <8>;
463	};
464
465	pcfg_output_high: pcfg-output-high {
466		output-high;
467	};
468
469	pcfg_output_low: pcfg-output-low {
470		output-low;
471	};
472
473	buttons {
474		pwr_key_l: pwr-key-l {
475			rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_up>;
476		};
477	};
478
479	emmc {
480		emmc_reset: emmc-reset {
481			rockchip,pins = <2 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>;
482		};
483
484		/*
485		 * We run eMMC at max speed; bump up drive strength.
486		 * We also have external pulls, so disable the internal ones.
487		 */
488		emmc_clk: emmc-clk {
489			rockchip,pins = <3 RK_PC2 2 &pcfg_pull_none_drv_8ma>;
490		};
491
492		emmc_cmd: emmc-cmd {
493			rockchip,pins = <3 RK_PC0 2 &pcfg_pull_none_drv_8ma>;
494		};
495
496		emmc_bus8: emmc-bus8 {
497			rockchip,pins = <3 RK_PA0 2 &pcfg_pull_none_drv_8ma>,
498					<3 RK_PA1 2 &pcfg_pull_none_drv_8ma>,
499					<3 RK_PA2 2 &pcfg_pull_none_drv_8ma>,
500					<3 RK_PA3 2 &pcfg_pull_none_drv_8ma>,
501					<3 RK_PA4 2 &pcfg_pull_none_drv_8ma>,
502					<3 RK_PA5 2 &pcfg_pull_none_drv_8ma>,
503					<3 RK_PA6 2 &pcfg_pull_none_drv_8ma>,
504					<3 RK_PA7 2 &pcfg_pull_none_drv_8ma>;
505		};
506	};
507
508	pmic {
509		pmic_int_l: pmic-int-l {
510			rockchip,pins = <0 RK_PA4 RK_FUNC_GPIO &pcfg_pull_up>;
511		};
512	};
513
514	reboot {
515		ap_warm_reset_h: ap-warm-reset-h {
516			rockchip,pins = <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>;
517		};
518	};
519
520	recovery-switch {
521		rec_mode_l: rec-mode-l {
522			rockchip,pins = <0 RK_PB1 RK_FUNC_GPIO &pcfg_pull_up>;
523		};
524	};
525
526	sdio0 {
527		wifi_enable_h: wifienable-h {
528			rockchip,pins = <4 RK_PD4 RK_FUNC_GPIO &pcfg_pull_none>;
529		};
530
531		/* NOTE: mislabelled on schematic; should be bt_enable_h */
532		bt_enable_l: bt-enable-l {
533			rockchip,pins = <4 RK_PD5 RK_FUNC_GPIO &pcfg_pull_none>;
534		};
535
536		bt_host_wake: bt-host-wake {
537			rockchip,pins = <4 RK_PD7 RK_FUNC_GPIO &pcfg_pull_down>;
538		};
539
540		bt_host_wake_l: bt-host-wake-l {
541			rockchip,pins = <4 RK_PD7 RK_FUNC_GPIO &pcfg_pull_none>;
542		};
543
544		/*
545		 * We run sdio0 at max speed; bump up drive strength.
546		 * We also have external pulls, so disable the internal ones.
547		 */
548		sdio0_bus4: sdio0-bus4 {
549			rockchip,pins = <4 RK_PC4 1 &pcfg_pull_none_drv_8ma>,
550					<4 RK_PC5 1 &pcfg_pull_none_drv_8ma>,
551					<4 RK_PC6 1 &pcfg_pull_none_drv_8ma>,
552					<4 RK_PC7 1 &pcfg_pull_none_drv_8ma>;
553		};
554
555		sdio0_cmd: sdio0-cmd {
556			rockchip,pins = <4 RK_PD0 1 &pcfg_pull_none_drv_8ma>;
557		};
558
559		sdio0_clk: sdio0-clk {
560			rockchip,pins = <4 RK_PD1 1 &pcfg_pull_none_drv_8ma>;
561		};
562
563		/*
564		 * These pins are only present on very new veyron boards; on
565		 * older boards bt_dev_wake is simply always high.  Note that
566		 * gpio4_D2 is a NC on old veyron boards, so it doesn't hurt
567		 * to map this pin everywhere
568		 */
569		bt_dev_wake_sleep: bt-dev-wake-sleep {
570			rockchip,pins = <4 RK_PD2 RK_FUNC_GPIO &pcfg_output_low>;
571		};
572
573		bt_dev_wake_awake: bt-dev-wake-awake {
574			rockchip,pins = <4 RK_PD2 RK_FUNC_GPIO &pcfg_output_high>;
575		};
576
577		bt_dev_wake: bt-dev-wake {
578			rockchip,pins = <4 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>;
579		};
580	};
581
582	tpm {
583		tpm_int_h: tpm-int-h {
584			rockchip,pins = <7 RK_PA4 RK_FUNC_GPIO &pcfg_pull_none>;
585		};
586	};
587
588	write-protect {
589		fw_wp_ap: fw-wp-ap {
590			rockchip,pins = <7 RK_PA6 RK_FUNC_GPIO &pcfg_pull_none>;
591		};
592	};
593};
594