/*
 * Copyright (c) 2021 Seagate Technology LLC
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;
#include <st/f0/stm32f070Xb.dtsi>
#include <st/f0/stm32f070cbtx-pinctrl.dtsi>
#include <zephyr/dt-bindings/led/led.h>
#include <zephyr/dt-bindings/led/seagate_legend_b1414.h>

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

	aliases {
		watchdog0 = &iwdg;
	};

	board_id: brd-id {
		compatible = "gpio-keys";
		brd_id0: brd_id_0 {
			label = "BRD_ID_0";
			gpios = <&gpioc 13 0>;
		};
		brd_id1: brd_id_1 {
			label = "BRD_ID_1";
			gpios = <&gpioc 14 0>;
		};
		brd_id2: brd_id_2 {
			label = "BRD_ID_2";
			gpios = <&gpioc 15 0>;
		};
	};

};

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

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

&spi1 {
	pinctrl-0 = <&spi1_sck_pa5 &spi1_miso_pa6 &spi1_mosi_pa7>;
	pinctrl-names = "default";
	dmas = <&dma1 3 0x20440>, <&dma1 2 0x20480>;
	dma-names = "tx", "rx";
	status = "okay";

	led_strip_spi: b1414@0 {
		compatible = "everlight,b1414", "worldsemi,ws2812-spi";
		label = "B1414";

		/* SPI */
		reg = <0>; /* ignored, but necessary for SPI bindings */
		spi-max-frequency = <SPI_FREQ>;

		/* B1414 */
		spi-one-frame = <ONE_FRAME>;
		spi-zero-frame = <ZERO_FRAME>;
		color-mapping = <LED_COLOR_ID_RED>,
				<LED_COLOR_ID_GREEN>,
				<LED_COLOR_ID_BLUE>;
		reset-delay = <250>;
	};
};

&spi2 {
	pinctrl-0 = <&spi2_sck_pb13 &spi2_miso_pb14 &spi2_mosi_pb15>;
	pinctrl-names = "default";
	cs-gpios = <&gpiob 12 GPIO_ACTIVE_LOW>;
	status = "okay";

	spi_nor: spi_nor@0 {
		status = "okay";
		compatible = "jedec,spi-nor";
		reg = <0>;
		spi-max-frequency = <8000000>;
		label = "SPI_FLASH_0";
		size = <1048576>;
		/*
		 * Main flash source
		 *
		 * Vendor     : Puya
		 * Model      : P25Q21H
		 * Total size : 256 KB
		 * Erase size : whole chip, 64 and 32 KB blocks, 4 KB sectors,
		 *              256 B pages
		 * Write size : up to 256 B (page size)
		 * Lifetime   : 100K erase/program cycles on each sector/block
		 */
		jedec-id = [85 40 12];
		/*
		 * Alternate flash source
		 *
		 * Vendor     : Fudan
		 * Model      : FM25F01B
		 * Total size : 128 KB
		 * Erase size : whole chip, 64 and 32 KB blocks, 4 KB sectors
		 * Write size : up to 256 B (page size)
		 * Lifetime   : 100K erase/program cycles on each sector/block
		 *
		 * jedec-id = [a1 31 11];
		 *
		 * Model only found in first Jordan (2"5) EVT revision
		 *
		 * Vendor     : Fudan
		 * Model      : FM25F005
		 * Total size : 64 KB
		 * Erase size : whole chip, 64 and 32 KB blocks, 4 KB sectors
		 *
		 * jedec-id = [a1 31 10];
		 */
		partitions {
			compatible = "fixed-partitions";
			#address-cells = <1>;
			#size-cells = <1>;

			product_info: partition@0 {
				label = "product-info";
				reg = <0x00000000 DT_SIZE_K(4)>;
			};
			led_das: partition@10000 {
				label = "led-das";
				reg = <0x00001000 DT_SIZE_K(60)>;
			};
		};
	};
};

&spi_nor {
	status = "okay";
};

&dma1 {
	status = "okay";
};

&timers3 {
	/*
	 * The maximum period needed on Legend devices for activity LED
	 * hardware blinking is 250ms (i.e. "error" fast blink at 4 Hz).
	 *
	 * We can use the following equation to compute the
	 * corresponding prescaler value:
	 *
	 * period_max = counter_size / cycles_per_second
	 *
	 * With:
	 *
	 * cycles_per_second = 48 MHz / (prescaler + 1)
	 * counter_size = 2^16
	 * period_max = 0.25
	 *
	 * Which gives:
	 *
	 * prescaler = 48 MHz * 0.25 / 2^16 + 1 = 182
	 *
	 * So any prescaler value above 182 is good for a 4 Hz hardware
	 * blinking. In addition the PWM frequency must be as high as
	 * possible to fool eyes and cameras with steady brightness
	 * levels.
	 */
	st,prescaler = <200>;

	pwm3: pwm {
		pinctrl-0 = <&tim3_ch3_pb0>;
		pinctrl-names = "default";
		status = "disabled";
	};
};

&gpiod {
	status = "disabled";
};

&gpiof {
	status = "disabled";
};

&iwdg {
	status = "okay";
};
