config DM_REGULATOR
	bool "Enable Driver Model for REGULATOR drivers (UCLASS_REGULATOR)"
	depends on DM
	---help---
	This config enables the driver model regulator support.
	UCLASS_REGULATOR - designed to provide a common API for basic regulator's
	functions, like get/set Voltage or Current value, enable state, etc...
	Note:
	When enabling this, please read the description, found in the files:
	- 'include/power/pmic.h'
	- 'include/power/regulator.h'
	- 'drivers/power/pmic/pmic-uclass.c'
	- 'drivers/power/pmic/regulator-uclass.c'
	It's important to call the device_bind() with the proper node offset,
	when binding the regulator devices. The pmic_bind_childs() can be used
	for this purpose if PMIC I/O driver is implemented or dm_scan_fdt_dev()
	otherwise. Detailed information can be found in the header file.

config SPL_DM_REGULATOR
	bool "Enable regulators for SPL"
	depends on DM_REGULATOR && SPL_POWER
	---help---
	Regulators are seldom needed in SPL. Even if they are accessed, some
	code space can be saved by accessing the PMIC registers directly.
	Enable this option if you need regulators in SPL and can cope with
	the extra code size.

config REGULATOR_ACT8846
	bool "Enable driver for ACT8846 regulator"
	depends on DM_REGULATOR && PMIC_ACT8846
	---help---
	Enable support for the regulator functions of the ACT8846 PMIC. The
	driver implements get/set api for the various BUCKS and LDOS supported
	by the PMIC device. This driver is controlled by a device tree node
	which includes voltage limits.

config REGULATOR_AS3722
	bool "Enable driver for AS7322 regulator"
	depends on DM_REGULATOR && PMIC_AS3722
	help
	  Enable support for the regulator functions of the AS3722. The
	  driver implements enable/disable for step-down bucks and LDOs,
	  but does not yet support change voltages. Currently this must be
	  done using direct register writes to the PMIC.

config REGULATOR_AXP
	bool "Enable driver for X-Powers AXP PMIC regulators"
	depends on DM_REGULATOR && PMIC_AXP
	help
	  Enable support for the regulators (DCDCs, LDOs) in the
	  X-Powers AXP152, AXP2xx, and AXP8xx PMICs.

config SPL_REGULATOR_AXP
	bool "Enable driver for X-Powers AXP PMIC regulators in SPL"
	depends on SPL_DM_REGULATOR && SPL_PMIC_AXP
	help
	  Enable support in SPL for the regulators (DCDCs, LDOs) in the
	  X-Powers AXP152, AXP2xx, and AXP8xx PMICs.

config REGULATOR_AXP_USB_POWER
	bool "Enable driver for X-Powers AXP PMIC USB power supply"
	depends on DM_REGULATOR && PMIC_AXP
	help
	  Enable support for reading the USB power supply status from
	  X-Powers AXP2xx and AXP8xx PMICs.

config DM_REGULATOR_BD71837
	bool "Enable Driver Model for ROHM BD71837/BD71847 regulators"
	depends on DM_REGULATOR && DM_PMIC_BD71837
	help
	This config enables implementation of driver-model regulator uclass
	features for regulators on ROHM BD71837 and BD71847 PMICs.
	BD71837 contains 8 bucks and 7 LDOS. BD71847 is reduced version
	containing 6 bucks and 6 LDOs. The driver implements get/set api for
	value and enable.

config SPL_DM_REGULATOR_BD71837
	bool "Enable Driver Model for ROHM BD71837/BD71847 regulators in SPL"
	depends on DM_REGULATOR_BD71837 && SPL
	help
	This config enables implementation of driver-model regulator uclass
	features for regulators on ROHM BD71837 and BD71847 in SPL.

config DM_REGULATOR_PCA9450
	bool "Enable Driver Model for NXP PCA9450 regulators"
	depends on DM_REGULATOR && DM_PMIC_PCA9450
	help
	This config enables implementation of driver-model regulator uclass
	features for regulators on NXP PCA9450 PMICs. PCA9450 contains 6 bucks
	and 5 LDOS. The driver implements get/set api for value and enable.

