// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * at91-sama5d2_icp.dts - Device Tree file for SAMA5D2-ICP board
 *
 *  Copyright (C) 2019 Microchip Technology Inc. and its subsidiaries
 *
 *	Author: Radu Pirea & Razvan Stefanescu,
 *		Codrin Ciubotariu <codrin.ciubotariu@microchip.com>,
 *		Cristian Birsan <cristian.birsan@microchip.com>
 */
/dts-v1/;
#include "sama5d2.dtsi"
#include "sama5d2-pinfunc.h"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/mfd/atmel-flexcom.h>

/ {
	model = "Microchip SAMA5D2-ICP";
	compatible = "microchip,sama5d2-icp", "atmel,sama5d27", "atmel,sama5d2", "atmel,sama5";

	aliases {
		serial0 = &uart0;	/* debug uart0 + mikro BUS 1 */
		serial1 = &uart1;	/* mikro BUS 3 */
		serial3 = &uart3;	/* mikro BUS 2 */
		serial5 = &uart7;	/* flx2 */
		i2c0 = &i2c0;
		i2c1 = &i2c1;
	};

	chosen {
		stdout-path = "serial0:115200n8";
	};

	clocks {
		slow_xtal {
			clock-frequency = <32768>;
		};

		main_xtal {
			clock-frequency = <12000000>;
		};
	};

	gpio-keys {
		compatible = "gpio-keys";

		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_key_gpio_default>;

		button-1 {
			label = "USER_PB1";
			gpios = <&pioA PIN_PD0 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_PROG1>;
			wakeup-source;
		};
	};

	leds {
		compatible = "gpio-leds";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_led_gpio_default>;
		status = "okay"; /* conflict with pwm0 */

		led-red {
			label = "red";
			gpios = <&pioA PIN_PB0 GPIO_ACTIVE_HIGH>;
		};

		led-green {
			label = "green";
			gpios = <&pioA PIN_PB1 GPIO_ACTIVE_HIGH>;
		};

		led-blue {
			label = "blue";
			gpios = <&pioA PIN_PA31 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "heartbeat";
		};
	};

	reg_5v: regulator-5v {
		compatible = "regulator-fixed";
		regulator-name = "VDD_MAIN_5V";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		regulator-always-on;
	};
};

&adc {
	vddana-supply = <&vdd_io_reg>;
	vref-supply = <&vdd_io_reg>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_adc_default &pinctrl_adtrg_default>;
	status = "okay";
};

&can0 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_can0_default>;
	status = "okay";
};

&can1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_can1_default>;
	status = "okay";
};

&flx0 { /* mikrobus2 spi */
	atmel,flexcom-mode = <ATMEL_FLEXCOM_MODE_SPI>;
	status = "okay";

	spi2: spi@400 {
		dmas = <0>, <0>;
		cs-gpios = <&pioA PIN_PC0 GPIO_ACTIVE_LOW>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_mikrobus2_spi &pinctrl_ksz_spi_cs>;
		status = "okay";
		#address-cells = <1>;
		#size-cells = <0>;

		switch0: ksz8563@0 {
			compatible = "microchip,ksz8563";
			reg = <0>;
			reset-gpios = <&pioA PIN_PD4 GPIO_ACTIVE_LOW>;

			spi-max-frequency = <500000>;
			spi-cpha;
			spi-cpol;

			ports {
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 {
					reg = <0>;
					label = "lan1";
				};

				port@1 {
					reg = <1>;
					label = "lan2";
				};

				port@2 {
					reg = <2>;
					label = "cpu";
					ethernet = <&macb0>;
					phy-mode = "mii";
					fixed-link {
						speed = <100>;
						full-duplex;
					};
				};
			};
		};
	};
};

&flx2 {
	atmel,flexcom-mode = <ATMEL_FLEXCOM_MODE_USART>;
	status = "okay";

	uart7: serial@200 {
		pinctrl-0 = <&pinctrl_flx2_default>;
		pinctrl-names = "default";
		atmel,use-dma-rx;
		atmel,use-dma-tx;
		status = "okay"; /* Conflict w/ qspi1. */
	};
};

&flx3 { /* mikrobus1 spi */
	atmel,flexcom-mode = <ATMEL_FLEXCOM_MODE_SPI>;
	status = "okay";

	spi5: spi@400 {
		dmas = <0>, <0>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_mikrobus1_spi &pinctrl_mikrobus1_spi_cs>;
		status = "okay";
	};
};

