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

/dts-v1/;
#include <st/u5/stm32u585Xi.dtsi>
#include <st/u5/stm32u585aiixq-pinctrl.dtsi>
#include <zephyr/dt-bindings/input/input-event-codes.h>

/ {
	model = "STMicroelectronics SENSORTILE-BOX-PRO board";
	compatible = "st,sensortile-box-pro";

	chosen {
		/*
		 * By default, Zephyr console and shell are assigned to
		 * USB CDC/ACM. To enable console and shell over UART,
		 * uncomment following lines and set the correct config
		 * in sensortile_box_pro_defconfig.
		 *
		 * zephyr,console = &uart4;
		 * zephyr,shell-uart = &uart4;
		 */
		zephyr,console = &cdc_acm_uart0;
		zephyr,shell-uart = &cdc_acm_uart0;

		zephyr,sram = &sram0;
		zephyr,flash = &flash0;
		zephyr,code-partition = &slot0_partition;
	};

	leds {
		compatible = "gpio-leds";
		green_led_1: led_1 {
			gpios = <&gpiof 6 GPIO_ACTIVE_HIGH>;
			label = "User GREEN led";
		};
		red_led_1: led_2 {
			gpios = <&gpioh 11 GPIO_ACTIVE_HIGH>;
			label = "User RED led";
		};
		yellow_led_1: led_3 {
			gpios = <&gpioh 12 GPIO_ACTIVE_HIGH>;
			label = "User YELLOW led";
		};
		blue_led_1: led_4 {
			gpios = <&gpiof 9 GPIO_ACTIVE_HIGH>;
			label = "User YELLOW led";
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		button1: button1 {
			label = "User BT1";
			gpios = <&gpioc 13 GPIO_ACTIVE_HIGH>;
			zephyr,code = <INPUT_KEY_0>;
		};
		button2: button2 {
			label = "User BT2";
			gpios = <&gpioe 0 GPIO_ACTIVE_HIGH>;
			zephyr,code = <INPUT_KEY_1>;
		};
	};

	sd_card: sd-card {
		compatible = "st,stile_sd_card";
		en-sd-gpios = <&gpioh 10 (GPIO_ACTIVE_HIGH)>;
		sel-sd-gpios = <&gpioh 8 (GPIO_ACTIVE_HIGH)>;
	};

	aliases {
		led0 = &green_led_1;
		led1 = &red_led_1;
		led2 = &yellow_led_1;
		led3 = &blue_led_1;
		mcuboot-led0 = &blue_led_1;
		mcuboot-button0 = &button1;
		sw1 = &button1;
		sw2 = &button2;
		watchdog0 = &iwdg;
		die-temp0 = &die_temp;
		volt-sensor0 = &vref1;
		volt-sensor1 = &vbat4;
	};
};

&clk_hsi48 {
	status = "okay";
};

&clk_lse {
	status = "okay";
};

&clk_msis {
	status = "okay";
	msi-range = <4>;
	msi-pll-mode;
};

&gpioi {
	status = "okay";

	/* switch sensor IMU bus from I2C1 to SPI2 */
	mcu-sel-gpios {
		gpio-hog;
		gpios = <0 GPIO_ACTIVE_HIGH>;
		output-low;
	};
};

&pll1 {
	div-m = <1>;
	mul-n = <80>;
	div-q = <2>;
	div-r = <2>;
	clocks = <&clk_msis>;
	status = "okay";
};

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

stm32_lp_tick_source: &lptim1 {
	clocks = <&rcc STM32_CLOCK_BUS_APB3 0x00000800>,
		 <&rcc STM32_SRC_LSE LPTIM1_SEL(3)>;
	status = "okay";
};

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

&usart3 {
	pinctrl-0 = <&usart3_tx_pd8 &usart3_rx_pd9>;
	pinctrl-names = "default";
	current-speed = <115200>;
	status = "okay";
};

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

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

	bluenrg-lp@0 {
		compatible = "st,hci-spi-v2";
		reg = <0>;
		irq-gpios = <&gpiod 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>;
		reset-gpios = <&gpiod 4 GPIO_ACTIVE_LOW>;
		spi-cpol;
		spi-cpha;
		spi-hold-cs;
		spi-max-frequency = <DT_FREQ_M(8)>;
		controller-data-delay-us = <0>;
		reset-assert-duration-ms = <6>;
	};
};

&spi1_sck_pa5 {
	/delete-property/ bias-pull-down;
	bias-pull-up; /* Idle state for the clock pin is high-level due to SPI mode 3 */
};