config SPL_DM_REGULATOR_PCA9450
	bool "Enable Driver Model for NXP PCA9450 regulators in SPL"
	depends on DM_REGULATOR_PCA9450 && SPL
	help
	This config enables implementation of driver-model regulator uclass
	features for regulators on ROHM PCA9450 in SPL.

config DM_REGULATOR_DA9063
	bool "Enable Driver Model for REGULATOR DA9063"
	depends on DM_REGULATOR && DM_PMIC_DA9063
	help
	  This config enables implementation of driver-model regulator uclass
	  features for REGULATOR DA9063.
	  The driver implements get/set api for value, enable and mode for all
	  regulators. It also implements the get/set api for current for the
	  buck regulators.

config SPL_DM_REGULATOR_DA9063
	bool "Enable Driver Model for REGULATOR DA9063 in SPL"
	depends on DM_REGULATOR && DM_PMIC_DA9063  && SPL
	help
	  This config enables implementation of driver-model regulator uclass
	  features for REGULATOR DA9063.
	  The driver implements get/set api for value, enable and mode for all
	  regulators. It also implements the get/set api for current for the
	  buck regulators.

config DM_REGULATOR_PFUZE100
	bool "Enable Driver Model for REGULATOR PFUZE100"
	depends on DM_REGULATOR && DM_PMIC_PFUZE100
	---help---
	This config enables implementation of driver-model regulator uclass
	features for REGULATOR PFUZE100. The driver implements get/set api for:
	value, enable and mode.

config REGULATOR_PWM
	bool "Enable driver for PWM regulators"
	depends on DM_REGULATOR
	---help---
	Enable support for the PWM regulator functions which voltage are
	controlled by PWM duty ratio. Some of Rockchip board using this kind
	of regulator. The driver implements get/set api for the various BUCKS.
	This driver is controlled by a device tree node
	which includes voltage limits.

config SPL_REGULATOR_PWM
	bool "Enable Driver for PWM regulators in SPL"
	depends on REGULATOR_PWM && SPL
	help
	  This config enables implementation of driver-model regulator uclass
	  features for PWM regulators in SPL.

config DM_REGULATOR_MAX77663
	bool "Enable Driver Model for REGULATOR MAX77663"
	depends on DM_REGULATOR && DM_PMIC_MAX77663
	---help---
	This config enables implementation of driver-model regulator uclass
	features for REGULATOR MAX77663. The driver supports both DC-to-DC
	Step-Down (SD) Regulators and Low-Dropout Linear (LDO) Regulators
	found in MAX77663 PMIC and implements get/set api for value and enable.

config DM_REGULATOR_MAX77686
	bool "Enable Driver Model for REGULATOR MAX77686"
	depends on DM_REGULATOR && DM_PMIC_MAX77686
	---help---
	This config enables implementation of driver-model regulator uclass
	features for REGULATOR MAX77686. The driver implements get/set api for:
	value, enable and mode.

config DM_REGULATOR_NPCM8XX
	bool "Enable Driver Model for NPCM8xx voltage supply"
	depends on DM_REGULATOR && ARCH_NPCM8XX
	help
	  Enable support for configuring voltage supply on NPCM8XX SoC. The
	  voltage supplies support two voltage levels and the driver implements
	  get/set api for setting the value.

config DM_REGULATOR_FAN53555
	bool "Enable Driver Model for REGULATOR FAN53555"
	depends on DM_PMIC_FAN53555
	help
	  This config enables implementation of driver-model regulator
	  uclass features for the FAN53555 regulator. The FAN53555 is
	  a (family of) single-output regulators that supports
	  transitioning between two different output voltages based on
	  an voltage selection pin.

	  The driver implements a get/set api for the voltage of the
	  'normal mode' voltage only. Switching to 'suspend mode'
	  (i.e. the alternate voltage), disabling output via software,
	  or switching the mode is not supported by this driver (at
	  this time).

