/*
 * Copyright (c) 2021 Laird Connectivity
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;
#include <nordic/nrf51822_qfac.dtsi>
#include "rm1xx_dvk-pinctrl.dtsi"

/ {
	model = "Laird Connectivity RM1XX_DVK";
	compatible = "lairdconnect,rm1xx_dvk";

	chosen {
		zephyr,console = &uart0;
		zephyr,shell-uart = &uart0;
		zephyr,bt-mon-uart = &uart0;
		zephyr,bt-c2h-uart = &uart0;
		zephyr,sram = &sram0;
		zephyr,flash = &flash0;
		zephyr,code-partition = &slot0_partition;
	};

	buttons {
		compatible = "gpio-keys";
		button2: button_2 {
			gpios = <&gpio0 5 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
			label = "Push button switch 2 (BUTTON2)";
		};
	};

	/* These aliases are provided for compatibility with samples */
	aliases {
		sw0 = &button2;
		lora0 = &lora0;
		watchdog0 = &wdt0;
		spi-flash0 = &at25;
	};
};

&gpiote {
	status = "okay";
};

&gpio0 {
	status = "okay";
};

&i2c0 {
	compatible = "nordic,nrf-twi";
	status = "okay";
	pinctrl-0 = <&i2c0_default>;
	pinctrl-1 = <&i2c0_sleep>;
	pinctrl-names = "default", "sleep";
};

/* SPI0 cannot be used with I2C0 */
&spi0 {
	/* Disabled by default */
	compatible = "nordic,nrf-spi";
	cs-gpios = <&gpio0 4 GPIO_ACTIVE_LOW>;
	pinctrl-0 = <&spi0_default>;
	pinctrl-1 = <&spi0_sleep>;
	pinctrl-names = "default", "sleep";
};

&spi1 {
	compatible = "nordic,nrf-spi";
	status = "okay";
	cs-gpios = <&gpio0 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>,
		   <&gpio0 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;

	pinctrl-0 = <&spi1_default>;
	pinctrl-1 = <&spi1_sleep>;
	pinctrl-names = "default", "sleep";
	at25: at25df041b@0 {
		compatible = "jedec,spi-nor";
		reg = <0>;
		spi-max-frequency = <1000000>;
		label = "at25df04";
		jedec-id = [1f 44 02];
		size = <0x400000>;
		has-lock = <0xbc>;
		has-dpd;
		t-enter-dpd = <500>;
		t-exit-dpd = <20>;
	};

	lora0: lora@1 {
		compatible = "semtech,sx1272";
		reg = <1>;
		label = "sx1272";
		reset-gpios = <&gpio0 7 GPIO_ACTIVE_HIGH>;
		dio-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>,
			    <&gpio0 13 GPIO_ACTIVE_HIGH>,
			    <&gpio0 14 GPIO_ACTIVE_HIGH>,
			    <&gpio0 15 GPIO_ACTIVE_HIGH>,
			    <&gpio0 16 GPIO_ACTIVE_HIGH>,
			    <&gpio0 1 GPIO_ACTIVE_HIGH>;
		rfi-enable-gpios = <&gpio0 19 GPIO_ACTIVE_HIGH>;
		rfo-enable-gpios = <&gpio0 18 GPIO_ACTIVE_HIGH>;
		spi-max-frequency = <1000000>;
	};
};

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

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

		/* 52K */
		boot_partition: partition@0 {
			label = "mcuboot";
			reg = <0x00000000 0x0000C000>;
		};
		/* 188K */
		slot0_partition: partition@c000 {
			label = "image-0";
			reg = <0x0000C000 0x00030000>;
		};

		/*
		 * Storage partition will be used by FCB/LittleFS/NVS
		 * if enabled. 16KB
		 */
		storage_partition: partition@3c000 {
			label = "storage";
			reg = <0x0003C000 0x00004000>;
		};
	};
};

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

		/* 188K reserved for slot1 */

		/* 68K */
		lfs_partition: partition@30000 {
			label = "lfs_storage";
			reg = <0x00030000 0x00010000>;
		};
	};
};
