From: Arnd Bergmann <[email protected]>

This driver was apparently never used upstream, and without devicetree
support cannot be used by external board support.

The MAINTAINER entry was already removed in 2021 as the email address
bounced.

Signed-off-by: Arnd Bergmann <[email protected]>
---
 drivers/iio/adc/Kconfig               |   9 -
 drivers/iio/adc/Makefile              |   1 -
 drivers/iio/adc/lp8788_adc.c          | 219 --------
 drivers/leds/Kconfig                  |   7 -
 drivers/leds/Makefile                 |   1 -
 drivers/leds/leds-lp8788.c            | 171 ------
 drivers/mfd/Kconfig                   |  10 -
 drivers/mfd/Makefile                  |   1 -
 drivers/mfd/lp8788-irq.c              | 194 -------
 drivers/mfd/lp8788.c                  | 246 ---------
 drivers/power/supply/Kconfig          |   8 -
 drivers/power/supply/Makefile         |   1 -
 drivers/power/supply/lp8788-charger.c | 730 --------------------------
 drivers/regulator/Kconfig             |   6 -
 drivers/regulator/Makefile            |   2 -
 drivers/regulator/lp8788-buck.c       | 541 -------------------
 drivers/regulator/lp8788-ldo.c        | 640 ----------------------
 drivers/rtc/Kconfig                   |   6 -
 drivers/rtc/rtc-lp8788.c              | 322 ------------
 drivers/video/backlight/Kconfig       |   6 -
 drivers/video/backlight/Makefile      |   1 -
 drivers/video/backlight/lp8788_bl.c   | 190 -------
 include/linux/mfd/lp8788-isink.h      |  48 --
 include/linux/mfd/lp8788.h            | 289 ----------
 24 files changed, 3649 deletions(-)
 delete mode 100644 drivers/iio/adc/lp8788_adc.c
 delete mode 100644 drivers/leds/leds-lp8788.c
 delete mode 100644 drivers/mfd/lp8788-irq.c
 delete mode 100644 drivers/mfd/lp8788.c
 delete mode 100644 drivers/power/supply/lp8788-charger.c
 delete mode 100644 drivers/regulator/lp8788-buck.c
 delete mode 100644 drivers/regulator/lp8788-ldo.c
 delete mode 100644 drivers/rtc/rtc-lp8788.c
 delete mode 100644 drivers/video/backlight/lp8788_bl.c
 delete mode 100644 include/linux/mfd/lp8788-isink.h
 delete mode 100644 include/linux/mfd/lp8788.h

diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig
index 415e519ad4eb..af9651003449 100644
--- a/drivers/iio/adc/Kconfig
+++ b/drivers/iio/adc/Kconfig
@@ -905,15 +905,6 @@ config IMX93_ADC
          This driver can also be built as a module. If so, the module will be
          called imx93_adc.
 
-config LP8788_ADC
-       tristate "LP8788 ADC driver"
-       depends on MFD_LP8788
-       help
-         Say yes here to build support for TI LP8788 ADC.
-
-         To compile this driver as a module, choose M here: the module will be
-         called lp8788_adc.
-
 config LPC18XX_ADC
        tristate "NXP LPC18xx ADC driver"
        depends on ARCH_LPC18XX || COMPILE_TEST
diff --git a/drivers/iio/adc/Makefile b/drivers/iio/adc/Makefile
index dcec0abb03b7..845ddf628f22 100644
--- a/drivers/iio/adc/Makefile
+++ b/drivers/iio/adc/Makefile
@@ -77,7 +77,6 @@ obj-$(CONFIG_INA2XX_ADC) += ina2xx-adc.o
 obj-$(CONFIG_INGENIC_ADC) += ingenic-adc.o
 obj-$(CONFIG_INTEL_DC_TI_ADC) += intel_dc_ti_adc.o
 obj-$(CONFIG_INTEL_MRFLD_ADC) += intel_mrfld_adc.o
-obj-$(CONFIG_LP8788_ADC) += lp8788_adc.o
 obj-$(CONFIG_LPC18XX_ADC) += lpc18xx_adc.o
 obj-$(CONFIG_LPC32XX_ADC) += lpc32xx_adc.o
 obj-$(CONFIG_LTC2309) += ltc2309.o
diff --git a/drivers/iio/adc/lp8788_adc.c b/drivers/iio/adc/lp8788_adc.c
deleted file mode 100644
index 33bf8aef79e3..000000000000
--- a/drivers/iio/adc/lp8788_adc.c
+++ /dev/null
@@ -1,219 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * TI LP8788 MFD - ADC driver
- *
- * Copyright 2012 Texas Instruments
- *
- * Author: Milo(Woogyom) Kim <[email protected]>
- */
-
-#include <linux/delay.h>
-#include <linux/iio/iio.h>
-#include <linux/iio/driver.h>
-#include <linux/iio/machine.h>
-#include <linux/mfd/lp8788.h>
-#include <linux/module.h>
-#include <linux/mutex.h>
-#include <linux/platform_device.h>
-#include <linux/slab.h>
-
-/* register address */
-#define LP8788_ADC_CONF                        0x60
-#define LP8788_ADC_RAW                 0x61
-#define LP8788_ADC_DONE                        0x63
-
-#define ADC_CONV_START                 1
-
-struct lp8788_adc {
-       struct lp8788 *lp;
-       const struct iio_map *map;
-       struct mutex lock;
-};
-
-static const int lp8788_scale[LPADC_MAX] = {
-       [LPADC_VBATT_5P5] = 1343101,
-       [LPADC_VIN_CHG]   = 3052503,
-       [LPADC_IBATT]     = 610500,
-       [LPADC_IC_TEMP]   = 61050,
-       [LPADC_VBATT_6P0] = 1465201,
-       [LPADC_VBATT_5P0] = 1221001,
-       [LPADC_ADC1]      = 610500,
-       [LPADC_ADC2]      = 610500,
-       [LPADC_VDD]       = 1025641,
-       [LPADC_VCOIN]     = 757020,
-       [LPADC_ADC3]      = 610500,
-       [LPADC_ADC4]      = 610500,
-};
-
-static int lp8788_get_adc_result(struct lp8788_adc *adc, enum lp8788_adc_id id,
-                               int *val)
-{
-       unsigned int msb;
-       unsigned int lsb;
-       unsigned int result;
-       u8 data;
-       u8 rawdata[2];
-       int size = ARRAY_SIZE(rawdata);
-       int retry = 5;
-       int ret;
-
-       data = (id << 1) | ADC_CONV_START;
-       ret = lp8788_write_byte(adc->lp, LP8788_ADC_CONF, data);
-       if (ret)
-               goto err_io;
-
-       /* retry until adc conversion is done */
-       data = 0;
-       while (retry--) {
-               usleep_range(100, 200);
-
-               ret = lp8788_read_byte(adc->lp, LP8788_ADC_DONE, &data);
-               if (ret)
-                       goto err_io;
-
-               /* conversion done */
-               if (data)
-                       break;
-       }
-
-       ret = lp8788_read_multi_bytes(adc->lp, LP8788_ADC_RAW, rawdata, size);
-       if (ret)
-               goto err_io;
-
-       msb = (rawdata[0] << 4) & 0x00000ff0;
-       lsb = (rawdata[1] >> 4) & 0x0000000f;
-       result = msb | lsb;
-       *val = result;
-
-       return 0;
-
-err_io:
-       return ret;
-}
-
-static int lp8788_adc_read_raw(struct iio_dev *indio_dev,
-                       struct iio_chan_spec const *chan,
-                       int *val, int *val2, long mask)
-{
-       struct lp8788_adc *adc = iio_priv(indio_dev);
-       enum lp8788_adc_id id = chan->channel;
-       int ret;
-
-       mutex_lock(&adc->lock);
-
-       switch (mask) {
-       case IIO_CHAN_INFO_RAW:
-               ret = lp8788_get_adc_result(adc, id, val) ? -EIO : IIO_VAL_INT;
-               break;
-       case IIO_CHAN_INFO_SCALE:
-               *val = lp8788_scale[id] / 1000000;
-               *val2 = lp8788_scale[id] % 1000000;
-               ret = IIO_VAL_INT_PLUS_MICRO;
-               break;
-       default:
-               ret = -EINVAL;
-               break;
-       }
-
-       mutex_unlock(&adc->lock);
-
-       return ret;
-}
-
-static const struct iio_info lp8788_adc_info = {
-       .read_raw = &lp8788_adc_read_raw,
-};
-
-#define LP8788_CHAN(_id, _type) {                              \
-               .type = _type,                                  \
-               .indexed = 1,                                   \
-               .channel = LPADC_##_id,                         \
-               .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |  \
-                       BIT(IIO_CHAN_INFO_SCALE),               \
-               .datasheet_name = #_id,                         \
-}
-
-static const struct iio_chan_spec lp8788_adc_channels[] = {
-       [LPADC_VBATT_5P5] = LP8788_CHAN(VBATT_5P5, IIO_VOLTAGE),
-       [LPADC_VIN_CHG]   = LP8788_CHAN(VIN_CHG, IIO_VOLTAGE),
-       [LPADC_IBATT]     = LP8788_CHAN(IBATT, IIO_CURRENT),
-       [LPADC_IC_TEMP]   = LP8788_CHAN(IC_TEMP, IIO_TEMP),
-       [LPADC_VBATT_6P0] = LP8788_CHAN(VBATT_6P0, IIO_VOLTAGE),
-       [LPADC_VBATT_5P0] = LP8788_CHAN(VBATT_5P0, IIO_VOLTAGE),
-       [LPADC_ADC1]      = LP8788_CHAN(ADC1, IIO_VOLTAGE),
-       [LPADC_ADC2]      = LP8788_CHAN(ADC2, IIO_VOLTAGE),
-       [LPADC_VDD]       = LP8788_CHAN(VDD, IIO_VOLTAGE),
-       [LPADC_VCOIN]     = LP8788_CHAN(VCOIN, IIO_VOLTAGE),
-       [LPADC_ADC3]      = LP8788_CHAN(ADC3, IIO_VOLTAGE),
-       [LPADC_ADC4]      = LP8788_CHAN(ADC4, IIO_VOLTAGE),
-};
-
-/* default maps used by iio consumer (lp8788-charger driver) */
-static const struct iio_map lp8788_default_iio_maps[] = {
-       IIO_MAP("VBATT_5P0", "lp8788-charger", "lp8788_vbatt_5p0"),
-       IIO_MAP("ADC1", "lp8788-charger", "lp8788_adc1"),
-       { }
-};
-
-static int lp8788_iio_map_register(struct device *dev,
-                               struct iio_dev *indio_dev,
-                               struct lp8788_platform_data *pdata,
-                               struct lp8788_adc *adc)
-{
-       const struct iio_map *map;
-       int ret;
-
-       map = (!pdata || !pdata->adc_pdata) ?
-               lp8788_default_iio_maps : pdata->adc_pdata;
-
-       ret = devm_iio_map_array_register(dev, indio_dev, map);
-       if (ret) {
-               dev_err(&indio_dev->dev, "iio map err: %d\n", ret);
-               return ret;
-       }
-
-       adc->map = map;
-       return 0;
-}
-
-static int lp8788_adc_probe(struct platform_device *pdev)
-{
-       struct lp8788 *lp = dev_get_drvdata(pdev->dev.parent);
-       struct iio_dev *indio_dev;
-       struct lp8788_adc *adc;
-       int ret;
-
-       indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*adc));
-       if (!indio_dev)
-               return -ENOMEM;
-
-       adc = iio_priv(indio_dev);
-       adc->lp = lp;
-
-       ret = lp8788_iio_map_register(&pdev->dev, indio_dev, lp->pdata, adc);
-       if (ret)
-               return ret;
-
-       mutex_init(&adc->lock);
-
-       indio_dev->name = pdev->name;
-       indio_dev->modes = INDIO_DIRECT_MODE;
-       indio_dev->info = &lp8788_adc_info;
-       indio_dev->channels = lp8788_adc_channels;
-       indio_dev->num_channels = ARRAY_SIZE(lp8788_adc_channels);
-
-       return devm_iio_device_register(&pdev->dev, indio_dev);
-}
-
-static struct platform_driver lp8788_adc_driver = {
-       .probe = lp8788_adc_probe,
-       .driver = {
-               .name = LP8788_DEV_ADC,
-       },
-};
-module_platform_driver(lp8788_adc_driver);
-
-MODULE_DESCRIPTION("Texas Instruments LP8788 ADC Driver");
-MODULE_AUTHOR("Milo Kim");
-MODULE_LICENSE("GPL");
-MODULE_ALIAS("platform:lp8788-adc");
diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig
index 5aab4765d6d7..f0cd10ad6279 100644
--- a/drivers/leds/Kconfig
+++ b/drivers/leds/Kconfig
@@ -511,13 +511,6 @@ config LEDS_LP8501
          It is similar as LP5523, but output power selection is available.
          And register layout and engine program schemes are different.
 
-config LEDS_LP8788
-       tristate "LED support for the TI LP8788 PMIC"
-       depends on LEDS_CLASS
-       depends on MFD_LP8788
-       help
-         This option enables support for the Keyboard LEDs on the LP8788 PMIC.
-
 config LEDS_LP8860
        tristate "LED support for the TI LP8860 4 channel LED driver"
        depends on LEDS_CLASS && I2C && OF
diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile
index 148301cf4865..63dc0b0c5a51 100644
--- a/drivers/leds/Makefile
+++ b/drivers/leds/Makefile
@@ -55,7 +55,6 @@ obj-$(CONFIG_LEDS_LP5562)             += leds-lp5562.o
 obj-$(CONFIG_LEDS_LP5569)              += leds-lp5569.o
 obj-$(CONFIG_LEDS_LP55XX_COMMON)       += leds-lp55xx-common.o
 obj-$(CONFIG_LEDS_LP8501)              += leds-lp8501.o
-obj-$(CONFIG_LEDS_LP8788)              += leds-lp8788.o
 obj-$(CONFIG_LEDS_LP8860)              += leds-lp8860.o
 obj-$(CONFIG_LEDS_LP8864)              += leds-lp8864.o
 obj-$(CONFIG_LEDS_LT3593)              += leds-lt3593.o
diff --git a/drivers/leds/leds-lp8788.c b/drivers/leds/leds-lp8788.c
deleted file mode 100644
index 9b9525ccca15..000000000000
--- a/drivers/leds/leds-lp8788.c
+++ /dev/null
@@ -1,171 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * TI LP8788 MFD - keyled driver
- *
- * Copyright 2012 Texas Instruments
- *
- * Author: Milo(Woogyom) Kim <[email protected]>
- */
-
-#include <linux/module.h>
-#include <linux/slab.h>
-#include <linux/err.h>
-#include <linux/platform_device.h>
-#include <linux/leds.h>
-#include <linux/mutex.h>
-#include <linux/mfd/lp8788.h>
-#include <linux/mfd/lp8788-isink.h>
-
-#define MAX_BRIGHTNESS                 LP8788_ISINK_MAX_PWM
-#define DEFAULT_LED_NAME               "keyboard-backlight"
-
-struct lp8788_led {
-       struct lp8788 *lp;
-       struct mutex lock;
-       struct led_classdev led_dev;
-       enum lp8788_isink_number isink_num;
-       int on;
-};
-
-struct lp8788_led_config {
-       enum lp8788_isink_scale scale;
-       enum lp8788_isink_number num;
-       int iout;
-};
-
-static struct lp8788_led_config default_led_config = {
-       .scale = LP8788_ISINK_SCALE_100mA,
-       .num   = LP8788_ISINK_3,
-       .iout  = 0,
-};
-
-static int lp8788_led_init_device(struct lp8788_led *led,
-                               struct lp8788_led_platform_data *pdata)
-{
-       struct lp8788_led_config *cfg = &default_led_config;
-       u8 addr, mask, val;
-       int ret;
-
-       if (pdata) {
-               cfg->scale = pdata->scale;
-               cfg->num = pdata->num;
-               cfg->iout = pdata->iout_code;
-       }
-
-       led->isink_num = cfg->num;
-
-       /* scale configuration */
-       addr = LP8788_ISINK_CTRL;
-       mask = 1 << (cfg->num + LP8788_ISINK_SCALE_OFFSET);
-       val = cfg->scale << (cfg->num + LP8788_ISINK_SCALE_OFFSET);
-       ret = lp8788_update_bits(led->lp, addr, mask, val);
-       if (ret)
-               return ret;
-
-       /* current configuration */
-       addr = lp8788_iout_addr[cfg->num];
-       mask = lp8788_iout_mask[cfg->num];
-       val = cfg->iout;
-
-       return lp8788_update_bits(led->lp, addr, mask, val);
-}
-
-static int lp8788_led_enable(struct lp8788_led *led,
-                       enum lp8788_isink_number num, int on)
-{
-       int ret;
-
-       u8 mask = 1 << num;
-       u8 val = on << num;
-
-       ret = lp8788_update_bits(led->lp, LP8788_ISINK_CTRL, mask, val);
-       if (ret == 0)
-               led->on = on;
-
-       return ret;
-}
-
-static int lp8788_brightness_set(struct led_classdev *led_cdev,
-                               enum led_brightness val)
-{
-       struct lp8788_led *led =
-                       container_of(led_cdev, struct lp8788_led, led_dev);
-
-       enum lp8788_isink_number num = led->isink_num;
-       int enable, ret;
-
-       mutex_lock(&led->lock);
-
-       switch (num) {
-       case LP8788_ISINK_1:
-       case LP8788_ISINK_2:
-       case LP8788_ISINK_3:
-               ret = lp8788_write_byte(led->lp, lp8788_pwm_addr[num], val);
-               if (ret < 0)
-                       goto unlock;
-               break;
-       default:
-               mutex_unlock(&led->lock);
-               return -EINVAL;
-       }
-
-       enable = (val > 0) ? 1 : 0;
-       if (enable != led->on)
-               ret = lp8788_led_enable(led, num, enable);
-unlock:
-       mutex_unlock(&led->lock);
-       return ret;
-}
-
-static int lp8788_led_probe(struct platform_device *pdev)
-{
-       struct lp8788 *lp = dev_get_drvdata(pdev->dev.parent);
-       struct lp8788_led_platform_data *led_pdata;
-       struct lp8788_led *led;
-       struct device *dev = &pdev->dev;
-       int ret;
-
-       led = devm_kzalloc(dev, sizeof(struct lp8788_led), GFP_KERNEL);
-       if (!led)
-               return -ENOMEM;
-
-       led->lp = lp;
-       led->led_dev.max_brightness = MAX_BRIGHTNESS;
-       led->led_dev.brightness_set_blocking = lp8788_brightness_set;
-
-       led_pdata = lp->pdata ? lp->pdata->led_pdata : NULL;
-
-       if (!led_pdata || !led_pdata->name)
-               led->led_dev.name = DEFAULT_LED_NAME;
-       else
-               led->led_dev.name = led_pdata->name;
-
-       mutex_init(&led->lock);
-
-       ret = lp8788_led_init_device(led, led_pdata);
-       if (ret) {
-               dev_err(dev, "led init device err: %d\n", ret);
-               return ret;
-       }
-
-       ret = devm_led_classdev_register(dev, &led->led_dev);
-       if (ret) {
-               dev_err(dev, "led register err: %d\n", ret);
-               return ret;
-       }
-
-       return 0;
-}
-
-static struct platform_driver lp8788_led_driver = {
-       .probe = lp8788_led_probe,
-       .driver = {
-               .name = LP8788_DEV_KEYLED,
-       },
-};
-module_platform_driver(lp8788_led_driver);
-
-MODULE_DESCRIPTION("Texas Instruments LP8788 Keyboard LED Driver");
-MODULE_AUTHOR("Milo Kim");
-MODULE_LICENSE("GPL");
-MODULE_ALIAS("platform:lp8788-keyled");
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index fda9d7ad5743..09e400e1f4b0 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -1603,16 +1603,6 @@ config MFD_LP3943
          With these functionalities, it can be used for LED string control or
          general usage such like a GPIO controller and a PWM controller.
 
