Linux Framebuffer Layer development
 help / color / mirror / Atom feed
* [PATCH 08/14] mfd: remove unused aat2870 driver
  2026-09-09 13:21 [PATCH 00/14] mfd: unused driver purge Arnd Bergmann
@ 2026-09-09 13:21 ` Arnd Bergmann
  0 siblings, 0 replies; 7+ messages in thread
From: Arnd Bergmann @ 2026-09-09 13:21 UTC (permalink / raw)
  To: Lee Jones, mfd
  Cc: linux-kernel, linux-arm-kernel, Arnd Bergmann, Daniel Thompson,
	Jingoo Han, Mauro Carvalho Chehab, Liam Girdwood, Mark Brown,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Guenter Roeck,
	Linus Walleij, Bartosz Golaszewski, Jonathan Cameron,
	Dmitry Torokhov, Pavel Machek, Michael Hennerich,
	Support Opensource, Sebastian Reichel, Alexandre Belloni,
	Helge Deller, dri-devel, linux-doc, linux-media, devicetree,
	linux-hwmon, patches, linux-watchdog, linux-gpio, linux-iio,
	linux-input, linux-leds, linux-pm, linux-rtc, linux-fbdev,
	linux-sound, linuxppc-dev, llvm

From: Arnd Bergmann <arnd@arndb.de>

This driver was apparently never used, as it has has no devicetree
support and never had corresponding platform_data definitions.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 drivers/mfd/Kconfig                   |  12 -
 drivers/mfd/Makefile                  |   1 -
 drivers/mfd/aat2870-core.c            | 458 --------------------------
 drivers/regulator/Kconfig             |   7 -
 drivers/regulator/Makefile            |   1 -
 drivers/regulator/aat2870-regulator.c | 201 -----------
 drivers/video/backlight/Kconfig       |   7 -
 drivers/video/backlight/Makefile      |   1 -
 drivers/video/backlight/aat2870_bl.c  | 206 ------------
 include/linux/mfd/aat2870.h           | 164 ---------
 10 files changed, 1058 deletions(-)
 delete mode 100644 drivers/mfd/aat2870-core.c
 delete mode 100644 drivers/regulator/aat2870-regulator.c
 delete mode 100644 drivers/video/backlight/aat2870_bl.c
 delete mode 100644 include/linux/mfd/aat2870.h

diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index 09e400e1f4b0..b0c7df448445 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -115,18 +115,6 @@ config MFD_AS3722
 	  controllers, 11 LDOs, RTC, automatic battery, temperature and
 	  over current monitoring, GPIOs, ADC and a watchdog.
 
-config MFD_AAT2870_CORE
-	bool "AnalogicTech AAT2870"
-	select MFD_CORE
-	depends on I2C=y
-	depends on GPIOLIB || COMPILE_TEST
-	depends on GPIOLIB_LEGACY
-	help
-	  If you say yes here you get support for the AAT2870.
-	  This driver provides common support for accessing the device,
-	  additional drivers must be enabled in order to use the
-	  functionality of the device.
-
 config MFD_AT91_USART
 	tristate "AT91 USART Driver"
 	select MFD_CORE
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index e3fe998c3513..cf3c70364538 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -206,7 +206,6 @@ obj-$(CONFIG_MFD_QCOM_RPM)	+= qcom_rpm.o
 obj-$(CONFIG_MFD_SPMI_PMIC)	+= qcom-spmi-pmic.o
 obj-$(CONFIG_TPS65911_COMPARATOR)	+= tps65911-comparator.o
 obj-$(CONFIG_MFD_TPS65090)	+= tps65090.o
-obj-$(CONFIG_MFD_AAT2870_CORE)	+= aat2870-core.o
 obj-$(CONFIG_MFD_AT91_USART)	+= at91-usart.o
 obj-$(CONFIG_MFD_ATMEL_FLEXCOM)	+= atmel-flexcom.o
 obj-$(CONFIG_MFD_ATMEL_HLCDC)	+= atmel-hlcdc.o
diff --git a/drivers/mfd/aat2870-core.c b/drivers/mfd/aat2870-core.c
deleted file mode 100644
index 0d56cd6fbc6a..000000000000
--- a/drivers/mfd/aat2870-core.c
+++ /dev/null
@@ -1,458 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * linux/drivers/mfd/aat2870-core.c
- *
- * Copyright (c) 2011, NVIDIA Corporation.
- * Author: Jin Park <jinyoungp@nvidia.com>
- */
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/debugfs.h>
-#include <linux/slab.h>
-#include <linux/uaccess.h>
-#include <linux/i2c.h>
-#include <linux/delay.h>
-#include <linux/gpio/legacy.h>
-#include <linux/mfd/core.h>
-#include <linux/mfd/aat2870.h>
-#include <linux/regulator/machine.h>
-
-static struct aat2870_register aat2870_regs[AAT2870_REG_NUM] = {
-	/* readable, writeable, value */
-	{ 0, 1, 0x00 },	/* 0x00 AAT2870_BL_CH_EN */
-	{ 0, 1, 0x16 },	/* 0x01 AAT2870_BLM */
-	{ 0, 1, 0x16 },	/* 0x02 AAT2870_BLS */
-	{ 0, 1, 0x56 },	/* 0x03 AAT2870_BL1 */
-	{ 0, 1, 0x56 },	/* 0x04 AAT2870_BL2 */
-	{ 0, 1, 0x56 },	/* 0x05 AAT2870_BL3 */
-	{ 0, 1, 0x56 },	/* 0x06 AAT2870_BL4 */
-	{ 0, 1, 0x56 },	/* 0x07 AAT2870_BL5 */
-	{ 0, 1, 0x56 },	/* 0x08 AAT2870_BL6 */
-	{ 0, 1, 0x56 },	/* 0x09 AAT2870_BL7 */
-	{ 0, 1, 0x56 },	/* 0x0A AAT2870_BL8 */
-	{ 0, 1, 0x00 },	/* 0x0B AAT2870_FLR */
-	{ 0, 1, 0x03 },	/* 0x0C AAT2870_FM */
-	{ 0, 1, 0x03 },	/* 0x0D AAT2870_FS */
-	{ 0, 1, 0x10 },	/* 0x0E AAT2870_ALS_CFG0 */
-	{ 0, 1, 0x06 },	/* 0x0F AAT2870_ALS_CFG1 */
-	{ 0, 1, 0x00 },	/* 0x10 AAT2870_ALS_CFG2 */
-	{ 1, 0, 0x00 },	/* 0x11 AAT2870_AMB */
-	{ 0, 1, 0x00 },	/* 0x12 AAT2870_ALS0 */
-	{ 0, 1, 0x00 },	/* 0x13 AAT2870_ALS1 */
-	{ 0, 1, 0x00 },	/* 0x14 AAT2870_ALS2 */
-	{ 0, 1, 0x00 },	/* 0x15 AAT2870_ALS3 */
-	{ 0, 1, 0x00 },	/* 0x16 AAT2870_ALS4 */
-	{ 0, 1, 0x00 },	/* 0x17 AAT2870_ALS5 */
-	{ 0, 1, 0x00 },	/* 0x18 AAT2870_ALS6 */
-	{ 0, 1, 0x00 },	/* 0x19 AAT2870_ALS7 */
-	{ 0, 1, 0x00 },	/* 0x1A AAT2870_ALS8 */
-	{ 0, 1, 0x00 },	/* 0x1B AAT2870_ALS9 */
-	{ 0, 1, 0x00 },	/* 0x1C AAT2870_ALSA */
-	{ 0, 1, 0x00 },	/* 0x1D AAT2870_ALSB */
-	{ 0, 1, 0x00 },	/* 0x1E AAT2870_ALSC */
-	{ 0, 1, 0x00 },	/* 0x1F AAT2870_ALSD */
-	{ 0, 1, 0x00 },	/* 0x20 AAT2870_ALSE */
-	{ 0, 1, 0x00 },	/* 0x21 AAT2870_ALSF */
-	{ 0, 1, 0x00 },	/* 0x22 AAT2870_SUB_SET */
-	{ 0, 1, 0x00 },	/* 0x23 AAT2870_SUB_CTRL */
-	{ 0, 1, 0x00 },	/* 0x24 AAT2870_LDO_AB */
-	{ 0, 1, 0x00 },	/* 0x25 AAT2870_LDO_CD */
-	{ 0, 1, 0x00 },	/* 0x26 AAT2870_LDO_EN */
-};
-
-static struct mfd_cell aat2870_devs[] = {
-	{
-		.name = "aat2870-backlight",
-		.id = AAT2870_ID_BL,
-		.pdata_size = sizeof(struct aat2870_bl_platform_data),
-	},
-	{
-		.name = "aat2870-regulator",
-		.id = AAT2870_ID_LDOA,
-		.pdata_size = sizeof(struct regulator_init_data),
-	},
-	{
-		.name = "aat2870-regulator",
-		.id = AAT2870_ID_LDOB,
-		.pdata_size = sizeof(struct regulator_init_data),
-	},
-	{
-		.name = "aat2870-regulator",
-		.id = AAT2870_ID_LDOC,
-		.pdata_size = sizeof(struct regulator_init_data),
-	},
-	{
-		.name = "aat2870-regulator",
-		.id = AAT2870_ID_LDOD,
-		.pdata_size = sizeof(struct regulator_init_data),
-	},
-};
-
-static int __aat2870_read(struct aat2870_data *aat2870, u8 addr, u8 *val)
-{
-	int ret;
-
-	if (addr >= AAT2870_REG_NUM) {
-		dev_err(aat2870->dev, "Invalid address, 0x%02x\n", addr);
-		return -EINVAL;
-	}
-
-	if (!aat2870->reg_cache[addr].readable) {
-		*val = aat2870->reg_cache[addr].value;
-		goto out;
-	}
-
-	ret = i2c_master_send(aat2870->client, &addr, 1);
-	if (ret < 0)
-		return ret;
-	if (ret != 1)
-		return -EIO;
-
-	ret = i2c_master_recv(aat2870->client, val, 1);
-	if (ret < 0)
-		return ret;
-	if (ret != 1)
-		return -EIO;
-
-out:
-	dev_dbg(aat2870->dev, "read: addr=0x%02x, val=0x%02x\n", addr, *val);
-	return 0;
-}
-
-static int __aat2870_write(struct aat2870_data *aat2870, u8 addr, u8 val)
-{
-	u8 msg[2];
-	int ret;
-
-	if (addr >= AAT2870_REG_NUM) {
-		dev_err(aat2870->dev, "Invalid address, 0x%02x\n", addr);
-		return -EINVAL;
-	}
-
-	if (!aat2870->reg_cache[addr].writeable) {
-		dev_err(aat2870->dev, "Address 0x%02x is not writeable\n",
-			addr);
-		return -EINVAL;
-	}
-
-	msg[0] = addr;
-	msg[1] = val;
-	ret = i2c_master_send(aat2870->client, msg, 2);
-	if (ret < 0)
-		return ret;
-	if (ret != 2)
-		return -EIO;
-
-	aat2870->reg_cache[addr].value = val;
-
-	dev_dbg(aat2870->dev, "write: addr=0x%02x, val=0x%02x\n", addr, val);
-	return 0;
-}
-
-static int aat2870_read(struct aat2870_data *aat2870, u8 addr, u8 *val)
-{
-	int ret;
-
-	mutex_lock(&aat2870->io_lock);
-	ret = __aat2870_read(aat2870, addr, val);
-	mutex_unlock(&aat2870->io_lock);
-
-	return ret;
-}
-
-static int aat2870_write(struct aat2870_data *aat2870, u8 addr, u8 val)
-{
-	int ret;
-
-	mutex_lock(&aat2870->io_lock);
-	ret = __aat2870_write(aat2870, addr, val);
-	mutex_unlock(&aat2870->io_lock);
-
-	return ret;
-}
-
-static int aat2870_update(struct aat2870_data *aat2870, u8 addr, u8 mask,
-			  u8 val)
-{
-	int change;
-	u8 old_val, new_val;
-	int ret;
-
-	mutex_lock(&aat2870->io_lock);
-
-	ret = __aat2870_read(aat2870, addr, &old_val);
-	if (ret)
-		goto out_unlock;
-
-	new_val = (old_val & ~mask) | (val & mask);
-	change = old_val != new_val;
-	if (change)
-		ret = __aat2870_write(aat2870, addr, new_val);
-
-out_unlock:
-	mutex_unlock(&aat2870->io_lock);
-
-	return ret;
-}
-
-static inline void aat2870_enable(struct aat2870_data *aat2870)
-{
-	if (aat2870->en_pin >= 0)
-		gpio_set_value(aat2870->en_pin, 1);
-
-	aat2870->is_enable = 1;
-}
-
-static inline void aat2870_disable(struct aat2870_data *aat2870)
-{
-	if (aat2870->en_pin >= 0)
-		gpio_set_value(aat2870->en_pin, 0);
-
-	aat2870->is_enable = 0;
-}
-
-#ifdef CONFIG_DEBUG_FS
-static ssize_t aat2870_dump_reg(struct aat2870_data *aat2870, char *buf)
-{
-	u8 addr, val;
-	ssize_t count = 0;
-	int ret;
-
-	count += sprintf(buf, "aat2870 registers\n");
-	for (addr = 0; addr < AAT2870_REG_NUM; addr++) {
-		count += snprintf(buf + count, PAGE_SIZE - count, "0x%02x: ", addr);
-		if (count >= PAGE_SIZE - 1)
-			break;
-
-		ret = aat2870->read(aat2870, addr, &val);
-		if (ret == 0)
-			count += snprintf(buf + count, PAGE_SIZE - count,
-					  "0x%02x", val);
-		else
-			count += snprintf(buf + count, PAGE_SIZE - count,
-					  "<read fail: %d>", ret);
-
-		if (count >= PAGE_SIZE - 1)
-			break;
-
-		count += snprintf(buf + count, PAGE_SIZE - count, "\n");
-		if (count >= PAGE_SIZE - 1)
-			break;
-	}
-
-	/* Truncate count; min() would cause a warning */
-	if (count >= PAGE_SIZE)
-		count = PAGE_SIZE - 1;
-
-	return count;
-}
-
-static ssize_t aat2870_reg_read_file(struct file *file, char __user *user_buf,
-				     size_t count, loff_t *ppos)
-{
-	struct aat2870_data *aat2870 = file->private_data;
-	char *buf;
-	ssize_t ret;
-
-	buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
-	if (!buf)
-		return -ENOMEM;
-
-	ret = aat2870_dump_reg(aat2870, buf);
-	if (ret >= 0)
-		ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret);
-
-	kfree(buf);
-
-	return ret;
-}
-
-static ssize_t aat2870_reg_write_file(struct file *file,
-				      const char __user *user_buf, size_t count,
-				      loff_t *ppos)
-{
-	struct aat2870_data *aat2870 = file->private_data;
-	char buf[32];
-	ssize_t buf_size;
-	char *start = buf;
-	unsigned long addr, val;
-	int ret;
-
-	buf_size = min(count, (size_t)(sizeof(buf)-1));
-	if (copy_from_user(buf, user_buf, buf_size)) {
-		dev_err(aat2870->dev, "Failed to copy from user\n");
-		return -EFAULT;
-	}
-	buf[buf_size] = 0;
-
-	while (*start == ' ')
-		start++;
-
-	ret = kstrtoul(start, 16, &addr);
-	if (ret)
-		return ret;
-
-	if (addr >= AAT2870_REG_NUM) {
-		dev_err(aat2870->dev, "Invalid address, 0x%lx\n", addr);
-		return -EINVAL;
-	}
-
-	while (*start == ' ')
-		start++;
-
-	ret = kstrtoul(start, 16, &val);
-	if (ret)
-		return ret;
-
-	ret = aat2870->write(aat2870, (u8)addr, (u8)val);
-	if (ret)
-		return ret;
-
-	return buf_size;
-}
-
-static const struct file_operations aat2870_reg_fops = {
-	.open = simple_open,
-	.read = aat2870_reg_read_file,
-	.write = aat2870_reg_write_file,
-};
-
-static void aat2870_init_debugfs(struct aat2870_data *aat2870)
-{
-	debugfs_create_file("regs", 0644, aat2870->client->debugfs, aat2870,
-			    &aat2870_reg_fops);
-}
-
-#else
-static inline void aat2870_init_debugfs(struct aat2870_data *aat2870)
-{
-}
-#endif /* CONFIG_DEBUG_FS */
-
-static int aat2870_i2c_probe(struct i2c_client *client)
-{
-	struct aat2870_platform_data *pdata = dev_get_platdata(&client->dev);
-	struct aat2870_data *aat2870;
-	int i, j;
-	int ret = 0;
-
-	aat2870 = devm_kzalloc(&client->dev, sizeof(struct aat2870_data),
-				GFP_KERNEL);
-	if (!aat2870)
-		return -ENOMEM;
-
-	aat2870->dev = &client->dev;
-	aat2870->client = client;
-	i2c_set_clientdata(client, aat2870);
-
-	aat2870->reg_cache = aat2870_regs;
-
-	if (pdata->en_pin < 0)
-		aat2870->en_pin = -1;
-	else
-		aat2870->en_pin = pdata->en_pin;
-
-	aat2870->init = pdata->init;
-	aat2870->uninit = pdata->uninit;
-	aat2870->read = aat2870_read;
-	aat2870->write = aat2870_write;
-	aat2870->update = aat2870_update;
-
-	mutex_init(&aat2870->io_lock);
-
-	if (aat2870->init)
-		aat2870->init(aat2870);
-
-	if (aat2870->en_pin >= 0) {
-		ret = devm_gpio_request_one(&client->dev, aat2870->en_pin,
-					GPIOF_OUT_INIT_HIGH, "aat2870-en");
-		if (ret < 0) {
-			dev_err(&client->dev,
-				"Failed to request GPIO %d\n", aat2870->en_pin);
-			return ret;
-		}
-	}
-
-	aat2870_enable(aat2870);
-
-	for (i = 0; i < pdata->num_subdevs; i++) {
-		for (j = 0; j < ARRAY_SIZE(aat2870_devs); j++) {
-			if ((pdata->subdevs[i].id == aat2870_devs[j].id) &&
-					!strcmp(pdata->subdevs[i].name,
-						aat2870_devs[j].name)) {
-				aat2870_devs[j].platform_data =
-					pdata->subdevs[i].platform_data;
-				break;
-			}
-		}
-	}
-
-	ret = mfd_add_devices(aat2870->dev, 0, aat2870_devs,
-			      ARRAY_SIZE(aat2870_devs), NULL, 0, NULL);
-	if (ret != 0) {
-		dev_err(aat2870->dev, "Failed to add subdev: %d\n", ret);
-		goto out_disable;
-	}
-
-	aat2870_init_debugfs(aat2870);
-
-	return 0;
-
-out_disable:
-	aat2870_disable(aat2870);
-	return ret;
-}
-
-static int aat2870_i2c_suspend(struct device *dev)
-{
-	struct i2c_client *client = to_i2c_client(dev);
-	struct aat2870_data *aat2870 = i2c_get_clientdata(client);
-
-	aat2870_disable(aat2870);
-
-	return 0;
-}
-
-static int aat2870_i2c_resume(struct device *dev)
-{
-	struct i2c_client *client = to_i2c_client(dev);
-	struct aat2870_data *aat2870 = i2c_get_clientdata(client);
-	struct aat2870_register *reg = NULL;
-	int i;
-
-	aat2870_enable(aat2870);
-
-	/* restore registers */
-	for (i = 0; i < AAT2870_REG_NUM; i++) {
-		reg = &aat2870->reg_cache[i];
-		if (reg->writeable)
-			aat2870->write(aat2870, i, reg->value);
-	}
-
-	return 0;
-}
-
-static DEFINE_SIMPLE_DEV_PM_OPS(aat2870_pm_ops, aat2870_i2c_suspend,
-				aat2870_i2c_resume);
-
-static const struct i2c_device_id aat2870_i2c_id_table[] = {
-	{ "aat2870" },
-	{ }
-};
-
-static struct i2c_driver aat2870_i2c_driver = {
-	.driver = {
-		.name			= "aat2870",
-		.pm			= pm_sleep_ptr(&aat2870_pm_ops),
-		.suppress_bind_attrs	= true,
-	},
-	.probe		= aat2870_i2c_probe,
-	.id_table	= aat2870_i2c_id_table,
-};
-
-static int __init aat2870_init(void)
-{
-	return i2c_add_driver(&aat2870_i2c_driver);
-}
-subsys_initcall(aat2870_init);
diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig
index 4b90d1cb045c..12d883e729bc 100644
--- a/drivers/regulator/Kconfig
+++ b/drivers/regulator/Kconfig
@@ -132,13 +132,6 @@ config REGULATOR_ANATOP
 	  regulators. It is recommended that this option be
 	  enabled on i.MX6 platform.
 
-config REGULATOR_AAT2870
-	tristate "AnalogicTech AAT2870 Regulators"
-	depends on MFD_AAT2870_CORE
-	help
-	  If you have a AnalogicTech AAT2870 say Y to enable the
-	  regulator driver.
-
 config REGULATOR_AB8500
 	bool "ST-Ericsson AB8500 Power Regulators"
 	depends on AB8500_CORE
diff --git a/drivers/regulator/Makefile b/drivers/regulator/Makefile
index fe0f099c217b..321c6ea73ee0 100644
--- a/drivers/regulator/Makefile
+++ b/drivers/regulator/Makefile
@@ -16,7 +16,6 @@ obj-$(CONFIG_REGULATOR_88PM8607) += 88pm8607.o
 obj-$(CONFIG_REGULATOR_88PM886) += 88pm886-regulator.o
 obj-$(CONFIG_REGULATOR_CROS_EC) += cros-ec-regulator.o
 obj-$(CONFIG_REGULATOR_CPCAP) += cpcap-regulator.o
-obj-$(CONFIG_REGULATOR_AAT2870) += aat2870-regulator.o
 obj-$(CONFIG_REGULATOR_AB8500)	+= ab8500-ext.o ab8500.o
 obj-$(CONFIG_REGULATOR_ACT8865) += act8865-regulator.o
 obj-$(CONFIG_REGULATOR_ACT8945A) += act8945a-regulator.o
diff --git a/drivers/regulator/aat2870-regulator.c b/drivers/regulator/aat2870-regulator.c
deleted file mode 100644
index 970d86f2bbb8..000000000000
--- a/drivers/regulator/aat2870-regulator.c
+++ /dev/null
@@ -1,201 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * linux/drivers/regulator/aat2870-regulator.c
- *
- * Copyright (c) 2011, NVIDIA Corporation.
- * Author: Jin Park <jinyoungp@nvidia.com>
- */
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/err.h>
-#include <linux/module.h>
-#include <linux/slab.h>
-#include <linux/platform_device.h>
-#include <linux/regulator/driver.h>
-#include <linux/regulator/machine.h>
-#include <linux/mfd/aat2870.h>
-
-struct aat2870_regulator {
-	struct aat2870_data *aat2870;
-	struct regulator_desc desc;
-
-	u8 enable_addr;
-	u8 enable_shift;
-	u8 enable_mask;
-
-	u8 voltage_addr;
-	u8 voltage_shift;
-	u8 voltage_mask;
-};
-
-static int aat2870_ldo_set_voltage_sel(struct regulator_dev *rdev,
-				       unsigned selector)
-{
-	struct aat2870_regulator *ri = rdev_get_drvdata(rdev);
-	struct aat2870_data *aat2870 = ri->aat2870;
-
-	return aat2870->update(aat2870, ri->voltage_addr, ri->voltage_mask,
-			       selector << ri->voltage_shift);
-}
-
-static int aat2870_ldo_get_voltage_sel(struct regulator_dev *rdev)
-{
-	struct aat2870_regulator *ri = rdev_get_drvdata(rdev);
-	struct aat2870_data *aat2870 = ri->aat2870;
-	u8 val;
-	int ret;
-
-	ret = aat2870->read(aat2870, ri->voltage_addr, &val);
-	if (ret)
-		return ret;
-
-	return (val & ri->voltage_mask) >> ri->voltage_shift;
-}
-
-static int aat2870_ldo_enable(struct regulator_dev *rdev)
-{
-	struct aat2870_regulator *ri = rdev_get_drvdata(rdev);
-	struct aat2870_data *aat2870 = ri->aat2870;
-
-	return aat2870->update(aat2870, ri->enable_addr, ri->enable_mask,
-			       ri->enable_mask);
-}
-
-static int aat2870_ldo_disable(struct regulator_dev *rdev)
-{
-	struct aat2870_regulator *ri = rdev_get_drvdata(rdev);
-	struct aat2870_data *aat2870 = ri->aat2870;
-
-	return aat2870->update(aat2870, ri->enable_addr, ri->enable_mask, 0);
-}
-
-static int aat2870_ldo_is_enabled(struct regulator_dev *rdev)
-{
-	struct aat2870_regulator *ri = rdev_get_drvdata(rdev);
-	struct aat2870_data *aat2870 = ri->aat2870;
-	u8 val;
-	int ret;
-
-	ret = aat2870->read(aat2870, ri->enable_addr, &val);
-	if (ret)
-		return ret;
-
-	return val & ri->enable_mask ? 1 : 0;
-}
-
-static const struct regulator_ops aat2870_ldo_ops = {
-	.list_voltage = regulator_list_voltage_table,
-	.map_voltage = regulator_map_voltage_ascend,
-	.set_voltage_sel = aat2870_ldo_set_voltage_sel,
-	.get_voltage_sel = aat2870_ldo_get_voltage_sel,
-	.enable = aat2870_ldo_enable,
-	.disable = aat2870_ldo_disable,
-	.is_enabled = aat2870_ldo_is_enabled,
-};
-
-static const unsigned int aat2870_ldo_voltages[] = {
-	1200000, 1300000, 1500000, 1600000,
-	1800000, 2000000, 2200000, 2500000,
-	2600000, 2700000, 2800000, 2900000,
-	3000000, 3100000, 3200000, 3300000,
-};
-
-#define AAT2870_LDO(ids)				\
-	{						\
-		.desc = {				\
-			.name = #ids,			\
-			.id = AAT2870_ID_##ids,		\
-			.n_voltages = ARRAY_SIZE(aat2870_ldo_voltages),	\
-			.volt_table = aat2870_ldo_voltages, \
-			.ops = &aat2870_ldo_ops,	\
-			.type = REGULATOR_VOLTAGE,	\
-			.owner = THIS_MODULE,		\
-		},					\
-	}
-
-static struct aat2870_regulator aat2870_regulators[] = {
-	AAT2870_LDO(LDOA),
-	AAT2870_LDO(LDOB),
-	AAT2870_LDO(LDOC),
-	AAT2870_LDO(LDOD),
-};
-
-static struct aat2870_regulator *aat2870_get_regulator(int id)
-{
-	struct aat2870_regulator *ri = NULL;
-	int i;
-
-	for (i = 0; i < ARRAY_SIZE(aat2870_regulators); i++) {
-		ri = &aat2870_regulators[i];
-		if (ri->desc.id == id)
-			break;
-	}
-
-	if (i == ARRAY_SIZE(aat2870_regulators))
-		return NULL;
-
-	ri->enable_addr = AAT2870_LDO_EN;
-	ri->enable_shift = id - AAT2870_ID_LDOA;
-	ri->enable_mask = 0x1 << ri->enable_shift;
-
-	ri->voltage_addr = (id - AAT2870_ID_LDOA) / 2 ?
-			   AAT2870_LDO_CD : AAT2870_LDO_AB;
-	ri->voltage_shift = (id - AAT2870_ID_LDOA) % 2 ? 0 : 4;
-	ri->voltage_mask = 0xF << ri->voltage_shift;
-
-	return ri;
-}
-
-static int aat2870_regulator_probe(struct platform_device *pdev)
-{
-	struct aat2870_regulator *ri;
-	struct regulator_config config = { };
-	struct regulator_dev *rdev;
-
-	ri = aat2870_get_regulator(pdev->id);
-	if (!ri) {
-		dev_err(&pdev->dev, "Invalid device ID, %d\n", pdev->id);
-		return -EINVAL;
-	}
-	ri->aat2870 = dev_get_drvdata(pdev->dev.parent);
-
-	config.dev = &pdev->dev;
-	config.driver_data = ri;
-	config.init_data = dev_get_platdata(&pdev->dev);
-
-	rdev = devm_regulator_register(&pdev->dev, &ri->desc, &config);
-	if (IS_ERR(rdev)) {
-		dev_err(&pdev->dev, "Failed to register regulator %s\n",
-			ri->desc.name);
-		return PTR_ERR(rdev);
-	}
-	platform_set_drvdata(pdev, rdev);
-
-	return 0;
-}
-
-static struct platform_driver aat2870_regulator_driver = {
-	.driver = {
-		.name	= "aat2870-regulator",
-		.probe_type = PROBE_PREFER_ASYNCHRONOUS,
-	},
-	.probe	= aat2870_regulator_probe,
-};
-
-static int __init aat2870_regulator_init(void)
-{
-	return platform_driver_register(&aat2870_regulator_driver);
-}
-subsys_initcall(aat2870_regulator_init);
-
-static void __exit aat2870_regulator_exit(void)
-{
-	platform_driver_unregister(&aat2870_regulator_driver);
-}
-module_exit(aat2870_regulator_exit);
-
-MODULE_DESCRIPTION("AnalogicTech AAT2870 Regulator");
-MODULE_LICENSE("GPL");
-MODULE_AUTHOR("Jin Park <jinyoungp@nvidia.com>");
-MODULE_ALIAS("platform:aat2870-regulator");
diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig
index 2c206d2713e3..4acbac1bbb9e 100644
--- a/drivers/video/backlight/Kconfig
+++ b/drivers/video/backlight/Kconfig
@@ -388,13 +388,6 @@ config BACKLIGHT_88PM860X
 	help
 	  Say Y to enable the backlight driver for Marvell 88PM8606.
 
-config BACKLIGHT_AAT2870
-	tristate "AnalogicTech AAT2870 Backlight"
-	depends on MFD_AAT2870_CORE
-	help
-	  If you have a AnalogicTech AAT2870 say Y to enable the
-	  backlight driver.
-
 config BACKLIGHT_LM3509
 	tristate "Backlight Driver for LM3509"
 	depends on I2C
diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile
index 0497eaa639cd..e11175bdd500 100644
--- a/drivers/video/backlight/Makefile
+++ b/drivers/video/backlight/Makefile
@@ -18,7 +18,6 @@ obj-$(CONFIG_LCD_TDO24M)		+= tdo24m.o
 obj-$(CONFIG_LCD_VGG2432A4)		+= vgg2432a4.o
 
 obj-$(CONFIG_BACKLIGHT_88PM860X)	+= 88pm860x_bl.o
-obj-$(CONFIG_BACKLIGHT_AAT2870)		+= aat2870_bl.o
 obj-$(CONFIG_BACKLIGHT_ADP8860)		+= adp8860_bl.o
 obj-$(CONFIG_BACKLIGHT_ADP8870)		+= adp8870_bl.o
 obj-$(CONFIG_BACKLIGHT_APPLE)		+= apple_bl.o
diff --git a/drivers/video/backlight/aat2870_bl.c b/drivers/video/backlight/aat2870_bl.c
deleted file mode 100644
index 8b790df1e842..000000000000
--- a/drivers/video/backlight/aat2870_bl.c
+++ /dev/null
@@ -1,206 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * linux/drivers/video/backlight/aat2870_bl.c
- *
- * Copyright (c) 2011, NVIDIA Corporation.
- * Author: Jin Park <jinyoungp@nvidia.com>
- */
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/platform_device.h>
-#include <linux/mutex.h>
-#include <linux/delay.h>
-#include <linux/backlight.h>
-#include <linux/mfd/aat2870.h>
-
-struct aat2870_bl_driver_data {
-	struct platform_device *pdev;
-	struct backlight_device *bd;
-
-	int channels;
-	int max_current;
-	int brightness; /* current brightness */
-};
-
-static inline int aat2870_brightness(struct aat2870_bl_driver_data *aat2870_bl,
-				     int brightness)
-{
-	struct backlight_device *bd = aat2870_bl->bd;
-	int val;
-
-	val = brightness * (aat2870_bl->max_current - 1);
-	val /= bd->props.max_brightness;
-
-	return val;
-}
-
-static inline int aat2870_bl_enable(struct aat2870_bl_driver_data *aat2870_bl)
-{
-	struct aat2870_data *aat2870
-			= dev_get_drvdata(aat2870_bl->pdev->dev.parent);
-
-	return aat2870->write(aat2870, AAT2870_BL_CH_EN,
-			      (u8)aat2870_bl->channels);
-}
-
-static inline int aat2870_bl_disable(struct aat2870_bl_driver_data *aat2870_bl)
-{
-	struct aat2870_data *aat2870
-			= dev_get_drvdata(aat2870_bl->pdev->dev.parent);
-
-	return aat2870->write(aat2870, AAT2870_BL_CH_EN, 0x0);
-}
-
-static int aat2870_bl_update_status(struct backlight_device *bd)
-{
-	struct aat2870_bl_driver_data *aat2870_bl = bl_get_data(bd);
-	struct aat2870_data *aat2870 =
-			dev_get_drvdata(aat2870_bl->pdev->dev.parent);
-	int brightness = backlight_get_brightness(bd);
-	int ret;
-
-	if ((brightness < 0) || (bd->props.max_brightness < brightness)) {
-		dev_err(&bd->dev, "invalid brightness, %d\n", brightness);
-		return -EINVAL;
-	}
-
-	dev_dbg(&bd->dev, "brightness=%d, power=%d, state=%d\n",
-		 bd->props.brightness, bd->props.power, bd->props.state);
-
-	ret = aat2870->write(aat2870, AAT2870_BLM,
-			     (u8)aat2870_brightness(aat2870_bl, brightness));
-	if (ret < 0)
-		return ret;
-
-	if (brightness == 0) {
-		ret = aat2870_bl_disable(aat2870_bl);
-		if (ret < 0)
-			return ret;
-	} else if (aat2870_bl->brightness == 0) {
-		ret = aat2870_bl_enable(aat2870_bl);
-		if (ret < 0)
-			return ret;
-	}
-
-	aat2870_bl->brightness = brightness;
-
-	return 0;
-}
-
-static const struct backlight_ops aat2870_bl_ops = {
-	.options = BL_CORE_SUSPENDRESUME,
-	.update_status = aat2870_bl_update_status,
-};
-
-static int aat2870_bl_probe(struct platform_device *pdev)
-{
-	struct aat2870_bl_platform_data *pdata = dev_get_platdata(&pdev->dev);
-	struct aat2870_bl_driver_data *aat2870_bl;
-	struct backlight_device *bd;
-	struct backlight_properties props;
-	int ret = 0;
-
-	if (!pdata) {
-		dev_err(&pdev->dev, "No platform data\n");
-		ret = -ENXIO;
-		goto out;
-	}
-
-	if (pdev->id != AAT2870_ID_BL) {
-		dev_err(&pdev->dev, "Invalid device ID, %d\n", pdev->id);
-		ret = -EINVAL;
-		goto out;
-	}
-
-	aat2870_bl = devm_kzalloc(&pdev->dev,
-				  sizeof(struct aat2870_bl_driver_data),
-				  GFP_KERNEL);
-	if (!aat2870_bl) {
-		ret = -ENOMEM;
-		goto out;
-	}
-
-	memset(&props, 0, sizeof(struct backlight_properties));
-
-	props.type = BACKLIGHT_RAW;
-	bd = devm_backlight_device_register(&pdev->dev, "aat2870-backlight",
-					&pdev->dev, aat2870_bl, &aat2870_bl_ops,
-					&props);
-	if (IS_ERR(bd)) {
-		dev_err(&pdev->dev,
-			"Failed allocate memory for backlight device\n");
-		ret = PTR_ERR(bd);
-		goto out;
-	}
-
-	aat2870_bl->pdev = pdev;
-	platform_set_drvdata(pdev, aat2870_bl);
-
-	aat2870_bl->bd = bd;
-
-	if (pdata->channels > 0)
-		aat2870_bl->channels = pdata->channels;
-	else
-		aat2870_bl->channels = AAT2870_BL_CH_ALL;
-
-	if (pdata->max_current > 0)
-		aat2870_bl->max_current = pdata->max_current;
-	else
-		aat2870_bl->max_current = AAT2870_CURRENT_27_9;
-
-	if (pdata->max_brightness > 0)
-		bd->props.max_brightness = pdata->max_brightness;
-	else
-		bd->props.max_brightness = 255;
-
-	aat2870_bl->brightness = 0;
-	bd->props.power = BACKLIGHT_POWER_ON;
-	bd->props.brightness = bd->props.max_brightness;
-
-	ret = aat2870_bl_update_status(bd);
-	if (ret < 0) {
-		dev_err(&pdev->dev, "Failed to initialize\n");
-		return ret;
-	}
-
-	return 0;
-
-out:
-	return ret;
-}
-
-static void aat2870_bl_remove(struct platform_device *pdev)
-{
-	struct aat2870_bl_driver_data *aat2870_bl = platform_get_drvdata(pdev);
-	struct backlight_device *bd = aat2870_bl->bd;
-
-	bd->props.power = BACKLIGHT_POWER_OFF;
-	bd->props.brightness = 0;
-	backlight_update_status(bd);
-}
-
-static struct platform_driver aat2870_bl_driver = {
-	.driver = {
-		.name	= "aat2870-backlight",
-	},
-	.probe		= aat2870_bl_probe,
-	.remove		= aat2870_bl_remove,
-};
-
-static int __init aat2870_bl_init(void)
-{
-	return platform_driver_register(&aat2870_bl_driver);
-}
-subsys_initcall(aat2870_bl_init);
-
-static void __exit aat2870_bl_exit(void)
-{
-	platform_driver_unregister(&aat2870_bl_driver);
-}
-module_exit(aat2870_bl_exit);
-
-MODULE_DESCRIPTION("AnalogicTech AAT2870 Backlight");
-MODULE_LICENSE("GPL");
-MODULE_AUTHOR("Jin Park <jinyoungp@nvidia.com>");
diff --git a/include/linux/mfd/aat2870.h b/include/linux/mfd/aat2870.h
deleted file mode 100644
index c7a3c53eba68..000000000000
--- a/include/linux/mfd/aat2870.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * linux/include/linux/mfd/aat2870.h
- *
- * Copyright (c) 2011, NVIDIA Corporation.
- * Author: Jin Park <jinyoungp@nvidia.com>
- */
-
-#ifndef __LINUX_MFD_AAT2870_H
-#define __LINUX_MFD_AAT2870_H
-
-#include <linux/debugfs.h>
-#include <linux/i2c.h>
-
-/* Register offsets */
-#define AAT2870_BL_CH_EN	0x00
-#define AAT2870_BLM		0x01
-#define AAT2870_BLS		0x02
-#define AAT2870_BL1		0x03
-#define AAT2870_BL2		0x04
-#define AAT2870_BL3		0x05
-#define AAT2870_BL4		0x06
-#define AAT2870_BL5		0x07
-#define AAT2870_BL6		0x08
-#define AAT2870_BL7		0x09
-#define AAT2870_BL8		0x0A
-#define AAT2870_FLR		0x0B
-#define AAT2870_FM		0x0C
-#define AAT2870_FS		0x0D
-#define AAT2870_ALS_CFG0	0x0E
-#define AAT2870_ALS_CFG1	0x0F
-#define AAT2870_ALS_CFG2	0x10
-#define AAT2870_AMB		0x11
-#define AAT2870_ALS0		0x12
-#define AAT2870_ALS1		0x13
-#define AAT2870_ALS2		0x14
-#define AAT2870_ALS3		0x15
-#define AAT2870_ALS4		0x16
-#define AAT2870_ALS5		0x17
-#define AAT2870_ALS6		0x18
-#define AAT2870_ALS7		0x19
-#define AAT2870_ALS8		0x1A
-#define AAT2870_ALS9		0x1B
-#define AAT2870_ALSA		0x1C
-#define AAT2870_ALSB		0x1D
-#define AAT2870_ALSC		0x1E
-#define AAT2870_ALSD		0x1F
-#define AAT2870_ALSE		0x20
-#define AAT2870_ALSF		0x21
-#define AAT2870_SUB_SET		0x22
-#define AAT2870_SUB_CTRL	0x23
-#define AAT2870_LDO_AB		0x24
-#define AAT2870_LDO_CD		0x25
-#define AAT2870_LDO_EN		0x26
-#define AAT2870_REG_NUM		0x27
-
-/* Device IDs */
-enum aat2870_id {
-	AAT2870_ID_BL,
-	AAT2870_ID_LDOA,
-	AAT2870_ID_LDOB,
-	AAT2870_ID_LDOC,
-	AAT2870_ID_LDOD
-};
-
-/* Backlight channels */
-#define AAT2870_BL_CH1		0x01
-#define AAT2870_BL_CH2		0x02
-#define AAT2870_BL_CH3		0x04
-#define AAT2870_BL_CH4		0x08
-#define AAT2870_BL_CH5		0x10
-#define AAT2870_BL_CH6		0x20
-#define AAT2870_BL_CH7		0x40
-#define AAT2870_BL_CH8		0x80
-#define AAT2870_BL_CH_ALL	0xFF
-
-/* Backlight current magnitude (mA) */
-enum aat2870_current {
-	AAT2870_CURRENT_0_45 = 1,
-	AAT2870_CURRENT_0_90,
-	AAT2870_CURRENT_1_80,
-	AAT2870_CURRENT_2_70,
-	AAT2870_CURRENT_3_60,
-	AAT2870_CURRENT_4_50,
-	AAT2870_CURRENT_5_40,
-	AAT2870_CURRENT_6_30,
-	AAT2870_CURRENT_7_20,
-	AAT2870_CURRENT_8_10,
-	AAT2870_CURRENT_9_00,
-	AAT2870_CURRENT_9_90,
-	AAT2870_CURRENT_10_8,
-	AAT2870_CURRENT_11_7,
-	AAT2870_CURRENT_12_6,
-	AAT2870_CURRENT_13_5,
-	AAT2870_CURRENT_14_4,
-	AAT2870_CURRENT_15_3,
-	AAT2870_CURRENT_16_2,
-	AAT2870_CURRENT_17_1,
-	AAT2870_CURRENT_18_0,
-	AAT2870_CURRENT_18_9,
-	AAT2870_CURRENT_19_8,
-	AAT2870_CURRENT_20_7,
-	AAT2870_CURRENT_21_6,
-	AAT2870_CURRENT_22_5,
-	AAT2870_CURRENT_23_4,
-	AAT2870_CURRENT_24_3,
-	AAT2870_CURRENT_25_2,
-	AAT2870_CURRENT_26_1,
-	AAT2870_CURRENT_27_0,
-	AAT2870_CURRENT_27_9
-};
-
-struct aat2870_register {
-	bool readable;
-	bool writeable;
-	u8 value;
-};
-
-struct aat2870_data {
-	struct device *dev;
-	struct i2c_client *client;
-
-	struct mutex io_lock;
-	struct aat2870_register *reg_cache; /* register cache */
-	int en_pin; /* enable GPIO pin (if < 0, ignore this value) */
-	bool is_enable;
-
-	/* init and uninit for platform specified */
-	int (*init)(struct aat2870_data *aat2870);
-	void (*uninit)(struct aat2870_data *aat2870);
-
-	/* i2c io funcntions */
-	int (*read)(struct aat2870_data *aat2870, u8 addr, u8 *val);
-	int (*write)(struct aat2870_data *aat2870, u8 addr, u8 val);
-	int (*update)(struct aat2870_data *aat2870, u8 addr, u8 mask, u8 val);
-};
-
-struct aat2870_subdev_info {
-	int id;
-	const char *name;
-	void *platform_data;
-};
-
-struct aat2870_platform_data {
-	int en_pin; /* enable GPIO pin (if < 0, ignore this value) */
-
-	struct aat2870_subdev_info *subdevs;
-	int num_subdevs;
-
-	/* init and uninit for platform specified */
-	int (*init)(struct aat2870_data *aat2870);
-	void (*uninit)(struct aat2870_data *aat2870);
-};
-
-struct aat2870_bl_platform_data {
-	/* backlight channels, default is AAT2870_BL_CH_ALL */
-	int channels;
-	/* backlight current magnitude, default is AAT2870_CURRENT_27_9 */
-	int max_current;
-	/* maximum brightness, default is 255 */
-	int max_brightness;
-};
-
-#endif /* __LINUX_MFD_AAT2870_H */
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 08/14] mfd: remove unused aat2870 driver
       [not found] <CAPVz0n0ryOns2sCJE_jFana9MVzwEj1QZuPEa8FNhGbHXnMB+A@mail.gmail.com>
@ 2026-09-10 18:14 ` Arnd Bergmann
  2026-09-10 18:38   ` Guenter Roeck
  2026-09-12  6:42   ` Svyatoslav Ryhel
  0 siblings, 2 replies; 7+ messages in thread
