/*
 * Copyright (c) 2019 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <arm/armv7-m.dtsi>
#include <dt-bindings/i2c/i2c.h>
#include <dt-bindings/gpio/gpio.h>
#include "nrf5_common.dtsi"

/ {
	chosen {
		zephyr,entropy = &rng;
		zephyr,flash-controller = &flash_controller;
	};

	cpus {
		#address-cells = <1>;
		#size-cells = <0>;

		cpu@0 {
			device_type = "cpu";
			compatible = "arm,cortex-m4f";
			reg = <0>;
		};
	};

	soc {

		flash_controller: flash-controller@4001e000 {
			compatible = "nordic,nrf52-flash-controller";
			reg = <0x4001e000 0x1000>;

			#address-cells = <1>;
			#size-cells = <1>;

			label="NRF_FLASH_DRV_NAME";

			flash0: flash@0 {
				compatible = "soc-nv-flash";
				label = "NRF_FLASH";
				erase-block-size = <4096>;
				write-block-size = <4>;
			};
		};

		sram0: memory@20000000 {
			compatible = "mmio-sram";
		};

		adc: adc@40007000 {
			compatible = "nordic,nrf-saadc";
			reg = <0x40007000 0x1000>;
			interrupts = <7 1>;
			status = "disabled";
			label = "ADC_0";
			#io-channel-cells = <1>;
		};

		clock: clock@40000000 {
			compatible = "nordic,nrf-clock";
			reg = <0x40000000 0x1000>;
			interrupts = <0 1>;
			status = "okay";
			label = "CLOCK";
		};

		uart0: uart@40002000 {
			/* uart can be either UART or UARTE, for the user to pick */
			/* compatible = "nordic,nrf-uarte" or "nordic,nrf-uart"; */
			reg = <0x40002000 0x1000>;
			interrupts = <2 1>;
			status = "disabled";
			label = "UART_0";
		};

		uart1: uart@40028000 {
			compatible = "nordic,nrf-uarte";
			reg = <0x40028000 0x1000>;
			interrupts = <40 1>;
			status = "disabled";
			label = "UART_1";
		};

		gpiote: gpiote@40006000 {
			compatible = "nordic,nrf-gpiote";
			reg = <0x40006000 0x1000>;
			interrupts = <6 5>;
			status = "disabled";
			label = "GPIOTE_0";
		};

		gpio0: gpio@50000000 {
			compatible = "nordic,nrf-gpio";
			gpio-controller;
			reg = <0x50000000 0x200
			       0x50000500 0x300>;
			#gpio-cells = <2>;
			label = "GPIO_0";
			status = "disabled";
		};

		gpio1: gpio@50000300 {
			compatible = "nordic,nrf-gpio";
			gpio-controller;
			reg = <0x50000300 0x200
			       0x50000800 0x300>;
			#gpio-cells = <2>;
			ngpios = <10>;
			label = "GPIO_1";
			status = "disabled";
		};

		i2c0: i2c@40003000 {
			/*
			 * This i2c node can be TWI, TWIM, or TWIS,
			 * for the user to pick:
			 * compatible = "nordic,nrf-twi" or
			 *              "nordic,nrf-twim" or
			 *              "nordic,nrf-twis".
			 */
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x40003000 0x1000>;
			clock-frequency = <I2C_BITRATE_STANDARD>;
			interrupts = <3 1>;
			status = "disabled";
			label = "I2C_0";
		};

		i2c1: i2c@40004000 {
			/*
			 * This i2c node can be TWI, TWIM, or TWIS,
			 * for the user to pick:
			 * compatible = "nordic,nrf-twi" or
			 *              "nordic,nrf-twim" or
			 *              "nordic,nrf-twis".
			 */
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x40004000 0x1000>;
			clock-frequency = <I2C_BITRATE_STANDARD>;
			interrupts = <4 1>;
			status = "disabled";
			label = "I2C_1";
		};

		pwm0: pwm@4001c000 {
			compatible = "nordic,nrf-pwm";
			reg = <0x4001c000 0x1000>;
			interrupts = <28 1>;
			status = "disabled";
			label = "PWM_0";
			#pwm-cells = <1>;
		};

		pwm1: pwm@40021000 {
			compatible = "nordic,nrf-pwm";
			reg = <0x40021000 0x1000>;
			interrupts = <33 1>;
			status = "disabled";
			label = "PWM_1";
			#pwm-cells = <1>;
		};

		pwm2: pwm@40022000 {
			compatible = "nordic,nrf-pwm";
			reg = <0x40022000 0x1000>;
			interrupts = <34 1>;
			status = "disabled";
			label = "PWM_2";
			#pwm-cells = <1>;
		};

		pwm3: pwm@4002d000 {
			compatible = "nordic,nrf-pwm";
			reg = <0x4002d000 0x1000>;
			interrupts = <45 1>;
			status = "disabled";
			label = "PWM_3";
			#pwm-cells = <1>;
		};

		qdec: qdec@40012000 {
			compatible = "nordic,nrf-qdec";
			reg = <0x40012000 0x1000>;
			interrupts = <18 1>;
			status = "disabled";
			label = "QDEC";
		};

		rng: random@4000d000 {
			compatible = "nordic,nrf-rng";
			reg = <0x4000d000 0x1000>;
			interrupts = <13 1>;
			status = "okay";
			label = "RNG";
		};

		spi0: spi@40003000 {
			/*
			 * This spi node can be SPI, SPIM, or SPIS,
			 * for the user to pick:
			 * compatible = "nordic,nrf-spi" or
			 *              "nordic,nrf-spim" or
			 *              "nordic,nrf-spis".
			 */
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x40003000 0x1000>;
			interrupts = <3 1>;
			status = "disabled";
			label = "SPI_0";
		};

		spi1: spi@40004000 {
			/*
			 * This spi node can be SPI, SPIM, or SPIS,
			 * for the user to pick:
			 * compatible = "nordic,nrf-spi" or
			 *              "nordic,nrf-spim" or
			 *              "nordic,nrf-spis".
			 */
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x40004000 0x1000>;
			interrupts = <4 1>;
			status = "disabled";
			label = "SPI_1";
		};

		spi2: spi@40023000 {
			/*
			 * This spi node can be SPI, SPIM, or SPIS,
			 * for the user to pick:
			 * compatible = "nordic,nrf-spi" or
			 *              "nordic,nrf-spim" or
			 *              "nordic,nrf-spis".
			 */
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x40023000 0x1000>;
			interrupts = <35 1>;
			status = "disabled";
			label = "SPI_2";
		};

		spi3: spi@4002f000 {
			compatible = "nordic,nrf-spim";
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x4002f000 0x1000>;
			interrupts = <47 1>;
			status = "disabled";
			label = "SPI_3";
		};

		rtc0: rtc@4000b000 {
			compatible = "nordic,nrf-rtc";
			reg = <0x4000b000 0x1000>;
			interrupts = <11 1>;
			status = "okay";
			clock-frequency = <32768>;
			prescaler = <1>;
			label = "RTC_0";
		};

		rtc1: rtc@40011000 {
			compatible = "nordic,nrf-rtc";
			reg = <0x40011000 0x1000>;
			interrupts = <17 1>;
			status = "okay";
			clock-frequency = <32768>;
			prescaler = <1>;
			label = "RTC_1";
		};

		rtc2: rtc@40024000 {
			compatible = "nordic,nrf-rtc";
			reg = <0x40024000 0x1000>;
			interrupts = <36 1>;
			status = "okay";
			clock-frequency = <32768>;
			prescaler = <1>;
			label = "RTC_2";
		};

		timer0: timer@40008000 {
			compatible = "nordic,nrf-timer";
			status = "okay";
			reg = <0x40008000 0x1000>;
			interrupts = <8 1>;
			prescaler = <0>;
			label = "TIMER_0";
		};

		timer1: timer@40009000 {
			compatible = "nordic,nrf-timer";
			status = "okay";
			reg = <0x40009000 0x1000>;
			interrupts = <9 1>;
			prescaler = <0>;
			label = "TIMER_1";
		};

		timer2: timer@4000a000 {
			compatible = "nordic,nrf-timer";
			status = "okay";
			reg = <0x4000a000 0x1000>;
			interrupts = <10 1>;
			prescaler = <0>;
			label = "TIMER_2";
		};

		timer3: timer@4001a000 {
			compatible = "nordic,nrf-timer";
			status = "okay";
			reg = <0x4001a000 0x1000>;
			interrupts = <26 1>;
			prescaler = <0>;
			label = "TIMER_3";
		};

		timer4: timer@4001b000 {
			compatible = "nordic,nrf-timer";
			status = "okay";
			reg = <0x4001b000 0x1000>;
			interrupts = <27 1>;
			prescaler = <0>;
			label = "TIMER_4";
		};

		temp: temp@4000c000 {
			compatible = "nordic,nrf-temp";
			reg = <0x4000c000 0x1000>;
			interrupts = <12 1>;
			status = "okay";
			label = "TEMP_0";
		};

		usbd: usbd@40027000 {
			compatible = "nordic,nrf-usbd";
			reg = <0x40027000 0x1000>;
			interrupts = <39 1>;
			num-bidir-endpoints = <1>;
			num-in-endpoints = <7>;
			num-out-endpoints = <7>;
			num-isoin-endpoints = <1>;
			num-isoout-endpoints = <1>;
			status = "disabled";
			label = "USBD";
		};

		wdt: wdt0: watchdog@40010000 {
			compatible = "nordic,nrf-watchdog";
			reg = <0x40010000 0x1000>;
			interrupts = <16 1>;
			status = "okay";
			label = "WDT";
		};
	};
};

&nvic {
	arm,num-irq-priority-bits = <3>;
};

&sw_pwm {
	timer-instance = <2>;
	channel-count = <3>;
	clock-prescaler = <0>;
	ppi-base = <14>;
	gpiote-base = <0>;
	#pwm-cells = <1>;
};