-config MFD_LP8788
-       bool "TI LP8788 Power Management Unit Driver"
-       depends on I2C=y
-       select MFD_CORE
-       select REGMAP_I2C
-       select IRQ_DOMAIN
-       help
-         TI LP8788 PMU supports regulators, battery charger, RTC,
-         ADC, backlight driver and current sinks.
-
 config MFD_TI_LMU
        tristate "TI Lighting Management Unit driver"
        depends on I2C
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index 82795e65cbe7..e3fe998c3513 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -150,7 +150,6 @@ obj-$(CONFIG_MFD_AXP20X_I2C)        += axp20x-i2c.o
 obj-$(CONFIG_MFD_AXP20X_RSB)   += axp20x-rsb.o
 
 obj-$(CONFIG_MFD_LP3943)       += lp3943.o
-obj-$(CONFIG_MFD_LP8788)       += lp8788.o lp8788-irq.o
 
 obj-$(CONFIG_MFD_TI_LMU)       += ti-lmu.o
 
diff --git a/drivers/mfd/lp8788-irq.c b/drivers/mfd/lp8788-irq.c
deleted file mode 100644
index f62fa2d7f010..000000000000
--- a/drivers/mfd/lp8788-irq.c
+++ /dev/null
@@ -1,194 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * TI LP8788 MFD - interrupt handler
- *
- * Copyright 2012 Texas Instruments
- *
- * Author: Milo(Woogyom) Kim <[email protected]>
- */
-
-#include <linux/delay.h>
-#include <linux/err.h>
-#include <linux/interrupt.h>
-#include <linux/irq.h>
-#include <linux/irqdomain.h>
-#include <linux/device.h>
-#include <linux/mfd/lp8788.h>
-#include <linux/module.h>
-#include <linux/slab.h>
-
-/* register address */
-#define LP8788_INT_1                   0x00
-#define LP8788_INTEN_1                 0x03
-
-#define BASE_INTEN_ADDR                        LP8788_INTEN_1
-#define SIZE_REG                       8
-#define NUM_REGS                       3
-
-/*
- * struct lp8788_irq_data
- * @lp               : used for accessing to lp8788 registers
- * @irq_lock         : mutex for enabling/disabling the interrupt
- * @domain           : IRQ domain for handling nested interrupt
- * @enabled          : status of enabled interrupt
- */
-struct lp8788_irq_data {
-       struct lp8788 *lp;
-       struct mutex irq_lock;
-       struct irq_domain *domain;
-       int enabled[LP8788_INT_MAX];
-};
-
-static inline u8 _irq_to_addr(enum lp8788_int_id id)
-{
-       return id / SIZE_REG;
-}
-
-static inline u8 _irq_to_enable_addr(enum lp8788_int_id id)
-{
-       return _irq_to_addr(id) + BASE_INTEN_ADDR;
-}
-
-static inline u8 _irq_to_mask(enum lp8788_int_id id)
-{
-       return 1 << (id % SIZE_REG);
-}
-
-static inline u8 _irq_to_val(enum lp8788_int_id id, int enable)
-{
-       return enable << (id % SIZE_REG);
-}
-
-static void lp8788_irq_enable(struct irq_data *data)
-{
-       struct lp8788_irq_data *irqd = irq_data_get_irq_chip_data(data);
-
-       irqd->enabled[data->hwirq] = 1;
-}
-
-static void lp8788_irq_disable(struct irq_data *data)
-{
-       struct lp8788_irq_data *irqd = irq_data_get_irq_chip_data(data);
-
-       irqd->enabled[data->hwirq] = 0;
-}
-
-static void lp8788_irq_bus_lock(struct irq_data *data)
-{
-       struct lp8788_irq_data *irqd = irq_data_get_irq_chip_data(data);
-
-       mutex_lock(&irqd->irq_lock);
-}
-
-static void lp8788_irq_bus_sync_unlock(struct irq_data *data)
-{
-       struct lp8788_irq_data *irqd = irq_data_get_irq_chip_data(data);
-       enum lp8788_int_id irq = data->hwirq;
-       u8 addr, mask, val;
-
-       addr = _irq_to_enable_addr(irq);
-       mask = _irq_to_mask(irq);
-       val = _irq_to_val(irq, irqd->enabled[irq]);
-
-       lp8788_update_bits(irqd->lp, addr, mask, val);
-
-       mutex_unlock(&irqd->irq_lock);
-}
-
-static struct irq_chip lp8788_irq_chip = {
-       .name                   = "lp8788",
-       .irq_enable             = lp8788_irq_enable,
-       .irq_disable            = lp8788_irq_disable,
-       .irq_bus_lock           = lp8788_irq_bus_lock,
-       .irq_bus_sync_unlock    = lp8788_irq_bus_sync_unlock,
-};
-
-static irqreturn_t lp8788_irq_handler(int irq, void *ptr)
-{
-       struct lp8788_irq_data *irqd = ptr;
-       struct lp8788 *lp = irqd->lp;
-       u8 status[NUM_REGS], addr, mask;
-       bool handled = false;
-       int i;
-
-       if (lp8788_read_multi_bytes(lp, LP8788_INT_1, status, NUM_REGS))
-               return IRQ_NONE;
-
-       for (i = 0 ; i < LP8788_INT_MAX ; i++) {
-               addr = _irq_to_addr(i);
-               mask = _irq_to_mask(i);
-
-               /* reporting only if the irq is enabled */
-               if (status[addr] & mask) {
-                       handle_nested_irq(irq_find_mapping(irqd->domain, i));
-                       handled = true;
-               }
-       }
-
-       return handled ? IRQ_HANDLED : IRQ_NONE;
-}
-
-static int lp8788_irq_map(struct irq_domain *d, unsigned int virq,
-                       irq_hw_number_t hwirq)
-{
-       struct lp8788_irq_data *irqd = d->host_data;
-       struct irq_chip *chip = &lp8788_irq_chip;
-
-       irq_set_chip_data(virq, irqd);
-       irq_set_chip_and_handler(virq, chip, handle_edge_irq);
-       irq_set_nested_thread(virq, 1);
-       irq_set_noprobe(virq);
-
-       return 0;
-}
-
-static const struct irq_domain_ops lp8788_domain_ops = {
-       .map = lp8788_irq_map,
-};
-
-int lp8788_irq_init(struct lp8788 *lp, int irq)
-{
-       struct lp8788_irq_data *irqd;
-       int ret;
-
-       if (irq <= 0) {
-               dev_warn(lp->dev, "invalid irq number: %d\n", irq);
-               return 0;
-       }
-
-       irqd = devm_kzalloc(lp->dev, sizeof(*irqd), GFP_KERNEL);
-       if (!irqd)
-               return -ENOMEM;
-
-       irqd->lp = lp;
-       irqd->domain = irq_domain_create_linear(dev_fwnode(lp->dev), 
LP8788_INT_MAX,
-                                       &lp8788_domain_ops, irqd);
-       if (!irqd->domain) {
-               dev_err(lp->dev, "failed to add irq domain err\n");
-               return -EINVAL;
-       }
-
-       lp->irqdm = irqd->domain;
-       mutex_init(&irqd->irq_lock);
-
-       ret = request_threaded_irq(irq, NULL, lp8788_irq_handler,
-                               IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
-                               "lp8788-irq", irqd);
-       if (ret) {
-               irq_domain_remove(lp->irqdm);
-               dev_err(lp->dev, "failed to create a thread for IRQ_N\n");
-               return ret;
-       }
-
-       lp->irq = irq;
-
-       return 0;
-}
-
-void lp8788_irq_exit(struct lp8788 *lp)
-{
-       if (lp->irq)
-               free_irq(lp->irq, lp->irqdm);
-       if (lp->irqdm)
-               irq_domain_remove(lp->irqdm);
-}
diff --git a/drivers/mfd/lp8788.c b/drivers/mfd/lp8788.c
deleted file mode 100644
index 32f255378f5a..000000000000
--- a/drivers/mfd/lp8788.c
+++ /dev/null
@@ -1,246 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * TI LP8788 MFD - core interface
- *
- * Copyright 2012 Texas Instruments
- *
- * Author: Milo(Woogyom) Kim <[email protected]>
- */
-
-#include <linux/err.h>
-#include <linux/i2c.h>
-#include <linux/mfd/core.h>
-#include <linux/mfd/lp8788.h>
-#include <linux/module.h>
-#include <linux/slab.h>
-
-#define MAX_LP8788_REGISTERS           0xA2
-
-#define MFD_DEV_SIMPLE(_name)                                  \
-{                                                              \
-       .name = LP8788_DEV_##_name,                             \
-}
-
-#define MFD_DEV_WITH_ID(_name, _id)                            \
-{                                                              \
-       .name = LP8788_DEV_##_name,                             \
-       .id = _id,                                              \
-}
-
-#define MFD_DEV_WITH_RESOURCE(_name, _resource, num_resource)  \
-{                                                              \
-       .name = LP8788_DEV_##_name,                             \
-       .resources = _resource,                                 \
-       .num_resources = num_resource,                          \
-}
-
-static const struct resource chg_irqs[] = {
-       /* Charger Interrupts */
-       {
-               .start = LP8788_INT_CHG_INPUT_STATE,
-               .end   = LP8788_INT_PRECHG_TIMEOUT,
-               .name  = LP8788_CHG_IRQ,
-               .flags = IORESOURCE_IRQ,
-       },
-       /* Power Routing Switch Interrupts */
-       {
-               .start = LP8788_INT_ENTER_SYS_SUPPORT,
-               .end   = LP8788_INT_EXIT_SYS_SUPPORT,
-               .name  = LP8788_PRSW_IRQ,
-               .flags = IORESOURCE_IRQ,
-       },
-       /* Battery Interrupts */
-       {
-               .start = LP8788_INT_BATT_LOW,
-               .end   = LP8788_INT_NO_BATT,
-               .name  = LP8788_BATT_IRQ,
-               .flags = IORESOURCE_IRQ,
-       },
-};
-
-static const struct resource rtc_irqs[] = {
-       {
-               .start = LP8788_INT_RTC_ALARM1,
-               .end   = LP8788_INT_RTC_ALARM2,
-               .name  = LP8788_ALM_IRQ,
-               .flags = IORESOURCE_IRQ,
-       },
-};
-
-static const struct mfd_cell lp8788_devs[] = {
-       /* 4 bucks */
-       MFD_DEV_WITH_ID(BUCK, 1),
-       MFD_DEV_WITH_ID(BUCK, 2),
-       MFD_DEV_WITH_ID(BUCK, 3),
-       MFD_DEV_WITH_ID(BUCK, 4),
-
-       /* 12 digital ldos */
-       MFD_DEV_WITH_ID(DLDO, 1),
-       MFD_DEV_WITH_ID(DLDO, 2),
-       MFD_DEV_WITH_ID(DLDO, 3),
-       MFD_DEV_WITH_ID(DLDO, 4),
-       MFD_DEV_WITH_ID(DLDO, 5),
-       MFD_DEV_WITH_ID(DLDO, 6),
-       MFD_DEV_WITH_ID(DLDO, 7),
-       MFD_DEV_WITH_ID(DLDO, 8),
-       MFD_DEV_WITH_ID(DLDO, 9),
-       MFD_DEV_WITH_ID(DLDO, 10),
-       MFD_DEV_WITH_ID(DLDO, 11),
-       MFD_DEV_WITH_ID(DLDO, 12),
-
-       /* 10 analog ldos */
-       MFD_DEV_WITH_ID(ALDO, 1),
-       MFD_DEV_WITH_ID(ALDO, 2),
-       MFD_DEV_WITH_ID(ALDO, 3),
-       MFD_DEV_WITH_ID(ALDO, 4),
-       MFD_DEV_WITH_ID(ALDO, 5),
-       MFD_DEV_WITH_ID(ALDO, 6),
-       MFD_DEV_WITH_ID(ALDO, 7),
-       MFD_DEV_WITH_ID(ALDO, 8),
-       MFD_DEV_WITH_ID(ALDO, 9),
-       MFD_DEV_WITH_ID(ALDO, 10),
-
-       /* ADC */
-       MFD_DEV_SIMPLE(ADC),
-
-       /* battery charger */
-       MFD_DEV_WITH_RESOURCE(CHARGER, chg_irqs, ARRAY_SIZE(chg_irqs)),
-
-       /* rtc */
-       MFD_DEV_WITH_RESOURCE(RTC, rtc_irqs, ARRAY_SIZE(rtc_irqs)),
-
-       /* backlight */
-       MFD_DEV_SIMPLE(BACKLIGHT),
-
-       /* current sink for vibrator */
-       MFD_DEV_SIMPLE(VIBRATOR),
-
-       /* current sink for keypad LED */
-       MFD_DEV_SIMPLE(KEYLED),
-};
-
-int lp8788_read_byte(struct lp8788 *lp, u8 reg, u8 *data)
-{
-       int ret;
-       unsigned int val;
-
-       ret = regmap_read(lp->regmap, reg, &val);
-       if (ret < 0) {
-               dev_err(lp->dev, "failed to read 0x%.2x\n", reg);
-               return ret;
-       }
-
-       *data = (u8)val;
-       return 0;
-}
-EXPORT_SYMBOL_GPL(lp8788_read_byte);
-
-int lp8788_read_multi_bytes(struct lp8788 *lp, u8 reg, u8 *data, size_t count)
-{
-       return regmap_bulk_read(lp->regmap, reg, data, count);
-}
-EXPORT_SYMBOL_GPL(lp8788_read_multi_bytes);
-
-int lp8788_write_byte(struct lp8788 *lp, u8 reg, u8 data)
-{
-       return regmap_write(lp->regmap, reg, data);
-}
-EXPORT_SYMBOL_GPL(lp8788_write_byte);
-
-int lp8788_update_bits(struct lp8788 *lp, u8 reg, u8 mask, u8 data)
-{
-       return regmap_update_bits(lp->regmap, reg, mask, data);
-}
-EXPORT_SYMBOL_GPL(lp8788_update_bits);
-
-static int lp8788_platform_init(struct lp8788 *lp)
-{
-       struct lp8788_platform_data *pdata = lp->pdata;
-
-       return (pdata && pdata->init_func) ? pdata->init_func(lp) : 0;
-}
-
-static const struct regmap_config lp8788_regmap_config = {
-       .reg_bits = 8,
-       .val_bits = 8,
-       .max_register = MAX_LP8788_REGISTERS,
-};
-
-static int lp8788_probe(struct i2c_client *cl)
-{
-       struct lp8788 *lp;
-       struct lp8788_platform_data *pdata = dev_get_platdata(&cl->dev);
-       int ret;
-
-       lp = devm_kzalloc(&cl->dev, sizeof(struct lp8788), GFP_KERNEL);
-       if (!lp)
-               return -ENOMEM;
-
-       lp->regmap = devm_regmap_init_i2c(cl, &lp8788_regmap_config);
-       if (IS_ERR(lp->regmap)) {
-               ret = PTR_ERR(lp->regmap);
-               dev_err(&cl->dev, "regmap init i2c err: %d\n", ret);
-               return ret;
-       }
-
-       lp->pdata = pdata;
-       lp->dev = &cl->dev;
-       i2c_set_clientdata(cl, lp);
-
-       ret = lp8788_platform_init(lp);
-       if (ret)
-               return ret;
-
-       ret = lp8788_irq_init(lp, cl->irq);
-       if (ret)
-               return ret;
-
-       ret = mfd_add_devices(lp->dev, -1, lp8788_devs,
-                             ARRAY_SIZE(lp8788_devs), NULL, 0, NULL);
-       if (ret)
-               goto err_exit_irq;
-
-       return 0;
-
-err_exit_irq:
-       lp8788_irq_exit(lp);
-       return ret;
-}
-
-static void lp8788_remove(struct i2c_client *cl)
-{
-       struct lp8788 *lp = i2c_get_clientdata(cl);
-
-       mfd_remove_devices(lp->dev);
-       lp8788_irq_exit(lp);
-}
-
-static const struct i2c_device_id lp8788_ids[] = {
-       { "lp8788" },
-       { }
-};
-MODULE_DEVICE_TABLE(i2c, lp8788_ids);
-
-static struct i2c_driver lp8788_driver = {
-       .driver = {
-               .name = "lp8788",
-       },
-       .probe = lp8788_probe,
-       .remove = lp8788_remove,
-       .id_table = lp8788_ids,
-};
-
-static int __init lp8788_init(void)
-{
-       return i2c_add_driver(&lp8788_driver);
-}
-subsys_initcall(lp8788_init);
-
-static void __exit lp8788_exit(void)
-{
-       i2c_del_driver(&lp8788_driver);
-}
-module_exit(lp8788_exit);
-
-MODULE_DESCRIPTION("TI LP8788 MFD Driver");
-MODULE_AUTHOR("Milo Kim");
diff --git a/drivers/power/supply/Kconfig b/drivers/power/supply/Kconfig
index a492c86e879a..9bb2ac78dca9 100644
--- a/drivers/power/supply/Kconfig
+++ b/drivers/power/supply/Kconfig
@@ -555,14 +555,6 @@ config CHARGER_LP8727
        help
          Say Y here to enable support for LP8727 Charger Driver.
 
