/*
 * Copyright (c) 2018-2020 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: Apache-2.0
 */
#include "nrf9160dk_nrf9160_common-pinctrl.dtsi"
#include <zephyr/dt-bindings/input/input-event-codes.h>

/ {
	model = "Nordic nRF9160 DK NRF9160";
	compatible = "nordic,nrf9160-dk-nrf9160";

	chosen {
		zephyr,console = &uart0;
		zephyr,shell-uart = &uart0;
		zephyr,uart-mcumgr = &uart0;
	};

	leds {
		compatible = "gpio-leds";
		led0: led_0 {
			gpios = <&gpio0 2 0>;
			label = "Green LED 1";
		};
		led1: led_1 {
			gpios = <&gpio0 3 0>;
			label = "Green LED 2";
		};
		led2: led_2 {
			gpios = <&gpio0 4 0>;
			label = "Green LED 3";
		};
		led3: led_3 {
			gpios = <&gpio0 5 0>;
			label = "Green LED 4";
		};
	};

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

	buttons {
		/*
		 * Unlike most DK boards, we do not actually have 4 buttons
		 * on nRF9160 DK. Instead, we have 2 buttons and 2 switches.
		 * Treat the switches as buttons anyway, for convenience.
		 * This makes life easier for software that wants to deal with
		 * the usual "4 buttons per DK board" convention.
		 */
		compatible = "gpio-keys";
		button0: button_0 {
			gpios = <&gpio0 6 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
			label = "Push button 1";
			zephyr,code = <INPUT_KEY_0>;
		};
		button1: button_1 {
			gpios = <&gpio0 7 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
			label = "Push button 2";
			zephyr,code = <INPUT_KEY_1>;
		};
		button2: button_2 {
			gpios = <&gpio0 8 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
			label = "Switch 1";
			zephyr,code = <INPUT_KEY_2>;
		};
		button3: button_3 {
			gpios = <&gpio0 9 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
			label = "Switch 2";
			zephyr,code = <INPUT_KEY_3>;
		};
	};

	interface_to_nrf52840: gpio-interface {
		compatible = "nordic,nrf9160dk-nrf52840-interface";
		#gpio-cells = <2>;
		gpio-map-mask = <0xf 0>;
		gpio-map-pass-thru = <0 0xffffffff>;
		gpio-map = <0 0 &gpio0 17 0>,
			   <1 0 &gpio0 18 0>,
			   <2 0 &gpio0 19 0>,
			   <3 0 &gpio0 21 0>,
			   <4 0 &gpio0 22 0>,
			   <5 0 &gpio0 23 0>;
			   /* 6: COEX0 */
			   /* 7: COEX1 */
			   /* 8: COEX2 */
	};

	nrf52840_reset: gpio-reset {
		compatible = "nordic,nrf9160dk-nrf52840-reset";
		status = "disabled";
		/*
		 * This line is specified as active high for compatibility
		 * with the previously used Kconfig-based configuration.
		 */
		gpios = <&interface_to_nrf52840 5 GPIO_ACTIVE_HIGH>;
	};

	arduino_header: connector {
		compatible = "arduino-header-r3";
		#gpio-cells = <2>;
		gpio-map-mask = <0xffffffff 0xffffffc0>;
		gpio-map-pass-thru = <0 0x3f>;
		gpio-map = <0 0 &gpio0 14 0>,	/* A0 */
			   <1 0 &gpio0 15 0>,	/* A1 */
			   <2 0 &gpio0 16 0>,	/* A2 */
			   <3 0 &gpio0 17 0>,	/* A3 */
			   <4 0 &gpio0 18 0>,	/* A4 */
			   <5 0 &gpio0 19 0>,	/* A5 */
			   <6 0 &gpio0 0 0>,	/* D0 */
			   <7 0 &gpio0 1 0>,	/* D1 */
			   <8 0 &gpio0 2 0>,	/* D2 */
			   <9 0 &gpio0 3 0>,	/* D3 */
			   <10 0 &gpio0 4 0>,	/* D4 */
			   <11 0 &gpio0 5 0>,	/* D5 */
			   <12 0 &gpio0 6 0>,	/* D6 */
			   <13 0 &gpio0 7 0>,	/* D7 */
			   <14 0 &gpio0 8 0>,	/* D8 */
			   <15 0 &gpio0 9 0>,	/* D9 */
			   <16 0 &gpio0 10 0>,	/* D10 */
			   <17 0 &gpio0 11 0>,	/* D11 */
			   <18 0 &gpio0 12 0>,	/* D12 */
			   <19 0 &gpio0 13 0>,	/* D13 */
			   <20 0 &gpio0 30 0>,	/* D14 */
			   <21 0 &gpio0 31 0>;	/* D15 */
	};

	arduino_adc: analog-connector {
		compatible = "arduino,uno-adc";
		#io-channel-cells = <1>;
		io-channel-map = <0 &adc 1>,	/* A0 = P0.14 = AIN1 */
				 <1 &adc 2>,	/* A1 = P0.15 = AIN2 */
				 <2 &adc 3>,	/* A2 = P0.16 = AIN3 */
				 <3 &adc 4>,	/* A3 = P0.17 = AIN4 */
				 <4 &adc 5>,	/* A4 = P0.18 = AIN5 */
				 <5 &adc 6>;	/* A5 = P0.19 = AIN6 */
	};

	/* These aliases are provided for compatibility with samples */
	aliases {
		led0 = &led0;
		led1 = &led1;
		led2 = &led2;
		led3 = &led3;
		pwm-led0 = &pwm_led0;
		sw0 = &button0;
		sw1 = &button1;
		sw2 = &button2;
		sw3 = &button3;
		bootloader-led0 = &led0;
		mcuboot-button0 = &button0;
		mcuboot-led0 = &led0;
		watchdog0 = &wdt0;
	};
};

