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

/ {
	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>;
	location-rx = <GECKO_LOCATION(0) GECKO_PORT_A GECKO_PIN(9)>;
	location-tx = <GECKO_LOCATION(0) GECKO_PORT_A GECKO_PIN(8)>;
	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)>;
		};
	};
};