-config CHARGER_LP8788
-       tristate "TI LP8788 charger driver"
-       depends on MFD_LP8788
-       depends on LP8788_ADC
-       depends on IIO
-       help
-         Say Y to enable support for the LP8788 linear charger.
-
 config CHARGER_GPIO
        tristate "GPIO charger"
        depends on GPIOLIB || COMPILE_TEST
diff --git a/drivers/power/supply/Makefile b/drivers/power/supply/Makefile
index 380546080112..76422bece94c 100644
--- a/drivers/power/supply/Makefile
+++ b/drivers/power/supply/Makefile
@@ -76,7 +76,6 @@ obj-$(CONFIG_CHARGER_MAX8903) += max8903_charger.o
 obj-$(CONFIG_CHARGER_TWL4030)  += twl4030_charger.o
 obj-$(CONFIG_CHARGER_TWL6030)  += twl6030_charger.o
 obj-$(CONFIG_CHARGER_LP8727)   += lp8727_charger.o
-obj-$(CONFIG_CHARGER_LP8788)   += lp8788-charger.o
 obj-$(CONFIG_CHARGER_GPIO)     += gpio-charger.o
 obj-$(CONFIG_CHARGER_MANAGER)  += charger-manager.o
 obj-$(CONFIG_CHARGER_LT3651)   += lt3651-charger.o
diff --git a/drivers/power/supply/lp8788-charger.c 
b/drivers/power/supply/lp8788-charger.c
deleted file mode 100644
index b8b74efc9671..000000000000
--- a/drivers/power/supply/lp8788-charger.c
+++ /dev/null
@@ -1,730 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * TI LP8788 MFD - battery charger driver
- *
- * Copyright 2012 Texas Instruments
- *
- * Author: Milo(Woogyom) Kim <[email protected]>
- */
-
-#include <linux/err.h>
-#include <linux/iio/consumer.h>
-#include <linux/interrupt.h>
-#include <linux/irqdomain.h>
-#include <linux/mfd/lp8788.h>
-#include <linux/module.h>
-#include <linux/platform_device.h>
-#include <linux/power_supply.h>
-#include <linux/slab.h>
-#include <linux/workqueue.h>
-
-/* register address */
-#define LP8788_CHG_STATUS              0x07
-#define LP8788_CHG_IDCIN               0x13
-#define LP8788_CHG_IBATT               0x14
-#define LP8788_CHG_VTERM               0x15
-#define LP8788_CHG_EOC                 0x16
-
-/* mask/shift bits */
-#define LP8788_CHG_INPUT_STATE_M       0x03    /* Addr 07h */
-#define LP8788_CHG_STATE_M             0x3C
-#define LP8788_CHG_STATE_S             2
-#define LP8788_NO_BATT_M               BIT(6)
-#define LP8788_BAD_BATT_M              BIT(7)
-#define LP8788_CHG_IBATT_M             0x1F    /* Addr 14h */
-#define LP8788_CHG_VTERM_M             0x0F    /* Addr 15h */
-#define LP8788_CHG_EOC_LEVEL_M         0x30    /* Addr 16h */
-#define LP8788_CHG_EOC_LEVEL_S         4
-#define LP8788_CHG_EOC_TIME_M          0x0E
-#define LP8788_CHG_EOC_TIME_S          1
-#define LP8788_CHG_EOC_MODE_M          BIT(0)
-
-#define LP8788_CHARGER_NAME            "charger"
-#define LP8788_BATTERY_NAME            "main_batt"
-
-#define LP8788_CHG_START               0x11
-#define LP8788_CHG_END                 0x1C
-
-#define LP8788_ISEL_MAX                        23
-#define LP8788_ISEL_STEP               50
-#define LP8788_VTERM_MIN               4100
-#define LP8788_VTERM_STEP              25
-#define LP8788_MAX_BATT_CAPACITY       100
-#define LP8788_MAX_CHG_IRQS            11
-
-enum lp8788_charging_state {
-       LP8788_OFF,
-       LP8788_WARM_UP,
-       LP8788_LOW_INPUT = 0x3,
-       LP8788_PRECHARGE,
-       LP8788_CC,
-       LP8788_CV,
-       LP8788_MAINTENANCE,
-       LP8788_BATTERY_FAULT,
-       LP8788_SYSTEM_SUPPORT = 0xC,
-       LP8788_HIGH_CURRENT = 0xF,
-       LP8788_MAX_CHG_STATE,
-};
-
-enum lp8788_charger_adc_sel {
-       LP8788_VBATT,
-       LP8788_BATT_TEMP,
-       LP8788_NUM_CHG_ADC,
-};
-
-enum lp8788_charger_input_state {
-       LP8788_SYSTEM_SUPPLY = 1,
-       LP8788_FULL_FUNCTION,
-};
-
-/*
- * struct lp8788_chg_irq
- * @which        : lp8788 interrupt id
- * @virq         : Linux IRQ number from irq_domain
- */
-struct lp8788_chg_irq {
-       enum lp8788_int_id which;
-       int virq;
-};
-
-/*
- * struct lp8788_charger
- * @lp           : used for accessing the registers of mfd lp8788 device
- * @charger      : power supply driver for the battery charger
- * @battery      : power supply driver for the battery
- * @charger_work : work queue for charger input interrupts
- * @chan         : iio channels for getting adc values
- *                 eg) battery voltage, capacity and temperature
- * @irqs         : charger dedicated interrupts
- * @num_irqs     : total numbers of charger interrupts
- * @pdata        : charger platform specific data
- */
-struct lp8788_charger {
-       struct lp8788 *lp;
-       struct power_supply *charger;
-       struct power_supply *battery;
-       struct work_struct charger_work;
-       struct iio_channel *chan[LP8788_NUM_CHG_ADC];
-       struct lp8788_chg_irq irqs[LP8788_MAX_CHG_IRQS];
-       int num_irqs;
-       struct lp8788_charger_platform_data *pdata;
-};
-
-static char *battery_supplied_to[] = {
-       LP8788_BATTERY_NAME,
-};
-
-static enum power_supply_property lp8788_charger_prop[] = {
-       POWER_SUPPLY_PROP_ONLINE,
-       POWER_SUPPLY_PROP_CURRENT_MAX,
-};
-
-static enum power_supply_property lp8788_battery_prop[] = {
-       POWER_SUPPLY_PROP_STATUS,
-       POWER_SUPPLY_PROP_HEALTH,
-       POWER_SUPPLY_PROP_PRESENT,
-       POWER_SUPPLY_PROP_VOLTAGE_NOW,
-       POWER_SUPPLY_PROP_CAPACITY,
-       POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT,
-       POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX,
-       POWER_SUPPLY_PROP_TEMP,
-};
-
-static bool lp8788_is_charger_detected(struct lp8788_charger *pchg)
-{
-       u8 data;
-
-       lp8788_read_byte(pchg->lp, LP8788_CHG_STATUS, &data);
-       data &= LP8788_CHG_INPUT_STATE_M;
-
-       return data == LP8788_SYSTEM_SUPPLY || data == LP8788_FULL_FUNCTION;
-}
-
-static int lp8788_charger_get_property(struct power_supply *psy,
-                                       enum power_supply_property psp,
-                                       union power_supply_propval *val)
-{
-       struct lp8788_charger *pchg = dev_get_drvdata(psy->dev.parent);
-       u8 read;
-
-       switch (psp) {
-       case POWER_SUPPLY_PROP_ONLINE:
-               val->intval = lp8788_is_charger_detected(pchg);
-               break;
-       case POWER_SUPPLY_PROP_CURRENT_MAX:
-               lp8788_read_byte(pchg->lp, LP8788_CHG_IDCIN, &read);
-               val->intval = LP8788_ISEL_STEP *
-                               (min_t(int, read, LP8788_ISEL_MAX) + 1);
-               break;
-       default:
-               return -EINVAL;
-       }
-
-       return 0;
-}
-
-static int lp8788_get_battery_status(struct lp8788_charger *pchg,
-                               union power_supply_propval *val)
-{
-       enum lp8788_charging_state state;
-       u8 data;
-       int ret;
-
-       ret = lp8788_read_byte(pchg->lp, LP8788_CHG_STATUS, &data);
-       if (ret)
-               return ret;
-
-       state = (data & LP8788_CHG_STATE_M) >> LP8788_CHG_STATE_S;
-       switch (state) {
-       case LP8788_OFF:
-               val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
-               break;
-       case LP8788_PRECHARGE:
-       case LP8788_CC:
-       case LP8788_CV:
-       case LP8788_HIGH_CURRENT:
-               val->intval = POWER_SUPPLY_STATUS_CHARGING;
-               break;
-       case LP8788_MAINTENANCE:
-               val->intval = POWER_SUPPLY_STATUS_FULL;
-               break;
-       default:
-               val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING;
-               break;
-       }
-
-       return 0;
-}
-
-static int lp8788_get_battery_health(struct lp8788_charger *pchg,
-                               union power_supply_propval *val)
-{
-       u8 data;
-       int ret;
-
-       ret = lp8788_read_byte(pchg->lp, LP8788_CHG_STATUS, &data);
-       if (ret)
-               return ret;
-
-       if (data & LP8788_NO_BATT_M)
-               val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE;
-       else if (data & LP8788_BAD_BATT_M)
-               val->intval = POWER_SUPPLY_HEALTH_DEAD;
-       else
-               val->intval = POWER_SUPPLY_HEALTH_GOOD;
-
-       return 0;
-}
-
-static int lp8788_get_battery_present(struct lp8788_charger *pchg,
-                               union power_supply_propval *val)
-{
-       u8 data;
-       int ret;
-
-       ret = lp8788_read_byte(pchg->lp, LP8788_CHG_STATUS, &data);
-       if (ret)
-               return ret;
-
-       val->intval = !(data & LP8788_NO_BATT_M);
-       return 0;
-}
-
-static int lp8788_get_vbatt_adc(struct lp8788_charger *pchg, int *result)
-{
-       struct iio_channel *channel = pchg->chan[LP8788_VBATT];
-
-       if (!channel)
-               return -EINVAL;
-
-       return iio_read_channel_processed(channel, result);
-}
-
-static int lp8788_get_battery_voltage(struct lp8788_charger *pchg,
-                               union power_supply_propval *val)
-{
-       return lp8788_get_vbatt_adc(pchg, &val->intval);
-}
-
-static int lp8788_get_battery_capacity(struct lp8788_charger *pchg,
-                               union power_supply_propval *val)
-{
-       struct lp8788 *lp = pchg->lp;
-       struct lp8788_charger_platform_data *pdata = pchg->pdata;
-       unsigned int max_vbatt;
-       int vbatt;
-       enum lp8788_charging_state state;
-       u8 data;
-       int ret;
-
-       if (!pdata)
-               return -EINVAL;
-
-       max_vbatt = pdata->max_vbatt_mv;
-       if (max_vbatt == 0)
-               return -EINVAL;
-
-       ret = lp8788_read_byte(lp, LP8788_CHG_STATUS, &data);
-       if (ret)
-               return ret;
-
-       state = (data & LP8788_CHG_STATE_M) >> LP8788_CHG_STATE_S;
-
-       if (state == LP8788_MAINTENANCE) {
-               val->intval = LP8788_MAX_BATT_CAPACITY;
-       } else {
-               ret = lp8788_get_vbatt_adc(pchg, &vbatt);
-               if (ret)
-                       return ret;
-
-               val->intval = (vbatt * LP8788_MAX_BATT_CAPACITY) / max_vbatt;
-               val->intval = min(val->intval, LP8788_MAX_BATT_CAPACITY);
-       }
-
-       return 0;
-}
-
-static int lp8788_get_battery_temperature(struct lp8788_charger *pchg,
-                               union power_supply_propval *val)
-{
-       struct iio_channel *channel = pchg->chan[LP8788_BATT_TEMP];
-       int result;
-       int ret;
-
-       if (!channel)
-               return -EINVAL;
-
-       ret = iio_read_channel_processed(channel, &result);
-       if (ret < 0)
-               return -EINVAL;
-
-       /* unit: 0.1 'C */
-       val->intval = result * 10;
-
-       return 0;
-}
-
-static int lp8788_get_battery_charging_current(struct lp8788_charger *pchg,
-                               union power_supply_propval *val)
-{
-       u8 read;
-
-       lp8788_read_byte(pchg->lp, LP8788_CHG_IBATT, &read);
-       read &= LP8788_CHG_IBATT_M;
-       val->intval = LP8788_ISEL_STEP *
-                       (min_t(int, read, LP8788_ISEL_MAX) + 1);
-
-       return 0;
-}
-
-static int lp8788_get_charging_termination_voltage(struct lp8788_charger *pchg,
-                               union power_supply_propval *val)
-{
-       u8 read;
-
-       lp8788_read_byte(pchg->lp, LP8788_CHG_VTERM, &read);
-       read &= LP8788_CHG_VTERM_M;
-       val->intval = LP8788_VTERM_MIN + LP8788_VTERM_STEP * read;
-
-       return 0;
-}
-
-static int lp8788_battery_get_property(struct power_supply *psy,
-                                       enum power_supply_property psp,
-                                       union power_supply_propval *val)
-{
-       struct lp8788_charger *pchg = dev_get_drvdata(psy->dev.parent);
-
-       switch (psp) {
-       case POWER_SUPPLY_PROP_STATUS:
-               return lp8788_get_battery_status(pchg, val);
-       case POWER_SUPPLY_PROP_HEALTH:
-               return lp8788_get_battery_health(pchg, val);
-       case POWER_SUPPLY_PROP_PRESENT:
-               return lp8788_get_battery_present(pchg, val);
-       case POWER_SUPPLY_PROP_VOLTAGE_NOW:
-               return lp8788_get_battery_voltage(pchg, val);
-       case POWER_SUPPLY_PROP_CAPACITY:
-               return lp8788_get_battery_capacity(pchg, val);
-       case POWER_SUPPLY_PROP_TEMP:
-               return lp8788_get_battery_temperature(pchg, val);
-       case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT:
-               return lp8788_get_battery_charging_current(pchg, val);
-       case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX:
-               return lp8788_get_charging_termination_voltage(pchg, val);
-       default:
-               return -EINVAL;
-       }
-}
-
-static inline bool lp8788_is_valid_charger_register(u8 addr)
-{
-       return addr >= LP8788_CHG_START && addr <= LP8788_CHG_END;
-}
-
-static int lp8788_update_charger_params(struct platform_device *pdev,
-                                       struct lp8788_charger *pchg)
-{
-       struct lp8788 *lp = pchg->lp;
-       struct lp8788_charger_platform_data *pdata = pchg->pdata;
-       struct lp8788_chg_param *param;
-       int i;
-       int ret;
-
-       if (!pdata || !pdata->chg_params) {
-               dev_info(&pdev->dev, "skip updating charger parameters\n");
-               return 0;
-       }
-
-       /* setting charging parameters */
-       for (i = 0; i < pdata->num_chg_params; i++) {
-               param = pdata->chg_params + i;
-
-               if (lp8788_is_valid_charger_register(param->addr)) {
-                       ret = lp8788_write_byte(lp, param->addr, param->val);
-                       if (ret)
-                               return ret;
-               }
-       }
-
-       return 0;
-}
-
-static const struct power_supply_desc lp8788_psy_charger_desc = {
-       .name           = LP8788_CHARGER_NAME,
-       .type           = POWER_SUPPLY_TYPE_MAINS,
-       .properties     = lp8788_charger_prop,
-       .num_properties = ARRAY_SIZE(lp8788_charger_prop),
-       .get_property   = lp8788_charger_get_property,
-};
-
-static const struct power_supply_desc lp8788_psy_battery_desc = {
-       .name           = LP8788_BATTERY_NAME,
-       .type           = POWER_SUPPLY_TYPE_BATTERY,
-       .properties     = lp8788_battery_prop,
-       .num_properties = ARRAY_SIZE(lp8788_battery_prop),
-       .get_property   = lp8788_battery_get_property,
-};
-
-static void lp8788_charger_event(struct work_struct *work)
-{
-       struct lp8788_charger *pchg =
-               container_of(work, struct lp8788_charger, charger_work);
-       struct lp8788_charger_platform_data *pdata = pchg->pdata;
-       enum lp8788_charger_event event = lp8788_is_charger_detected(pchg);
-
-       pdata->charger_event(pchg->lp, event);
-}
-
-static bool lp8788_find_irq_id(struct lp8788_charger *pchg, int virq, int *id)
-{
-       bool found = false;
-       int i;
-
-       for (i = 0; i < pchg->num_irqs; i++) {
-               if (pchg->irqs[i].virq == virq) {
-                       *id = pchg->irqs[i].which;
-                       found = true;
-                       break;
-               }
-       }
-
-       return found;
-}
-
-static irqreturn_t lp8788_charger_irq_thread(int virq, void *ptr)
-{
-       struct lp8788_charger *pchg = ptr;
-       struct lp8788_charger_platform_data *pdata = pchg->pdata;
-       int id = -1;
-
-       if (!lp8788_find_irq_id(pchg, virq, &id))
-               return IRQ_NONE;
-
-       switch (id) {
-       case LP8788_INT_CHG_INPUT_STATE:
-       case LP8788_INT_CHG_STATE:
-       case LP8788_INT_EOC:
-       case LP8788_INT_BATT_LOW:
-       case LP8788_INT_NO_BATT:
-               power_supply_changed(pchg->charger);
-               power_supply_changed(pchg->battery);
-               break;
-       default:
-               break;
-       }
-
-       /* report charger dectection event if used */
-       if (!pdata)
-               goto irq_handled;
-
-       if (pdata->charger_event && id == LP8788_INT_CHG_INPUT_STATE)
-               schedule_work(&pchg->charger_work);
-
-irq_handled:
-       return IRQ_HANDLED;
-}
-
-static int lp8788_set_irqs(struct platform_device *pdev,
-                       struct lp8788_charger *pchg, const char *name)
-{
-       struct resource *r;
-       struct irq_domain *irqdm = pchg->lp->irqdm;
-       int irq_start;
-       int irq_end;
-       int virq;
-       int nr_irq;
-       int i;
-       int ret;
-
-       /* no error even if no irq resource */
-       r = platform_get_resource_byname(pdev, IORESOURCE_IRQ, name);
-       if (!r)
-               return 0;
-
-       irq_start = r->start;
-       irq_end = r->end;
-
-       for (i = irq_start; i <= irq_end; i++) {
-               nr_irq = pchg->num_irqs;
-
-               virq = irq_create_mapping(irqdm, i);
-               pchg->irqs[nr_irq].virq = virq;
-               pchg->irqs[nr_irq].which = i;
-               pchg->num_irqs++;
-
-               ret = request_threaded_irq(virq, NULL,
-                                       lp8788_charger_irq_thread,
-                                       IRQF_ONESHOT, name, pchg);
-               if (ret)
-                       break;
-       }
-
-       if (i <= irq_end)
-               goto err_free_irq;
-
-       return 0;
-
-err_free_irq:
-       for (i = 0; i < pchg->num_irqs; i++)
-               free_irq(pchg->irqs[i].virq, pchg);
-       return ret;
-}
-
-static int lp8788_irq_register(struct platform_device *pdev,
-                               struct lp8788_charger *pchg)
-{
-       static const char * const name[] = {
-               LP8788_CHG_IRQ, LP8788_PRSW_IRQ, LP8788_BATT_IRQ
-       };
-       int i;
-       int ret;
-
-       INIT_WORK(&pchg->charger_work, lp8788_charger_event);
-       pchg->num_irqs = 0;
-
-       for (i = 0; i < ARRAY_SIZE(name); i++) {
-               ret = lp8788_set_irqs(pdev, pchg, name[i]);
-               if (ret) {
-                       dev_warn(&pdev->dev, "irq setup failed: %s\n", name[i]);
-                       return ret;
-               }
-       }
-
-       if (pchg->num_irqs > LP8788_MAX_CHG_IRQS) {
-               dev_err(&pdev->dev, "invalid total number of irqs: %d\n",
-                       pchg->num_irqs);
-               return -EINVAL;
-       }
-
-
-       return 0;
-}
-
-static void lp8788_irq_unregister(struct platform_device *pdev,
-                                 struct lp8788_charger *pchg)
-{
-       int i;
-       int irq;
-
-       for (i = 0; i < pchg->num_irqs; i++) {
-               irq = pchg->irqs[i].virq;
-               if (!irq)
-                       continue;
-
-               free_irq(irq, pchg);
-       }
-}
-
-static void lp8788_setup_adc_channel(struct device *dev,
-                               struct lp8788_charger *pchg)
-{
-       struct lp8788_charger_platform_data *pdata = pchg->pdata;
-       struct iio_channel *chan;
-
-       if (!pdata)
-               return;
-
-       /* ADC channel for battery voltage */
-       chan = devm_iio_channel_get(dev, pdata->adc_vbatt);
-       pchg->chan[LP8788_VBATT] = IS_ERR(chan) ? NULL : chan;
-
-       /* ADC channel for battery temperature */
-       chan = devm_iio_channel_get(dev, pdata->adc_batt_temp);
-       pchg->chan[LP8788_BATT_TEMP] = IS_ERR(chan) ? NULL : chan;
-}
-
-static ssize_t lp8788_show_charger_status(struct device *dev,
-                               struct device_attribute *attr, char *buf)
-{
-       struct lp8788_charger *pchg = dev_get_drvdata(dev);
-       enum lp8788_charging_state state;
-       static const char * const desc[LP8788_MAX_CHG_STATE] = {
-               [LP8788_OFF] = "CHARGER OFF",
-               [LP8788_WARM_UP] = "WARM UP",
-               [LP8788_LOW_INPUT] = "LOW INPUT STATE",
-               [LP8788_PRECHARGE] = "CHARGING - PRECHARGE",
-               [LP8788_CC] = "CHARGING - CC",
-               [LP8788_CV] = "CHARGING - CV",
-               [LP8788_MAINTENANCE] = "NO CHARGING - MAINTENANCE",
-               [LP8788_BATTERY_FAULT] = "BATTERY FAULT",
-               [LP8788_SYSTEM_SUPPORT] = "SYSTEM SUPPORT",
-               [LP8788_HIGH_CURRENT] = "HIGH CURRENT",
-       };
-       u8 data;
-
-       lp8788_read_byte(pchg->lp, LP8788_CHG_STATUS, &data);
-       state = (data & LP8788_CHG_STATE_M) >> LP8788_CHG_STATE_S;
-
-       return sysfs_emit(buf, "%s\n", desc[state]);
-}
-
-static ssize_t lp8788_show_eoc_time(struct device *dev,
-                               struct device_attribute *attr, char *buf)
-{
-       struct lp8788_charger *pchg = dev_get_drvdata(dev);
-       static const char * const stime[] = {
-               "400ms", "5min", "10min", "15min",
-               "20min", "25min", "30min", "No timeout"
-       };
-       u8 val;
-
-       lp8788_read_byte(pchg->lp, LP8788_CHG_EOC, &val);
-       val = (val & LP8788_CHG_EOC_TIME_M) >> LP8788_CHG_EOC_TIME_S;
-
-       return sysfs_emit(buf, "End Of Charge Time: %s\n", stime[val]);
-}
-
-static ssize_t lp8788_show_eoc_level(struct device *dev,
-                               struct device_attribute *attr, char *buf)
-{
-       struct lp8788_charger *pchg = dev_get_drvdata(dev);
-       static const char * const abs_level[] = {
-                       "25mA", "49mA", "75mA", "98mA"
-       };
-       static const char * const relative_level[] = {
-                       "5%", "10%", "15%", "20%"
-       };
-       const char *level;
-       u8 val;
-       u8 mode;
-
-       lp8788_read_byte(pchg->lp, LP8788_CHG_EOC, &val);
-
-       mode = val & LP8788_CHG_EOC_MODE_M;
-       val = (val & LP8788_CHG_EOC_LEVEL_M) >> LP8788_CHG_EOC_LEVEL_S;
-       level = mode ? abs_level[val] : relative_level[val];
-
-       return sysfs_emit(buf, "End Of Charge Level: %s\n", level);
-}
-
-static DEVICE_ATTR(charger_status, S_IRUSR, lp8788_show_charger_status, NULL);
-static DEVICE_ATTR(eoc_time, S_IRUSR, lp8788_show_eoc_time, NULL);
-static DEVICE_ATTR(eoc_level, S_IRUSR, lp8788_show_eoc_level, NULL);
-
-static struct attribute *lp8788_charger_sysfs_attrs[] = {
-       &dev_attr_charger_status.attr,
-       &dev_attr_eoc_time.attr,
-       &dev_attr_eoc_level.attr,
-       NULL,
-};
-
-ATTRIBUTE_GROUPS(lp8788_charger_sysfs);
-
-static int lp8788_psy_register(struct platform_device *pdev,
-                               struct lp8788_charger *pchg)
-{
-       struct power_supply_config charger_cfg = {};
-
-       charger_cfg.attr_grp = lp8788_charger_sysfs_groups;
-       charger_cfg.supplied_to = battery_supplied_to;
-       charger_cfg.num_supplicants = ARRAY_SIZE(battery_supplied_to);
-
-       pchg->charger = devm_power_supply_register(&pdev->dev,
-                                                  &lp8788_psy_charger_desc,
-                                                  &charger_cfg);
-       if (IS_ERR(pchg->charger))
-               return -EPERM;
-
-       pchg->battery = devm_power_supply_register(&pdev->dev,
-                                                  &lp8788_psy_battery_desc, 
NULL);
-       if (IS_ERR(pchg->battery))
-               return -EPERM;
-
-       return 0;
-}
-
-static int lp8788_charger_probe(struct platform_device *pdev)
-{
-       struct lp8788 *lp = dev_get_drvdata(pdev->dev.parent);
-       struct lp8788_charger *pchg;
-       struct device *dev = &pdev->dev;
-       int ret;
-
-       pchg = devm_kzalloc(dev, sizeof(struct lp8788_charger), GFP_KERNEL);
-       if (!pchg)
-               return -ENOMEM;
-
-       pchg->lp = lp;
-       pchg->pdata = lp->pdata ? lp->pdata->chg_pdata : NULL;
-       platform_set_drvdata(pdev, pchg);
-
-       ret = lp8788_update_charger_params(pdev, pchg);
-       if (ret)
-               return ret;
-
-       lp8788_setup_adc_channel(&pdev->dev, pchg);
-
-       ret = lp8788_psy_register(pdev, pchg);
-       if (ret)
-               return ret;
-
-       ret = lp8788_irq_register(pdev, pchg);
-       if (ret)
-               dev_warn(dev, "failed to register charger irq: %d\n", ret);
-
-       return 0;
-}
-
-static void lp8788_charger_remove(struct platform_device *pdev)
-{
-       struct lp8788_charger *pchg = platform_get_drvdata(pdev);
-
-       lp8788_irq_unregister(pdev, pchg);
-       cancel_work_sync(&pchg->charger_work);
-}
-
-static struct platform_driver lp8788_charger_driver = {
-       .probe = lp8788_charger_probe,
-       .remove = lp8788_charger_remove,
-       .driver = {
-               .name = LP8788_DEV_CHARGER,
-       },
-};
-module_platform_driver(lp8788_charger_driver);
-
-MODULE_DESCRIPTION("TI LP8788 Charger Driver");
-MODULE_AUTHOR("Milo Kim");
-MODULE_LICENSE("GPL");
-MODULE_ALIAS("platform:lp8788-charger");
-MODULE_IMPORT_NS("IIO_CONSUMER");
diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig
index 7d587ffc0a89..4b90d1cb045c 100644
--- a/drivers/regulator/Kconfig
+++ b/drivers/regulator/Kconfig
@@ -555,12 +555,6 @@ config REGULATOR_LP87565
          provides four step-down converters. It supports software based
          voltage control for different voltage domains
 
