# 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 (FRAMs) 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
	  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_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
