/*
 * Copyright (c) 2023 Panasonic Industrial Devices Europe GmbH
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;
#include <nordic/nrf5340_cpunet_qkaa.dtsi>
#include "pan1783_evb_cpunet-pinctrl.dtsi"
#include <zephyr/dt-bindings/input/input-event-codes.h>

/ {
	model = "Panasonic PAN1783 EVB (NRF5340) Network";
	compatible = "panasonic,pan1783-evb-cpunet";

	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,sram = &sram1;
		zephyr,flash = &flash1;
		zephyr,code-partition = &slot0_partition;
		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_evb_shared_sram_planning_conf.dtsi"
