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 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_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_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 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_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_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_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.
