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

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

/ {
	model = "Silicon Labs BRD2601B (xG24 Dev Kit)";
	compatible = "silabs,xg24_brd2601b", "silabs,efr32mg24";

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

	aliases {
		led0 = &red_led;
		led1 = &green_led;
		led2 = &blue_led;
		sw0 = &button0;
		sw1 = &button1;
		watchdog0 = &wdog0;
	};

	leds {
		compatible = "gpio-leds";
		red_led: led_2 {
			gpios = <&gpiod GECKO_PIN(2) GPIO_ACTIVE_LOW>;
		};
		green_led: led_0 {
			gpios = <&gpioa GECKO_PIN(4) GPIO_ACTIVE_LOW>;
		};
		blue_led: led_1 {
			gpios = <&gpiob GECKO_PIN(0) GPIO_ACTIVE_LOW>;
		};
	};

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

	wake_up_trigger: gpio-wake-up  {
		compatible = "silabs,gecko-wake-up-trigger";
		gpios = <&gpioa GECKO_PIN(5) GPIO_ACTIVE_LOW>;
	};

	sensor_enable: gpio_switch_0 {
		compatible = "regulator-fixed";
		regulator-name = "sensor_enable";
		enable-gpios = <&gpioc GECKO_PIN(9) GPIO_ACTIVE_HIGH>;
		regulator-boot-on;
	};
};

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

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

&i2c0 {
	pinctrl-0 = <&i2c0_default>;
	pinctrl-names = "default";
	status = "okay";

	veml6035: veml6035@29 {
		compatible = "vishay,veml7700";
		reg = <0x29>;
		status = "okay";
	};

	si7210: si7210@30 {
		compatible = "silabs,si7210";
		reg = <0x30>;
		status = "okay";
	};

	si7021: si7021@40 {
		compatible = "silabs,si7006";
		reg = <0x40>;
		status = "okay";
	};
};

&gpio {
	status = "okay";
};

&gpioa {
	status = "okay";
};

&gpiob {
	status = "okay";
};

&gpioc {
	status = "okay";
};

&gpiod {
	status = "okay";
};

&wdog0 {
	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 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 528Kb of storage at the end of the 1024Kb of flash */
		storage_partition: partition@fc000 {
			label = "storage";
			reg = <0x000fc000 0x00084000>;
		};
	};
};

&adc0 {
	status = "okay";
};

&stimer0 {
	status = "okay";
};

&bt_hci_silabs {
	status = "okay";
};
