/*
 * Copyright (c) 2022 Byte-Lab d.o.o. <dev@byte-lab.com>
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;
#include <st/h7/stm32h7b3Xi.dtsi>
#include <st/h7/stm32h7b3lihxq-pinctrl.dtsi>
#include <zephyr/dt-bindings/display/stm32_ltdc.h>
#include "arduino_r3_connector.dtsi"

/ {
	model = "STMicroelectronics STM32H7B3I DISCOVERY KIT board";
	compatible = "st,stm32h7b3i-dk";

	chosen {
		zephyr,console = &usart1;
		zephyr,shell-uart = &usart1;
		zephyr,sram = &sram0;
		zephyr,flash = &flash0;
		zephyr,display = &ltdc;
		zephyr,canbus = &can1;
		zephyr,keyboard-scan = &touch_controller;
	};

	leds {
		compatible = "gpio-leds";
		red_led: led_0 {
			gpios = <&gpiog 11 GPIO_ACTIVE_HIGH>;
			label = "User LD1";
		};
		blue_led: led_1 {
			gpios = <&gpiog 2 GPIO_ACTIVE_HIGH>;
			label = "User LD2";
		};
	};

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

	sdram2: sdram@d0000000 {
		compatible = "zephyr,memory-region", "mmio-sram";
		device_type = "memory";
		reg = <0xd0000000 DT_SIZE_M(16)>;
		zephyr,memory-region = "SDRAM2";
	};

	transceiver0: can-phy0 {
		compatible = "microchip,mcp2562fd", "can-transceiver-gpio";
		standby-gpios = <&gpioh 8 GPIO_ACTIVE_HIGH>;
		max-bitrate = <5000000>;
		#phy-cells = <0>;
	};

	aliases {
		led0 = &blue_led;
		led1 = &red_led;
		sw0 = &user_button;
		kscan0 = &touch_controller;
	};
};

&clk_hse {
	clock-frequency = <DT_FREQ_M(24)>;
	status = "okay";
};

/* PLL1P is used for system clock (280 MHz), PLL1Q is used for FDCAN bit quantum clock (80 MHz) */
&pll {
	div-m = <12>;
	mul-n = <280>;
	div-p = <2>;
	div-q = <7>;
	div-r = <2>;
	clocks = <&clk_hse>;
	status = "okay";
};

/* PLL3R is used for outputting 9 MHz pixel clock for LTDC */
&pll3 {
	div-m = <8>;
	mul-n = <60>;
	div-p = <2>;
	div-q = <2>;
	div-r = <20>;
	clocks = <&clk_hse>;
	status = "okay";
};

&rcc {
	clocks = <&pll>;
	clock-frequency = <DT_FREQ_M(280)>;
	d1cpre = <1>;
	hpre = <1>;
	d1ppre = <2>;
	d2ppre1 = <2>;
	d2ppre2 = <2>;
	d3ppre = <2>;
};

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

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

&i2c4 {
	pinctrl-0 = <&i2c4_scl_pd12 &i2c4_sda_pd13>;
	pinctrl-names = "default";
	clock-frequency = <I2C_BITRATE_FAST>;
	status = "okay";

	touch_controller: ft5336@38 {
		compatible = "focaltech,ft5336";
		reg = <0x38>;
		int-gpios = <&gpioh 2 0>;
	};
};

&spi2 {
	pinctrl-0 = <&spi2_sck_pa12 &spi2_miso_pb14 &spi2_mosi_pb15 &spi2_nss_pi0>;
	pinctrl-names = "default";
	status = "okay";
};

/* Connect solder bridges SB3, SB4 and SB5 to use CAN connector (CN21) */
&can1 {
	pinctrl-0 = <&fdcan1_rx_pa11 &fdcan1_tx_pa12>;
	pinctrl-names = "default";
	phys = <&transceiver0>;
	bus-speed = <125000>;
	bus-speed-data = <1000000>;
	sample-point = <875>;
	sample-point-data = <875>;
	status = "okay";
};