From: Arnd Bergmann @ 2026-09-10 18:14 UTC (permalink / raw)
  To: Svyatoslav Ryhel, Arnd Bergmann
  Cc: Alexandre Belloni, Bartosz Golaszewski, Mark Brown, Conor Dooley,
	Daniel Thompson, Helge Deller, devicetree, Dmitry Torokhov,
	dri-devel, Jonathan Cameron, Jingoo Han, Krzysztof Kozlowski,
	Lee Jones, Liam Girdwood, Linus Walleij, linux-arm-kernel,
	linux-doc, linux-fbdev, open list:GPIO SUBSYSTEM, linux-hwmon,
	linux-iio, linux-input, linux-kernel, linux-leds, linux-media,
	linux-pm, linux-rtc, linux-sound, linux-watchdog, Guenter Roeck,
	linuxppc-dev, llvm, Mauro Carvalho Chehab, mfd, Michael Hennerich,
	patches, Pavel Machek, Rob Herring, Sebastian Reichel,
	Support Opensource

On Thu, Sep 10, 2026, at 18:40, Svyatoslav Ryhel wrote:
> __ 
> Hello Arnd! May you please spare AAT2870 from being removed? I have a 
> device which uses aat2870 (LG Optimus 2X P990 Tegra 2, not upstreamed 
> yet, but in process as well) and atm I am working on converting this 
> driver to use OF. Thank you!