-config REGULATOR_LP8788
-       tristate "TI LP8788 Power Regulators"
-       depends on MFD_LP8788
-       help
-         This driver supports LP8788 voltage regulator chip.
-
 config REGULATOR_LTC3589
        tristate "LTC3589 8-output voltage regulator"
        depends on I2C
diff --git a/drivers/regulator/Makefile b/drivers/regulator/Makefile
index a1344d3c3fd3..fe0f099c217b 100644
--- a/drivers/regulator/Makefile
+++ b/drivers/regulator/Makefile
@@ -65,8 +65,6 @@ obj-$(CONFIG_REGULATOR_LP3972) += lp3972.o
 obj-$(CONFIG_REGULATOR_LP872X) += lp872x.o
 obj-$(CONFIG_REGULATOR_LP873X) += lp873x-regulator.o
 obj-$(CONFIG_REGULATOR_LP87565) += lp87565-regulator.o
-obj-$(CONFIG_REGULATOR_LP8788) += lp8788-buck.o
-obj-$(CONFIG_REGULATOR_LP8788) += lp8788-ldo.o
 obj-$(CONFIG_REGULATOR_LP8755) += lp8755.o
 obj-$(CONFIG_REGULATOR_LTC3589) += ltc3589.o
 obj-$(CONFIG_REGULATOR_LTC3676) += ltc3676.o
