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

/dts-v1/;

#include <atmel/sam4s16c.dtsi>
#include "sam4s_xplained-pinctrl.dtsi"
#include <zephyr/dt-bindings/input/input-event-codes.h>

/ {
	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;
		pwm-0 = &pwm0;
		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;
	};

	sram1: sram@60000000 {
		compatible = "zephyr,memory-region", "mmio-sram";
		device_type = "memory";
		reg = <0x60000000 DT_SIZE_K(512)>;
		zephyr,memory-region = "SRAM1";
	};

	sram2: sram@61000000 {
		compatible = "zephyr,memory-region", "mmio-sram";
		device_type = "memory";
		reg = <0x61000000 DT_SIZE_K(512)>;
		zephyr,memory-region = "SRAM2";
	};

	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)>;
			zephyr,code = <INPUT_KEY_0>;
		};
	};

	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";
};

&pwm0 {
	status = "okay";

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

&adc0 {
	status = "okay";

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

	prescaler = <9>;
	startup-time = <64>;
	settling-time = <3>;
	tracking-time = <2>;
};

&wdt {
	status = "okay";
};

xplained1_i2c: &twi0 {
};

xplained1_spi: &spi0 {
};

xplained1_serial: &uart1 {
};

xplained4_i2c: &twi0 {
};

xplained4_spi: &spi0 {
};

xplained4_serial: &uart1 {
};

&smc {
	status = "okay";
	pinctrl-0 = <&smc_default>;
	pinctrl-names = "default";

	is66wv51216dbll@0 {
		reg = <0>;

		atmel,smc-write-mode = "nwe";
		atmel,smc-read-mode = "nrd";
		atmel,smc-setup-timing = <1 1 1 1>;
		atmel,smc-pulse-timing = <6 6 6 6>;
		atmel,smc-cycle-timing = <7 7>;
	};

	is66wv51216dbll@1 {
		reg = <1>;

		atmel,smc-write-mode = "nwe";
		atmel,smc-read-mode = "nrd";
		atmel,smc-setup-timing = <1 1 1 1>;
		atmel,smc-pulse-timing = <6 6 6 6>;
		atmel,smc-cycle-timing = <7 7>;
	};
};