Sure, I have removed this patch from my series now.

> P. S. If you are planning to remove more old drivers, please CC me in 
> since I may be interested in some additional driver upgrades for 
> devices I own.

Please have a look at

https://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git/log/?h=board-remove-7.3

I tried to be careful about figuring out exactly which drivers are
unused, but I'm sure there are still a few false positive and false
negative ones in there. I've added the current list of driver files below,
let me know if you see something that shouldn't be there.

     Arnd

drivers/ata/pata_icside.c
drivers/ata/pata_pxa.c
drivers/char/ds1620.c
drivers/char/hw_random/mxc-rnga.c
drivers/char/nwbutton.c
drivers/char/nwbutton.h
drivers/char/nwflash.c
drivers/clk/clk-axm5516.c
drivers/clk/clk-stm32f4.c
drivers/clk/clk-stm32h7.c
drivers/clk/imx/clk-imx31.c
drivers/clk/imx/clk-imxrt1050.c
drivers/clk/nxp/clk-lpc18xx-ccu.c
drivers/clk/nxp/clk-lpc18xx-cgu.c
drivers/clk/nxp/clk-lpc18xx-creg.c
drivers/clk/ti/clk-2xxx.c
drivers/clocksource/armv7m_systick.c
drivers/clocksource/mps2-timer.c
drivers/cpufreq/sa1110-cpufreq.c
drivers/dma/lpc18xx-dmamux.c
drivers/dma/sa11x0-dma.c
drivers/gpio/gpio-adp5520.c
drivers/gpio/gpio-htc-egpio.c
drivers/gpio/gpio-lpc18xx.c
drivers/gpio/gpio-rc5t583.c
drivers/gpio/gpio-rdc321x.c
drivers/gpio/gpio-reg.c
drivers/gpio/gpio-sa1100.c
drivers/gpio/gpio-wm8350.c
drivers/hwmon/ds620.c
drivers/hwmon/f75375s.c
drivers/hwmon/max1111.c
drivers/hwmon/max197.c
drivers/hwmon/wm8350-hwmon.c
drivers/i2c/busses/i2c-acorn.c
drivers/i2c/busses/i2c-axxia.c
drivers/i2c/busses/i2c-lpc2k.c
drivers/i2c/busses/i2c-stm32f4.c
drivers/iio/adc/ad7266.c
drivers/iio/adc/ad7791.c
drivers/iio/adc/ad7793.c
drivers/iio/adc/ad7887.c
drivers/iio/adc/lp8788_adc.c
drivers/iio/adc/lpc18xx_adc.c
drivers/iio/dac/lpc18xx_dac.c
drivers/iio/frequency/ad9523.c
drivers/input/joystick/as5011.c
drivers/input/keyboard/adp5520-keys.c
drivers/input/keyboard/ipaq-micro-keys.c
drivers/input/keyboard/jornada720_kbd.c
drivers/input/keyboard/lm8323.c
drivers/input/keyboard/lm8333.c
drivers/input/keyboard/locomokbd.c
drivers/input/misc/88pm80x_onkey.c
drivers/input/misc/ad714x-i2c.c
drivers/input/misc/ad714x-spi.c
drivers/input/misc/ad714x.c
drivers/input/misc/ad714x.h
drivers/input/misc/adxl34x-i2c.c
drivers/input/misc/adxl34x-spi.c
drivers/input/misc/adxl34x.c
drivers/input/misc/adxl34x.h
drivers/input/misc/bma150.c
drivers/input/misc/cma3000_d0x.c
drivers/input/misc/cma3000_d0x.h
drivers/input/misc/cma3000_d0x_i2c.c
drivers/input/misc/kxtj9.c
drivers/input/misc/max8997_haptic.c
drivers/input/misc/mc13783-pwrbutton.c
drivers/input/mouse/rpcmouse.c
drivers/input/serio/rpckbd.c
drivers/input/serio/sa1111ps2.c
drivers/input/touchscreen/ad7877.c
drivers/input/touchscreen/da9034-ts.c
drivers/input/touchscreen/ipaq-micro-ts.c
drivers/input/touchscreen/jornada720_ts.c
drivers/input/touchscreen/mc13783_ts.c
drivers/input/touchscreen/tps6507x-ts.c
drivers/irqchip/irq-nvic.c
drivers/irqchip/irq-sa11x0.c
drivers/irqchip/irq-stm32-exti.c
drivers/leds/leds-adp5520.c
drivers/leds/leds-bd2802.c
drivers/leds/leds-da903x.c
drivers/leds/leds-ipaq-micro.c
drivers/leds/leds-lm3530.c
drivers/leds/leds-lm3532.c
drivers/leds/leds-lm355x.c
drivers/leds/leds-lm3642.c
drivers/leds/leds-locomo.c
drivers/leds/leds-lp3944.c
drivers/leds/leds-lp8788.c
drivers/leds/leds-wm8350.c
drivers/media/i2c/ths7303.c
drivers/media/platform/samsung/s3c-camif/Kconfig
drivers/media/platform/samsung/s3c-camif/Makefile
drivers/media/platform/samsung/s3c-camif/camif-capture.c
drivers/media/platform/samsung/s3c-camif/camif-core.c
drivers/media/platform/samsung/s3c-camif/camif-core.h
drivers/media/platform/samsung/s3c-camif/camif-regs.c
drivers/media/platform/samsung/s3c-camif/camif-regs.h
drivers/media/platform/st/stm32/dma2d/dma2d-hw.c
drivers/media/platform/st/stm32/dma2d/dma2d-regs.h
drivers/media/platform/st/stm32/dma2d/dma2d.c
drivers/media/platform/st/stm32/dma2d/dma2d.h
drivers/media/radio/radio-si476x.c
drivers/mfd/88pm800.c
drivers/mfd/88pm805.c
drivers/mfd/88pm80x.c
drivers/mfd/adp5520.c
drivers/mfd/da903x.c
drivers/mfd/ipaq-micro.c
drivers/mfd/lp8788-irq.c
drivers/mfd/lp8788.c
drivers/mfd/mcp-core.c
drivers/mfd/mcp-sa11x0.c
drivers/mfd/menelaus.c
drivers/mfd/rc5t583-irq.c
drivers/mfd/rc5t583.c
drivers/mfd/rdc321x-southbridge.c
drivers/mfd/si476x-cmd.c
drivers/mfd/si476x-i2c.c
drivers/mfd/si476x-prop.c
drivers/mfd/ucb1x00-assabet.c
drivers/mfd/ucb1x00-core.c
drivers/mfd/ucb1x00-ts.c
drivers/mfd/wm8350-core.c
drivers/mfd/wm8350-gpio.c
drivers/mfd/wm8350-i2c.c
drivers/mfd/wm8350-irq.c
drivers/mfd/wm8350-regmap.c
drivers/mfd/wm8400-core.c
drivers/misc/bh1770glc.c
drivers/mtd/maps/dc21285.c
drivers/mtd/maps/pxa2xx-flash.c
drivers/mtd/maps/sa1100-flash.c
drivers/mtd/nand/raw/sharpsl.c
drivers/mtd/parsers/sharpslpart.c
drivers/mtd/spi-nor/controllers/Kconfig
drivers/mtd/spi-nor/controllers/Makefile
drivers/mtd/spi-nor/controllers/hisi-sfc.c
drivers/mtd/spi-nor/controllers/nxp-spifi.c
drivers/net/can/bxcan.c
drivers/net/ethernet/8390/etherh.c
drivers/net/ethernet/i825xx/ether1.c
drivers/net/ethernet/i825xx/ether1.h
drivers/net/ethernet/lantiq_etop.c
drivers/net/ethernet/samsung/Kconfig
drivers/net/ethernet/samsung/Makefile
drivers/net/ethernet/samsung/sxgbe/Makefile
drivers/net/ethernet/samsung/sxgbe/sxgbe_common.h
drivers/net/ethernet/samsung/sxgbe/sxgbe_core.c
drivers/net/ethernet/samsung/sxgbe/sxgbe_desc.c
drivers/net/ethernet/samsung/sxgbe/sxgbe_desc.h
drivers/net/ethernet/samsung/sxgbe/sxgbe_dma.c
drivers/net/ethernet/samsung/sxgbe/sxgbe_dma.h
drivers/net/ethernet/samsung/sxgbe/sxgbe_ethtool.c
drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c
drivers/net/ethernet/samsung/sxgbe/sxgbe_mdio.c
drivers/net/ethernet/samsung/sxgbe/sxgbe_mtl.c
drivers/net/ethernet/samsung/sxgbe/sxgbe_mtl.h
drivers/net/ethernet/samsung/sxgbe/sxgbe_platform.c
drivers/net/ethernet/samsung/sxgbe/sxgbe_reg.h
drivers/net/ethernet/seeq/ether3.c
drivers/net/ethernet/seeq/ether3.h
drivers/net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c
drivers/net/wireless/marvell/libertas/if_spi.c
drivers/net/wireless/marvell/libertas/if_spi.h
drivers/net/wireless/st/Kconfig
drivers/net/wireless/st/Makefile
drivers/net/wireless/st/cw1200/Kconfig
drivers/net/wireless/st/cw1200/Makefile
drivers/net/wireless/st/cw1200/bh.c
drivers/net/wireless/st/cw1200/bh.h
drivers/net/wireless/st/cw1200/cw1200.h
drivers/net/wireless/st/cw1200/cw1200_sdio.c
drivers/net/wireless/st/cw1200/cw1200_spi.c
drivers/net/wireless/st/cw1200/debug.c
drivers/net/wireless/st/cw1200/debug.h
drivers/net/wireless/st/cw1200/fwio.c
drivers/net/wireless/st/cw1200/fwio.h
drivers/net/wireless/st/cw1200/hwbus.h
drivers/net/wireless/st/cw1200/hwio.c
drivers/net/wireless/st/cw1200/hwio.h
drivers/net/wireless/st/cw1200/main.c
drivers/net/wireless/st/cw1200/pm.c
drivers/net/wireless/st/cw1200/pm.h
drivers/net/wireless/st/cw1200/queue.c
drivers/net/wireless/st/cw1200/queue.h
drivers/net/wireless/st/cw1200/scan.c
drivers/net/wireless/st/cw1200/scan.h
drivers/net/wireless/st/cw1200/sta.c
drivers/net/wireless/st/cw1200/sta.h
drivers/net/wireless/st/cw1200/txrx.c
drivers/net/wireless/st/cw1200/txrx.h
drivers/net/wireless/st/cw1200/wsm.c
drivers/net/wireless/st/cw1200/wsm.h
drivers/nvmem/lpc18xx_eeprom.c
drivers/nvmem/lpc18xx_otp.c
drivers/pcmcia/max1600.c
drivers/pcmcia/max1600.h
drivers/pcmcia/pxa2xx_base.c
drivers/pcmcia/pxa2xx_base.h
drivers/pcmcia/pxa2xx_sharpsl.c
drivers/pcmcia/sa1100_generic.c
drivers/pcmcia/sa1100_generic.h
drivers/pcmcia/sa1100_h3600.c
drivers/pcmcia/sa1111_generic.c
drivers/pcmcia/sa1111_generic.h
drivers/pcmcia/sa1111_jornada720.c
drivers/pcmcia/sa1111_neponset.c
drivers/pcmcia/sa11xx_base.c
drivers/pcmcia/sa11xx_base.h
drivers/pcmcia/soc_common.c
drivers/pcmcia/soc_common.h
drivers/phy/phy-lpc18xx-usb-otg.c
drivers/pinctrl/freescale/pinctrl-imxrt1050.c
drivers/pinctrl/freescale/pinctrl-imxrt1170.c
drivers/pinctrl/pinctrl-lpc18xx.c
drivers/pinctrl/stm32/pinctrl-stm32f429.c
drivers/pinctrl/stm32/pinctrl-stm32f469.c
drivers/pinctrl/stm32/pinctrl-stm32f746.c
drivers/pinctrl/stm32/pinctrl-stm32f769.c
drivers/pinctrl/stm32/pinctrl-stm32h743.c
drivers/power/reset/axxia-reset.c
drivers/power/supply/collie_battery.c
drivers/power/supply/da9030_battery.c
drivers/power/supply/ipaq_micro_battery.c
drivers/power/supply/lp8788-charger.c
drivers/power/supply/twl4030_madc_battery.c
drivers/power/supply/wm8350_power.c
drivers/pwm/pwm-lpc18xx-sct.c
drivers/regulator/88pm800-regulator.c
drivers/regulator/da903x-regulator.c
drivers/regulator/lp3971.c
drivers/regulator/lp3972.c
drivers/regulator/lp8788-buck.c
drivers/regulator/lp8788-ldo.c
drivers/regulator/max8649.c
drivers/regulator/rc5t583-regulator.c
drivers/regulator/wm8350-regulator.c
drivers/regulator/wm8400-regulator.c
drivers/reset/reset-lpc18xx.c
drivers/rtc/rtc-88pm80x.c
drivers/rtc/rtc-lp8788.c
drivers/rtc/rtc-lpc24xx.c
drivers/rtc/rtc-rc5t583.c
drivers/rtc/rtc-wm8350.c
drivers/scsi/arm/Kconfig
drivers/scsi/arm/Makefile
drivers/scsi/arm/acornscsi-io.S
drivers/scsi/arm/acornscsi.c
drivers/scsi/arm/acornscsi.h
drivers/scsi/arm/arm_scsi.h
drivers/scsi/arm/arxescsi.c
drivers/scsi/arm/cumana_1.c
drivers/scsi/arm/cumana_2.c
drivers/scsi/arm/eesox.c
drivers/scsi/arm/fas216.c
drivers/scsi/arm/fas216.h
drivers/scsi/arm/msgqueue.c
drivers/scsi/arm/msgqueue.h
drivers/scsi/arm/oak.c
drivers/scsi/arm/powertec.c
drivers/scsi/arm/queue.c
drivers/scsi/arm/queue.h
drivers/spi/spi-tle62x0.c
drivers/tty/serial/21285.c
drivers/tty/serial/8250/8250_acorn.c
drivers/tty/serial/8250/8250_lpc18xx.c
drivers/tty/serial/mps2-uart.c
drivers/tty/serial/sa1100.c
drivers/usb/host/ohci-sa1111.c
drivers/usb/host/sl811-hcd.c
drivers/usb/host/sl811.h
drivers/usb/host/sl811_cs.c
drivers/usb/musb/tusb6010.c
drivers/usb/musb/tusb6010.h
drivers/usb/musb/tusb6010_omap.c
drivers/usb/phy/phy-mv-usb.h
drivers/video/backlight/adp5520_bl.c
drivers/video/backlight/adp8860_bl.c
drivers/video/backlight/adp8870_bl.c
drivers/video/backlight/ams369fg06.c
drivers/video/backlight/bd6107.c
drivers/video/backlight/corgi_lcd.c
drivers/video/backlight/da903x_bl.c
drivers/video/backlight/ep93xx_bl.c
drivers/video/backlight/ipaq_micro_bl.c
drivers/video/backlight/jornada720_bl.c
drivers/video/backlight/jornada720_lcd.c
drivers/video/backlight/lm3639_bl.c
drivers/video/backlight/lms501kf03.c
drivers/video/backlight/locomolcd.c
drivers/video/backlight/lp8788_bl.c
drivers/video/backlight/tdo24m.c
drivers/video/fbdev/acornfb.c
drivers/video/fbdev/acornfb.h
drivers/video/fbdev/arcfb.c
drivers/video/fbdev/broadsheetfb.c
drivers/video/fbdev/core/fb_notify.c
drivers/video/fbdev/ep93xx-fb.c
drivers/video/fbdev/hecubafb.c
drivers/video/fbdev/metronomefb.c
drivers/video/fbdev/mmp/Kconfig
drivers/video/fbdev/mmp/Makefile
drivers/video/fbdev/mmp/core.c
drivers/video/fbdev/mmp/fb/Kconfig
drivers/video/fbdev/mmp/fb/Makefile
drivers/video/fbdev/mmp/fb/mmpfb.c
drivers/video/fbdev/mmp/fb/mmpfb.h
drivers/video/fbdev/mmp/hw/Kconfig
drivers/video/fbdev/mmp/hw/Makefile
drivers/video/fbdev/mmp/hw/mmp_ctrl.c
drivers/video/fbdev/mmp/hw/mmp_ctrl.h
drivers/video/fbdev/mmp/hw/mmp_spi.c
drivers/video/fbdev/mmp/panel/Kconfig
drivers/video/fbdev/mmp/panel/Makefile
drivers/video/fbdev/mmp/panel/tpo_tj032md01bw.c
drivers/video/fbdev/n411.c
drivers/video/fbdev/pxa168fb.c
drivers/video/fbdev/pxa168fb.h
drivers/video/fbdev/s1d13xxxfb.c
drivers/video/fbdev/sa1100fb.c
drivers/video/fbdev/sa1100fb.h
drivers/watchdog/lpc18xx_wdt.c
drivers/watchdog/rdc321x_wdt.c
drivers/watchdog/wdt285.c
drivers/watchdog/wdt977.c
drivers/watchdog/wm8350_wdt.c
sound/soc/codecs/si476x.c
sound/soc/codecs/wm8350.c
sound/soc/codecs/wm8350.h
sound/soc/codecs/wm8400.c
sound/soc/codecs/wm8400.h
sound/soc/pxa/pxa2xx-i2s.c
sound/soc/pxa/pxa2xx-i2s.h
sound/soc/pxa/spitz.c
sound/soc/ti/n810.c
sound/spi/Kconfig
sound/spi/Makefile
sound/spi/at73c213.c
sound/spi/at73c213.h

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 08/14] mfd: remove unused aat2870 driver
  2026-09-10 18:14 ` [PATCH 08/14] mfd: remove unused aat2870 driver Arnd Bergmann
@ 2026-09-10 18:38   ` Guenter Roeck
  2026-09-10 19:15     ` Arnd Bergmann
  2026-09-12  6:42   ` Svyatoslav Ryhel
  1 sibling, 1 reply; 7+ messages in thread
