* [PATCH] eeprom: move nvmem EEPROM drivers to drivers/nvmem/
@ 2026-06-18 9:18 Bartosz Golaszewski
2026-06-18 18:50 ` Julian Braha
2026-06-18 21:06 ` Wolfram Sang
0 siblings, 2 replies; 3+ messages in thread
From: Bartosz Golaszewski @ 2026-06-18 9:18 UTC (permalink / raw)
To: Arnd Bergmann, Greg Kroah-Hartman, Srinivas Kandagatla,
Wolfram Sang, Andi Shyti, Bartosz Golaszewski
Cc: linux-kernel, Bartosz Golaszewski
For historical reasons EEPROM drivers have lived under
drivers/misc/eeprom/. Also for historical reasons changes to most of
them would go through the char-misc tree while some would be queued
through the I2C tree. Over the years some of them have also been
converted to using nvmem - the dedicated subsystem for non-volatile
memory - while get_maintainer.pl does not Cc the maintainer of nvmem on
patches changing them.
Move the EEPROM drivers using nvmem under drivers/nvmem/ for
consistency of the review process and path upstream.
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
---
MAINTAINERS | 4 +-
drivers/misc/eeprom/Kconfig | 93 --------------------------
drivers/misc/eeprom/Makefile | 5 --
drivers/nvmem/Kconfig | 88 ++++++++++++++++++++++++
drivers/nvmem/Makefile | 5 ++
drivers/{misc/eeprom => nvmem}/at24.c | 0
drivers/{misc/eeprom => nvmem}/at25.c | 0
drivers/{misc/eeprom => nvmem}/ee1004.c | 0
drivers/{misc/eeprom => nvmem}/eeprom_93xx46.c | 0
drivers/{misc/eeprom => nvmem}/m24lr.c | 0
10 files changed, 95 insertions(+), 100 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 069b4aa6b523c72b661418d8f37cd214a061f9af..4e53607da2eafea23b3d85b1c7fb73ddb41f348b 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4169,11 +4169,11 @@ F: include/linux/async_tx.h
AT24 EEPROM DRIVER
M: Bartosz Golaszewski <brgl@kernel.org>
-L: linux-i2c@vger.kernel.org
+L: linux-kernel@vger.kernel.org
S: Maintained
T: git git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux.git
F: Documentation/devicetree/bindings/eeprom/at24.yaml
-F: drivers/misc/eeprom/at24.c
+F: drivers/nvmem/at24.c
ATA OVER ETHERNET (AOE) DRIVER
M: "Justin Sanders" <justin@coraid.com>
diff --git a/drivers/misc/eeprom/Kconfig b/drivers/misc/eeprom/Kconfig
index 4d0ce47aa282c12dc277661cae552cca1923ec0d..d6af02588c6677997b34ceb175553480cd76d685 100644
--- a/drivers/misc/eeprom/Kconfig
+++ b/drivers/misc/eeprom/Kconfig
@@ -1,52 +1,6 @@
# 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
@@ -69,22 +23,6 @@ config EEPROM_93CX6
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
@@ -107,35 +45,4 @@ config EEPROM_IDT_89HPESX
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.
-
-config EEPROM_M24LR
- tristate "STMicroelectronics M24LR RFID/NFC EEPROM support"
- depends on I2C && SYSFS
- select REGMAP_I2C
- select NVMEM
- select NVMEM_SYSFS
- help
- This enables support for STMicroelectronics M24LR RFID/NFC EEPROM
- chips. These dual-interface devices expose two I2C addresses:
- one for EEPROM memory access and another for control and system
- configuration (e.g. UID, password handling).
-
- This driver provides a sysfs interface for control functions and
- integrates with the nvmem subsystem for EEPROM access.
-
- To compile this driver as a module, choose M here: the
- module will be called m24lr.
-
endmenu
diff --git a/drivers/misc/eeprom/Makefile b/drivers/misc/eeprom/Makefile
index 8f311fd6a4ce18bd621995811fcf3e971b0988cb..44a20cf025a1b4cb244b5c50d5542e3470b5e977 100644
--- a/drivers/misc/eeprom/Makefile
+++ b/drivers/misc/eeprom/Makefile
@@ -1,10 +1,5 @@
# SPDX-License-Identifier: GPL-2.0
-obj-$(CONFIG_EEPROM_AT24) += at24.o
-obj-$(CONFIG_EEPROM_AT25) += at25.o
obj-$(CONFIG_EEPROM_MAX6875) += max6875.o
obj-$(CONFIG_EEPROM_93CX6) += eeprom_93cx6.o
-obj-$(CONFIG_EEPROM_93XX46) += eeprom_93xx46.o
obj-$(CONFIG_EEPROM_DIGSY_MTC_CFG) += digsy_mtc_eeprom.o
obj-$(CONFIG_EEPROM_IDT_89HPESX) += idt_89hpesx.o
-obj-$(CONFIG_EEPROM_EE1004) += ee1004.o
-obj-$(CONFIG_EEPROM_M24LR) += m24lr.o
diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig
index e10f7ff725ff91b482efba4013442b8bcc8dd9da..ec9e78541742b76cfd893333c512eea35596a1cb 100644
--- a/drivers/nvmem/Kconfig
+++ b/drivers/nvmem/Kconfig
@@ -28,6 +28,94 @@ source "drivers/nvmem/layouts/Kconfig"
# Devices
+config EEPROM_AT24
+ tristate "I2C EEPROMs / RAMs / ROMs from most vendors"
+ depends on I2C && SYSFS
+ 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_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_93XX46
+ tristate "Microwire EEPROM 93XX46 support"
+ depends on SPI && SYSFS
+ select REGMAP
+ 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_EE1004
+ tristate "SPD EEPROMs on DDR4 memory modules"
+ depends on I2C && SYSFS
+ 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.
+
+config EEPROM_M24LR
+ tristate "STMicroelectronics M24LR RFID/NFC EEPROM support"
+ depends on I2C && SYSFS
+ select REGMAP_I2C
+ select NVMEM_SYSFS
+ help
+ This enables support for STMicroelectronics M24LR RFID/NFC EEPROM
+ chips. These dual-interface devices expose two I2C addresses:
+ one for EEPROM memory access and another for control and system
+ configuration (e.g. UID, password handling).
+
+ This driver provides a sysfs interface for control functions and
+ integrates with the nvmem subsystem for EEPROM access.
+
+ To compile this driver as a module, choose M here: the
+ module will be called m24lr.
+
config NVMEM_AIROHA_SMC_EFUSES
tristate "Airoha SMC eFuse support"
depends on ARCH_AIROHA || COMPILE_TEST
diff --git a/drivers/nvmem/Makefile b/drivers/nvmem/Makefile
index f6f2bc51dee19e223364de7d1e1fe4e778c75079..2bbfb9ff1885905a9e94aa3780b9c62b9871e05d 100644
--- a/drivers/nvmem/Makefile
+++ b/drivers/nvmem/Makefile
@@ -10,6 +10,11 @@ nvmem_layouts-y := layouts.o
obj-y += layouts/
# Devices
+obj-$(CONFIG_EEPROM_AT24) += at24.o
+obj-$(CONFIG_EEPROM_AT25) += at25.o
+obj-$(CONFIG_EEPROM_93XX46) += eeprom_93xx46.o
+obj-$(CONFIG_EEPROM_EE1004) += ee1004.o
+obj-$(CONFIG_EEPROM_M24LR) += m24lr.o
obj-$(CONFIG_NVMEM_AIROHA_SMC_EFUSES) += nvmem-airoha-smc-efuses.o
nvmem-airoha-smc-efuses-y := airoha-smc-efuses.o
obj-$(CONFIG_NVMEM_AN8855_EFUSE) += nvmem-an8855-efuse.o
diff --git a/drivers/misc/eeprom/at24.c b/drivers/nvmem/at24.c
similarity index 100%
rename from drivers/misc/eeprom/at24.c
rename to drivers/nvmem/at24.c
diff --git a/drivers/misc/eeprom/at25.c b/drivers/nvmem/at25.c
similarity index 100%
rename from drivers/misc/eeprom/at25.c
rename to drivers/nvmem/at25.c
diff --git a/drivers/misc/eeprom/ee1004.c b/drivers/nvmem/ee1004.c
similarity index 100%
rename from drivers/misc/eeprom/ee1004.c
rename to drivers/nvmem/ee1004.c
diff --git a/drivers/misc/eeprom/eeprom_93xx46.c b/drivers/nvmem/eeprom_93xx46.c
similarity index 100%
rename from drivers/misc/eeprom/eeprom_93xx46.c
rename to drivers/nvmem/eeprom_93xx46.c
diff --git a/drivers/misc/eeprom/m24lr.c b/drivers/nvmem/m24lr.c
similarity index 100%
rename from drivers/misc/eeprom/m24lr.c
rename to drivers/nvmem/m24lr.c
---
base-commit: 4fa3f5fabb30bf00d7475d5a33459ea83d639bf9
change-id: 20260618-eeprom-move-to-nvmem-a1b55796d9a6
Best regards,
--
Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] eeprom: move nvmem EEPROM drivers to drivers/nvmem/
2026-06-18 9:18 [PATCH] eeprom: move nvmem EEPROM drivers to drivers/nvmem/ Bartosz Golaszewski
@ 2026-06-18 18:50 ` Julian Braha
2026-06-18 21:06 ` Wolfram Sang
1 sibling, 0 replies; 3+ messages in thread
From: Julian Braha @ 2026-06-18 18:50 UTC (permalink / raw)
To: Bartosz Golaszewski, Arnd Bergmann, Greg Kroah-Hartman,
Srinivas Kandagatla, Wolfram Sang, Andi Shyti,
Bartosz Golaszewski
Cc: linux-kernel
Hi Bartosz,
On 6/18/26 10:18, Bartosz Golaszewski wrote:
> Move the EEPROM drivers using nvmem under drivers/nvmem/ for
> consistency of the review process and path upstream.
Nice!
> +config EEPROM_AT24
> + tristate "I2C EEPROMs / RAMs / ROMs from most vendors"
> + depends on I2C && SYSFS
> + 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_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_93XX46
> + tristate "Microwire EEPROM 93XX46 support"
> + depends on SPI && SYSFS
> + select REGMAP
> + 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_EE1004
> + tristate "SPD EEPROMs on DDR4 memory modules"
> + depends on I2C && SYSFS
> + 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.
> +
> +config EEPROM_M24LR
> + tristate "STMicroelectronics M24LR RFID/NFC EEPROM support"
> + depends on I2C && SYSFS
> + select REGMAP_I2C
> + select NVMEM_SYSFS
> + help
> + This enables support for STMicroelectronics M24LR RFID/NFC EEPROM
> + chips. These dual-interface devices expose two I2C addresses:
> + one for EEPROM memory access and another for control and system
> + configuration (e.g. UID, password handling).
> +
> + This driver provides a sysfs interface for control functions and
> + integrates with the nvmem subsystem for EEPROM access.
> +
> + To compile this driver as a module, choose M here: the
> + module will be called m24lr.
> +
With all of these options in one place now, it would be nice to factor
out the SYSFS dependency from each into an 'if SYSFS .. endif' around
them.
It's been mentioned on the janitors list in the past:
https://lore.kernel.org/kernel-janitors/df5ea26e-3bac-7c33-30b8-de5913ec5703@crashcourse.ca/
- Julian Braha
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] eeprom: move nvmem EEPROM drivers to drivers/nvmem/
2026-06-18 9:18 [PATCH] eeprom: move nvmem EEPROM drivers to drivers/nvmem/ Bartosz Golaszewski
2026-06-18 18:50 ` Julian Braha
@ 2026-06-18 21:06 ` Wolfram Sang
1 sibling, 0 replies; 3+ messages in thread
From: Wolfram Sang @ 2026-06-18 21:06 UTC (permalink / raw)
To: Bartosz Golaszewski
Cc: Arnd Bergmann, Greg Kroah-Hartman, Srinivas Kandagatla,
Andi Shyti, Bartosz Golaszewski, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 964 bytes --]
On Thu, Jun 18, 2026 at 11:18:27AM +0200, Bartosz Golaszewski wrote:
> For historical reasons EEPROM drivers have lived under
> drivers/misc/eeprom/. Also for historical reasons changes to most of
> them would go through the char-misc tree while some would be queued
> through the I2C tree. Over the years some of them have also been
> converted to using nvmem - the dedicated subsystem for non-volatile
> memory - while get_maintainer.pl does not Cc the maintainer of nvmem on
> patches changing them.
>
> Move the EEPROM drivers using nvmem under drivers/nvmem/ for
> consistency of the review process and path upstream.
>
> Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
I liked the idea since you first mentioned it. I think it makes way
more sense using the nvmem tree than the other trees. Although, I
happily did it for at24 all those years ;)
Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-06-18 21:06 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-18 9:18 [PATCH] eeprom: move nvmem EEPROM drivers to drivers/nvmem/ Bartosz Golaszewski
2026-06-18 18:50 ` Julian Braha
2026-06-18 21:06 ` Wolfram Sang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox