Loading...
1/*
2 * Google Veyron (and derivatives) board device tree source
3 *
4 * Copyright 2015 Google, Inc
5 *
6 * This file is dual-licensed: you can use it either under the terms
7 * of the GPL or the X11 license, at your option. Note that this dual
8 * licensing only applies to this file, and not this project as a
9 * whole.
10 *
11 * a) This file is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License as
13 * published by the Free Software Foundation; either version 2 of the
14 * License, or (at your option) any later version.
15 *
16 * This file is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 *
21 * Or, alternatively,
22 *
23 * b) Permission is hereby granted, free of charge, to any person
24 * obtaining a copy of this software and associated documentation
25 * files (the "Software"), to deal in the Software without
26 * restriction, including without limitation the rights to use,
27 * copy, modify, merge, publish, distribute, sublicense, and/or
28 * sell copies of the Software, and to permit persons to whom the
29 * Software is furnished to do so, subject to the following
30 * conditions:
31 *
32 * The above copyright notice and this permission notice shall be
33 * included in all copies or substantial portions of the Software.
34 *
35 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
36 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
37 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
38 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
39 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
40 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
41 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
42 * OTHER DEALINGS IN THE SOFTWARE.
43 */
44
45#include <dt-bindings/clock/rockchip,rk808.h>
46#include <dt-bindings/input/input.h>
47#include "rk3288.dtsi"
48
49/ {
50 memory@0 {
51 device_type = "memory";
52 reg = <0x0 0x0 0x0 0x80000000>;
53 };
54
55 gpio_keys: gpio-keys {
56 compatible = "gpio-keys";
57 #address-cells = <1>;
58 #size-cells = <0>;
59
60 pinctrl-names = "default";
61 pinctrl-0 = <&pwr_key_l>;
62 power {
63 label = "Power";
64 gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>;
65 linux,code = <KEY_POWER>;
66 debounce-interval = <100>;
67 wakeup-source;
68 };
69 };
70
71 gpio-restart {
72 compatible = "gpio-restart";
73 gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_HIGH>;
74 pinctrl-names = "default";
75 pinctrl-0 = <&ap_warm_reset_h>;
76 priority = <200>;
77 };
78
79 emmc_pwrseq: emmc-pwrseq {
80 compatible = "mmc-pwrseq-emmc";
81 pinctrl-0 = <&emmc_reset>;
82 pinctrl-names = "default";
83 reset-gpios = <&gpio2 RK_PB1 GPIO_ACTIVE_HIGH>;
84 };
85
86 sdio_pwrseq: sdio-pwrseq {
87 compatible = "mmc-pwrseq-simple";
88 clocks = <&rk808 RK808_CLKOUT1>;
89 clock-names = "ext_clock";
90 pinctrl-names = "default";
91 pinctrl-0 = <&bt_enable_l>, <&wifi_enable_h>;
92
93 /*
94 * On the module itself this is one of these (depending
95 * on the actual card populated):
96 * - SDIO_RESET_L_WL_REG_ON
97 * - PDN (power down when low)
98 */
99 reset-gpios = <&gpio4 RK_PD4 GPIO_ACTIVE_LOW>;
100 };
101
102 vcc_5v: vcc-5v {
103 compatible = "regulator-fixed";
104 regulator-name = "vcc_5v";
105 regulator-always-on;
106 regulator-boot-on;
107 regulator-min-microvolt = <5000000>;
108 regulator-max-microvolt = <5000000>;
109 };
110
111 vcc33_sys: vcc33-sys {
112 compatible = "regulator-fixed";
113 regulator-name = "vcc33_sys";
114 regulator-always-on;
115 regulator-boot-on;
116 regulator-min-microvolt = <3300000>;
117 regulator-max-microvolt = <3300000>;
118 };
119
120 vcc50_hdmi: vcc50-hdmi {
121 compatible = "regulator-fixed";
122 regulator-name = "vcc50_hdmi";
123 regulator-always-on;
124 regulator-boot-on;
125 vin-supply = <&vcc_5v>;
126 };
127};
128
129&cpu0 {
130 cpu0-supply = <&vdd_cpu>;
131 operating-points = <
132 /* KHz uV */
133 1800000 1400000
134 1704000 1350000
135 1608000 1300000
136 1512000 1250000
137 1416000 1200000
138 1200000 1100000
139 1008000 1050000
140 816000 1000000
141 696000 950000
142 600000 900000
143 408000 900000
144 216000 900000
145 126000 900000
146 >;
147};
148
149&emmc {
150 status = "okay";
151
152 bus-width = <8>;
153 cap-mmc-highspeed;
154 rockchip,default-sample-phase = <158>;
155 disable-wp;
156 mmc-hs200-1_8v;
157 mmc-pwrseq = <&emmc_pwrseq>;
158 non-removable;
159 pinctrl-names = "default";
160 pinctrl-0 = <&emmc_clk &emmc_cmd &emmc_bus8>;
161};
162
163&gpu {
164 mali-supply = <&vdd_gpu>;
165 status = "okay";
166};
167
168&hdmi {
169 ddc-i2c-bus = <&i2c5>;
170 status = "okay";
171};
172
173&i2c0 {
174 status = "okay";
175
176 clock-frequency = <400000>;
177 i2c-scl-falling-time-ns = <50>; /* 2.5ns measured */
178 i2c-scl-rising-time-ns = <100>; /* 45ns measured */
179
180 rk808: pmic@1b {
181 compatible = "rockchip,rk808";
182 reg = <0x1b>;
183 clock-output-names = "xin32k", "wifibt_32kin";
184 interrupt-parent = <&gpio0>;
185 interrupts = <RK_PA4 IRQ_TYPE_LEVEL_LOW>;
186 pinctrl-names = "default";
187 pinctrl-0 = <&pmic_int_l>;
188 rockchip,system-power-controller;
189 wakeup-source;
190 #clock-cells = <1>;
191
192 vcc1-supply = <&vcc33_sys>;
193 vcc2-supply = <&vcc33_sys>;
194 vcc3-supply = <&vcc33_sys>;
195 vcc4-supply = <&vcc33_sys>;
196 vcc6-supply = <&vcc_5v>;
197 vcc7-supply = <&vcc33_sys>;
198 vcc8-supply = <&vcc33_sys>;
199 vcc12-supply = <&vcc_18>;
200 vddio-supply = <&vcc33_io>;
201
202 regulators {
203 vdd_cpu: DCDC_REG1 {
204 regulator-name = "vdd_arm";
205 regulator-always-on;
206 regulator-boot-on;
207 regulator-min-microvolt = <750000>;
208 regulator-max-microvolt = <1450000>;
209 regulator-ramp-delay = <6001>;
210 regulator-state-mem {
211 regulator-off-in-suspend;
212 };
213 };
214
215 vdd_gpu: DCDC_REG2 {
216 regulator-name = "vdd_gpu";
217 regulator-always-on;
218 regulator-boot-on;
219 regulator-min-microvolt = <800000>;
220 regulator-max-microvolt = <1250000>;
221 regulator-ramp-delay = <6001>;
222 regulator-state-mem {
223 regulator-on-in-suspend;
224 regulator-suspend-microvolt = <1000000>;
225 };
226 };
227
228 vcc135_ddr: DCDC_REG3 {
229 regulator-name = "vcc135_ddr";
230 regulator-always-on;
231 regulator-boot-on;
232 regulator-state-mem {
233 regulator-on-in-suspend;
234 };
235 };
236
237 /*
238 * vcc_18 has several aliases. (vcc18_flashio and
239 * vcc18_wl). We'll add those aliases here just to
240 * make it easier to follow the schematic. The signals
241 * are actually hooked together and only separated for
242 * power measurement purposes).
243 */
244 vcc18_wl: vcc18_flashio: vcc_18: DCDC_REG4 {
245 regulator-name = "vcc_18";
246 regulator-always-on;
247 regulator-boot-on;
248 regulator-min-microvolt = <1800000>;
249 regulator-max-microvolt = <1800000>;
250 regulator-state-mem {
251 regulator-on-in-suspend;
252 regulator-suspend-microvolt = <1800000>;
253 };
254 };
255
256 /*
257 * Note that both vcc33_io and vcc33_pmuio are always
258 * powered together. To simplify the logic in the dts
259 * we just refer to vcc33_io every time something is
260 * powered from vcc33_pmuio. In fact, on later boards
261 * (such as danger) they're the same net.
262 */
263 vcc33_io: LDO_REG1 {
264 regulator-name = "vcc33_io";
265 regulator-always-on;
266 regulator-boot-on;
267 regulator-min-microvolt = <3300000>;
268 regulator-max-microvolt = <3300000>;
269 regulator-state-mem {
270 regulator-on-in-suspend;
271 regulator-suspend-microvolt = <3300000>;
272 };
273 };
274
275 vdd_10: LDO_REG3 {
276 regulator-name = "vdd_10";
277 regulator-always-on;
278 regulator-boot-on;
279 regulator-min-microvolt = <1000000>;
280 regulator-max-microvolt = <1000000>;
281 regulator-state-mem {
282 regulator-on-in-suspend;
283 regulator-suspend-microvolt = <1000000>;
284 };
285 };
286
287 vdd10_lcd_pwren_h: LDO_REG7 {
288 regulator-name = "vdd10_lcd_pwren_h";
289 regulator-always-on;
290 regulator-boot-on;
291 regulator-min-microvolt = <2500000>;
292 regulator-max-microvolt = <2500000>;
293 regulator-state-mem {
294 regulator-off-in-suspend;
295 };
296 };
297
298 vcc33_lcd: SWITCH_REG1 {
299 regulator-name = "vcc33_lcd";
300 regulator-always-on;
301 regulator-boot-on;
302 regulator-state-mem {
303 regulator-off-in-suspend;
304 };
305 };
306 };
307 };
308};
309
310&i2c1 {
311 status = "okay";
312
313 clock-frequency = <400000>;
314 i2c-scl-falling-time-ns = <50>; /* 2.5ns measured */
315 i2c-scl-rising-time-ns = <100>; /* 40ns measured */
316
317 tpm: tpm@20 {
318 compatible = "infineon,slb9645tt";
319 reg = <0x20>;
320 powered-while-suspended;
321 };
322};
323
324&i2c2 {
325 status = "okay";
326
327 /* 100kHz since 4.7k resistors don't rise fast enough */
328 clock-frequency = <100000>;
329 i2c-scl-falling-time-ns = <50>; /* 10ns measured */
330 i2c-scl-rising-time-ns = <800>; /* 600ns measured */
331};
332
333&i2c4 {
334 status = "okay";
335
336 clock-frequency = <400000>;
337 i2c-scl-falling-time-ns = <50>; /* 11ns measured */
338 i2c-scl-rising-time-ns = <300>; /* 225ns measured */
339};
340
341&i2c5 {
342 status = "okay";
343
344 clock-frequency = <100000>;
345 i2c-scl-falling-time-ns = <300>;
346 i2c-scl-rising-time-ns = <1000>;
347};
348
349&io_domains {
350 status = "okay";
351
352 bb-supply = <&vcc33_io>;
353 dvp-supply = <&vcc_18>;
354 flash0-supply = <&vcc18_flashio>;
355 gpio1830-supply = <&vcc33_io>;
356 gpio30-supply = <&vcc33_io>;
357 lcdc-supply = <&vcc33_lcd>;
358 wifi-supply = <&vcc18_wl>;
359};
360
361&pwm1 {
362 status = "okay";
363};
364
365&sdio0 {
366 status = "okay";
367
368 bus-width = <4>;
369 cap-sd-highspeed;
370 cap-sdio-irq;
371 keep-power-in-suspend;
372 mmc-pwrseq = <&sdio_pwrseq>;
373 non-removable;
374 pinctrl-names = "default";
375 pinctrl-0 = <&sdio0_clk &sdio0_cmd &sdio0_bus4>;
376 sd-uhs-sdr12;
377 sd-uhs-sdr25;
378 sd-uhs-sdr50;
379 sd-uhs-sdr104;
380 vmmc-supply = <&vcc33_sys>;
381 vqmmc-supply = <&vcc18_wl>;
382};
383
384&spi2 {
385 status = "okay";
386
387 rx-sample-delay-ns = <12>;
388
389 flash@0 {
390 compatible = "jedec,spi-nor";
391 spi-max-frequency = <50000000>;
392 reg = <0>;
393 };
394};
395
396&tsadc {
397 status = "okay";
398
399 rockchip,hw-tshut-mode = <1>; /* tshut mode 0:CRU 1:GPIO */
400 rockchip,hw-tshut-polarity = <1>; /* tshut polarity 0:LOW 1:HIGH */
401};
402
403&uart0 {
404 status = "okay";
405
406 /* We need to go faster than 24MHz, so adjust clock parents / rates */
407 assigned-clocks = <&cru SCLK_UART0>;
408 assigned-clock-rates = <48000000>;
409
410 /* Pins don't include flow control by default; add that in */
411 pinctrl-names = "default";
412 pinctrl-0 = <&uart0_xfer &uart0_cts &uart0_rts>;
413};
414
415&uart1 {
416 status = "okay";
417};
418
419&uart2 {
420 status = "okay";
421};
422
423&usbphy {
424 status = "okay";
425};
426
427&usb_host0_ehci {
428 status = "okay";
429
430 needs-reset-on-resume;
431};
432
433&usb_host1 {
434 status = "okay";
435};
436
437&usb_otg {
438 status = "okay";
439
440 assigned-clocks = <&cru SCLK_USBPHY480M_SRC>;
441 assigned-clock-parents = <&usbphy0>;
442 dr_mode = "host";
443};
444
445&vopb {
446 status = "okay";
447};
448
449&vopb_mmu {
450 status = "okay";
451};
452
453&wdt {
454 status = "okay";
455};
456
457&pinctrl {
458 pinctrl-names = "default", "sleep";
459 pinctrl-0 = <
460 /* Common for sleep and wake, but no owners */
461 &global_pwroff
462 >;
463 pinctrl-1 = <
464 /* Common for sleep and wake, but no owners */
465 &global_pwroff
466 >;
467
468 pcfg_pull_none_drv_8ma: pcfg-pull-none-drv-8ma {
469 bias-disable;
470 drive-strength = <8>;
471 };
472
473 pcfg_pull_up_drv_8ma: pcfg-pull-up-drv-8ma {
474 bias-pull-up;
475 drive-strength = <8>;
476 };
477
478 pcfg_output_high: pcfg-output-high {
479 output-high;
480 };
481
482 pcfg_output_low: pcfg-output-low {
483 output-low;
484 };
485
486 buttons {
487 pwr_key_l: pwr-key-l {
488 rockchip,pins = <0 5 RK_FUNC_GPIO &pcfg_pull_up>;
489 };
490 };
491
492 emmc {
493 emmc_reset: emmc-reset {
494 rockchip,pins = <2 9 RK_FUNC_GPIO &pcfg_pull_none>;
495 };
496
497 /*
498 * We run eMMC at max speed; bump up drive strength.
499 * We also have external pulls, so disable the internal ones.
500 */
501 emmc_clk: emmc-clk {
502 rockchip,pins = <3 18 RK_FUNC_2 &pcfg_pull_none_drv_8ma>;
503 };
504
505 emmc_cmd: emmc-cmd {
506 rockchip,pins = <3 16 RK_FUNC_2 &pcfg_pull_none_drv_8ma>;
507 };
508
509 emmc_bus8: emmc-bus8 {
510 rockchip,pins = <3 0 RK_FUNC_2 &pcfg_pull_none_drv_8ma>,
511 <3 1 RK_FUNC_2 &pcfg_pull_none_drv_8ma>,
512 <3 2 RK_FUNC_2 &pcfg_pull_none_drv_8ma>,
513 <3 3 RK_FUNC_2 &pcfg_pull_none_drv_8ma>,
514 <3 4 RK_FUNC_2 &pcfg_pull_none_drv_8ma>,
515 <3 5 RK_FUNC_2 &pcfg_pull_none_drv_8ma>,
516 <3 6 RK_FUNC_2 &pcfg_pull_none_drv_8ma>,
517 <3 7 RK_FUNC_2 &pcfg_pull_none_drv_8ma>;
518 };
519 };
520
521 pmic {
522 pmic_int_l: pmic-int-l {
523 rockchip,pins = <RK_GPIO0 4 RK_FUNC_GPIO &pcfg_pull_up>;
524 };
525 };
526
527 reboot {
528 ap_warm_reset_h: ap-warm-reset-h {
529 rockchip,pins = <RK_GPIO0 13 RK_FUNC_GPIO &pcfg_pull_none>;
530 };
531 };
532
533 recovery-switch {
534 rec_mode_l: rec-mode-l {
535 rockchip,pins = <0 9 RK_FUNC_GPIO &pcfg_pull_up>;
536 };
537 };
538
539 sdio0 {
540 wifi_enable_h: wifienable-h {
541 rockchip,pins = <4 28 RK_FUNC_GPIO &pcfg_pull_none>;
542 };
543
544 /* NOTE: mislabelled on schematic; should be bt_enable_h */
545 bt_enable_l: bt-enable-l {
546 rockchip,pins = <4 29 RK_FUNC_GPIO &pcfg_pull_none>;
547 };
548
549 /*
550 * We run sdio0 at max speed; bump up drive strength.
551 * We also have external pulls, so disable the internal ones.
552 */
553 sdio0_bus4: sdio0-bus4 {
554 rockchip,pins = <4 20 RK_FUNC_1 &pcfg_pull_none_drv_8ma>,
555 <4 21 RK_FUNC_1 &pcfg_pull_none_drv_8ma>,
556 <4 22 RK_FUNC_1 &pcfg_pull_none_drv_8ma>,
557 <4 23 RK_FUNC_1 &pcfg_pull_none_drv_8ma>;
558 };
559
560 sdio0_cmd: sdio0-cmd {
561 rockchip,pins = <4 24 RK_FUNC_1 &pcfg_pull_none_drv_8ma>;
562 };
563
564 sdio0_clk: sdio0-clk {
565 rockchip,pins = <4 25 RK_FUNC_1 &pcfg_pull_none_drv_8ma>;
566 };
567 };
568
569 tpm {
570 tpm_int_h: tpm-int-h {
571 rockchip,pins = <7 4 RK_FUNC_GPIO &pcfg_pull_none>;
572 };
573 };
574
575 write-protect {
576 fw_wp_ap: fw-wp-ap {
577 rockchip,pins = <7 6 RK_FUNC_GPIO &pcfg_pull_none>;
578 };
579 };
580};
1/*
2 * Google Veyron (and derivatives) board device tree source
3 *
4 * Copyright 2015 Google, Inc
5 *
6 * This file is dual-licensed: you can use it either under the terms
7 * of the GPL or the X11 license, at your option. Note that this dual
8 * licensing only applies to this file, and not this project as a
9 * whole.
10 *
11 * a) This file is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License as
13 * published by the Free Software Foundation; either version 2 of the
14 * License, or (at your option) any later version.
15 *
16 * This file is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 *
21 * Or, alternatively,
22 *
23 * b) Permission is hereby granted, free of charge, to any person
24 * obtaining a copy of this software and associated documentation
25 * files (the "Software"), to deal in the Software without
26 * restriction, including without limitation the rights to use,
27 * copy, modify, merge, publish, distribute, sublicense, and/or
28 * sell copies of the Software, and to permit persons to whom the
29 * Software is furnished to do so, subject to the following
30 * conditions:
31 *
32 * The above copyright notice and this permission notice shall be
33 * included in all copies or substantial portions of the Software.
34 *
35 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
36 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
37 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
38 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
39 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
40 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
41 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
42 * OTHER DEALINGS IN THE SOFTWARE.
43 */
44
45#include <dt-bindings/clock/rockchip,rk808.h>
46#include <dt-bindings/input/input.h>
47#include "rk3288.dtsi"
48
49/ {
50 memory {
51 device_type = "memory";
52 reg = <0x0 0x80000000>;
53 };
54
55 gpio_keys: gpio-keys {
56 compatible = "gpio-keys";
57 #address-cells = <1>;
58 #size-cells = <0>;
59
60 pinctrl-names = "default";
61 pinctrl-0 = <&pwr_key_l>;
62 power {
63 label = "Power";
64 gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
65 linux,code = <KEY_POWER>;
66 debounce-interval = <100>;
67 wakeup-source;
68 };
69 };
70
71 gpio-restart {
72 compatible = "gpio-restart";
73 gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
74 pinctrl-names = "default";
75 pinctrl-0 = <&ap_warm_reset_h>;
76 priority = <200>;
77 };
78
79 emmc_pwrseq: emmc-pwrseq {
80 compatible = "mmc-pwrseq-emmc";
81 pinctrl-0 = <&emmc_reset>;
82 pinctrl-names = "default";
83 reset-gpios = <&gpio2 9 GPIO_ACTIVE_HIGH>;
84 };
85
86 io_domains: io-domains {
87 compatible = "rockchip,rk3288-io-voltage-domain";
88 rockchip,grf = <&grf>;
89
90 bb-supply = <&vcc33_io>;
91 dvp-supply = <&vcc_18>;
92 flash0-supply = <&vcc18_flashio>;
93 gpio1830-supply = <&vcc33_io>;
94 gpio30-supply = <&vcc33_io>;
95 lcdc-supply = <&vcc33_lcd>;
96 wifi-supply = <&vcc18_wl>;
97 };
98
99 sdio_pwrseq: sdio-pwrseq {
100 compatible = "mmc-pwrseq-simple";
101 clocks = <&rk808 RK808_CLKOUT1>;
102 clock-names = "ext_clock";
103 pinctrl-names = "default";
104 pinctrl-0 = <&bt_enable_l>, <&wifi_enable_h>;
105
106 /*
107 * On the module itself this is one of these (depending
108 * on the actual card populated):
109 * - SDIO_RESET_L_WL_REG_ON
110 * - PDN (power down when low)
111 */
112 reset-gpios = <&gpio4 28 GPIO_ACTIVE_LOW>;
113 };
114
115 vcc_5v: vcc-5v {
116 compatible = "regulator-fixed";
117 regulator-name = "vcc_5v";
118 regulator-always-on;
119 regulator-boot-on;
120 regulator-min-microvolt = <5000000>;
121 regulator-max-microvolt = <5000000>;
122 };
123
124 vcc33_sys: vcc33-sys {
125 compatible = "regulator-fixed";
126 regulator-name = "vcc33_sys";
127 regulator-always-on;
128 regulator-boot-on;
129 regulator-min-microvolt = <3300000>;
130 regulator-max-microvolt = <3300000>;
131 };
132
133 vcc50_hdmi: vcc50-hdmi {
134 compatible = "regulator-fixed";
135 regulator-name = "vcc50_hdmi";
136 regulator-always-on;
137 regulator-boot-on;
138 vin-supply = <&vcc_5v>;
139 };
140};
141
142&cpu0 {
143 cpu0-supply = <&vdd_cpu>;
144};
145
146&emmc {
147 status = "okay";
148
149 broken-cd;
150 bus-width = <8>;
151 cap-mmc-highspeed;
152 rockchip,default-sample-phase = <158>;
153 disable-wp;
154 mmc-hs200-1_8v;
155 mmc-pwrseq = <&emmc_pwrseq>;
156 non-removable;
157 num-slots = <1>;
158 pinctrl-names = "default";
159 pinctrl-0 = <&emmc_clk &emmc_cmd &emmc_bus8>;
160};
161
162&hdmi {
163 ddc-i2c-bus = <&i2c5>;
164 status = "okay";
165};
166
167&i2c0 {
168 status = "okay";
169
170 clock-frequency = <400000>;
171 i2c-scl-falling-time-ns = <50>; /* 2.5ns measured */
172 i2c-scl-rising-time-ns = <100>; /* 45ns measured */
173
174 rk808: pmic@1b {
175 compatible = "rockchip,rk808";
176 reg = <0x1b>;
177 clock-output-names = "xin32k", "wifibt_32kin";
178 interrupt-parent = <&gpio0>;
179 interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
180 pinctrl-names = "default";
181 pinctrl-0 = <&pmic_int_l>;
182 rockchip,system-power-controller;
183 wakeup-source;
184 #clock-cells = <1>;
185
186 vcc1-supply = <&vcc33_sys>;
187 vcc2-supply = <&vcc33_sys>;
188 vcc3-supply = <&vcc33_sys>;
189 vcc4-supply = <&vcc33_sys>;
190 vcc6-supply = <&vcc_5v>;
191 vcc7-supply = <&vcc33_sys>;
192 vcc8-supply = <&vcc33_sys>;
193 vcc12-supply = <&vcc_18>;
194 vddio-supply = <&vcc33_io>;
195
196 regulators {
197 vdd_cpu: DCDC_REG1 {
198 regulator-name = "vdd_arm";
199 regulator-always-on;
200 regulator-boot-on;
201 regulator-min-microvolt = <750000>;
202 regulator-max-microvolt = <1450000>;
203 regulator-ramp-delay = <6001>;
204 regulator-state-mem {
205 regulator-off-in-suspend;
206 };
207 };
208
209 vdd_gpu: DCDC_REG2 {
210 regulator-name = "vdd_gpu";
211 regulator-always-on;
212 regulator-boot-on;
213 regulator-min-microvolt = <800000>;
214 regulator-max-microvolt = <1250000>;
215 regulator-ramp-delay = <6001>;
216 regulator-state-mem {
217 regulator-on-in-suspend;
218 regulator-suspend-microvolt = <1000000>;
219 };
220 };
221
222 vcc135_ddr: DCDC_REG3 {
223 regulator-name = "vcc135_ddr";
224 regulator-always-on;
225 regulator-boot-on;
226 regulator-state-mem {
227 regulator-on-in-suspend;
228 };
229 };
230
231 /*
232 * vcc_18 has several aliases. (vcc18_flashio and
233 * vcc18_wl). We'll add those aliases here just to
234 * make it easier to follow the schematic. The signals
235 * are actually hooked together and only separated for
236 * power measurement purposes).
237 */
238 vcc18_wl: vcc18_flashio: vcc_18: DCDC_REG4 {
239 regulator-name = "vcc_18";
240 regulator-always-on;
241 regulator-boot-on;
242 regulator-min-microvolt = <1800000>;
243 regulator-max-microvolt = <1800000>;
244 regulator-state-mem {
245 regulator-on-in-suspend;
246 regulator-suspend-microvolt = <1800000>;
247 };
248 };
249
250 /*
251 * Note that both vcc33_io and vcc33_pmuio are always
252 * powered together. To simplify the logic in the dts
253 * we just refer to vcc33_io every time something is
254 * powered from vcc33_pmuio. In fact, on later boards
255 * (such as danger) they're the same net.
256 */
257 vcc33_io: LDO_REG1 {
258 regulator-name = "vcc33_io";
259 regulator-always-on;
260 regulator-boot-on;
261 regulator-min-microvolt = <3300000>;
262 regulator-max-microvolt = <3300000>;
263 regulator-state-mem {
264 regulator-on-in-suspend;
265 regulator-suspend-microvolt = <3300000>;
266 };
267 };
268
269 vdd_10: LDO_REG3 {
270 regulator-name = "vdd_10";
271 regulator-always-on;
272 regulator-boot-on;
273 regulator-min-microvolt = <1000000>;
274 regulator-max-microvolt = <1000000>;
275 regulator-state-mem {
276 regulator-on-in-suspend;
277 regulator-suspend-microvolt = <1000000>;
278 };
279 };
280
281 vdd10_lcd_pwren_h: LDO_REG7 {
282 regulator-name = "vdd10_lcd_pwren_h";
283 regulator-always-on;
284 regulator-boot-on;
285 regulator-min-microvolt = <2500000>;
286 regulator-max-microvolt = <2500000>;
287 regulator-state-mem {
288 regulator-off-in-suspend;
289 };
290 };
291
292 vcc33_lcd: SWITCH_REG1 {
293 regulator-name = "vcc33_lcd";
294 regulator-always-on;
295 regulator-boot-on;
296 regulator-state-mem {
297 regulator-off-in-suspend;
298 };
299 };
300 };
301 };
302};
303
304&i2c1 {
305 status = "okay";
306
307 clock-frequency = <400000>;
308 i2c-scl-falling-time-ns = <50>; /* 2.5ns measured */
309 i2c-scl-rising-time-ns = <100>; /* 40ns measured */
310
311 tpm: tpm@20 {
312 compatible = "infineon,slb9645tt";
313 reg = <0x20>;
314 powered-while-suspended;
315 };
316};
317
318&i2c2 {
319 status = "okay";
320
321 /* 100kHz since 4.7k resistors don't rise fast enough */
322 clock-frequency = <100000>;
323 i2c-scl-falling-time-ns = <50>; /* 10ns measured */
324 i2c-scl-rising-time-ns = <800>; /* 600ns measured */
325};
326
327&i2c4 {
328 status = "okay";
329
330 clock-frequency = <400000>;
331 i2c-scl-falling-time-ns = <50>; /* 11ns measured */
332 i2c-scl-rising-time-ns = <300>; /* 225ns measured */
333};
334
335&i2c5 {
336 status = "okay";
337
338 clock-frequency = <100000>;
339 i2c-scl-falling-time-ns = <300>;
340 i2c-scl-rising-time-ns = <1000>;
341};
342
343&pwm1 {
344 status = "okay";
345};
346
347&sdio0 {
348 status = "okay";
349
350 broken-cd;
351 bus-width = <4>;
352 cap-sd-highspeed;
353 cap-sdio-irq;
354 keep-power-in-suspend;
355 mmc-pwrseq = <&sdio_pwrseq>;
356 non-removable;
357 num-slots = <1>;
358 pinctrl-names = "default";
359 pinctrl-0 = <&sdio0_clk &sdio0_cmd &sdio0_bus4>;
360 sd-uhs-sdr12;
361 sd-uhs-sdr25;
362 sd-uhs-sdr50;
363 sd-uhs-sdr104;
364 vmmc-supply = <&vcc33_sys>;
365 vqmmc-supply = <&vcc18_wl>;
366};
367
368&spi2 {
369 status = "okay";
370
371 rx-sample-delay-ns = <12>;
372};
373
374&tsadc {
375 status = "okay";
376
377 rockchip,hw-tshut-mode = <1>; /* tshut mode 0:CRU 1:GPIO */
378 rockchip,hw-tshut-polarity = <1>; /* tshut polarity 0:LOW 1:HIGH */
379};
380
381&uart0 {
382 status = "okay";
383
384 /* We need to go faster than 24MHz, so adjust clock parents / rates */
385 assigned-clocks = <&cru SCLK_UART0>;
386 assigned-clock-rates = <48000000>;
387
388 /* Pins don't include flow control by default; add that in */
389 pinctrl-names = "default";
390 pinctrl-0 = <&uart0_xfer &uart0_cts &uart0_rts>;
391};
392
393&uart1 {
394 status = "okay";
395};
396
397&uart2 {
398 status = "okay";
399};
400
401&usbphy {
402 status = "okay";
403};
404
405&usb_host0_ehci {
406 status = "okay";
407
408 needs-reset-on-resume;
409};
410
411&usb_host1 {
412 status = "okay";
413};
414
415&usb_otg {
416 status = "okay";
417
418 assigned-clocks = <&cru SCLK_USBPHY480M_SRC>;
419 assigned-clock-parents = <&usbphy0>;
420 dr_mode = "host";
421};
422
423&vopb {
424 status = "okay";
425};
426
427&vopb_mmu {
428 status = "okay";
429};
430
431&wdt {
432 status = "okay";
433};
434
435&pinctrl {
436 pinctrl-names = "default", "sleep";
437 pinctrl-0 = <
438 /* Common for sleep and wake, but no owners */
439 &global_pwroff
440 >;
441 pinctrl-1 = <
442 /* Common for sleep and wake, but no owners */
443 &global_pwroff
444 >;
445
446 pcfg_pull_none_drv_8ma: pcfg-pull-none-drv-8ma {
447 bias-disable;
448 drive-strength = <8>;
449 };
450
451 pcfg_pull_up_drv_8ma: pcfg-pull-up-drv-8ma {
452 bias-pull-up;
453 drive-strength = <8>;
454 };
455
456 pcfg_output_high: pcfg-output-high {
457 output-high;
458 };
459
460 pcfg_output_low: pcfg-output-low {
461 output-low;
462 };
463
464 buttons {
465 pwr_key_l: pwr-key-l {
466 rockchip,pins = <0 5 RK_FUNC_GPIO &pcfg_pull_up>;
467 };
468 };
469
470 emmc {
471 emmc_reset: emmc-reset {
472 rockchip,pins = <2 9 RK_FUNC_GPIO &pcfg_pull_none>;
473 };
474
475 /*
476 * We run eMMC at max speed; bump up drive strength.
477 * We also have external pulls, so disable the internal ones.
478 */
479 emmc_clk: emmc-clk {
480 rockchip,pins = <3 18 RK_FUNC_2 &pcfg_pull_none_drv_8ma>;
481 };
482
483 emmc_cmd: emmc-cmd {
484 rockchip,pins = <3 16 RK_FUNC_2 &pcfg_pull_none_drv_8ma>;
485 };
486
487 emmc_bus8: emmc-bus8 {
488 rockchip,pins = <3 0 RK_FUNC_2 &pcfg_pull_none_drv_8ma>,
489 <3 1 RK_FUNC_2 &pcfg_pull_none_drv_8ma>,
490 <3 2 RK_FUNC_2 &pcfg_pull_none_drv_8ma>,
491 <3 3 RK_FUNC_2 &pcfg_pull_none_drv_8ma>,
492 <3 4 RK_FUNC_2 &pcfg_pull_none_drv_8ma>,
493 <3 5 RK_FUNC_2 &pcfg_pull_none_drv_8ma>,
494 <3 6 RK_FUNC_2 &pcfg_pull_none_drv_8ma>,
495 <3 7 RK_FUNC_2 &pcfg_pull_none_drv_8ma>;
496 };
497 };
498
499 pmic {
500 pmic_int_l: pmic-int-l {
501 rockchip,pins = <RK_GPIO0 4 RK_FUNC_GPIO &pcfg_pull_up>;
502 };
503 };
504
505 reboot {
506 ap_warm_reset_h: ap-warm-reset-h {
507 rockchip,pins = <RK_GPIO0 13 RK_FUNC_GPIO &pcfg_pull_none>;
508 };
509 };
510
511 recovery-switch {
512 rec_mode_l: rec-mode-l {
513 rockchip,pins = <0 9 RK_FUNC_GPIO &pcfg_pull_up>;
514 };
515 };
516
517 sdio0 {
518 wifi_enable_h: wifienable-h {
519 rockchip,pins = <4 28 RK_FUNC_GPIO &pcfg_pull_none>;
520 };
521
522 /* NOTE: mislabelled on schematic; should be bt_enable_h */
523 bt_enable_l: bt-enable-l {
524 rockchip,pins = <4 29 RK_FUNC_GPIO &pcfg_pull_none>;
525 };
526
527 /*
528 * We run sdio0 at max speed; bump up drive strength.
529 * We also have external pulls, so disable the internal ones.
530 */
531 sdio0_bus4: sdio0-bus4 {
532 rockchip,pins = <4 20 RK_FUNC_1 &pcfg_pull_none_drv_8ma>,
533 <4 21 RK_FUNC_1 &pcfg_pull_none_drv_8ma>,
534 <4 22 RK_FUNC_1 &pcfg_pull_none_drv_8ma>,
535 <4 23 RK_FUNC_1 &pcfg_pull_none_drv_8ma>;
536 };
537
538 sdio0_cmd: sdio0-cmd {
539 rockchip,pins = <4 24 RK_FUNC_1 &pcfg_pull_none_drv_8ma>;
540 };
541
542 sdio0_clk: sdio0-clk {
543 rockchip,pins = <4 25 RK_FUNC_1 &pcfg_pull_none_drv_8ma>;
544 };
545 };
546
547 tpm {
548 tpm_int_h: tpm-int-h {
549 rockchip,pins = <7 4 RK_FUNC_GPIO &pcfg_pull_none>;
550 };
551 };
552
553 write-protect {
554 fw_wp_ap: fw-wp-ap {
555 rockchip,pins = <7 6 RK_FUNC_GPIO &pcfg_pull_none>;
556 };
557 };
558};