/*
 * Copyright (c) 2021 Instituto de Pesquisas Eldorado (eldorado.org.br)
 *
 * SPDX-License-Identifier: Apache-2.0
 */
/dts-v1/;

#include <espressif/esp32/esp32_d0wd_v3.dtsi>
#include "heltec_wifi_lora32_v2-pinctrl.dtsi"
#include <zephyr/dt-bindings/input/input-event-codes.h>

/ {
	model = "heltec_wifi_lora32";
	compatible = "espressif,esp32";

	aliases {
		uart-0 = &uart0;
		i2c-0 = &i2c0;
		led0 = &led0;
		sw0 = &button0;
		watchdog0 = &wdt0;
		lora0 = &lora0;
	};

	leds {
		compatible = "gpio-leds";
		led0: led {
			gpios = <&gpio0 25 GPIO_ACTIVE_HIGH>;
			label = "White LED";
		};

		vext: vext {
			gpios = <&gpio0 21 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
			label = "External VCC";
		};

		oledrst: oledrst {
			gpios = <&gpio0 16 (GPIO_PULL_UP | GPIO_ACTIVE_HIGH)>;
			label = "OLED Reset";
		};
	};

	buttons {
		compatible = "gpio-keys";
		button0: button_0 {
			gpios = <&gpio0 0 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
			label = "PRG Button";
			zephyr,code = <INPUT_KEY_0>;
		};
	};

	chosen {
		zephyr,sram = &sram0;
		zephyr,console = &uart0;
		zephyr,shell-uart = &uart0;
		zephyr,flash = &flash0;
		zephyr,code-partition = &slot0_partition;
	};
};

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

&cpu1 {
	clock-frequency = <ESP32_CLK_CPU_240M>;
};

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

&gpio0 {
	status = "okay";
};

&trng0 {
	status = "okay";
};

&i2c0 {
	status = "okay";
	clock-frequency = <I2C_BITRATE_FAST>;
	sda-gpios = <&gpio0 4 GPIO_OPEN_DRAIN>;
	scl-gpios = <&gpio0 15 GPIO_OPEN_DRAIN>;
	pinctrl-0 = <&i2c0_default>;
	pinctrl-names = "default";
};

&spi3 {
	#address-cells = <1>;
	#size-cells = <0>;
	status = "okay";
	pinctrl-0 = <&spim3_default>;
	pinctrl-names = "default";
	cs-gpios = <&gpio0 18 GPIO_ACTIVE_LOW>;
	lora0: lora@0 {
		compatible = "semtech,sx1276";
		reg = <0>;
		reset-gpios = <&gpio0 14 GPIO_ACTIVE_LOW>;
		dio-gpios =
			/* SX1276 D0 -> GPIO26 */
			<&gpio0 26 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)>,
			/* SX1276 D1 -> GPIO35 */
			<&gpio1 3 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)>,
			/* SX1276 D1 -> GPIO34 */
			<&gpio1 2 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)>;
		spi-max-frequency = <1000000>;
		power-amplifier-output = "pa-boost";
	};
};

&flash0 {
	/* the board is using plain d0wd SoC part without the flash
	 * so any additional flash size should be defined at the board level
	 */
	reg = <0x0 DT_SIZE_M(8)>;

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

		/* Reserve 60kB for the bootloader */
		boot_partition: partition@1000 {
			label = "mcuboot";
			reg = <0x00001000 0x0000F000>;
			read-only;
		};

		/* Reserve 1024kB for the application in slot 0 */
		slot0_partition: partition@10000 {
			label = "image-0";
			reg = <0x00010000 0x00100000>;
		};

		/* Reserve 1024kB for the application in slot 1 */
		slot1_partition: partition@110000 {
			label = "image-1";
			reg = <0x00110000 0x00100000>;
		};

		/* Reserve 256kB for the scratch partition */
		scratch_partition: partition@210000 {
			   label = "image-scratch";
			   reg = <0x00210000 0x00040000>;
		};

		storage_partition: partition@250000 {
			label = "storage";
			reg = <0x00250000 0x00006000>;
		};
	};
};

/* Required by the ssd1306_128x64 shield which enables the OLED display */
arduino_i2c: &i2c0 {};
