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

/dts-v1/;
#include <silabs/efr32mg12p332f1024gl125.dtsi>

/ {
	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";
		};
		button1: button_1 {
			/* gpio flags need validation */
			gpios = <&gpiod 15 GPIO_ACTIVE_LOW>;
			label = "User Push Button 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>;
	location-rx = <GECKO_LOCATION(0) GECKO_PORT_A GECKO_PIN(1)>;
	location-tx = <GECKO_LOCATION(0) GECKO_PORT_A GECKO_PIN(0)>;
	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";
		label = "MX25R8035F";
		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)>;

	ccs811: ccs811@5a {
		compatible = "ams,ccs811";
		reg = <0x5a>;
		label = "CCS811";
		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";
};
