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

/dts-v1/;
#include <nordic/nrf52840_qiaa.dtsi>
#include "bt610-pinctrl.dtsi"

/ {
	model = "Laird BT610 Sensor";
	compatible = "lairdconnect,bt610";

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

	leds {
		compatible = "gpio-leds";
		led1: led_1 {
			gpios = <&gpio1 7 GPIO_ACTIVE_HIGH>;
			label = "Red LED 1";
		};
		led2: led_2 {
			gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>;
			label = "Green LED 2";
		};
	};

	pwmleds {
		compatible = "pwm-leds";

		led1pwm: led_1_pwm {
			pwms = <&pwm0 0 PWM_MSEC(20) PWM_POLARITY_NORMAL>;
			label = "Red PWM LED 1";
		};

		led2pwm: led_2_pwm {
			pwms = <&pwm1 0 PWM_MSEC(20) PWM_POLARITY_NORMAL>;
			label = "Green PWM LED 2";
		};
	};

	buttons {
		compatible = "gpio-keys";
		button1: button_1 {
			gpios = <&gpio0 24 GPIO_PULL_UP>;
			label = "Boot button switch 1 (SW1)";
		};
		button2: button_2 {
			gpios = <&gpio1 1 GPIO_PULL_UP>;
			label = "Tamper switch 2 (SW2)";
		};
		mag1: mag_1 {
			compatible = "honeywell,sm351lt";
			gpios = <&gpio1 15 0>;
			label = "SM3531LT_0";
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		dinenable1: din_enable_1 {
			label = "Digital Input 1 Enable";
			gpios = <&gpio1 5 GPIO_ACTIVE_HIGH>;
		};

		dinenable2: din_enable_2 {
			label = "Digital Input 2 Enable";
			gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>;
		};

		din1: din_1 {
			label = "Digital Input 1";
			gpios = <&gpio0 9 GPIO_PULL_UP>;
		};

		din2: din_2 {
			label = "Digital Input 2";
			gpios = <&gpio1 11 GPIO_PULL_UP>;
		};

		thermenable: therm_enable {
			label = "Thermistor Inputs Enable";
			gpios = <&gpio0 10 GPIO_ACTIVE_LOW>;
		};

		analogenable: analog_enable {
			label = "Analog Inputs Enable";
			gpios = <&gpio1 13 GPIO_ACTIVE_HIGH>;
		};

		highsupplyenable: high_supply_enable {
			label = "High Voltage Power Supply Enable";
			gpios = <&gpio1 12 GPIO_ACTIVE_HIGH>;
		};

		expanderirq: expander_irq {
			label = "Port Expander Interrupt Request";
			gpios = <&gpio1 14 GPIO_PULL_UP>;
		};

		ain1: ain_1 {
			label = "Analog Input 1";
			gpios = <&gpio0 2 GPIO_PULL_UP>;
		};

		ain2: ain_2 {
			label = "Analog Input 2";
			gpios = <&gpio0 3 GPIO_PULL_UP>;
		};

		vref: v_ref {
			label = "Voltage Reference";
			gpios = <&gpio0 29 GPIO_PULL_UP>;
		};

		expanderreset: expander_reset {
			label = "Port Expander Reset";
			gpios = <&gpio0 28 GPIO_ACTIVE_HIGH>;
		};

		batteryoutputenable: battery_output_enable {
			label = "Battery Output Enable";
			gpios = <&gpio0 30 GPIO_ACTIVE_HIGH>;
		};

		do1mcu: do_1_mcu {
			label = "Digital Output 1";
			gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
		};

		do2mcu: do_2_mcu {
			label = "Digital Output 2";
			gpios = <&gpio0 11 GPIO_ACTIVE_HIGH>;
		};

		ain1sel: ain_1_current_measurement_selection {
			label = "Analogue Input 1 Current/Voltage measurement select";
			gpios = <&gpio_exp0 0 GPIO_ACTIVE_HIGH>;
		};

		ain2sel: ain_2_current_measurement_selection {
			label = "Analogue Input 2 Current/Voltage measurement select";
			gpios = <&gpio_exp0 1 GPIO_ACTIVE_HIGH>;
		};

		ain3sel: ain_3_current_measurement_selection {
			label = "Analogue Input 3 Current/Voltage measurement select";
			gpios = <&gpio_exp0 2 GPIO_ACTIVE_HIGH>;
		};

		ain4sel: ain_4_current_measurement_selection {
			label = "Analogue Input 4 Current/Voltage measurement select";
			gpios = <&gpio_exp0 3 GPIO_ACTIVE_HIGH>;
		};

		aina0: analog_input_selection_0 {
			label = "Analogue Input Mux 0";
			gpios = <&gpio_exp0 4 GPIO_ACTIVE_HIGH>;
		};

		aina1: analog_input_selection_1 {
			label = "Analogue Input Mux 1";
			gpios = <&gpio_exp0 5 GPIO_ACTIVE_HIGH>;
		};

		aux1: aux_input_1 {
			label = "Aux Input 1";
			gpios = <&gpio_exp0 6 GPIO_ACTIVE_HIGH>;
		};

		aux2: aux_input_2 {
			label = "Aux Input 2";
			gpios = <&gpio_exp0 7 GPIO_ACTIVE_HIGH>;
		};
	};

	/* These aliases are provided for compatibility with samples */
	aliases {
		led0 = &led1;
		led1 = &led2;
		led0pwm = &led1pwm;
		led1pwm = &led2pwm;
		sw0 = &button1;
		sw1 = &button2;
		sw2 = &mag1;
		mcuboot-button0 = &button1;
		mcuboot-led0 = &led1;
		watchdog0 = &wdt0;
	};
};

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

&pwm1 {
	status = "okay";
	pinctrl-0 = <&pwm1_default>;
	pinctrl-1 = <&pwm1_sleep>;
	pinctrl-names = "default", "sleep";
};

&adc {
	status = "okay";
};

&gpiote {
	status = "okay";
};

&gpio0 {
	status = "okay";
};

&gpio1 {
	status = "okay";
};

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

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

&i2c0 {
	compatible = "nordic,nrf-twi";
	status = "okay";

	pinctrl-0 = <&i2c0_default>;
	pinctrl-1 = <&i2c0_sleep>;
	pinctrl-names = "default", "sleep";
	gpio_exp0: tca9538@70 {
		compatible = "ti,tca9538";
		reg = <0x70>;
		label = "tca9538";
		gpio-controller;
		#gpio-cells = <2>;
		ngpios = <8>;
		nint-gpios = <&gpio1 14 GPIO_ACTIVE_LOW>;
	};
};

&spi1 {
	compatible = "nordic,nrf-spi";
	status = "okay";
	cs-gpios = <&gpio0 25 0>,
		<&gpio0 31 0>;
	pinctrl-0 = <&spi1_default>;
	pinctrl-1 = <&spi1_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>;
		writeoc = "pp4io";
		readoc = "read4io";
		sck-frequency = <8000000>;
		label = "MX25R64";
		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>;
	};
};

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

		/* 96K */
		boot_partition: partition@0 {
			label = "mcuboot";
			reg = <0x00000000 0x00018000>;
		};
		/* 896K */
		slot0_partition: partition@18000 {
			label = "image-0";
			reg = <0x00018000 0x000E0000>;
		};

		/*
		 * The flash starting at 0x000f8000 and ending at
		 * 0x000fffff is reserved for use by the application.
		 */

		/*
		 * Storage partition will be used by FCB/NVS
		 * if enabled. 32K
		 */
		storage_partition: partition@f8000 {
			label = "storage";
			reg = <0x000f8000 0x00008000>;
		};
	};
};

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

		/* 896K */
		slot1_partition: partition@0 {
			label = "image-1";
			reg = <0x00000000 0x000E0000>;
		};
		/* 16K */
		scratch_partition: partition@E0000 {
			label = "image-scratch";
			reg = <0x000E0000 0x00004000>;
		};
		/* 112K */
		customer_partition: partition@E4000 {
			label = "customer-storage";
			reg = <0x000E4000 0x0001C000>;
		};
		/* 7MB */
		lfs_partition: partition@100000 {
			label = "lfs_storage";
			reg = <0x00100000 0x00700000>;
		};
	};
};
