/*
 * Copyright (c) 2017 Piotr Mienkowski
 * Copyright (c) 2017 Justin Watson
 * Copyright (c) 2020 Stephanos Ioannidis <root@stephanos.io>
 * Copyright (c) 2019-2022 Gerson Fernando Budke <nandojve@gmail.com>
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include "sam_v71_xult-pinctrl.dtsi"

/ {
	aliases {
		i2c-0 = &twihs0;
		i2c-1 = &twihs2;
		led0 = &yellow_led1;
		pwm-led0 = &pwm_led0;
		pwm-0 = &pwm0;
		sw0 = &sw0_user_button;
		sw1 = &sw1_user_button;
		watchdog0 = &wdt;
	};

	chosen {
		zephyr,console = &usart1;
		zephyr,shell-uart = &usart1;
		zephyr,sram = &sram0;
		zephyr,flash = &flash0;
		zephyr,code-partition = &slot0_partition;
		zephyr,canbus = &can1;
	};

	leds {
		compatible = "gpio-leds";
		yellow_led0: led_0 {
			gpios = <&pioa 23 GPIO_ACTIVE_LOW>;
			label = "User LED 0";
			status = "disabled";
		};
		yellow_led1: led_1 {
			gpios = <&pioc 9 GPIO_ACTIVE_LOW>;
			label = "User LED 1";
		};
	};

	pwmleds {
		compatible = "pwm-leds";
		pwm_led0: pwm_led_0 {
			pwms = <&pwm0 0 PWM_MSEC(20)>;
		};
	};

	gpio_keys {
		compatible = "gpio-keys";

		/* The switch is labeled SW300/301 in the schematic, and
		 * labeled SW0 on the board, and labeled ERASE User Button
		 * on docs
		 */
		sw0_user_button: button_1 {
			label = "User Button 0";
			gpios = <&pioa 9 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
		};
		sw1_user_button: button_2 {
			label = "User Button 1";
			gpios = <&piob 12 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
		};
	};

	ext1_header: xplained-pro-connector1 {
		compatible = "atmel-xplained-pro-header";
		#gpio-cells = <2>;
		gpio-map-mask = <0xffffffff 0xffffffc0>;
		gpio-map-pass-thru = <0 0x3f>;		/*           Shared */
		gpio-map =	<0  0 &pioc 31 0>,	/* AFE1 AD6         */
				<1  0 &pioa 19 0>,	/* AFE0 AD8         */
				<2  0 &piob  3 0>,	/* RTS0             */
				<3  0 &piob  2 0>,	/* CTS0             */
				<4  0 &pioa  0 0>,	/* PWMC0_H0         */
				<5  0 &pioc 30 0>,	/* TIOB5            */
				<6  0 &piod 28 0>,	/* WKUP5            */
				<7  0 &pioa  5 0>,	/* GPIO             */
				<8  0 &pioa  3 0>,	/* TWD0        EXT2 */
				<9  0 &pioa  4 0>,	/* TWCK0       EXT2 */
				<10 0 &piob  0 0>,	/* RXD0             */
				<11 0 &piob  1 0>,	/* TXD0             */
				<12 0 &piod 25 0>,	/* SPI0(NPCS1)      */
				<13 0 &piod 21 0>,	/* SPI0(MOSI)  EXT2 */
				<14 0 &piod 20 0>,	/* SPI0(MISO)  EXT2 */
				<15 0 &piod 22 0>;	/* SPI0(SCK)   EXT2 */
							/* GND              */
							/* +3.3V            */
	};

	ext2_header: xplained-pro-connector2 {
		compatible = "atmel-xplained-pro-header";
		#gpio-cells = <2>;
		gpio-map-mask = <0xffffffff 0xffffffc0>;
		gpio-map-pass-thru = <0 0x3f>;		/*           Shared */
		gpio-map =	<0  0 &piod 30 0>,	/* AFE0 AD0         */
				<1  0 &pioc 13 0>,	/* AFE1 AD1         */
				<2  0 &pioa  6 0>,	/* GPIO             */
				<3  0 &piod 11 0>,	/* GPIO             */
				<4  0 &pioc 19 0>,	/* PWMC0_H2         */
				<5  0 &piod 26 0>,	/* PWMC0_L2         */
				<6  0 &pioa  2 0>,	/* WKUP2            */
				<7  0 &pioa 24 0>,	/* GPIO             */
				<8  0 &pioa  3 0>,	/* TWD0        EXT1 */
				<9  0 &pioa  4 0>,	/* TWCK0       EXT1 */
				<10 0 &pioa 21 0>,	/* RXD1             */
				<11 0 &piob  4 0>,	/* TXD1             */
				<12 0 &piod 27 0>,	/* SPI0(NPCS3)      */
				<13 0 &piod 21 0>,	/* SPI0(MOSI)  EXT1 */
				<14 0 &piod 20 0>,	/* SPI0(MISO)  EXT1 */
				<15 0 &piod 22 0>;	/* SPI0(SCK)   EXT1 */
							/* GND              */
							/* +3.3V            */
	};

	arduino_header: connector {
		compatible = "arduino-header-r3";
		#gpio-cells = <2>;
		gpio-map-mask = <0xffffffff 0xffffffc0>;
		gpio-map-pass-thru = <0 0x3f>;		/*           Shared */
		gpio-map =	<0  0 &piod 26 0>,	/*  A0-TD           */
				<1  0 &pioc 31 0>,	/*  A1-AFE1 AD6   y */
				<2  0 &pioa 19 0>,	/*  A2-AFE0 AD8   y */
				<3  0 &piod 30 0>,	/*  A3-AFE0 AD0   y */
				<4  0 &pioc 13 0>,	/*  A4-AFE1 AD1   y */
				<5  0 &pioe  0 0>,	/*  A5-AFE1 AD11    */
				<6  0 &piod 28 0>,	/*  D0-URXD3        */
				<7  0 &piod 30 0>,	/*  D1-UTXD3        */
				<8  0 &pioa  0 0>,	/*  D2-PWMC0_H0     */
				<9  0 &pioa  6 0>,	/*  D3-GPIO         */
				<10 0 &piod 27 0>,	/*  D4-SPI0_NPCS3 y */
				<11 0 &piod 11 0>,	/*  D5-PWMC0_H0     */
				<12 0 &pioc 19 0>,	/*  D6-PWMC0_H2     */
				<13 0 &pioa  2 0>,	/*  D7-PWMC0_H1     */
				<14 0 &pioa  5 0>,	/*  D8-PWMC1_PWML3  */
				<15 0 &pioc  9 0>,	/*  D9-TIOB7        */
				<16 0 &piod 25 0>,	/* D10-SPI0_NPCS1 y */
				<17 0 &piod 21 0>,	/* D11-SPI0_MOSI  y */
				<18 0 &piod 20 0>,	/* D12-SPI0_MISO  y */
				<19 0 &piod 22 0>,	/* D13-SPI0_SPCK  y */
				<20 0 &pioa  3 0>,	/* D14-TWD0       y */
				<21 0 &pioa  4 0>;	/* D15-TWCK0      y */
	};
};