&flx4 {
	atmel,flexcom-mode = <ATMEL_FLEXCOM_MODE_TWI>;
	status = "okay";

	i2c6: i2c@600 {
		dmas = <0>, <0>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_flx4_default>;
		i2c-digital-filter;
		i2c-digital-filter-width-ns = <35>;
		status = "okay";

		mcp16502@5b {
			compatible = "microchip,mcp16502";
			reg = <0x5b>;
			lvin-supply = <&reg_5v>;
			pvin1-supply = <&reg_5v>;
			pvin2-supply = <&reg_5v>;
			pvin3-supply = <&reg_5v>;
			pvin4-supply = <&reg_5v>;
			status = "okay";
			lpm-gpios = <&pioBU 7 GPIO_ACTIVE_LOW>;

			regulators {
				vdd_io_reg: VDD_IO {
					regulator-name = "VDD_IO";
					regulator-min-microvolt = <3300000>;
					regulator-max-microvolt = <3300000>;
					regulator-initial-mode = <2>;
					regulator-allowed-modes = <2>, <4>;
					regulator-always-on;

					regulator-state-standby {
						regulator-on-in-suspend;
						regulator-mode = <4>;
					};

					regulator-state-mem {
						regulator-off-in-suspend;
						regulator-mode = <4>;
					};
				};

				VDD_DDR {
					regulator-name = "VDD_DDR";
					regulator-min-microvolt = <1350000>;
					regulator-max-microvolt = <1350000>;
					regulator-initial-mode = <2>;
					regulator-allowed-modes = <2>, <4>;
					regulator-always-on;

					regulator-state-standby {
						regulator-on-in-suspend;
						regulator-mode = <4>;
					};

					regulator-state-mem {
						regulator-on-in-suspend;
						regulator-mode = <4>;
					};
				};

				VDD_CORE {
					regulator-name = "VDD_CORE";
					regulator-min-microvolt = <1250000>;
					regulator-max-microvolt = <1250000>;
					regulator-initial-mode = <2>;
					regulator-allowed-modes = <2>, <4>;
					regulator-always-on;

					regulator-state-standby {
						regulator-on-in-suspend;
						regulator-mode = <4>;
					};

					regulator-state-mem {
						regulator-off-in-suspend;
						regulator-mode = <4>;
					};
				};

				VDD_OTHER {
					regulator-name = "VDD_OTHER";
					regulator-min-microvolt = <600000>;
					regulator-max-microvolt = <1850000>;
					regulator-initial-mode = <2>;
					regulator-allowed-modes = <2>, <4>;

					regulator-state-standby {
						regulator-on-in-suspend;
						regulator-mode = <4>;
					};

					regulator-state-mem {
						regulator-off-in-suspend;
						regulator-mode = <4>;
					};
				};

				LDO1 {
					regulator-name = "LDO1";
					regulator-min-microvolt = <2500000>;
					regulator-max-microvolt = <2500000>;
					regulator-always-on;

					regulator-state-standby {
						regulator-on-in-suspend;
					};

					regulator-state-mem {
						regulator-off-in-suspend;
					};
				};

				LDO2 {
					regulator-name = "LDO2";
					regulator-min-microvolt = <3300000>;
					regulator-max-microvolt = <3300000>;
					regulator-always-on;

					regulator-state-standby {
						regulator-on-in-suspend;
					};

					regulator-state-mem {
						regulator-off-in-suspend;
					};
				};

			};
		};
	};
};

&i2c0 { /* mikrobus i2c */
	pinctrl-names = "default", "gpio";
	pinctrl-0 = <&pinctrl_mikrobus_i2c>;
	pinctrl-1 = <&pinctrl_i2c0_gpio>;
	sda-gpios = <&pioA PIN_PD21 GPIO_ACTIVE_HIGH>;
	scl-gpios = <&pioA PIN_PD22 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
	i2c-digital-filter;
	i2c-digital-filter-width-ns = <35>;
	status = "okay";
};

&i2c1 {
	dmas = <0>, <0>;
	pinctrl-names = "default", "gpio";
	pinctrl-0 = <&pinctrl_i2c1_default>;
	pinctrl-1 = <&pinctrl_i2c1_gpio>;
	sda-gpios = <&pioA PIN_PD19 GPIO_ACTIVE_HIGH>;
	scl-gpios = <&pioA PIN_PD20 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
	i2c-digital-filter;
	i2c-digital-filter-width-ns = <35>;
	status = "okay";

	eeprom@50 {
		compatible = "atmel,24c02";
		reg = <0x50>;
		pagesize = <16>;
		status = "okay";
	};

	eeprom@52 {
		compatible = "atmel,24c02";
		reg = <0x52>;
		pagesize = <16>;
		status = "disabled";
	};

	eeprom@53 {
		compatible = "atmel,24c02";
		reg = <0x53>;
		pagesize = <16>;
		status = "disabled";
	};
};