diff --git a/drivers/regulator/lp8788-buck.c b/drivers/regulator/lp8788-buck.c
deleted file mode 100644
index 2ade249ab6df..000000000000
--- a/drivers/regulator/lp8788-buck.c
+++ /dev/null
@@ -1,541 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * TI LP8788 MFD - buck regulator driver
- *
- * Copyright 2012 Texas Instruments
- *
- * Author: Milo(Woogyom) Kim <[email protected]>
- */
-
-#include <linux/module.h>
-#include <linux/slab.h>
-#include <linux/err.h>
-#include <linux/platform_device.h>
-#include <linux/regulator/driver.h>
-#include <linux/mfd/lp8788.h>
-#include <linux/gpio/consumer.h>
-
-/* register address */
-#define LP8788_EN_BUCK                 0x0C
-#define LP8788_BUCK_DVS_SEL            0x1D
-#define LP8788_BUCK1_VOUT0             0x1E
-#define LP8788_BUCK1_VOUT1             0x1F
-#define LP8788_BUCK1_VOUT2             0x20
-#define LP8788_BUCK1_VOUT3             0x21
-#define LP8788_BUCK2_VOUT0             0x22
-#define LP8788_BUCK2_VOUT1             0x23
-#define LP8788_BUCK2_VOUT2             0x24
-#define LP8788_BUCK2_VOUT3             0x25
-#define LP8788_BUCK3_VOUT              0x26
-#define LP8788_BUCK4_VOUT              0x27
-#define LP8788_BUCK1_TIMESTEP          0x28
-#define LP8788_BUCK_PWM                        0x2D
-
-/* mask/shift bits */
-#define LP8788_EN_BUCK1_M              BIT(0)  /* Addr 0Ch */
-#define LP8788_EN_BUCK2_M              BIT(1)
-#define LP8788_EN_BUCK3_M              BIT(2)
-#define LP8788_EN_BUCK4_M              BIT(3)
-#define LP8788_BUCK1_DVS_SEL_M         0x04    /* Addr 1Dh */
-#define LP8788_BUCK1_DVS_M             0x03
-#define LP8788_BUCK1_DVS_S             0
-#define LP8788_BUCK2_DVS_SEL_M         0x40
-#define LP8788_BUCK2_DVS_M             0x30
-#define LP8788_BUCK2_DVS_S             4
-#define LP8788_BUCK1_DVS_I2C           BIT(2)
-#define LP8788_BUCK2_DVS_I2C           BIT(6)
-#define LP8788_BUCK1_DVS_PIN           (0 << 2)
-#define LP8788_BUCK2_DVS_PIN           (0 << 6)
-#define LP8788_VOUT_M                  0x1F    /* Addr 1Eh ~ 27h */
-#define LP8788_STARTUP_TIME_M          0xF8    /* Addr 28h ~ 2Bh */
-#define LP8788_STARTUP_TIME_S          3
-#define LP8788_FPWM_BUCK1_M            BIT(0)  /* Addr 2Dh */
-#define LP8788_FPWM_BUCK1_S            0
-#define LP8788_FPWM_BUCK2_M            BIT(1)
-#define LP8788_FPWM_BUCK2_S            1
-#define LP8788_FPWM_BUCK3_M            BIT(2)
-#define LP8788_FPWM_BUCK3_S            2
-#define LP8788_FPWM_BUCK4_M            BIT(3)
-#define LP8788_FPWM_BUCK4_S            3
-
-#define INVALID_ADDR                   0xFF
-#define LP8788_FORCE_PWM               1
-#define LP8788_AUTO_PWM                        0
-#define PIN_LOW                                0
-#define PIN_HIGH                       1
-#define ENABLE_TIME_USEC               32
-
-#define BUCK_FPWM_MASK(x)              (1 << (x))
-#define BUCK_FPWM_SHIFT(x)             (x)
-
-enum lp8788_dvs_state {
-       DVS_LOW  = 0,
-       DVS_HIGH = 1,
-};
-
-enum lp8788_dvs_mode {
-       REGISTER,
-       EXTPIN,
-};
-
-enum lp8788_buck_id {
-       BUCK1,
-       BUCK2,
-       BUCK3,
-       BUCK4,
-};
-
-struct lp8788_buck {
-       struct lp8788 *lp;
-       struct regulator_dev *regulator;
-       void *dvs;
-       struct gpio_desc *gpio1;
-       struct gpio_desc *gpio2; /* Only used on BUCK2 */
-};
-
-/* BUCK 1 ~ 4 voltage ranges */
-static const struct linear_range buck_volt_ranges[] = {
-       REGULATOR_LINEAR_RANGE(500000, 0, 0, 0),
-       REGULATOR_LINEAR_RANGE(800000, 1, 25, 50000),
-};
-
-static void lp8788_buck1_set_dvs(struct lp8788_buck *buck)
-{
-       struct lp8788_buck1_dvs *dvs = (struct lp8788_buck1_dvs *)buck->dvs;
-       enum lp8788_dvs_state pinstate;
-
-       if (!dvs)
-               return;
-
-       pinstate = dvs->vsel == DVS_SEL_V0 ? DVS_LOW : DVS_HIGH;
-       gpiod_set_value(buck->gpio1, pinstate);
-}
-
-static void lp8788_buck2_set_dvs(struct lp8788_buck *buck)
-{
-       struct lp8788_buck2_dvs *dvs = (struct lp8788_buck2_dvs *)buck->dvs;
-       enum lp8788_dvs_state pin1, pin2;
-
-       if (!dvs)
-               return;
-
-       switch (dvs->vsel) {
-       case DVS_SEL_V0:
-               pin1 = DVS_LOW;
-               pin2 = DVS_LOW;
-               break;
-       case DVS_SEL_V1:
-               pin1 = DVS_HIGH;
-               pin2 = DVS_LOW;
-               break;
-       case DVS_SEL_V2:
-               pin1 = DVS_LOW;
-               pin2 = DVS_HIGH;
-               break;
-       case DVS_SEL_V3:
-               pin1 = DVS_HIGH;
-               pin2 = DVS_HIGH;
-               break;
-       default:
-               return;
-       }
-
-       gpiod_set_value(buck->gpio1, pin1);
-       gpiod_set_value(buck->gpio2, pin2);
-}
-
-static void lp8788_set_dvs(struct lp8788_buck *buck, enum lp8788_buck_id id)
-{
-       switch (id) {
-       case BUCK1:
-               lp8788_buck1_set_dvs(buck);
-               break;
-       case BUCK2:
-               lp8788_buck2_set_dvs(buck);
-               break;
-       default:
-               break;
-       }
-}
-
-static enum lp8788_dvs_mode
-lp8788_get_buck_dvs_ctrl_mode(struct lp8788_buck *buck, enum lp8788_buck_id id)
-{
-       u8 val, mask;
-
-       switch (id) {
-       case BUCK1:
-               mask = LP8788_BUCK1_DVS_SEL_M;
-               break;
-       case BUCK2:
-               mask = LP8788_BUCK2_DVS_SEL_M;
-               break;
-       default:
-               return REGISTER;
-       }
-
-       lp8788_read_byte(buck->lp, LP8788_BUCK_DVS_SEL, &val);
-
-       return val & mask ? REGISTER : EXTPIN;
-}
-
-static bool lp8788_is_valid_buck_addr(u8 addr)
-{
-       switch (addr) {
-       case LP8788_BUCK1_VOUT0:
-       case LP8788_BUCK1_VOUT1:
-       case LP8788_BUCK1_VOUT2:
-       case LP8788_BUCK1_VOUT3:
-       case LP8788_BUCK2_VOUT0:
-       case LP8788_BUCK2_VOUT1:
-       case LP8788_BUCK2_VOUT2:
-       case LP8788_BUCK2_VOUT3:
-               return true;
-       default:
-               return false;
-       }
-}
-
-static u8 lp8788_select_buck_vout_addr(struct lp8788_buck *buck,
-                                       enum lp8788_buck_id id)
-{
-       enum lp8788_dvs_mode mode = lp8788_get_buck_dvs_ctrl_mode(buck, id);
-       u8 val, idx, addr;
-       int pin1, pin2;
-
-       switch (id) {
-       case BUCK1:
-               if (mode == EXTPIN) {
-                       idx = gpiod_get_value(buck->gpio1);
-               } else {
-                       lp8788_read_byte(buck->lp, LP8788_BUCK_DVS_SEL, &val);
-                       idx = (val & LP8788_BUCK1_DVS_M) >> LP8788_BUCK1_DVS_S;
-               }
-               addr = LP8788_BUCK1_VOUT0 + idx;
-               break;
-       case BUCK2:
-               if (mode == EXTPIN) {
-                       pin1 = gpiod_get_value(buck->gpio1);
-                       pin2 = gpiod_get_value(buck->gpio2);
-
-                       if (pin1 == PIN_LOW && pin2 == PIN_LOW)
-                               idx = 0;
-                       else if (pin1 == PIN_LOW && pin2 == PIN_HIGH)
-                               idx = 2;
-                       else if (pin1 == PIN_HIGH && pin2 == PIN_LOW)
-                               idx = 1;
-                       else
-                               idx = 3;
-               } else {
-                       lp8788_read_byte(buck->lp, LP8788_BUCK_DVS_SEL, &val);
-                       idx = (val & LP8788_BUCK2_DVS_M) >> LP8788_BUCK2_DVS_S;
-               }
-               addr = LP8788_BUCK2_VOUT0 + idx;
-               break;
-       default:
-               goto err;
-       }
-
-       return addr;
-err:
-       return INVALID_ADDR;
-}
-
-static int lp8788_buck12_set_voltage_sel(struct regulator_dev *rdev,
-                                       unsigned selector)
-{
-       struct lp8788_buck *buck = rdev_get_drvdata(rdev);
-       enum lp8788_buck_id id = rdev_get_id(rdev);
-       u8 addr;
-
-       if (buck->dvs)
-               lp8788_set_dvs(buck, id);
-
-       addr = lp8788_select_buck_vout_addr(buck, id);
-       if (!lp8788_is_valid_buck_addr(addr))
-               return -EINVAL;
-
-       return lp8788_update_bits(buck->lp, addr, LP8788_VOUT_M, selector);
-}
-
-static int lp8788_buck12_get_voltage_sel(struct regulator_dev *rdev)
-{
-       struct lp8788_buck *buck = rdev_get_drvdata(rdev);
-       enum lp8788_buck_id id = rdev_get_id(rdev);
-       int ret;
-       u8 val, addr;
-
-       addr = lp8788_select_buck_vout_addr(buck, id);
-       if (!lp8788_is_valid_buck_addr(addr))
-               return -EINVAL;
-
-       ret = lp8788_read_byte(buck->lp, addr, &val);
-       if (ret)
-               return ret;
-
-       return val & LP8788_VOUT_M;
-}
-
-static int lp8788_buck_enable_time(struct regulator_dev *rdev)
-{
-       struct lp8788_buck *buck = rdev_get_drvdata(rdev);
-       enum lp8788_buck_id id = rdev_get_id(rdev);
-       u8 val, addr = LP8788_BUCK1_TIMESTEP + id;
-
-       if (lp8788_read_byte(buck->lp, addr, &val))
-               return -EINVAL;
-
-       val = (val & LP8788_STARTUP_TIME_M) >> LP8788_STARTUP_TIME_S;
-
-       return ENABLE_TIME_USEC * val;
-}
-
-static int lp8788_buck_set_mode(struct regulator_dev *rdev, unsigned int mode)
-{
-       struct lp8788_buck *buck = rdev_get_drvdata(rdev);
-       enum lp8788_buck_id id = rdev_get_id(rdev);
-       u8 mask, val;
-
-       mask = BUCK_FPWM_MASK(id);
-       switch (mode) {
-       case REGULATOR_MODE_FAST:
-               val = LP8788_FORCE_PWM << BUCK_FPWM_SHIFT(id);
-               break;
-       case REGULATOR_MODE_NORMAL:
-               val = LP8788_AUTO_PWM << BUCK_FPWM_SHIFT(id);
-               break;
-       default:
-               return -EINVAL;
-       }
-
-       return lp8788_update_bits(buck->lp, LP8788_BUCK_PWM, mask, val);
-}
-
-static unsigned int lp8788_buck_get_mode(struct regulator_dev *rdev)
-{
-       struct lp8788_buck *buck = rdev_get_drvdata(rdev);
-       enum lp8788_buck_id id = rdev_get_id(rdev);
-       u8 val;
-       int ret;
-
-       ret = lp8788_read_byte(buck->lp, LP8788_BUCK_PWM, &val);
-       if (ret)
-               return ret;
-
-       return val & BUCK_FPWM_MASK(id) ?
-                               REGULATOR_MODE_FAST : REGULATOR_MODE_NORMAL;
-}
-
-static const struct regulator_ops lp8788_buck12_ops = {
-       .list_voltage = regulator_list_voltage_linear_range,
-       .map_voltage = regulator_map_voltage_linear_range,
-       .set_voltage_sel = lp8788_buck12_set_voltage_sel,
-       .get_voltage_sel = lp8788_buck12_get_voltage_sel,
-       .enable = regulator_enable_regmap,
-       .disable = regulator_disable_regmap,
-       .is_enabled = regulator_is_enabled_regmap,
-       .enable_time = lp8788_buck_enable_time,
-       .set_mode = lp8788_buck_set_mode,
-       .get_mode = lp8788_buck_get_mode,
-};
-
-static const struct regulator_ops lp8788_buck34_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,
-       .enable_time = lp8788_buck_enable_time,
-       .set_mode = lp8788_buck_set_mode,
-       .get_mode = lp8788_buck_get_mode,
-};
-
-static const struct regulator_desc lp8788_buck_desc[] = {
-       {
-               .name = "buck1",
-               .id = BUCK1,
-               .ops = &lp8788_buck12_ops,
-               .n_voltages = 26,
-               .linear_ranges = buck_volt_ranges,
-               .n_linear_ranges = ARRAY_SIZE(buck_volt_ranges),
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .enable_reg = LP8788_EN_BUCK,
-               .enable_mask = LP8788_EN_BUCK1_M,
-       },
-       {
-               .name = "buck2",
-               .id = BUCK2,
-               .ops = &lp8788_buck12_ops,
-               .n_voltages = 26,
-               .linear_ranges = buck_volt_ranges,
-               .n_linear_ranges = ARRAY_SIZE(buck_volt_ranges),
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .enable_reg = LP8788_EN_BUCK,
-               .enable_mask = LP8788_EN_BUCK2_M,
-       },
-       {
-               .name = "buck3",
-               .id = BUCK3,
-               .ops = &lp8788_buck34_ops,
-               .n_voltages = 26,
-               .linear_ranges = buck_volt_ranges,
-               .n_linear_ranges = ARRAY_SIZE(buck_volt_ranges),
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .vsel_reg = LP8788_BUCK3_VOUT,
-               .vsel_mask = LP8788_VOUT_M,
-               .enable_reg = LP8788_EN_BUCK,
-               .enable_mask = LP8788_EN_BUCK3_M,
-       },
-       {
-               .name = "buck4",
-               .id = BUCK4,
-               .ops = &lp8788_buck34_ops,
-               .n_voltages = 26,
-               .linear_ranges = buck_volt_ranges,
-               .n_linear_ranges = ARRAY_SIZE(buck_volt_ranges),
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .vsel_reg = LP8788_BUCK4_VOUT,
-               .vsel_mask = LP8788_VOUT_M,
-               .enable_reg = LP8788_EN_BUCK,
-               .enable_mask = LP8788_EN_BUCK4_M,
-       },
-};
-
-static int lp8788_dvs_gpio_request(struct platform_device *pdev,
-                               struct lp8788_buck *buck,
-                               enum lp8788_buck_id id)
-{
-       struct lp8788_platform_data *pdata = buck->lp->pdata;
-       struct device *dev = &pdev->dev;
-
-       switch (id) {
-       case BUCK1:
-               buck->gpio1 = devm_gpiod_get(dev, "dvs", GPIOD_OUT_LOW);
-               if (IS_ERR(buck->gpio1))
-                       return PTR_ERR(buck->gpio1);
-               gpiod_set_consumer_name(buck->gpio1, "LP8788_B1_DVS");
-
-               buck->dvs = pdata->buck1_dvs;
-               break;
-       case BUCK2:
-               buck->gpio1 = devm_gpiod_get_index(dev, "dvs", 0, 
GPIOD_OUT_LOW);
-               if (IS_ERR(buck->gpio1))
-                       return PTR_ERR(buck->gpio1);
-               gpiod_set_consumer_name(buck->gpio1, "LP8788_B2_DVS1");
-
-               buck->gpio2 = devm_gpiod_get_index(dev, "dvs", 1, 
GPIOD_OUT_LOW);
-               if (IS_ERR(buck->gpio2))
-                       return PTR_ERR(buck->gpio2);
-               gpiod_set_consumer_name(buck->gpio2, "LP8788_B2_DVS2");
-
-               buck->dvs = pdata->buck2_dvs;
-               break;
-       default:
-               break;
-       }
-
-       return 0;
-}
-
-static int lp8788_init_dvs(struct platform_device *pdev,
-                       struct lp8788_buck *buck, enum lp8788_buck_id id)
-{
-       struct lp8788_platform_data *pdata = buck->lp->pdata;
-       u8 mask[] = { LP8788_BUCK1_DVS_SEL_M, LP8788_BUCK2_DVS_SEL_M };
-       u8 val[]  = { LP8788_BUCK1_DVS_PIN, LP8788_BUCK2_DVS_PIN };
-       u8 default_dvs_mode[] = { LP8788_BUCK1_DVS_I2C, LP8788_BUCK2_DVS_I2C };
-
-       /* no dvs for buck3, 4 */
-       if (id > BUCK2)
-               return 0;
-
-       /* no dvs platform data, then dvs will be selected by I2C registers */
-       if (!pdata)
-               goto set_default_dvs_mode;
-
-       if ((id == BUCK1 && !pdata->buck1_dvs) ||
-               (id == BUCK2 && !pdata->buck2_dvs))
-               goto set_default_dvs_mode;
-
-       if (lp8788_dvs_gpio_request(pdev, buck, id))
-               goto set_default_dvs_mode;
-
-       return lp8788_update_bits(buck->lp, LP8788_BUCK_DVS_SEL, mask[id],
-                               val[id]);
-
-set_default_dvs_mode:
-       return lp8788_update_bits(buck->lp, LP8788_BUCK_DVS_SEL, mask[id],
-                                 default_dvs_mode[id]);
-}
-
-static int lp8788_buck_probe(struct platform_device *pdev)
-{
-       struct lp8788 *lp = dev_get_drvdata(pdev->dev.parent);
-       int id = pdev->id;
-       struct lp8788_buck *buck;
-       struct regulator_config cfg = { };
-       struct regulator_dev *rdev;
-       int ret;
-
-       if (id >= LP8788_NUM_BUCKS)
-               return -EINVAL;
-
-       buck = devm_kzalloc(&pdev->dev, sizeof(struct lp8788_buck), GFP_KERNEL);
-       if (!buck)
-               return -ENOMEM;
-
-       buck->lp = lp;
-
-       ret = lp8788_init_dvs(pdev, buck, id);
-       if (ret)
-               return ret;
-
-       cfg.dev = pdev->dev.parent;
-       cfg.init_data = lp->pdata ? lp->pdata->buck_data[id] : NULL;
-       cfg.driver_data = buck;
-       cfg.regmap = lp->regmap;
-
-       rdev = devm_regulator_register(&pdev->dev, &lp8788_buck_desc[id], &cfg);
-       if (IS_ERR(rdev)) {
-               ret = PTR_ERR(rdev);
-               dev_err(&pdev->dev, "BUCK%d regulator register err = %d\n",
-                               id + 1, ret);
-               return ret;
-       }
-
-       buck->regulator = rdev;
-       platform_set_drvdata(pdev, buck);
-
-       return 0;
-}
-
-static struct platform_driver lp8788_buck_driver = {
-       .probe = lp8788_buck_probe,
-       .driver = {
-               .name = LP8788_DEV_BUCK,
-               .probe_type = PROBE_PREFER_ASYNCHRONOUS,
-       },
-};
-
-static int __init lp8788_buck_init(void)
-{
-       return platform_driver_register(&lp8788_buck_driver);
-}
-subsys_initcall(lp8788_buck_init);
-
-static void __exit lp8788_buck_exit(void)
-{
-       platform_driver_unregister(&lp8788_buck_driver);
-}
-module_exit(lp8788_buck_exit);
-
-MODULE_DESCRIPTION("TI LP8788 BUCK Driver");
-MODULE_AUTHOR("Milo Kim");
-MODULE_LICENSE("GPL");
-MODULE_ALIAS("platform:lp8788-buck");
diff --git a/drivers/regulator/lp8788-ldo.c b/drivers/regulator/lp8788-ldo.c
deleted file mode 100644
index 8e45b7b99556..000000000000
--- a/drivers/regulator/lp8788-ldo.c
+++ /dev/null
@@ -1,640 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * TI LP8788 MFD - ldo regulator driver
- *
- * Copyright 2012 Texas Instruments
- *
- * Author: Milo(Woogyom) Kim <[email protected]>
- */
-
-#include <linux/module.h>
-#include <linux/slab.h>
-#include <linux/err.h>
-#include <linux/platform_device.h>
-#include <linux/regulator/driver.h>
-#include <linux/gpio/consumer.h>
-#include <linux/mfd/lp8788.h>
-
-/* register address */
-#define LP8788_EN_LDO_A                        0x0D    /* DLDO 1 ~ 8 */
-#define LP8788_EN_LDO_B                        0x0E    /* DLDO 9 ~ 12, ALDO 1 
~ 4 */
-#define LP8788_EN_LDO_C                        0x0F    /* ALDO 5 ~ 10 */
-#define LP8788_EN_SEL                  0x10
-#define LP8788_DLDO1_VOUT              0x2E
-#define LP8788_DLDO2_VOUT              0x2F
-#define LP8788_DLDO3_VOUT              0x30
-#define LP8788_DLDO4_VOUT              0x31
-#define LP8788_DLDO5_VOUT              0x32
-#define LP8788_DLDO6_VOUT              0x33
-#define LP8788_DLDO7_VOUT              0x34
-#define LP8788_DLDO8_VOUT              0x35
-#define LP8788_DLDO9_VOUT              0x36
-#define LP8788_DLDO10_VOUT             0x37
-#define LP8788_DLDO11_VOUT             0x38
-#define LP8788_DLDO12_VOUT             0x39
-#define LP8788_ALDO1_VOUT              0x3A
-#define LP8788_ALDO2_VOUT              0x3B
-#define LP8788_ALDO3_VOUT              0x3C
-#define LP8788_ALDO4_VOUT              0x3D
-#define LP8788_ALDO5_VOUT              0x3E
-#define LP8788_ALDO6_VOUT              0x3F
-#define LP8788_ALDO7_VOUT              0x40
-#define LP8788_ALDO8_VOUT              0x41
-#define LP8788_ALDO9_VOUT              0x42
-#define LP8788_ALDO10_VOUT             0x43
-#define LP8788_DLDO1_TIMESTEP          0x44
-
-/* mask/shift bits */
-#define LP8788_EN_DLDO1_M              BIT(0)  /* Addr 0Dh ~ 0Fh */
-#define LP8788_EN_DLDO2_M              BIT(1)
-#define LP8788_EN_DLDO3_M              BIT(2)
-#define LP8788_EN_DLDO4_M              BIT(3)
-#define LP8788_EN_DLDO5_M              BIT(4)
-#define LP8788_EN_DLDO6_M              BIT(5)
-#define LP8788_EN_DLDO7_M              BIT(6)
-#define LP8788_EN_DLDO8_M              BIT(7)
-#define LP8788_EN_DLDO9_M              BIT(0)
-#define LP8788_EN_DLDO10_M             BIT(1)
-#define LP8788_EN_DLDO11_M             BIT(2)
-#define LP8788_EN_DLDO12_M             BIT(3)
-#define LP8788_EN_ALDO1_M              BIT(4)
-#define LP8788_EN_ALDO2_M              BIT(5)
-#define LP8788_EN_ALDO3_M              BIT(6)
-#define LP8788_EN_ALDO4_M              BIT(7)
-#define LP8788_EN_ALDO5_M              BIT(0)
-#define LP8788_EN_ALDO6_M              BIT(1)
-#define LP8788_EN_ALDO7_M              BIT(2)
-#define LP8788_EN_ALDO8_M              BIT(3)
-#define LP8788_EN_ALDO9_M              BIT(4)
-#define LP8788_EN_ALDO10_M             BIT(5)
-#define LP8788_EN_SEL_DLDO911_M                BIT(0)  /* Addr 10h */
-#define LP8788_EN_SEL_DLDO7_M          BIT(1)
-#define LP8788_EN_SEL_ALDO7_M          BIT(2)
-#define LP8788_EN_SEL_ALDO5_M          BIT(3)
-#define LP8788_EN_SEL_ALDO234_M                BIT(4)
-#define LP8788_EN_SEL_ALDO1_M          BIT(5)
-#define LP8788_VOUT_5BIT_M             0x1F    /* Addr 2Eh ~ 43h */
-#define LP8788_VOUT_4BIT_M             0x0F
-#define LP8788_VOUT_3BIT_M             0x07
-#define LP8788_VOUT_1BIT_M             0x01
-#define LP8788_STARTUP_TIME_M          0xF8    /* Addr 44h ~ 59h */
-#define LP8788_STARTUP_TIME_S          3
-
-#define ENABLE_TIME_USEC               32
-
-enum lp8788_ldo_id {
-       DLDO1,
-       DLDO2,
-       DLDO3,
-       DLDO4,
-       DLDO5,
-       DLDO6,
-       DLDO7,
-       DLDO8,
-       DLDO9,
-       DLDO10,
-       DLDO11,
-       DLDO12,
-       ALDO1,
-       ALDO2,
-       ALDO3,
-       ALDO4,
-       ALDO5,
-       ALDO6,
-       ALDO7,
-       ALDO8,
-       ALDO9,
-       ALDO10,
-};
-
-struct lp8788_ldo {
-       struct lp8788 *lp;
-       struct regulator_desc *desc;
-       struct regulator_dev *regulator;
-       struct gpio_desc *ena_gpiod;
-};
-
-/* DLDO 1, 2, 3, 9 voltage table */
-static const int lp8788_dldo1239_vtbl[] = {
-       1800000, 1900000, 2000000, 2100000, 2200000, 2300000, 2400000, 2500000,
-       2600000, 2700000, 2800000, 2900000, 3000000, 2850000, 2850000, 2850000,
-       2850000, 2850000, 2850000, 2850000, 2850000, 2850000, 2850000, 2850000,
-       2850000, 2850000, 2850000, 2850000, 2850000, 2850000, 2850000, 2850000,
-};
-
-/* DLDO 4 voltage table */
-static const int lp8788_dldo4_vtbl[] = { 1800000, 3000000 };
-
-/* DLDO 5, 7, 8 and ALDO 6 voltage table */
-static const int lp8788_dldo578_aldo6_vtbl[] = {
-       1800000, 1900000, 2000000, 2100000, 2200000, 2300000, 2400000, 2500000,
-       2600000, 2700000, 2800000, 2900000, 3000000, 3000000, 3000000, 3000000,
-};
-
-/* DLDO 6 voltage table */
-static const int lp8788_dldo6_vtbl[] = {
-       3000000, 3100000, 3200000, 3300000, 3400000, 3500000, 3600000, 3600000,
-};
-
-/* DLDO 10, 11 voltage table */
-static const int lp8788_dldo1011_vtbl[] = {
-       1100000, 1150000, 1200000, 1250000, 1300000, 1350000, 1400000, 1450000,
-       1500000, 1500000, 1500000, 1500000, 1500000, 1500000, 1500000, 1500000,
-};
-
-/* ALDO 1 voltage table */
-static const int lp8788_aldo1_vtbl[] = { 1800000, 2850000 };
-
-/* ALDO 7 voltage table */
-static const int lp8788_aldo7_vtbl[] = {
-       1200000, 1300000, 1400000, 1500000, 1600000, 1700000, 1800000, 1800000,
-};
-
-static int lp8788_ldo_enable_time(struct regulator_dev *rdev)
-{
-       struct lp8788_ldo *ldo = rdev_get_drvdata(rdev);
-       enum lp8788_ldo_id id = rdev_get_id(rdev);
-       u8 val, addr = LP8788_DLDO1_TIMESTEP + id;
-
-       if (lp8788_read_byte(ldo->lp, addr, &val))
-               return -EINVAL;
-
-       val = (val & LP8788_STARTUP_TIME_M) >> LP8788_STARTUP_TIME_S;
-
-       return ENABLE_TIME_USEC * val;
-}
-
-static const struct regulator_ops lp8788_ldo_voltage_table_ops = {
-       .list_voltage = regulator_list_voltage_table,
-       .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,
-       .enable_time = lp8788_ldo_enable_time,
-};
-
-static const struct regulator_ops lp8788_ldo_voltage_fixed_ops = {
-       .list_voltage = regulator_list_voltage_linear,
-       .enable = regulator_enable_regmap,
-       .disable = regulator_disable_regmap,
-       .is_enabled = regulator_is_enabled_regmap,
-       .enable_time = lp8788_ldo_enable_time,
-};
-
-static const struct regulator_desc lp8788_dldo_desc[] = {
-       {
-               .name = "dldo1",
-               .id = DLDO1,
-               .ops = &lp8788_ldo_voltage_table_ops,
-               .n_voltages = ARRAY_SIZE(lp8788_dldo1239_vtbl),
-               .volt_table = lp8788_dldo1239_vtbl,
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .vsel_reg = LP8788_DLDO1_VOUT,
-               .vsel_mask = LP8788_VOUT_5BIT_M,
-               .enable_reg = LP8788_EN_LDO_A,
-               .enable_mask = LP8788_EN_DLDO1_M,
-       },
-       {
-               .name = "dldo2",
-               .id = DLDO2,
-               .ops = &lp8788_ldo_voltage_table_ops,
-               .n_voltages = ARRAY_SIZE(lp8788_dldo1239_vtbl),
-               .volt_table = lp8788_dldo1239_vtbl,
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .vsel_reg = LP8788_DLDO2_VOUT,
-               .vsel_mask = LP8788_VOUT_5BIT_M,
-               .enable_reg = LP8788_EN_LDO_A,
-               .enable_mask = LP8788_EN_DLDO2_M,
-       },
-       {
-               .name = "dldo3",
-               .id = DLDO3,
-               .ops = &lp8788_ldo_voltage_table_ops,
-               .n_voltages = ARRAY_SIZE(lp8788_dldo1239_vtbl),
-               .volt_table = lp8788_dldo1239_vtbl,
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .vsel_reg = LP8788_DLDO3_VOUT,
-               .vsel_mask = LP8788_VOUT_5BIT_M,
-               .enable_reg = LP8788_EN_LDO_A,
-               .enable_mask = LP8788_EN_DLDO3_M,
-       },
-       {
-               .name = "dldo4",
-               .id = DLDO4,
-               .ops = &lp8788_ldo_voltage_table_ops,
-               .n_voltages = ARRAY_SIZE(lp8788_dldo4_vtbl),
-               .volt_table = lp8788_dldo4_vtbl,
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .vsel_reg = LP8788_DLDO4_VOUT,
-               .vsel_mask = LP8788_VOUT_1BIT_M,
-               .enable_reg = LP8788_EN_LDO_A,
-               .enable_mask = LP8788_EN_DLDO4_M,
-       },
-       {
-               .name = "dldo5",
-               .id = DLDO5,
-               .ops = &lp8788_ldo_voltage_table_ops,
-               .n_voltages = ARRAY_SIZE(lp8788_dldo578_aldo6_vtbl),
-               .volt_table = lp8788_dldo578_aldo6_vtbl,
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .vsel_reg = LP8788_DLDO5_VOUT,
-               .vsel_mask = LP8788_VOUT_4BIT_M,
-               .enable_reg = LP8788_EN_LDO_A,
-               .enable_mask = LP8788_EN_DLDO5_M,
-       },
-       {
-               .name = "dldo6",
-               .id = DLDO6,
-               .ops = &lp8788_ldo_voltage_table_ops,
-               .n_voltages = ARRAY_SIZE(lp8788_dldo6_vtbl),
-               .volt_table = lp8788_dldo6_vtbl,
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .vsel_reg = LP8788_DLDO6_VOUT,
-               .vsel_mask = LP8788_VOUT_3BIT_M,
-               .enable_reg = LP8788_EN_LDO_A,
-               .enable_mask = LP8788_EN_DLDO6_M,
-       },
-       {
-               .name = "dldo7",
-               .id = DLDO7,
-               .ops = &lp8788_ldo_voltage_table_ops,
-               .n_voltages = ARRAY_SIZE(lp8788_dldo578_aldo6_vtbl),
-               .volt_table = lp8788_dldo578_aldo6_vtbl,
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .vsel_reg = LP8788_DLDO7_VOUT,
-               .vsel_mask = LP8788_VOUT_4BIT_M,
-               .enable_reg = LP8788_EN_LDO_A,
-               .enable_mask = LP8788_EN_DLDO7_M,
-       },
-       {
-               .name = "dldo8",
-               .id = DLDO8,
-               .ops = &lp8788_ldo_voltage_table_ops,
-               .n_voltages = ARRAY_SIZE(lp8788_dldo578_aldo6_vtbl),
-               .volt_table = lp8788_dldo578_aldo6_vtbl,
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .vsel_reg = LP8788_DLDO8_VOUT,
-               .vsel_mask = LP8788_VOUT_4BIT_M,
-               .enable_reg = LP8788_EN_LDO_A,
-               .enable_mask = LP8788_EN_DLDO8_M,
-       },
-       {
-               .name = "dldo9",
-               .id = DLDO9,
-               .ops = &lp8788_ldo_voltage_table_ops,
-               .n_voltages = ARRAY_SIZE(lp8788_dldo1239_vtbl),
-               .volt_table = lp8788_dldo1239_vtbl,
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .vsel_reg = LP8788_DLDO9_VOUT,
-               .vsel_mask = LP8788_VOUT_5BIT_M,
-               .enable_reg = LP8788_EN_LDO_B,
-               .enable_mask = LP8788_EN_DLDO9_M,
-       },
-       {
-               .name = "dldo10",
-               .id = DLDO10,
-               .ops = &lp8788_ldo_voltage_table_ops,
-               .n_voltages = ARRAY_SIZE(lp8788_dldo1011_vtbl),
-               .volt_table = lp8788_dldo1011_vtbl,
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .vsel_reg = LP8788_DLDO10_VOUT,
-               .vsel_mask = LP8788_VOUT_4BIT_M,
-               .enable_reg = LP8788_EN_LDO_B,
-               .enable_mask = LP8788_EN_DLDO10_M,
-       },
-       {
-               .name = "dldo11",
-               .id = DLDO11,
-               .ops = &lp8788_ldo_voltage_table_ops,
-               .n_voltages = ARRAY_SIZE(lp8788_dldo1011_vtbl),
-               .volt_table = lp8788_dldo1011_vtbl,
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .vsel_reg = LP8788_DLDO11_VOUT,
-               .vsel_mask = LP8788_VOUT_4BIT_M,
-               .enable_reg = LP8788_EN_LDO_B,
-               .enable_mask = LP8788_EN_DLDO11_M,
-       },
-       {
-               .name = "dldo12",
-               .id = DLDO12,
-               .ops = &lp8788_ldo_voltage_fixed_ops,
-               .n_voltages = 1,
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .enable_reg = LP8788_EN_LDO_B,
-               .enable_mask = LP8788_EN_DLDO12_M,
-               .min_uV = 2500000,
-       },
-};
-
-static const struct regulator_desc lp8788_aldo_desc[] = {
-       {
-               .name = "aldo1",
-               .id = ALDO1,
-               .ops = &lp8788_ldo_voltage_table_ops,
-               .n_voltages = ARRAY_SIZE(lp8788_aldo1_vtbl),
-               .volt_table = lp8788_aldo1_vtbl,
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .vsel_reg = LP8788_ALDO1_VOUT,
-               .vsel_mask = LP8788_VOUT_1BIT_M,
-               .enable_reg = LP8788_EN_LDO_B,
-               .enable_mask = LP8788_EN_ALDO1_M,
-       },
-       {
-               .name = "aldo2",
-               .id = ALDO2,
-               .ops = &lp8788_ldo_voltage_fixed_ops,
-               .n_voltages = 1,
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .enable_reg = LP8788_EN_LDO_B,
-               .enable_mask = LP8788_EN_ALDO2_M,
-               .min_uV = 2850000,
-       },
-       {
-               .name = "aldo3",
-               .id = ALDO3,
-               .ops = &lp8788_ldo_voltage_fixed_ops,
-               .n_voltages = 1,
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .enable_reg = LP8788_EN_LDO_B,
-               .enable_mask = LP8788_EN_ALDO3_M,
-               .min_uV = 2850000,
-       },
-       {
-               .name = "aldo4",
-               .id = ALDO4,
-               .ops = &lp8788_ldo_voltage_fixed_ops,
-               .n_voltages = 1,
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .enable_reg = LP8788_EN_LDO_B,
-               .enable_mask = LP8788_EN_ALDO4_M,
-               .min_uV = 2850000,
-       },
-       {
-               .name = "aldo5",
-               .id = ALDO5,
-               .ops = &lp8788_ldo_voltage_fixed_ops,
-               .n_voltages = 1,
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .enable_reg = LP8788_EN_LDO_C,
-               .enable_mask = LP8788_EN_ALDO5_M,
-               .min_uV = 2850000,
-       },
-       {
-               .name = "aldo6",
-               .id = ALDO6,
-               .ops = &lp8788_ldo_voltage_table_ops,
-               .n_voltages = ARRAY_SIZE(lp8788_dldo578_aldo6_vtbl),
-               .volt_table = lp8788_dldo578_aldo6_vtbl,
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .vsel_reg = LP8788_ALDO6_VOUT,
-               .vsel_mask = LP8788_VOUT_4BIT_M,
-               .enable_reg = LP8788_EN_LDO_C,
-               .enable_mask = LP8788_EN_ALDO6_M,
-       },
-       {
-               .name = "aldo7",
-               .id = ALDO7,
-               .ops = &lp8788_ldo_voltage_table_ops,
-               .n_voltages = ARRAY_SIZE(lp8788_aldo7_vtbl),
-               .volt_table = lp8788_aldo7_vtbl,
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .vsel_reg = LP8788_ALDO7_VOUT,
-               .vsel_mask = LP8788_VOUT_3BIT_M,
-               .enable_reg = LP8788_EN_LDO_C,
-               .enable_mask = LP8788_EN_ALDO7_M,
-       },
-       {
-               .name = "aldo8",
-               .id = ALDO8,
-               .ops = &lp8788_ldo_voltage_fixed_ops,
-               .n_voltages = 1,
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .enable_reg = LP8788_EN_LDO_C,
-               .enable_mask = LP8788_EN_ALDO8_M,
-               .min_uV = 2500000,
-       },
-       {
-               .name = "aldo9",
-               .id = ALDO9,
-               .ops = &lp8788_ldo_voltage_fixed_ops,
-               .n_voltages = 1,
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .enable_reg = LP8788_EN_LDO_C,
-               .enable_mask = LP8788_EN_ALDO9_M,
-               .min_uV = 2500000,
-       },
-       {
-               .name = "aldo10",
-               .id = ALDO10,
-               .ops = &lp8788_ldo_voltage_fixed_ops,
-               .n_voltages = 1,
-               .type = REGULATOR_VOLTAGE,
-               .owner = THIS_MODULE,
-               .enable_reg = LP8788_EN_LDO_C,
-               .enable_mask = LP8788_EN_ALDO10_M,
-               .min_uV = 1100000,
-       },
-};
-
-static int lp8788_config_ldo_enable_mode(struct platform_device *pdev,
-                                       struct lp8788_ldo *ldo,
-                                       enum lp8788_ldo_id id)
-{
-       struct lp8788 *lp = ldo->lp;
-       enum lp8788_ext_ldo_en_id enable_id;
-       static const u8 en_mask[] = {
-               [EN_ALDO1]   = LP8788_EN_SEL_ALDO1_M,
-               [EN_ALDO234] = LP8788_EN_SEL_ALDO234_M,
-               [EN_ALDO5]   = LP8788_EN_SEL_ALDO5_M,
-               [EN_ALDO7]   = LP8788_EN_SEL_ALDO7_M,
-               [EN_DLDO7]   = LP8788_EN_SEL_DLDO7_M,
-               [EN_DLDO911] = LP8788_EN_SEL_DLDO911_M,
-       };
-
-       switch (id) {
-       case DLDO7:
-               enable_id = EN_DLDO7;
-               break;
-       case DLDO9:
-       case DLDO11:
-               enable_id = EN_DLDO911;
-               break;
-       case ALDO1:
-               enable_id = EN_ALDO1;
-               break;
-       case ALDO2 ... ALDO4:
-               enable_id = EN_ALDO234;
-               break;
-       case ALDO5:
-               enable_id = EN_ALDO5;
-               break;
-       case ALDO7:
-               enable_id = EN_ALDO7;
-               break;
-       default:
-               return 0;
-       }
-
-       /*
-        * Do not use devm* here: the regulator core takes over the
-        * lifecycle management of the GPIO descriptor.
-        * FIXME: check default mode for GPIO here: high or low?
-        */
-       ldo->ena_gpiod = gpiod_get_index_optional(&pdev->dev,
-                                              "enable",
-                                              enable_id,
-                                              GPIOD_OUT_HIGH |
-                                              GPIOD_FLAGS_BIT_NONEXCLUSIVE);
-       if (IS_ERR(ldo->ena_gpiod))
-               return PTR_ERR(ldo->ena_gpiod);
-
-       /* if no GPIO for ldo pin, then set default enable mode */
-       if (!ldo->ena_gpiod)
-               goto set_default_ldo_enable_mode;
-
-       return 0;
-
-set_default_ldo_enable_mode:
-       return lp8788_update_bits(lp, LP8788_EN_SEL, en_mask[enable_id], 0);
-}
-
-static int lp8788_dldo_probe(struct platform_device *pdev)
-{
-       struct lp8788 *lp = dev_get_drvdata(pdev->dev.parent);
-       int id = pdev->id;
-       struct lp8788_ldo *ldo;
-       struct regulator_config cfg = { };
-       struct regulator_dev *rdev;
-       int ret;
-
-       ldo = devm_kzalloc(&pdev->dev, sizeof(struct lp8788_ldo), GFP_KERNEL);
-       if (!ldo)
-               return -ENOMEM;
-
-       ldo->lp = lp;
-       ret = lp8788_config_ldo_enable_mode(pdev, ldo, id);
-       if (ret)
-               return ret;
-
-       if (ldo->ena_gpiod)
-               cfg.ena_gpiod = ldo->ena_gpiod;
-
-       cfg.dev = pdev->dev.parent;
-       cfg.init_data = lp->pdata ? lp->pdata->dldo_data[id] : NULL;
-       cfg.driver_data = ldo;
-       cfg.regmap = lp->regmap;
-
-       rdev = devm_regulator_register(&pdev->dev, &lp8788_dldo_desc[id], &cfg);
-       if (IS_ERR(rdev)) {
-               ret = PTR_ERR(rdev);
-               dev_err(&pdev->dev, "DLDO%d regulator register err = %d\n",
-                               id + 1, ret);
-               return ret;
-       }
-
-       ldo->regulator = rdev;
-       platform_set_drvdata(pdev, ldo);
-
-       return 0;
-}
-
-static struct platform_driver lp8788_dldo_driver = {
-       .probe = lp8788_dldo_probe,
-       .driver = {
-               .name = LP8788_DEV_DLDO,
-               .probe_type = PROBE_PREFER_ASYNCHRONOUS,
-       },
-};
-
-static int lp8788_aldo_probe(struct platform_device *pdev)
-{
-       struct lp8788 *lp = dev_get_drvdata(pdev->dev.parent);
-       int id = pdev->id;
-       struct lp8788_ldo *ldo;
-       struct regulator_config cfg = { };
-       struct regulator_dev *rdev;
-       int ret;
-
-       ldo = devm_kzalloc(&pdev->dev, sizeof(struct lp8788_ldo), GFP_KERNEL);
-       if (!ldo)
-               return -ENOMEM;
-
-       ldo->lp = lp;
-       ret = lp8788_config_ldo_enable_mode(pdev, ldo, id + ALDO1);
-       if (ret)
-               return ret;
-
-       if (ldo->ena_gpiod)
-               cfg.ena_gpiod = ldo->ena_gpiod;
-
-       cfg.dev = pdev->dev.parent;
-       cfg.init_data = lp->pdata ? lp->pdata->aldo_data[id] : NULL;
-       cfg.driver_data = ldo;
-       cfg.regmap = lp->regmap;
-
-       rdev = devm_regulator_register(&pdev->dev, &lp8788_aldo_desc[id], &cfg);
-       if (IS_ERR(rdev)) {
-               ret = PTR_ERR(rdev);
-               dev_err(&pdev->dev, "ALDO%d regulator register err = %d\n",
-                               id + 1, ret);
-               return ret;
-       }
-
-       ldo->regulator = rdev;
-       platform_set_drvdata(pdev, ldo);
-
-       return 0;
-}
-
-static struct platform_driver lp8788_aldo_driver = {
-       .probe = lp8788_aldo_probe,
-       .driver = {
-               .name = LP8788_DEV_ALDO,
-               .probe_type = PROBE_PREFER_ASYNCHRONOUS,
-       },
-};
-
-static struct platform_driver * const drivers[] = {
-       &lp8788_dldo_driver,
-       &lp8788_aldo_driver,
-};
-
-static int __init lp8788_ldo_init(void)
-{
-       return platform_register_drivers(drivers, ARRAY_SIZE(drivers));
-}
-subsys_initcall(lp8788_ldo_init);
-
-static void __exit lp8788_ldo_exit(void)
-{
-       platform_unregister_drivers(drivers, ARRAY_SIZE(drivers));
-}
-module_exit(lp8788_ldo_exit);
-
-MODULE_DESCRIPTION("TI LP8788 LDO Driver");
-MODULE_AUTHOR("Milo Kim");
-MODULE_LICENSE("GPL");
-MODULE_ALIAS("platform:lp8788-dldo");
-MODULE_ALIAS("platform:lp8788-aldo");
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
index 5674211afe91..c201948b4d5b 100644
--- a/drivers/rtc/Kconfig
+++ b/drivers/rtc/Kconfig
@@ -317,12 +317,6 @@ config RTC_DRV_HYM8563
          This driver can also be built as a module. If so, the module
          will be called rtc-hym8563.
 