&cpu0 {
	clock-frequency = <300000000>;
};

&afec0 {
	status = "okay";

	pinctrl-0 = <&afec0_default>;
	pinctrl-names = "default";
};

&afec1 {
	status = "okay";

	pinctrl-0 = <&afec1_default>;
	pinctrl-names = "default";
};

&dacc {
	status = "okay";
};

&twihs0 {
	status = "okay";

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

	eeprom: eeprom@5f {
		compatible = "atmel,24mac402";
		reg = <0x5f>;
	};
};

&twihs2 {
	status = "okay";

	pinctrl-0 = <&twihs2_default>;
	pinctrl-names = "default";
};

&spi0 {
	status = "okay";

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

	cs-gpios = <&piod 25 GPIO_ACTIVE_LOW>,
		   <&piod 27 GPIO_ACTIVE_LOW>;
};

&usart1 {
	status = "okay";
	current-speed = <115200>;

	pinctrl-0 = <&usart1_default>;
	pinctrl-names = "default";
};

&uart3 {
	status = "okay";
	current-speed = <115200>;


	pinctrl-0 = <&uart3_default>;
	pinctrl-names = "default";
};

&wdt {
	status = "okay";
};

zephyr_udc0: &usbhs {
	status = "okay";
};

&gmac {
	status = "okay";

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

	mac-eeprom = <&eeprom>;

	phy: phy {
		compatible = "ethernet-phy";
		status = "okay";
		address = <0>;
		mdio = <&mdio>;
	};
};

&mdio {
	status = "okay";

	pinctrl-0 = <&mdio_default>;
	pinctrl-names = "default";
};

&pwm0 {
	status = "okay";

	pinctrl-0 = <&pwm_default>;
	pinctrl-names = "default";
};

&pioa {
	status = "okay";
};

&piob {
	status = "okay";
};

&pioc {
	status = "okay";
};

&piod {
	status = "okay";
};

&pioe {
	status = "okay";
};

&flash0 {
	partitions {
		compatible = "fixed-partitions";
		#address-cells = <1>;
		#size-cells = <1>;

		/*
		 * The first half of sector 0 (64 kbytes)
		 * is reserved for the bootloader
		 */
		boot_partition: partition@0 {
			label = "mcuboot";
			reg = <0x0 0x00010000>;
			read-only;
		};

		/* From sector 1 to sector 7 (included): slot0 (896 kbytes) */
		slot0_partition: partition@20000 {
			label = "image-0";
			reg = <0x00020000 0x000e0000>;
		};

		/* From sector 8 to sector 14 (included): slot1 (896 kbytes) */
		slot1_partition: partition@100000 {
			label = "image-1";
			reg = <0x00100000 0x000e0000>;
		};

		/* Sector 15: scratch (128 kbytes) */
		scratch_partition: partition@1e0000 {
			label = "image-scratch";
			reg = <0x001e0000 0x00020000>;
		};
	};
};

&ssc {
	status = "okay";

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

	dma-names = "rx", "tx";
	dmas = <&xdmac 22 DMA_PERID_SSC_RX>, <&xdmac 23 DMA_PERID_SSC_TX>;
};

&can1 {
	status = "okay";

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

	bus-speed = <125000>;
	bus-speed-data = <1000000>;

	can-transceiver {
		max-bitrate = <5000000>;
	};
};

ext1_spi: &spi0 {
};

ext1_i2c: &twihs0 {
};

ext1_serial: &usart0 {
};

ext2_spi: &spi0 {
};

ext2_i2c: &twihs0 {
};

ext2_serial: &usart1 {
};

arduino_spi: &spi0 {
};

arduino_i2c: &twihs0 {
};

arduino_serial: &uart3 {
};