config DM_REGULATOR_COMMON
	bool
	depends on DM_REGULATOR

config SPL_DM_REGULATOR_COMMON
	bool
	depends on DM_REGULATOR

config DM_REGULATOR_FIXED
	bool "Enable Driver Model for REGULATOR Fixed value"
	depends on DM_REGULATOR
	select DM_REGULATOR_COMMON
	---help---
	This config enables implementation of driver-model regulator uclass
	features for fixed value regulators. The driver implements get/set api
	for enable and get only for voltage value.

config SPL_DM_REGULATOR_FIXED
	bool "Enable Driver Model for REGULATOR Fixed value in SPL"
	depends on DM_REGULATOR_FIXED && SPL
	select SPL_DM_REGULATOR_COMMON
	---help---
	This config enables implementation of driver-model regulator uclass
	features for fixed value regulators in SPL.

config DM_REGULATOR_GPIO
	bool "Enable Driver Model for GPIO REGULATOR"
	depends on DM_REGULATOR && DM_GPIO
	select DM_REGULATOR_COMMON
	---help---
	This config enables implementation of driver-model regulator uclass
	features for gpio regulators. The driver implements get/set for
	voltage value.

config DM_REGULATOR_QCOM_RPMH
	bool "Enable driver model for Qualcomm RPMh regulator"
	depends on DM_REGULATOR && QCOM_RPMH
	---help---
	  Enable support for the Qualcomm RPMh regulator. The driver
	  implements get/set api for a limited set of regulators used
	  by u-boot.

config SPL_DM_REGULATOR_GPIO
	bool "Enable Driver Model for GPIO REGULATOR in SPL"
	depends on DM_REGULATOR_GPIO && SPL_GPIO
	select SPL_DM_REGULATOR_COMMON
	---help---
	This config enables implementation of driver-model regulator uclass
	features for gpio regulators in SPL.

config REGULATOR_RK8XX
	bool "Enable driver for RK8XX regulators"
	depends on DM_REGULATOR && PMIC_RK8XX
	---help---
	Enable support for the regulator functions of the RK8XX PMIC. The
	driver implements get/set api for the various BUCKS and LDOs supported
	by the PMIC device. This driver is controlled by a device tree node
	which includes voltage limits.

config DM_REGULATOR_S2MPS11
	bool "Enable driver for S2MPS11 regulator"
	depends on DM_REGULATOR && PMIC_S2MPS11
	---help---
	This enables implementation of driver-model regulator uclass
	features for REGULATOR S2MPS11.
	The driver implements get/set api for: value and enable.

config REGULATOR_S5M8767
	bool "Enable support for S5M8767 regulator"
	depends on DM_REGULATOR && PMIC_S5M8767
	---help---
	This enables the regulator features of the S5M8767, allowing voltages
	to be set, etc. The driver is not fully complete but supports most
	common requirements, including all LDOs and BUCKs. This allows many
	supplies to be set automatically using the device tree values.

config DM_REGULATOR_SANDBOX
	bool "Enable Driver Model for Sandbox PMIC regulator"
	depends on DM_REGULATOR && DM_PMIC_SANDBOX
	---help---
	Enable the regulator driver for emulated Sandbox PMIC.
	The emulated PMIC device depends on two drivers:
	- sandbox PMIC I/O driver - implements dm pmic operations
	- sandbox PMIC regulator driver - implements dm regulator operations
	- sandbox PMIC i2c emul driver - emulates the PMIC's I2C transmission

	The regulator driver provides uclass operations for sandbox PMIC's
	regulators. The driver implements get/set api for: voltage, current,
	operation mode and enable state.
	The driver supports LDO and BUCK regulators.

	The Sandbox PMIC info:
	* I/O interface:
	  - I2C chip address:       0x40
	  - first register address: 0x0
	  - register count:         0x10
	* Adjustable outputs:
	  - 2x LDO
	  - 2x BUCK
	  - Each, with a different operating conditions (header).
	* Reset values:
	  - set by i2c emul driver's probe() (defaults in header)

	A detailed information can be found in header: '<power/sandbox_pmic.h>'
	Binding info: 'doc/device-tree-bindings/pmic/max77686.txt'

config REGULATOR_TPS65090
	bool "Enable driver for TPS65090 PMIC regulators"
	depends on PMIC_TPS65090
	---help---
	The TPS65090 provides several FETs (Field-effect Transistors,
	effectively switches) which are supported by this driver as
	regulators, one for each FET. The standard regulator interface is
	supported, but it is only possible to turn the regulators on or off.
	There is no voltage/current control.

config DM_REGULATOR_PALMAS
	bool "Enable driver for PALMAS PMIC regulators"
       depends on PMIC_PALMAS
	---help---
	This enables implementation of driver-model regulator uclass
	features for REGULATOR PALMAS and the family of PALMAS PMICs.
	The driver implements get/set api for: value and enable.

config DM_REGULATOR_PBIAS
	bool "Enable driver for PBIAS regulator"
	depends on DM_REGULATOR
	select REGMAP
	select SYSCON
	---help---
	This enables implementation of driver-model regulator uclass
	features for pseudo-regulator PBIAS found in the OMAP SOCs.
	This pseudo-regulator is used to provide a BIAS voltage to MMC1
	signal pads and must be configured properly during a voltage switch.
	Voltage switching is required by some operating modes of SDcards and
	eMMC.

config DM_REGULATOR_LP873X
	bool "Enable driver for LP873X PMIC regulators"
        depends on PMIC_LP873X
	---help---
	This enables implementation of driver-model regulator uclass
	features for REGULATOR LP873X and the family of LP873X PMICs.
	The driver implements get/set api for: value and enable.

config DM_REGULATOR_LP87565
	bool "Enable driver for LP87565 PMIC regulators"
        depends on PMIC_LP87565
	---help---
	This enables implementation of driver-model regulator uclass
	features for REGULATOR LP87565 and the family of LP87565 PMICs.
	LP87565 series of PMICs have 4 single phase BUCKs that can also
	be configured in multi phase modes. The driver implements
	get/set api for value and enable.

config DM_REGULATOR_STM32_VREFBUF
	bool "Enable driver for STMicroelectronics STM32 VREFBUF"
	depends on DM_REGULATOR && (STM32H7 || ARCH_STM32MP)
	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.

config DM_REGULATOR_TPS65910
	bool "Enable driver for TPS65910 PMIC regulators"
	depends on DM_PMIC_TPS65910
	---help---
	The TPS65910 PMIC provides 4 SMPSs and 8 LDOs. This driver supports all
	regulator types of the TPS65910 (BUCK, BOOST and LDO). It implements
	the get/set api for value and enable.

config DM_REGULATOR_TPS65911
	bool "Enable driver for TPS65911 PMIC regulators"
	depends on DM_PMIC_TPS65910
	---help---
	This config enables implementation of driver-model regulator
	uclass features for the TPS65911 PMIC. The driver supports Step-Down
	DC-DC Converters for Processor Cores (VDD1 and VDD2), Step-Down DC-DC
	Converter for I/O Power (VIO), Controller for External FETs (VDDCtrl)
	and LDO Voltage Regulators found in TPS65911 PMIC and implements
	get/set api for value and enable.

config DM_REGULATOR_TPS62360
	bool "Enable driver for TPS6236x Power Regulator"
	depends on DM_REGULATOR
	help
	The TPS6236X DC/DC step down converter provides a single output
	power line peaking at 3A current. This driver supports all four
	variants of the chip (TPS62360, TPS62361, TPS62362, TPS62363). It
	implements the get/set api for value only, as the power line is
	always on.

config DM_REGULATOR_TPS80031
	bool "Enable driver for TPS80031/TPS80032 PMIC regulators"
	depends on DM_PMIC_TPS80031
	---help---
	This enables implementation of driver-model regulator uclass
	features for TPS80031/TPS80032 PMICs. The driver implements
	get/set api for: value and enable.

config DM_REGULATOR_TPS6287X
	bool "Enable driver for TPS6287x Power Regulator"
	depends on DM_REGULATOR
	help
	The TPS6287X is a step down converter with a fast transient
	response. This driver supports all four variants of the chip
	(TPS62870, TPS62871, TPS62872, TPS62873). It implements the
	get/set api for value only, as the power line is always on.

config DM_REGULATOR_STPMIC1
	bool "Enable driver for STPMIC1 regulators"
	depends on DM_REGULATOR && PMIC_STPMIC1
	---help---
	Enable support for the regulator functions of the STPMIC1 PMIC. The
	driver implements get/set api for the various BUCKS and LDOs supported
	by the PMIC device. This driver is controlled by a device tree node
	which includes voltage limits.

config DM_REGULATOR_ANATOP
	bool "Enable driver for ANATOP regulators"
	depends on DM_REGULATOR
	select REGMAP
	select SYSCON
	help
	Enable support for the Freescale i.MX on-chip ANATOP LDO
	regulators. It is recommended that this option be enabled on
	i.MX6 platform.

config SPL_DM_REGULATOR_TPS6287X
	bool "Enable driver for TPS6287x Power Regulator"
	depends on SPL_DM_REGULATOR
	help
	The TPS6287X is a step down converter with a fast transient
	response. This driver supports all four variants of the chip
	(TPS62870, TPS62871, TPS62872, TPS62873). It implements the
	get/set api for value only, as the power line is always on.

config SPL_DM_REGULATOR_STPMIC1
	bool "Enable driver for STPMIC1 regulators in SPL"
	depends on SPL_DM_REGULATOR && PMIC_STPMIC1
	help
	  Enable support for the regulator functions of the STPMIC1 PMIC in SPL.

config SPL_DM_REGULATOR_PALMAS
	bool "Enable driver for PALMAS PMIC regulators"
	depends on SPL_PMIC_PALMAS
	help
	This enables implementation of driver-model regulator uclass
	features for REGULATOR PALMAS and the family of PALMAS PMICs.
	The driver implements get/set api for: value and enable in SPL.

config SPL_DM_REGULATOR_LP87565
	bool "Enable driver for LP87565 PMIC regulators"
	depends on SPL_PMIC_LP87565
	help
	This enables implementation of driver-model regulator uclass
	features for REGULATOR LP87565 and the family of LP87565 PMICs.
	LP87565 series of PMICs have 4 single phase BUCKs that can also
	be configured in multi phase modes. The driver implements
	get/set api for value and enable in SPL.

config SPL_DM_REGULATOR_LP873X
	bool "Enable driver for LP873X PMIC regulators"
	depends on SPL_PMIC_LP873X
	help
	This enables implementation of driver-model regulator uclass
	features for REGULATOR LP873X and the family of LP873X PMICs.
	The driver implements get/set api for: value and enable in SPL.

config DM_REGULATOR_TPS65941
	bool "Enable driver for TPS65941 PMIC regulators"
        depends on PMIC_TPS65941
	help
	This enables implementation of driver-model regulator uclass
	features for REGULATOR TPS65941 and the family of TPS65941 PMICs.
	TPS65941 series of PMICs have 5 single phase BUCKs that can also
	be configured in multi phase modes & 4 LDOs. The driver implements
	get/set api for value and enable.

config DM_REGULATOR_SCMI
	bool "Enable driver for SCMI voltage domain regulators"
	depends on DM_REGULATOR
	select SCMI_AGENT
        help
          Enable this option if you want to support regulators exposed through
	  the SCMI voltage domain protocol by a SCMI server.

config DM_REGULATOR_TPS65219
	bool "Enable driver for TPS65219 PMIC regulators"
        depends on PMIC_TPS65219
	help
	This enables implementation of driver-model regulator uclass
	features for REGULATOR TPS65219 and the family of TPS65219 PMICs.
	TPS65219 series of PMICs have 3 single phase BUCKs & 4 LDOs.
	The driver implements get/set api for value and enable.
