/*
 * Copyright (c) Justin Watson 2017
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;

#include <atmel/sam4s16c.dtsi>
#include "sam4s_xplained-pinctrl.dtsi"

/ {
	model = "Atmel SAM4S Xplained Board with an Atmel SAM4S16C SoC";
	compatible = "atmel,sam4s_xplained", "atmel,sam4s16c", "atmel,sam4s";

	aliases {
		i2c-0 = &twi0;
		i2c-1 = &twi1;
		led0 = &yellow_led_1;
		led1 = &yellow_led_2;
		sw0 = &user_button;
		watchdog0 = &wdt;
	};

	chosen {
		zephyr,console = &uart0;
		zephyr,shell-uart = &uart0;
		zephyr,sram = &sram0;
		zephyr,flash = &flash0;
	};

	leds {
		compatible = "gpio-leds";
		yellow_led_1: led_1 {
			gpios = <&pioc 10 GPIO_ACTIVE_LOW>;
			label = "LED 1";
		};
		yellow_led_2: led_2 {
			gpios = <&pioc 17 GPIO_ACTIVE_LOW>;
			label = "LED 2";
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		user_button: button_1 {
			label = "User Button";
			gpios = <&pioa 5 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
		};
	};

	xplained1_header: xplained-connector1 {
		compatible = "atmel-xplained-header";
		#gpio-cells = <2>;
		gpio-map-mask = <0xffffffff 0xffffffc0>;
		gpio-map-pass-thru = <0 0x3f>;		/*           Shared */
		gpio-map =	<0 0 &pioa  3 0>,	/* TWD0           y */
				<1 0 &pioa  4 0>,	/* TWCK0          y */
				<2 0 &piob  2 0>,	/* URXD1            */
				<3 0 &piob  3 0>,	/* UTXD1            */
				<4 0 &pioa 31 0>,	/* SPI(CS)          */
				<5 0 &pioa 13 0>,	/* SPI(MOSI)      y */
				<6 0 &pioa 12 0>,	/* SPI(MISO)      y */
				<7 0 &pioa 14 0>;	/* SPI(SCK)       y */
							/* GND              */
							/* +3.3V            */
	};

	xplained2_header: xplained-connector2 {
		compatible = "atmel-xplained-header";
		#gpio-cells = <2>;
		gpio-map-mask = <0xffffffff 0xffffffc0>;
		gpio-map-pass-thru = <0 0x3f>;		/*           Shared */
		gpio-map =	<0 0 &pioa 22 0>,	/* GPIO             */
				<1 0 &pioc 12 0>,	/* GPIO             */
				<2 0 &piob  0 0>,	/* GPIO             */
				<3 0 &piob  1 0>,	/* GPIO             */
				<4 0 &pioa 17 0>,	/* GPIO             */
				<5 0 &pioa 21 0>,	/* GPIO             */
				<6 0 &pioc 13 0>,	/* GPIO             */
				<7 0 &pioc 15 0>;	/* GPIO             */
							/* GND              */
							/* +3.3V            */
	};

	xplained3_header: xplained-connector3 {
		compatible = "atmel-xplained-header";
		#gpio-cells = <2>;
		gpio-map-mask = <0xffffffff 0xffffffc0>;
		gpio-map-pass-thru = <0 0x3f>;		/*           Shared */
		gpio-map =	<0 0 &pioa 20 0>,	/* GPIO             */
				<1 0 &pioa 11 0>,	/* GPIO             */
				<2 0 &pioa 23 0>,	/* GPIO             */
				<3 0 &pioa 18 0>,	/* GPIO             */
				<4 0 &pioa 15 0>,	/* GPIO             */
				<5 0 &pioa 16 0>,	/* GPIO             */
				<6 0 &pioa  2 0>,	/* GPIO             */
				<7 0 &pioc  2 0>;	/* GPIO             */
							/* GND              */
							/* +3.3V            */
	};

	xplained4_header: xplained-connector4 {
		compatible = "atmel-xplained-header";
		#gpio-cells = <2>;
		gpio-map-mask = <0xffffffff 0xffffffc0>;
		gpio-map-pass-thru = <0 0x3f>;		/*           Shared */
		gpio-map =	<0 0 &pioa  3 0>,	/* TWD0           y */
				<1 0 &pioa  4 0>,	/* TWCK0          y */
				<2 0 &piob  2 0>,	/* URXD1            */
				<3 0 &piob  3 0>,	/* UTXD1            */
				<4 0 &pioa 30 0>,	/* SPI(CS)          */
				<5 0 &pioa 13 0>,	/* SPI(MOSI)      y */
				<6 0 &pioa 12 0>,	/* SPI(MISO)      y */
				<7 0 &pioa 14 0>;	/* SPI(SCK)       y */
							/* GND              */
							/* +3.3V            */
	};
};

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

&twi0 {
	status = "okay";

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

&spi0 {
	status = "okay";

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

	cs-gpios = <&pioa 31 GPIO_ACTIVE_LOW>,
		   <&pioa 30 GPIO_ACTIVE_LOW>;
};

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

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

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

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

&wdt {
	status = "okay";
};

xplained1_i2c: &twi0 {
};

xplained1_spi: &spi0 {
};

xplained1_serial: &uart1 {
};

xplained4_i2c: &twi0 {
};

xplained4_spi: &spi0 {
};

xplained4_serial: &uart1 {
};
