/*
 * Copyright (c) 2018 Diego Sueiro
 *
 * SPDX-License-Identifier: Apache-2.0
 */

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

/ {
	model = "Silabs EFR32MG SLTB004A board (aka Thunderboard Sense 2)";
	compatible = "silabs,efr32mg_sltb004a", "silabs,efr32mg";

	/* These aliases are provided for compatibility with samples */
	aliases {
		led0 = &led0;
		led1 = &led1;
		pwm-led0 = &pwm_led0;
		sw0 = &button0;
		sw1 = &button1;
		watchdog0 = &wdog0;
		watchdog1 = &wdog1;
		spi-flash0 = &mx25r80;
	};

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

	leds {
		compatible = "gpio-leds";
		led0: led_0 {
			gpios = <&gpiod 8 0>;
			label = "LED 0";
		};
		led1: led_1 {
			gpios = <&gpiod 9 0>;
			label = "LED 1";
		};
	};

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

	pwmleds {
		compatible = "pwm-leds";
		status = "okay";
		pwm_led0: pwm_led0 {
			pwms = <&pwm0 0 PWM_MSEC(20) PWM_POLARITY_NORMAL>;
		};
	};
};

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

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

&usart2 {
	compatible = "silabs,gecko-spi-usart";

	#address-cells = <1>;
	#size-cells = <0>;

	location-rx = <GECKO_LOCATION(30) GECKO_PORT_K GECKO_PIN(2)>;
	location-tx = <GECKO_LOCATION(29) GECKO_PORT_K GECKO_PIN(0)>;
	location-clk = <GECKO_LOCATION(18) GECKO_PORT_F GECKO_PIN(7)>;

	cs-gpios = <&gpiok 1 GPIO_ACTIVE_LOW>;

	status = "okay";

	mx25r80: mx25r8035f@0 {
		compatible = "jedec,spi-nor";
		reg = <0>;
		spi-max-frequency = <80000000>;
		size = <0x800000>;
		jedec-id = [c2 28 14];
		sfdp-bfp = [
			 e5 20 f1 ff  ff ff 7f 00  44 eb 08 6b  08 3b 04 bb
			 ee ff ff ff  ff ff 00 ff  ff ff 00 ff  0c 20 0f 52
			 10 d8 00 ff  23 72 f5 00  82 ed 04 b7  44 83 38 44
			 30 b0 30 b0  f7 c4 d5 5c  00 be 29 ff  f0 d0 ff ff
		];
	};
};

&leuart0 {
	current-speed = <9600>;
	location-rx = <GECKO_LOCATION(27) GECKO_PORT_F GECKO_PIN(4)>;
	location-tx = <GECKO_LOCATION(27) GECKO_PORT_F GECKO_PIN(3)>;
	status = "okay";
};

&i2c0 {
	location-sda = <GECKO_LOCATION(15) GECKO_PORT_C GECKO_PIN(10)>;
	location-scl = <GECKO_LOCATION(15) GECKO_PORT_C GECKO_PIN(11)>;
	status = "okay";
};

&i2c1 {
	/* This set selects for CCS811_I2C supporting CCS811 */
	location-sda = <GECKO_LOCATION(6) GECKO_PORT_B GECKO_PIN(6)>;
	location-scl = <GECKO_LOCATION(6) GECKO_PORT_B GECKO_PIN(7)>;
	status = "okay";

	ccs811: ccs811@5a {
		compatible = "ams,ccs811";
		reg = <0x5a>;
		supply-gpios = <&gpiof 14 GPIO_ACTIVE_HIGH>;
		irq-gpios = <&gpiof 13 GPIO_ACTIVE_LOW>;
		wake-gpios = <&gpiof 15 GPIO_ACTIVE_LOW>;
	};

	/* This set selects for ENV_I2C supporting Si7021, Si11330, BMP280 */
	/*
	location-sda = <GECKO_LOCATION(17) GECKO_PORT_C GECKO_PIN(4)>;
	location-scl = <GECKO_LOCATION(17) GECKO_PORT_C GECKO_PIN(5)>;
	*/

	/* This set selects for HALL_I2C supporting Si7210 */
	/*
	location-sda = <GECKO_LOCATION(8) GECKO_PORT_B GECKO_PIN(8)>;
	location-scl = <GECKO_LOCATION(8) GECKO_PORT_B GECKO_PIN(9)>;
	*/
};

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

&timer0 {
	status = "okay";

	pwm0: pwm {
		status = "okay";
		pin-location = <GECKO_LOCATION(17) GECKO_PORT_D GECKO_PIN(9)>;
		prescaler = <1024>;
	};
};

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

&gpioa {
	status = "okay";
};

&gpiod {
	status = "okay";
};

&gpiof {
	status = "okay";
};

&gpiok {
	status = "okay";
};

&wdog0 {
	status = "okay";
};

&wdog1 {
	status = "okay";
};

&flash0 {

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

		/* Set 6Kb of storage at the end of the 1024Kb of flash */
		storage_partition: partition@fe800 {
			label = "storage";
			reg = <0x000fe800 0x00001800>;
		};

	};
};

&trng0 {
		status = "okay";
};