&macb0 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_macb0_default &pinctrl_macb0_phy_irq &pinctrl_macb0_rst>;
	phy-mode = "mii";
	status = "okay";

	fixed-link {
		speed = <100>;
		full-duplex;
	};
};

&pioA {
	pinctrl_adc_default: adc_default {
		pinmux = <PIN_PD24__GPIO>,
				<PIN_PD25__GPIO>,
				<PIN_PD26__GPIO>;
		bias-disable;
	};

	/*
	 * The ADTRG pin can work on any edge type.
	 * In here it's being pulled up, so need to
	 * connect it to ground to get an edge e.g.
	 * Trigger can be configured on falling, rise
	 * or any edge, and the pull-up can be changed
	 * to pull-down or left floating according to
	 * needs.
	 */
	pinctrl_adtrg_default: adtrg_default {
		pinmux = <PIN_PD31__ADTRG>;
		bias-pull-up;
	};

	pinctrl_flx4_default: flx4_default {
		pinmux = <PIN_PC28__FLEXCOM4_IO0>,
			 <PIN_PC29__FLEXCOM4_IO1>;
		bias-disable;
	};

	pinctrl_can0_default: can0_default {
		pinmux = <PIN_PC10__CANTX0>,
			 <PIN_PC11__CANRX0>;
		bias-disable;
	};

	pinctrl_can1_default: can1_default {
		pinmux = <PIN_PC26__CANTX1>,
			 <PIN_PC27__CANRX1>;
		bias-disable;
	};

	pinctrl_i2c1_default: i2c1_default {
		pinmux = <PIN_PD19__TWD1>,
			 <PIN_PD20__TWCK1>;
		bias-disable;
	};

	pinctrl_i2c1_gpio: i2c1_gpio {
                pinmux = <PIN_PD19__GPIO>,
                         <PIN_PD20__GPIO>;
                bias-disable;
        };

	pinctrl_key_gpio_default: key_gpio_default {
		pinmux = <PIN_PD0__GPIO>;
		bias-pull-up;
	};

	pinctrl_led_gpio_default: led_gpio_default {
		pinmux = <PIN_PB0__GPIO>,
			 <PIN_PB1__GPIO>,
			 <PIN_PA31__GPIO>;
		bias-pull-up;
	};

	pinctrl_qspi1_default: qspi1_default {
		pinmux = <PIN_PA6__QSPI1_SCK>,
			 <PIN_PA7__QSPI1_IO0>,
			 <PIN_PA8__QSPI1_IO1>,
			 <PIN_PA9__QSPI1_IO2>,
			 <PIN_PA10__QSPI1_IO3>,
			 <PIN_PA11__QSPI1_CS>;
		bias-disable;
	};

	pinctrl_sdmmc0_default: sdmmc0_default {
		cmd_data {
			pinmux = <PIN_PA1__SDMMC0_CMD>,
				 <PIN_PA2__SDMMC0_DAT0>,
				 <PIN_PA3__SDMMC0_DAT1>,
				 <PIN_PA4__SDMMC0_DAT2>,
				 <PIN_PA5__SDMMC0_DAT3>;
			bias-disable;
		};

		ck_cd {
			pinmux = <PIN_PA0__SDMMC0_CK>,
				 <PIN_PA13__SDMMC0_CD>;
			bias-disable;
		};
	};

	pinctrl_sdmmc1_default: sdmmc1_default {
		cmd_data {
			pinmux = <PIN_PA18__SDMMC1_DAT0>,
				 <PIN_PA19__SDMMC1_DAT1>,
				 <PIN_PA20__SDMMC1_DAT2>,
				 <PIN_PA21__SDMMC1_DAT3>;
			bias-disable;
		};

		ck_cd {
			pinmux = <PIN_PA22__SDMMC1_CK>,
				 <PIN_PA28__SDMMC1_CMD>;
			bias-disable;
		};
	};

	pinctrl_mikrobus_i2c: mikrobus_i2c {
		pinmux = <PIN_PD22__TWCK0>,
			 <PIN_PD21__TWD0>;
		bias-disable;
	};

	pinctrl_i2c0_gpio: i2c0_gpio {
		pinmux = <PIN_PD21__GPIO>,
			 <PIN_PD22__GPIO>;
		bias-disable;
	};

	pinctrl_mikrobus1_an: mikrobus1_an {
		pinmux = <PIN_PD26__GPIO>;
		bias-disable;
	};

	pinctrl_mikrobus1_rst: mikrobus1_rst {
		pinmux = <PIN_PC5__GPIO>;
		bias-disable;
	};

	pinctrl_mikrobus1_spi_cs: mikrobus1_spi_cs {
		pinmux = <PIN_PC21__FLEXCOM3_IO3>;
		bias-disable;
	};

	pinctrl_mikrobus1_spi: mikrobus1_spi {
		pinmux = <PIN_PC20__FLEXCOM3_IO0>,
			 <PIN_PC19__FLEXCOM3_IO1>,
			 <PIN_PC18__FLEXCOM3_IO2>;
		bias-disable;
	};

	pinctrl_mikrobus1_pwm: mikrobus1_pwm {
		pinmux = <PIN_PC4__TIOB1>;
		bias-disable;
	};

	pinctrl_mikrobus1_int: mikrobus1_int {
		pinmux = <PIN_PC3__GPIO>;
		bias-disable;
	};

	pinctrl_mikrobus1_uart: mikrobus1_uart {
		pinmux = <PIN_PB26__URXD0>,
			 <PIN_PB27__UTXD0>;
		bias-disable;
	};

	pinctrl_mikrobus2_an: mikrobus2_an {
		pinmux = <PIN_PD25__GPIO>;
		bias-disable;
	};

	pinctrl_mikrobus2_rst: mikrobus2_rst {
		pinmux = <PIN_PB24__GPIO>;
		bias-disable;
	};

	pinctrl_mikrobus2_spi_cs: mikrobus2_spi_cs {
		pinmux = <PIN_PB31__FLEXCOM0_IO3>;
		bias-disable;
	};

	pinctrl_mikrobus2_spi: mikrobus2_spi {
		pinmux = <PIN_PB28__FLEXCOM0_IO0>,
			 <PIN_PB29__FLEXCOM0_IO1>,
			 <PIN_PB30__FLEXCOM0_IO2>;
		bias-disable;
	};

	pinctrl_ksz_spi_cs: ksz_spi_cs {
		pinmux = <PIN_PC0__GPIO>;
		bias-disable;
	};

	pinctrl_mikrobus2_pwm: mikrobus2_pwm {
		pinmux = <PIN_PB23__TIOB2>;
		bias-disable;
	};

	pinctrl_mikrobus2_int: mikrobus2_int {
		pinmux = <PIN_PB22__GPIO>;
		bias-disable;
	};

	pinctrl_mikrobus2_uart: mikrobus2_uart {
		pinmux = <PIN_PC12__URXD3>,
			 <PIN_PC13__UTXD3>;
		bias-disable;
	};

	pinctrl_mikrobus3_an: mikrobus3_an {
		pinmux = <PIN_PD24__GPIO>;
		bias-disable;
	};

	pinctrl_mikrobus3_rst: mikrobus3_rst {
		pinmux = <PIN_PB21__GPIO>;
		bias-disable;
	};

	pinctrl_mikrobus3_spi_cs: mikrobus3_spi_cs {
		pinmux = <PIN_PA17__SPI0_NPCS0>;
		bias-disable;
	};

	pinctrl_mikrobus3_spi: mikrobus3_spi {
		pinmux = <PIN_PA14__SPI0_SPCK>,
			 <PIN_PA16__SPI0_MISO>,
			 <PIN_PA15__SPI0_MOSI>;
		bias-disable;
	};

	pinctrl_mikrobus3_pwm: mikrobus3_pwm {
		pinmux = <PIN_PB20__TIOB3>;
		bias-disable;
	};

	pinctrl_mikrobus3_int: mikrobus3_int {
		pinmux = <PIN_PB18__GPIO>;
		bias-disable;
	};

	pinctrl_mikrobus3_uart: mikrobus3_uart {
		pinmux = <PIN_PC7__URXD1>,
			 <PIN_PC8__UTXD1>;
		bias-disable;
	};

	pinctrl_usb_default: usb_default {
		pinmux = <PIN_PC17__GPIO>;
		bias-disable;
	};

	pinctrl_usba_vbus: usba_vbus {
		pinmux = <PIN_PD23__GPIO>;
		bias-disable;
	};

	pinctrl_pwm0_pwm2_default: pwm0_pwm2_default {
		pinmux = <PIN_PB5__PWMH2>,
			 <PIN_PB6__PWML2>;
		bias-pull-up;
	};

	pinctrl_macb0_default: macb0_default {
		pinmux = <PIN_PD1__GRXCK>,
			 <PIN_PD2__GTXER>,
			 <PIN_PD5__GRX2>,
			 <PIN_PD6__GRX3>,
			 <PIN_PD7__GTX2>,
			 <PIN_PD8__GTX3>,
			 <PIN_PD9__GTXCK>,
			 <PIN_PD10__GTXEN>,
			 <PIN_PD11__GRXDV>,
			 <PIN_PD12__GRXER>,
			 <PIN_PD13__GRX0>,
			 <PIN_PD14__GRX1>,
			 <PIN_PD15__GTX0>,
			 <PIN_PD16__GTX1>,
			 <PIN_PD17__GMDC>,
			 <PIN_PD18__GMDIO>;
		bias-disable;
	};

	pinctrl_macb0_phy_irq: macb0_phy_irq {
		pinmux = <PIN_PD3__GPIO>;
		bias-disable;
	};

	pinctrl_macb0_rst: macb0_sw_rst {
		pinmux = <PIN_PD4__GPIO>;
		bias-disable;
	};

	pinctrl_flx2_default: flx2_default {
		pinmux = <PIN_PA6__FLEXCOM2_IO0>,
			 <PIN_PA7__FLEXCOM2_IO1>,
			 <PIN_PA9__FLEXCOM2_IO3>,
			 <PIN_PA10__FLEXCOM2_IO4>;
		bias-disable;
	};
};

