blob: a141a699b790f4a5ba355c396a7c45aa4e1c9e0c [file] [log] [blame]
Tom Rini53633a82024-02-29 12:33:36 -05001// SPDX-License-Identifier: GPL-2.0
2/dts-v1/;
3
4#include "jz4780.dtsi"
5#include <dt-bindings/clock/ingenic,tcu.h>
6#include <dt-bindings/gpio/gpio.h>
7#include <dt-bindings/input/input.h>
8#include <dt-bindings/interrupt-controller/irq.h>
9#include <dt-bindings/regulator/active-semi,8865-regulator.h>
10
11/ {
12 compatible = "img,ci20", "ingenic,jz4780";
13
14 aliases {
15 serial0 = &uart0;
16 serial1 = &uart1;
17 serial3 = &uart3;
18 serial4 = &uart4;
19 };
20
21 chosen {
22 stdout-path = &uart4;
23 };
24
25 memory {
26 device_type = "memory";
27 reg = <0x0 0x10000000
28 0x30000000 0x30000000>;
29 };
30
31 gpio-keys {
32 compatible = "gpio-keys";
33
34 switch {
35 label = "ci20:sw1";
36 linux,code = <KEY_F13>;
37 gpios = <&gpd 17 GPIO_ACTIVE_HIGH>;
38 wakeup-source;
39 };
40 };
41
42 leds {
43 compatible = "gpio-leds";
44
45 led-0 {
46 label = "ci20:red:led0";
47 gpios = <&gpc 3 GPIO_ACTIVE_HIGH>;
48 linux,default-trigger = "none";
49 };
50
51 led-1 {
52 label = "ci20:red:led1";
53 gpios = <&gpc 2 GPIO_ACTIVE_HIGH>;
54 linux,default-trigger = "nand-disk";
55 };
56
57 led-2 {
58 label = "ci20:red:led2";
59 gpios = <&gpc 1 GPIO_ACTIVE_HIGH>;
60 linux,default-trigger = "cpu1";
61 };
62
63 led-3 {
64 label = "ci20:red:led3";
65 gpios = <&gpc 0 GPIO_ACTIVE_HIGH>;
66 linux,default-trigger = "cpu0";
67 };
68 };
69
70 eth0_power: fixedregulator-0 {
71 compatible = "regulator-fixed";
72
73 regulator-name = "eth0_power";
74 regulator-min-microvolt = <3300000>;
75 regulator-max-microvolt = <3300000>;
76
77 gpio = <&gpb 25 0>;
78 enable-active-high;
79 };
80
81 hdmi_out: connector {
82 compatible = "hdmi-connector";
83 label = "HDMI OUT";
84 type = "a";
85
86 ddc-en-gpios = <&gpa 25 GPIO_ACTIVE_HIGH>;
87
88 port {
89 hdmi_con: endpoint {
90 remote-endpoint = <&dw_hdmi_out>;
91 };
92 };
93 };
94
95 ir: ir {
96 compatible = "gpio-ir-receiver";
97 gpios = <&gpe 3 GPIO_ACTIVE_LOW>;
98 };
99
100 bt_power: fixedregulator-1 {
101 compatible = "regulator-fixed";
102
103 regulator-name = "bt_power";
104 regulator-min-microvolt = <3300000>;
105 regulator-max-microvolt = <3300000>;
106 regulator-settling-time-us = <1400>;
107
108 vin-supply = <&vcc_50>;
109
110 gpio = <&gpb 19 0>;
111 enable-active-high;
112 };
113
114 otg_power: fixedregulator-2 {
115 compatible = "regulator-fixed";
116
117 regulator-name = "otg_power";
118 regulator-min-microvolt = <5000000>;
119 regulator-max-microvolt = <5000000>;
120
121 gpio = <&gpf 15 0>;
122 enable-active-high;
123 };
124
125 wifi_power: fixedregulator-4 {
126 compatible = "regulator-fixed";
127
128 regulator-name = "wifi_power";
129
130 /*
131 * Technically it's 5V, the WiFi chip has its own internal
132 * regulators; but the MMC/SD subsystem won't accept such a
133 * value.
134 */
135 regulator-min-microvolt = <3300000>;
136 regulator-max-microvolt = <3300000>;
137 regulator-settling-time-us = <150000>;
138
139 vin-supply = <&bt_power>;
140 };
141
142 vcc_33v: fixedregulator-5 {
143 compatible = "regulator-fixed";
144
145 regulator-name = "vcc_33v";
146 regulator-min-microvolt = <3300000>;
147 regulator-max-microvolt = <3300000>;
148 regulator-always-on;
149 };
150
151 wifi_pwrseq: pwrseq {
152 compatible = "mmc-pwrseq-simple";
153 reset-gpios = <&gpf 7 GPIO_ACTIVE_LOW>;
154
155 clocks = <&rtc_dev>;
156 clock-names = "ext_clock";
157 };
158};
159
160&ext {
161 clock-frequency = <48000000>;
162};
163
164&cgu {
165 /*
166 * Use the 32.768 kHz oscillator as the parent of the RTC for a higher
167 * precision.
168 */
169 assigned-clocks = <&cgu JZ4780_CLK_OTGPHY>, <&cgu JZ4780_CLK_RTC>,
170 <&cgu JZ4780_CLK_SSIPLL>, <&cgu JZ4780_CLK_SSI>,
171 <&cgu JZ4780_CLK_HDMI>, <&cgu JZ4780_CLK_MSCMUX>;
172 assigned-clock-parents = <0>, <&cgu JZ4780_CLK_RTCLK>,
173 <&cgu JZ4780_CLK_MPLL>,
174 <&cgu JZ4780_CLK_SSIPLL>,
175 <0>, <&cgu JZ4780_CLK_MPLL>;
176 assigned-clock-rates = <48000000>, <0>, <54000000>, <0>, <27000000>;
177};
178
179&tcu {
180 /*
181 * 750 kHz for the system timers and clocksource,
182 * use channel #0 and #1 for the per cpu system timers,
183 * and use channel #2 for the clocksource.
184 *
185 * 3000 kHz for the OST timer to provide a higher
186 * precision clocksource.
187 */
188 assigned-clocks = <&tcu TCU_CLK_TIMER0>, <&tcu TCU_CLK_TIMER1>,
189 <&tcu TCU_CLK_TIMER2>, <&tcu TCU_CLK_OST>;
190 assigned-clock-rates = <750000>, <750000>, <750000>, <3000000>;
191};
192
193&mmc0 {
194 status = "okay";
195
196 bus-width = <4>;
197 max-frequency = <50000000>;
198
199 pinctrl-names = "default";
200 pinctrl-0 = <&pins_mmc0>;
201
202 cd-gpios = <&gpf 20 GPIO_ACTIVE_LOW>;
203 vmmc-supply = <&vcc_33v>;
204 vqmmc-supply = <&vcc_33v>;
205};
206
207&mmc1 {
208 status = "okay";
209
210 bus-width = <4>;
211 max-frequency = <25000000>;
212 mmc-pwrseq = <&wifi_pwrseq>;
213 vmmc-supply = <&wifi_power>;
214 vqmmc-supply = <&wifi_io>;
215 non-removable;
216
217 pinctrl-names = "default";
218 pinctrl-0 = <&pins_mmc1>;
219
220 #address-cells = <1>;
221 #size-cells = <0>;
222
223 wifi@1 {
224 compatible = "brcm,bcm4329-fmac";
225 reg = <1>;
226
227 interrupt-parent = <&gpd>;
228 interrupts = <9 IRQ_TYPE_EDGE_FALLING>;
229 interrupt-names = "host-wake";
230 };
231};
232
233&uart0 {
234 status = "okay";
235
236 pinctrl-names = "default";
237 pinctrl-0 = <&pins_uart0>;
238};
239
240&uart1 {
241 status = "okay";
242
243 pinctrl-names = "default";
244 pinctrl-0 = <&pins_uart1>;
245};
246
247&uart2 {
248 status = "okay";
249
250 pinctrl-names = "default";
251 pinctrl-0 = <&pins_uart2>;
252 uart-has-rtscts;
253
254 bluetooth {
255 compatible = "brcm,bcm4330-bt";
256
257 vbat-supply = <&bt_power>;
258 vddio-supply = <&wifi_io>;
259
260 interrupt-parent = <&gpf>;
261 interrupts = <6 IRQ_TYPE_EDGE_RISING>;
262 interrupt-names = "host-wakeup";
263
264 clocks = <&rtc_dev>;
265 clock-names = "lpo";
266
267 reset-gpios = <&gpf 8 GPIO_ACTIVE_LOW>;
268 device-wakeup-gpios = <&gpf 5 GPIO_ACTIVE_HIGH>;
269 shutdown-gpios = <&gpf 4 GPIO_ACTIVE_HIGH>;
270 };
271};
272
273&uart3 {
274 status = "okay";
275
276 pinctrl-names = "default";
277 pinctrl-0 = <&pins_uart3>;
278};
279
280&uart4 {
281 status = "okay";
282
283 pinctrl-names = "default";
284 pinctrl-0 = <&pins_uart4>;
285};
286
287&i2c0 {
288 status = "okay";
289
290 pinctrl-names = "default";
291 pinctrl-0 = <&pins_i2c0>;
292
293 clock-frequency = <400000>;
294
295 act8600: act8600@5a {
296 compatible = "active-semi,act8600";
297 reg = <0x5a>;
298
299 regulators {
300 vddcore: DCDC1 {
301 regulator-min-microvolt = <1125000>;
302 regulator-max-microvolt = <1125000>;
303 vp1-supply = <&vcc_33v>;
304 regulator-always-on;
305 };
306 vddmem: DCDC2 {
307 regulator-min-microvolt = <1500000>;
308 regulator-max-microvolt = <1500000>;
309 vp2-supply = <&vcc_33v>;
310 regulator-always-on;
311 };
312 vcc_33: DCDC3 {
313 regulator-min-microvolt = <3300000>;
314 regulator-max-microvolt = <3300000>;
315 vp3-supply = <&vcc_33v>;
316 regulator-always-on;
317 };
318 vcc_50: SUDCDC_REG4 {
319 regulator-min-microvolt = <5000000>;
320 regulator-max-microvolt = <5000000>;
321 regulator-always-on;
322 };
323 vcc_25: LDO5 {
324 regulator-min-microvolt = <2500000>;
325 regulator-max-microvolt = <2500000>;
326 inl-supply = <&vcc_33v>;
327 regulator-always-on;
328 };
329 wifi_io: LDO6 {
330 regulator-min-microvolt = <1800000>;
331 regulator-max-microvolt = <1800000>;
332 regulator-settling-time-us = <150000>;
333 inl-supply = <&vcc_33v>;
334 };
335 cim_io_28: LDO7 {
336 regulator-min-microvolt = <2800000>;
337 regulator-max-microvolt = <2800000>;
338 inl-supply = <&vcc_33v>;
339 };
340 cim_io_15: LDO8 {
341 regulator-min-microvolt = <1500000>;
342 regulator-max-microvolt = <1500000>;
343 inl-supply = <&vcc_33v>;
344 };
345 vrtc_18: LDO_REG9 {
346 /* Despite the datasheet stating 3.3V
347 * for REG9 and the driver expecting that,
348 * REG9 outputs 1.8V.
349 * Likely the CI20 uses a proprietary
350 * factory programmed chip variant.
351 * Since this is a simple on/off LDO the
352 * exact values do not matter.
353 */
354 regulator-min-microvolt = <3300000>;
355 regulator-max-microvolt = <3300000>;
356 regulator-always-on;
357 };
358 vcc_11: LDO_REG10 {
359 regulator-min-microvolt = <1200000>;
360 regulator-max-microvolt = <1200000>;
361 regulator-always-on;
362 };
363 };
364 };
365};
366
367&i2c1 {
368 status = "okay";
369
370 pinctrl-names = "default";
371 pinctrl-0 = <&pins_i2c1>;
372
373};
374
375&i2c2 {
376 status = "okay";
377
378 pinctrl-names = "default";
379 pinctrl-0 = <&pins_i2c2>;
380
381};
382
383&i2c3 {
384 status = "okay";
385
386 pinctrl-names = "default";
387 pinctrl-0 = <&pins_i2c3>;
388
389};
390
391&i2c4 {
392 status = "okay";
393
394 pinctrl-names = "default";
395 pinctrl-0 = <&pins_i2c4>;
396
397 clock-frequency = <400000>;
398
399 rtc@51 {
400 compatible = "nxp,pcf8563";
401 reg = <0x51>;
402
403 interrupt-parent = <&gpf>;
404 interrupts = <30 IRQ_TYPE_LEVEL_LOW>;
405 };
406};
407
408&nemc {
409 status = "okay";
410
411 nandc: nand-controller@1 {
412 compatible = "ingenic,jz4780-nand";
413 reg = <1 0 0x1000000>;
414
415 #address-cells = <1>;
416 #size-cells = <0>;
417
418 ecc-engine = <&bch>;
419
420 ingenic,nemc-tAS = <10>;
421 ingenic,nemc-tAH = <5>;
422 ingenic,nemc-tBP = <10>;
423 ingenic,nemc-tAW = <15>;
424 ingenic,nemc-tSTRV = <100>;
425
426 /*
427 * Only CLE/ALE are needed for the devices that are connected, rather
428 * than the full address line set.
429 */
430 pinctrl-names = "default";
431 pinctrl-0 = <&pins_nemc>;
432
433 nand@1 {
434 reg = <1>;
435
436 nand-ecc-step-size = <1024>;
437 nand-ecc-strength = <24>;
438 nand-ecc-mode = "hw";
439 nand-on-flash-bbt;
440
441 pinctrl-names = "default";
442 pinctrl-0 = <&pins_nemc_cs1>;
443
444 partitions {
445 compatible = "fixed-partitions";
446 #address-cells = <2>;
447 #size-cells = <2>;
448
449 partition@0 {
450 label = "u-boot-spl";
451 reg = <0x0 0x0 0x0 0x800000>;
452 };
453
454 partition@800000 {
455 label = "u-boot";
456 reg = <0x0 0x800000 0x0 0x200000>;
457 };
458
459 partition@a00000 {
460 label = "u-boot-env";
461 reg = <0x0 0xa00000 0x0 0x200000>;
462 };
463
464 partition@c00000 {
465 label = "boot";
466 reg = <0x0 0xc00000 0x0 0x4000000>;
467 };
468
469 partition@4c00000 {
470 label = "system";
471 reg = <0x0 0x4c00000 0x1 0xfb400000>;
472 };
473 };
474 };
475 };
476
477 dm9000@6 {
478 compatible = "davicom,dm9000";
479 davicom,no-eeprom;
480
481 pinctrl-names = "default";
482 pinctrl-0 = <&pins_nemc_cs6>;
483
484 reg = <6 0 1>, /* addr */
485 <6 2 1>; /* data */
486
487 ingenic,nemc-tAS = <15>;
488 ingenic,nemc-tAH = <10>;
489 ingenic,nemc-tBP = <20>;
490 ingenic,nemc-tAW = <50>;
491 ingenic,nemc-tSTRV = <100>;
492
493 reset-gpios = <&gpf 12 GPIO_ACTIVE_LOW>;
494 vcc-supply = <&eth0_power>;
495
496 interrupt-parent = <&gpe>;
497 interrupts = <19 IRQ_TYPE_EDGE_RISING>;
498
499 nvmem-cells = <&eth0_addr>;
500 nvmem-cell-names = "mac-address";
501 };
502};
503
504&bch {
505 status = "okay";
506};
507
508&otg_phy {
509 status = "okay";
510
511 vcc-supply = <&otg_power>;
512};
513
514&otg {
515 status = "okay";
516};
517
518&pinctrl {
519 pins_uart0: uart0 {
520 function = "uart0";
521 groups = "uart0-data";
522 bias-disable;
523 };
524
525 pins_uart1: uart1 {
526 function = "uart1";
527 groups = "uart1-data";
528 bias-disable;
529 };
530
531 pins_uart2: uart2 {
532 function = "uart2";
533 groups = "uart2-data", "uart2-hwflow";
534 bias-disable;
535 };
536
537 pins_uart3: uart3 {
538 function = "uart3";
539 groups = "uart3-data", "uart3-hwflow";
540 bias-disable;
541 };
542
543 pins_uart4: uart4 {
544 function = "uart4";
545 groups = "uart4-data";
546 bias-disable;
547 };
548
549 pins_i2c0: i2c0 {
550 function = "i2c0";
551 groups = "i2c0-data";
552 bias-disable;
553 };
554
555 pins_i2c1: i2c1 {
556 function = "i2c1";
557 groups = "i2c1-data";
558 bias-disable;
559 };
560
561 pins_i2c2: i2c2 {
562 function = "i2c2";
563 groups = "i2c2-data";
564 bias-disable;
565 };
566
567 pins_i2c3: i2c3 {
568 function = "i2c3";
569 groups = "i2c3-data";
570 bias-disable;
571 };
572
573 pins_i2c4: i2c4 {
574 function = "i2c4";
575 groups = "i2c4-data-e";
576 bias-disable;
577 };
578
579 pins_hdmi_ddc: hdmi_ddc {
580 function = "hdmi-ddc";
581 groups = "hdmi-ddc";
582 bias-disable;
583 };
584
585 pins_nemc: nemc {
586 function = "nemc";
587 groups = "nemc-data", "nemc-cle-ale", "nemc-rd-we", "nemc-frd-fwe";
588 bias-disable;
589 };
590
591 pins_nemc_cs1: nemc-cs1 {
592 function = "nemc-cs1";
593 groups = "nemc-cs1";
594 bias-disable;
595 };
596
597 pins_nemc_cs6: nemc-cs6 {
598 function = "nemc-cs6";
599 groups = "nemc-cs6";
600 bias-disable;
601 };
602
603 pins_mmc0: mmc0 {
604 function = "mmc0";
605 groups = "mmc0-1bit-e", "mmc0-4bit-e";
606 bias-disable;
607 };
608
609 pins_mmc1: mmc1 {
610 function = "mmc1";
611 groups = "mmc1-1bit-d", "mmc1-4bit-d";
612 bias-disable;
613 };
614};
615
616&hdmi {
617 status = "okay";
618
619 pinctrl-names = "default";
620 pinctrl-0 = <&pins_hdmi_ddc>;
621
622 ports {
623 #address-cells = <1>;
624 #size-cells = <0>;
625
626 port@0 {
627 reg = <0>;
628 dw_hdmi_in: endpoint {
629 remote-endpoint = <&lcd_out>;
630 };
631 };
632
633 port@1 {
634 reg = <1>;
635 dw_hdmi_out: endpoint {
636 remote-endpoint = <&hdmi_con>;
637 };
638 };
639 };
640};
641
642&lcdc0 {
643 status = "okay";
644
645 port {
646 lcd_out: endpoint {
647 remote-endpoint = <&dw_hdmi_in>;
648 };
649 };
650};