/*
 * Copyright (c) 2021 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: Apache-2.0
 */

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

/ {
	model = "Nordic Thingy53 NRF5340 Network";
	compatible = "nordic,thingy53-nrf5340-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;
	};

	buttons {
		compatible = "gpio-keys";
		button0: button_0 {
			gpios = <&gpio1 14 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
			label = "Push button 1";
			zephyr,code = <INPUT_KEY_0>;
		};
		button1: button_1 {
			gpios = <&gpio1 13 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
			label = "Push button 2";
			zephyr,code = <INPUT_KEY_1>;
		};
	};

	leds {
		compatible = "gpio-leds";
		red_led: led_1 {
			gpios = <&gpio1 8 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)>;
			label = "RGB red LED";
		};
		green_led: led_2 {
			gpios = <&gpio1 6 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)>;
			label = "RGB green LED";
		};
		blue_led: led_3 {
			gpios = <&gpio1 7 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)>;
			label = "RGB blue LED";
		};
	};

	nrf_radio_fem: fem {
		compatible = "nordic,nrf21540-fem";
		rx-en-gpios = <&gpio1 11 GPIO_ACTIVE_HIGH>;
		mode-gpios  = <&gpio1 12 GPIO_ACTIVE_HIGH>;
		pdn-gpios   = <&gpio1 10 GPIO_ACTIVE_HIGH>;
		tx-en-gpios = <&gpio0 30 GPIO_ACTIVE_HIGH>;
		supply-voltage-mv = <3000>;
	};

	edge_connector: connector {
		compatible = "nordic-thingy53-edge-connector";
		#gpio-cells = <2>;
		gpio-map-mask = <0xffffffff 0xffffffc0>;
		gpio-map-pass-thru = <0 0x3f>;
		gpio-map = <8 0 &gpio0 5 0>,	/* P8, P0.05/AIN1 */
			   <9 0 &gpio0 4 0>,	/* P9, P0.04/AIN0 */
			   <15 0 &gpio0 8 0>,	/* P15, P0.08/TRACEDATA3 */
			   <16 0 &gpio0 9 0>,	/* P16, P0.09/TRACEDATA2 */
			   <17 0 &gpio0 10 0>,	/* P17, P0.10/TRACEDATA1 */
			   <18 0 &gpio0 11 0>,	/* P18, P0.11/TRACEDATA0 */
			   <19 0 &gpio0 12 0>;	/* P19, P0.12/TRACECLK */
	};

	aliases {
		sw0 = &button0;
		sw1 = &button1;
		led0 = &red_led;
		led1 = &green_led;
		led2 = &blue_led;
		watchdog0 = &wdt;
	};
};

&gpiote {
	status = "okay";
};

&gpio0 {
	status = "okay";
};

&gpio1 {
	status = "okay";
};

&uart0 {
	compatible = "nordic,nrf-uarte";
	status = "disabled";
	current-speed = <115200>;
	pinctrl-0 = <&uart0_default>;
	pinctrl-1 = <&uart0_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 0x12000>;
		};
		slot1_partition: partition@1e000 {
			label = "image-1";
			reg = <0x0001E000 0x12000>;
		};
		scratch_partition: partition@30000 {
			label = "image-scratch";
			reg = <0x00030000 0xa000>;
		};
		storage_partition: partition@3a000 {
			label = "storage";
			reg = <0x0003a000 0x6000>;
		};
	};
};

&ieee802154 {
	status = "okay";
};

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