&pwm0 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_pwm0_pwm2_default>;
	status = "disabled"; /* conflict with leds, HSIC */
};

&qspi1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_qspi1_default>;
	status = "disabled"; /* Conflict with wilc_pwrseq, flx2 */

	flash@0 {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "jedec,spi-nor";
		reg = <0>;
		spi-max-frequency = <104000000>;
		spi-cs-setup-ns = <7>;
		spi-tx-bus-width = <4>;
		spi-rx-bus-width = <4>;
		m25p,fast-read;

		at91bootstrap@0 {
			label = "qspi: at91bootstrap";
			reg = <0x00000000 0x00040000>;
		};

		bootloader@40000 {
			label = "qspi: bootloader";
			reg = <0x00040000 0x000c0000>;
		};

		bootloaderenvred@100000 {
			label = "qspi: bootloader env redundant";
			reg = <0x00100000 0x00040000>;
		};

		bootloaderenv@140000 {
			label = "qspi: bootloader env";
			reg = <0x00140000 0x00040000>;
		};

		dtb@180000 {
			label = "qspi: device tree";
			reg = <0x00180000 0x00080000>;
		};

		kernel@200000 {
			label = "qspi: kernel";
			reg = <0x00200000 0x00600000>;
		};
	};
};

&sdmmc0 {
	no-1-8-v;
	bus-width = <4>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_sdmmc0_default>;
	status = "okay";
};

