/*
 * Copyright (c) 2023 Panasonic Industrial Devices Europe GmbH
 *
 * SPDX-License-Identifier: Apache-2.0
 */
#include "pan1783_nrf5340_cpunet-pinctrl.dtsi"
#include <zephyr/dt-bindings/input/input-event-codes.h>

/ {

	chosen {
		zephyr,console = &uart0;
		zephyr,shell-uart = &uart0;
		zephyr,uart-mcumgr = &uart0;
		zephyr,bt-mon-uart = &uart0;
		zephyr,bt-c2h-uart = &uart0;
		zephyr,bt-hci-ipc = &ipc0;
		nordic,802154-spinel-ipc = &ipc0;
		zephyr,ieee802154 = &ieee802154;
	};

	leds {
		compatible = "gpio-leds";
		evb_led1: evb_led_1 {
			gpios = <&gpio0 28 GPIO_ACTIVE_LOW>;
			label = "LED1 on EVB";
		};
		evb_led2: evb_led_2 {
			gpios = <&gpio0 29 GPIO_ACTIVE_LOW>;
			label = "LED2 on EVB";
		};
		evb_led3: evb_led_3 {
			gpios = <&gpio0 30 GPIO_ACTIVE_LOW>;
			label = "LED3 on EVB";
		};
		evb_led4: evb_led_4 {
			gpios = <&gpio0 31 GPIO_ACTIVE_LOW>;
			label = "LED4 on EVB";
		};
	};

	buttons {
		compatible = "gpio-keys";
		evb_sw1: evb_sw_1 {
			gpios = <&gpio0 23 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
			label = "SW1 on EVB";
			zephyr,code = <INPUT_KEY_0>;
		};
		evb_sw2: evb_sw_2 {
			gpios = <&gpio0 24 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
			label = "SW2 on EVB";
			zephyr,code = <INPUT_KEY_1>;
		};
		evb_sw3: evb_sw_3 {
			gpios = <&gpio0 8 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
			label = "SW3 on EVB";
			zephyr,code = <INPUT_KEY_2>;
		};
		evb_sw4: evb_sw_4 {
			gpios = <&gpio0 9 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
			label = "SW4 on EVB";
			zephyr,code = <INPUT_KEY_3>;
		};
	};

	mikrobus_header: mikrobus-connector {
		compatible = "mikro-bus";
		#gpio-cells = <2>;
		gpio-map-mask = <0xffffffff 0xffffffc0>;
		gpio-map-pass-thru = <0 0x3f>;
		gpio-map =        <0 0 &gpio0 4 0>,        /* AN  */
		/* Not a GPIO*/                /* RST */
		<2 0 &gpio1 12 0>,        /* CS   */
		<3 0 &gpio1 15 0>,        /* SCK  */
		<4 0 &gpio1 14 0>,        /* MISO */
		<5 0 &gpio1 13 0>,        /* MOSI */
		/* +3.3V */
		/* GND */
		<6 0 &gpio1 7 0>,        /* PWM  */
		<7 0 &gpio1 4 0>,        /* INT  */
		<8 0 &gpio1 0 0>,        /* RX   */
		<9 0 &gpio1 1 0>,        /* TX   */
		<10 0 &gpio1 3 0>,        /* SCL  */
		<11 0 &gpio1 2 0>;        /* SDA  */
		/* +5V */
		/* GND */
	};

	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 4 0>,	/* A0 */
			   <1 0 &gpio0 5 0>,	/* A1 */
			   <2 0 &gpio0 6 0>,	/* A2 */
			   <3 0 &gpio0 7 0>,	/* A3 */
			   <4 0 &gpio0 25 0>,	/* A4 */
			   <5 0 &gpio0 26 0>,	/* A5 */
			   <6 0 &gpio1 0 0>,	/* D0 */
			   <7 0 &gpio1 1 0>,	/* D1 */
			   <8 0 &gpio1 4 0>,	/* D2 */
			   <9 0 &gpio1 5 0>,	/* D3 */
			   <10 0 &gpio1 6 0>,	/* D4 */
			   <11 0 &gpio1 7 0>,	/* D5 */
			   <12 0 &gpio1 8 0>,	/* D6 */
			   <13 0 &gpio1 9 0>,	/* D7 */
			   <14 0 &gpio1 10 0>,	/* D8 */
			   <15 0 &gpio1 11 0>,	/* D9 */
			   <16 0 &gpio1 12 0>,	/* D10 */
			   <17 0 &gpio1 13 0>,	/* D11 */
			   <18 0 &gpio1 14 0>,	/* D12 */
			   <19 0 &gpio1 15 0>,	/* D13 */
			   <20 0 &gpio1 2 0>,	/* D14 */
			   <21 0 &gpio1 3 0>;	/* D15 */
	};

	/* These aliases are provided for compatibility with samples */
	aliases {
		led0 = &evb_led1;
		led1 = &evb_led2;
		led2 = &evb_led3;
		led3 = &evb_led4;
		sw0 = &evb_sw1;
		sw1 = &evb_sw2;
		sw2 = &evb_sw3;
		sw3 = &evb_sw4;
		bootloader-led0 = &evb_led1;
		mcuboot-button0 = &evb_sw1;
		mcuboot-led0 = &evb_led1;
		watchdog0 = &wdt0;
	};
};

&gpiote {
	status = "okay";
};

&gpio0 {
	status = "okay";
};

&gpio1 {
	status = "okay";
};

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

arduino_serial: &uart0 {};

arduino_i2c: &i2c0 {
	compatible = "nordic,nrf-twim";
	/* Cannot be used together with uart0. */
	/* status = "okay"; */
	pinctrl-0 = <&i2c0_default>;
	pinctrl-1 = <&i2c0_sleep>;
	pinctrl-names = "default", "sleep";
};

arduino_spi: &spi0 {
	compatible = "nordic,nrf-spim";
	/* Cannot be used together with uart0. */
	/* status = "okay"; */
	cs-gpios = <&arduino_header 16 GPIO_ACTIVE_LOW>; /* D10 */
	pinctrl-0 = <&spi0_default>;
	pinctrl-1 = <&spi0_sleep>;
	pinctrl-names = "default", "sleep";
};

&flash1 {

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

		boot_partition: partition@0 {
			label = "mcuboot";
			reg = <0x00000000 0xc000>;
		};
		slot0_partition: partition@c000 {
			label = "image-0";
			reg = <0x0000C000 0x17000>;
		};
		slot1_partition: partition@23000 {
			label = "image-1";
			reg = <0x00023000 0x17000>;
		};
		storage_partition: partition@3a000 {
			label = "storage";
			reg = <0x0003a000 0x6000>;
		};
	};
};

&ieee802154 {
	status = "okay";
};

/* Include shared RAM configuration file */
#include "pan1783_nrf5340_shared_sram_planning_conf.dtsi"
