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

/dts-v1/;
#include <nordic/nrf52840_qiaa.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 39>;
			label = "Red PWM LED 1";
		};

		led2pwm: led_2_pwm {
			pwms = <&pwm1 35>;
			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;
	};
};

&pwm0 {
	status = "okay";
	ch0-pin = <39>;
};

&pwm1 {
	status = "okay";
	ch0-pin = <35>;
};

&adc {
	status = "okay";
};

&gpiote {
	status = "okay";
};

&gpio0 {
	status = "okay";
};

&gpio1 {
	status = "okay";
};

&uart0 {
	compatible = "nordic,nrf-uarte";
	current-speed = <115200>;
	status = "okay";
	tx-pin = <6>;
	rx-pin = <8>;
	rts-pin = <5>;
	cts-pin = <7>;
};

&uart1 {
	compatible = "nordic,nrf-uarte";
	current-speed = <115200>;
	status = "okay";
	tx-pin = <16>;
	rx-pin = <14>;
	rts-pin = <13>;
	cts-pin = <15>;
};

&i2c0 {
	compatible = "nordic,nrf-twi";
	status = "okay";
	sda-pin = <26>;
	scl-pin = <27>;

	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";
	sck-pin = <41>;
	mosi-pin = <40>;
	miso-pin = <4>;
	cs-gpios = <&gpio0 25 0>,
		<&gpio0 31 0>;
};

&qspi {
	status = "okay";
	sck-pin = <19>;
	io-pins = <20>, <21>, <22>, <23>;
	csn-pins = <17>;
	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 {
	/*
	 * For more information, see:
	 * http://docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions
	 */
	partitions {
		compatible = "fixed-partitions";
		#address-cells = <1>;
		#size-cells = <1>;

		/* 96K */
		boot_partition: partition@0 {
			label = "mcuboot";
			reg = <0x000000000 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 = <0x0000000 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 0x000700000>;
		};
	};
};