&shutdown_controller {
	debounce-delay-us = <976>;
	atmel,wakeup-rtc-timer;

	input@0 {
		reg = <0>;
	};
};

&spi0 {  /* mikrobus3 spi */
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_mikrobus3_spi &pinctrl_mikrobus3_spi_cs>;
	status = "okay";
};

&tcb0 {
	timer0: timer@0 {
		compatible = "atmel,tcb-timer";
		reg = <0>;
	};

	timer1: timer@1 {
		compatible = "atmel,tcb-timer";
		reg = <1>;
	};
};

&uart0 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_mikrobus1_uart>;
	atmel,use-dma-rx;
	atmel,use-dma-tx;
	status = "okay";
};

&uart1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_mikrobus3_uart>;
	atmel,use-dma-rx;
	atmel,use-dma-tx;
	status = "okay";
};

&uart3 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_mikrobus2_uart>;
	atmel,use-dma-rx;
	atmel,use-dma-tx;
	status = "okay";
};

&usb0 {
	atmel,vbus-gpio = <&pioA PIN_PD23 GPIO_ACTIVE_HIGH>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usba_vbus>;
	status = "okay";
};

&usb1 {
	num-ports = <3>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usb_default>;
	status = "okay";
};

&usb2 {
	phy_type = "hsic";
	status = "okay";
};

&watchdog {
	status = "okay";
};
