1// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2/*
3 * at91-sama5d2_icp.dts - Device Tree file for SAMA5D2-ICP board
4 *
5 *  Copyright (C) 2019 Microchip Technology Inc. and its subsidiaries
6 *
7 *	Author: Radu Pirea & Razvan Stefanescu,
8 *		Codrin Ciubotariu <codrin.ciubotariu@microchip.com>,
9 *		Cristian Birsan <cristian.birsan@microchip.com>
10 */
11/dts-v1/;
12#include "sama5d2.dtsi"
13#include "sama5d2-pinfunc.h"
14#include <dt-bindings/gpio/gpio.h>
15#include <dt-bindings/mfd/atmel-flexcom.h>
16
17/ {
18	model = "Microchip SAMA5D2-ICP";
19	compatible = "microchip,sama5d2-icp", "atmel,sama5d27", "atmel,sama5d2", "atmel,sama5";
20
21	aliases {
22		serial0 = &uart0;	/* debug uart0 + mikro BUS 1 */
23		serial1 = &uart1;	/* mikro BUS 3 */
24		serial3 = &uart3;	/* mikro BUS 2 */
25		serial5 = &uart7;	/* flx2 */
26		i2c0	= &i2c0;
27		i2c1	= &i2c1;
28	};
29
30	chosen {
31		stdout-path = "serial0:115200n8";
32	};
33
34	clocks {
35		slow_xtal {
36			clock-frequency = <32768>;
37		};
38
39		main_xtal {
40			clock-frequency = <12000000>;
41		};
42	};
43
44	gpio_keys {
45		compatible = "gpio-keys";
46
47		pinctrl-names = "default";
48		pinctrl-0 = <&pinctrl_key_gpio_default>;
49		status = "okay";
50
51		sw4 {
52			label = "USER_PB1";
53			gpios = <&pioA PIN_PD0 GPIO_ACTIVE_LOW>;
54			linux,code = <0x104>;
55			wakeup-source;
56		};
57	};
58
59	leds {
60		compatible = "gpio-leds";
61		pinctrl-names = "default";
62		pinctrl-0 = <&pinctrl_led_gpio_default>;
63		status = "okay"; /* conflict with pwm0 */
64
65		red {
66			label = "red";
67			gpios = <&pioA PIN_PB0 GPIO_ACTIVE_HIGH>;
68		};
69
70		green {
71			label = "green";
72			gpios = <&pioA PIN_PB1 GPIO_ACTIVE_HIGH>;
73		};
74
75		blue {
76			label = "blue";
77			gpios = <&pioA PIN_PA31 GPIO_ACTIVE_HIGH>;
78			linux,default-trigger = "heartbeat";
79		};
80	};
81};
82
83&adc {
84	vddana-supply = <&vdd_io_reg>;
85	vref-supply = <&vdd_io_reg>;
86	pinctrl-names = "default";
87	pinctrl-0 = <&pinctrl_adc_default &pinctrl_adtrg_default>;
88	status = "okay";
89};
90
91&can0 {
92	pinctrl-names = "default";
93	pinctrl-0 = <&pinctrl_can0_default>;
94	status = "okay";
95};
96
97&can1 {
98	pinctrl-names = "default";
99	pinctrl-0 = <&pinctrl_can1_default>;
100	status = "okay";
101};
102
103&flx0 { /* mikrobus2 spi */
104	atmel,flexcom-mode = <ATMEL_FLEXCOM_MODE_SPI>;
105	status = "okay";
106
107	spi2: spi@400 {
108		dmas = <0>, <0>;
109		cs-gpios = <&pioA PIN_PC0 GPIO_ACTIVE_LOW>;
110		pinctrl-names = "default";
111		pinctrl-0 = <&pinctrl_mikrobus2_spi &pinctrl_ksz_spi_cs>;
112		status = "okay";
113		#address-cells = <1>;
114		#size-cells = <0>;
115
116		switch0: ksz8563@0 {
117			compatible = "microchip,ksz8563";
118			reg = <0>;
119			reset-gpios = <&pioA PIN_PD4 GPIO_ACTIVE_LOW>;
120
121			spi-max-frequency = <500000>;
122			spi-cpha;
123			spi-cpol;
124
125			ports {
126				#address-cells = <1>;
127				#size-cells = <0>;
128				port@0 {
129					reg = <0>;
130					label = "lan1";
131				};
132
133				port@1 {
134					reg = <1>;
135					label = "lan2";
136				};
137
138				port@2 {
139					reg = <2>;
140					label = "cpu";
141					ethernet = <&macb0>;
142					phy-mode = "mii";
143					fixed-link {
144						speed = <100>;
145						full-duplex;
146					};
147				};
148			};
149		};
150	};
151};
152
153&flx2 {
154	atmel,flexcom-mode = <ATMEL_FLEXCOM_MODE_USART>;
155	status = "okay";
156
157	uart7: serial@200 {
158		pinctrl-0 = <&pinctrl_flx2_default>;
159		pinctrl-names = "default";
160		atmel,use-dma-rx;
161		atmel,use-dma-tx;
162		status = "okay"; /* Conflict w/ qspi1. */
163	};
164};
165
166&flx3 { /* mikrobus1 spi */
167	atmel,flexcom-mode = <ATMEL_FLEXCOM_MODE_SPI>;
168	status = "okay";
169
170	spi5: spi@400 {
171		dmas = <0>, <0>;
172		pinctrl-names = "default";
173		pinctrl-0 = <&pinctrl_mikrobus1_spi &pinctrl_mikrobus1_spi_cs>;
174		status = "okay";
175	};
176};
177
178&flx4 {
179	atmel,flexcom-mode = <ATMEL_FLEXCOM_MODE_TWI>;
180	status = "okay";
181
182	i2c6: i2c@600 {
183		dmas = <0>, <0>;
184		pinctrl-names = "default";
185		pinctrl-0 = <&pinctrl_flx4_default>;
186		status = "okay";
187
188		mcp16502@5b {
189			compatible = "microchip,mcp16502";
190			reg = <0x5b>;
191			status = "okay";
192			lpm-gpios = <&pioBU 7 GPIO_ACTIVE_LOW>;
193
194			regulators {
195				vdd_io_reg: VDD_IO {
196					regulator-name = "VDD_IO";
197					regulator-min-microvolt = <1200000>;
198					regulator-max-microvolt = <3700000>;
199					regulator-initial-mode = <2>;
200					regulator-allowed-modes = <2>, <4>;
201					regulator-always-on;
202
203					regulator-state-standby {
204						regulator-on-in-suspend;
205						regulator-mode = <4>;
206					};
207
208					regulator-state-mem {
209						regulator-off-in-suspend;
210						regulator-mode = <4>;
211					};
212				};
213
214				VDD_DDR {
215					regulator-name = "VDD_DDR";
216					regulator-min-microvolt = <600000>;
217					regulator-max-microvolt = <1850000>;
218					regulator-initial-mode = <2>;
219					regulator-allowed-modes = <2>, <4>;
220					regulator-always-on;
221
222					regulator-state-standby {
223						regulator-on-in-suspend;
224						regulator-mode = <4>;
225					};
226
227					regulator-state-mem {
228						regulator-on-in-suspend;
229						regulator-mode = <4>;
230					};
231				};
232
233				VDD_CORE {
234					regulator-name = "VDD_CORE";
235					regulator-min-microvolt = <600000>;
236					regulator-max-microvolt = <1850000>;
237					regulator-initial-mode = <2>;
238					regulator-allowed-modes = <2>, <4>;
239					regulator-always-on;
240
241					regulator-state-standby {
242						regulator-on-in-suspend;
243						regulator-mode = <4>;
244					};
245
246					regulator-state-mem {
247						regulator-off-in-suspend;
248						regulator-mode = <4>;
249					};
250				};
251
252				VDD_OTHER {
253					regulator-name = "VDD_OTHER";
254					regulator-min-microvolt = <600000>;
255					regulator-max-microvolt = <1850000>;
256					regulator-initial-mode = <2>;
257					regulator-allowed-modes = <2>, <4>;
258					regulator-always-on;
259
260					regulator-state-standby {
261						regulator-on-in-suspend;
262						regulator-mode = <4>;
263					};
264
265					regulator-state-mem {
266						regulator-off-in-suspend;
267						regulator-mode = <4>;
268					};
269				};
270
271				LDO1 {
272					regulator-name = "LDO1";
273					regulator-min-microvolt = <1200000>;
274					regulator-max-microvolt = <3700000>;
275					regulator-always-on;
276
277					regulator-state-standby {
278						regulator-on-in-suspend;
279					};
280
281					regulator-state-mem {
282						regulator-off-in-suspend;
283					};
284				};
285
286				LDO2 {
287					regulator-name = "LDO2";
288					regulator-min-microvolt = <1200000>;
289					regulator-max-microvolt = <3700000>;
290					regulator-always-on;
291
292					regulator-state-standby {
293						regulator-on-in-suspend;
294					};
295
296					regulator-state-mem {
297						regulator-off-in-suspend;
298					};
299				};
300
301			};
302		};
303	};
304};
305
306&i2c0 { /* mikrobus i2c */
307	pinctrl-names = "default";
308	pinctrl-0 = <&pinctrl_mikrobus_i2c>;
309	status = "okay";
310};
311
312&i2c1 {
313	dmas = <0>, <0>;
314	pinctrl-names = "default";
315	pinctrl-0 = <&pinctrl_i2c1_default>;
316	status = "okay";
317
318	eeprom@50 {
319		compatible = "atmel,24c32";
320		reg = <0x50>;
321		pagesize = <16>;
322		status = "okay";
323	};
324
325	eeprom@52 {
326		compatible = "atmel,24c32";
327		reg = <0x52>;
328		pagesize = <16>;
329		status = "disabled";
330	};
331
332	eeprom@53 {
333		compatible = "atmel,24c32";
334		reg = <0x53>;
335		pagesize = <16>;
336		status = "disabled";
337	};
338};
339
340&macb0 {
341	pinctrl-names = "default";
342	pinctrl-0 = <&pinctrl_macb0_default &pinctrl_macb0_phy_irq &pinctrl_macb0_rst>;
343	phy-mode = "mii";
344	status = "okay";
345
346	fixed-link {
347		speed = <100>;
348		full-duplex;
349	};
350};
351
352&pioA {
353	pinctrl_adc_default: adc_default {
354		pinmux = <PIN_PD24__GPIO>,
355				<PIN_PD25__GPIO>,
356				<PIN_PD26__GPIO>;
357		bias-disable;
358	};
359
360	/*
361	 * The ADTRG pin can work on any edge type.
362	 * In here it's being pulled up, so need to
363	 * connect it to ground to get an edge e.g.
364	 * Trigger can be configured on falling, rise
365	 * or any edge, and the pull-up can be changed
366	 * to pull-down or left floating according to
367	 * needs.
368	 */
369	pinctrl_adtrg_default: adtrg_default {
370		pinmux = <PIN_PD31__ADTRG>;
371		bias-pull-up;
372	};
373
374	pinctrl_flx4_default: flx4_default {
375		pinmux = <PIN_PC28__FLEXCOM4_IO0>,
376			 <PIN_PC29__FLEXCOM4_IO1>;
377		bias-disable;
378	};
379
380	pinctrl_can0_default: can0_default {
381		pinmux = <PIN_PC10__CANTX0>,
382			 <PIN_PC11__CANRX0>;
383		bias-disable;
384	};
385
386	pinctrl_can1_default: can1_default {
387		pinmux = <PIN_PC26__CANTX1>,
388			 <PIN_PC27__CANRX1>;
389		bias-disable;
390	};
391
392	pinctrl_i2c1_default: i2c1_default {
393		pinmux = <PIN_PD19__TWD1>,
394			 <PIN_PD20__TWCK1>;
395		bias-disable;
396	};
397
398	pinctrl_key_gpio_default: key_gpio_default {
399		pinmux = <PIN_PD0__GPIO>;
400		bias-pull-up;
401	};
402
403	pinctrl_led_gpio_default: led_gpio_default {
404		pinmux = <PIN_PB0__GPIO>,
405			 <PIN_PB1__GPIO>,
406			 <PIN_PA31__GPIO>;
407		bias-pull-up;
408	};
409
410	pinctrl_qspi1_default: qspi1_default {
411		pinmux = <PIN_PA6__QSPI1_SCK>,
412			 <PIN_PA7__QSPI1_IO0>,
413			 <PIN_PA8__QSPI1_IO1>,
414			 <PIN_PA9__QSPI1_IO2>,
415			 <PIN_PA10__QSPI1_IO3>,
416			 <PIN_PA11__QSPI1_CS>;
417		bias-disable;
418	};
419
420	pinctrl_sdmmc0_default: sdmmc0_default {
421		cmd_data {
422			pinmux = <PIN_PA1__SDMMC0_CMD>,
423				 <PIN_PA2__SDMMC0_DAT0>,
424				 <PIN_PA3__SDMMC0_DAT1>,
425				 <PIN_PA4__SDMMC0_DAT2>,
426				 <PIN_PA5__SDMMC0_DAT3>;
427			bias-disable;
428		};
429
430		ck_cd {
431			pinmux = <PIN_PA0__SDMMC0_CK>,
432				 <PIN_PA13__SDMMC0_CD>;
433			bias-disable;
434		};
435	};
436
437	pinctrl_sdmmc1_default: sdmmc1_default {
438		cmd_data {
439			pinmux = <PIN_PA18__SDMMC1_DAT0>,
440				 <PIN_PA19__SDMMC1_DAT1>,
441				 <PIN_PA20__SDMMC1_DAT2>,
442				 <PIN_PA21__SDMMC1_DAT3>;
443			bias-disable;
444		};
445
446		ck_cd {
447			pinmux = <PIN_PA22__SDMMC1_CK>,
448				 <PIN_PA28__SDMMC1_CMD>;
449			bias-disable;
450		};
451	};
452
453	pinctrl_mikrobus_i2c: mikrobus_i2c {
454		pinmux = <PIN_PD22__TWCK0>,
455			 <PIN_PD21__TWD0>;
456		bias-disable;
457	};
458
459	pinctrl_mikrobus1_an: mikrobus1_an {
460		pinmux = <PIN_PD26__GPIO>;
461		bias-disable;
462	};
463
464	pinctrl_mikrobus1_rst: mikrobus1_rst {
465		pinmux = <PIN_PC5__GPIO>;
466		bias-disable;
467	};
468
469	pinctrl_mikrobus1_spi_cs: mikrobus1_spi_cs {
470		pinmux = <PIN_PC21__FLEXCOM3_IO3>;
471		bias-disable;
472	};
473
474	pinctrl_mikrobus1_spi: mikrobus1_spi {
475		pinmux = <PIN_PC20__FLEXCOM3_IO0>,
476			 <PIN_PC19__FLEXCOM3_IO1>,
477			 <PIN_PC18__FLEXCOM3_IO2>;
478		bias-disable;
479	};
480
481	pinctrl_mikrobus1_pwm: mikrobus1_pwm {
482		pinmux = <PIN_PC4__TIOB1>;
483		bias-disable;
484	};
485
486	pinctrl_mikrobus1_int: mikrobus1_int {
487		pinmux = <PIN_PC3__GPIO>;
488		bias-disable;
489	};
490
491	pinctrl_mikrobus1_uart: mikrobus1_uart {
492		pinmux = <PIN_PB26__URXD0>,
493			 <PIN_PB27__UTXD0>;
494		bias-disable;
495	};
496
497	pinctrl_mikrobus2_an: mikrobus2_an {
498		pinmux = <PIN_PD25__GPIO>;
499		bias-disable;
500	};
501
502	pinctrl_mikrobus2_rst: mikrobus2_rst {
503		pinmux = <PIN_PB24__GPIO>;
504		bias-disable;
505	};
506
507	pinctrl_mikrobus2_spi_cs: mikrobus2_spi_cs {
508		pinmux = <PIN_PB31__FLEXCOM0_IO3>;
509		bias-disable;
510	};
511
512	pinctrl_mikrobus2_spi: mikrobus2_spi {
513		pinmux = <PIN_PB28__FLEXCOM0_IO0>,
514			 <PIN_PB29__FLEXCOM0_IO1>,
515			 <PIN_PB30__FLEXCOM0_IO2>;
516		bias-disable;
517	};
518
519	pinctrl_ksz_spi_cs: ksz_spi_cs {
520		pinmux = <PIN_PC0__GPIO>;
521		bias-disable;
522	};
523
524	pinctrl_mikrobus2_pwm: mikrobus2_pwm {
525		pinmux = <PIN_PB23__TIOB2>;
526		bias-disable;
527	};
528
529	pinctrl_mikrobus2_int: mikrobus2_int {
530		pinmux = <PIN_PB22__GPIO>;
531		bias-disable;
532	};
533
534	pinctrl_mikrobus2_uart: mikrobus2_uart {
535		pinmux = <PIN_PC12__URXD3>,
536			 <PIN_PC13__UTXD3>;
537		bias-disable;
538	};
539
540	pinctrl_mikrobus3_an: mikrobus3_an {
541		pinmux = <PIN_PD24__GPIO>;
542		bias-disable;
543	};
544
545	pinctrl_mikrobus3_rst: mikrobus3_rst {
546		pinmux = <PIN_PB21__GPIO>;
547		bias-disable;
548	};
549
550	pinctrl_mikrobus3_spi_cs: mikrobus3_spi_cs {
551		pinmux = <PIN_PA17__SPI0_NPCS0>;
552		bias-disable;
553	};
554
555	pinctrl_mikrobus3_spi: mikrobus3_spi {
556		pinmux = <PIN_PA14__SPI0_SPCK>,
557			 <PIN_PA16__SPI0_MISO>,
558			 <PIN_PA15__SPI0_MOSI>;
559		bias-disable;
560	};
561
562	pinctrl_mikrobus3_pwm: mikrobus3_pwm {
563		pinmux = <PIN_PB20__TIOB3>;
564		bias-disable;
565	};
566
567	pinctrl_mikrobus3_int: mikrobus3_int {
568		pinmux = <PIN_PB18__GPIO>;
569		bias-disable;
570	};
571
572	pinctrl_mikrobus3_uart: mikrobus3_uart {
573		pinmux = <PIN_PC7__URXD1>,
574			 <PIN_PC8__UTXD1>;
575		bias-disable;
576	};
577
578	pinctrl_usb_default: usb_default {
579		pinmux = <PIN_PC17__GPIO>;
580		bias-disable;
581	};
582
583	pinctrl_usba_vbus: usba_vbus {
584		pinmux = <PIN_PD23__GPIO>;
585		bias-disable;
586	};
587
588	pinctrl_pwm0_pwm2_default: pwm0_pwm2_default {
589		pinmux = <PIN_PB5__PWMH2>,
590			 <PIN_PB6__PWML2>;
591		bias-pull-up;
592	};
593
594	pinctrl_macb0_default: macb0_default {
595		pinmux = <PIN_PD1__GRXCK>,
596			 <PIN_PD2__GTXER>,
597			 <PIN_PD5__GRX2>,
598			 <PIN_PD6__GRX3>,
599			 <PIN_PD7__GTX2>,
600			 <PIN_PD8__GTX3>,
601			 <PIN_PD9__GTXCK>,
602			 <PIN_PD10__GTXEN>,
603			 <PIN_PD11__GRXDV>,
604			 <PIN_PD12__GRXER>,
605			 <PIN_PD13__GRX0>,
606			 <PIN_PD14__GRX1>,
607			 <PIN_PD15__GTX0>,
608			 <PIN_PD16__GTX1>,
609			 <PIN_PD17__GMDC>,
610			 <PIN_PD18__GMDIO>;
611		bias-disable;
612	};
613
614	pinctrl_macb0_phy_irq: macb0_phy_irq {
615		pinmux = <PIN_PD3__GPIO>;
616		bias-disable;
617	};
618
619	pinctrl_macb0_rst: macb0_sw_rst {
620		pinmux = <PIN_PD4__GPIO>;
621		bias-disable;
622	};
623
624	pinctrl_flx2_default: flx2_default {
625		pinmux = <PIN_PA6__FLEXCOM2_IO0>,
626			 <PIN_PA7__FLEXCOM2_IO1>,
627			 <PIN_PA9__FLEXCOM2_IO3>,
628			 <PIN_PA10__FLEXCOM2_IO4>;
629		bias-disable;
630	};
631};
632
633&pwm0 {
634	pinctrl-names = "default";
635	pinctrl-0 = <&pinctrl_pwm0_pwm2_default>;
636	status = "disabled"; /* conflict with leds, HSIC */
637};
638
639&qspi1 {
640	pinctrl-names = "default";
641	pinctrl-0 = <&pinctrl_qspi1_default>;
642	status = "disabled"; /* Conflict with wilc_pwrseq, flx2 */
643
644	flash@0 {
645		#address-cells = <1>;
646		#size-cells = <1>;
647		compatible = "jedec,spi-nor";
648		reg = <0>;
649		spi-max-frequency = <80000000>;
650		spi-tx-bus-width = <4>;
651		spi-rx-bus-width = <4>;
652		m25p,fast-read;
653
654		at91bootstrap@0 {
655			label = "qspi: at91bootstrap";
656			reg = <0x00000000 0x00040000>;
657		};
658
659		bootloader@40000 {
660			label = "qspi: bootloader";
661			reg = <0x00040000 0x000c0000>;
662		};
663
664		bootloaderenvred@100000 {
665			label = "qspi: bootloader env redundant";
666			reg = <0x00100000 0x00040000>;
667		};
668
669		bootloaderenv@140000 {
670			label = "qspi: bootloader env";
671			reg = <0x00140000 0x00040000>;
672		};
673
674		dtb@180000 {
675			label = "qspi: device tree";
676			reg = <0x00180000 0x00080000>;
677		};
678
679		kernel@200000 {
680			label = "qspi: kernel";
681			reg = <0x00200000 0x00600000>;
682		};
683	};
684};
685
686&sdmmc0 {
687	no-1-8-v;
688	bus-width = <4>;
689	pinctrl-names = "default";
690	pinctrl-0 = <&pinctrl_sdmmc0_default>;
691	status = "okay";
692};
693
694&shutdown_controller {
695	atmel,shdwc-debouncer = <976>;
696	atmel,wakeup-rtc-timer;
697
698	input@0 {
699		reg = <0>;
700		atmel,wakeup-type = "low";
701	};
702};
703
704&spi0 {  /* mikrobus3 spi */
705	pinctrl-names = "default";
706	pinctrl-0 = <&pinctrl_mikrobus3_spi &pinctrl_mikrobus3_spi_cs>;
707	status = "okay";
708};
709
710&tcb0 {
711	timer0: timer@0 {
712		compatible = "atmel,tcb-timer";
713		reg = <0>;
714	};
715
716	timer1: timer@1 {
717		compatible = "atmel,tcb-timer";
718		reg = <1>;
719	};
720};
721
722&uart0 {
723	pinctrl-names = "default";
724	pinctrl-0 = <&pinctrl_mikrobus1_uart>;
725	atmel,use-dma-rx;
726	atmel,use-dma-tx;
727	status = "okay";
728};
729
730&uart1 {
731	pinctrl-names = "default";
732	pinctrl-0 = <&pinctrl_mikrobus3_uart>;
733	atmel,use-dma-rx;
734	atmel,use-dma-tx;
735	status = "okay";
736};
737
738&uart3 {
739	pinctrl-names = "default";
740	pinctrl-0 = <&pinctrl_mikrobus2_uart>;
741	atmel,use-dma-rx;
742	atmel,use-dma-tx;
743	status = "okay";
744};
745
746&usb0 {
747	atmel,vbus-gpio = <&pioA PIN_PD23 GPIO_ACTIVE_HIGH>;
748	pinctrl-names = "default";
749	pinctrl-0 = <&pinctrl_usba_vbus>;
750	status = "okay";
751};
752
753&usb1 {
754	num-ports = <3>;
755	pinctrl-names = "default";
756	pinctrl-0 = <&pinctrl_usb_default>;
757	status = "okay";
758};
759
760&usb2 {
761	phy_type = "hsic";
762	status = "okay";
763};
764
765&watchdog {
766	status = "okay";
767};
768