menuconfig REGULATOR
	bool "Voltage and Current Regulator Support"
	default n
	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"
	default n
	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"
	default n
	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_BQ24022
	tristate "TI bq24022 Dual Input 1-Cell Li-Ion Charger IC"
	default n
	help
	  This driver controls a TI bq24022 Charger attached via
	  GPIOs. The provided current regulator can enable/disable
	  charging select between 100 mA and 500 mA charging current
	  limit.

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

config REGULATOR_WM8350
	tristate "Wolfson Microelectroncis 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 Microelectroncis WM8400 AudioPlus PMIC"
	depends on MFD_WM8400
	help
	  This driver provides support for the voltage regulators of the
	  WM8400 AudioPlus PMIC.

config REGULATOR_DA903X
	tristate "Support regulators on Dialog Semiconductor DA9030/DA9034 PMIC"
	depends on PMIC_DA903X
	help
	  Say y here to support the BUCKs and LDOs regulators found on
	  Dialog Semiconductor DA9030/DA9034 PMIC.

config REGULATOR_PCF50633
	tristate "PCF50633 regulator driver"
        depends on MFD_PCF50633
	help
	 Say Y here to support the voltage regulators and convertors
	 on PCF50633

endif
