/*
 * 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 (Mighty Gecko Radio Board)";
	compatible = "silabs,efr32mg24_brd2601b", "silabs,efr32mg24";

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

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

	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 {
	location-sda = <GECKO_LOCATION(5) GECKO_PORT_C GECKO_PIN(5)>;
	location-scl = <GECKO_LOCATION(5) GECKO_PORT_C GECKO_PIN(4)>;
	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 = "storage";
			reg = <0x0000c000 0x00074000>;
		};

		/* Reserve 464 kB for the application in slot 1 */
		slot1_partition: partition@80000 {
			label = "image-0";
			reg = <0x00080000 0x00074000>;
		};

		/* Reserve 32 kB for the scratch partition */
		scratch_partition: partition@f4000 {
			label = "image-1";
			reg = <0x000f4000 0x00008000>;
		};

		/* Set 528Kb of storage at the end of the 1024Kb of flash */
		storage_partition: partition@fc000 {
			label = "image-scratch";
			reg = <0x000fc000 0x00084000>;
		};
	};
};

&adc0 {
	status = "okay";
};
