# SPDX-License-Identifier: GPL-2.0-only
menu "EEPROM support"

config EEPROM_AT24
	tristate "I2C EEPROMs / RAMs / ROMs from most vendors"
	depends on I2C && SYSFS
	select NVMEM
	select NVMEM_SYSFS
	select REGMAP
	select REGMAP_I2C
	help
	  Enable this driver to get read/write support to most I2C EEPROMs
	  and compatible devices like FRAMs, SRAMs, ROMs etc. After you
	  configure the driver to know about each chip on your target
	  board.  Use these generic chip names, instead of vendor-specific
	  ones like at24c64, 24lc02 or fm24c04:

	     24c00, 24c01, 24c02, spd (readonly 24c02), 24c04, 24c08,
	     24c16, 24c32, 24c64, 24c128, 24c256, 24c512, 24c1024, 24c2048

	  Unless you like data loss puzzles, always be sure that any chip
	  you configure as a 24c32 (32 kbit) or larger is NOT really a
	  24c16 (16 kbit) or smaller, and vice versa. Marking the chip
	  as read-only won't help recover from this. Also, if your chip
	  has any software write-protect mechanism you may want to review the
	  code to make sure this driver won't turn it on by accident.

	  If you use this with an SMBus adapter instead of an I2C adapter,
	  full functionality is not available.  Only smaller devices are
	  supported (24c16 and below, max 4 kByte).

	  This driver can also be built as a module.  If so, the module
	  will be called at24.

config EEPROM_AT25
	tristate "SPI EEPROMs (FRAMs) from most vendors"
	depends on SPI && SYSFS
	select NVMEM
	select NVMEM_SYSFS
	select SPI_MEM
	help
	  Enable this driver to get read/write support to most SPI EEPROMs
	  and Cypress FRAMs,
	  after you configure the board init code to know about each eeprom
	  on your target board.

	  This driver can also be built as a module.  If so, the module
	  will be called at25.

config EEPROM_MAX6875
	tristate "Maxim MAX6874/5 power supply supervisor"
	depends on I2C
	help
	  If you say yes here you get read-only support for the user EEPROM of
	  the Maxim MAX6874/5 EEPROM-programmable, quad power-supply
	  sequencer/supervisor.

	  All other features of this chip should be accessed via i2c-dev.

	  This driver can also be built as a module.  If so, the module
	  will be called max6875.


config EEPROM_93CX6
	tristate "EEPROM 93CX6 support"
	help
	  This is a driver for the EEPROM chipsets 93c46 and 93c66.
	  The driver supports both read as well as write commands.

	  If unsure, say N.

config EEPROM_93XX46
	tristate "Microwire EEPROM 93XX46 support"
	depends on SPI && SYSFS
	select REGMAP
	select NVMEM
	select NVMEM_SYSFS
	help
	  Driver for the microwire EEPROM chipsets 93xx46x. The driver
	  supports both read and write commands and also the command to
	  erase the whole EEPROM.

	  This driver can also be built as a module.  If so, the module
	  will be called eeprom_93xx46.

	  If unsure, say N.

config EEPROM_DIGSY_MTC_CFG
	bool "DigsyMTC display configuration EEPROMs device"
	depends on GPIO_MPC5200 && SPI_GPIO
	help
	  This option enables access to display configuration EEPROMs
	  on digsy_mtc board. You have to additionally select Microwire
	  EEPROM 93XX46 driver. sysfs entries will be created for that
	  EEPROM allowing to read/write the configuration data or to
	  erase the whole EEPROM.

	  If unsure, say N.

config EEPROM_IDT_89HPESX
	tristate "IDT 89HPESx PCIe-switches EEPROM / CSR support"
	depends on I2C && SYSFS
	help
	  Enable this driver to get read/write access to EEPROM / CSRs
	  over IDT PCIe-switch i2c-slave interface.

	  This driver can also be built as a module. If so, the module
	  will be called idt_89hpesx.

config EEPROM_EE1004
	tristate "SPD EEPROMs on DDR4 memory modules"
	depends on I2C && SYSFS
	select NVMEM
	select NVMEM_SYSFS
	help
	  Enable this driver to get read support to SPD EEPROMs following
	  the JEDEC EE1004 standard. These are typically found on DDR4
	  SDRAM memory modules.

	  This driver can also be built as a module.  If so, the module
	  will be called ee1004.

endmenu
