# SPDX-License-Identifier: GPL-2.0-only
menuconfig REGULATOR
	bool "Voltage and Current Regulator Support"
	select LINEAR_RANGES
	help
	  Generic Voltage and Current Regulator support.

	  This framework is designed to provide a generic interface to voltage
	  and current regulators within the Linux kernel. It's intended to
	  provide voltage and current control to client or consumer drivers and
	  also provide status information to user space applications through a
	  sysfs interface.

	  The intention is to allow systems to dynamically control regulator
	  output in order to save power and prolong battery life. This applies
	  to both voltage regulators (where voltage output is controllable) and
	  current sinks (where current output is controllable).

	  This framework safely compiles out if not selected so that client
	  drivers can still be used in systems with no software controllable
	  regulators.

	  If unsure, say no.


if REGULATOR

config REGULATOR_DEBUG
	bool "Regulator debug support"
	help
	  Say yes here to enable debugging support.

config REGULATOR_FIXED_VOLTAGE
	tristate "Fixed voltage regulator support"
	help
	  This driver provides support for fixed voltage regulators,
	  useful for systems which use a combination of software
	  managed regulators and simple non-configurable regulators.

config REGULATOR_VIRTUAL_CONSUMER
	tristate "Virtual regulator consumer support"
	help
	  This driver provides a virtual consumer for the voltage and
	  current regulator API which provides sysfs controls for
	  configuring the supplies requested.  This is mainly useful
	  for test purposes.

	  If unsure, say no.

config REGULATOR_USERSPACE_CONSUMER
	tristate "Userspace regulator consumer support"
	help
	  There are some classes of devices that are controlled entirely
	  from user space. Userspace consumer driver provides ability to
	  control power supplies for such devices.

	  If unsure, say no.

config REGULATOR_NETLINK_EVENTS
	bool "Enable support for receiving regulator events via netlink"
	depends on NET
	help
	  Enabling this option allows the kernel to broadcast regulator events using
	  the netlink mechanism. User-space applications can subscribe to these events
	  for real-time updates on various regulator events.

	  If unsure, say no.

config REGULATOR_88PG86X
	tristate "Marvell 88PG86X voltage regulators"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver supports Marvell 88PG867 and 88PG868 voltage regulators.
	  They provide two I2C-controlled DC/DC step-down converters with
	  sleep mode and separate enable pins.

config REGULATOR_88PM800
	tristate "Marvell 88PM800 Power regulators"
	depends on MFD_88PM800
	help
	  This driver supports Marvell 88PM800 voltage regulator chips.
	  It delivers digitally programmable output,
	  the voltage is programmed via I2C interface.
	  It's suitable to support PXA988 chips to control VCC_MAIN and
	  various voltages.

config REGULATOR_88PM8607
	tristate "Marvell 88PM8607 Power regulators"
	depends on MFD_88PM860X=y
	help
	  This driver supports 88PM8607 voltage regulator chips.

config REGULATOR_88PM886
	tristate "Marvell 88PM886 voltage regulators"
	depends on MFD_88PM886_PMIC
	help
	  This driver implements support for Marvell 88PM886 voltage regulators.

config REGULATOR_ACT8865
	tristate "Active-semi act8865 voltage regulator"
	depends on I2C
	depends on POWER_SUPPLY
	select REGMAP_I2C
	help
	  This driver controls a active-semi act8865 voltage output
	  regulator via I2C bus.

config REGULATOR_ACT8945A
	tristate "Active-semi ACT8945A voltage regulator"
	depends on MFD_ACT8945A
	help
	  This driver controls a active-semi ACT8945A voltage regulator
	  via I2C bus. The ACT8945A features three step-down DC/DC converters
	  and four low-dropout linear regulators, along with a ActivePath
	  battery charger.

config REGULATOR_AD5398
	tristate "Analog Devices AD5398/AD5821 regulators"
	depends on I2C
	help
	  This driver supports AD5398 and AD5821 current regulator chips.
	  If building into module, its name is ad5398.ko.

config REGULATOR_ADP5055
	tristate "Analog Devices ADP5055 Triple Buck Regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver controls an Analog Devices ADP5055 with triple buck
	  regulators using an I2C interface.

	  Say M here if you want to include support for the regulator as a
	  module.

config REGULATOR_ANATOP
	tristate "Freescale i.MX on-chip ANATOP LDO regulators"
	depends on ARCH_MXC || COMPILE_TEST
	depends on MFD_SYSCON
	help
	  Say y here to support Freescale i.MX on-chip ANATOP LDOs
	  regulators. It is recommended that this option be
	  enabled on i.MX6 platform.

config REGULATOR_AAT2870
	tristate "AnalogicTech AAT2870 Regulators"
	depends on MFD_AAT2870_CORE
	help
	  If you have a AnalogicTech AAT2870 say Y to enable the
	  regulator driver.

config REGULATOR_AB8500
	bool "ST-Ericsson AB8500 Power Regulators"
	depends on AB8500_CORE
	help
	  This driver supports the regulators found on the ST-Ericsson mixed
	  signal AB8500 PMIC

config REGULATOR_ARIZONA_LDO1
	tristate "Cirrus Madera and Wolfson Arizona class devices LDO1"
	depends on MFD_ARIZONA || MFD_MADERA
	depends on SND_SOC
	help
	  Support for the LDO1 regulators found on Cirrus Logic Madera codecs
	  and Wolfson Microelectronic Arizona codecs.

config REGULATOR_ARIZONA_MICSUPP
	tristate "Cirrus Madera and Wolfson Arizona class devices MICSUPP"
	depends on MFD_ARIZONA || MFD_MADERA
	depends on SND_SOC
	help
	  Support for the MICSUPP regulators found on Cirrus Logic Madera codecs
	  and Wolfson Microelectronic Arizona codecs
	  devices.

config REGULATOR_ARM_SCMI
	tristate "SCMI based regulator driver"
	depends on ARM_SCMI_PROTOCOL && OF
	help
	  This adds the regulator driver support for ARM platforms using SCMI
	  protocol for device voltage management.
	  This driver uses SCMI Message Protocol driver to interact with the
	  firmware providing the device Voltage functionality.

config REGULATOR_AS3711
	tristate "AS3711 PMIC"
	depends on MFD_AS3711
	help
	  This driver provides support for the voltage regulators on the
	  AS3711 PMIC

config REGULATOR_AS3722
	tristate "AMS AS3722 PMIC Regulators"
	depends on MFD_AS3722
	help
	  This driver provides support for the voltage regulators on the
	  AS3722 PMIC. This will enable support for all the software
	  controllable DCDC/LDO regulators.

config REGULATOR_ATC260X
	tristate "Actions Semi ATC260x PMIC Regulators"
	depends on MFD_ATC260X
	help
	  This driver provides support for the voltage regulators on the
	  ATC260x PMICs. This will enable support for all the software
	  controllable DCDC/LDO regulators.

config REGULATOR_AW37503
	tristate "Awinic AW37503 Dual Output Power regulators"
	depends on I2C && GPIOLIB
	select REGMAP_I2C
	help
	  This driver supports AW37503 single inductor - dual output
	  power supply specifically designed for display panels.

config REGULATOR_AXP20X
	tristate "X-POWERS AXP20X PMIC Regulators"
	depends on MFD_AXP20X
	help
	  This driver provides support for the voltage regulators on the
	  AXP20X PMIC.

config REGULATOR_BCM590XX
	tristate "Broadcom BCM590xx PMU Regulators"
	depends on MFD_BCM590XX
	help
	  This driver provides support for the voltage regulators on the
	  BCM590xx PMUs. This will enable support for the software
	  controllable LDO/Switching regulators.

config REGULATOR_BD71815
	tristate "ROHM BD71815 Power Regulator"
	depends on MFD_ROHM_BD71828
	select REGULATOR_ROHM
	help
	  This driver supports voltage regulators on ROHM BD71815 PMIC.
	  This will enable support for the software controllable buck
	  and LDO regulators and a current regulator for LEDs.

	  This driver can also be built as a module. If so, the module
	  will be called bd71815-regulator.

config REGULATOR_BD71828
	tristate "ROHM BD71828, BD72720 and BD73900 Power Regulators"
	depends on MFD_ROHM_BD71828
	select REGULATOR_ROHM
	help
	  This driver supports voltage regulators on ROHM BD71828,
	  BD71879, BD72720 and BD73900 PMICs. This will enable
	  support for the software controllable buck and LDO regulators.

	  This driver can also be built as a module. If so, the module
	  will be called bd71828-regulator.

config REGULATOR_BD718XX
	tristate "ROHM BD71837 Power Regulator"
	depends on MFD_ROHM_BD718XX
	select REGULATOR_ROHM
	help
	  This driver supports voltage regulators on ROHM BD71837 PMIC.
	  This will enable support for the software controllable buck
	  and LDO regulators.

	  This driver can also be built as a module. If so, the module
	  will be called bd718x7-regulator.

config REGULATOR_BD9571MWV
	tristate "ROHM BD9571MWV Regulators"
	depends on MFD_BD9571MWV
	help
	  This driver provides support for the voltage regulators on the
	  ROHM BD9571MWV PMIC. This will enable support for the software
	  controllable regulator and voltage sampling units.

	  This driver can also be built as a module. If so, the module
	  will be called bd9571mwv-regulator.

config REGULATOR_BD957XMUF
	tristate "ROHM BD9576MUF and BD9573MUF Regulators"
	depends on MFD_ROHM_BD957XMUF
	help
	  This driver supports voltage regulators on ROHM BD9576MUF and
	  BD9573MUF PMICs.

	  This driver can also be built as a module. If so, the module
	  will be called bd9576-regulator.

config REGULATOR_BD96801
	tristate "ROHM BD96801 Power Regulator"
	depends on MFD_ROHM_BD96801
	select REGULATOR_ROHM
	help
	  This driver supports voltage regulators on ROHM BD96801 PMIC.
	  This will enable support for the software controllable buck
	  and LDO regulators.

	  This driver can also be built as a module. If so, the module
	  will be called bd96801-regulator.

config REGULATOR_BQ257XX
	tristate "TI BQ257XX regulator family"
	depends on MFD_BQ257XX
	depends on GPIOLIB || COMPILE_TEST
	help
	  Say Y to enable support for the boost regulator function of
	  the BQ257XX family of charger circuits.

config REGULATOR_CPCAP
	tristate "Motorola CPCAP regulator"
	depends on MFD_CPCAP
	help
	  Say y here for CPCAP regulator found on some Motorola phones
	  and tablets such as Droid 4.

config REGULATOR_CROS_EC
	tristate "ChromeOS EC regulators"
	depends on CROS_EC && OF
	help
	  This driver supports voltage regulators that is connected to ChromeOS
	  EC and controlled through EC host commands.

	  This driver can also be built as a module. If so, the module
	  will be called cros-ec-regulator.

config REGULATOR_DA903X
	tristate "Dialog Semiconductor DA9030/DA9034 regulators"
	depends on PMIC_DA903X
	depends on !CC_IS_CLANG # https://llvm.org/pr38789
	help
	  Say y here to support the BUCKs and LDOs regulators found on
	  Dialog Semiconductor DA9030/DA9034 PMIC.

config REGULATOR_DA9052
	tristate "Dialog Semiconductor DA9052/DA9053 regulators"
	depends on PMIC_DA9052
	help
	  This driver supports the voltage regulators of DA9052-BC and
	  DA9053-AA/Bx PMIC.

config REGULATOR_DA9055
	tristate "Dialog Semiconductor DA9055 regulators"
	depends on MFD_DA9055
	help
	  Say y here to support the BUCKs and LDOs regulators found on
	  Dialog Semiconductor DA9055 PMIC.

	  This driver can also be built as a module. If so, the module
	  will be called da9055-regulator.

config REGULATOR_DA9062
	tristate "Dialog Semiconductor DA9061/62 regulators"
	depends on MFD_DA9062
	help
	  Say y here to support the BUCKs and LDOs regulators found on
	  DA9061 and DA9062 PMICs.

	  This driver can also be built as a module. If so, the module
	  will be called da9062-regulator.

config REGULATOR_DA9063
	tristate "Dialog Semiconductor DA9063 regulators"
	depends on MFD_DA9063 && OF
	help
	  Say y here to support the BUCKs and LDOs regulators found on
	  DA9063 PMICs.

	  This driver can also be built as a module. If so, the module
	  will be called da9063-regulator.

config REGULATOR_DA9121
	tristate "Dialog Semiconductor DA9121/DA9122/DA9220/DA9217/DA9130/DA9131/DA9132 regulator"
	depends on I2C && OF
	select REGMAP_I2C
	help
	  Say y here to support for the Dialog Semiconductor DA9121.  The
	  DA9121 is a single channel dual-phase buck converter controlled
	  through an I2C interface.

	  DA9121 Single-channel dual-phase 10A buck converter
	  DA9130 Single-channel dual-phase 10A buck converter (Automotive)
	  DA9217 Single-channel dual-phase  6A buck converter
	  DA9122 Dual-channel single-phase  5A buck converter
	  DA9131 Dual-channel single-phase  5A buck converter (Automotive)
	  DA9220 Dual-channel single-phase  3A buck converter
	  DA9132 Dual-channel single-phase  3A buck converter (Automotive)

	  This driver can also be built as a module. If so, the module
	  will be called da9121-regulator.

config REGULATOR_DA9210
	tristate "Dialog Semiconductor DA9210 regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  Say y here to support for the Dialog Semiconductor DA9210.
	  The DA9210 is a multi-phase synchronous step down
	  converter 12A DC-DC Buck controlled through an I2C
	  interface.

config REGULATOR_DA9211
	tristate "Dialog Semiconductor DA9211/DA9212/DA9213/DA9223/DA9214/DA9224/DA9215/DA9225 regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  Say y here to support for the Dialog Semiconductor DA9211/DA9212
	  /DA9213/DA9214/DA9215.
	  The DA9211/DA9212/DA9213/DA9214/DA9215 is a multi-phase synchronous
	  step down converter 12A or 16A DC-DC Buck controlled through an I2C
	  interface.

config REGULATOR_DBX500_PRCMU
	bool

config REGULATOR_DB8500_PRCMU
	bool "ST-Ericsson DB8500 Voltage Domain Regulators"
	depends on MFD_DB8500_PRCMU
	select REGULATOR_DBX500_PRCMU
	help
	  This driver supports the voltage domain regulators controlled by the
	  DB8500 PRCMU

config REGULATOR_FAN53555
	tristate "Fairchild FAN53555 Regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver supports Fairchild FAN53555 Digitally Programmable
	  TinyBuck Regulator. The FAN53555 is a step-down switching voltage
	  regulator that delivers a digitally programmable output from an
	  input voltage supply of 2.5V to 5.5V. The output voltage is
	  programmed through an I2C interface.

config REGULATOR_FAN53880
	tristate "Fairchild FAN53880 Regulator"
	depends on I2C && OF
	select REGMAP_I2C
	help
	  This driver supports Fairchild (ON Semiconductor) FAN53880
	  regulator. The regulator is a programmable power management IC
	  (PMIC), it is controlled by I2C and provides one BUCK, one BOOST
	  and four LDO outputs.

config REGULATOR_GPIO
	tristate "GPIO regulator support"
	depends on GPIOLIB || COMPILE_TEST
	help
	  This driver provides support for regulators that can be
	  controlled via gpios.
	  It is capable of supporting current and voltage regulators
	  and the platform has to provide a mapping of GPIO-states
	  to target volts/amps.

config REGULATOR_HI6421
	tristate "HiSilicon Hi6421 PMIC voltage regulator support"
	depends on MFD_HI6421_PMIC && OF
	help
	  This driver provides support for the voltage regulators on the
	  HiSilicon Hi6421 PMU / Codec IC.
	  Hi6421 is a multi-function device which, on regulator part, provides
	  21 general purpose LDOs, 3 dedicated LDOs, and 5 BUCKs. All
	  of them come with support to either ECO (idle) or sleep mode.

config REGULATOR_HI6421V530
	tristate "HiSilicon Hi6421v530 PMIC voltage regulator support"
	depends on MFD_HI6421_PMIC && OF
	help
	  This driver provides support for the voltage regulators on
	  HiSilicon Hi6421v530 PMU / Codec IC.
	  Hi6421v530 is a multi-function device which, on regulator part,
	  provides 5 general purpose LDOs, and all of them come with support
	  to either ECO (idle) or sleep mode.

config REGULATOR_HI655X
	tristate "Hisilicon HI655X PMIC regulators support"
	depends on ARCH_HISI || COMPILE_TEST
	depends on MFD_HI655X_PMIC && OF
	help
	  This driver provides support for the voltage regulators of the
	  Hisilicon Hi655x PMIC device.

config REGULATOR_HI6421V600
	tristate "HiSilicon Hi6421v600 PMIC voltage regulator support"
	depends on MFD_HI6421_SPMI && OF
	select REGMAP
	help
	  This driver provides support for the voltage regulators on
	  HiSilicon Hi6421v600 PMU / Codec IC.
	  This is used on Kirin 3670 boards, like HiKey 970.

config REGULATOR_ISL9305
	tristate "Intersil ISL9305 regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver supports ISL9305 voltage regulator chip.

config REGULATOR_ISL6271A
	tristate "Intersil ISL6271A Power regulator"
	depends on I2C
	help
	  This driver supports ISL6271A voltage regulator chip.

config REGULATOR_FP9931
	tristate "FitiPower FP9931/JD9930 EPD regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver supports the FP9931/JD9930 voltage regulator chip
	  which is used to provide power to Electronic Paper Displays
	  so it is found in E-Book readers.
	  If HWMON is enabled, it also provides temperature measurement.

config REGULATOR_LM363X
	tristate "TI LM363X voltage regulators"
	depends on MFD_TI_LMU
	help
	  This driver supports LM3631, LM3632 and LM36274 voltage regulators for
	  the LCD bias.
	  One boost output voltage is configurable and always on.
	  Other LDOs are used for the display module.

config REGULATOR_LOCHNAGAR
	tristate "Cirrus Logic Lochnagar regulator driver"
	depends on MFD_LOCHNAGAR
	help
	  This enables regulator support on the Cirrus Logic Lochnagar audio
	  development board.

config REGULATOR_LP3971
	tristate "National Semiconductors LP3971 PMIC regulator driver"
	depends on I2C
	help
	 Say Y here to support the voltage regulators and convertors
	 on National Semiconductors LP3971 PMIC

config REGULATOR_LP3972
	tristate "National Semiconductors LP3972 PMIC regulator driver"
	depends on I2C
	help
	 Say Y here to support the voltage regulators and convertors
	 on National Semiconductors LP3972 PMIC

config REGULATOR_LP872X
	tristate "TI/National Semiconductor LP8720/LP8725 voltage regulators"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver supports LP8720/LP8725 PMIC

config REGULATOR_LP873X
	tristate "TI LP873X Power regulators"
	depends on MFD_TI_LP873X && OF
	help
	  This driver supports LP873X voltage regulator chips. LP873X
	  provides two step-down converters and two general-purpose LDO
	  voltage regulators. It supports software based voltage control
	  for different voltage domains

config REGULATOR_LP8755
	tristate "TI LP8755 High Performance PMU driver"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver supports LP8755 High Performance PMU driver. This
	  chip contains six step-down DC/DC converters which can support
	  9 mode multiphase configuration.

config REGULATOR_LP87565
	tristate "TI LP87565 Power regulators"
	depends on MFD_TI_LP87565 && OF
	help
	  This driver supports LP87565 voltage regulator chips. 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
	select REGMAP_I2C
	help
	  This enables support for the LTC3589, LTC3589-1, and LTC3589-2
	  8-output regulators controlled via I2C.

config REGULATOR_LTC3676
	tristate "LTC3676 8-output voltage regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  This enables support for the LTC3676
	  8-output regulators controlled via I2C.

config REGULATOR_MAX14577
	tristate "Maxim 14577/77836 regulator"
	depends on MFD_MAX14577
	help
	  This driver controls a Maxim MAX14577/77836 regulator via I2C bus.
	  The MAX14577 regulators include safeout LDO and charger current
	  regulator. The MAX77836 has two additional LDOs.

config REGULATOR_MAX1586
	tristate "Maxim 1586/1587 voltage regulator"
	depends on I2C
	help
	  This driver controls a Maxim 1586 or 1587 voltage output
	  regulator via I2C bus. The provided regulator is suitable
	  for PXA27x chips to control VCC_CORE and VCC_USIM voltages.

config REGULATOR_MAX5970
	tristate "Maxim 5970/5978 power switch and monitor"
	depends on I2C
	depends on OF
	depends on MFD_MAX5970
	help
	  This driver controls a Maxim 5970/5978 switch via I2C bus.
	  The MAX5970/5978 is a smart switch with no output regulation, but
	  fault protection and voltage and current monitoring capabilities.

config REGULATOR_MAX77503
	tristate "Analog Devices MAX77503 Regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver controls a Analog Devices MAX77503 14V input, 1.5A
	  high-efficiency buck converter via I2C bus.
	  Say M here if you want to include support for the regulator as a
	  module.

config REGULATOR_MAX77541
	tristate "Analog Devices MAX77541/77540 Regulator"
	depends on MFD_MAX77541
	help
	  This driver controls a Analog Devices MAX77541/77540 regulators
	  via I2C bus. Both MAX77540 and MAX77541 are dual-phase
	  high-efficiency buck converter. Say Y here to
	  enable the regulator driver.
	  Say M here if you want to include support for the regulator as a
	  module.

config REGULATOR_MAX77620
	tristate "Maxim 77620/MAX20024 voltage regulator"
	depends on MFD_MAX77620 || COMPILE_TEST
	help
	  This driver controls Maxim MAX77620 voltage output regulator
	  via I2C bus. The provided regulator is suitable for Tegra
	  chip to control Step-Down DC-DC and LDOs. Say Y here to
	  enable the regulator driver.

config REGULATOR_MAX77650
	tristate "Maxim MAX77650/77651 regulator support"
	depends on MFD_MAX77650 || COMPILE_TEST
	help
	  Regulator driver for MAX77650/77651 PMIC from Maxim
	  Semiconductor. This device has a SIMO with three independent
	  power rails and an LDO.

config REGULATOR_MAX77675
	tristate "Maxim MAX77675 regulator driver"
	depends on I2C && OF
	select REGMAP_I2C
	help
	  This driver controls the Maxim MAX77675 power regulator via I2C.
	  It supports four programmable buck-boost outputs.
	  Say Y here to enable the regulator driver

config REGULATOR_MAX77857
	tristate "ADI MAX77857/MAX77831 regulator support"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver controls a ADI MAX77857 and MAX77831 regulators.
	  via I2C bus. MAX77857 and MAX77831 are high efficiency buck-boost
	  converters with input voltage range (2.5V to 16V). Say Y here to
	  enable the regulator driver

config REGULATOR_MAX8649
	tristate "Maxim 8649 voltage regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver controls a Maxim 8649 voltage output regulator via
	  I2C bus.

config REGULATOR_MAX8660
	tristate "Maxim 8660/8661 voltage regulator"
	depends on I2C
	help
	  This driver controls a Maxim 8660/8661 voltage output
	  regulator via I2C bus.

config REGULATOR_MAX8893
	tristate "Maxim 8893 voltage regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver controls a Maxim 8893 voltage output
	  regulator via I2C bus.

config REGULATOR_MAX8907
	tristate "Maxim 8907 voltage regulator"
	depends on MFD_MAX8907 || COMPILE_TEST
	help
	  This driver controls a Maxim 8907 voltage output regulator
	  via I2C bus. The provided regulator is suitable for Tegra
	  chip to control Step-Down DC-DC and LDOs.

config REGULATOR_MAX8925
	tristate "Maxim MAX8925 Power Management IC"
	depends on MFD_MAX8925
	help
	  Say y here to support the voltage regulator of Maxim MAX8925 PMIC.

config REGULATOR_MAX8952
	tristate "Maxim MAX8952 Power Management IC"
	depends on I2C
	help
	  This driver controls a Maxim 8952 voltage output regulator
	  via I2C bus. Maxim 8952 has one voltage output and supports 4 DVS
	  modes ranging from 0.77V to 1.40V by 0.01V steps.

config REGULATOR_MAX8973
	tristate "Maxim MAX8973A voltage regulator"
	depends on I2C
	depends on THERMAL && THERMAL_OF
	select REGMAP_I2C
	help
	  The MAXIM MAX8973A high-efficiency. three phase, DC-DC step-down
	  switching regulator delivers up to 9A of output current. Each
	  phase operates at a 2MHz fixed frequency with a 120 deg shift
	  from the adjacent phase, allowing the use of small magnetic component.

config REGULATOR_MAX8997
	tristate "Maxim 8997/8966 regulator"
	depends on MFD_MAX8997
	help
	  This driver controls a Maxim 8997/8966 regulator
	  via I2C bus. The provided regulator is suitable for S5PC110,
	  S5PV210, and Exynos-4 chips to control VCC_CORE and
	  VCC_USIM voltages.

config REGULATOR_MAX8998
	tristate "Maxim 8998 voltage regulator"
	depends on MFD_MAX8998
	help
	  This driver controls a Maxim 8998 voltage output regulator
	  via I2C bus. The provided regulator is suitable for S3C6410
	  and S5PC1XX chips to control VCC_CORE and VCC_USIM voltages.

config REGULATOR_MAX20086
	tristate "Maxim MAX20086-MAX20089 Camera Power Protectors"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver controls a Maxim MAX20086-MAX20089 camera power
	  protector via I2C bus. The regulator has 2 or 4 outputs depending on
	  the device model. This driver is only capable to turn on/off them.

config REGULATOR_MAX20411
	tristate "Maxim MAX20411 High-Efficiency Single Step-Down Converter"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver controls the Maxim MAX20411 family of high-efficiency,
	  syncrhonous step-down converters.

config REGULATOR_MAX77686
	tristate "Maxim 77686 regulator"
	depends on MFD_MAX77686 || COMPILE_TEST
	help
	  This driver controls a Maxim 77686 regulator
	  via I2C bus. The provided regulator is suitable for
	  Exynos-4 chips to control VARM and VINT voltages.

config REGULATOR_MAX77693
	tristate "Maxim 77693/77843 regulator"
	depends on MFD_MAX77693 || MFD_MAX77843 || COMPILE_TEST
	help
	  This driver controls a Maxim 77693/77843 regulators via I2C bus.
	  The regulators include two LDOs, 'SAFEOUT1', 'SAFEOUT2'
	  and one current regulator 'CHARGER'. This is suitable for
	  Exynos-4x12 (MAX77693) or Exynos5433 (MAX77843) SoC chips.

config REGULATOR_MAX77802
	tristate "Maxim 77802 regulator"
	depends on MFD_MAX77686 || COMPILE_TEST
	help
	  This driver controls a Maxim 77802 regulator
	  via I2C bus. The provided regulator is suitable for
	  Exynos5420/Exynos5800 SoCs to control various voltages.
	  It includes support for control of voltage and ramp speed.

config REGULATOR_MAX77826
	tristate "Maxim 77826 regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver controls a Maxim 77826 regulator via I2C bus.
	  The regulator include 15 LDOs, BUCK and BUCK BOOST regulator.
	  It includes support for control of output voltage. This
	  regulator is found on the Samsung Galaxy S5 (klte) smartphone.

config REGULATOR_MAX77838
	tristate "Maxim 77838 regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver controls a Maxim 77838 regulator via I2C bus.
	  The regulator include 4 LDOs and a BUCK regulator. It's
	  present on the Samsung Galaxy S7 lineup of smartphones.

config REGULATOR_MC13XXX_CORE
	tristate

config REGULATOR_MC13783
	tristate "Freescale MC13783 regulator driver"
	depends on MFD_MC13XXX
	select REGULATOR_MC13XXX_CORE
	help
	  Say y here to support the regulators found on the Freescale MC13783
	  PMIC.

config REGULATOR_MC13892
	tristate "Freescale MC13892 regulator driver"
	depends on MFD_MC13XXX
	select REGULATOR_MC13XXX_CORE
	help
	  Say y here to support the regulators found on the Freescale MC13892
	  PMIC.

config REGULATOR_MCP16502
	tristate "Microchip MCP16502 PMIC"
	depends on I2C && OF
	select REGMAP_I2C
	help
	  Say y here to support the MCP16502 PMIC. This driver supports
	  basic operations (get/set voltage, get/set operating mode)
	  through the regulator interface. In addition it enables
	  suspend-to-ram/standby transition.

config REGULATOR_MP5416
	tristate "Monolithic MP5416 PMIC"
	depends on I2C && OF
	select REGMAP_I2C
	help
	  Say y here to support the MP5416 PMIC. This will enable supports
	  the software controllable 4 buck and 4 LDO regulators.
	  Say M here if you want to include support for the regulator as a
	  module.

config REGULATOR_MP8859
	tristate "MPS MP8859 regulator driver"
	depends on I2C
	select REGMAP_I2C
	help
	  Say y here to support the MP8859 voltage regulator. This driver
	  supports basic operations (get/set voltage) through the regulator
	  interface.
	  Say M here if you want to include support for the regulator as a
	  module. The module will be named "mp8859".

config REGULATOR_MP886X
	tristate "MPS MP8869 regulator driver"
	depends on I2C && OF
	select REGMAP_I2C
	help
	  This driver supports the MP8869 voltage regulator.

config REGULATOR_MPQ7920
	tristate "Monolithic MPQ7920 PMIC"
	depends on I2C && OF
	select REGMAP_I2C
	help
	  Say y here to support the MPQ7920 PMIC. This will enable supports
	  the software controllable 4 buck and 5 LDO regulators.
	  This driver supports the control of different power rails of device
	  through regulator interface.

config REGULATOR_MT6311
	tristate "MediaTek MT6311 PMIC"
	depends on I2C
	select REGMAP_I2C
	help
	  Say y here to select this option to enable the power regulator of
	  MediaTek MT6311 PMIC.
	  This driver supports the control of different power rails of device
	  through regulator interface.

config REGULATOR_MT6315
	tristate "MediaTek MT6315 PMIC"
	depends on SPMI
	select REGMAP_SPMI
	help
	  Say y here to select this option to enable the power regulator of
	  MediaTek MT6315 PMIC.
	  This driver supports the control of different power rails of device
	  through regulator interface.

config REGULATOR_MT6316
	tristate "MT6316 SPMI PMIC regulator driver"
	depends on SPMI
	select REGMAP_SPMI
	help
	  Say Y here to enable support for 2+2, 3+1 and 4 phase regulators
	  found in the MediaTek MT6316 BP, CP, DP, HP, VP and TP SPMI PMICs.
	  This driver supports the control of different power rails of device
	  through regulator interface.

config REGULATOR_MT6323
	tristate "MediaTek MT6323 PMIC"
	depends on MFD_MT6397
	help
	  Say y here to select this option to enable the power regulator of
	  MediaTek MT6323 PMIC.
	  This driver supports the control of different power rails of device
	  through regulator interface.

config REGULATOR_MT6331
	tristate "MediaTek MT6331 PMIC"
	depends on MFD_MT6397
	help
	  Say y here to select this option to enable the power regulator of
	  MediaTek MT6331 PMIC.
	  This driver supports the control of different power rails of device
	  through regulator interface

config REGULATOR_MT6332
	tristate "MediaTek MT6332 PMIC"
	depends on MFD_MT6397
	help
	  Say y here to select this option to enable the power regulator of
	  MediaTek MT6332 PMIC.
	  This driver supports the control of different power rails of device
	  through regulator interface

config REGULATOR_MT6357
	tristate "MediaTek MT6357 PMIC"
	depends on MFD_MT6397
	help
	  Say y here to select this option to enable the power regulator of
	  MediaTek MT6357 PMIC.
	  This driver supports the control of different power rails of device
	  through regulator interface.

config REGULATOR_MT6358
	tristate "MediaTek MT6358 PMIC"
	depends on MFD_MT6397
	help
	  Say y here to select this option to enable the power regulator of
	  MediaTek MT6358 PMIC.
	  This driver supports the control of different power rails of device
	  through regulator interface.

config REGULATOR_MT6359
	tristate "MediaTek MT6359 PMIC"
	depends on MFD_MT6397
	help
	  Say y here to select this option to enable the power regulator of
	  MediaTek MT6359 PMIC.
	  This driver supports the control of different power rails of device
	  through regulator interface.

config REGULATOR_MT6360
	tristate "MT6360 SubPMIC Regulator"
	depends on MFD_MT6360
	help
	  Say Y here to enable MT6360 regulator support.
	  This is support MT6360 PMIC/LDO part include
	  2-channel buck with Thermal Shutdown and Overload Protection
	  6-channel High PSRR and Low Dropout LDO.

config REGULATOR_MT6363
	tristate "MT6363 SPMI PMIC regulator driver"
	depends on SPMI
	select REGMAP_SPMI
	select IRQ_DOMAIN
	help
	  Say Y here to enable support for regulators found in the MediaTek
	  MT6363 SPMI PMIC.
	  This driver supports the control of different power rails of device
	  through regulator interface.

config REGULATOR_MT6370
	tristate "MT6370 SubPMIC Regulator"
	depends on MFD_MT6370
	help
	  Say Y here to enable MT6370 regulator support.
	  This driver supports the control for DisplayBias voltages and one
	  general purpose LDO which is commonly used to drive the vibrator.

config REGULATOR_MT6380
	tristate "MediaTek MT6380 PMIC"
	depends on MTK_PMIC_WRAP
	help
	  Say y here to select this option to enable the power regulator of
	  MediaTek MT6380 PMIC.
	  This driver supports the control of different power rails of device
	  through regulator interface.

config REGULATOR_MT6397
	tristate "MediaTek MT6397 PMIC"
	depends on MFD_MT6397
	help
	  Say y here to select this option to enable the power regulator of
	  MediaTek MT6397 PMIC.
	  This driver supports the control of different power rails of device
	  through regulator interface.

config REGULATOR_MTK_DVFSRC
	tristate "MediaTek DVFSRC regulator driver"
	depends on MTK_DVFSRC
	help
	  Say y here to control regulator by DVFSRC (dynamic voltage
	  and frequency scaling resource collector).
	  This driver supports to control regulators via the DVFSRC
	  of Mediatek. It allows for voting on regulator state
	  between multiple users.

config REGULATOR_PALMAS
	tristate "TI Palmas PMIC Regulators"
	depends on MFD_PALMAS
	help
	  If you wish to control the regulators on the Palmas series of
	  chips say Y here. This will enable support for all the software
	  controllable SMPS/LDO regulators.

	  The regulators available on Palmas series chips vary depending
	  on the muxing. This is handled automatically in the driver by
	  reading the mux info from OTP.

config REGULATOR_PBIAS
	tristate "PBIAS OMAP regulator driver"
	depends on (ARCH_OMAP || COMPILE_TEST) && MFD_SYSCON
	help
	 Say y here to support pbias regulator for mmc1:SD card i/o
	 on OMAP SoCs.
	 This driver provides support for OMAP pbias modelled
	 regulators.

config REGULATOR_PCA9450
	tristate "NXP PCA9450A/PCA9450B/PCA9450C regulator driver"
	depends on I2C
	select REGMAP_I2C
	help
	  Say y here to support the NXP PCA9450A/PCA9450B/PCA9450C PMIC
	  regulator driver.

config REGULATOR_PF9453
	tristate "NXP PF9453 regulator driver"
	depends on I2C
	select REGMAP_I2C
	help
	  Say y here to support the NXP PF9453 PMIC regulator driver.

config REGULATOR_PF0900
	tristate "NXP PF0900/PF0901/PF09XX regulator driver"
	depends on I2C
	select REGMAP_I2C
	help
	Say y here to support the NXP PF0900/PF0901/PF09XX PMIC
	regulator driver.

config REGULATOR_PF530X
	tristate "NXP PF5300/PF5301/PF5302 regulator driver"
	depends on I2C && OF
	select REGMAP_I2C
	help
	  Say y here to support the regulators found on the NXP
	  PF5300/PF5301/PF5302 PMIC.

	  Say M here if you want to support for the regulators found
	  on the NXP PF5300/PF5301/PF5302 PMIC. The module will be named
	  "pf530x-regulator".

config REGULATOR_PF8X00
	tristate "NXP PF8100/PF8121A/PF8200 regulator driver"
	depends on I2C && OF
	select REGMAP_I2C
	help
	  Say y here to support the regulators found on the NXP
	  PF8100/PF8121A/PF8200 PMIC.

	  Say M here if you want to support for the regulators found
	  on the NXP PF8100/PF8121A/PF8200 PMIC. The module will be named
	  "pf8x00-regulator".

config REGULATOR_PFUZE100
	tristate "Freescale PFUZE100/200/3000/3001 regulator driver"
	depends on I2C && OF
	select REGMAP_I2C
	help
	  Say y here to support the regulators found on the Freescale
	  PFUZE100/200/3000/3001 PMIC.

config REGULATOR_PV88060
	tristate "Powerventure Semiconductor PV88060 regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  Say y here to support the voltage regulators and convertors
	  PV88060

config REGULATOR_PV88080
	tristate "Powerventure Semiconductor PV88080 regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  Say y here to support the buck convertors on PV88080

config REGULATOR_PV88090
	tristate "Powerventure Semiconductor PV88090 regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  Say y here to support the voltage regulators and convertors
	  on PV88090

config REGULATOR_PF1550
	tristate "NXP PF1550 regulator"
	depends on MFD_PF1550
	help
	  Say y here to select this option to enable the regulators on
	  the PF1550 PMICs.
	  This driver controls the PF1550 regulators via I2C bus.
	  The regulators include three bucks and three ldos.

config REGULATOR_PWM
	tristate "PWM voltage regulator"
	depends on PWM
	help
	  This driver supports PWM controlled voltage regulators. PWM
	  duty cycle can increase or decrease the voltage.

config REGULATOR_QCOM_PM8008
	tristate "Qualcomm PM8008 PMIC regulators"
	depends on MFD_QCOM_PM8008
	help
	  Select this option to enable support for the voltage regulators in
	  Qualcomm PM8008 PMICs.

config REGULATOR_QCOM_REFGEN
	tristate "Qualcomm REFGEN regulator driver"
	depends on ARCH_QCOM || COMPILE_TEST
	depends on HAS_IOMEM
	depends on REGMAP
	help
	  This driver supports the MMIO-mapped reference voltage regulator,
	  used internally by some PHYs on many Qualcomm SoCs.

	  Say M here if you want to include support for this regulator as
	  a module. The module will be named "qcom-refgen-regulator".

config REGULATOR_QCOM_RPM
	tristate "Qualcomm RPM regulator driver"
	depends on MFD_QCOM_RPM
	help
	  If you say yes to this option, support will be included for the
	  regulators exposed by the Resource Power Manager found in Qualcomm
	  8660, 8960 and 8064 based devices.

	  Say M here if you want to include support for the regulators on the
	  Qualcomm RPM as a module. The module will be named
	  "qcom_rpm-regulator".

config REGULATOR_QCOM_RPMH
	tristate "Qualcomm RPMh regulator driver"
	depends on QCOM_RPMH || (QCOM_RPMH=n && COMPILE_TEST)
	depends on QCOM_COMMAND_DB || (QCOM_COMMAND_DB=n && COMPILE_TEST)
	help
	  This driver supports control of PMIC regulators via the RPMh hardware
	  block found on Qualcomm Technologies Inc. SoCs.  RPMh regulator
	  control allows for voting on regulator state between multiple
	  processors within the SoC.

config REGULATOR_QCOM_SMD_RPM
	tristate "Qualcomm SMD based RPM regulator driver"
	depends on QCOM_SMD_RPM
	help
	  If you say yes to this option, support will be included for the
	  regulators exposed by the Resource Power Manager found in Qualcomm
	  8974 based devices.

	  Say M here if you want to include support for the regulators on the
	  Qualcomm RPM as a module. The module will be named
	  "qcom_smd-regulator".

config REGULATOR_QCOM_SPMI
	tristate "Qualcomm SPMI regulator driver"
	depends on SPMI || COMPILE_TEST
	help
	  If you say yes to this option, support will be included for the
	  regulators found in Qualcomm SPMI PMICs.

	  Say M here if you want to include support for the regulators on the
	  Qualcomm SPMI PMICs as a module. The module will be named
	  "qcom_spmi-regulator".

config REGULATOR_QCOM_USB_VBUS
	tristate "Qualcomm USB Vbus regulator driver"
	depends on SPMI || COMPILE_TEST
	help
	  If you say yes to this option, support will be included for the
	  regulator used to enable the VBUS output.

	  Say M here if you want to include support for enabling the VBUS output
	  as a module. The module will be named "qcom_usb_vbus_regulator".

config REGULATOR_RAA215300
	tristate "Renesas RAA215300 driver"
	select REGMAP_I2C
	depends on COMMON_CLK
	depends on I2C
	help
	  If you say yes to this option, support will be included for the
	  Renesas RAA215300 PMIC.

	  Say M here if you want to include support for Renesas RAA215300 PMIC
	  as a module. The module will be named "raa215300".

config REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY
	tristate "Raspberry Pi 7-inch touchscreen panel ATTINY regulator"
	depends on ARM || ARM64 || COMPILE_TEST
	depends on BACKLIGHT_CLASS_DEVICE
	depends on GPIOLIB
	depends on I2C
	select REGMAP_I2C
	help
	  This driver supports ATTINY regulator on the Raspberry Pi 7-inch
	  touchscreen unit. The regulator is used to enable power to the
	  TC358762, display and to control backlight.

config REGULATOR_RASPBERRYPI_TOUCHSCREEN_V2
	tristate "Raspberry Pi 7-inch touchscreen panel V2 regulator"
	depends on ARM || ARM64 || COMPILE_TEST
	depends on GPIOLIB
	depends on I2C && OF
	select GPIO_REGMAP
	select REGMAP_I2C
	help
	  This driver supports regulator on the V2 Raspberry Pi touchscreen
	  unit. The regulator is used to enable power to the display and to
	  control backlight PWM.

config REGULATOR_RC5T583
	tristate "RICOH RC5T583 Power regulators"
	depends on MFD_RC5T583
	help
	  Select this option to enable the power regulator of RICOH
	  PMIC RC5T583.
	  This driver supports the control of different power rails of device
	  through regulator interface. The device supports multiple DCDC/LDO
	  outputs which can be controlled by i2c communication.

config REGULATOR_RK808
	tristate "Rockchip RK805/RK808/RK809/RK817/RK818 Power regulators"
	depends on MFD_RK8XX
	help
	  Select this option to enable the power regulator of ROCKCHIP
	  PMIC RK805,RK809&RK817,RK808 and RK818.
	  This driver supports the control of different power rails of device
	  through regulator interface. The device supports multiple DCDC/LDO
	  outputs which can be controlled by i2c communication.

config REGULATOR_RN5T618
	tristate "Ricoh RN5T567/618 voltage regulators"
	depends on MFD_RN5T618
	help
	  Say y here to support the regulators found on Ricoh RN5T567,
	  RN5T618 or RC5T619 PMIC.

config REGULATOR_ROHM
	tristate

config REGULATOR_RT4801
	tristate "Richtek RT4801 Regulators"
	depends on I2C
	select REGMAP_I2C
	help
	  This adds support for voltage regulators in Richtek RT4801 Display Bias IC.
	  The device supports two regulators (DSVP/DSVN).

config REGULATOR_RT4803
	tristate "Richtek RT4803 boost regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  This adds support for RT4803 boost converter that integrates the
	  bypass switch. If the input voltage is low than the required voltage,
	  RT4803 will enter boost mode. Otherwise, enable internal bypass
	  switch to enter bypass mode.

config REGULATOR_RT4831
	tristate "Richtek RT4831 DSV Regulators"
	depends on MFD_RT4831
	help
	  This adds support for voltage regulators in Richtek RT4831.
	  There are three regulators (VLCM/DSVP/DSVN).
	  VLCM is a virtual voltage input for DSVP/DSVN inside IC.
	  And DSVP/DSVN is the real Vout range from 4V to 6.5V.
	  It's common used to provide the power for the display panel.

config REGULATOR_RT5033
	tristate "Richtek RT5033 Regulators"
	depends on MFD_RT5033
	help
	  This adds support for voltage and current regulators in Richtek
	  RT5033 PMIC. The device supports multiple regulators like
	  current source, LDO and Buck.

config REGULATOR_RT5120
	tristate "Richtek RT5120 PMIC Regulators"
	depends on MFD_RT5120
	help
	  This adds support for voltage regulator in Richtek RT5120 PMIC.
	  It integrates 4 channels buck controller, 1 channel LDO, 1 EXTEN
	  to control external power source. Only BUCK1 is adjustable from
	  600mV to 1395mV, per step 6.250mV. The others are all fixed voltage
	  by external hardware circuit.

config REGULATOR_RT5133
	tristate "Richtek RT5133 PMIC Regulators"
	depends on I2C && GPIOLIB && OF
	select REGMAP
	select CRC8
	help
	  This driver adds support for RT5133 PMIC regulators.
	  RT5133 is an integrated chip. It includes 8 LDOs and 3 GPOs that
	  can be used to drive output high/low purpose. The dependency of the
	  GPO block is internally LDO1 Voltage.

config REGULATOR_RT5190A
	tristate "Richtek RT5190A PMIC"
	depends on I2C
	select REGMAP_I2C
	help
	  This adds support for voltage regulator in Richtek RT5190A PMIC.
	  It integratas 1 channel buck controller, 3 channels high efficiency
	  buck converters, 1 LDO, mute AC OFF depop function, with the general
	  I2C control interface.

config REGULATOR_RT5739
	tristate "Richtek RT5739 Regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  This adds support for voltage regulator in Richtek RT5739.
	  It's a step-down switching voltage regulator. Using a proprietary
	  architecture with synchronous rectification, it is capable of
	  delivering 3.5A continuously at over 80% efficiency.

	  This driver can also be built as a module. If so, the module
	  will be called rt5739.

config REGULATOR_RT5759
	tristate "Richtek RT5759 Regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  This adds support for voltage regulator in Richtek RT5759.
	  The RT5759 is a high-performance, synchronous step-down DC-DC
	  converter that can deliver up to 9A output current from 3V to 6.5V
	  input supply.

config REGULATOR_RT6160
	tristate "Richtek RT6160 BuckBoost voltage regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  This adds support for voltage regulator in Richtek RT6160.
	  This device automatically change voltage output mode from
	  Buck or Boost. The mode transition depend on the input source voltage.
	  The wide output range is from 2025mV to 5200mV and can be used on most
	  common application scenario.

config REGULATOR_RT6190
	tristate "Richtek RT6190 4-Switch BuckBoost controller"
	depends on I2C
	select REGMAP_I2C
	help
	  The RT6190 is a 4-Switch BuckBoost controller designed for converting
	  input voltage to output voltage that can be equal to, higher or lower
	  than input voltage. It operates with wide input voltage range from
	  4.5V to 36V, and the output voltage can be set from 3V to 36V by
	  external FB pin.

config REGULATOR_RT6245
	tristate "Richtek RT6245 voltage regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  This adds support for Richtek RT6245 voltage regulator.
	  It can support up to 14A output current and adjustable output voltage
	  from 0.4375V to 1.3875V, per step 12.5mV.

config REGULATOR_RT8092
	tristate "Richtek RT8092 voltage regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  The RT8092 is a peak-current mode PWM step-down DC/DC converter with
	  I2C control interface. It is capable of delivering 4A continuing
	  current over a wide input range from 2.5V to 5.5V.

config REGULATOR_RTQ2134
	tristate "Richtek RTQ2134 SubPMIC Regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver adds support for RTQ2134 SubPMIC regulators.
	  The RTQ2134 is a multi-phase, programmable power management IC that
	  integrate with four high efficient, synchronous step-down converter
	  cores. It features wide output voltage range and the capability to
	  configure the corresponding power stages.

config REGULATOR_RTMV20
	tristate "Richtek RTMV20 Laser Diode Regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver adds support for the load switch current regulator on
	  the Richtek RTMV20. It can support the load current up to 6A and
	  integrate strobe/vsync/fsin signal to synchronize the IR camera.

config REGULATOR_RTQ6752
	tristate "Richtek RTQ6752 TFT LCD voltage regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver adds support for Richtek RTQ6752. RTQ6752 includes two
	  synchronous boost converters for PAVDD, and one synchronous NAVDD
	  buck-boost. This device is suitable for automotive TFT-LCD panel.

config REGULATOR_RTQ2208
	tristate "Richtek RTQ2208 SubPMIC Regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver adds support for RTQ2208 SubPMIC regulators.
	  The RTQ2208 is a multi-phase, programmable power management IC that
	  integrate with dual multi-configurable, synchronous buck converters
	  and two ldos. It features wide output voltage range from 0.4V to 2.05V
	  and the capability to configure the corresponding power stages.

config REGULATOR_S2DOS05
	tristate "Samsung S2DOS05 voltage regulator"
	depends on MFD_SEC_CORE || COMPILE_TEST
	help
	  This driver provides support for the voltage regulators of the S2DOS05.
	  The S2DOS05 is a companion power management IC for the smart phones.
	  The S2DOS05 has 4 LDOs and 1 BUCK outputs.

config REGULATOR_S2MPA01
	tristate "Samsung S2MPA01 voltage regulator"
	depends on MFD_SEC_CORE || COMPILE_TEST
	help
	 This driver controls Samsung S2MPA01 voltage output regulator
	 via I2C bus. S2MPA01 has 10 Bucks and 26 LDO outputs.

config REGULATOR_S2MPS11
	tristate "Samsung S2MPS11/13/14/15/S2MPU02/05 voltage regulator"
	depends on MFD_SEC_CORE || COMPILE_TEST
	help
	 This driver supports a Samsung S2MPS11/13/14/15/S2MPU02/05 voltage
	 output regulator via I2C bus. The chip is comprised of high efficient
	 Buck converters including Dual-Phase Buck converter, Buck-Boost
	 converter, various LDOs.

config REGULATOR_S5M8767
	tristate "Samsung S5M8767A voltage regulator"
	depends on MFD_SEC_CORE || COMPILE_TEST
	help
	 This driver supports a Samsung S5M8767A voltage output regulator
	 via I2C bus. S5M8767A have 9 Bucks and 28 LDOs output and
	 supports DVS mode with 8bits of output voltage control.

config REGULATOR_SC2730
	tristate "Spreadtrum SC2730 power regulator driver"
	depends on MFD_SC27XX_PMIC || COMPILE_TEST
	help
	  This driver provides support for the voltage regulators on the
	  SC2730 PMIC.

config REGULATOR_SC2731
	tristate "Spreadtrum SC2731 power regulator driver"
	depends on MFD_SC27XX_PMIC || COMPILE_TEST
	help
	  This driver provides support for the voltage regulators on the
	  SC2731 PMIC.

config REGULATOR_SGM3804
	tristate "SGMicro SGM3804 voltage regulator"
	depends on I2C && OF
	depends on GPIOLIB
	select REGMAP_I2C
	help
	  This driver supports SGMicro SGM3804 dual-output voltage regulator.

config REGULATOR_SKY81452
	tristate "Skyworks Solutions SKY81452 voltage regulator"
	depends on MFD_SKY81452
	help
	  This driver supports Skyworks SKY81452 voltage output regulator
	  via I2C bus. SKY81452 has one voltage linear regulator can be
	  programmed from 4.5V to 20V.

	  This driver can also be built as a module. If so, the module
	  will be called sky81452-regulator.

config REGULATOR_SLG51000
	tristate "Dialog Semiconductor SLG51000 regulators"
	depends on I2C
	select REGMAP_I2C
	help
	  Say y here to support for the Dialog Semiconductor SLG51000.
	  The SLG51000 is seven compact and customizable low dropout
	  regulators.

config REGULATOR_SPACEMIT_P1
	tristate "SpacemiT P1 regulators"
	depends on ARCH_SPACEMIT || COMPILE_TEST
	depends on I2C
	select MFD_SPACEMIT_P1
	default ARCH_SPACEMIT
	help
	  Enable support for regulators implemented by the SpacemiT P1
	  power controller.  The P1 implements 6 high-efficiency buck
	  converters and 12 programmable LDO regulators.  To compile this
	  driver as a module, choose M here.  The module will be called
	  "spacemit-pmic".

config REGULATOR_STM32_BOOSTER
	tristate "STMicroelectronics STM32 BOOSTER"
	depends on ARCH_STM32 || COMPILE_TEST
	help
	  This driver supports internal booster (3V3) embedded in some
	  STMicroelectronics STM32 chips. It can be used to supply ADC analog
	  input switches when vdda supply is below 2.7V.

	  This driver can also be built as a module. If so, the module
	  will be called stm32-booster.

config REGULATOR_STM32_VREFBUF
	tristate "STMicroelectronics STM32 VREFBUF"
	depends on ARCH_STM32 || COMPILE_TEST
	help
	  This driver supports STMicroelectronics STM32 VREFBUF (voltage
	  reference buffer) which can be used as voltage reference for
	  internal ADCs, DACs and also for external components through
	  dedicated Vref+ pin.

	  This driver can also be built as a module. If so, the module
	  will be called stm32-vrefbuf.

config REGULATOR_STM32_PWR
	bool "STMicroelectronics STM32 PWR"
	depends on ARCH_STM32 || COMPILE_TEST
	help
	  This driver supports internal regulators (1V1, 1V8, 3V3) in the
	  STMicroelectronics STM32 chips.

config REGULATOR_STPMIC1
	tristate "STMicroelectronics STPMIC1 PMIC Regulators"
	depends on MFD_STPMIC1
	help
	  This driver supports STMicroelectronics STPMIC1 PMIC voltage
	  regulators and switches. The STPMIC1 regulators supply power to
	  an application processor as well as to external system
	  peripherals such as DDR, Flash memories and system devices.

	  To compile this driver as a module, choose M here: the
	  module will be called stpmic1_regulator.

config REGULATOR_TI_ABB
	tristate "TI Adaptive Body Bias on-chip LDO"
	depends on ARCH_OMAP || COMPILE_TEST
	help
	  Select this option to support Texas Instruments' on-chip Adaptive Body
	  Bias (ABB) LDO regulators. It is recommended that this option be
	  enabled on required TI SoC. Certain Operating Performance Points
	  on TI SoCs may be unstable without enabling this as it provides
	  device specific optimized bias to allow/optimize functionality.

config REGULATOR_STW481X_VMMC
	bool "ST Microelectronics STW481X VMMC regulator"
	depends on MFD_STW481X || COMPILE_TEST
	default y if MFD_STW481X
	help
	  This driver supports the internal VMMC regulator in the STw481x
	  PMIC chips.

config REGULATOR_SUN20I
	tristate "Allwinner D1 internal LDOs"
	depends on ARCH_SUNXI || COMPILE_TEST
	select MFD_SYSCON
	default ARCH_SUNXI
	help
	  This driver supports the internal LDOs in the Allwinner D1 SoC.

config REGULATOR_SY7636A
	tristate "Silergy SY7636A voltage regulator"
	depends on MFD_SY7636A
	help
	  This driver supports Silergy SY3686A voltage regulator.

config REGULATOR_SY8106A
	tristate "Silergy SY8106A regulator"
	depends on I2C && OF
	select REGMAP_I2C
	help
	  This driver supports SY8106A single output regulator.

config REGULATOR_SY8824X
	tristate "Silergy SY8824C/SY8824E regulator"
	depends on I2C && OF
	select REGMAP_I2C
	help
	  This driver supports SY8824C single output regulator.

config REGULATOR_SY8827N
	tristate "Silergy SY8827N regulator"
	depends on I2C && OF
	select REGMAP_I2C
	help
	  This driver supports SY8827N single output regulator.

config REGULATOR_TPS51632
	tristate "TI TPS51632 Power Regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver supports TPS51632 voltage regulator chip.
	  The TPS51632 is 3-2-1 Phase D-Cap+ Step Down Driverless Controller
	  with Serial VID control and DVFS.
	  The voltage output can be configure through I2C interface or PWM
	  interface.

config REGULATOR_TPS6105X
	tristate "TI TPS6105X Power regulators"
	depends on TPS6105X
	default y if TPS6105X
	help
	  This driver supports TPS61050/TPS61052 voltage regulator chips.
	  It is a single boost converter primarily for white LEDs and
	  audio amplifiers.

config REGULATOR_TPS62360
	tristate "TI TPS6236x Power Regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver supports TPS6236x voltage regulator chip. This
	  regulator is meant for processor core supply. This chip is
	  high-frequency synchronous step down dc-dc converter optimized
	  for battery-powered portable applications.

config REGULATOR_TPS6286X
	tristate "TI TPS6286x Power Regulator"
	depends on I2C && OF
	select REGMAP_I2C
	help
	  This driver supports TPS6236x voltage regulator chips. These are
	  high-frequency synchronous step-down converters with an I2C
	  interface.

config REGULATOR_TPS6287X
	tristate "TI TPS6287x Power Regulator"
	depends on I2C && OF
	select REGMAP_I2C
	help
	  This driver supports TPS6287x voltage regulator chips. These are
	  pin-to-pin high-frequency synchronous step-down dc-dc converters
	  with an I2C interface.

	  If built as a module it will be called tps6287x-regulator.

config REGULATOR_TPS65023
	tristate "TI TPS65023 Power regulators"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver supports TPS65023 voltage regulator chips. TPS65023 provides
	  three step-down converters and two general-purpose LDO voltage regulators.
	  It supports TI's software based Class-2 SmartReflex implementation.

config REGULATOR_TPS6507X
	tristate "TI TPS6507X Power regulators"
	depends on I2C
	help
	  This driver supports TPS6507X voltage regulator chips. TPS6507X provides
	  three step-down converters and two general-purpose LDO voltage regulators.
	  It supports TI's software based Class-2 SmartReflex implementation.

config REGULATOR_TPS65086
	tristate "TI TPS65086 Power regulators"
	depends on MFD_TPS65086
	help
	  This driver provides support for the voltage regulators on
	  TI TPS65086 PMICs.

config REGULATOR_TPS65090
	tristate "TI TPS65090 Power regulator"
	depends on MFD_TPS65090
	help
	  This driver provides support for the voltage regulators on the
	  TI TPS65090 PMIC.

config REGULATOR_TPS65132
	tristate "TI TPS65132 Dual Output Power regulators"
	depends on I2C && GPIOLIB
	select REGMAP_I2C
	help
	  This driver supports TPS65132 single inductor - dual output
	  power supply specifically designed for display panels.

config REGULATOR_TPS65185
	tristate "TI TPS65185 EPD regulator"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver supports the TPS65185 voltage regulator chip
	  which is used to provide power to Electronic Paper Displays
	  so it is found in E-Book readers.
	  If HWWON is enabled, it also provides temperature measurement.


config REGULATOR_TPS65217
	tristate "TI TPS65217 Power regulators"
	depends on MFD_TPS65217
	help
	  This driver supports TPS65217 voltage regulator chips. TPS65217
	  provides three step-down converters and four general-purpose LDO
	  voltage regulators. It supports software based voltage control
	  for different voltage domains

config REGULATOR_TPS65218
	tristate "TI TPS65218 Power regulators"
	depends on MFD_TPS65218 && OF
	help
	  This driver supports TPS65218 voltage regulator chips. TPS65218
	  provides six step-down converters and one general-purpose LDO
	  voltage regulators. It supports software based voltage control
	  for different voltage domains

config REGULATOR_TPS65219
	tristate "TI TPS65219 Power regulators"
	depends on MFD_TPS65219 && OF
	help
	  This driver supports TPS65219, TPS65215, and TPS65214 voltage
	  regulator chips.
	  TPS65219 series of PMICs have 3 single phase BUCKs & 4 LDOs
	  voltage regulators.
	  TPS65215 PMIC has 3 single phase BUCKs & 2 LDOs.
	  TPS65214 PMIC has 3 synchronous stepdown DC-DC converters & 2
	  LDOs. One LDO supports a maximum output current of 300 mA and the
	  other a maximum of 500 mA
	  All 3 PMICs support software based voltage control for different
	  voltage domains.

config REGULATOR_TPS6594
	tristate "TI TPS6594 Power regulators"
	depends on MFD_TPS6594 && OF
	default MFD_TPS6594
	help
	  This driver supports TPS6594 series and TPS65224 voltage regulator chips.
	  TPS6594 series of PMICs have 5 BUCKs and 4 LDOs
	  voltage regulators.
	  BUCKs 1,2,3,4 can be used in single phase or multiphase mode.
	  Part number defines which single or multiphase mode is i used.
	  It supports software based voltage control
	  for different voltage domains.
	  TPS65224 PMIC has 4 BUCKs and 3 LDOs. BUCK12 can be used in dual phase.
	  All BUCKs and LDOs volatge can be controlled through software.

config REGULATOR_TPS6524X
	tristate "TI TPS6524X Power regulators"
	depends on SPI
	help
	  This driver supports TPS6524X voltage regulator chips. TPS6524X
	  provides three step-down converters and two general-purpose LDO
	  voltage regulators.  This device is interfaced using a customized
	  serial interface currently supported on the sequencer serial
	  port controller.

config REGULATOR_TPS6586X
	tristate "TI TPS6586X Power regulators"
	depends on MFD_TPS6586X
	help
	  This driver supports TPS6586X voltage regulator chips.

config REGULATOR_TPS65910
	tristate "TI TPS65910/TPS65911 Power Regulators"
	depends on MFD_TPS65910
	help
	  This driver supports TPS65910/TPS65911 voltage regulator chips.

config REGULATOR_TPS65912
	tristate "TI TPS65912 Power regulator"
	depends on MFD_TPS65912
	help
	    This driver supports TPS65912 voltage regulator chip.

config REGULATOR_TPS68470
	tristate "TI TPS68470 PMIC Regulators Driver"
	depends on INTEL_SKL_INT3472 || COMPILE_TEST
	help
	  This driver adds support for the TPS68470 PMIC to register
	  regulators against the usual framework.

	  The module will be called "tps68470-regulator".

config REGULATOR_TWL4030
	tristate "TI TWL4030/TWL5030/TWL6030/TPS659x0 PMIC"
	depends on TWL4030_CORE
	help
	  This driver supports the voltage regulators provided by
	  this family of companion chips.

config REGULATOR_UNIPHIER
	tristate "UniPhier regulator driver"
	depends on ARCH_UNIPHIER || COMPILE_TEST
	depends on OF
	select REGMAP_MMIO
	default ARCH_UNIPHIER
	help
	  Support for regulators implemented on Socionext UniPhier SoCs.

config REGULATOR_RZG2L_VBCTRL
	tristate "Renesas RZ/G2L USB VBUS regulator driver"
	depends on RESET_RZG2L_USBPHY_CTRL || COMPILE_TEST
	depends on OF
	select REGMAP_MMIO
	default RESET_RZG2L_USBPHY_CTRL
	help
	  Support for VBUS regulators implemented on Renesas RZ/G2L SoCs.

config REGULATOR_VCTRL
	tristate "Voltage controlled regulators"
	depends on OF
	help
	  This driver provides support for voltage regulators whose output
	  voltage is controlled by the voltage of another regulator.

config REGULATOR_VEXPRESS
	tristate "Versatile Express regulators"
	depends on VEXPRESS_CONFIG
	help
	  This driver provides support for voltage regulators available
	  on the ARM Ltd's Versatile Express platform.

config REGULATOR_VQMMC_IPQ4019
	tristate "IPQ4019 VQMMC SD LDO regulator support"
	depends on ARCH_QCOM
	help
	  This driver provides support for the VQMMC LDO I/0
	  voltage regulator of the IPQ4019 SD/EMMC controller.

config REGULATOR_WM831X
	tristate "Wolfson Microelectronics WM831x PMIC regulators"
	depends on MFD_WM831X
	help
	  Support the voltage and current regulators of the WM831x series
	  of PMIC devices.

config REGULATOR_WM8350
	tristate "Wolfson Microelectronics WM8350 AudioPlus PMIC"
	depends on MFD_WM8350
	help
	  This driver provides support for the voltage and current regulators
	  of the WM8350 AudioPlus PMIC.

config REGULATOR_WM8400
	tristate "Wolfson Microelectronics WM8400 AudioPlus PMIC"
	depends on MFD_WM8400
	help
	  This driver provides support for the voltage regulators of the
	  WM8400 AudioPlus PMIC.

config REGULATOR_WM8994
	tristate "Wolfson Microelectronics WM8994 CODEC"
	depends on MFD_WM8994
	help
	  This driver provides support for the voltage regulators on the
	  WM8994 CODEC.

config REGULATOR_QCOM_LABIBB
	tristate "Qualcomm LAB/IBB regulator support"
	depends on SPMI || COMPILE_TEST
	help
	  This driver supports Qualcomm's LAB/IBB regulators present on the
	  Qualcomm's PMIC chip pmi8998. QCOM LAB and IBB are SPMI
	  based PMIC implementations. LAB can be used as positive
	  boost regulator and IBB can be used as a negative boost regulator
	  for LCD display panel.

endif
