mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd@kernel.org>
To: Lee Jones <lee@kernel.org>, mfd@lists.linux.dev
Cc: linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	Arnd Bergmann <arnd@arndb.de>,
	Daniel Thompson <danielt@kernel.org>,
	Jingoo Han <jingoohan1@gmail.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Liam Girdwood <lgirdwood@gmail.com>,
	Mark Brown <broonie@kernel.org>, Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	Guenter Roeck <linux@roeck-us.net>,
	Linus Walleij <linusw@kernel.org>,
	Bartosz Golaszewski <brgl@kernel.org>,
	Jonathan Cameron <jic23@kernel.org>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Pavel Machek <pavel@kernel.org>,
	Michael Hennerich <michael.hennerich@analog.com>,
	Support Opensource <support.opensource@diasemi.com>,
	Sebastian Reichel <sre@kernel.org>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Helge Deller <deller@gmx.de>,
	dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org,
	linux-media@vger.kernel.org, devicetree@vger.kernel.org,
	linux-hwmon@vger.kernel.org, patches@opensource.cirrus.com,
	linux-watchdog@vger.kernel.org, linux-gpio@vger.kernel.org,
	linux-iio@vger.kernel.org, linux-input@vger.kernel.org,
	linux-leds@vger.kernel.org, linux-pm@vger.kernel.org,
	linux-rtc@vger.kernel.org, linux-fbdev@vger.kernel.org,
	linux-sound@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	llvm@lists.linux.dev
Subject: [PATCH 01/14] mfd: remove unused 88pm80x driver
Date: Wed,  9 Sep 2026 15:21:38 +0200	[thread overview]
Message-ID: <20260909132153.1596191-2-arnd@kernel.org> (raw)
In-Reply-To: <20260909132153.1596191-1-arnd@kernel.org>

From: Arnd Bergmann <arnd@arndb.de>

This pair of drivers was originally added as companion chips for pxa/mmp
SoCs, but the corresponding platform code was never merged, so it has
been unused the entire time.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 .../devicetree/bindings/regulator/88pm800.txt |  38 --
 drivers/input/misc/88pm80x_onkey.c            | 152 -----
 drivers/input/misc/Kconfig                    |  10 -
 drivers/input/misc/Makefile                   |   1 -
 drivers/mfd/88pm800.c                         | 619 ------------------
 drivers/mfd/88pm805.c                         | 275 --------
 drivers/mfd/88pm80x.c                         | 159 -----
 drivers/mfd/Kconfig                           |  24 -
 drivers/mfd/Makefile                          |   2 -
 drivers/regulator/88pm800-regulator.c         | 287 --------
 drivers/regulator/Kconfig                     |  10 -
 drivers/regulator/Makefile                    |   1 -
 drivers/rtc/Kconfig                           |  10 -
 drivers/rtc/Makefile                          |   1 -
 drivers/rtc/rtc-88pm80x.c                     | 340 ----------
 include/linux/mfd/88pm80x.h                   | 370 -----------
 16 files changed, 2299 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/regulator/88pm800.txt
 delete mode 100644 drivers/input/misc/88pm80x_onkey.c
 delete mode 100644 drivers/mfd/88pm800.c
 delete mode 100644 drivers/mfd/88pm805.c
 delete mode 100644 drivers/mfd/88pm80x.c
 delete mode 100644 drivers/regulator/88pm800-regulator.c
 delete mode 100644 drivers/rtc/rtc-88pm80x.c
 delete mode 100644 include/linux/mfd/88pm80x.h

diff --git a/Documentation/devicetree/bindings/regulator/88pm800.txt b/Documentation/devicetree/bindings/regulator/88pm800.txt
deleted file mode 100644
index e8a54c2a5821..000000000000
--- a/Documentation/devicetree/bindings/regulator/88pm800.txt
+++ /dev/null
@@ -1,38 +0,0 @@
-Marvell 88PM800 regulator
-
-Required properties:
-- compatible: "marvell,88pm800"
-- reg: I2C slave address
-- regulators: A node that houses a sub-node for each regulator within the
-  device. Each sub-node is identified using the node's name (or the deprecated
-  regulator-compatible property if present), with valid values listed below.
-  The content of each sub-node is defined by the standard binding for
-  regulators; see regulator.txt.
-
-The valid names for regulators are:
-
-  buck1, buck2, buck3, buck4, buck5, ldo1, ldo2, ldo3, ldo4, ldo5, ldo6, ldo7,
-  ldo8, ldo9, ldo10, ldo11, ldo12, ldo13, ldo14, ldo15, ldo16, ldo17, ldo18, ldo19
-
-Example:
-
-	pmic: 88pm800@31 {
-		compatible = "marvell,88pm800";
-		reg = <0x31>;
-
-		regulators {
-			buck1 {
-			        regulator-min-microvolt = <600000>;
-			        regulator-max-microvolt = <3950000>;
-			        regulator-boot-on;
-			        regulator-always-on;
-			};
-			ldo1 {
-			        regulator-min-microvolt = <600000>;
-			        regulator-max-microvolt = <15000000>;
-			        regulator-boot-on;
-			        regulator-always-on;
-			};
-...
-		};
-	};
diff --git a/drivers/input/misc/88pm80x_onkey.c b/drivers/input/misc/88pm80x_onkey.c
deleted file mode 100644
index fee28e537898..000000000000
--- a/drivers/input/misc/88pm80x_onkey.c
+++ /dev/null
@@ -1,152 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Marvell 88PM80x ONKEY driver
- *
- * Copyright (C) 2012 Marvell International Ltd.
- * Haojian Zhuang <haojian.zhuang@marvell.com>
- * Qiao Zhou <zhouqiao@marvell.com>
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/input.h>
-#include <linux/mfd/88pm80x.h>
-#include <linux/regmap.h>
-#include <linux/slab.h>
-
-#define PM800_LONG_ONKEY_EN		(1 << 0)
-#define PM800_LONG_KEY_DELAY		(8)	/* 1 .. 16 seconds */
-#define PM800_LONKEY_PRESS_TIME		((PM800_LONG_KEY_DELAY-1) << 4)
-#define PM800_LONKEY_PRESS_TIME_MASK	(0xF0)
-#define PM800_SW_PDOWN			(1 << 5)
-
-struct pm80x_onkey_info {
-	struct input_dev *idev;
-	struct pm80x_chip *pm80x;
-	struct regmap *map;
-	int irq;
-};
-
-/* 88PM80x gives us an interrupt when ONKEY is held */
-static irqreturn_t pm80x_onkey_handler(int irq, void *data)
-{
-	struct pm80x_onkey_info *info = data;
-	int ret = 0;
-	unsigned int val;
-
-	ret = regmap_read(info->map, PM800_STATUS_1, &val);
-	if (ret < 0) {
-		dev_err(info->idev->dev.parent, "failed to read status: %d\n", ret);
-		return IRQ_NONE;
-	}
-	val &= PM800_ONKEY_STS1;
-
-	input_report_key(info->idev, KEY_POWER, val);
-	input_sync(info->idev);
-
-	return IRQ_HANDLED;
-}
-
-static SIMPLE_DEV_PM_OPS(pm80x_onkey_pm_ops, pm80x_dev_suspend,
-			 pm80x_dev_resume);
-
-static int pm80x_onkey_probe(struct platform_device *pdev)
-{
-
-	struct pm80x_chip *chip = dev_get_drvdata(pdev->dev.parent);
-	struct pm80x_onkey_info *info;
-	int err;
-
-	info = kzalloc_obj(*info);
-	if (!info)
-		return -ENOMEM;
-
-	info->pm80x = chip;
-
-	info->irq = platform_get_irq(pdev, 0);
-	if (info->irq < 0) {
-		err = -EINVAL;
-		goto out;
-	}
-
-	info->map = info->pm80x->regmap;
-	if (!info->map) {
-		dev_err(&pdev->dev, "no regmap!\n");
-		err = -EINVAL;
-		goto out;
-	}
-
-	info->idev = input_allocate_device();
-	if (!info->idev) {
-		dev_err(&pdev->dev, "Failed to allocate input dev\n");
-		err = -ENOMEM;
-		goto out;
-	}
-
-	info->idev->name = "88pm80x_on";
-	info->idev->phys = "88pm80x_on/input0";
-	info->idev->id.bustype = BUS_I2C;
-	info->idev->dev.parent = &pdev->dev;
-	info->idev->evbit[0] = BIT_MASK(EV_KEY);
-	__set_bit(KEY_POWER, info->idev->keybit);
-
-	err = pm80x_request_irq(info->pm80x, info->irq, pm80x_onkey_handler,
-					    IRQF_ONESHOT, "onkey", info);
-	if (err < 0) {
-		dev_err(&pdev->dev, "Failed to request IRQ: #%d: %d\n",
-			info->irq, err);
-		goto out_reg;
-	}
-
-	err = input_register_device(info->idev);
-	if (err) {
-		dev_err(&pdev->dev, "Can't register input device: %d\n", err);
-		goto out_irq;
-	}
-
-	platform_set_drvdata(pdev, info);
-
-	/* Enable long onkey detection */
-	regmap_update_bits(info->map, PM800_RTC_MISC4, PM800_LONG_ONKEY_EN,
-			   PM800_LONG_ONKEY_EN);
-	/* Set 8-second interval */
-	regmap_update_bits(info->map, PM800_RTC_MISC3,
-			   PM800_LONKEY_PRESS_TIME_MASK,
-			   PM800_LONKEY_PRESS_TIME);
-
-	device_init_wakeup(&pdev->dev, 1);
-	return 0;
-
-out_irq:
-	pm80x_free_irq(info->pm80x, info->irq, info);
-out_reg:
-	input_free_device(info->idev);
-out:
-	kfree(info);
-	return err;
-}
-
-static void pm80x_onkey_remove(struct platform_device *pdev)
-{
-	struct pm80x_onkey_info *info = platform_get_drvdata(pdev);
-
-	pm80x_free_irq(info->pm80x, info->irq, info);
-	input_unregister_device(info->idev);
-	kfree(info);
-}
-
-static struct platform_driver pm80x_onkey_driver = {
-	.driver = {
-		   .name = "88pm80x-onkey",
-		   .pm = &pm80x_onkey_pm_ops,
-		   },
-	.probe = pm80x_onkey_probe,
-	.remove = pm80x_onkey_remove,
-};
-
-module_platform_driver(pm80x_onkey_driver);
-
-MODULE_LICENSE("GPL");
-MODULE_DESCRIPTION("Marvell 88PM80x ONKEY driver");
-MODULE_AUTHOR("Qiao Zhou <zhouqiao@marvell.com>");
-MODULE_ALIAS("platform:88pm80x-onkey");
diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig
index 169768e3d5bb..013ae22311ee 100644
--- a/drivers/input/misc/Kconfig
+++ b/drivers/input/misc/Kconfig
@@ -23,16 +23,6 @@ config INPUT_88PM860X_ONKEY
 	  To compile this driver as a module, choose M here: the module
 	  will be called 88pm860x_onkey.
 
-config INPUT_88PM80X_ONKEY
-	tristate "88PM80x ONKEY support"
-	depends on MFD_88PM800
-	help
-	  Support the ONKEY of Marvell 88PM80x PMICs as an input device
-	  reporting power button status.
-
-	  To compile this driver as a module, choose M here: the module
-	  will be called 88pm80x_onkey.
-
 config INPUT_88PM886_ONKEY
 	tristate "Marvell 88PM886 onkey support"
 	depends on MFD_88PM886_PMIC
diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile
index 1339619f0769..b120799b05eb 100644
--- a/drivers/input/misc/Makefile
+++ b/drivers/input/misc/Makefile
@@ -6,7 +6,6 @@
 # Each configuration option enables a list of files.
 
 obj-$(CONFIG_INPUT_88PM860X_ONKEY)	+= 88pm860x_onkey.o
-obj-$(CONFIG_INPUT_88PM80X_ONKEY)	+= 88pm80x_onkey.o
 obj-$(CONFIG_INPUT_88PM886_ONKEY)	+= 88pm886-onkey.o
 obj-$(CONFIG_INPUT_AB8500_PONKEY)	+= ab8500-ponkey.o
 obj-$(CONFIG_INPUT_AD714X)		+= ad714x.o