&spi2 {
	pinctrl-0 = <&spi2_sck_pi1 &spi2_miso_pi2 &spi2_mosi_pi3>;
	pinctrl-names = "default";
	status = "okay";

	cs-gpios = <&gpioi 5 GPIO_ACTIVE_LOW>, <&gpioi 7 GPIO_ACTIVE_LOW>;

	lsm6dsv16x: lsm6dsv16x@0 {
		compatible = "st,lsm6dsv16x";
		spi-max-frequency = <DT_FREQ_M(10)>;
		reg = <0>;
		int1-gpios = <&gpioa 4 GPIO_ACTIVE_HIGH>;
		int2-gpios = <&gpiod 11 GPIO_ACTIVE_HIGH>;

		drdy-pin = <2>;
	};

	lis2du12: lis2du12@1 {
		compatible = "st,lis2du12";
		spi-max-frequency = <DT_FREQ_M(10)>;
		reg = <1>;
		int1-gpios = <&gpiof 2 GPIO_ACTIVE_HIGH>;
		int2-gpios = <&gpiof 15 GPIO_ACTIVE_HIGH>;

		drdy-pin = <2>;
	};
};

&timers4 {
	status = "okay";
	st,prescaler = <1>;
	pwm4: pwm {
		status = "okay";
		pinctrl-0 = <&tim4_ch1_pb6>;
		pinctrl-names = "default";
	};
};

&timers3 {
	status = "okay";
	st,prescaler = <255>;
	pwm3: pwm {
		status = "okay";
		pinctrl-0 = <&tim3_ch2_pe4>;
		pinctrl-names = "default";
	};
};

&i2c1 {
	pinctrl-0 = <&i2c1_scl_pb6 &i2c1_sda_pb7>;
	pinctrl-names = "default";
	status = "okay";
	clock-frequency = <I2C_BITRATE_FAST>;

	hts221@5f {
		compatible = "st,hts221";
		reg = <0x5f>;
		drdy-gpios = <&gpioe 11 GPIO_ACTIVE_HIGH>;
		status = "okay";
	};

	lps22df@5d {
		compatible = "st,lps22df";
		reg = <0x5d>;
		drdy-gpios = <&gpioe 8 GPIO_ACTIVE_HIGH>;
		status = "okay";
	};

	lis2mdl@1e {
		compatible = "st,lis2mdl";
		reg = <0x1e>;
		irq-gpios = <&gpioe 6 GPIO_ACTIVE_HIGH>;
		status = "okay";
	};
};

&i2c2 {
	pinctrl-0 = <&i2c2_scl_ph4 &i2c2_sda_ph5>;
	pinctrl-names = "default";
	status = "okay";
	clock-frequency = <I2C_BITRATE_FAST>;
};

&aes {
	status = "okay";
};

&rng {
	status = "okay";
};

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

	cdc_acm_uart0: cdc_acm_uart0 {
		compatible = "zephyr,cdc-acm-uart";
	};
};

&adc1 {
	pinctrl-0 = <&adc1_in15_pb0>;
	pinctrl-names = "default";
	st,adc-clock-source = <ASYNC>;
	st,adc-prescaler = <4>;
	status = "okay";
};

&adc4 {
	pinctrl-0 = <&adc4_in19_pb1>;
	pinctrl-names = "default";
	st,adc-clock-source = <ASYNC>;
	st,adc-prescaler = <4>;
	status = "okay";
};

&die_temp {
	status = "okay";
};

&dac1 {
	pinctrl-0 = <&dac1_out1_pa4>;
	pinctrl-names = "default";
	status = "okay";
};

&iwdg {
	status = "okay";
};

&vref1 {
	status = "okay";
};

&vbat4 {
	status = "okay";
};

&sdmmc1 {
	status = "okay";
	pinctrl-0 = <&sdmmc1_d0_pc8 &sdmmc1_d1_pc9
		     &sdmmc1_d2_pc10 &sdmmc1_d3_pc11
		     &sdmmc1_ck_pc12 &sdmmc1_cmd_pd2
		     &sdmmc1_d0dir_pc6 &sdmmc1_d123dir_pc7
		     &sdmmc1_cdir_pb9 &sdmmc1_ckin_pb8>;
	pinctrl-names = "default";
	cd-gpios = <&gpioc 5 GPIO_ACTIVE_LOW>;
	pwr-gpios = <&gpioh 10 GPIO_ACTIVE_LOW>;
	bus-width = <4>;
	clk-div = <4>;
};

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

		/*
		 * Following flash partition is dedicated to the use of sensortile_box_pro
		 * with TZEN=0 (so w/o TFM).
		 * Set the partitions with first MB to make use of the whole Bank1
		 */
		boot_partition: partition@0 {
			label = "mcuboot";
			reg = <0x00000000 DT_SIZE_K(64)>;
		};
		slot0_partition: partition@10000 {
			label = "image-0";
			reg = <0x00010000 DT_SIZE_K(416)>;
		};
		slot1_partition: partition@78000 {
			label = "image-1";
			reg = <0x00078000 DT_SIZE_K(416)>;
		};
		scratch_partition: partition@e0000 {
			label = "image-scratch";
			reg = <0x000e0000 DT_SIZE_K(64)>;
		};
		storage_partition: partition@f0000 {
			label = "storage";
			reg = <0x000f0000 DT_SIZE_K(64)>;
		};

	};
};

&gpdma1 {
	status = "okay";
};
