/*
 * Copyright (c) 2023 Fr. Sauter AG
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;
#include <silabs/efr32mg24b220f1536im48.dtsi>
#include <zephyr/dt-bindings/input/input-event-codes.h>
#include "efr32_radio_efr32mg24b220f1536im48-pinctrl.dtsi"

/ {
	model = "Silicon Labs BRD4187C (Mighty Gecko Radio Board)";
	compatible = "silabs,efr32mg24_brd4187c", "silabs,efr32mg24";

	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 GECKO_PIN(2) GPIO_ACTIVE_HIGH>;
			label = "LED 0";
		};
		led1: led_1 {
			gpios = <&gpiob GECKO_PIN(4) GPIO_ACTIVE_HIGH>;
			label = "LED 1";
		};
	};

	buttons {
		compatible = "gpio-keys";
		button0: button_0 {
			gpios = <&gpiob GECKO_PIN(1) GPIO_ACTIVE_LOW>;
			label = "User Push Button 0";
			zephyr,code = <INPUT_KEY_0>;
		};
		button1: button_1 {
			gpios = <&gpiob GECKO_PIN(3) GPIO_ACTIVE_LOW>;
			label = "User Push Button 1";
			zephyr,code = <INPUT_KEY_1>;
		};
	};

};

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

&pstate_em3 {
	status = "disabled";
};

&usart0 {
	current-speed = <115200>;
	pinctrl-0 = <&usart0_default>;
	pinctrl-names = "default";
	status = "okay";
};

&gpio {
	location-swo = <0>;
	status = "okay";
};

&gpioa {
	status = "okay";
};

&gpiob {
	status = "okay";

	board-controller-enable {
		gpio-hog;
		gpios = <0 GPIO_ACTIVE_HIGH>;
		output-high;
	};
};

&gpioc {
	status = "okay";
};

&gpiod {
	status = "okay";
};

&wdog0 {
	status = "okay";
};

&burtc0 {
	status = "okay";
};

&stimer0 {
	status = "okay";
};

&se {
	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 DT_SIZE_K(48)>;
			read-only;
		};

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

		/* Reserve 720 kB for the application in slot 1 */
		slot1_partition: partition@C0000 {
			label = "image-1";
			reg = <0x000C0000 0x000B4000>;
		};

		/* Reserve 32 kB for the scratch partition */
		scratch_partition: partition@174000 {
			label = "image-scratch";
			reg = <0x00174000 DT_SIZE_K(32)>;
		};

		/* Set 16 kB of storage at the end of the 1536 kB of flash */
		storage_partition: partition@17c000 {
			label = "storage";
			reg = <0x0017c000 DT_SIZE_K(16)>;
		};
	};
};
