/*
 * Copyright (c) 2018 Nordic Semiconductor ASA
 * Copyright (c) 2017 Linaro Limited
 *
 * SPDX-License-Identifier: Apache-2.0
 */

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

/ {
	model = "Nordic nRF52840 Dongle NRF52840";
	compatible = "nordic,nrf52840-dongle-nrf52840";

	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_green: led_0 {
			gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
			label = "Green LED 0";
		};
		led1_red: led_1 {
			gpios = <&gpio0 8 GPIO_ACTIVE_LOW>;
			label = "Red LED 1";
		};
		led1_green: led_2 {
			gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
			label = "Green LED 1";
		};
		led1_blue: led_3 {
			gpios = <&gpio0 12 GPIO_ACTIVE_LOW>;
			label = "Blue LED 1";
		};
	};

	pwmleds {
		compatible = "pwm-leds";
		red_pwm_led: pwm_led_0 {
			pwms = <&pwm0 8>;
		};
		green_pwm_led: pwm_led_1 {
			pwms = <&pwm0 41>;
		};
		blue_pwm_led: pwm_led_2 {
			pwms = <&pwm0 12>;
		};
	};

	buttons {
		compatible = "gpio-keys";
		button0: button_0 {
			gpios = <&gpio1 6 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
			label = "Push button switch 0";
		};
	};

	/* These aliases are provided for compatibility with samples */
	aliases {
		sw0 = &button0;
		led0 = &led0_green;
		led1 = &led1_red;
		led2 = &led1_green;
		led3 = &led1_blue;
		led0-green = &led0_green;
		led1-red   = &led1_red;
		led1-green = &led1_green;
		led1-blue  = &led1_blue;
		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;
		usbd0 = &usbd;
	};
};

&adc {
	status = "okay";
};

&gpiote {
	status = "okay";
};

&gpio0 {
	status = "okay";
};

&gpio1 {
	status = "okay";
};

&uart0 {
	compatible = "nordic,nrf-uarte";
	status = "okay";
	current-speed = <115200>;
	tx-pin = <20>;
	rx-pin = <24>;
	rts-pin = <17>;
	cts-pin = <22>;
};

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

&i2c1 {
	compatible = "nordic,nrf-twi";
	/* Cannot be used together with spi1. */
	/* status = "okay"; */
	sda-pin = <30>;
	scl-pin = <31>;
};

&pwm0 {
	status = "okay";
	ch0-pin = <8>;
	ch0-inverted;
	ch1-pin = <41>;
	ch1-inverted;
	ch2-pin = <12>;
	ch2-inverted;
};

/*
 * By default, not adding all available SPI instances (spi2, spi3) due to
 * limited GPIOs available on dongle board.
 */
&spi0 {
	compatible = "nordic,nrf-spi";
	/* Cannot be used together with i2c0. */
	/* status = "okay"; */
	sck-pin = <27>;
	mosi-pin = <26>;
	miso-pin = <42>;
};

&spi1 {
	compatible = "nordic,nrf-spi";
	status = "okay";
	sck-pin = <31>;
	mosi-pin = <30>;
	miso-pin = <45>;
};

/* Include flash partition table.
 * Two partition tables are available:
 * fstab-stock		-compatible with Nordic nRF5 bootloader, default
 * fstab-debugger	-to use an external debugger, w/o the nRF5 bootloader
 */
#include "fstab-stock.dts"

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