/*
 * Copyright (c) 2023 Antmicro <www.antmicro.com>
 *
 * SPDX-License-Identifier: Apache-2.0
 */

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

/ {
	model = "Silicon Labs EFM32GG SLTB009A board";
	compatible = "silabs,efm32gg_sltb009a";

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

	/* 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 = <&gpioe 12 GPIO_ACTIVE_HIGH>;
			label = "LED 0";
		};
		led1: led_1 {
			gpios = <&gpioa 13 GPIO_ACTIVE_HIGH>;
			label = "LED 1";
		};
	};

	buttons {
		compatible = "gpio-keys";
		button0: button_0 {
			gpios = <&gpiod 5 GPIO_ACTIVE_HIGH>;
			label = "User Push Button 0";
			zephyr,code = <INPUT_KEY_0>;
		};
		button1: button_1 {
			gpios = <&gpiod 8 GPIO_ACTIVE_HIGH>;
			label = "User Push Button 1";
			zephyr,code = <INPUT_KEY_1>;
		};
	};
};

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

&usart4 {
	current-speed = <115200>;
	location-rx = <GECKO_LOCATION(0) GECKO_PORT_B GECKO_PIN(8)>;
	location-tx = <GECKO_LOCATION(0) GECKO_PORT_B GECKO_PIN(7)>;
	status = "okay";
};

&leuart0 {
	current-speed = <9600>;
	location-rx = <GECKO_LOCATION(1) GECKO_PORT_B GECKO_PIN(14)>;
	location-tx = <GECKO_LOCATION(1) GECKO_PORT_B GECKO_PIN(13)>;
	status = "okay";
};

&i2c0 {
	location-sda = <GECKO_LOCATION(4) GECKO_PORT_C GECKO_PIN(0)>;
	location-scl = <GECKO_LOCATION(4) GECKO_PORT_C GECKO_PIN(1)>;
	status = "okay";
};

&i2c1 {
	location-sda = <GECKO_LOCATION(0) GECKO_PORT_C GECKO_PIN(4)>;
	location-scl = <GECKO_LOCATION(0) GECKO_PORT_C GECKO_PIN(5)>;
	status = "okay";
};

&rtcc0 {
	prescaler = <1>;
	status = "okay";
};

&gpioa {
	status = "okay";
	board-controller-enable {
		// VCOM Isolation. Set PA15 to HIGH to enable VCOM_{RX,TX}.
		gpio-hog;
		gpios = <15 GPIO_ACTIVE_HIGH>;
		output-high;
	};
};

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

&gpiob {
	status = "okay";
};

&gpioc {
	status = "okay";
};

&gpiod {
	status = "okay";
};

&gpioe {
	status = "okay";
};

&gpiof {
	status = "okay";
};

&flash0 {
	partitions {
		compatible = "fixed-partitions";
		#address-cells = <1>;
		#size-cells = <1>;

		/* Set 12Kb of storage at the end of the 2048Kb of flash */
		storage_partition: partition@1fd000 {
			label = "storage";
			reg = <0x001fd000 0x00003000>;
		};
	};
};

&wdog0 {
	status = "okay";
};

&trng0 {
	status = "okay";
};

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