diff --git a/drivers/mfd/88pm800.c b/drivers/mfd/88pm800.c
deleted file mode 100644
index e9941da58b18..000000000000
--- a/drivers/mfd/88pm800.c
+++ /dev/null
@@ -1,619 +0,0 @@
-/*
- * Base driver for Marvell 88PM800
- *
- * Copyright (C) 2012 Marvell International Ltd.
- * Haojian Zhuang <haojian.zhuang@marvell.com>
- * Joseph(Yossi) Hanin <yhanin@marvell.com>
- * Qiao Zhou <zhouqiao@marvell.com>
- *
- * This file is subject to the terms and conditions of the GNU General
- * Public License. See the file "COPYING" in the main directory of this
- * archive for more details.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/err.h>
-#include <linux/i2c.h>
-#include <linux/mfd/core.h>
-#include <linux/mfd/88pm80x.h>
-#include <linux/slab.h>
-
-/* Interrupt Registers */
-#define PM800_INT_STATUS1		(0x05)
-#define PM800_ONKEY_INT_STS1		(1 << 0)
-#define PM800_EXTON_INT_STS1		(1 << 1)
-#define PM800_CHG_INT_STS1			(1 << 2)
-#define PM800_BAT_INT_STS1			(1 << 3)
-#define PM800_RTC_INT_STS1			(1 << 4)
-#define PM800_CLASSD_OC_INT_STS1	(1 << 5)
-
-#define PM800_INT_STATUS2		(0x06)
-#define PM800_VBAT_INT_STS2		(1 << 0)
-#define PM800_VSYS_INT_STS2		(1 << 1)
-#define PM800_VCHG_INT_STS2		(1 << 2)
-#define PM800_TINT_INT_STS2		(1 << 3)
-#define PM800_GPADC0_INT_STS2	(1 << 4)
-#define PM800_TBAT_INT_STS2		(1 << 5)
-#define PM800_GPADC2_INT_STS2	(1 << 6)
-#define PM800_GPADC3_INT_STS2	(1 << 7)
-
-#define PM800_INT_STATUS3		(0x07)
-
-#define PM800_INT_STATUS4		(0x08)
-#define PM800_GPIO0_INT_STS4		(1 << 0)
-#define PM800_GPIO1_INT_STS4		(1 << 1)
-#define PM800_GPIO2_INT_STS4		(1 << 2)
-#define PM800_GPIO3_INT_STS4		(1 << 3)
-#define PM800_GPIO4_INT_STS4		(1 << 4)
-
-#define PM800_INT_ENA_1		(0x09)
-#define PM800_ONKEY_INT_ENA1		(1 << 0)
-#define PM800_EXTON_INT_ENA1		(1 << 1)
-#define PM800_CHG_INT_ENA1			(1 << 2)
-#define PM800_BAT_INT_ENA1			(1 << 3)
-#define PM800_RTC_INT_ENA1			(1 << 4)
-#define PM800_CLASSD_OC_INT_ENA1	(1 << 5)
-
-#define PM800_INT_ENA_2		(0x0A)
-#define PM800_VBAT_INT_ENA2		(1 << 0)
-#define PM800_VSYS_INT_ENA2		(1 << 1)
-#define PM800_VCHG_INT_ENA2		(1 << 2)
-#define PM800_TINT_INT_ENA2		(1 << 3)
-
-#define PM800_INT_ENA_3		(0x0B)
-#define PM800_GPADC0_INT_ENA3		(1 << 0)
-#define PM800_GPADC1_INT_ENA3		(1 << 1)
-#define PM800_GPADC2_INT_ENA3		(1 << 2)
-#define PM800_GPADC3_INT_ENA3		(1 << 3)
-#define PM800_GPADC4_INT_ENA3		(1 << 4)
-
-#define PM800_INT_ENA_4		(0x0C)
-#define PM800_GPIO0_INT_ENA4		(1 << 0)
-#define PM800_GPIO1_INT_ENA4		(1 << 1)
-#define PM800_GPIO2_INT_ENA4		(1 << 2)
-#define PM800_GPIO3_INT_ENA4		(1 << 3)
-#define PM800_GPIO4_INT_ENA4		(1 << 4)
-
-/* number of INT_ENA & INT_STATUS regs */
-#define PM800_INT_REG_NUM			(4)
-
-/* Interrupt Number in 88PM800 */
-enum {
-	PM800_IRQ_ONKEY,	/*EN1b0 *//*0 */
-	PM800_IRQ_EXTON,	/*EN1b1 */
-	PM800_IRQ_CHG,		/*EN1b2 */
-	PM800_IRQ_BAT,		/*EN1b3 */
-	PM800_IRQ_RTC,		/*EN1b4 */
-	PM800_IRQ_CLASSD,	/*EN1b5 *//*5 */
-	PM800_IRQ_VBAT,		/*EN2b0 */
-	PM800_IRQ_VSYS,		/*EN2b1 */
-	PM800_IRQ_VCHG,		/*EN2b2 */
-	PM800_IRQ_TINT,		/*EN2b3 */
-	PM800_IRQ_GPADC0,	/*EN3b0 *//*10 */
-	PM800_IRQ_GPADC1,	/*EN3b1 */
-	PM800_IRQ_GPADC2,	/*EN3b2 */
-	PM800_IRQ_GPADC3,	/*EN3b3 */
-	PM800_IRQ_GPADC4,	/*EN3b4 */
-	PM800_IRQ_GPIO0,	/*EN4b0 *//*15 */
-	PM800_IRQ_GPIO1,	/*EN4b1 */
-	PM800_IRQ_GPIO2,	/*EN4b2 */
-	PM800_IRQ_GPIO3,	/*EN4b3 */
-	PM800_IRQ_GPIO4,	/*EN4b4 *//*19 */
-	PM800_MAX_IRQ,
-};
-
-/* PM800: generation identification number */
-#define PM800_CHIP_GEN_ID_NUM	0x3
-
-static const struct i2c_device_id pm80x_id_table[] = {
-	{ "88PM800" },
-	{} /* NULL terminated */
-};
-MODULE_DEVICE_TABLE(i2c, pm80x_id_table);
-
-static const struct resource rtc_resources[] = {
-	DEFINE_RES_IRQ_NAMED(PM800_IRQ_RTC, "88pm80x-rtc"),
-};
-
-static struct mfd_cell rtc_devs[] = {
-	{
-	 .name = "88pm80x-rtc",
-	 .num_resources = ARRAY_SIZE(rtc_resources),
-	 .resources = &rtc_resources[0],
-	 .id = -1,
-	 },
-};
-
-static struct resource onkey_resources[] = {
-	DEFINE_RES_IRQ_NAMED(PM800_IRQ_ONKEY, "88pm80x-onkey"),
-};
-
-static const struct mfd_cell onkey_devs[] = {
-	{
-	 .name = "88pm80x-onkey",
-	 .num_resources = 1,
-	 .resources = &onkey_resources[0],
-	 .id = -1,
-	 },
-};
-
-static const struct mfd_cell regulator_devs[] = {
-	{
-	 .name = "88pm80x-regulator",
-	 .id = -1,
-	},
-};
-
-static const struct regmap_irq pm800_irqs[] = {
-	/* INT0 */
-	[PM800_IRQ_ONKEY] = {
-		.mask = PM800_ONKEY_INT_ENA1,
-	},
-	[PM800_IRQ_EXTON] = {
-		.mask = PM800_EXTON_INT_ENA1,
-	},
-	[PM800_IRQ_CHG] = {
-		.mask = PM800_CHG_INT_ENA1,
-	},
-	[PM800_IRQ_BAT] = {
-		.mask = PM800_BAT_INT_ENA1,
-	},
-	[PM800_IRQ_RTC] = {
-		.mask = PM800_RTC_INT_ENA1,
-	},
-	[PM800_IRQ_CLASSD] = {
-		.mask = PM800_CLASSD_OC_INT_ENA1,
-	},
-	/* INT1 */
-	[PM800_IRQ_VBAT] = {
-		.reg_offset = 1,
-		.mask = PM800_VBAT_INT_ENA2,
-	},
-	[PM800_IRQ_VSYS] = {
-		.reg_offset = 1,
-		.mask = PM800_VSYS_INT_ENA2,
-	},
-	[PM800_IRQ_VCHG] = {
-		.reg_offset = 1,
-		.mask = PM800_VCHG_INT_ENA2,
-	},
-	[PM800_IRQ_TINT] = {
-		.reg_offset = 1,
-		.mask = PM800_TINT_INT_ENA2,
-	},
-	/* INT2 */
-	[PM800_IRQ_GPADC0] = {
-		.reg_offset = 2,
-		.mask = PM800_GPADC0_INT_ENA3,
-	},
-	[PM800_IRQ_GPADC1] = {
-		.reg_offset = 2,
-		.mask = PM800_GPADC1_INT_ENA3,
-	},
-	[PM800_IRQ_GPADC2] = {
-		.reg_offset = 2,
-		.mask = PM800_GPADC2_INT_ENA3,
-	},
-	[PM800_IRQ_GPADC3] = {
-		.reg_offset = 2,
-		.mask = PM800_GPADC3_INT_ENA3,
-	},
-	[PM800_IRQ_GPADC4] = {
-		.reg_offset = 2,
-		.mask = PM800_GPADC4_INT_ENA3,
-	},
-	/* INT3 */
-	[PM800_IRQ_GPIO0] = {
-		.reg_offset = 3,
-		.mask = PM800_GPIO0_INT_ENA4,
-	},
-	[PM800_IRQ_GPIO1] = {
-		.reg_offset = 3,
-		.mask = PM800_GPIO1_INT_ENA4,
-	},
-	[PM800_IRQ_GPIO2] = {
-		.reg_offset = 3,
-		.mask = PM800_GPIO2_INT_ENA4,
-	},
-	[PM800_IRQ_GPIO3] = {
-		.reg_offset = 3,
-		.mask = PM800_GPIO3_INT_ENA4,
-	},
-	[PM800_IRQ_GPIO4] = {
-		.reg_offset = 3,
-		.mask = PM800_GPIO4_INT_ENA4,
-	},
-};
-
-static int device_gpadc_init(struct pm80x_chip *chip,
-				       struct pm80x_platform_data *pdata)
-{
-	struct pm80x_subchip *subchip = chip->subchip;
-	struct regmap *map = subchip->regmap_gpadc;
-	int data = 0, mask = 0, ret = 0;
-
-	if (!map) {
-		dev_warn(chip->dev,
-			 "Warning: gpadc regmap is not available!\n");
-		return -EINVAL;
-	}
-	/*
-	 * initialize GPADC without activating it turn on GPADC
-	 * measurments
-	 */
-	ret = regmap_update_bits(map,
-				 PM800_GPADC_MISC_CONFIG2,
-				 PM800_GPADC_MISC_GPFSM_EN,
-				 PM800_GPADC_MISC_GPFSM_EN);
-	if (ret < 0)
-		goto out;
-	/*
-	 * This function configures the ADC as requires for
-	 * CP implementation.CP does not "own" the ADC configuration
-	 * registers and relies on AP.
-	 * Reason: enable automatic ADC measurements needed
-	 * for CP to get VBAT and RF temperature readings.
-	 */
-	ret = regmap_update_bits(map, PM800_GPADC_MEAS_EN1,
-				 PM800_MEAS_EN1_VBAT, PM800_MEAS_EN1_VBAT);
-	if (ret < 0)
-		goto out;
-	ret = regmap_update_bits(map, PM800_GPADC_MEAS_EN2,
-				 (PM800_MEAS_EN2_RFTMP | PM800_MEAS_GP0_EN),
-				 (PM800_MEAS_EN2_RFTMP | PM800_MEAS_GP0_EN));
-	if (ret < 0)
-		goto out;
-
-	/*
-	 * the defult of PM800 is GPADC operates at 100Ks/s rate
-	 * and Number of GPADC slots with active current bias prior
-	 * to GPADC sampling = 1 slot for all GPADCs set for
-	 * Temprature mesurmants
-	 */
-	mask = (PM800_GPADC_GP_BIAS_EN0 | PM800_GPADC_GP_BIAS_EN1 |
-		PM800_GPADC_GP_BIAS_EN2 | PM800_GPADC_GP_BIAS_EN3);
-
-	if (pdata && (pdata->batt_det == 0))
-		data = (PM800_GPADC_GP_BIAS_EN0 | PM800_GPADC_GP_BIAS_EN1 |
-			PM800_GPADC_GP_BIAS_EN2 | PM800_GPADC_GP_BIAS_EN3);
-	else
-		data = (PM800_GPADC_GP_BIAS_EN0 | PM800_GPADC_GP_BIAS_EN2 |
-			PM800_GPADC_GP_BIAS_EN3);
-
-	ret = regmap_update_bits(map, PM800_GP_BIAS_ENA1, mask, data);
-	if (ret < 0)
-		goto out;
-
-	dev_info(chip->dev, "pm800 device_gpadc_init: Done\n");
-	return 0;
-
-out:
-	dev_info(chip->dev, "pm800 device_gpadc_init: Failed!\n");
-	return ret;
-}
-
-static int device_onkey_init(struct pm80x_chip *chip,
-				struct pm80x_platform_data *pdata)
-{
-	int ret;
-
-	ret = mfd_add_devices(chip->dev, 0, &onkey_devs[0],
-			      ARRAY_SIZE(onkey_devs), &onkey_resources[0], 0,
-			      NULL);
-	if (ret) {
-		dev_err(chip->dev, "Failed to add onkey subdev\n");
-		return ret;
-	}
-
-	return 0;
-}
-
-static int device_rtc_init(struct pm80x_chip *chip,
-				struct pm80x_platform_data *pdata)
-{
-	int ret;
-
-	if (pdata) {
-		rtc_devs[0].platform_data = pdata->rtc;
-		rtc_devs[0].pdata_size =
-				pdata->rtc ? sizeof(struct pm80x_rtc_pdata) : 0;
-	}
-	ret = mfd_add_devices(chip->dev, 0, &rtc_devs[0],
-			      ARRAY_SIZE(rtc_devs), NULL, 0, NULL);
-	if (ret) {
-		dev_err(chip->dev, "Failed to add rtc subdev\n");
-		return ret;
-	}
-
-	return 0;
-}
-
-static int device_regulator_init(struct pm80x_chip *chip,
-					   struct pm80x_platform_data *pdata)
-{
-	int ret;
-
-	ret = mfd_add_devices(chip->dev, 0, &regulator_devs[0],
-			      ARRAY_SIZE(regulator_devs), NULL, 0, NULL);
-	if (ret) {
-		dev_err(chip->dev, "Failed to add regulator subdev\n");
-		return ret;
-	}
-
-	return 0;
-}
-
-static int device_irq_init_800(struct pm80x_chip *chip)
-{
-	struct regmap *map = chip->regmap;
-	unsigned long flags = IRQF_ONESHOT;
-	int data, mask, ret = -EINVAL;
-
-	if (!map || !chip->irq) {
-		dev_err(chip->dev, "incorrect parameters\n");
-		return -EINVAL;
-	}
-
-	/*
-	 * irq_mode defines the way of clearing interrupt. it's read-clear by
-	 * default.
-	 */
-	mask =
-	    PM800_WAKEUP2_INV_INT | PM800_WAKEUP2_INT_CLEAR |
-	    PM800_WAKEUP2_INT_MASK;
-
-	data = PM800_WAKEUP2_INT_CLEAR;
-	ret = regmap_update_bits(map, PM800_WAKEUP2, mask, data);
-
-	if (ret < 0)
-		goto out;
-
-	ret =
-	    regmap_add_irq_chip(chip->regmap, chip->irq, flags, -1,
-				chip->regmap_irq_chip, &chip->irq_data);
-
-out:
-	return ret;
-}
-
-static void device_irq_exit_800(struct pm80x_chip *chip)
-{
-	regmap_del_irq_chip(chip->irq, chip->irq_data);
-}
-
-static const struct regmap_irq_chip pm800_irq_chip = {
-	.name = "88pm800",
-	.irqs = pm800_irqs,
-	.num_irqs = ARRAY_SIZE(pm800_irqs),
-
-	.num_regs = 4,
-	.status_base = PM800_INT_STATUS1,
-	.unmask_base = PM800_INT_ENA_1,
-	.ack_base = PM800_INT_STATUS1,
-};
-
-static int pm800_pages_init(struct pm80x_chip *chip)
-{
-	struct pm80x_subchip *subchip;
-	struct i2c_client *client = chip->client;
-
-	int ret = 0;
-
-	subchip = chip->subchip;
-	if (!subchip || !subchip->power_page_addr || !subchip->gpadc_page_addr)
-		return -ENODEV;
-
-	/* PM800 block power page */
-	subchip->power_page = i2c_new_dummy_device(client->adapter,
-					    subchip->power_page_addr);
-	if (IS_ERR(subchip->power_page)) {
-		ret = PTR_ERR(subchip->power_page);
-		goto out;
-	}
-
-	subchip->regmap_power = devm_regmap_init_i2c(subchip->power_page,
-						     &pm80x_regmap_config);
-	if (IS_ERR(subchip->regmap_power)) {
-		ret = PTR_ERR(subchip->regmap_power);
-		dev_err(chip->dev,
-			"Failed to allocate regmap_power: %d\n", ret);
-		goto out;
-	}
-
-	i2c_set_clientdata(subchip->power_page, chip);
-
-	/* PM800 block GPADC */
-	subchip->gpadc_page = i2c_new_dummy_device(client->adapter,
-					    subchip->gpadc_page_addr);
-	if (IS_ERR(subchip->gpadc_page)) {
-		ret = PTR_ERR(subchip->gpadc_page);
-		goto out;
-	}
-
-	subchip->regmap_gpadc = devm_regmap_init_i2c(subchip->gpadc_page,
-						     &pm80x_regmap_config);
-	if (IS_ERR(subchip->regmap_gpadc)) {
-		ret = PTR_ERR(subchip->regmap_gpadc);
-		dev_err(chip->dev,
-			"Failed to allocate regmap_gpadc: %d\n", ret);
-		goto out;
-	}
-	i2c_set_clientdata(subchip->gpadc_page, chip);
-
-out:
-	return ret;
-}
-
-static void pm800_pages_exit(struct pm80x_chip *chip)
-{
-	struct pm80x_subchip *subchip;
-
-	subchip = chip->subchip;
-
-	if (subchip && subchip->power_page)
-		i2c_unregister_device(subchip->power_page);
-
-	if (subchip && subchip->gpadc_page)
-		i2c_unregister_device(subchip->gpadc_page);
-}
-
-static int device_800_init(struct pm80x_chip *chip,
-				     struct pm80x_platform_data *pdata)
-{
-	int ret;
-	unsigned int val;
-
-	/*
-	 * alarm wake up bit will be clear in device_irq_init(),
-	 * read before that
-	 */
-	ret = regmap_read(chip->regmap, PM800_RTC_CONTROL, &val);
-	if (ret < 0) {
-		dev_err(chip->dev, "Failed to read RTC register: %d\n", ret);
-		goto out;
-	}
-	if (val & PM800_ALARM_WAKEUP) {
-		if (pdata && pdata->rtc)
-			pdata->rtc->rtc_wakeup = 1;
-	}
-
-	ret = device_gpadc_init(chip, pdata);
-	if (ret < 0) {
-		dev_err(chip->dev, "[%s]Failed to init gpadc\n", __func__);
-		goto out;
-	}
-
-	chip->regmap_irq_chip = &pm800_irq_chip;
-
-	ret = device_irq_init_800(chip);
-	if (ret < 0) {
-		dev_err(chip->dev, "[%s]Failed to init pm800 irq\n", __func__);
-		goto out;
-	}
-
-	ret = device_onkey_init(chip, pdata);
-	if (ret) {
-		dev_err(chip->dev, "Failed to add onkey subdev\n");
-		goto out_dev;
-	}
-
-	ret = device_rtc_init(chip, pdata);
-	if (ret) {
-		dev_err(chip->dev, "Failed to add rtc subdev\n");
-		goto out;
-	}
-
-	ret = device_regulator_init(chip, pdata);
-	if (ret) {
-		dev_err(chip->dev, "Failed to add regulators subdev\n");
-		goto out;
-	}
-
-	return 0;
-out_dev:
-	mfd_remove_devices(chip->dev);
-	device_irq_exit_800(chip);
-out:
-	return ret;
-}
-
-static int pm800_probe(struct i2c_client *client)
-{
-	int ret = 0;
-	struct pm80x_chip *chip;
-	struct pm80x_platform_data *pdata = dev_get_platdata(&client->dev);
-	struct pm80x_subchip *subchip;
-
-	ret = pm80x_init(client);
-	if (ret) {
-		dev_err(&client->dev, "pm800_init fail\n");
-		goto out_init;
-	}
-
-	chip = i2c_get_clientdata(client);
-
-	/* init subchip for PM800 */
-	subchip =
-	    devm_kzalloc(&client->dev, sizeof(struct pm80x_subchip),
-			 GFP_KERNEL);
-	if (!subchip) {
-		ret = -ENOMEM;
-		goto err_subchip_alloc;
-	}
-
-	/* pm800 has 2 addtional pages to support power and gpadc. */
-	subchip->power_page_addr = client->addr + 1;
-	subchip->gpadc_page_addr = client->addr + 2;
-	chip->subchip = subchip;
-
-	ret = pm800_pages_init(chip);
-	if (ret) {
-		dev_err(&client->dev, "pm800_pages_init failed!\n");
-		goto err_device_init;
-	}
-
-	ret = device_800_init(chip, pdata);
-	if (ret) {
-		dev_err(chip->dev, "Failed to initialize 88pm800 devices\n");
-		goto err_device_init;
-	}
-
-	if (pdata && pdata->plat_config)
-		pdata->plat_config(chip, pdata);
-
-	return 0;
-
-err_device_init:
-	pm800_pages_exit(chip);
-err_subchip_alloc:
-	pm80x_deinit();
-out_init:
-	return ret;
-}
-
-static void pm800_remove(struct i2c_client *client)
-{
-	struct pm80x_chip *chip = i2c_get_clientdata(client);
-
-	mfd_remove_devices(chip->dev);
-	device_irq_exit_800(chip);
-
-	pm800_pages_exit(chip);
-	pm80x_deinit();
-}
-
-static struct i2c_driver pm800_driver = {
-	.driver = {
-		.name = "88PM800",
-		.pm = pm_sleep_ptr(&pm80x_pm_ops),
-		},
-	.probe = pm800_probe,
-	.remove = pm800_remove,
-	.id_table = pm80x_id_table,
-};
-
-static int __init pm800_i2c_init(void)
-{
-	return i2c_add_driver(&pm800_driver);
-}
-subsys_initcall(pm800_i2c_init);
-
-static void __exit pm800_i2c_exit(void)
-{
-	i2c_del_driver(&pm800_driver);
-}
-module_exit(pm800_i2c_exit);
-
-MODULE_DESCRIPTION("PMIC Driver for Marvell 88PM800");
-MODULE_AUTHOR("Qiao Zhou <zhouqiao@marvell.com>");
-MODULE_LICENSE("GPL");
diff --git a/drivers/mfd/88pm805.c b/drivers/mfd/88pm805.c
deleted file mode 100644
index f5d6663172ee..000000000000
--- a/drivers/mfd/88pm805.c
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * Base driver for Marvell 88PM805
- *
- * Copyright (C) 2012 Marvell International Ltd.
- * Haojian Zhuang <haojian.zhuang@marvell.com>
- * Joseph(Yossi) Hanin <yhanin@marvell.com>
- * Qiao Zhou <zhouqiao@marvell.com>
- *
- * This file is subject to the terms and conditions of the GNU General
- * Public License. See the file "COPYING" in the main directory of this
- * archive for more details.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/i2c.h>
-#include <linux/irq.h>
-#include <linux/mfd/core.h>
-#include <linux/mfd/88pm80x.h>
-#include <linux/slab.h>
-#include <linux/delay.h>
-
-static const struct i2c_device_id pm80x_id_table[] = {
-	{ "88PM805" },
-	{} /* NULL terminated */
-};
-MODULE_DEVICE_TABLE(i2c, pm80x_id_table);
-
-/* Interrupt Number in 88PM805 */
-enum {
-	PM805_IRQ_LDO_OFF,	/*0 */
-	PM805_IRQ_SRC_DPLL_LOCK,	/*1 */
-	PM805_IRQ_CLIP_FAULT,
-	PM805_IRQ_MIC_CONFLICT,
-	PM805_IRQ_HP2_SHRT,
-	PM805_IRQ_HP1_SHRT,	/*5 */
-	PM805_IRQ_FINE_PLL_FAULT,
-	PM805_IRQ_RAW_PLL_FAULT,
-	PM805_IRQ_VOLP_BTN_DET,
-	PM805_IRQ_VOLM_BTN_DET,
-	PM805_IRQ_SHRT_BTN_DET,	/*10 */
-	PM805_IRQ_MIC_DET,	/*11 */
-
-	PM805_MAX_IRQ,
-};
-
-static struct resource codec_resources[] = {
-	/* Headset microphone insertion or removal */
-	DEFINE_RES_IRQ_NAMED(PM805_IRQ_MIC_DET, "micin"),
-
-	/* Audio short HP1 */
-	DEFINE_RES_IRQ_NAMED(PM805_IRQ_HP1_SHRT, "audio-short1"),
-
-	/* Audio short HP2 */
-	DEFINE_RES_IRQ_NAMED(PM805_IRQ_HP2_SHRT, "audio-short2"),
-};
-
-static const struct mfd_cell codec_devs[] = {
-	{
-	 .name = "88pm80x-codec",
-	 .num_resources = ARRAY_SIZE(codec_resources),
-	 .resources = &codec_resources[0],
-	 .id = -1,
-	 },
-};
-
-static const struct regmap_irq pm805_irqs[] = {
-	/* INT0 */
-	[PM805_IRQ_LDO_OFF] = {
-		.mask = PM805_INT1_HP1_SHRT,
-	},
-	[PM805_IRQ_SRC_DPLL_LOCK] = {
-		.mask = PM805_INT1_HP2_SHRT,
-	},
-	[PM805_IRQ_CLIP_FAULT] = {
-		.mask = PM805_INT1_MIC_CONFLICT,
-	},
-	[PM805_IRQ_MIC_CONFLICT] = {
-		.mask = PM805_INT1_CLIP_FAULT,
-	},
-	[PM805_IRQ_HP2_SHRT] = {
-		.mask = PM805_INT1_LDO_OFF,
-	},
-	[PM805_IRQ_HP1_SHRT] = {
-		.mask = PM805_INT1_SRC_DPLL_LOCK,
-	},
-	/* INT1 */
-	[PM805_IRQ_FINE_PLL_FAULT] = {
-		.reg_offset = 1,
-		.mask = PM805_INT2_MIC_DET,
-	},
-	[PM805_IRQ_RAW_PLL_FAULT] = {
-		.reg_offset = 1,
-		.mask = PM805_INT2_SHRT_BTN_DET,
-	},
-	[PM805_IRQ_VOLP_BTN_DET] = {
-		.reg_offset = 1,
-		.mask = PM805_INT2_VOLM_BTN_DET,
-	},
-	[PM805_IRQ_VOLM_BTN_DET] = {
-		.reg_offset = 1,
-		.mask = PM805_INT2_VOLP_BTN_DET,
-	},
-	[PM805_IRQ_SHRT_BTN_DET] = {
-		.reg_offset = 1,
-		.mask = PM805_INT2_RAW_PLL_FAULT,
-	},
-	[PM805_IRQ_MIC_DET] = {
-		.reg_offset = 1,
-		.mask = PM805_INT2_FINE_PLL_FAULT,
-	},
-};
-
-static int device_irq_init_805(struct pm80x_chip *chip)
-{
-	struct regmap *map = chip->regmap;
-	unsigned long flags = IRQF_ONESHOT;
-	int data, mask, ret = -EINVAL;
-
-	if (!map || !chip->irq) {
-		dev_err(chip->dev, "incorrect parameters\n");
-		return -EINVAL;
-	}
-
-	/*
-	 * irq_mode defines the way of clearing interrupt. it's read-clear by
-	 * default.
-	 */
-	mask =
-	    PM805_STATUS0_INT_CLEAR | PM805_STATUS0_INV_INT |
-	    PM800_STATUS0_INT_MASK;
-
-	data = PM805_STATUS0_INT_CLEAR;
-	ret = regmap_update_bits(map, PM805_INT_STATUS0, mask, data);
-	/*
-	 * PM805_INT_STATUS is under 32K clock domain, so need to
-	 * add proper delay before the next I2C register access.
-	 */
-	usleep_range(1000, 3000);
-
-	if (ret < 0)
-		goto out;
-
-	ret =
-	    regmap_add_irq_chip(chip->regmap, chip->irq, flags, -1,
-				chip->regmap_irq_chip, &chip->irq_data);
-
-out:
-	return ret;
-}
-
-static void device_irq_exit_805(struct pm80x_chip *chip)
-{
-	regmap_del_irq_chip(chip->irq, chip->irq_data);
-}
-
-static const struct regmap_irq_chip pm805_irq_chip = {
-	.name = "88pm805",
-	.irqs = pm805_irqs,
-	.num_irqs = ARRAY_SIZE(pm805_irqs),
-
-	.num_regs = 2,
-	.status_base = PM805_INT_STATUS1,
-	.mask_base = PM805_INT_MASK1,
-	.ack_base = PM805_INT_STATUS1,
-};
-
-static int device_805_init(struct pm80x_chip *chip)
-{
-	int ret = 0;
-	struct regmap *map = chip->regmap;
-
-	if (!map) {
-		dev_err(chip->dev, "regmap is invalid\n");
-		return -EINVAL;
-	}
-
-	chip->regmap_irq_chip = &pm805_irq_chip;
-
-	ret = device_irq_init_805(chip);
-	if (ret < 0) {
-		dev_err(chip->dev, "Failed to init pm805 irq!\n");
-		goto out_irq_init;
-	}
-
-	ret = mfd_add_devices(chip->dev, 0, &codec_devs[0],
-			      ARRAY_SIZE(codec_devs), &codec_resources[0], 0,
-			      NULL);
-	if (ret < 0) {
-		dev_err(chip->dev, "Failed to add codec subdev\n");
-		goto out_codec;
-	} else
-		dev_info(chip->dev, "[%s]:Added mfd codec_devs\n", __func__);
-
-	return 0;
-
-out_codec:
-	device_irq_exit_805(chip);
-out_irq_init:
-	return ret;
-}
-
-static int pm805_probe(struct i2c_client *client)
-{
-	int ret = 0;
-	struct pm80x_chip *chip;
-	struct pm80x_platform_data *pdata = dev_get_platdata(&client->dev);
-
-	ret = pm80x_init(client);
-	if (ret) {
-		dev_err(&client->dev, "pm805_init fail!\n");
-		goto out_init;
-	}
-
-	chip = i2c_get_clientdata(client);
-
-	ret = device_805_init(chip);
-	if (ret) {
-		dev_err(chip->dev, "Failed to initialize 88pm805 devices\n");
-		goto err_805_init;
-	}
-
-	if (pdata && pdata->plat_config)
-		pdata->plat_config(chip, pdata);
-
-err_805_init:
-	pm80x_deinit();
-out_init:
-	return ret;
-}
-
-static void pm805_remove(struct i2c_client *client)
-{
-	struct pm80x_chip *chip = i2c_get_clientdata(client);
-
-	mfd_remove_devices(chip->dev);
-	device_irq_exit_805(chip);
-
-	pm80x_deinit();
-}
-
-static struct i2c_driver pm805_driver = {
-	.driver = {
-		.name = "88PM805",
-		.pm = pm_sleep_ptr(&pm80x_pm_ops),
-		},
-	.probe = pm805_probe,
-	.remove = pm805_remove,
-	.id_table = pm80x_id_table,
-};
-
-static int __init pm805_i2c_init(void)
-{
-	return i2c_add_driver(&pm805_driver);
-}
-subsys_initcall(pm805_i2c_init);
-
-static void __exit pm805_i2c_exit(void)
-{
-	i2c_del_driver(&pm805_driver);
-}
-module_exit(pm805_i2c_exit);
-
-MODULE_DESCRIPTION("PMIC Driver for Marvell 88PM805");
-MODULE_AUTHOR("Qiao Zhou <zhouqiao@marvell.com>");
-MODULE_LICENSE("GPL");
diff --git a/drivers/mfd/88pm80x.c b/drivers/mfd/88pm80x.c
deleted file mode 100644
index bbc1a87f0c8f..000000000000
--- a/drivers/mfd/88pm80x.c
+++ /dev/null
@@ -1,159 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * I2C driver for Marvell 88PM80x
- *
- * Copyright (C) 2012 Marvell International Ltd.
- * Haojian Zhuang <haojian.zhuang@marvell.com>
- * Joseph(Yossi) Hanin <yhanin@marvell.com>
- * Qiao Zhou <zhouqiao@marvell.com>
- */
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/i2c.h>
-#include <linux/mfd/88pm80x.h>
-#include <linux/slab.h>
-#include <linux/uaccess.h>
-#include <linux/err.h>
-
-/* 88pm80x chips have same definition for chip id register. */
-#define PM80X_CHIP_ID			(0x00)
-#define PM80X_CHIP_ID_NUM(x)		(((x) >> 5) & 0x7)
-#define PM80X_CHIP_ID_REVISION(x)	((x) & 0x1F)
-
-struct pm80x_chip_mapping {
-	unsigned int	id;
-	int		type;
-};
-
-static struct pm80x_chip_mapping chip_mapping[] = {
-	/* 88PM800 chip id number */
-	{0x3,	CHIP_PM800},
-	/* 88PM805 chip id number */
-	{0x0,	CHIP_PM805},
-	/* 88PM860 chip id number */
-	{0x4,	CHIP_PM860},
-};
-
-/*
- * workaround: some registers needed by pm805 are defined in pm800, so
- * need to use this global variable to maintain the relation between
- * pm800 and pm805. would remove it after HW chip fixes the issue.
- */
-static struct pm80x_chip *g_pm80x_chip;
-
-const struct regmap_config pm80x_regmap_config = {
-	.reg_bits = 8,
-	.val_bits = 8,
-};
-EXPORT_SYMBOL_GPL(pm80x_regmap_config);
-
-
-int pm80x_init(struct i2c_client *client)
-{
-	struct pm80x_chip *chip;
-	struct regmap *map;
-	unsigned int val;
-	int i, ret = 0;
-
-	chip =
-	    devm_kzalloc(&client->dev, sizeof(struct pm80x_chip), GFP_KERNEL);
-	if (!chip)
-		return -ENOMEM;
-
-	map = devm_regmap_init_i2c(client, &pm80x_regmap_config);
-	if (IS_ERR(map)) {
-		ret = PTR_ERR(map);
-		dev_err(&client->dev, "Failed to allocate register map: %d\n",
-			ret);
-		return ret;
-	}
-
-	chip->client = client;
-	chip->regmap = map;
-
-	chip->irq = client->irq;
-
-	chip->dev = &client->dev;
-	i2c_set_clientdata(chip->client, chip);
-
-	ret = regmap_read(chip->regmap, PM80X_CHIP_ID, &val);
-	if (ret < 0) {
-		dev_err(chip->dev, "Failed to read CHIP ID: %d\n", ret);
-		return ret;
-	}
-
-	for (i = 0; i < ARRAY_SIZE(chip_mapping); i++) {
-		if (chip_mapping[i].id == PM80X_CHIP_ID_NUM(val)) {
-			chip->type = chip_mapping[i].type;
-			break;
-		}
-	}
-
-	if (i == ARRAY_SIZE(chip_mapping)) {
-		dev_err(chip->dev,
-			"Failed to detect Marvell 88PM800:ChipID[0x%x]\n", val);
-		return -EINVAL;
-	}
-
-	device_init_wakeup(&client->dev, 1);
-
-	/*
-	 * workaround: set g_pm80x_chip to the first probed chip. if the
-	 * second chip is probed, just point to the companion to each
-	 * other so that pm805 can access those specific register. would
-	 * remove it after HW chip fixes the issue.
-	 */
-	if (!g_pm80x_chip)
-		g_pm80x_chip = chip;
-	else {
-		chip->companion = g_pm80x_chip->client;
-		g_pm80x_chip->companion = chip->client;
-	}
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(pm80x_init);
-
-int pm80x_deinit(void)
-{
-	/*
-	 * workaround: clear the dependency between pm800 and pm805.
-	 * would remove it after HW chip fixes the issue.
-	 */
-	if (g_pm80x_chip->companion)
-		g_pm80x_chip->companion = NULL;
-	else
-		g_pm80x_chip = NULL;
-	return 0;
-}
-EXPORT_SYMBOL_GPL(pm80x_deinit);
-
-static int pm80x_suspend(struct device *dev)
-{
-	struct i2c_client *client = to_i2c_client(dev);
-	struct pm80x_chip *chip = i2c_get_clientdata(client);
-
-	if (chip && chip->wu_flag)
-		if (device_may_wakeup(chip->dev))
-			enable_irq_wake(chip->irq);
-
-	return 0;
-}
-
-static int pm80x_resume(struct device *dev)
-{
-	struct i2c_client *client = to_i2c_client(dev);
-	struct pm80x_chip *chip = i2c_get_clientdata(client);
-
-	if (chip && chip->wu_flag)
-		if (device_may_wakeup(chip->dev))
-			disable_irq_wake(chip->irq);
-
-	return 0;
-}
-
-EXPORT_GPL_SIMPLE_DEV_PM_OPS(pm80x_pm_ops, pm80x_suspend, pm80x_resume);
-
-MODULE_DESCRIPTION("I2C Driver for Marvell 88PM80x");
-MODULE_AUTHOR("Qiao Zhou <zhouqiao@marvell.com>");
-MODULE_LICENSE("GPL");
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index e4fd4572472f..de81d2bb4917 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -858,30 +858,6 @@ config MFD_KEMPLD
 	  This driver can also be built as a module. If so, the module
 	  will be called kempld-core.
 
-config MFD_88PM800
-	tristate "Marvell 88PM800"
-	depends on I2C
-	select REGMAP_I2C
-	select REGMAP_IRQ
-	select MFD_CORE
-	help
-	  This supports for Marvell 88PM800 Power Management IC.
-	  This includes the I2C driver and the core APIs _only_, you have to
-	  select individual components like voltage regulators, RTC and
-	  battery-charger under the corresponding menus.
-
-config MFD_88PM805
-	tristate "Marvell 88PM805"
-	depends on I2C
-	select REGMAP_I2C
-	select REGMAP_IRQ
-	select MFD_CORE
-	help
-	  This supports for Marvell 88PM805 Power Management IC. This includes
-	  the I2C driver and the core APIs _only_, you have to select individual
-	  components like codec device, headset/Mic device under the
-	  corresponding menus.
-
 config MFD_88PM860X
 	bool "Marvell 88PM8606/88PM8607"
 	depends on I2C=y
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index 72d3944b0ad8..fe7156a5187a 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -5,8 +5,6 @@
 
 88pm860x-objs			:= 88pm860x-core.o 88pm860x-i2c.o
 obj-$(CONFIG_MFD_88PM860X)	+= 88pm860x.o
-obj-$(CONFIG_MFD_88PM800)	+= 88pm800.o 88pm80x.o
-obj-$(CONFIG_MFD_88PM805)	+= 88pm805.o 88pm80x.o
 obj-$(CONFIG_MFD_88PM886_PMIC)	+= 88pm886.o
 obj-$(CONFIG_MFD_ACT8945A)	+= act8945a.o
 obj-$(CONFIG_MFD_SM501)		+= sm501.o
diff --git a/drivers/regulator/88pm800-regulator.c b/drivers/regulator/88pm800-regulator.c
deleted file mode 100644
index 83e8860309dc..000000000000
--- a/drivers/regulator/88pm800-regulator.c
+++ /dev/null
@@ -1,287 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Regulators driver for Marvell 88PM800
- *
- * Copyright (C) 2012 Marvell International Ltd.
- * Joseph(Yossi) Hanin <yhanin@marvell.com>
- * Yi Zhang <yizhang@marvell.com>
- */
-#include <linux/module.h>
-#include <linux/moduleparam.h>
-#include <linux/init.h>
-#include <linux/err.h>
-#include <linux/regmap.h>
-#include <linux/regulator/driver.h>
-#include <linux/regulator/machine.h>
-#include <linux/mfd/88pm80x.h>
-#include <linux/delay.h>
-#include <linux/io.h>
-#include <linux/of.h>
-#include <linux/regulator/of_regulator.h>
-
-/* LDO1 with DVC[0..3] */
-#define PM800_LDO1_VOUT		(0x08) /* VOUT1 */
-#define PM800_LDO1_VOUT_2	(0x09)
-#define PM800_LDO1_VOUT_3	(0x0A)
-#define PM800_LDO2_VOUT		(0x0B)
-#define PM800_LDO3_VOUT		(0x0C)
-#define PM800_LDO4_VOUT		(0x0D)
-#define PM800_LDO5_VOUT		(0x0E)
-#define PM800_LDO6_VOUT		(0x0F)
-#define PM800_LDO7_VOUT		(0x10)
-#define PM800_LDO8_VOUT		(0x11)
-#define PM800_LDO9_VOUT		(0x12)
-#define PM800_LDO10_VOUT	(0x13)
-#define PM800_LDO11_VOUT	(0x14)
-#define PM800_LDO12_VOUT	(0x15)
-#define PM800_LDO13_VOUT	(0x16)
-#define PM800_LDO14_VOUT	(0x17)
-#define PM800_LDO15_VOUT	(0x18)
-#define PM800_LDO16_VOUT	(0x19)
-#define PM800_LDO17_VOUT	(0x1A)
-#define PM800_LDO18_VOUT	(0x1B)
-#define PM800_LDO19_VOUT	(0x1C)
-
-/* BUCK1 with DVC[0..3] */
-#define PM800_BUCK1		(0x3C)
-#define PM800_BUCK1_1		(0x3D)
-#define PM800_BUCK1_2		(0x3E)
-#define PM800_BUCK1_3		(0x3F)
-#define PM800_BUCK2		(0x40)
-#define PM800_BUCK3		(0x41)
-#define PM800_BUCK4		(0x42)
-#define PM800_BUCK4_1		(0x43)
-#define PM800_BUCK4_2		(0x44)
-#define PM800_BUCK4_3		(0x45)
-#define PM800_BUCK5		(0x46)
-
-#define PM800_BUCK_ENA		(0x50)
-#define PM800_LDO_ENA1_1	(0x51)
-#define PM800_LDO_ENA1_2	(0x52)
-#define PM800_LDO_ENA1_3	(0x53)
-
-#define PM800_LDO_ENA2_1	(0x56)
-#define PM800_LDO_ENA2_2	(0x57)
-#define PM800_LDO_ENA2_3	(0x58)
-
-#define PM800_BUCK1_MISC1	(0x78)
-#define PM800_BUCK3_MISC1	(0x7E)
-#define PM800_BUCK4_MISC1	(0x81)
-#define PM800_BUCK5_MISC1	(0x84)
-
-struct pm800_regulator_info {
-	struct regulator_desc desc;
-	int max_ua;
-};
-
-/*
- * vreg - the buck regs string.
- * ereg - the string for the enable register.
- * ebit - the bit number in the enable register.
- * amax - the current
- * Buck has 2 kinds of voltage steps. It is easy to find voltage by ranges,
- * not the constant voltage table.
- * n_volt - Number of available selectors
- */
-#define PM800_BUCK(match, vreg, ereg, ebit, amax, volt_ranges, n_volt)	\
-{									\
-	.desc	= {							\
-		.name			= #vreg,			\
-		.of_match		= of_match_ptr(#match),		\
-		.regulators_node	= of_match_ptr("regulators"),	\
-		.ops			= &pm800_volt_range_ops,	\
-		.type			= REGULATOR_VOLTAGE,		\
-		.id			= PM800_ID_##vreg,		\
-		.owner			= THIS_MODULE,			\
-		.n_voltages		= n_volt,			\
-		.linear_ranges		= volt_ranges,			\
-		.n_linear_ranges	= ARRAY_SIZE(volt_ranges),	\
-		.vsel_reg		= PM800_##vreg,			\
-		.vsel_mask		= 0x7f,				\
-		.enable_reg		= PM800_##ereg,			\
-		.enable_mask		= 1 << (ebit),			\
-	},								\
-	.max_ua	= (amax),						\
-}
-
-/*
- * vreg - the LDO regs string
- * ereg -  the string for the enable register.
- * ebit - the bit number in the enable register.
- * amax - the current
- * volt_table - the LDO voltage table
- * For all the LDOes, there are too many ranges. Using volt_table will be
- * simpler and faster.
- */
-#define PM800_LDO(match, vreg, ereg, ebit, amax, ldo_volt_table)	\
-{									\
-	.desc	= {							\
-		.name			= #vreg,			\
-		.of_match		= of_match_ptr(#match),		\
-		.regulators_node	= of_match_ptr("regulators"),	\
-		.ops			= &pm800_volt_table_ops,	\
-		.type			= REGULATOR_VOLTAGE,		\
-		.id			= PM800_ID_##vreg,		\
-		.owner			= THIS_MODULE,			\
-		.n_voltages		= ARRAY_SIZE(ldo_volt_table),	\
-		.vsel_reg		= PM800_##vreg##_VOUT,		\
-		.vsel_mask		= 0xf,				\
-		.enable_reg		= PM800_##ereg,			\
-		.enable_mask		= 1 << (ebit),			\
-		.volt_table		= ldo_volt_table,		\
-	},								\
-	.max_ua	= (amax),						\
-}
-
-/* Ranges are sorted in ascending order. */
-static const struct linear_range buck1_volt_range[] = {
-	REGULATOR_LINEAR_RANGE(600000, 0, 0x4f, 12500),
-	REGULATOR_LINEAR_RANGE(1600000, 0x50, 0x54, 50000),
-};
-
-/* BUCK 2~5 have same ranges. */
-static const struct linear_range buck2_5_volt_range[] = {
-	REGULATOR_LINEAR_RANGE(600000, 0, 0x4f, 12500),
-	REGULATOR_LINEAR_RANGE(1600000, 0x50, 0x72, 50000),
-};
-
-static const unsigned int ldo1_volt_table[] = {
-	600000,  650000,  700000,  750000,  800000,  850000,  900000,  950000,
-	1000000, 1050000, 1100000, 1150000, 1200000, 1300000, 1400000, 1500000,
-};
-
-static const unsigned int ldo2_volt_table[] = {
-	1700000, 1800000, 1900000, 2000000, 2100000, 2500000, 2700000, 2800000,
-};
-
-/* LDO 3~17 have same voltage table. */
-static const unsigned int ldo3_17_volt_table[] = {
-	1200000, 1250000, 1700000, 1800000, 1850000, 1900000, 2500000, 2600000,
-	2700000, 2750000, 2800000, 2850000, 2900000, 3000000, 3100000, 3300000,
-};
-
-/* LDO 18~19 have same voltage table. */
-static const unsigned int ldo18_19_volt_table[] = {
-	1700000, 1800000, 1900000, 2500000, 2800000, 2900000, 3100000, 3300000,
-};
-
-static int pm800_get_current_limit(struct regulator_dev *rdev)
-{
-	struct pm800_regulator_info *info = rdev_get_drvdata(rdev);
-
-	return info->max_ua;
-}
-
-static const struct regulator_ops pm800_volt_range_ops = {
-	.list_voltage		= regulator_list_voltage_linear_range,
-	.map_voltage		= regulator_map_voltage_linear_range,
-	.set_voltage_sel	= regulator_set_voltage_sel_regmap,
-	.get_voltage_sel	= regulator_get_voltage_sel_regmap,
-	.enable			= regulator_enable_regmap,
-	.disable		= regulator_disable_regmap,
-	.is_enabled		= regulator_is_enabled_regmap,
-	.get_current_limit	= pm800_get_current_limit,
-};
-
-static const struct regulator_ops pm800_volt_table_ops = {
-	.list_voltage		= regulator_list_voltage_table,
-	.map_voltage		= regulator_map_voltage_iterate,
-	.set_voltage_sel	= regulator_set_voltage_sel_regmap,
-	.get_voltage_sel	= regulator_get_voltage_sel_regmap,
-	.enable			= regulator_enable_regmap,
-	.disable		= regulator_disable_regmap,
-	.is_enabled		= regulator_is_enabled_regmap,
-	.get_current_limit	= pm800_get_current_limit,
-};
-
-/* The array is indexed by id(PM800_ID_XXX) */
-static struct pm800_regulator_info pm800_regulator_info[] = {
-	PM800_BUCK(buck1, BUCK1, BUCK_ENA, 0, 3000000, buck1_volt_range, 0x55),
-	PM800_BUCK(buck2, BUCK2, BUCK_ENA, 1, 1200000, buck2_5_volt_range, 0x73),
-	PM800_BUCK(buck3, BUCK3, BUCK_ENA, 2, 1200000, buck2_5_volt_range, 0x73),
-	PM800_BUCK(buck4, BUCK4, BUCK_ENA, 3, 1200000, buck2_5_volt_range, 0x73),
-	PM800_BUCK(buck5, BUCK5, BUCK_ENA, 4, 1200000, buck2_5_volt_range, 0x73),
-
-	PM800_LDO(ldo1, LDO1, LDO_ENA1_1, 0, 200000, ldo1_volt_table),
-	PM800_LDO(ldo2, LDO2, LDO_ENA1_1, 1, 10000, ldo2_volt_table),
-	PM800_LDO(ldo3, LDO3, LDO_ENA1_1, 2, 300000, ldo3_17_volt_table),
-	PM800_LDO(ldo4, LDO4, LDO_ENA1_1, 3, 300000, ldo3_17_volt_table),
-	PM800_LDO(ldo5, LDO5, LDO_ENA1_1, 4, 300000, ldo3_17_volt_table),
-	PM800_LDO(ldo6, LDO6, LDO_ENA1_1, 5, 300000, ldo3_17_volt_table),
-	PM800_LDO(ldo7, LDO7, LDO_ENA1_1, 6, 300000, ldo3_17_volt_table),
-	PM800_LDO(ldo8, LDO8, LDO_ENA1_1, 7, 300000, ldo3_17_volt_table),
-	PM800_LDO(ldo9, LDO9, LDO_ENA1_2, 0, 300000, ldo3_17_volt_table),
-	PM800_LDO(ldo10, LDO10, LDO_ENA1_2, 1, 300000, ldo3_17_volt_table),
-	PM800_LDO(ldo11, LDO11, LDO_ENA1_2, 2, 300000, ldo3_17_volt_table),
-	PM800_LDO(ldo12, LDO12, LDO_ENA1_2, 3, 300000, ldo3_17_volt_table),
-	PM800_LDO(ldo13, LDO13, LDO_ENA1_2, 4, 300000, ldo3_17_volt_table),
-	PM800_LDO(ldo14, LDO14, LDO_ENA1_2, 5, 300000, ldo3_17_volt_table),
-	PM800_LDO(ldo15, LDO15, LDO_ENA1_2, 6, 300000, ldo3_17_volt_table),
-	PM800_LDO(ldo16, LDO16, LDO_ENA1_2, 7, 300000, ldo3_17_volt_table),
-	PM800_LDO(ldo17, LDO17, LDO_ENA1_3, 0, 300000, ldo3_17_volt_table),
-	PM800_LDO(ldo18, LDO18, LDO_ENA1_3, 1, 200000, ldo18_19_volt_table),
-	PM800_LDO(ldo19, LDO19, LDO_ENA1_3, 2, 200000, ldo18_19_volt_table),
-};
-
-static int pm800_regulator_probe(struct platform_device *pdev)
-{
-	struct pm80x_chip *chip = dev_get_drvdata(pdev->dev.parent);
-	struct pm80x_platform_data *pdata = dev_get_platdata(pdev->dev.parent);
-	struct regulator_config config = { };
-	struct regulator_init_data *init_data;
-	int i, ret;
-
-	if (pdata && pdata->num_regulators) {
-		unsigned int count = 0;
-
-		/* Check whether num_regulator is valid. */
-		for (i = 0; i < ARRAY_SIZE(pdata->regulators); i++) {
-			if (pdata->regulators[i])
-				count++;
-		}
-		if (count != pdata->num_regulators)
-			return -EINVAL;
-	}
-
-	config.dev = chip->dev;
-	config.regmap = chip->subchip->regmap_power;
-	for (i = 0; i < PM800_ID_RG_MAX; i++) {
-		struct regulator_dev *regulator;
-
-		if (pdata && pdata->num_regulators) {
-			init_data = pdata->regulators[i];
-			if (!init_data)
-				continue;
-
-			config.init_data = init_data;
-		}
-
-		config.driver_data = &pm800_regulator_info[i];
-
-		regulator = devm_regulator_register(&pdev->dev,
-				&pm800_regulator_info[i].desc, &config);
-		if (IS_ERR(regulator)) {
-			ret = PTR_ERR(regulator);
-			dev_err(&pdev->dev, "Failed to register %s\n",
-					pm800_regulator_info[i].desc.name);
-			return ret;
-		}
-	}
-
-	return 0;
-}
-
-static struct platform_driver pm800_regulator_driver = {
-	.driver		= {
-		.name	= "88pm80x-regulator",
-		.probe_type = PROBE_PREFER_ASYNCHRONOUS,
-	},
-	.probe		= pm800_regulator_probe,
-};
-
-module_platform_driver(pm800_regulator_driver);
-
-MODULE_LICENSE("GPL");
-MODULE_AUTHOR("Joseph(Yossi) Hanin <yhanin@marvell.com>");
-MODULE_DESCRIPTION("Regulator Driver for Marvell 88PM800 PMIC");
-MODULE_ALIAS("platform:88pm800-regulator");
diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig
index 89789ac7a786..73b43dc1b3be 100644
--- a/drivers/regulator/Kconfig
+++ b/drivers/regulator/Kconfig
@@ -75,16 +75,6 @@ config REGULATOR_88PG86X
 	  They provide two I2C-controlled DC/DC step-down converters with
 	  sleep mode and separate enable pins.
 
-config REGULATOR_88PM800
-	tristate "Marvell 88PM800 Power regulators"
-	depends on MFD_88PM800
-	help
-	  This driver supports Marvell 88PM800 voltage regulator chips.
-	  It delivers digitally programmable output,
-	  the voltage is programmed via I2C interface.
-	  It's suitable to support PXA988 chips to control VCC_MAIN and
-	  various voltages.
-
 config REGULATOR_88PM8607
 	tristate "Marvell 88PM8607 Power regulators"
 	depends on MFD_88PM860X=y
diff --git a/drivers/regulator/Makefile b/drivers/regulator/Makefile
index 5a764cec8df8..972f105567b5 100644
--- a/drivers/regulator/Makefile
+++ b/drivers/regulator/Makefile
@@ -12,7 +12,6 @@ obj-$(CONFIG_REGULATOR_VIRTUAL_CONSUMER) += virtual.o
 obj-$(CONFIG_REGULATOR_USERSPACE_CONSUMER) += userspace-consumer.o
 
 obj-$(CONFIG_REGULATOR_88PG86X) += 88pg86x.o
-obj-$(CONFIG_REGULATOR_88PM800) += 88pm800-regulator.o
 obj-$(CONFIG_REGULATOR_88PM8607) += 88pm8607.o
 obj-$(CONFIG_REGULATOR_88PM886) += 88pm886-regulator.o
 obj-$(CONFIG_REGULATOR_CROS_EC) += cros-ec-regulator.o
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
index 0636b9ead2c2..5674211afe91 100644
--- a/drivers/rtc/Kconfig
+++ b/drivers/rtc/Kconfig
@@ -172,16 +172,6 @@ config RTC_DRV_88PM860X
 	  This driver can also be built as a module. If so, the module
 	  will be called rtc-88pm860x.
 
-config RTC_DRV_88PM80X
-	tristate "Marvell 88PM80x"
-	depends on MFD_88PM800
-	help
-	  If you say yes here you get support for RTC function in Marvell
-	  88PM80x chips.
-
-	  This driver can also be built as a module. If so, the module
-	  will be called rtc-88pm80x.
-
 config RTC_DRV_88PM886
 	tristate "Marvell 88PM886 RTC driver"
 	depends on MFD_88PM886_PMIC
diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile
index 0347645b021f..84bb2af5849e 100644
--- a/drivers/rtc/Makefile
+++ b/drivers/rtc/Makefile
@@ -19,7 +19,6 @@ obj-$(CONFIG_RTC_LIB_KUNIT_TEST)	+= test_rtc_lib.o
 
 # Keep the list ordered.
 
-obj-$(CONFIG_RTC_DRV_88PM80X)	+= rtc-88pm80x.o
 obj-$(CONFIG_RTC_DRV_88PM860X)	+= rtc-88pm860x.o
 obj-$(CONFIG_RTC_DRV_88PM886)	+= rtc-88pm886.o
 obj-$(CONFIG_RTC_DRV_AB8500)	+= rtc-ab8500.o
diff --git a/drivers/rtc/rtc-88pm80x.c b/drivers/rtc/rtc-88pm80x.c
deleted file mode 100644
index a3e52a5a708f..000000000000
--- a/drivers/rtc/rtc-88pm80x.c
+++ /dev/null
@@ -1,340 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * Real Time Clock driver for Marvell 88PM80x PMIC
- *
- * Copyright (c) 2012 Marvell International Ltd.
- *  Wenzeng Chen<wzch@marvell.com>
- *  Qiao Zhou <zhouqiao@marvell.com>
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/slab.h>
-#include <linux/regmap.h>
-#include <linux/mfd/core.h>
-#include <linux/mfd/88pm80x.h>
-#include <linux/rtc.h>
-
-#define PM800_RTC_COUNTER1		(0xD1)
-#define PM800_RTC_COUNTER2		(0xD2)
-#define PM800_RTC_COUNTER3		(0xD3)
-#define PM800_RTC_COUNTER4		(0xD4)
-#define PM800_RTC_EXPIRE1_1		(0xD5)
-#define PM800_RTC_EXPIRE1_2		(0xD6)
-#define PM800_RTC_EXPIRE1_3		(0xD7)
-#define PM800_RTC_EXPIRE1_4		(0xD8)
-#define PM800_RTC_TRIM1			(0xD9)
-#define PM800_RTC_TRIM2			(0xDA)
-#define PM800_RTC_TRIM3			(0xDB)
-#define PM800_RTC_TRIM4			(0xDC)
-#define PM800_RTC_EXPIRE2_1		(0xDD)
-#define PM800_RTC_EXPIRE2_2		(0xDE)
-#define PM800_RTC_EXPIRE2_3		(0xDF)
-#define PM800_RTC_EXPIRE2_4		(0xE0)
-
-#define PM800_POWER_DOWN_LOG1	(0xE5)
-#define PM800_POWER_DOWN_LOG2	(0xE6)
-
-struct pm80x_rtc_info {
-	struct pm80x_chip *chip;
-	struct regmap *map;
-	struct rtc_device *rtc_dev;
-	struct device *dev;
-
-	int irq;
-};
-
-static irqreturn_t rtc_update_handler(int irq, void *data)
-{
-	struct pm80x_rtc_info *info = (struct pm80x_rtc_info *)data;
-	int mask;
-
-	mask = PM800_ALARM | PM800_ALARM_WAKEUP;
-	regmap_update_bits(info->map, PM800_RTC_CONTROL, mask | PM800_ALARM1_EN,
-			   mask);
-	rtc_update_irq(info->rtc_dev, 1, RTC_AF);
-	return IRQ_HANDLED;
-}
-
-static int pm80x_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
-{
-	struct pm80x_rtc_info *info = dev_get_drvdata(dev);
-
-	if (enabled)
-		regmap_update_bits(info->map, PM800_RTC_CONTROL,
-				   PM800_ALARM1_EN, PM800_ALARM1_EN);
-	else
-		regmap_update_bits(info->map, PM800_RTC_CONTROL,
-				   PM800_ALARM1_EN, 0);
-	return 0;
-}
-
-/*
- * Calculate the next alarm time given the requested alarm time mask
- * and the current time.
- */
-static void rtc_next_alarm_time(struct rtc_time *next, struct rtc_time *now,
-				struct rtc_time *alrm)
-{
-	unsigned long next_time;
-	unsigned long now_time;
-
-	next->tm_year = now->tm_year;
-	next->tm_mon = now->tm_mon;
-	next->tm_mday = now->tm_mday;
-	next->tm_hour = alrm->tm_hour;
-	next->tm_min = alrm->tm_min;
-	next->tm_sec = alrm->tm_sec;
-
-	now_time = rtc_tm_to_time64(now);
-	next_time = rtc_tm_to_time64(next);
-
-	if (next_time < now_time) {
-		/* Advance one day */
-		next_time += 60 * 60 * 24;
-		rtc_time64_to_tm(next_time, next);
-	}
-}
-
-static int pm80x_rtc_read_time(struct device *dev, struct rtc_time *tm)
-{
-	struct pm80x_rtc_info *info = dev_get_drvdata(dev);
-	unsigned char buf[4];
-	unsigned long ticks, base, data;
-	regmap_raw_read(info->map, PM800_RTC_EXPIRE2_1, buf, 4);
-	base = ((unsigned long)buf[3] << 24) | (buf[2] << 16) |
-		(buf[1] << 8) | buf[0];
-	dev_dbg(info->dev, "%x-%x-%x-%x\n", buf[0], buf[1], buf[2], buf[3]);
-
-	/* load 32-bit read-only counter */
-	regmap_raw_read(info->map, PM800_RTC_COUNTER1, buf, 4);
-	data = ((unsigned long)buf[3] << 24) | (buf[2] << 16) |
-		(buf[1] << 8) | buf[0];
-	ticks = base + data;
-	dev_dbg(info->dev, "get base:0x%lx, RO count:0x%lx, ticks:0x%lx\n",
-		base, data, ticks);
-	rtc_time64_to_tm(ticks, tm);
-	return 0;
-}
-
-static int pm80x_rtc_set_time(struct device *dev, struct rtc_time *tm)
-{
-	struct pm80x_rtc_info *info = dev_get_drvdata(dev);
-	unsigned char buf[4];
-	unsigned long ticks, base, data;
-
-	ticks = rtc_tm_to_time64(tm);
-
-	/* load 32-bit read-only counter */
-	regmap_raw_read(info->map, PM800_RTC_COUNTER1, buf, 4);
-	data = ((unsigned long)buf[3] << 24) | (buf[2] << 16) |
-		(buf[1] << 8) | buf[0];
-	base = ticks - data;
-	dev_dbg(info->dev, "set base:0x%lx, RO count:0x%lx, ticks:0x%lx\n",
-		base, data, ticks);
-	buf[0] = base & 0xFF;
-	buf[1] = (base >> 8) & 0xFF;
-	buf[2] = (base >> 16) & 0xFF;
-	buf[3] = (base >> 24) & 0xFF;
-	regmap_raw_write(info->map, PM800_RTC_EXPIRE2_1, buf, 4);
-
-	return 0;
-}
-
-static int pm80x_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
-{
-	struct pm80x_rtc_info *info = dev_get_drvdata(dev);
-	unsigned char buf[4];
-	unsigned long ticks, base, data;
-	int ret;
-
-	regmap_raw_read(info->map, PM800_RTC_EXPIRE2_1, buf, 4);
-	base = ((unsigned long)buf[3] << 24) | (buf[2] << 16) |
-		(buf[1] << 8) | buf[0];
-	dev_dbg(info->dev, "%x-%x-%x-%x\n", buf[0], buf[1], buf[2], buf[3]);
-
-	regmap_raw_read(info->map, PM800_RTC_EXPIRE1_1, buf, 4);
-	data = ((unsigned long)buf[3] << 24) | (buf[2] << 16) |
-		(buf[1] << 8) | buf[0];
-	ticks = base + data;
-	dev_dbg(info->dev, "get base:0x%lx, RO count:0x%lx, ticks:0x%lx\n",
-		base, data, ticks);
-
-	rtc_time64_to_tm(ticks, &alrm->time);
-	regmap_read(info->map, PM800_RTC_CONTROL, &ret);
-	alrm->enabled = (ret & PM800_ALARM1_EN) ? 1 : 0;
-	alrm->pending = (ret & (PM800_ALARM | PM800_ALARM_WAKEUP)) ? 1 : 0;
-	return 0;
-}
-
-static int pm80x_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
-{
-	struct pm80x_rtc_info *info = dev_get_drvdata(dev);
-	struct rtc_time now_tm, alarm_tm;
-	unsigned long ticks, base, data;
-	unsigned char buf[4];
-	int mask;
-
-	regmap_update_bits(info->map, PM800_RTC_CONTROL, PM800_ALARM1_EN, 0);
-
-	regmap_raw_read(info->map, PM800_RTC_EXPIRE2_1, buf, 4);
-	base = ((unsigned long)buf[3] << 24) | (buf[2] << 16) |
-		(buf[1] << 8) | buf[0];
-	dev_dbg(info->dev, "%x-%x-%x-%x\n", buf[0], buf[1], buf[2], buf[3]);
-
-	/* load 32-bit read-only counter */
-	regmap_raw_read(info->map, PM800_RTC_COUNTER1, buf, 4);
-	data = ((unsigned long)buf[3] << 24) | (buf[2] << 16) |
-		(buf[1] << 8) | buf[0];
-	ticks = base + data;
-	dev_dbg(info->dev, "get base:0x%lx, RO count:0x%lx, ticks:0x%lx\n",
-		base, data, ticks);
-
-	rtc_time64_to_tm(ticks, &now_tm);
-	dev_dbg(info->dev, "%s, now time : %lu\n", __func__, ticks);
-	rtc_next_alarm_time(&alarm_tm, &now_tm, &alrm->time);
-	/* get new ticks for alarm in 24 hours */
-	ticks = rtc_tm_to_time64(&alarm_tm);
-	dev_dbg(info->dev, "%s, alarm time: %lu\n", __func__, ticks);
-	data = ticks - base;
-
-	buf[0] = data & 0xff;
-	buf[1] = (data >> 8) & 0xff;
-	buf[2] = (data >> 16) & 0xff;
-	buf[3] = (data >> 24) & 0xff;
-	regmap_raw_write(info->map, PM800_RTC_EXPIRE1_1, buf, 4);
-	if (alrm->enabled) {
-		mask = PM800_ALARM | PM800_ALARM_WAKEUP | PM800_ALARM1_EN;
-		regmap_update_bits(info->map, PM800_RTC_CONTROL, mask, mask);
-	} else {
-		mask = PM800_ALARM | PM800_ALARM_WAKEUP | PM800_ALARM1_EN;
-		regmap_update_bits(info->map, PM800_RTC_CONTROL, mask,
-				   PM800_ALARM | PM800_ALARM_WAKEUP);
-	}
-	return 0;
-}
-
-static const struct rtc_class_ops pm80x_rtc_ops = {
-	.read_time = pm80x_rtc_read_time,
-	.set_time = pm80x_rtc_set_time,
-	.read_alarm = pm80x_rtc_read_alarm,
-	.set_alarm = pm80x_rtc_set_alarm,
-	.alarm_irq_enable = pm80x_rtc_alarm_irq_enable,
-};
-
-#ifdef CONFIG_PM_SLEEP
-static int pm80x_rtc_suspend(struct device *dev)
-{
-	return pm80x_dev_suspend(dev);
-}
-
-static int pm80x_rtc_resume(struct device *dev)
-{
-	return pm80x_dev_resume(dev);
-}
-#endif
-
-static SIMPLE_DEV_PM_OPS(pm80x_rtc_pm_ops, pm80x_rtc_suspend, pm80x_rtc_resume);
-
-static int pm80x_rtc_probe(struct platform_device *pdev)
-{
-	struct pm80x_chip *chip = dev_get_drvdata(pdev->dev.parent);
-	struct pm80x_rtc_pdata *pdata = dev_get_platdata(&pdev->dev);
-	struct pm80x_rtc_info *info;
-	struct device_node *node = pdev->dev.of_node;
-	int ret;
-
-	if (!pdata && !node) {
-		dev_err(&pdev->dev,
-			"pm80x-rtc requires platform data or of_node\n");
-		return -EINVAL;
-	}
-
-	if (!pdata) {
-		pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
-		if (!pdata) {
-			dev_err(&pdev->dev, "failed to allocate memory\n");
-			return -ENOMEM;
-		}
-	}
-
-	info =
-	    devm_kzalloc(&pdev->dev, sizeof(struct pm80x_rtc_info), GFP_KERNEL);
-	if (!info)
-		return -ENOMEM;
-	info->irq = platform_get_irq(pdev, 0);
-	if (info->irq < 0) {
-		ret = -EINVAL;
-		goto out;
-	}
-
-	info->chip = chip;
-	info->map = chip->regmap;
-	if (!info->map) {
-		dev_err(&pdev->dev, "no regmap!\n");
-		ret = -EINVAL;
-		goto out;
-	}
-
-	info->dev = &pdev->dev;
-	dev_set_drvdata(&pdev->dev, info);
-
-	info->rtc_dev = devm_rtc_allocate_device(&pdev->dev);
-	if (IS_ERR(info->rtc_dev))
-		return PTR_ERR(info->rtc_dev);
-
-	ret = pm80x_request_irq(chip, info->irq, rtc_update_handler,
-				IRQF_ONESHOT, "rtc", info);
-	if (ret < 0) {
-		dev_err(chip->dev, "Failed to request IRQ: #%d: %d\n",
-			info->irq, ret);
-		goto out;
-	}
-
-	info->rtc_dev->ops = &pm80x_rtc_ops;
-	info->rtc_dev->range_max = U32_MAX;
-
-	ret = devm_rtc_register_device(info->rtc_dev);
-	if (ret)
-		goto out_rtc;
-
-	/*
-	 * enable internal XO instead of internal 3.25MHz clock since it can
-	 * free running in PMIC power-down state.
-	 */
-	regmap_update_bits(info->map, PM800_RTC_CONTROL, PM800_RTC1_USE_XO,
-			   PM800_RTC1_USE_XO);
-
-	/* remember whether this power up is caused by PMIC RTC or not */
-	info->rtc_dev->dev.platform_data = &pdata->rtc_wakeup;
-
-	device_init_wakeup(&pdev->dev, true);
-
-	return 0;
-out_rtc:
-	pm80x_free_irq(chip, info->irq, info);
-out:
-	return ret;
-}
-
-static void pm80x_rtc_remove(struct platform_device *pdev)
-{
-	struct pm80x_rtc_info *info = platform_get_drvdata(pdev);
-	pm80x_free_irq(info->chip, info->irq, info);
-}
-
-static struct platform_driver pm80x_rtc_driver = {
-	.driver = {
-		   .name = "88pm80x-rtc",
-		   .pm = &pm80x_rtc_pm_ops,
-		   },
-	.probe = pm80x_rtc_probe,
-	.remove = pm80x_rtc_remove,
-};
-
-module_platform_driver(pm80x_rtc_driver);
-
-MODULE_LICENSE("GPL");
-MODULE_DESCRIPTION("Marvell 88PM80x RTC driver");
-MODULE_AUTHOR("Qiao Zhou <zhouqiao@marvell.com>");
-MODULE_ALIAS("platform:88pm80x-rtc");
diff --git a/include/linux/mfd/88pm80x.h b/include/linux/mfd/88pm80x.h
deleted file mode 100644
index 551ef1c367d6..000000000000
--- a/include/linux/mfd/88pm80x.h
+++ /dev/null
@@ -1,370 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * Marvell 88PM80x Interface
- *
- * Copyright (C) 2012 Marvell International Ltd.
- * Qiao Zhou <zhouqiao@marvell.com>
- */
-
-#ifndef __LINUX_MFD_88PM80X_H
-#define __LINUX_MFD_88PM80X_H
-
-#include <linux/platform_device.h>
-#include <linux/interrupt.h>
-#include <linux/regmap.h>
-#include <linux/atomic.h>
-
-enum {
-	CHIP_INVALID = 0,
-	CHIP_PM800,
-	CHIP_PM805,
-	CHIP_PM860,
-	CHIP_MAX,
-};
-
-enum {
-	PM800_ID_BUCK1 = 0,
-	PM800_ID_BUCK2,
-	PM800_ID_BUCK3,
-	PM800_ID_BUCK4,
-	PM800_ID_BUCK5,
-
-	PM800_ID_LDO1,
-	PM800_ID_LDO2,
-	PM800_ID_LDO3,
-	PM800_ID_LDO4,
-	PM800_ID_LDO5,
-	PM800_ID_LDO6,
-	PM800_ID_LDO7,
-	PM800_ID_LDO8,
-	PM800_ID_LDO9,
-	PM800_ID_LDO10,
-	PM800_ID_LDO11,
-	PM800_ID_LDO12,
-	PM800_ID_LDO13,
-	PM800_ID_LDO14,
-	PM800_ID_LDO15,
-	PM800_ID_LDO16,
-	PM800_ID_LDO17,
-	PM800_ID_LDO18,
-	PM800_ID_LDO19,
-
-	PM800_ID_RG_MAX,
-};
-#define PM800_MAX_REGULATOR	PM800_ID_RG_MAX	/* 5 Bucks, 19 LDOs */
-#define PM800_NUM_BUCK (5)	/*5 Bucks */
-#define PM800_NUM_LDO (19)	/*19 Bucks */
-
-/* page 0 basic: slave adder 0x60 */
-
-#define PM800_STATUS_1			(0x01)
-#define PM800_ONKEY_STS1		BIT(0)
-#define PM800_EXTON_STS1		BIT(1)
-#define PM800_CHG_STS1			BIT(2)
-#define PM800_BAT_STS1			BIT(3)
-#define PM800_VBUS_STS1			BIT(4)
-#define PM800_LDO_PGOOD_STS1		BIT(5)
-#define PM800_BUCK_PGOOD_STS1		BIT(6)
-
-#define PM800_STATUS_2			(0x02)
-#define PM800_RTC_ALARM_STS2		BIT(0)
-
-/* Wakeup Registers */
-#define PM800_WAKEUP1			(0x0D)
-
-#define PM800_WAKEUP2			(0x0E)
-#define PM800_WAKEUP2_INV_INT		BIT(0)
-#define PM800_WAKEUP2_INT_CLEAR		BIT(1)
-#define PM800_WAKEUP2_INT_MASK		BIT(2)
-
-#define PM800_POWER_UP_LOG		(0x10)
-
-/* Referance and low power registers */
-#define PM800_LOW_POWER1		(0x20)
-#define PM800_LOW_POWER2		(0x21)
-#define PM800_LOW_POWER_CONFIG3		(0x22)
-#define PM800_LOW_POWER_CONFIG4		(0x23)
-
-/* GPIO register */
-#define PM800_GPIO_0_1_CNTRL		(0x30)
-#define PM800_GPIO0_VAL			BIT(0)
-#define PM800_GPIO0_GPIO_MODE(x)	(x << 1)
-#define PM800_GPIO1_VAL			BIT(4)
-#define PM800_GPIO1_GPIO_MODE(x)	(x << 5)
-
-#define PM800_GPIO_2_3_CNTRL		(0x31)
-#define PM800_GPIO2_VAL			BIT(0)
-#define PM800_GPIO2_GPIO_MODE(x)	(x << 1)
-#define PM800_GPIO3_VAL			BIT(4)
-#define PM800_GPIO3_GPIO_MODE(x)	(x << 5)
-#define PM800_GPIO3_MODE_MASK		0x1F
-#define PM800_GPIO3_HEADSET_MODE	PM800_GPIO3_GPIO_MODE(6)
-
-#define PM800_GPIO_4_CNTRL		(0x32)
-#define PM800_GPIO4_VAL			BIT(0)
-#define PM800_GPIO4_GPIO_MODE(x)	(x << 1)
-
-#define PM800_HEADSET_CNTRL		(0x38)
-#define PM800_HEADSET_DET_EN		BIT(7)
-#define PM800_HSDET_SLP			BIT(1)
-/* PWM register */
-#define PM800_PWM1			(0x40)
-#define PM800_PWM2			(0x41)
-#define PM800_PWM3			(0x42)
-#define PM800_PWM4			(0x43)
-
-/* RTC Registers */
-#define PM800_RTC_CONTROL		(0xD0)
-#define PM800_RTC_MISC1			(0xE1)
-#define PM800_RTC_MISC2			(0xE2)
-#define PM800_RTC_MISC3			(0xE3)
-#define PM800_RTC_MISC4			(0xE4)
-#define PM800_RTC_MISC5			(0xE7)
-/* bit definitions of RTC Register 1 (0xD0) */
-#define PM800_ALARM1_EN			BIT(0)
-#define PM800_ALARM_WAKEUP		BIT(4)
-#define PM800_ALARM			BIT(5)
-#define PM800_RTC1_USE_XO		BIT(7)
-
-/* Regulator Control Registers: BUCK1,BUCK5,LDO1 have DVC */
-
-/* buck registers */
-#define PM800_SLEEP_BUCK1		(0x30)
-
-/* BUCK Sleep Mode Register 1: BUCK[1..4] */
-#define PM800_BUCK_SLP1			(0x5A)
-#define PM800_BUCK1_SLP1_SHIFT		0
-#define PM800_BUCK1_SLP1_MASK		(0x3 << PM800_BUCK1_SLP1_SHIFT)
-
-/* page 2 GPADC: slave adder 0x02 */
-#define PM800_GPADC_MEAS_EN1		(0x01)
-#define PM800_MEAS_EN1_VBAT		BIT(2)
-#define PM800_GPADC_MEAS_EN2		(0x02)
-#define PM800_MEAS_EN2_RFTMP		BIT(0)
-#define PM800_MEAS_GP0_EN		BIT(2)
-#define PM800_MEAS_GP1_EN		BIT(3)
-#define PM800_MEAS_GP2_EN		BIT(4)
-#define PM800_MEAS_GP3_EN		BIT(5)
-#define PM800_MEAS_GP4_EN		BIT(6)
-
-#define PM800_GPADC_MISC_CONFIG1	(0x05)
-#define PM800_GPADC_MISC_CONFIG2	(0x06)
-#define PM800_GPADC_MISC_GPFSM_EN	BIT(0)
-#define PM800_GPADC_SLOW_MODE(x)	(x << 3)
-
-#define PM800_GPADC_MISC_CONFIG3	(0x09)
-#define PM800_GPADC_MISC_CONFIG4	(0x0A)
-
-#define PM800_GPADC_PREBIAS1		(0x0F)
-#define PM800_GPADC0_GP_PREBIAS_TIME(x)	(x << 0)
-#define PM800_GPADC_PREBIAS2		(0x10)
-
-#define PM800_GP_BIAS_ENA1		(0x14)
-#define PM800_GPADC_GP_BIAS_EN0		BIT(0)
-#define PM800_GPADC_GP_BIAS_EN1		BIT(1)
-#define PM800_GPADC_GP_BIAS_EN2		BIT(2)
-#define PM800_GPADC_GP_BIAS_EN3		BIT(3)
-
-#define PM800_GP_BIAS_OUT1		(0x15)
-#define PM800_BIAS_OUT_GP0		BIT(0)
-#define PM800_BIAS_OUT_GP1		BIT(1)
-#define PM800_BIAS_OUT_GP2		BIT(2)
-#define PM800_BIAS_OUT_GP3		BIT(3)
-
-#define PM800_GPADC0_LOW_TH		0x20
-#define PM800_GPADC1_LOW_TH		0x21
-#define PM800_GPADC2_LOW_TH		0x22
-#define PM800_GPADC3_LOW_TH		0x23
-#define PM800_GPADC4_LOW_TH		0x24
-
-#define PM800_GPADC0_UPP_TH		0x30
-#define PM800_GPADC1_UPP_TH		0x31
-#define PM800_GPADC2_UPP_TH		0x32
-#define PM800_GPADC3_UPP_TH		0x33
-#define PM800_GPADC4_UPP_TH		0x34
-
-#define PM800_VBBAT_MEAS1		0x40
-#define PM800_VBBAT_MEAS2		0x41
-#define PM800_VBAT_MEAS1		0x42
-#define PM800_VBAT_MEAS2		0x43
-#define PM800_VSYS_MEAS1		0x44
-#define PM800_VSYS_MEAS2		0x45
-#define PM800_VCHG_MEAS1		0x46
-#define PM800_VCHG_MEAS2		0x47
-#define PM800_TINT_MEAS1		0x50
-#define PM800_TINT_MEAS2		0x51
-#define PM800_PMOD_MEAS1		0x52
-#define PM800_PMOD_MEAS2		0x53
-
-#define PM800_GPADC0_MEAS1		0x54
-#define PM800_GPADC0_MEAS2		0x55
-#define PM800_GPADC1_MEAS1		0x56
-#define PM800_GPADC1_MEAS2		0x57
-#define PM800_GPADC2_MEAS1		0x58
-#define PM800_GPADC2_MEAS2		0x59
-#define PM800_GPADC3_MEAS1		0x5A
-#define PM800_GPADC3_MEAS2		0x5B
-#define PM800_GPADC4_MEAS1		0x5C
-#define PM800_GPADC4_MEAS2		0x5D
-
-#define PM800_GPADC4_AVG1		0xA8
-#define PM800_GPADC4_AVG2		0xA9
-
-/* 88PM805 Registers */
-#define PM805_MAIN_POWERUP		(0x01)
-#define PM805_INT_STATUS0		(0x02)	/* for ena/dis all interrupts */
-
-#define PM805_STATUS0_INT_CLEAR		(1 << 0)
-#define PM805_STATUS0_INV_INT		(1 << 1)
-#define PM800_STATUS0_INT_MASK		(1 << 2)
-
-#define PM805_INT_STATUS1		(0x03)
-
-#define PM805_INT1_HP1_SHRT		BIT(0)
-#define PM805_INT1_HP2_SHRT		BIT(1)
-#define PM805_INT1_MIC_CONFLICT		BIT(2)
-#define PM805_INT1_CLIP_FAULT		BIT(3)
-#define PM805_INT1_LDO_OFF		BIT(4)
-#define PM805_INT1_SRC_DPLL_LOCK	BIT(5)
-
-#define PM805_INT_STATUS2		(0x04)
-
-#define PM805_INT2_MIC_DET		BIT(0)
-#define PM805_INT2_SHRT_BTN_DET		BIT(1)
-#define PM805_INT2_VOLM_BTN_DET		BIT(2)
-#define PM805_INT2_VOLP_BTN_DET		BIT(3)
-#define PM805_INT2_RAW_PLL_FAULT	BIT(4)
-#define PM805_INT2_FINE_PLL_FAULT	BIT(5)
-
-#define PM805_INT_MASK1			(0x05)
-#define PM805_INT_MASK2			(0x06)
-#define PM805_SHRT_BTN_DET		BIT(1)
-
-/* number of status and int reg in a row */
-#define PM805_INT_REG_NUM		(2)
-
-#define PM805_MIC_DET1			(0x07)
-#define PM805_MIC_DET_EN_MIC_DET	BIT(0)
-#define PM805_MIC_DET2			(0x08)
-#define PM805_MIC_DET_STATUS1		(0x09)
-
-#define PM805_MIC_DET_STATUS3		(0x0A)
-#define PM805_AUTO_SEQ_STATUS1		(0x0B)
-#define PM805_AUTO_SEQ_STATUS2		(0x0C)
-
-#define PM805_ADC_SETTING1		(0x10)
-#define PM805_ADC_SETTING2		(0x11)
-#define PM805_ADC_SETTING3		(0x11)
-#define PM805_ADC_GAIN1			(0x12)
-#define PM805_ADC_GAIN2			(0x13)
-#define PM805_DMIC_SETTING		(0x15)
-#define PM805_DWS_SETTING		(0x16)
-#define PM805_MIC_CONFLICT_STS		(0x17)
-
-#define PM805_PDM_SETTING1		(0x20)
-#define PM805_PDM_SETTING2		(0x21)
-#define PM805_PDM_SETTING3		(0x22)
-#define PM805_PDM_CONTROL1		(0x23)
-#define PM805_PDM_CONTROL2		(0x24)
-#define PM805_PDM_CONTROL3		(0x25)
-
-#define PM805_HEADPHONE_SETTING		(0x26)
-#define PM805_HEADPHONE_GAIN_A2A	(0x27)
-#define PM805_HEADPHONE_SHORT_STATE	(0x28)
-#define PM805_EARPHONE_SETTING		(0x29)
-#define PM805_AUTO_SEQ_SETTING		(0x2A)
-
-struct pm80x_rtc_pdata {
-	int		vrtc;
-	int		rtc_wakeup;
-};
-
-struct pm80x_subchip {
-	struct i2c_client *power_page;	/* chip client for power page */
-	struct i2c_client *gpadc_page;	/* chip client for gpadc page */
-	struct regmap *regmap_power;
-	struct regmap *regmap_gpadc;
-	unsigned short power_page_addr;	/* power page I2C address */
-	unsigned short gpadc_page_addr;	/* gpadc page I2C address */
-};
-
-struct pm80x_chip {
-	struct pm80x_subchip *subchip;
-	struct device *dev;
-	struct i2c_client *client;
-	struct i2c_client *companion;
-	struct regmap *regmap;
-	const struct regmap_irq_chip *regmap_irq_chip;
-	struct regmap_irq_chip_data *irq_data;
-	int type;
-	int irq;
-	int irq_mode;
-	unsigned long wu_flag;
-	spinlock_t lock;
-};
-
-struct pm80x_platform_data {
-	struct pm80x_rtc_pdata *rtc;
-	/*
-	 * For the regulator not defined, set regulators[not_defined] to be
-	 * NULL. num_regulators are the number of regulators supposed to be
-	 * initialized. If all regulators are not defined, set num_regulators
-	 * to be 0.
-	 */
-	struct regulator_init_data *regulators[PM800_ID_RG_MAX];
-	unsigned int num_regulators;
-	int irq_mode;		/* Clear interrupt by read/write(0/1) */
-	int batt_det;		/* enable/disable */
-	int (*plat_config)(struct pm80x_chip *chip,
-				struct pm80x_platform_data *pdata);
-};
-
-extern const struct dev_pm_ops pm80x_pm_ops;
-extern const struct regmap_config pm80x_regmap_config;
-
-static inline int pm80x_request_irq(struct pm80x_chip *pm80x, int irq,
-				     irq_handler_t handler, unsigned long flags,
-				     const char *name, void *data)
-{
-	if (!pm80x->irq_data)
-		return -EINVAL;
-	return request_threaded_irq(regmap_irq_get_virq(pm80x->irq_data, irq),
-				    NULL, handler, flags, name, data);
-}
-
-static inline void pm80x_free_irq(struct pm80x_chip *pm80x, int irq, void *data)
-{
-	if (!pm80x->irq_data)
-		return;
-	free_irq(regmap_irq_get_virq(pm80x->irq_data, irq), data);
-}
-
-#ifdef CONFIG_PM
-static inline int pm80x_dev_suspend(struct device *dev)
-{
-	struct platform_device *pdev = to_platform_device(dev);
-	struct pm80x_chip *chip = dev_get_drvdata(pdev->dev.parent);
-	int irq = platform_get_irq(pdev, 0);
-
-	if (device_may_wakeup(dev))
-		set_bit(irq, &chip->wu_flag);
-
-	return 0;
-}
-
-static inline int pm80x_dev_resume(struct device *dev)
-{
-	struct platform_device *pdev = to_platform_device(dev);
-	struct pm80x_chip *chip = dev_get_drvdata(pdev->dev.parent);
-	int irq = platform_get_irq(pdev, 0);
-
-	if (device_may_wakeup(dev))
-		clear_bit(irq, &chip->wu_flag);
-
-	return 0;
-}
-#endif
-
-extern int pm80x_init(struct i2c_client *client);
-extern int pm80x_deinit(void);
-#endif /* __LINUX_MFD_88PM80X_H */
-- 
2.53.0


  reply	other threads:[~2026-09-09 13:22 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-09 13:21 [PATCH 00/14] mfd: unused driver purge Arnd Bergmann
2026-09-09 13:21 ` Arnd Bergmann [this message]
2026-09-09 13:44   ` [PATCH 01/14] mfd: remove unused 88pm80x driver Alexandre Belloni
2026-09-11  7:24   ` Krzysztof Kozlowski
2026-09-09 13:21 ` [PATCH 02/14] mfd: remove unused rdc321x southbridge support Arnd Bergmann
2026-09-09 14:09   ` Guenter Roeck
2026-09-09 13:21 ` [PATCH 03/14] mfd: remove unused si476x driver Arnd Bergmann
2026-09-09 13:21 ` [PATCH 04/14] mfd: remove unused wm8400 driver Arnd Bergmann
2026-09-09 13:27   ` Mark Brown
2026-09-09 14:38   ` Charles Keepax
2026-09-09 13:21 ` [PATCH 05/14] mfd: remove unused adp5520 driver Arnd Bergmann
2026-09-09 13:21 ` [PATCH 06/14] mfd: remove unused da903x driver Arnd Bergmann
2026-09-09 15:46   ` Sebastian Reichel
2026-09-09 13:21 ` [PATCH 07/14] mfd: remove unused lp8788 driver Arnd Bergmann
2026-09-09 13:47   ` Alexandre Belloni
2026-09-09 15:46   ` Sebastian Reichel
2026-09-09 13:21 ` [PATCH 08/14] mfd: remove unused aat2870 driver Arnd Bergmann
2026-09-09 13:21 ` [PATCH 09/14] mfd: remove unused lm3533 driver Arnd Bergmann
2026-09-09 13:44   ` Johan Hovold
2026-09-09 14:47     ` Arnd Bergmann
2026-09-09 13:21 ` [PATCH 10/14] mfd: remove unused rc5t583 driver Arnd Bergmann
2026-09-09 13:21 ` [PATCH 11/14] mfd: remove unused wm8350 driver Arnd Bergmann
2026-09-09 13:26   ` Mark Brown
2026-09-09 14:12   ` Guenter Roeck
2026-09-09 14:39   ` Charles Keepax
2026-09-09 15:47   ` Sebastian Reichel
2026-09-09 13:21 ` [PATCH 12/14] mfd: remove unused mcp-sa11x0/ucb1x00 driver Arnd Bergmann
2026-09-09 13:21 ` [PATCH 13/14] mfd: remove unused menelaus driver Arnd Bergmann
2026-09-09 13:21 ` [PATCH 14/14] mfd: remove unused iPaq micro driver Arnd Bergmann
2026-09-09 14:03 ` [PATCH 00/14] mfd: unused driver purge Bartosz Golaszewski
2026-09-09 17:26 ` Dmitry Torokhov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260909132153.1596191-2-arnd@kernel.org \
    --to=arnd@kernel.org \
    --cc=alexandre.belloni@bootlin.com \
    --cc=arnd@arndb.de \
    --cc=brgl@kernel.org \
    --cc=broonie@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=danielt@kernel.org \
    --cc=deller@gmx.de \
    --cc=devicetree@vger.kernel.org \
    --cc=dmitry.torokhov@gmail.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=jic23@kernel.org \
    --cc=jingoohan1@gmail.com \
    --cc=krzk+dt@kernel.org \
    --cc=lee@kernel.org \
    --cc=lgirdwood@gmail.com \
    --cc=linusw@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-fbdev@vger.kernel.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-hwmon@vger.kernel.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-leds@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux-rtc@vger.kernel.org \
    --cc=linux-sound@vger.kernel.org \
    --cc=linux-watchdog@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=llvm@lists.linux.dev \
    --cc=mchehab@kernel.org \
    --cc=mfd@lists.linux.dev \
    --cc=michael.hennerich@analog.com \
    --cc=patches@opensource.cirrus.com \
    --cc=pavel@kernel.org \
    --cc=robh@kernel.org \
    --cc=sre@kernel.org \
    --cc=support.opensource@diasemi.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®