-config RTC_DRV_LP8788
-       tristate "TI LP8788 RTC driver"
-       depends on MFD_LP8788
-       help
-         Say Y to enable support for the LP8788 RTC/ALARM driver.
-
 config RTC_DRV_MAX6900
        tristate "Maxim MAX6900"
        help
diff --git a/drivers/rtc/rtc-lp8788.c b/drivers/rtc/rtc-lp8788.c
deleted file mode 100644
index 0793d70507f7..000000000000
--- a/drivers/rtc/rtc-lp8788.c
+++ /dev/null
@@ -1,322 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * TI LP8788 MFD - rtc driver
- *
- * Copyright 2012 Texas Instruments
- *
- * Author: Milo(Woogyom) Kim <[email protected]>
- */
-
-#include <linux/err.h>
-#include <linux/irqdomain.h>
-#include <linux/mfd/lp8788.h>
-#include <linux/module.h>
-#include <linux/platform_device.h>
-#include <linux/rtc.h>
-#include <linux/slab.h>
-
-/* register address */
-#define LP8788_INTEN_3                 0x05
-#define LP8788_RTC_UNLOCK              0x64
-#define LP8788_RTC_SEC                 0x70
-#define LP8788_ALM1_SEC                        0x77
-#define LP8788_ALM1_EN                 0x7D
-#define LP8788_ALM2_SEC                        0x7E
-#define LP8788_ALM2_EN                 0x84
-
-/* mask/shift bits */
-#define LP8788_INT_RTC_ALM1_M          BIT(1)  /* Addr 05h */
-#define LP8788_INT_RTC_ALM1_S          1
-#define LP8788_INT_RTC_ALM2_M          BIT(2)  /* Addr 05h */
-#define LP8788_INT_RTC_ALM2_S          2
-#define LP8788_ALM_EN_M                        BIT(7)  /* Addr 7Dh or 84h */
-#define LP8788_ALM_EN_S                        7
-
-#define DEFAULT_ALARM_SEL              LP8788_ALARM_1
-#define LP8788_MONTH_OFFSET            1
-#define LP8788_BASE_YEAR               2000
-#define MAX_WDAY_BITS                  7
-#define LP8788_WDAY_SET                        1
-#define RTC_UNLOCK                     0x1
-#define RTC_LATCH                      0x2
-#define ALARM_IRQ_FLAG                 (RTC_IRQF | RTC_AF)
-
-enum lp8788_time {
-       LPTIME_SEC,
-       LPTIME_MIN,
-       LPTIME_HOUR,
-       LPTIME_MDAY,
-       LPTIME_MON,
-       LPTIME_YEAR,
-       LPTIME_WDAY,
-       LPTIME_MAX,
-};
-
-struct lp8788_rtc {
-       struct lp8788 *lp;
-       struct rtc_device *rdev;
-       enum lp8788_alarm_sel alarm;
-       int irq;
-};
-
-static const u8 addr_alarm_sec[LP8788_ALARM_MAX] = {
-       LP8788_ALM1_SEC,
-       LP8788_ALM2_SEC,
-};
-
-static const u8 addr_alarm_en[LP8788_ALARM_MAX] = {
-       LP8788_ALM1_EN,
-       LP8788_ALM2_EN,
-};
-
-static const u8 mask_alarm_en[LP8788_ALARM_MAX] = {
-       LP8788_INT_RTC_ALM1_M,
-       LP8788_INT_RTC_ALM2_M,
-};
-
-static const u8 shift_alarm_en[LP8788_ALARM_MAX] = {
-       LP8788_INT_RTC_ALM1_S,
-       LP8788_INT_RTC_ALM2_S,
-};
-
-static int _to_tm_wday(u8 lp8788_wday)
-{
-       int i;
-
-       if (lp8788_wday == 0)
-               return 0;
-
-       /* lookup defined weekday from read register value */
-       for (i = 0; i < MAX_WDAY_BITS; i++) {
-               if ((lp8788_wday >> i) == LP8788_WDAY_SET)
-                       break;
-       }
-
-       return i + 1;
-}
-
-static inline int _to_lp8788_wday(int tm_wday)
-{
-       return LP8788_WDAY_SET << (tm_wday - 1);
-}
-
-static void lp8788_rtc_unlock(struct lp8788 *lp)
-{
-       lp8788_write_byte(lp, LP8788_RTC_UNLOCK, RTC_UNLOCK);
-       lp8788_write_byte(lp, LP8788_RTC_UNLOCK, RTC_LATCH);
-}
-
-static int lp8788_rtc_read_time(struct device *dev, struct rtc_time *tm)
-{
-       struct lp8788_rtc *rtc = dev_get_drvdata(dev);
-       struct lp8788 *lp = rtc->lp;
-       u8 data[LPTIME_MAX];
-       int ret;
-
-       lp8788_rtc_unlock(lp);
-
-       ret = lp8788_read_multi_bytes(lp, LP8788_RTC_SEC, data, LPTIME_MAX);
-       if (ret)
-               return ret;
-
-       tm->tm_sec  = data[LPTIME_SEC];
-       tm->tm_min  = data[LPTIME_MIN];
-       tm->tm_hour = data[LPTIME_HOUR];
-       tm->tm_mday = data[LPTIME_MDAY];
-       tm->tm_mon  = data[LPTIME_MON] - LP8788_MONTH_OFFSET;
-       tm->tm_year = data[LPTIME_YEAR] + LP8788_BASE_YEAR - 1900;
-       tm->tm_wday = _to_tm_wday(data[LPTIME_WDAY]);
-
-       return 0;
-}
-
-static int lp8788_rtc_set_time(struct device *dev, struct rtc_time *tm)
-{
-       struct lp8788_rtc *rtc = dev_get_drvdata(dev);
-       struct lp8788 *lp = rtc->lp;
-       u8 data[LPTIME_MAX - 1];
-       int ret, i, year;
-
-       year = tm->tm_year + 1900 - LP8788_BASE_YEAR;
-       if (year < 0) {
-               dev_err(lp->dev, "invalid year: %d\n", year);
-               return -EINVAL;
-       }
-
-       /* because rtc weekday is a readonly register, do not update */
-       data[LPTIME_SEC]  = tm->tm_sec;
-       data[LPTIME_MIN]  = tm->tm_min;
-       data[LPTIME_HOUR] = tm->tm_hour;
-       data[LPTIME_MDAY] = tm->tm_mday;
-       data[LPTIME_MON]  = tm->tm_mon + LP8788_MONTH_OFFSET;
-       data[LPTIME_YEAR] = year;
-
-       for (i = 0; i < ARRAY_SIZE(data); i++) {
-               ret = lp8788_write_byte(lp, LP8788_RTC_SEC + i, data[i]);
-               if (ret)
-                       return ret;
-       }
-
-       return 0;
-}
-
-static int lp8788_read_alarm(struct device *dev, struct rtc_wkalrm *alarm)
-{
-       struct lp8788_rtc *rtc = dev_get_drvdata(dev);
-       struct lp8788 *lp = rtc->lp;
-       struct rtc_time *tm = &alarm->time;
-       u8 addr, data[LPTIME_MAX];
-       int ret;
-
-       addr = addr_alarm_sec[rtc->alarm];
-       ret = lp8788_read_multi_bytes(lp, addr, data, LPTIME_MAX);
-       if (ret)
-               return ret;
-
-       tm->tm_sec  = data[LPTIME_SEC];
-       tm->tm_min  = data[LPTIME_MIN];
-       tm->tm_hour = data[LPTIME_HOUR];
-       tm->tm_mday = data[LPTIME_MDAY];
-       tm->tm_mon  = data[LPTIME_MON] - LP8788_MONTH_OFFSET;
-       tm->tm_year = data[LPTIME_YEAR] + LP8788_BASE_YEAR - 1900;
-       tm->tm_wday = _to_tm_wday(data[LPTIME_WDAY]);
-       alarm->enabled = data[LPTIME_WDAY] & LP8788_ALM_EN_M;
-
-       return 0;
-}
-
-static int lp8788_set_alarm(struct device *dev, struct rtc_wkalrm *alarm)
-{
-       struct lp8788_rtc *rtc = dev_get_drvdata(dev);
-       struct lp8788 *lp = rtc->lp;
-       struct rtc_time *tm = &alarm->time;
-       u8 addr, data[LPTIME_MAX];
-       int ret, i, year;
-
-       year = tm->tm_year + 1900 - LP8788_BASE_YEAR;
-       if (year < 0) {
-               dev_err(lp->dev, "invalid year: %d\n", year);
-               return -EINVAL;
-       }
-
-       data[LPTIME_SEC]  = tm->tm_sec;
-       data[LPTIME_MIN]  = tm->tm_min;
-       data[LPTIME_HOUR] = tm->tm_hour;
-       data[LPTIME_MDAY] = tm->tm_mday;
-       data[LPTIME_MON]  = tm->tm_mon + LP8788_MONTH_OFFSET;
-       data[LPTIME_YEAR] = year;
-       data[LPTIME_WDAY] = _to_lp8788_wday(tm->tm_wday);
-
-       for (i = 0; i < ARRAY_SIZE(data); i++) {
-               addr = addr_alarm_sec[rtc->alarm] + i;
-               ret = lp8788_write_byte(lp, addr, data[i]);
-               if (ret)
-                       return ret;
-       }
-
-       alarm->enabled = 1;
-       addr = addr_alarm_en[rtc->alarm];
-
-       return lp8788_update_bits(lp, addr, LP8788_ALM_EN_M,
-                               alarm->enabled << LP8788_ALM_EN_S);
-}
-
-static int lp8788_alarm_irq_enable(struct device *dev, unsigned int enable)
-{
-       struct lp8788_rtc *rtc = dev_get_drvdata(dev);
-       struct lp8788 *lp = rtc->lp;
-       u8 mask, shift;
-
-       if (!rtc->irq)
-               return -EIO;
-
-       mask = mask_alarm_en[rtc->alarm];
-       shift = shift_alarm_en[rtc->alarm];
-
-       return lp8788_update_bits(lp, LP8788_INTEN_3, mask, enable << shift);
-}
-
-static const struct rtc_class_ops lp8788_rtc_ops = {
-       .read_time = lp8788_rtc_read_time,
-       .set_time = lp8788_rtc_set_time,
-       .read_alarm = lp8788_read_alarm,
-       .set_alarm = lp8788_set_alarm,
-       .alarm_irq_enable = lp8788_alarm_irq_enable,
-};
-
-static irqreturn_t lp8788_alarm_irq_handler(int irq, void *ptr)
-{
-       struct lp8788_rtc *rtc = ptr;
-
-       rtc_update_irq(rtc->rdev, 1, ALARM_IRQ_FLAG);
-       return IRQ_HANDLED;
-}
-
-static int lp8788_alarm_irq_register(struct platform_device *pdev,
-                               struct lp8788_rtc *rtc)
-{
-       struct resource *r;
-       struct lp8788 *lp = rtc->lp;
-       struct irq_domain *irqdm = lp->irqdm;
-       int irq;
-
-       rtc->irq = 0;
-
-       /* even the alarm IRQ number is not specified, rtc time should work */
-       r = platform_get_resource_byname(pdev, IORESOURCE_IRQ, LP8788_ALM_IRQ);
-       if (!r)
-               return 0;
-
-       if (rtc->alarm == LP8788_ALARM_1)
-               irq = r->start;
-       else
-               irq = r->end;
-
-       rtc->irq = irq_create_mapping(irqdm, irq);
-
-       return devm_request_threaded_irq(&pdev->dev, rtc->irq, NULL,
-                               lp8788_alarm_irq_handler,
-                               0, LP8788_ALM_IRQ, rtc);
-}
-
-static int lp8788_rtc_probe(struct platform_device *pdev)
-{
-       struct lp8788 *lp = dev_get_drvdata(pdev->dev.parent);
-       struct lp8788_rtc *rtc;
-       struct device *dev = &pdev->dev;
-
-       rtc = devm_kzalloc(dev, sizeof(struct lp8788_rtc), GFP_KERNEL);
-       if (!rtc)
-               return -ENOMEM;
-
-       rtc->lp = lp;
-       rtc->alarm = lp->pdata ? lp->pdata->alarm_sel : DEFAULT_ALARM_SEL;
-       platform_set_drvdata(pdev, rtc);
-
-       device_init_wakeup(dev, true);
-
-       rtc->rdev = devm_rtc_device_register(dev, "lp8788_rtc",
-                                       &lp8788_rtc_ops, THIS_MODULE);
-       if (IS_ERR(rtc->rdev)) {
-               dev_err(dev, "can not register rtc device\n");
-               return PTR_ERR(rtc->rdev);
-       }
-
-       if (lp8788_alarm_irq_register(pdev, rtc))
-               dev_warn(lp->dev, "no rtc irq handler\n");
-
-       return 0;
-}
-
-static struct platform_driver lp8788_rtc_driver = {
-       .probe = lp8788_rtc_probe,
-       .driver = {
-               .name = LP8788_DEV_RTC,
-       },
-};
-module_platform_driver(lp8788_rtc_driver);
-
-MODULE_DESCRIPTION("Texas Instruments LP8788 RTC Driver");
-MODULE_AUTHOR("Milo Kim");
-MODULE_LICENSE("GPL");
-MODULE_ALIAS("platform:lp8788-rtc");
diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig
index 413ed6c38b53..2c206d2713e3 100644
--- a/drivers/video/backlight/Kconfig
+++ b/drivers/video/backlight/Kconfig
@@ -425,12 +425,6 @@ config BACKLIGHT_LP855X
          This supports TI LP8550, LP8551, LP8552, LP8553, LP8555, LP8556 and
          LP8557 backlight driver.
 
