/*
 * Copyright (c) 2021 Thomas Stranger
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <freq.h>
#include <mem.h>

/ {
	aliases {
		eeprom-0 = &eeprom0_x_nucleo_eeprma2;
		eeprom-1 = &eeprom4_x_nucleo_eeprma2;
	};
};

&arduino_i2c {
	status = "okay";
	clock-frequency = <I2C_BITRATE_FAST>;

	eeprom0_x_nucleo_eeprma2: eeprom@54 {
		/* M24C02-FMC6TG aka U1 (2 kbit eeprom in DFN8 package) */
		compatible = "st,m24xxx", "atmel,at24";
		reg = <0x54>;
		size = <256>;
		pagesize = <16>;
		address-width = <8>;
		timeout = <5>;

		/* if solder-bridge closed: arduino A1 pin on CN8 can wp */
		/* wp-gpios = <&arduino_header 1 GPIO_ACTIVE_LOW>; */
	};

	eeprom1_x_nucleo_eeprma2: eeprom@55 {
		/* M24256-DFDW6TP aka U2 (256 kbit eeprom in TSSOP package) */
		compatible = "st,m24xxx", "atmel,at24";
		reg = <0x55>;
		size = <DT_SIZE_K(32)>;
		pagesize = <64>;
		address-width = <16>;
		timeout = <5>;

		/* if solder-bridge closed: arduino A1 pin on CN8 can wp */
		/* wp-gpios = <&arduino_header 1 GPIO_ACTIVE_LOW>; */
	};

	eeprom2_x_nucleo_eeprma2: eeprom@56 {
		/* M24M01-DFMN6TP aka U3 (1 Mbit eeprom in SO8N package) */
		compatible = "st,m24xxx", "atmel,at24";
		reg = <0x56>;
		size = <DT_SIZE_K(128)>;
		pagesize = <256>;
		address-width = <16>;
		timeout = <5>;

		/* if solder-bridge closed: arduino A1 pin on CN8 can wp */
		/* wp-gpios = <&arduino_header 1 GPIO_ACTIVE_LOW>; */
	};

	/* U4: unpopulated SO8N footprint for any I2C M24 EEPROM */
};

&arduino_spi {
	status = "okay";
	cs-gpios = <&arduino_header  8 GPIO_ACTIVE_LOW>, /* U5: eeprom4 */
		   <&arduino_header 15 GPIO_ACTIVE_LOW>, /* U6: eeprom5 */
		   <&arduino_header 16 GPIO_ACTIVE_LOW>; /* U7: eeprom6 */

	/*
	 * All chip select pins have an on board 10k pull-up resistor to VCC,
	 * and are connected to their respective arduino pins via a normally
	 * closed solder bridge.
	 *
	 * All hold pins are connected to VCC with a 10k pull-up, and
	 * have a connection to arduino pin A3 on CN8 via an open solder bridge.
	 *
	 * All write-protect pins are connected to J11 with a 10k pull-up
	 * resistor. Where they can either be torn to VCC or GND.
	 * Additionally they are connected to arduino pin A0 on CN8
	 * via an open solder bridge.
	 */

	eeprom4_x_nucleo_eeprma2: eeprom_m95040@0 {
		/* M95040-RMC6TG aka U5 (4 kbit eeprom in DFN8 package) */
		compatible = "st,m95xxx", "atmel,at25";
		reg = <0x00>;
		size = <512>;
		pagesize = <16>;
		address-width = <8>;
		spi-max-frequency = <DT_FREQ_M(20)>;
		timeout = <5>;

		/* if solder-bridge closed: arduino A0 pin on CN8 can wp */
		/* wp-gpios = <&arduino_header 0 GPIO_ACTIVE_LOW>; */
	};

	eeprom5_x_nucleo_eeprma2: eeprom_m95256@1 {
		/* M95256-DFDW6TP aka U6 (256 kbit eeprom in TSSOP package) */
		compatible = "st,m95xxx", "atmel,at25";
		reg = <0x01>;
		size = <DT_SIZE_K(32)>;
		pagesize = <64>;
		address-width = <16>;
		spi-max-frequency = <DT_FREQ_M(20)>;
		timeout = <5>;

		/* if solder-bridge closed: arduino A0 pin on CN8 can wp */
		/* wp-gpios = <&arduino_header 0 GPIO_ACTIVE_LOW>; */
	};

	eeprom6_x_nucleo_eeprma2: eeprom_m95m04@2 {
		/* M95M04-DRMN6TP aka U7 (4 Mbit eeprom in SON8 package) */
		compatible = "st,m95xxx", "atmel,at25";
		reg = <0x02>;
		size = <DT_SIZE_K(512)>;
		pagesize = <512>;
		address-width = <24>;
		/* max-frequency 10MHz for vcc>=2.5V and 5MHz for vcc>=1.8V */
		spi-max-frequency = <DT_FREQ_M(10)>;
		timeout = <5>;

		/* if solder-bridge closed: arduino A0 pin on CN8 can wp */
		/* wp-gpios = <&arduino_header 0 GPIO_ACTIVE_LOW>; */
	};

	/* U8: unpopulated SO8N footprint for any M95 SPI EEPROM */
};