&adc {
	status = "okay";
};

&gpiote {
	status = "okay";
};

&gpio0 {
	status = "okay";
};

&uart0 {
	status = "okay";
	current-speed = <115200>;
	pinctrl-0 = <&uart0_default>;
	pinctrl-1 = <&uart0_sleep>;
	pinctrl-names = "default", "sleep";
};

arduino_serial: &uart1 {
	status = "okay";
	current-speed = <115200>;
	pinctrl-0 = <&uart1_default>;
	pinctrl-1 = <&uart1_sleep>;
	pinctrl-names = "default", "sleep";
};

&uart2 {
	pinctrl-0 = <&uart2_default>;
	pinctrl-1 = <&uart2_sleep>;
	pinctrl-names = "default", "sleep";
};

arduino_i2c: &i2c2 {
	compatible = "nordic,nrf-twim";
	status = "okay";
	pinctrl-0 = <&i2c2_default>;
	pinctrl-1 = <&i2c2_sleep>;
	pinctrl-names = "default", "sleep";
};

&pwm0 {
	status = "okay";
	pinctrl-0 = <&pwm0_default>;
	pinctrl-1 = <&pwm0_sleep>;
	pinctrl-names = "default", "sleep";
};

arduino_spi: &spi3 {
	compatible = "nordic,nrf-spim";
	status = "okay";
	cs-gpios = <&arduino_header 16 GPIO_ACTIVE_LOW>; /* D10 */
	pinctrl-0 = <&spi3_default>;
	pinctrl-1 = <&spi3_sleep>;
	pinctrl-names = "default", "sleep";
};

&flash0 {

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

		boot_partition: partition@0 {
			label = "mcuboot";
			reg = <0x00000000 0x10000>;
		};
		slot0_partition: partition@10000 {
			label = "image-0";
		};
		slot0_ns_partition: partition@50000 {
			label = "image-0-nonsecure";
		};
		slot1_partition: partition@80000 {
			label = "image-1";
		};
		slot1_ns_partition: partition@c0000 {
			label = "image-1-nonsecure";
		};
		/* 0xf0000 to 0xf7fff reserved for TF-M partitions */
		storage_partition: partition@f8000 {
			label = "storage";
			reg = <0x000f8000 0x00008000>;
		};
	};
};

/ {

	reserved-memory {
		#address-cells = <1>;
		#size-cells = <1>;
		ranges;

		sram0_s: image_s@20000000 {
			/* Secure image memory */
		};

		sram0_modem: image_modem@20016000 {
			/* Modem (shared) memory */
		};

		sram0_ns: image_ns@20020000 {
			/* Non-Secure image memory */
		};
	};
};

/* Include partition configuration file */
#include "nrf9160dk_nrf9160_partition_conf.dtsi"
