# 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_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 from most vendors"
	depends on SPI && SYSFS
	select NVMEM
	select NVMEM_SYSFS
	help
	  Enable this driver to get read/write support to most SPI EEPROMs,
	  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_LEGACY
	tristate "Old I2C EEPROM reader (DEPRECATED)"
	depends on I2C && SYSFS
	help
	  If you say yes here you get read-only access to the EEPROM data
	  available on modern memory DIMMs and Sony Vaio laptops via I2C. Such
	  EEPROMs could theoretically be available on other devices as well.

	  This driver is deprecated and will be removed soon, please use the
	  better at24 driver instead.

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

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-swtiches EEPROM / CSR support"
	depends on I2C && SYSFS
	help
	  Enable this driver to get read/write access to EEPROM / CSRs
	  over IDT PCIe-swtich 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
	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