&fmc {
	pinctrl-0 = <&fmc_nbl0_pe0 &fmc_nbl1_pe1
		     &fmc_sdclk_pg8 &fmc_sdnwe_ph5 &fmc_sdcke1_ph7
		     &fmc_sdne1_ph6 &fmc_sdnras_pf11 &fmc_sdncas_pg15
		     &fmc_a0_pf0 &fmc_a1_pf1 &fmc_a2_pf2 &fmc_a3_pf3 &fmc_a4_pf4
		     &fmc_a5_pf5 &fmc_a6_pf12 &fmc_a7_pf13 &fmc_a8_pf14
		     &fmc_a9_pf15 &fmc_a10_pg0 &fmc_a11_pg1
		     &fmc_a14_pg4 &fmc_a15_pg5 &fmc_d0_pd14 &fmc_d1_pd15
		     &fmc_d2_pd0 &fmc_d3_pd1 &fmc_d4_pe7 &fmc_d5_pe8 &fmc_d6_pe9
		     &fmc_d7_pe10 &fmc_d8_pe11 &fmc_d9_pe12 &fmc_d10_pe13
		     &fmc_d11_pe14 &fmc_d12_pe15 &fmc_d13_pd8 &fmc_d14_pd9
		     &fmc_d15_pd10>;
	pinctrl-names = "default";
	status = "okay";

	sdram {
		status = "okay";
		power-up-delay = <100>;
		num-auto-refresh = <8>;
		mode-register = <0x220>;
		refresh-rate = <0x603>;
		bank@1 {
			reg = <1>;
			st,sdram-control = <STM32_FMC_SDRAM_NC_9
						STM32_FMC_SDRAM_NR_12
						STM32_FMC_SDRAM_MWID_16
						STM32_FMC_SDRAM_NB_4
						STM32_FMC_SDRAM_CAS_2
						STM32_FMC_SDRAM_SDCLK_PERIOD_3
						STM32_FMC_SDRAM_RBURST_ENABLE
						STM32_FMC_SDRAM_RPIPE_2>;
			st,sdram-timing = <2 7 4 7 2 2 2>;
		};
	};
};

&sdmmc1 {
	pinctrl-0 = <&sdmmc1_d0_pc8 &sdmmc1_d1_pc9
		     &sdmmc1_d2_pc10 &sdmmc1_d3_pc11
		     &sdmmc1_ck_pc12 &sdmmc1_cmd_pd2>;
	pinctrl-names = "default";
	cd-gpios = <&gpioi 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
	status = "okay";
};

&ltdc {
	pinctrl-0 = <&ltdc_r0_pi15 &ltdc_r1_pj0 &ltdc_r2_pj1 &ltdc_r3_pj2
		     &ltdc_r4_pj3 &ltdc_r5_pj4 &ltdc_r6_pj5 &ltdc_r7_pj6
		     &ltdc_g0_pj7 &ltdc_g1_pj8 &ltdc_g2_pj9 &ltdc_g3_pj10
		     &ltdc_g4_pj11 &ltdc_g5_pk0 &ltdc_g6_pk1 &ltdc_g7_pk2
		     &ltdc_b0_pj12 &ltdc_b1_pj13 &ltdc_b2_pj14 &ltdc_b3_pj15
		     &ltdc_b4_pk3 &ltdc_b5_pk4 &ltdc_b6_pk5 &ltdc_b7_pk6
		     &ltdc_de_pk7 &ltdc_clk_pi14 &ltdc_hsync_pi12 &ltdc_vsync_pi13>;
	pinctrl-names = "default";
	disp-on-gpios = <&gpioa 2 GPIO_ACTIVE_HIGH>;
	bl-ctrl-gpios = <&gpioa 1 GPIO_ACTIVE_HIGH>;
	ext-sdram = <&sdram2>;
	status = "okay";

	width = <480>;
	height = <272>;
	hsync-pol = <STM32_LTDC_HSPOL_ACTIVE_LOW>;
	vsync-pol = <STM32_LTDC_VSPOL_ACTIVE_LOW>;
	de-pol = <STM32_LTDC_DEPOL_ACTIVE_LOW>;
	pclk-pol = <STM32_LTDC_PCPOL_ACTIVE_LOW>;
	hsync-duration = <1>;
	vsync-duration = <10>;
	hbp-duration = <43>;
	vbp-duration = <12>;
	hfp-duration = <8>;
	vfp-duration = <4>;
	def-back-color-red = <0xFF>;
	def-back-color-green = <0xFF>;
	def-back-color-blue = <0xFF>;
};

&octospi1 {
	pinctrl-0 = <&octospim_p1_clk_pb2 &octospim_p1_ncs_pg6
		     &octospim_p1_io0_pd11 &octospim_p1_io1_pf9
		     &octospim_p1_io2_pf7 &octospim_p1_io3_pf6
		     &octospim_p1_io4_pc1 &octospim_p1_io5_ph3
		     &octospim_p1_io6_pg9 &octospim_p1_io7_pd7
		     &octospim_p1_dqs_pc5>;
	pinctrl-names = "default";

	status = "okay";

	mx25lm51245: ospi-nor-flash@0 {
		compatible = "st,stm32-ospi-nor";
		reg = <0>;
		ospi-max-frequency = <DT_FREQ_M(50)>;
		size = <DT_SIZE_M(64)>;
		spi-bus-width = <OSPI_OPI_MODE>;
		data-rate = <OSPI_DTR_TRANSFER>;
		status = "okay";
		sfdp-bfp = [
			53 46 44 50 06 01 02 ff
			00 06 01 10 30 00 00 ff
			C2 00 01 04 10 01 00 ff
			84 00 01 02 C0 00 00 ff
			00 00 00 00
		];

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

			   partition@0 {
			       label = "nor";
			       reg = <0x00000000 DT_SIZE_M(4)>;
			   };
		};
	};
};