-config BACKLIGHT_LP8788
-       tristate "Backlight driver for TI LP8788 MFD"
-       depends on MFD_LP8788 && PWM
-       help
-         This supports TI LP8788 backlight driver.
-
 config BACKLIGHT_MP3309C
        tristate "Backlight Driver for MPS MP3309C"
        depends on I2C && PWM
diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile
index 3dc3580d82c7..0497eaa639cd 100644
--- a/drivers/video/backlight/Makefile
+++ b/drivers/video/backlight/Makefile
@@ -43,7 +43,6 @@ obj-$(CONFIG_BACKLIGHT_LM3630A)               += lm3630a_bl.o
 obj-$(CONFIG_BACKLIGHT_LM3639)         += lm3639_bl.o
 obj-$(CONFIG_BACKLIGHT_LOCOMO)         += locomolcd.o
 obj-$(CONFIG_BACKLIGHT_LP855X)         += lp855x_bl.o
-obj-$(CONFIG_BACKLIGHT_LP8788)         += lp8788_bl.o
 obj-$(CONFIG_BACKLIGHT_LV5207LP)       += lv5207lp.o
 obj-$(CONFIG_BACKLIGHT_MAX25014)       += max25014.o
 obj-$(CONFIG_BACKLIGHT_MAX8925)                += max8925_bl.o
