/*
 * Copyright (c) 2020 u-blox AG
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;
#include <nordic/nrf52833_qiaa.dtsi>

/ {
	model = "u-blox EVK-NINA-B4 NRF52833";
	compatible = "u-blox,ubx_evkninab4_nrf52833";

	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";
		led0: led_0 {
			/* NINA-B1 GPIO_1 */
			gpios = <&gpio0 13 GPIO_ACTIVE_LOW>;
			label = "Red LED";
		};
		led1: led_1 {
			/* NINA-B4 GPIO_7 */
			gpios = <&gpio1 1 GPIO_ACTIVE_LOW>;
			label = "Green LED";
		};
		led2: led_2 {
			/*NINA-B1 GPIO_8 */
			gpios = <&gpio1 0 GPIO_ACTIVE_LOW>;
			label = "Blue LED";
		};
	};

	pwmleds {
		compatible = "pwm-leds";
		red_pwm_led: red_pwm_led {
			pwms = <&pwm0 13>;
		};
		green_pwm_led: green_pwm_led {
			pwms = <&pwm0 33>;
		};
		blue_pwm_led: blue_pwm_led {
			pwms = <&pwm0 32>;
		};
	};

	buttons {
		compatible = "gpio-keys";
		button0: button_0 {
			/* EVK-NINA-B4 SW1 button */
			gpios = <&gpio1 1 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
			label = "Push button switch 0";
		};
		button1: button_1 {
			/* EVK-NINA-B4 SW2 button */
			gpios = <&gpio0 2 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
			label = "Push button switch 1";
		};
	};

	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 30 0>,	/* A1 */
			   <2 0 &gpio0 5 0>,	/* A2 */
			   <3 0 &gpio0 2 0>,	/* A3 */
			   <4 0 &gpio0 28 0>,	/* A4 */
			   <5 0 &gpio0 3 0>,	/* A5 */
			   <6 0 &gpio0 29 0>,	/* D0 */
			   <7 0 &gpio1 5 0>,	/* D1 */
			   <8 0 &gpio0 23 0>,	/* D2 */
			   <9 0 &gpio0 31 0>,	/* D3 */
			   <10 0 &gpio0 13 0>,	/* D4 */
			   <11 0 &gpio0 11 0>,	/* D5 */
			   <12 0 &gpio0 9 0>,	/* D6 */ /* NFC use by default */
			   <13 0 &gpio0 10 0>,	/* D7 */ /* NFC use by default */
			   <14 0 &gpio1 9 0>,	/* D8 */
			   <15 0 &gpio0 12 0>,	/* D9 */
			   <16 0 &gpio0 0 0>,	/* D10 */ /* Disconnected, see EVK User Guide */
			   <17 0 &gpio0 1 0>,	/* D11 */ /* Disconnected, see EVK User Guide */
			   <18 0 &gpio1 0 0>,	/* D12 */
			   <19 0 &gpio0 7 0>,	/* D13 */
			   <20 0 &gpio0 16 0>,	/* D14 */  /* SDA */
			   <21 0 &gpio0 17 0>;	/* D15 */  /* SCL */
	};

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

	/* These aliases are provided for compatibility with samples */
	aliases {
		led0 = &led0;
		led1 = &led1;
		led2 = &led2;
		pwm-led0 = &red_pwm_led;
		pwm-led1 = &green_pwm_led;
		pwm-led2 = &blue_pwm_led;
		red-pwm-led = &red_pwm_led;
		green-pwm-led = &green_pwm_led;
		blue-pwm-led = &blue_pwm_led;
		sw0 = &button0;
		sw1 = &button1;
	};
};

&adc {
	status = "okay";
};

&gpiote {
	status = "okay";
};

&gpio0 {
	status = "okay";
};

&gpio1 {
	status = "okay";
};

&uart0 {
	compatible = "nordic,nrf-uart";
	status = "okay";
	current-speed = <115200>;
	tx-pin = <37>;     /* P1.05 */
	rx-pin = <29>;
	rts-pin = <31>;
	cts-pin = <23>;
};

arduino_i2c: &i2c0 {
	compatible = "nordic,nrf-twi";
	status = "okay";
	sda-pin = <16>;
	scl-pin = <17>;
};

&spi0 {
	compatible = "nordic,nrf-spi";
	/* Cannot be used together with i2c0. */
	/* status = "okay"; */
	sck-pin = <7>;
	mosi-pin = <32>;
	miso-pin = <15>;
};

&spi1 {
	compatible = "nordic,nrf-spi";
	status = "okay";
	sck-pin = <3>;
	mosi-pin = <28>;
	miso-pin = <9>;
};

arduino_spi: &spi2 {
	compatible = "nordic,nrf-spim";
	status = "okay";
	sck-pin = <7>;              /* D13 */
	mosi-pin = <1>;             /* D11 */
	miso-pin = <32>;             /* D12 */
	cs-gpios = <&arduino_header 0 GPIO_ACTIVE_LOW>; /* D10 */
};

&pwm0 {
	status = "okay";
	ch0-pin = <13>;
	ch0-inverted;
	status = "okay";
	ch1-pin = <33>;
	ch1-inverted;
	status = "okay";
	ch2-pin = <32>;
	ch2-inverted;
};

&flash0 {
	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 0x32000>;
		};
		slot1_partition: partition@3e000 {
			label = "image-1";
			reg = <0x0003E000 0x32000>;
		};
		scratch_partition: partition@70000 {
			label = "image-scratch";
			reg = <0x00070000 0xA000>;
		};
		storage_partition: partition@7a000 {
			label = "storage";
			reg = <0x0007A000 0x00006000>;
		};
	};
};

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