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