From: Guenter Roeck @ 2026-09-10 18:38 UTC (permalink / raw)
  To: Arnd Bergmann, Svyatoslav Ryhel, Arnd Bergmann
  Cc: Alexandre Belloni, Bartosz Golaszewski, Mark Brown, Conor Dooley,
	Daniel Thompson, Helge Deller, devicetree, Dmitry Torokhov,
	dri-devel, Jonathan Cameron, Jingoo Han, Krzysztof Kozlowski,
	Lee Jones, Liam Girdwood, Linus Walleij, linux-arm-kernel,
	linux-doc, linux-fbdev, open list:GPIO SUBSYSTEM, linux-hwmon,
	linux-iio, linux-input, linux-kernel, linux-leds, linux-media,
	linux-pm, linux-rtc, linux-sound, linux-watchdog, linuxppc-dev,
	llvm, Mauro Carvalho Chehab, mfd, Michael Hennerich, patches,
	Pavel Machek, Rob Herring, Sebastian Reichel, Support Opensource

On 9/10/26 11:14, Arnd Bergmann wrote:
> On Thu, Sep 10, 2026, at 18:40, Svyatoslav Ryhel wrote:
>> __
>> Hello Arnd! May you please spare AAT2870 from being removed? I have a
>> device which uses aat2870 (LG Optimus 2X P990 Tegra 2, not upstreamed
>> yet, but in process as well) and atm I am working on converting this
>> driver to use OF. Thank you!
> 
> Sure, I have removed this patch from my series now.
> 
>> P. S. If you are planning to remove more old drivers, please CC me in
>> since I may be interested in some additional driver upgrades for
>> devices I own.
> 
> Please have a look at
> 
> https://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git/log/?h=board-remove-7.3
> 
> I tried to be careful about figuring out exactly which drivers are
> unused, but I'm sure there are still a few false positive and false
> negative ones in there. I've added the current list of driver files below,
> let me know if you see something that shouldn't be there.
> 
>       Arnd
> 
...
> drivers/hwmon/ds620.c
> drivers/hwmon/f75375s.c
> drivers/hwmon/max1111.c
> drivers/hwmon/max197.c

