/*
 * Copyright (c) 2019 Interay Solutions B.V.
 * Copyright (c) 2019 Oane Kingma
 *
 * SPDX-License-Identifier: Apache-2.0
 */

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

/ {
	model = "Silicon Labs EFM32GG STK3701A board";
	compatible = "silabs,efm32gg_stk3701a", "silabs,efm32gg11b";

	chosen {
		zephyr,console = &usart4;
		zephyr,shell-uart = &usart4;
		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 = <&gpioh 10 0>;
			label = "LED 0";
		};
		led1: led_1 {
			gpios = <&gpioh 13 0>;
			label = "LED 1";
		};
	};

	buttons {
		compatible = "gpio-keys";
		button0: button_0 {
			/* gpio flags need validation */
			gpios = <&gpioc 8 GPIO_ACTIVE_LOW>;
			label = "User Push Button 0";
			zephyr,code = <INPUT_KEY_0>;
		};
		button1: button_1 {
			/* gpio flags need validation */
			gpios = <&gpioc 9 GPIO_ACTIVE_LOW>;
			label = "User Push Button 1";
			zephyr,code = <INPUT_KEY_1>;
		};
	};
};

&usart0 {
	current-speed = <115200>;
	location-rx = <GECKO_LOCATION(0) GECKO_PORT_E GECKO_PIN(11)>;
	location-tx = <GECKO_LOCATION(0) GECKO_PORT_E GECKO_PIN(10)>;
	status = "okay";
};

&usart4 {
	current-speed = <115200>;
	location-rx = <GECKO_LOCATION(4) GECKO_PORT_H GECKO_PIN(5)>;
	location-tx = <GECKO_LOCATION(4) GECKO_PORT_H GECKO_PIN(4)>;
	status = "okay";
};

&leuart0 {
	current-speed = <9600>;
	location-rx = <GECKO_LOCATION(18) GECKO_PORT_D GECKO_PIN(11)>;
	location-tx = <GECKO_LOCATION(18) GECKO_PORT_D GECKO_PIN(10)>;
	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";
};

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

&gpioa {
	status = "okay";
};

&gpiob {
	status = "okay";
};

&gpioc {
	status = "okay";
};

&gpiod {
	status = "okay";
};

&gpioe {
	status = "okay";

	board-controller-enable {
		gpio-hog;
		gpios = <1 GPIO_ACTIVE_HIGH>;
		output-high;
	};
};

&gpiof {
	status = "okay";
};

&gpiog {
	status = "okay";
};

&gpioh {
	status = "okay";
};

&gpioi {
	status = "okay";
};

&eth0 {
	/* PHY address = 0 */
	phy-address = <0>;

	/* PHY management pins */
	location-mdio        = <GECKO_LOCATION(1)>;
	location-phy_mdc     = <GECKO_LOCATION(1) GECKO_PORT_D GECKO_PIN(14)>;
	location-phy_mdio    = <GECKO_LOCATION(1) GECKO_PORT_D GECKO_PIN(13)>;

	/* RMII interface pins */
	location-rmii        = <GECKO_LOCATION(1)>;
	location-rmii_refclk = <GECKO_LOCATION(5) GECKO_PORT_D GECKO_PIN(10)>;
	location-rmii_crs_dv = <GECKO_LOCATION(1) GECKO_PORT_D GECKO_PIN(11)>;
	location-rmii_txd0   = <GECKO_LOCATION(1) GECKO_PORT_F GECKO_PIN(7)>;
	location-rmii_txd1   = <GECKO_LOCATION(1) GECKO_PORT_F GECKO_PIN(6)>;
	location-rmii_tx_en  = <GECKO_LOCATION(1) GECKO_PORT_F GECKO_PIN(8)>;
	location-rmii_rxd0   = <GECKO_LOCATION(1) GECKO_PORT_D GECKO_PIN(9)>;
	location-rmii_rxd1   = <GECKO_LOCATION(1) GECKO_PORT_F GECKO_PIN(9)>;
	location-rmii_rx_er  = <GECKO_LOCATION(1) GECKO_PORT_D GECKO_PIN(12)>;

	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>;
};