diff --git a/drivers/video/backlight/lp8788_bl.c 
b/drivers/video/backlight/lp8788_bl.c
deleted file mode 100644
index f61a64905a02..000000000000
--- a/drivers/video/backlight/lp8788_bl.c
+++ /dev/null
@@ -1,190 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * TI LP8788 MFD - backlight driver
- *
- * Copyright 2012 Texas Instruments
- *
- * Author: Milo(Woogyom) Kim <[email protected]>
- */
-
-#include <linux/backlight.h>
-#include <linux/err.h>
-#include <linux/mfd/lp8788.h>
-#include <linux/module.h>
-#include <linux/platform_device.h>
-#include <linux/slab.h>
-
-/* Register address */
-#define LP8788_BL_CONFIG               0x96
-#define LP8788_BL_EN                   BIT(0)
-#define LP8788_BL_PWM_INPUT_EN         BIT(5)
-#define LP8788_BL_FULLSCALE_SHIFT      2
-#define LP8788_BL_DIM_MODE_SHIFT       1
-#define LP8788_BL_PWM_POLARITY_SHIFT   6
-
-#define LP8788_BL_BRIGHTNESS           0x97
-
-#define LP8788_BL_RAMP                 0x98
-#define LP8788_BL_RAMP_RISE_SHIFT      4
-
-#define MAX_BRIGHTNESS                 127
-#define DEFAULT_BL_NAME                        "lcd-backlight"
-
-struct lp8788_bl {
-       struct lp8788 *lp;
-       struct backlight_device *bl_dev;
-};
-
-static int lp8788_backlight_configure(struct lp8788_bl *bl)
-{
-       int ret;
-       u8 val;
-
-       /* Brightness ramp up/down */
-       val = (LP8788_RAMP_8192us << LP8788_BL_RAMP_RISE_SHIFT) | 
LP8788_RAMP_8192us;
-       ret = lp8788_write_byte(bl->lp, LP8788_BL_RAMP, val);
-       if (ret)
-               return ret;
-
-       /* Fullscale current setting */
-       val = (LP8788_FULLSCALE_1900uA << LP8788_BL_FULLSCALE_SHIFT) |
-               (LP8788_DIM_EXPONENTIAL << LP8788_BL_DIM_MODE_SHIFT);
-
-       /* Brightness control mode */
-       val |= LP8788_BL_EN;
-
-       return lp8788_write_byte(bl->lp, LP8788_BL_CONFIG, val);
-}
-
-static int lp8788_bl_update_status(struct backlight_device *bl_dev)
-{
-       struct lp8788_bl *bl = bl_get_data(bl_dev);
-
-       if (bl_dev->props.state & BL_CORE_SUSPENDED)
-               bl_dev->props.brightness = 0;
-
-       lp8788_write_byte(bl->lp, LP8788_BL_BRIGHTNESS, 
bl_dev->props.brightness);
-
-       return 0;
-}
-
-static const struct backlight_ops lp8788_bl_ops = {
-       .options = BL_CORE_SUSPENDRESUME,
-       .update_status = lp8788_bl_update_status,
-};
-
-static int lp8788_backlight_register(struct lp8788_bl *bl)
-{
-       struct backlight_device *bl_dev;
-       struct backlight_properties props;
-
-       memset(&props, 0, sizeof(struct backlight_properties));
-       props.type = BACKLIGHT_PLATFORM;
-       props.max_brightness = MAX_BRIGHTNESS;
-
-       /* Initial brightness */
-       props.brightness = 0;
-
-       /* Backlight device name */
-       bl_dev = backlight_device_register(DEFAULT_BL_NAME, bl->lp->dev, bl,
-                                      &lp8788_bl_ops, &props);
-       if (IS_ERR(bl_dev))
-               return PTR_ERR(bl_dev);
-
-       bl->bl_dev = bl_dev;
-
-       return 0;
-}
-
-static void lp8788_backlight_unregister(struct lp8788_bl *bl)
-{
-       struct backlight_device *bl_dev = bl->bl_dev;
-
-       backlight_device_unregister(bl_dev);
-}
-
-static ssize_t lp8788_get_bl_ctl_mode(struct device *dev,
-                                    struct device_attribute *attr, char *buf)
-{
-       const char *strmode = "Register based";
-
-       return scnprintf(buf, PAGE_SIZE, "%s\n", strmode);
-}
-
-static DEVICE_ATTR(bl_ctl_mode, S_IRUGO, lp8788_get_bl_ctl_mode, NULL);
-
-static struct attribute *lp8788_attributes[] = {
-       &dev_attr_bl_ctl_mode.attr,
-       NULL,
-};
-
-static const struct attribute_group lp8788_attr_group = {
-       .attrs = lp8788_attributes,
-};
-
-static int lp8788_backlight_probe(struct platform_device *pdev)
-{
-       struct lp8788 *lp = dev_get_drvdata(pdev->dev.parent);
-       struct lp8788_bl *bl;
-       int ret;
-
-       bl = devm_kzalloc(lp->dev, sizeof(struct lp8788_bl), GFP_KERNEL);
-       if (!bl)
-               return -ENOMEM;
-
-       bl->lp = lp;
-
-       platform_set_drvdata(pdev, bl);
-
-       ret = lp8788_backlight_configure(bl);
-       if (ret) {
-               dev_err(lp->dev, "backlight config err: %d\n", ret);
-               goto err_dev;
-       }
-
-       ret = lp8788_backlight_register(bl);
-       if (ret) {
-               dev_err(lp->dev, "register backlight err: %d\n", ret);
-               goto err_dev;
-       }
-
-       ret = sysfs_create_group(&pdev->dev.kobj, &lp8788_attr_group);
-       if (ret) {
-               dev_err(lp->dev, "register sysfs err: %d\n", ret);
-               goto err_sysfs;
-       }
-
-       backlight_update_status(bl->bl_dev);
-
-       return 0;
-
-err_sysfs:
-       lp8788_backlight_unregister(bl);
-err_dev:
-       return ret;
-}
-
-static void lp8788_backlight_remove(struct platform_device *pdev)
-{
-       struct lp8788_bl *bl = platform_get_drvdata(pdev);
-       struct backlight_device *bl_dev = bl->bl_dev;
-
-       bl_dev->props.brightness = 0;
-       backlight_update_status(bl_dev);
-       sysfs_remove_group(&pdev->dev.kobj, &lp8788_attr_group);
-       lp8788_backlight_unregister(bl);
-}
-
-static struct platform_driver lp8788_bl_driver = {
-       .probe = lp8788_backlight_probe,
-       .remove = lp8788_backlight_remove,
-       .driver = {
-               .name = LP8788_DEV_BACKLIGHT,
-       },
-};
-module_platform_driver(lp8788_bl_driver);
-
-MODULE_DESCRIPTION("Texas Instruments LP8788 Backlight Driver");
-MODULE_AUTHOR("Milo Kim");
-MODULE_LICENSE("GPL");
-MODULE_ALIAS("platform:lp8788-backlight");
diff --git a/include/linux/mfd/lp8788-isink.h b/include/linux/mfd/lp8788-isink.h
deleted file mode 100644
index 464dc4c937e4..000000000000
--- a/include/linux/mfd/lp8788-isink.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * TI LP8788 MFD - common definitions for current sinks
- *
- * Copyright 2012 Texas Instruments
- *
- * Author: Milo(Woogyom) Kim <[email protected]>
- */
-
-#ifndef __ISINK_LP8788_H__
-#define __ISINK_LP8788_H__
-
-/* register address */
-#define LP8788_ISINK_CTRL              0x99
-#define LP8788_ISINK12_IOUT            0x9A
-#define LP8788_ISINK3_IOUT             0x9B
-#define LP8788_ISINK1_PWM              0x9C
-#define LP8788_ISINK2_PWM              0x9D
-#define LP8788_ISINK3_PWM              0x9E
-
-/* mask bits */
-#define LP8788_ISINK1_IOUT_M           0x0F    /* Addr 9Ah */
-#define LP8788_ISINK2_IOUT_M           0xF0
-#define LP8788_ISINK3_IOUT_M           0x0F    /* Addr 9Bh */
-
-/* 6 bits used for PWM code : Addr 9C ~ 9Eh */
-#define LP8788_ISINK_MAX_PWM           63
-#define LP8788_ISINK_SCALE_OFFSET      3
-
-static const u8 lp8788_iout_addr[] = {
-       LP8788_ISINK12_IOUT,
-       LP8788_ISINK12_IOUT,
-       LP8788_ISINK3_IOUT,
-};
-
-static const u8 lp8788_iout_mask[] = {
-       LP8788_ISINK1_IOUT_M,
-       LP8788_ISINK2_IOUT_M,
-       LP8788_ISINK3_IOUT_M,
-};
-
-static const u8 lp8788_pwm_addr[] = {
-       LP8788_ISINK1_PWM,
-       LP8788_ISINK2_PWM,
-       LP8788_ISINK3_PWM,
-};
-
-#endif
diff --git a/include/linux/mfd/lp8788.h b/include/linux/mfd/lp8788.h
deleted file mode 100644
index fd17bec2a33e..000000000000
--- a/include/linux/mfd/lp8788.h
+++ /dev/null
@@ -1,289 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * TI LP8788 MFD Device
- *
- * Copyright 2012 Texas Instruments
- *
- * Author: Milo(Woogyom) Kim <[email protected]>
- */
-
-#ifndef __MFD_LP8788_H__
-#define __MFD_LP8788_H__
-
-#include <linux/irqdomain.h>
-#include <linux/regmap.h>
-
-#define LP8788_DEV_BUCK                "lp8788-buck"
-#define LP8788_DEV_DLDO                "lp8788-dldo"
-#define LP8788_DEV_ALDO                "lp8788-aldo"
-#define LP8788_DEV_CHARGER     "lp8788-charger"
-#define LP8788_DEV_RTC         "lp8788-rtc"
-#define LP8788_DEV_BACKLIGHT   "lp8788-backlight"
-#define LP8788_DEV_VIBRATOR    "lp8788-vibrator"
-#define LP8788_DEV_KEYLED      "lp8788-keyled"
-#define LP8788_DEV_ADC         "lp8788-adc"
-
-#define LP8788_NUM_BUCKS       4
-#define LP8788_NUM_DLDOS       12
-#define LP8788_NUM_ALDOS       10
-#define LP8788_NUM_BUCK2_DVS   2
-
-#define LP8788_CHG_IRQ         "CHG_IRQ"
-#define LP8788_PRSW_IRQ                "PRSW_IRQ"
-#define LP8788_BATT_IRQ                "BATT_IRQ"
-#define LP8788_ALM_IRQ         "ALARM_IRQ"
-
-enum lp8788_int_id {
-       /* interrup register 1 : Addr 00h */
-       LP8788_INT_TSDL,
-       LP8788_INT_TSDH,
-       LP8788_INT_UVLO,
-       LP8788_INT_FLAGMON,
-       LP8788_INT_PWRON_TIME,
-       LP8788_INT_PWRON,
-       LP8788_INT_COMP1,
-       LP8788_INT_COMP2,
-
-       /* interrupt register 2 : Addr 01h */
-       LP8788_INT_CHG_INPUT_STATE,
-       LP8788_INT_CHG_STATE,
-       LP8788_INT_EOC,
-       LP8788_INT_CHG_RESTART,
-       LP8788_INT_RESTART_TIMEOUT,
-       LP8788_INT_FULLCHG_TIMEOUT,
-       LP8788_INT_PRECHG_TIMEOUT,
-
-       /* interrupt register 3 : Addr 02h */
-       LP8788_INT_RTC_ALARM1 = 17,
-       LP8788_INT_RTC_ALARM2,
-       LP8788_INT_ENTER_SYS_SUPPORT,
-       LP8788_INT_EXIT_SYS_SUPPORT,
-       LP8788_INT_BATT_LOW,
-       LP8788_INT_NO_BATT,
-
-       LP8788_INT_MAX = 24,
-};
-
-enum lp8788_dvs_sel {
-       DVS_SEL_V0,
-       DVS_SEL_V1,
-       DVS_SEL_V2,
-       DVS_SEL_V3,
-};
-
-enum lp8788_ext_ldo_en_id {
-       EN_ALDO1,
-       EN_ALDO234,
-       EN_ALDO5,
-       EN_ALDO7,
-       EN_DLDO7,
-       EN_DLDO911,
-       EN_LDOS_MAX,
-};
-
-enum lp8788_charger_event {
-       NO_CHARGER,
-       CHARGER_DETECTED,
-};
-
-enum lp8788_bl_dim_mode {
-       LP8788_DIM_EXPONENTIAL,
-       LP8788_DIM_LINEAR,
-};
-
-enum lp8788_bl_full_scale_current {
-       LP8788_FULLSCALE_5000uA,
-       LP8788_FULLSCALE_8500uA,
-       LP8788_FULLSCALE_1200uA,
-       LP8788_FULLSCALE_1550uA,
-       LP8788_FULLSCALE_1900uA,
-       LP8788_FULLSCALE_2250uA,
-       LP8788_FULLSCALE_2600uA,
-       LP8788_FULLSCALE_2950uA,
-};
-
-enum lp8788_bl_ramp_step {
-       LP8788_RAMP_8us,
-       LP8788_RAMP_1024us,
-       LP8788_RAMP_2048us,
-       LP8788_RAMP_4096us,
-       LP8788_RAMP_8192us,
-       LP8788_RAMP_16384us,
-       LP8788_RAMP_32768us,
-       LP8788_RAMP_65538us,
-};
-
-enum lp8788_isink_scale {
-       LP8788_ISINK_SCALE_100mA,
-       LP8788_ISINK_SCALE_120mA,
-};
-
-enum lp8788_isink_number {
-       LP8788_ISINK_1,
-       LP8788_ISINK_2,
-       LP8788_ISINK_3,
-};
-
-enum lp8788_alarm_sel {
-       LP8788_ALARM_1,
-       LP8788_ALARM_2,
-       LP8788_ALARM_MAX,
-};
-
-enum lp8788_adc_id {
-       LPADC_VBATT_5P5,
-       LPADC_VIN_CHG,
-       LPADC_IBATT,
-       LPADC_IC_TEMP,
-       LPADC_VBATT_6P0,
-       LPADC_VBATT_5P0,
-       LPADC_ADC1,
-       LPADC_ADC2,
-       LPADC_VDD,
-       LPADC_VCOIN,
-       LPADC_VDD_LDO,
-       LPADC_ADC3,
-       LPADC_ADC4,
-       LPADC_MAX,
-};
-
-struct lp8788;
-
-/*
- * lp8788_buck1_dvs
- * @vsel         : dvs selector for buck v1 register
- */
-struct lp8788_buck1_dvs {
-       enum lp8788_dvs_sel vsel;
-};
-
-/*
- * lp8788_buck2_dvs
- * @vsel         : dvs selector for buck v2 register
- */
-struct lp8788_buck2_dvs {
-       enum lp8788_dvs_sel vsel;
-};
-
-/*
- * struct lp8788_chg_param
- * @addr         : charging control register address (range : 0x11 ~ 0x1C)
- * @val          : charging parameter value
- */
-struct lp8788_chg_param {
-       u8 addr;
-       u8 val;
-};
-
-/*
- * struct lp8788_charger_platform_data
- * @adc_vbatt         : adc channel name for battery voltage
- * @adc_batt_temp     : adc channel name for battery temperature
- * @max_vbatt_mv      : used for calculating battery capacity
- * @chg_params        : initial charging parameters
- * @num_chg_params    : numbers of charging parameters
- * @charger_event     : the charger event can be reported to the platform side
- */
-struct lp8788_charger_platform_data {
-       const char *adc_vbatt;
-       const char *adc_batt_temp;
-       unsigned int max_vbatt_mv;
-       struct lp8788_chg_param *chg_params;
-       int num_chg_params;
-       void (*charger_event) (struct lp8788 *lp,
-                               enum lp8788_charger_event event);
-};
-
-/*
- * struct lp8788_led_platform_data
- * @name         : led driver name. (default: "keyboard-backlight")
- * @scale        : current scale
- * @num          : current sink number
- * @iout_code    : current output value (Addr 9Ah ~ 9Bh)
- */
-struct lp8788_led_platform_data {
-       char *name;
-       enum lp8788_isink_scale scale;
-       enum lp8788_isink_number num;
-       int iout_code;
-};
-
-/*
- * struct lp8788_vib_platform_data
- * @name         : vibrator driver name
- * @scale        : current scale
- * @num          : current sink number
- * @iout_code    : current output value (Addr 9Ah ~ 9Bh)
- * @pwm_code     : PWM code value (Addr 9Ch ~ 9Eh)
- */
-struct lp8788_vib_platform_data {
-       char *name;
-       enum lp8788_isink_scale scale;
-       enum lp8788_isink_number num;
-       int iout_code;
-       int pwm_code;
-};
-
-/*
- * struct lp8788_platform_data
- * @init_func    : used for initializing registers
- *                 before mfd driver is registered
- * @buck_data    : regulator initial data for buck
- * @dldo_data    : regulator initial data for digital ldo
- * @aldo_data    : regulator initial data for analog ldo
- * @buck1_dvs    : configurations for buck1 dvs
- * @buck2_dvs    : configurations for buck2 dvs
- * @chg_pdata    : platform data for charger driver
- * @alarm_sel    : rtc alarm selection (1 or 2)
- * @led_pdata    : configurable data for led driver
- * @vib_pdata    : configurable data for vibrator driver
- * @adc_pdata    : iio map data for adc driver
- */
-struct lp8788_platform_data {
-       /* general system information */
-       int (*init_func) (struct lp8788 *lp);
-
-       /* regulators */
-       struct regulator_init_data *buck_data[LP8788_NUM_BUCKS];
-       struct regulator_init_data *dldo_data[LP8788_NUM_DLDOS];
-       struct regulator_init_data *aldo_data[LP8788_NUM_ALDOS];
-       struct lp8788_buck1_dvs *buck1_dvs;
-       struct lp8788_buck2_dvs *buck2_dvs;
-
-       /* charger */
-       struct lp8788_charger_platform_data *chg_pdata;
-
-       /* rtc alarm */
-       enum lp8788_alarm_sel alarm_sel;
-
-       /* current sinks */
-       struct lp8788_led_platform_data *led_pdata;
-       struct lp8788_vib_platform_data *vib_pdata;
-
-       /* adc iio map data */
-       struct iio_map *adc_pdata;
-};
-
-/*
- * struct lp8788
- * @dev          : parent device pointer
- * @regmap       : used for i2c communcation on accessing registers
- * @irqdm        : interrupt domain for handling nested interrupt
- * @irq          : pin number of IRQ_N
- * @pdata        : lp8788 platform specific data
- */
-struct lp8788 {
-       struct device *dev;
-       struct regmap *regmap;
-       struct irq_domain *irqdm;
-       int irq;
-       struct lp8788_platform_data *pdata;
-};
-
-int lp8788_irq_init(struct lp8788 *lp, int chip_irq);
-void lp8788_irq_exit(struct lp8788 *lp);
-int lp8788_read_byte(struct lp8788 *lp, u8 reg, u8 *data);
-int lp8788_read_multi_bytes(struct lp8788 *lp, u8 reg, u8 *data, size_t count);
-int lp8788_write_byte(struct lp8788 *lp, u8 reg, u8 data);
-int lp8788_update_bits(struct lp8788 *lp, u8 reg, u8 mask, u8 data);
-#endif
-- 
2.53.0


Reply via email to