I missed the rationale for removing those, but then I don't really
mind either. I guess we'll hear if someone still uses any of those
drivers/chips.

Guenter


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 08/14] mfd: remove unused aat2870 driver
  2026-09-10 18:38   ` Guenter Roeck
@ 2026-09-10 19:15     ` Arnd Bergmann
  2026-09-10 19:31       ` Guenter Roeck
  0 siblings, 1 reply; 7+ messages in thread
From: Arnd Bergmann @ 2026-09-10 19:15 UTC (permalink / raw)
  To: Guenter Roeck, Svyatoslav Ryhel, Arnd Bergmann
  Cc: Alexandre Belloni, Bartosz Golaszewski, Mark Brown, Conor Dooley,
	Daniel Thompson, Helge Deller, devicetree, Dmitry Torokhov,
	dri-devel, Jonathan Cameron, Jingoo Han, Krzysztof Kozlowski,
	Lee Jones, Liam Girdwood, Linus Walleij, linux-arm-kernel,
	linux-doc, linux-fbdev, open list:GPIO SUBSYSTEM, linux-hwmon,
	linux-iio, linux-input, linux-kernel, linux-leds, linux-media,
	linux-pm, linux-rtc, linux-sound, linux-watchdog, linuxppc-dev,
	llvm, Mauro Carvalho Chehab, mfd, Michael Hennerich, patches,
	Pavel Machek, Rob Herring, Sebastian Reichel, Support Opensource

On Thu, Sep 10, 2026, at 20:38, Guenter Roeck wrote:
>> 
> ...
>> drivers/hwmon/ds620.c
>> drivers/hwmon/f75375s.c
>> drivers/hwmon/max1111.c
>> drivers/hwmon/max197.c
>
> I missed the rationale for removing those, but then I don't really
> mind either. I guess we'll hear if someone still uses any of those
> drivers/chips.

None of these have devicetree support, and they are not usable
with any of the remaining board files.

From what I found:

- da620 apparently never had any users upstream, though it does
  not require platform data and is theoretically usable with
  an external dtb
- f75375s was only used on iop32x (long gone)
- max197 was used on x86/elan/ts5500, which is still in the
  tree but cannot be enabled anymore because it is a 486 class SoC.
  I have sent a separate patch to remove that platform
- max1111 was used on spitz, which is on its way out for 7.4.

I'm not sure when I'll get around to send the patches.

      Arnd

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 08/14] mfd: remove unused aat2870 driver
  2026-09-10 19:15     ` Arnd Bergmann
