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

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