/*
 * 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_C GECKO_PIN(1)>;
	location-tx = <GECKO_LOCATION(0) GECKO_PORT_C GECKO_PIN(0)>;
	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 {
	/*
	 * If the chosen node has no zephyr,code-partition property, the
	 * application image link uses the entire flash device. If a
	 * zephyr,code-partition property is defined, the application link
	 * will be restricted to that partition.
	 *
	 * 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>;

		/* 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>;
		};

	};
};