@ 2026-09-10 19:31       ` Guenter Roeck
  0 siblings, 0 replies; 7+ messages in thread
From: Guenter Roeck @ 2026-09-10 19:31 UTC (permalink / raw)
  To: Arnd Bergmann, Svyatoslav Ryhel, Arnd Bergmann
  Cc: Alexandre Belloni, Bartosz Golaszewski, Mark Brown, Conor Dooley,
	Daniel Thompson, Helge Deller, devicetree, Dmitry Torokhov,
	dri-devel, Jonathan Cameron, Jingoo Han, Krzysztof Kozlowski,
	Lee Jones, Liam Girdwood, Linus Walleij, linux-arm-kernel,
	linux-doc, linux-fbdev, open list:GPIO SUBSYSTEM, linux-hwmon,
	linux-iio, linux-input, linux-kernel, linux-leds, linux-media,
	linux-pm, linux-rtc, linux-sound, linux-watchdog, linuxppc-dev,
	llvm, Mauro Carvalho Chehab, mfd, Michael Hennerich, patches,
	Pavel Machek, Rob Herring, Sebastian Reichel, Support Opensource

On 9/10/26 12:15, Arnd Bergmann wrote:
> On Thu, Sep 10, 2026, at 20:38, Guenter Roeck wrote:
>>>
>> ...
>>> drivers/hwmon/ds620.c
>>> drivers/hwmon/f75375s.c
>>> drivers/hwmon/max1111.c
>>> drivers/hwmon/max197.c
>>
>> I missed the rationale for removing those, but then I don't really
>> mind either. I guess we'll hear if someone still uses any of those
>> drivers/chips.
> 
> None of these have devicetree support, and they are not usable
> with any of the remaining board files.
> 
>  From what I found:
> 
> - da620 apparently never had any users upstream, though it does
>    not require platform data and is theoretically usable with
>    an external dtb
> - f75375s was only used on iop32x (long gone)
> - max197 was used on x86/elan/ts5500, which is still in the
>    tree but cannot be enabled anymore because it is a 486 class SoC.
>    I have sent a separate patch to remove that platform
> - max1111 was used on spitz, which is on its way out for 7.4.
> 

As I said, I don't have any issues with removing them. Note though
that the ds620 driver (like many other hwmon drivers) does not require
devicetree or platform data to work just fine.

Thanks,
Guenter


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 08/14] mfd: remove unused aat2870 driver
  2026-09-10 18:14 ` [PATCH 08/14] mfd: remove unused aat2870 driver Arnd Bergmann
  2026-09-10 18:38   ` Guenter Roeck
@ 2026-09-12  6:42   ` Svyatoslav Ryhel
  2026-09-12  8:05     ` Arnd Bergmann
  1 sibling, 1 reply; 7+ messages in thread
From: Svyatoslav Ryhel @ 2026-09-12  6:42 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: Arnd Bergmann, Alexandre Belloni, Bartosz Golaszewski, Mark Brown,
	Conor Dooley, Daniel Thompson, Helge Deller, devicetree,
	Dmitry Torokhov, dri-devel, Jonathan Cameron, Jingoo Han,
	Krzysztof Kozlowski, Lee Jones, Liam Girdwood, Linus Walleij,
	linux-arm-kernel, linux-doc, linux-fbdev,
	open list:GPIO SUBSYSTEM, linux-hwmon, linux-iio, linux-input,
	linux-kernel, linux-leds, linux-media, linux-pm, linux-rtc,
	linux-sound, linux-watchdog, Guenter Roeck, linuxppc-dev, llvm,
	Mauro Carvalho Chehab, mfd, Michael Hennerich, patches,
	Pavel Machek, Rob Herring, Sebastian Reichel, Support Opensource

чт, 10 вер. 2026 р. о 21:15 Arnd Bergmann <arnd@arndb.de> пише:
>
> On Thu, Sep 10, 2026, at 18:40, Svyatoslav Ryhel wrote:
> > __
> > Hello Arnd! May you please spare AAT2870 from being removed? I have a
> > device which uses aat2870 (LG Optimus 2X P990 Tegra 2, not upstreamed
> > yet, but in process as well) and atm I am working on converting this
> > driver to use OF. Thank you!
>
> Sure, I have removed this patch from my series now.
>

Thank you!

> > P. S. If you are planning to remove more old drivers, please CC me in
> > since I may be interested in some additional driver upgrades for
> > devices I own.
>
> Please have a look at
>
> https://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git/log/?h=board-remove-7.3
>

Thanks, I will keep my eye on this branch.

> I tried to be careful about figuring out exactly which drivers are
> unused, but I'm sure there are still a few false positive and false
> negative ones in there. I've added the current list of driver files below,
> let me know if you see something that shouldn't be there.
>
>      Arnd
>
> drivers/ata/pata_icside.c
> drivers/ata/pata_pxa.c
> drivers/char/ds1620.c
> drivers/char/hw_random/mxc-rnga.c
> drivers/char/nwbutton.c
> drivers/char/nwbutton.h
> drivers/char/nwflash.c
> drivers/clk/clk-axm5516.c
> drivers/clk/clk-stm32f4.c
> drivers/clk/clk-stm32h7.c
> drivers/clk/imx/clk-imx31.c
> drivers/clk/imx/clk-imxrt1050.c
> drivers/clk/nxp/clk-lpc18xx-ccu.c
> drivers/clk/nxp/clk-lpc18xx-cgu.c
> drivers/clk/nxp/clk-lpc18xx-creg.c
> drivers/clk/ti/clk-2xxx.c
> drivers/clocksource/armv7m_systick.c
> drivers/clocksource/mps2-timer.c
> drivers/cpufreq/sa1110-cpufreq.c
> drivers/dma/lpc18xx-dmamux.c
> drivers/dma/sa11x0-dma.c
> drivers/gpio/gpio-adp5520.c
> drivers/gpio/gpio-htc-egpio.c
> drivers/gpio/gpio-lpc18xx.c
> drivers/gpio/gpio-rc5t583.c
> drivers/gpio/gpio-rdc321x.c
> drivers/gpio/gpio-reg.c
> drivers/gpio/gpio-sa1100.c
> drivers/gpio/gpio-wm8350.c
> drivers/hwmon/ds620.c
> drivers/hwmon/f75375s.c
> drivers/hwmon/max1111.c
> drivers/hwmon/max197.c
> drivers/hwmon/wm8350-hwmon.c
> drivers/i2c/busses/i2c-acorn.c
> drivers/i2c/busses/i2c-axxia.c
> drivers/i2c/busses/i2c-lpc2k.c
> drivers/i2c/busses/i2c-stm32f4.c
> drivers/iio/adc/ad7266.c
> drivers/iio/adc/ad7791.c
> drivers/iio/adc/ad7793.c
> drivers/iio/adc/ad7887.c
> drivers/iio/adc/lp8788_adc.c
> drivers/iio/adc/lpc18xx_adc.c
> drivers/iio/dac/lpc18xx_dac.c
> drivers/iio/frequency/ad9523.c
> drivers/input/joystick/as5011.c
> drivers/input/keyboard/adp5520-keys.c
> drivers/input/keyboard/ipaq-micro-keys.c
> drivers/input/keyboard/jornada720_kbd.c
> drivers/input/keyboard/lm8323.c
> drivers/input/keyboard/lm8333.c
> drivers/input/keyboard/locomokbd.c
> drivers/input/misc/88pm80x_onkey.c
> drivers/input/misc/ad714x-i2c.c
> drivers/input/misc/ad714x-spi.c
> drivers/input/misc/ad714x.c
> drivers/input/misc/ad714x.h
> drivers/input/misc/adxl34x-i2c.c
> drivers/input/misc/adxl34x-spi.c
> drivers/input/misc/adxl34x.c
> drivers/input/misc/adxl34x.h
> drivers/input/misc/bma150.c
> drivers/input/misc/cma3000_d0x.c
> drivers/input/misc/cma3000_d0x.h
> drivers/input/misc/cma3000_d0x_i2c.c
> drivers/input/misc/kxtj9.c
> drivers/input/misc/max8997_haptic.c
> drivers/input/misc/mc13783-pwrbutton.c
> drivers/input/mouse/rpcmouse.c
> drivers/input/serio/rpckbd.c
> drivers/input/serio/sa1111ps2.c
> drivers/input/touchscreen/ad7877.c
> drivers/input/touchscreen/da9034-ts.c
> drivers/input/touchscreen/ipaq-micro-ts.c
> drivers/input/touchscreen/jornada720_ts.c
> drivers/input/touchscreen/mc13783_ts.c
> drivers/input/touchscreen/tps6507x-ts.c
> drivers/irqchip/irq-nvic.c
> drivers/irqchip/irq-sa11x0.c
> drivers/irqchip/irq-stm32-exti.c
> drivers/leds/leds-adp5520.c
> drivers/leds/leds-bd2802.c
> drivers/leds/leds-da903x.c
> drivers/leds/leds-ipaq-micro.c
> drivers/leds/leds-lm3530.c
> drivers/leds/leds-lm3532.c

LM3532 has full OF support and is functional, it just does not have
device tree users yet. I have a device using it - Motorola Atrix 4G
(Tegra 2 based).

Here is commit removing LM3532
https://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git/commit/?id=46a6457870825d8b782d350fdc7e27c540734d41
Here are my patches bringing up Motorola Atrix 4G support
https://lore.kernel.org/lkml/20260721100245.444623-3-clamor95@gmail.com/

> drivers/leds/leds-lm355x.c
> drivers/leds/leds-lm3642.c
> drivers/leds/leds-locomo.c
> drivers/leds/leds-lp3944.c
> drivers/leds/leds-lp8788.c
> drivers/leds/leds-wm8350.c
> drivers/media/i2c/ths7303.c
> drivers/media/platform/samsung/s3c-camif/Kconfig
> drivers/media/platform/samsung/s3c-camif/Makefile
> drivers/media/platform/samsung/s3c-camif/camif-capture.c
> drivers/media/platform/samsung/s3c-camif/camif-core.c
> drivers/media/platform/samsung/s3c-camif/camif-core.h
> drivers/media/platform/samsung/s3c-camif/camif-regs.c
> drivers/media/platform/samsung/s3c-camif/camif-regs.h
> drivers/media/platform/st/stm32/dma2d/dma2d-hw.c
> drivers/media/platform/st/stm32/dma2d/dma2d-regs.h
> drivers/media/platform/st/stm32/dma2d/dma2d.c
> drivers/media/platform/st/stm32/dma2d/dma2d.h
> drivers/media/radio/radio-si476x.c
> drivers/mfd/88pm800.c
> drivers/mfd/88pm805.c
> drivers/mfd/88pm80x.c
> drivers/mfd/adp5520.c
> drivers/mfd/da903x.c
> drivers/mfd/ipaq-micro.c
> drivers/mfd/lp8788-irq.c
> drivers/mfd/lp8788.c
> drivers/mfd/mcp-core.c
> drivers/mfd/mcp-sa11x0.c
> drivers/mfd/menelaus.c
> drivers/mfd/rc5t583-irq.c
> drivers/mfd/rc5t583.c
> drivers/mfd/rdc321x-southbridge.c
> drivers/mfd/si476x-cmd.c
> drivers/mfd/si476x-i2c.c
> drivers/mfd/si476x-prop.c
> drivers/mfd/ucb1x00-assabet.c
> drivers/mfd/ucb1x00-core.c
> drivers/mfd/ucb1x00-ts.c
> drivers/mfd/wm8350-core.c
> drivers/mfd/wm8350-gpio.c
> drivers/mfd/wm8350-i2c.c
> drivers/mfd/wm8350-irq.c
> drivers/mfd/wm8350-regmap.c
> drivers/mfd/wm8400-core.c
> drivers/misc/bh1770glc.c
> drivers/mtd/maps/dc21285.c
> drivers/mtd/maps/pxa2xx-flash.c
> drivers/mtd/maps/sa1100-flash.c
> drivers/mtd/nand/raw/sharpsl.c
> drivers/mtd/parsers/sharpslpart.c
> drivers/mtd/spi-nor/controllers/Kconfig
> drivers/mtd/spi-nor/controllers/Makefile
> drivers/mtd/spi-nor/controllers/hisi-sfc.c
> drivers/mtd/spi-nor/controllers/nxp-spifi.c
> drivers/net/can/bxcan.c
> drivers/net/ethernet/8390/etherh.c
> drivers/net/ethernet/i825xx/ether1.c
> drivers/net/ethernet/i825xx/ether1.h
> drivers/net/ethernet/lantiq_etop.c
> drivers/net/ethernet/samsung/Kconfig
> drivers/net/ethernet/samsung/Makefile
> drivers/net/ethernet/samsung/sxgbe/Makefile
> drivers/net/ethernet/samsung/sxgbe/sxgbe_common.h
> drivers/net/ethernet/samsung/sxgbe/sxgbe_core.c
> drivers/net/ethernet/samsung/sxgbe/sxgbe_desc.c
> drivers/net/ethernet/samsung/sxgbe/sxgbe_desc.h
> drivers/net/ethernet/samsung/sxgbe/sxgbe_dma.c
> drivers/net/ethernet/samsung/sxgbe/sxgbe_dma.h
> drivers/net/ethernet/samsung/sxgbe/sxgbe_ethtool.c
> drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c
> drivers/net/ethernet/samsung/sxgbe/sxgbe_mdio.c
> drivers/net/ethernet/samsung/sxgbe/sxgbe_mtl.c
> drivers/net/ethernet/samsung/sxgbe/sxgbe_mtl.h
> drivers/net/ethernet/samsung/sxgbe/sxgbe_platform.c
> drivers/net/ethernet/samsung/sxgbe/sxgbe_reg.h
> drivers/net/ethernet/seeq/ether3.c
> drivers/net/ethernet/seeq/ether3.h
> drivers/net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c
> drivers/net/wireless/marvell/libertas/if_spi.c
> drivers/net/wireless/marvell/libertas/if_spi.h
> drivers/net/wireless/st/Kconfig
> drivers/net/wireless/st/Makefile
> drivers/net/wireless/st/cw1200/Kconfig
> drivers/net/wireless/st/cw1200/Makefile
> drivers/net/wireless/st/cw1200/bh.c
> drivers/net/wireless/st/cw1200/bh.h
> drivers/net/wireless/st/cw1200/cw1200.h
> drivers/net/wireless/st/cw1200/cw1200_sdio.c
> drivers/net/wireless/st/cw1200/cw1200_spi.c
> drivers/net/wireless/st/cw1200/debug.c
> drivers/net/wireless/st/cw1200/debug.h
> drivers/net/wireless/st/cw1200/fwio.c
> drivers/net/wireless/st/cw1200/fwio.h
> drivers/net/wireless/st/cw1200/hwbus.h
> drivers/net/wireless/st/cw1200/hwio.c
> drivers/net/wireless/st/cw1200/hwio.h
> drivers/net/wireless/st/cw1200/main.c
> drivers/net/wireless/st/cw1200/pm.c
> drivers/net/wireless/st/cw1200/pm.h
> drivers/net/wireless/st/cw1200/queue.c
> drivers/net/wireless/st/cw1200/queue.h
> drivers/net/wireless/st/cw1200/scan.c
> drivers/net/wireless/st/cw1200/scan.h
> drivers/net/wireless/st/cw1200/sta.c
> drivers/net/wireless/st/cw1200/sta.h
> drivers/net/wireless/st/cw1200/txrx.c
> drivers/net/wireless/st/cw1200/txrx.h
> drivers/net/wireless/st/cw1200/wsm.c
> drivers/net/wireless/st/cw1200/wsm.h
> drivers/nvmem/lpc18xx_eeprom.c
> drivers/nvmem/lpc18xx_otp.c
> drivers/pcmcia/max1600.c
> drivers/pcmcia/max1600.h
> drivers/pcmcia/pxa2xx_base.c
> drivers/pcmcia/pxa2xx_base.h
> drivers/pcmcia/pxa2xx_sharpsl.c
> drivers/pcmcia/sa1100_generic.c
> drivers/pcmcia/sa1100_generic.h
> drivers/pcmcia/sa1100_h3600.c
> drivers/pcmcia/sa1111_generic.c
> drivers/pcmcia/sa1111_generic.h
> drivers/pcmcia/sa1111_jornada720.c
> drivers/pcmcia/sa1111_neponset.c
> drivers/pcmcia/sa11xx_base.c
> drivers/pcmcia/sa11xx_base.h
> drivers/pcmcia/soc_common.c
> drivers/pcmcia/soc_common.h
> drivers/phy/phy-lpc18xx-usb-otg.c
> drivers/pinctrl/freescale/pinctrl-imxrt1050.c
> drivers/pinctrl/freescale/pinctrl-imxrt1170.c
> drivers/pinctrl/pinctrl-lpc18xx.c
> drivers/pinctrl/stm32/pinctrl-stm32f429.c
> drivers/pinctrl/stm32/pinctrl-stm32f469.c
> drivers/pinctrl/stm32/pinctrl-stm32f746.c
> drivers/pinctrl/stm32/pinctrl-stm32f769.c
> drivers/pinctrl/stm32/pinctrl-stm32h743.c
> drivers/power/reset/axxia-reset.c
> drivers/power/supply/collie_battery.c
> drivers/power/supply/da9030_battery.c
> drivers/power/supply/ipaq_micro_battery.c
> drivers/power/supply/lp8788-charger.c
> drivers/power/supply/twl4030_madc_battery.c
> drivers/power/supply/wm8350_power.c
> drivers/pwm/pwm-lpc18xx-sct.c
> drivers/regulator/88pm800-regulator.c
> drivers/regulator/da903x-regulator.c
> drivers/regulator/lp3971.c
> drivers/regulator/lp3972.c
> drivers/regulator/lp8788-buck.c
> drivers/regulator/lp8788-ldo.c
> drivers/regulator/max8649.c
> drivers/regulator/rc5t583-regulator.c
> drivers/regulator/wm8350-regulator.c
> drivers/regulator/wm8400-regulator.c
> drivers/reset/reset-lpc18xx.c
> drivers/rtc/rtc-88pm80x.c
> drivers/rtc/rtc-lp8788.c
> drivers/rtc/rtc-lpc24xx.c
> drivers/rtc/rtc-rc5t583.c
> drivers/rtc/rtc-wm8350.c
> drivers/scsi/arm/Kconfig
> drivers/scsi/arm/Makefile
> drivers/scsi/arm/acornscsi-io.S
> drivers/scsi/arm/acornscsi.c
> drivers/scsi/arm/acornscsi.h
> drivers/scsi/arm/arm_scsi.h
> drivers/scsi/arm/arxescsi.c
> drivers/scsi/arm/cumana_1.c
> drivers/scsi/arm/cumana_2.c
> drivers/scsi/arm/eesox.c
> drivers/scsi/arm/fas216.c
> drivers/scsi/arm/fas216.h
> drivers/scsi/arm/msgqueue.c
> drivers/scsi/arm/msgqueue.h
> drivers/scsi/arm/oak.c
> drivers/scsi/arm/powertec.c
> drivers/scsi/arm/queue.c
> drivers/scsi/arm/queue.h
> drivers/spi/spi-tle62x0.c
> drivers/tty/serial/21285.c
> drivers/tty/serial/8250/8250_acorn.c
> drivers/tty/serial/8250/8250_lpc18xx.c
> drivers/tty/serial/mps2-uart.c
> drivers/tty/serial/sa1100.c
> drivers/usb/host/ohci-sa1111.c
> drivers/usb/host/sl811-hcd.c
> drivers/usb/host/sl811.h
> drivers/usb/host/sl811_cs.c
> drivers/usb/musb/tusb6010.c
> drivers/usb/musb/tusb6010.h
> drivers/usb/musb/tusb6010_omap.c
> drivers/usb/phy/phy-mv-usb.h
> drivers/video/backlight/adp5520_bl.c
> drivers/video/backlight/adp8860_bl.c
> drivers/video/backlight/adp8870_bl.c
> drivers/video/backlight/ams369fg06.c
> drivers/video/backlight/bd6107.c
> drivers/video/backlight/corgi_lcd.c
> drivers/video/backlight/da903x_bl.c
> drivers/video/backlight/ep93xx_bl.c
> drivers/video/backlight/ipaq_micro_bl.c
> drivers/video/backlight/jornada720_bl.c
> drivers/video/backlight/jornada720_lcd.c
> drivers/video/backlight/lm3639_bl.c
> drivers/video/backlight/lms501kf03.c
> drivers/video/backlight/locomolcd.c
> drivers/video/backlight/lp8788_bl.c
> drivers/video/backlight/tdo24m.c
> drivers/video/fbdev/acornfb.c
> drivers/video/fbdev/acornfb.h
> drivers/video/fbdev/arcfb.c
> drivers/video/fbdev/broadsheetfb.c
> drivers/video/fbdev/core/fb_notify.c
> drivers/video/fbdev/ep93xx-fb.c
> drivers/video/fbdev/hecubafb.c
> drivers/video/fbdev/metronomefb.c
> drivers/video/fbdev/mmp/Kconfig
> drivers/video/fbdev/mmp/Makefile
> drivers/video/fbdev/mmp/core.c
> drivers/video/fbdev/mmp/fb/Kconfig
> drivers/video/fbdev/mmp/fb/Makefile
> drivers/video/fbdev/mmp/fb/mmpfb.c
> drivers/video/fbdev/mmp/fb/mmpfb.h
> drivers/video/fbdev/mmp/hw/Kconfig
> drivers/video/fbdev/mmp/hw/Makefile
> drivers/video/fbdev/mmp/hw/mmp_ctrl.c
> drivers/video/fbdev/mmp/hw/mmp_ctrl.h
> drivers/video/fbdev/mmp/hw/mmp_spi.c
> drivers/video/fbdev/mmp/panel/Kconfig
> drivers/video/fbdev/mmp/panel/Makefile
> drivers/video/fbdev/mmp/panel/tpo_tj032md01bw.c
> drivers/video/fbdev/n411.c
> drivers/video/fbdev/pxa168fb.c
> drivers/video/fbdev/pxa168fb.h
> drivers/video/fbdev/s1d13xxxfb.c
> drivers/video/fbdev/sa1100fb.c
> drivers/video/fbdev/sa1100fb.h
> drivers/watchdog/lpc18xx_wdt.c
> drivers/watchdog/rdc321x_wdt.c
> drivers/watchdog/wdt285.c
> drivers/watchdog/wdt977.c
> drivers/watchdog/wm8350_wdt.c
> sound/soc/codecs/si476x.c
> sound/soc/codecs/wm8350.c
> sound/soc/codecs/wm8350.h
> sound/soc/codecs/wm8400.c
> sound/soc/codecs/wm8400.h
> sound/soc/pxa/pxa2xx-i2s.c
> sound/soc/pxa/pxa2xx-i2s.h
> sound/soc/pxa/spitz.c
> sound/soc/ti/n810.c
> sound/spi/Kconfig
> sound/spi/Makefile
> sound/spi/at73c213.c
> sound/spi/at73c213.h

Other drivers from this list seem to not be used in any of my devices.

Best regards,
Svyatoslav R.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 08/14] mfd: remove unused aat2870 driver
  2026-09-12  6:42   ` Svyatoslav Ryhel
