/*
 * Copyright (c) 2020 TriaGnoSys GmbH
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;
#include <silabs/efr32mg21a020f1024im32.dtsi>

/ {
	model = "Silicon Labs BRD4180A (Mighty Gecko Radio Board)";
	compatible = "silabs,efr32mg21_brd4180a", "silabs,efr32mg21";

	chosen {
		zephyr,console = &usart0;
		zephyr,shell-uart = &usart0;
		zephyr,sram = &sram0;
		zephyr,flash = &flash0;
		zephyr,code-partition = &slot0_partition;
	};

	/* These aliases are provided for compatibility with samples */
	aliases {
		led0 = &led0;
		led1 = &led1;
		sw0 = &button0;
		sw1 = &button1;
		watchdog0 = &wdog0;
	};

	leds {
		compatible = "gpio-leds";
		led0: led_0 {
			gpios = <&gpiob 0 0>;
			label = "LED 0";
		};
		led1: led_1 {
			gpios = <&gpiob 1 0>;
			label = "LED 1";
		};
	};

	buttons {
		compatible = "gpio-keys";
		button0: button_0 {
			/* gpio flags need validation */
			gpios = <&gpiod 2 GPIO_ACTIVE_LOW>;
			label = "User Push Button 0";
		};
		button1: button_1 {
			/* gpio flags need validation */
			gpios = <&gpiod 3 GPIO_ACTIVE_LOW>;
			label = "User Push Button 1";
		};
	};

};

&cpu0 {
	clock-frequency = <38400000>;
};

&usart0 {
	current-speed = <115200>;
	location-rx = <GECKO_LOCATION(0) GECKO_PORT_A GECKO_PIN(6)>;
	location-tx = <GECKO_LOCATION(0) GECKO_PORT_A GECKO_PIN(5)>;
	status = "okay";
};

&rtcc0 {
	prescaler = <1>;
	status = "okay";
};

&gpio {
	status = "okay";
};

&gpioa {
	status = "okay";
};

&gpiob {
	status = "okay";
};

&gpioc {
	status = "okay";
};

&gpiod {
	status = "okay";
};

&wdog0 {
	status = "okay";
};

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

		/* Reserve 48 kB for the bootloader */
		boot_partition: partition@0 {
			label = "mcuboot";
			reg = <0x0 0x0000c000>;
			read-only;
		};

		/* Reserve 464 kB for the application in slot 0 */
		slot0_partition: partition@c000 {
			label = "image-0";
			reg = <0x0000c000 0x00074000>;
		};

		/* Reserve 464 kB for the application in slot 1 */
		slot1_partition: partition@80000 {
			label = "image-1";
			reg = <0x00080000 0x00074000>;
		};

		/* Reserve 32 kB for the scratch partition */
		scratch_partition: partition@f4000 {
			label = "image-scratch";
			reg = <0x000f4000 0x00008000>;
		};

		/* Set 16Kb of storage at the end of the 1024Kb of flash */
		storage_partition: partition@fc000 {
			label = "storage";
			reg = <0x000fc000 0x00004000>;
		};

	};
};
