/*
 * Copyright (c) 2020 STMicroelectronics
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;
#include <st/wl/stm32wl55Xc.dtsi>
#include <st/wl/stm32wl55jcix-pinctrl.dtsi>
#include "arduino_r3_connector.dtsi"

/ {
	model = "STMicroelectronics STM32WL55JC-NUCLEO board";
	compatible = "st,stm32wl55-nucleo";

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

	leds {
		compatible = "gpio-leds";
		blue_led_1: led_0 {
			gpios = <&gpiob 15 GPIO_ACTIVE_HIGH>;
			label = "User LED1";
		};
		green_led_2: led_1 {
			gpios = <&gpiob 9 GPIO_ACTIVE_HIGH>;
			label = "User LED2";
		};
		green_led_3: led_2 {
			gpios = <&gpiob 11 GPIO_ACTIVE_HIGH>;
			label = "User LED3";
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		user_button_1: button_0 {
			label = "SW1";
			gpios = <&gpioa 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
		};
		user_button_2: button_1 {
			label = "SW2";
			gpios = <&gpioa 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
		};
		user_button_3: button_2 {
			label = "SW3";
			gpios = <&gpioc 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
		};
	};

	aliases {
		led0 = &green_led_2;
		sw0 = &user_button_1;
		sw1 = &user_button_2;
		sw2 = &user_button_3;
		lora0 = &lora;
	};

	power-states {
		stop0: state0 {
			compatible = "zephyr,power-state";
			power-state-name = "suspend-to-idle";
			substate-id = <1>;
			min-residency-us = <100>;
		};
		stop1: state1 {
			compatible = "zephyr,power-state";
			power-state-name = "suspend-to-idle";
			substate-id = <2>;
			min-residency-us = <500>;
		};
		stop2: state2 {
			compatible = "zephyr,power-state";
			power-state-name = "suspend-to-idle";
			substate-id = <3>;
			min-residency-us = <900>;
		};
	};
};

&cpu0 {
	cpu-power-states = <&stop0 &stop1 &stop2>;
};

&lptim1 {
	status = "okay";
};

&clk_hsi {
	status = "okay";
};

&pll {
	div-m = <1>;
	mul-n = <6>;
	div-r = <2>;
	div-q = <2>;
	clocks = <&clk_hsi>;
	status = "okay";
};

&rcc {
	clocks = <&pll>;
	clock-frequency = <DT_FREQ_M(48)>;
	cpu1-prescaler = <1>;
	cpu2-prescaler = <1>;
	ahb3-prescaler = <1>;
	apb1-prescaler = <1>;
	apb2-prescaler = <1>;
};

&lpuart1 {
	pinctrl-0 = <&lpuart1_tx_pa2 &lpuart1_rx_pa3>;
	current-speed = <115200>;
	status = "okay";
};

&i2c2 {
	pinctrl-0 = <&i2c2_scl_pa12 &i2c2_sda_pa11>;
	status = "okay";
	clock-frequency = <I2C_BITRATE_FAST>;
};

&spi1 {
	pinctrl-0 = <&spi1_nss_pa4 &spi1_sck_pa5
		     &spi1_miso_pa6 &spi1_mosi_pa7>;
	status = "okay";
};

&aes {
	status = "okay";
};

&rng {
	status = "okay";
};

&subghzspi {
	status = "okay";
	lora: radio@0 {
		status = "okay";
		tx-enable-gpios = <&gpioc 4 GPIO_ACTIVE_LOW>;
		rx-enable-gpios = <&gpioc 5 GPIO_ACTIVE_LOW>;
		dio3-tcxo-voltage = <SX126X_DIO3_TCXO_1V7>;
		tcxo-power-startup-delay-ms = <5>;
	};
};

&flash0 {
	/*
	 * For more information, see:
	 * http://docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions
	 */
	partitions {
		compatible = "fixed-partitions";
		#address-cells = <1>;
		#size-cells = <1>;

		/*
		 * Set 16kB of storage (8x2kB pages) at the end of the 256kB of
		 * flash.
		 */
		storage_partition: partition@3c000 {
			label = "storage";
			reg = <0x0003c000 0x00004000>;
		};
	};
};