@ 2026-09-12  8:05     ` Arnd Bergmann
  0 siblings, 0 replies; 7+ messages in thread
From: Arnd Bergmann @ 2026-09-12  8:05 UTC (permalink / raw)
  To: Svyatoslav Ryhel
  Cc: Arnd Bergmann, Alexandre Belloni, Bartosz Golaszewski, Mark Brown,
	Conor Dooley, Daniel Thompson, Helge Deller, devicetree,
	Dmitry Torokhov, dri-devel, Jonathan Cameron, Jingoo Han,
	Krzysztof Kozlowski, Lee Jones, Liam Girdwood, Linus Walleij,
	linux-arm-kernel, linux-doc, linux-fbdev,
	open list:GPIO SUBSYSTEM, linux-hwmon, linux-iio, linux-input,
	linux-kernel, linux-leds, linux-media, linux-pm, linux-rtc,
	linux-sound, linux-watchdog, Guenter Roeck, linuxppc-dev, llvm,
	Mauro Carvalho Chehab, mfd, Michael Hennerich, patches,
	Pavel Machek, Rob Herring, Sebastian Reichel, Support Opensource

On Sat, Sep 12, 2026, at 08:42, Svyatoslav Ryhel wrote:
> чт, 10 вер. 2026 р. о 21:15 Arnd Bergmann <arnd@arndb.de> пише:

>> drivers/leds/leds-lm3530.c
>> drivers/leds/leds-lm3532.c
>
> LM3532 has full OF support and is functional, it just does not have
> device tree users yet. I have a device using it - Motorola Atrix 4G
> (Tegra 2 based).
>
> Here is commit removing LM3532
> https://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git/commit/?id=46a6457870825d8b782d350fdc7e27c540734d41
> Here are my patches bringing up Motorola Atrix 4G support
> https://lore.kernel.org/lkml/20260721100245.444623-3-clamor95@gmail.com/

Ah, perfect: this is actually one of two drivers that I independently
noticed as a false positive while writing the commit logs, and I
dropped the changes in the update I pushed the branch yesterday.

In fact, I saw that there are three other upstream dts files using
this driver. In general, I assumed that anything with a DT binding
has users, with the exception of the devices inside of a removed
SoC and a few PMIC chips that were tightly linked to a removed SoC
from the same manufacturer.

Thanks a lot for checking the list!

      Arnd

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2026-09-12  8:07 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <CAPVz0n0ryOns2sCJE_jFana9MVzwEj1QZuPEa8FNhGbHXnMB+A@mail.gmail.com>
2026-09-10 18:14 ` [PATCH 08/14] mfd: remove unused aat2870 driver Arnd Bergmann
2026-09-10 18:38   ` Guenter Roeck
2026-09-10 19:15     ` Arnd Bergmann
2026-09-10 19:31       ` Guenter Roeck
2026-09-12  6:42   ` Svyatoslav Ryhel
2026-09-12  8:05     ` Arnd Bergmann
2026-09-09 13:21 [PATCH 00/14] mfd: unused driver purge Arnd Bergmann
2026-09-09 13:21 ` [PATCH 08/14] mfd: remove unused aat2870 driver Arnd Bergmann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox