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

/dts-v1/;
#include <st/l4/stm32l4s5Xi.dtsi>
#include <st/l4/stm32l4s5vitx-pinctrl.dtsi>
#include "arduino_r3_connector.dtsi"

/ {
	model = "STMicroelectronics B-L4S5I-IOT01A discovery kit";
	compatible = "st,b-l4s5i-iot01a";

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

	leds {
		compatible = "gpio-leds";
		green_led_1: led_1 {
			gpios = <&gpioa 5 GPIO_ACTIVE_HIGH>;
			label = "User LD1";
		};
		green_led_2: led_2 {
			gpios = <&gpiob 14 GPIO_ACTIVE_HIGH>;
			label = "User LD2";
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		user_button: button {
			label = "User";
			gpios = <&gpioc 13 GPIO_ACTIVE_LOW>;
		};
	};

	aliases {
		led0 = &green_led_1;
		sw0 = &user_button;
		watchdog0 = &iwdg;
		accel0 = &lsm6dsl;
	};
};

&clk_hsi {
	status = "okay";
};

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

&rcc {
	clocks = <&pll>;
	clock-frequency = <DT_FREQ_M(80)>;
	ahb-prescaler = <1>;
	apb1-prescaler = <1>;
	apb2-prescaler = <1>;
};

&usart1 {
	pinctrl-0 = <&usart1_tx_pb6 &usart1_rx_pb7>;
	pinctrl-names = "default";
	current-speed = <115200>;
	status = "okay";
};

&uart4 {
	pinctrl-0 = <&uart4_tx_pa0 &uart4_rx_pa1>;
	pinctrl-names = "default";
	current-speed = <115200>;
};

&i2c1 {
	pinctrl-0 = <&i2c1_scl_pb8 &i2c1_sda_pb9>;
	pinctrl-names = "default";
	status = "okay";
	clock-frequency = <I2C_BITRATE_FAST>;
};

&i2c2 {
	pinctrl-0 = <&i2c2_scl_pb10 &i2c2_sda_pb11>;
	pinctrl-names = "default";
	status = "okay";
	clock-frequency = <I2C_BITRATE_FAST>;

	lis3mdl-magn@1e {
		compatible = "st,lis3mdl-magn";
		reg = <0x1e>;
	};

	hts221@5f {
		compatible = "st,hts221";
		reg = <0x5f>;
	};

	lps22hb-press@5d {
		compatible = "st,lps22hb-press";
		reg = <0x5d>;
	};

	lsm6dsl: lsm6dsl@6a {
		compatible = "st,lsm6dsl";
		reg = <0x6a>;
		irq-gpios = <&gpiod 11 GPIO_ACTIVE_HIGH>;
	};

	vl53l0x@29 {
		compatible = "st,vl53l0x";
		reg = <0x29>;
		xshut-gpios = <&gpioc 6 GPIO_ACTIVE_HIGH>;
	};
};

&spi1 {
	pinctrl-0 = <&spi1_sck_pa5 &spi1_miso_pa6 &spi1_mosi_pa7>;
	pinctrl-names = "default";
	cs-gpios = <&gpioa 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
	status = "okay";
};

&spi3 {
	pinctrl-0 = <&spi3_sck_pc10 &spi3_miso_pc11 &spi3_mosi_pc12>;
	pinctrl-names = "default";
	status = "okay";

	cs-gpios = <&gpiod 13 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>,
		   <&gpioe 0 GPIO_ACTIVE_LOW>;

	spbtle-rf@0 {
		compatible = "zephyr,bt-hci-spi";
		reg = <0>;
		reset-gpios = <&gpioa 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
		irq-gpios = <&gpioe 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>;
		spi-max-frequency = <2000000>;
	};

	wifi0: ism43362@1 {
		compatible = "inventek,eswifi";
		spi-max-frequency = <2000000>;
		reg = <1>;
		resetn-gpios = <&gpioe 8 GPIO_ACTIVE_HIGH>;
		boot0-gpios = <&gpiob 12 GPIO_ACTIVE_HIGH>;
		wakeup-gpios = <&gpiob 13 GPIO_ACTIVE_HIGH>;
		data-gpios = <&gpioe 1 GPIO_ACTIVE_HIGH>;
	};
};

&flash0 {

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

		boot_partition: partition@0 {
			label = "mcuboot";
			reg = <0x00000000 DT_SIZE_K(64)>;
			read-only;
		};

		/*
		 * The flash starting at offset 0x10000 and ending at
		 * offset 0x1ffff is reserved for use by the application.
		 */

		slot0_partition: partition@20000 {
			label = "image-0";
			reg = <0x00020000 DT_SIZE_K(432)>;
		};
		slot1_partition: partition@8c000 {
			label = "image-1";
			reg = <0x0008C000 DT_SIZE_K(432)>;
		};
		scratch_partition: partition@f8000 {
			label = "image-scratch";
			reg = <0x000F8000 DT_SIZE_K(16)>;
		};

		storage_partition: partition@fc000 {
			label = "storage";
			reg = <0x000fc000 DT_SIZE_K(16)>;
		};
	};
};

&timers2 {
	status = "okay";

	pwm2: pwm {
		status = "okay";
		pinctrl-0 = <&tim2_ch1_pa15>;
		pinctrl-names = "default";
	};
};

&rtc {
	status = "okay";
};

&lptim1 {
	status = "okay";
};

zephyr_udc0: &usbotg_fs {
	pinctrl-0 = <&usb_otg_fs_dm_pa11 &usb_otg_fs_dp_pa12
		     &usb_otg_fs_id_pa10>;
	pinctrl-names = "default";
	status = "okay";
};

&iwdg {
	status = "okay";
};

&rng {
	status = "okay";
};
