/*
 * Copyright (c) 2023 Panasonic Industrial Devices Europe GmbH
 *
 * SPDX-License-Identifier: Apache-2.0
 */
#include "pan1783_evb_cpuapp_common-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";
		};
	};

	pwmleds {
		compatible = "pwm-leds";
		pwm_evb_led1: pwm_evb_led_1 {
			pwms = <&pwm0 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>;
		};
	};

	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 */
	};

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

	gpio_fwd: nrf-gpio-forwarder {
		compatible = "nordic,nrf-gpio-forwarder";
		status = "disabled";
		uart {
			gpios = <&gpio0 20 0>, <&gpio0 22 0>, <&gpio0 11 0>, <&gpio0 10 0>;
		};
	};

	/* These aliases are provided for compatibility with samples */
	aliases {
		led0 = &evb_led1;
		led1 = &evb_led2;
		led2 = &evb_led3;
		led3 = &evb_led4;
		pwm-led0 = &pwm_evb_led1;
		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;
		spi-flash0 = &mx25r64;
	};
};

&adc {
	status = "okay";
};

&gpiote {
	status = "okay";
};

&gpio0 {
	status = "okay";
};

&gpio1 {
	status = "okay";
};

&i2c1 {
	compatible = "nordic,nrf-twim";
	status = "okay";
	pinctrl-0 = <&i2c1_default>;
	pinctrl-1 = <&i2c1_sleep>;
	pinctrl-names = "default", "sleep";
};

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

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

&qspi {
	status = "okay";
	pinctrl-0 = <&qspi_default>;
	pinctrl-1 = <&qspi_sleep>;
	pinctrl-names = "default", "sleep";
	mx25r64: mx25r6435f@0 {
		compatible = "nordic,qspi-nor";
		reg = <0>;
		/* MX25R64 supports only pp and pp4io */
		writeoc = "pp4io";
		/* MX25R64 supports all readoc options */
		readoc = "read4io";
		sck-frequency = <8000000>;
		jedec-id = [ c2 28 17  ];
		sfdp-bfp = [
			e5 20 f1 ff ff ff ff 03 44 eb 08 6b 08 3b 04 bb
			ee ff ff ff ff ff 00 ff ff ff 00 ff 0c 20 0f 52
			10 d8 00 ff 23 72 f5 00 82 ed 04 cc 44 83 68 44
			30 b0 30 b0 f7 c4 d5 5c 00 be 29 ff f0 d0 ff ff
		];
		size = <67108864>;
		has-dpd;
		t-enter-dpd = <10000>;
		t-exit-dpd = <35000>;
	};
};

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

arduino_i2c: &i2c1 {};

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

&flash0 {

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

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

&ieee802154 {
	status = "okay";
};

zephyr_udc0: &usbd {
	compatible = "nordic,nrf-usbd";
	status = "okay";
};

/ {

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

		sram0_image: image@20000000 {
			/* Zephyr image(s) memory */
		};

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

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