menuconfig POWER
	 bool "Power"
	 default y
	 help
	  Enable support for power control in U-Boot. This includes support
	  for PMICs (Power-management Integrated Circuits) and some of the
	  features provided by PMICs. In particular, voltage regulators can
	  be used to enable/disable power and vary its voltage. That can be
	  useful in U-Boot to turn on boot peripherals and adjust CPU voltage
	  so that the clock speed can be increased. This enables the drivers
	  in drivers/power, drivers/power/pmic and drivers/power/regulator
	  as part of a build.

if POWER

config POWER_LEGACY
	bool "Legacy power support"
	help
	  Note: This is a legacy option. Use DM_PMIC instead.

	  Enable support for power control in U-Boot. This includes support
	  for PMICs (Power-management Integrated Circuits) and some of the
	  features provided by PMICs. In particular, voltage regulators can
	  be used to enable/disable power and vary its voltage. That can be
	  useful in U-Boot to turn on boot peripherals and adjust CPU voltage
	  so that the clock speed can be increased. This enables the drivers
	  in drivers/power, drivers/power/pmic and drivers/power/regulator
	  as part of a build.

config SPL_POWER_LEGACY
	bool "Legacy power support in SPL"
	depends on SPL && !SPL_DM_PMIC
	default y if POWER_LEGACY
	help
	  Note: This is a legacy option. Use SPL_DM_PMIC instead.

	  Enable support for power control in SPL. This includes support
	  for PMICs (Power-management Integrated Circuits) and some of the
	  features provided by PMICs. In particular, voltage regulators can
	  be used to enable/disable power and vary its voltage. That can be
	  useful in SPL to turn on boot peripherals and adjust CPU voltage
	  so that the clock speed can be increased. This enables the drivers
	  in drivers/power, drivers/power/pmic and drivers/power/regulator
	  as part of a build.

source "drivers/power/acpi_pmc/Kconfig"

source "drivers/power/domain/Kconfig"

source "drivers/power/pmic/Kconfig"

source "drivers/power/regulator/Kconfig"

choice
	prompt "Select Sunxi PMIC Variant"
	depends on ARCH_SUNXI
	default AXP209_POWER if MACH_SUN4I || MACH_SUN5I || MACH_SUN7I
	default AXP221_POWER if MACH_SUN6I || MACH_SUN8I_A23 || MACH_SUN8I_A33 || MACH_SUN8I_R40
	default AXP818_POWER if MACH_SUN8I_A83T
	default SUNXI_NO_PMIC if MACH_SUNXI_H3_H5 || MACH_SUN50I || MACH_SUN8I_V3S

config SUNXI_NO_PMIC
	bool "board without a pmic"
	---help---
	Select this for boards which do not use a PMIC.

config AXP152_POWER
	bool "axp152 pmic support"
	depends on MACH_SUN5I
	select AXP_PMIC_BUS
	select CMD_POWEROFF
	---help---
	Select this to enable support for the axp152 pmic found on most
	A10s boards.

config AXP209_POWER
	bool "axp209 pmic support"
	depends on MACH_SUN4I || MACH_SUN5I || MACH_SUN7I || MACH_SUN8I_V3S
	select AXP_PMIC_BUS
	select CMD_POWEROFF
	---help---
	Select this to enable support for the axp209 pmic found on most
	A10, A13 and A20 boards.

config AXP221_POWER
	bool "axp221 / axp223 pmic support"
	depends on MACH_SUN6I || MACH_SUN8I_A23 || MACH_SUN8I_A33 || MACH_SUN8I_R40
	select AXP_PMIC_BUS
	select CMD_POWEROFF
	---help---
	Select this to enable support for the axp221/axp223 pmic found on most
	A23 and A31 boards.

config AXP305_POWER
	bool "axp305 pmic support"
	depends on MACH_SUN50I_H616
	select AXP_PMIC_BUS
	select CMD_POWEROFF
	---help---
	Select this to enable support for the axp305 pmic found on most
	H616 boards.

config AXP313_POWER
	bool "axp313 pmic support"
	depends on MACH_SUN50I_H616
	select AXP_PMIC_BUS
	select CMD_POWEROFF
	---help---
	Select this to enable support for the AXP313 PMIC found on some
	H616 boards.

config AXP717_POWER
	bool "axp717 pmic support"
	select AXP_PMIC_BUS
	select CMD_POWEROFF
	---help---
	Select this to enable support for the AXP717 PMIC found on some boards.

config AXP809_POWER
	bool "axp809 pmic support"
	depends on MACH_SUN9I
	select AXP_PMIC_BUS
	select CMD_POWEROFF
	---help---
	Say y here to enable support for the axp809 pmic found on A80 boards.

config AXP818_POWER
	bool "axp818 pmic support"
	depends on MACH_SUN8I_A83T
	select AXP_PMIC_BUS
	select CMD_POWEROFF
	---help---
	Say y here to enable support for the axp818 pmic found on
	A83T dev board.

config SY8106A_POWER
	bool "SY8106A pmic support"
	depends on MACH_SUNXI_H3_H5
	---help---
	Select this to enable support for the SY8106A pmic found on some
	H3 boards.

endchoice

config AXP_DCDC1_VOLT
	int "axp pmic dcdc1 voltage"
	depends on AXP221_POWER || AXP809_POWER || AXP818_POWER
	default 3300 if AXP818_POWER || MACH_SUN8I_R40
	default 3000 if MACH_SUN6I || MACH_SUN8I || MACH_SUN9I
	---help---
	Set the voltage (mV) to program the axp pmic dcdc1 at, set to 0 to
	disable dcdc1. On A23 / A31 / A33 (axp221) boards dcdc1 is used for
	generic 3.3V IO voltage for external devices like the lcd-panal and
	sdcard interfaces, etc. On most boards dcdc1 is undervolted to 3.0V to
	save battery. On A31 devices dcdc1 is also used for VCC-IO. On A83T
	dcdc1 is used for VCC-IO, nand, usb0, sd , etc. On A80 dcdc1 normally
	powers some of the pingroups, NAND/eMMC, SD/MMC, and USB OTG.

config AXP_DCDC2_VOLT
	int "axp pmic dcdc2 voltage"
	depends on AXP152_POWER || AXP209_POWER || AXP221_POWER || AXP809_POWER || AXP818_POWER || AXP313_POWER || AXP717_POWER
	default 900 if AXP818_POWER
	default 1400 if AXP152_POWER || AXP209_POWER
	default 1000 if AXP313_POWER
	default 1000 if AXP717_POWER
	default 1200 if MACH_SUN6I
	default 1100 if MACH_SUN8I
	default 0 if MACH_SUN9I
	---help---
	Set the voltage (mV) to program the axp pmic dcdc2 at, set to 0 to
	disable dcdc2.
	On A10(s) / A13 / A20 boards dcdc2 is VDD-CPU and should be 1.4V.
	On A31 boards dcdc2 is used for VDD-GPU and should be 1.2V.
	On A23/A33 boards dcdc2 is used for VDD-SYS and should be 1.1V.
	On A80 boards dcdc2 powers the GPU and can be left off.
	On A83T boards dcdc2 is used for VDD-CPUA(cluster 0) and should be 0.9V.
	On R40 boards dcdc2 is VDD-CPU and should be 1.1V
	On boards using the AXP313 or AXP717 it's often VDD-CPU.

config AXP_DCDC3_VOLT
	int "axp pmic dcdc3 voltage"
	depends on AXP152_POWER || AXP209_POWER || AXP221_POWER || AXP809_POWER || AXP818_POWER || AXP313_POWER || AXP717_POWER
	default 900 if AXP809_POWER || AXP818_POWER
	default 1500 if AXP152_POWER
	default 1250 if AXP209_POWER
	default 1100 if AXP313_POWER
	default 1100 if MACH_SUN8I_R40
	default 1200 if MACH_SUN6I || MACH_SUN8I
	---help---
	Set the voltage (mV) to program the axp pmic dcdc3 at, set to 0 to
	disable dcdc3.
	On A10(s) / A13 / A20 boards with an axp209 dcdc3 is VDD-INT-DLL and
	should be 1.25V.
	On A10s boards with an axp152 dcdc3 is VCC-DRAM and should be 1.5V.
	On A23 / A31 / A33 boards dcdc3 is VDD-CPU and should be 1.2V.
	On A80 boards dcdc3 is used for VDD-CPUA(cluster 0) and should be 0.9V.
	On A83T boards dcdc3 is used for VDD-CPUB(cluster 1) and should be 0.9V.
	On R40 boards dcdc3 is VDD-SYS and VDD-GPU and should be 1.1V.
	On boards using the AXP313 or AXP717 it's often VDD-DRAM and should
	be 1.1V for LPDDR4.

config AXP_DCDC4_VOLT
	int "axp pmic dcdc4 voltage"
	depends on AXP152_POWER || AXP221_POWER || AXP809_POWER || AXP305_POWER
	default 1250 if AXP152_POWER
	default 1200 if MACH_SUN6I
	default 0 if MACH_SUN8I
	default 900 if MACH_SUN9I
	default 1500 if AXP305_POWER
	---help---
	Set the voltage (mV) to program the axp pmic dcdc4 at, set to 0 to
	disable dcdc4.
	On A10s boards with an axp152 dcdc4 is VDD-INT-DLL and should be 1.25V.
	On A31 boards dcdc4 is used for VDD-SYS and should be 1.2V.
	On A23 / A33 boards dcdc4 is unused and should be disabled.
	On A80 boards dcdc4 powers VDD-SYS, HDMI, USB OTG and should be 0.9V.
	On A83T boards dcdc4 is used for VDD-GPU.
	On H616 boards dcdcd is used for VCC-DRAM.

config AXP_DCDC5_VOLT
	int "axp pmic dcdc5 voltage"
	depends on AXP221_POWER || AXP809_POWER || AXP818_POWER
	default 1500 if MACH_SUN6I || MACH_SUN8I || MACH_SUN9I
	---help---
	Set the voltage (mV) to program the axp pmic dcdc5 at, set to 0 to
	disable dcdc5.
	On A23 / A31 / A33 / A80 / A83T / R40 boards dcdc5 is VCC-DRAM and
	should be 1.5V, 1.35V if DDR3L is used.

config AXP_ALDO1_VOLT
	int "axp pmic (a)ldo1 voltage"
	depends on AXP221_POWER || AXP809_POWER || AXP818_POWER
	default 0 if MACH_SUN6I || MACH_SUN8I_R40
	default 1800 if MACH_SUN8I_A83T
	default 3000 if MACH_SUN8I || MACH_SUN9I
	---help---
	Set the voltage (mV) to program the axp pmic aldo1 at, set to 0 to
	disable aldo1.
	On A31 boards aldo1 is often used to power the wifi module.
	On A23 / A33 boards aldo1 is used for VCC-IO and should be 3.0V.
	On A80 boards aldo1 powers the USB hosts and should be 3.0V.
	On A83T / H8 boards aldo1 is used for MIPI CSI, DSI, HDMI, EFUSE, and
	should be 1.8V.

config AXP_ALDO2_VOLT
	int "axp pmic (a)ldo2 voltage"
	depends on AXP152_POWER || AXP209_POWER || AXP221_POWER || AXP809_POWER || AXP818_POWER
	default 3000 if AXP152_POWER || AXP209_POWER
	default 0 if MACH_SUN6I || MACH_SUN9I
	default 1800 if MACH_SUN8I_A83T
	default 2500 if MACH_SUN8I
	---help---
	Set the voltage (mV) to program the axp pmic aldo2 at, set to 0 to
	disable aldo2.
	On A10(s) / A13 / A20 boards aldo2 is AVCC and should be 3.0V.
	On A31 boards aldo2 is typically unused and should be disabled.
	On A31 boards aldo2 may be used for LPDDR2 then it should be 1.8V.
	On A23 / A33 boards aldo2 is used for VDD-DLL and should be 2.5V.
	On A80 boards aldo2 powers PB pingroup and camera IO and can be left off.
	On A83T / H8 boards aldo2 powers VDD-DLL, VCC18-PLL, CPVDD, VDD18-ADC,
	LPDDR2, and the codec. It should be 1.8V.

config AXP_ALDO3_VOLT
	int "axp pmic (a)ldo3 voltage"
	depends on AXP209_POWER || AXP221_POWER || AXP809_POWER || AXP818_POWER
	default 0 if AXP209_POWER || MACH_SUN9I
	default 3000 if MACH_SUN6I || MACH_SUN8I
	---help---
	Set the voltage (mV) to program the axp pmic aldo3 at, set to 0 to
	disable aldo3.
	On A10(s) / A13 / A20 boards aldo3 should be 2.8V.
	On A23 / A31 / A33 / R40 boards aldo3 is VCC-PLL and AVCC and should
	be 3.0V.
	On A80 boards aldo3 is normally not used.
	On A83T / H8 boards aldo3 is AVCC, VCC-PL, and VCC-LED, and should be
	3.0V.

choice
	prompt "axp pmic (a)ldo3 voltage rate control"
	depends on AXP209_POWER
	default AXP_ALDO3_VOLT_SLOPE_NONE
	---help---
	The AXP can slowly ramp up voltage to reduce the inrush current when
	changing voltages.
	Note, this does not apply when enabling/disabling LDO3. See
	"axp pmic (a)ldo3 inrush quirk" below to enable a slew rate to limit
	inrush current on broken board designs.

config AXP_ALDO3_VOLT_SLOPE_NONE
	bool "No voltage slope"
	---help---
	Tries to reach the next voltage setting near instantaneously. Measurements
	indicate that this is about 0.0167 V/uS.

config AXP_ALDO3_VOLT_SLOPE_16
	bool "1.6 mV per uS"
	---help---
	Increases the voltage by 1.6 mV per uS until the final voltage has
	been reached. Note that the scaling is in 25 mV steps and thus
	the slew rate in reality is about 25 mV/31.250 uS.

config AXP_ALDO3_VOLT_SLOPE_08
	bool "0.8 mV per uS"
	---help---
	Increases the voltage by 0.8 mV per uS until the final voltage has
	been reached. Note that the scaling is in 25 mV steps however and thus
	the slew rate in reality is about 25 mV/15.625 uS.
	This is the slowest supported rate.

endchoice

config AXP_ALDO3_INRUSH_QUIRK
	bool "axp pmic (a)ldo3 inrush quirk"
	depends on AXP209_POWER
	---help---
	The reference design denotes a value of 4.7 uF for the output capacitor
	of LDO3. Some boards have too high capacitance causing 	an inrush current
	and resulting an AXP209 shutdown.

config AXP_ALDO4_VOLT
	int "axp pmic (a)ldo4 voltage"
	depends on AXP209_POWER
	default 0 if AXP209_POWER
	---help---
	Set the voltage (mV) to program the axp pmic aldo4 at, set to 0 to
	disable aldo4.
	On A10(s) / A13 / A20 boards aldo4 should be 2.8V.

config AXP_DLDO1_VOLT
	int "axp pmic dldo1 voltage"
	depends on AXP221_POWER || AXP809_POWER || AXP818_POWER
	default 0
	---help---
	Set the voltage (mV) to program the axp pmic dldo1 at, set to 0 to
	disable dldo1. On sun6i (A31) boards with ethernet dldo1 is often used
	to power the ethernet phy. On A23, A33 and A80 boards this is often
	used to power the wifi.

config AXP_DLDO2_VOLT
	int "axp pmic dldo2 voltage"
	depends on AXP221_POWER || AXP809_POWER || AXP818_POWER
	default 3000 if MACH_SUN9I
	default 0
	---help---
	Set the voltage (mV) to program the axp pmic dldo2 at, set to 0 to
	disable dldo2.
	On A80 boards dldo2 normally powers the PL pins and should be 3.0V.

config AXP_DLDO3_VOLT
	int "axp pmic dldo3 voltage"
	depends on AXP221_POWER || AXP818_POWER
	default 0
	---help---
	Set the voltage (mV) to program the axp pmic dldo3 at, set to 0 to
	disable dldo3.

config AXP_DLDO4_VOLT
	int "axp pmic dldo4 voltage"
	depends on AXP221_POWER || AXP818_POWER
	default 0
	---help---
	Set the voltage (mV) to program the axp pmic dldo4 at, set to 0 to
	disable dldo4.

config AXP_ELDO1_VOLT
	int "axp pmic eldo1 voltage"
	depends on AXP221_POWER || AXP809_POWER || AXP818_POWER
	default 0
	---help---
	Set the voltage (mV) to program the axp pmic eldo1 at, set to 0 to
	disable eldo1.

config AXP_ELDO2_VOLT
	int "axp pmic eldo2 voltage"
	depends on AXP221_POWER || AXP809_POWER || AXP818_POWER
	default 0
	---help---
	Set the voltage (mV) to program the axp pmic eldo2 at, set to 0 to
	disable eldo2.

config AXP_ELDO3_VOLT
	int "axp pmic eldo3 voltage"
	depends on AXP221_POWER || AXP809_POWER || AXP818_POWER
	default 3000 if MACH_SUN9I
	default 0
	---help---
	Set the voltage (mV) to program the axp pmic eldo3 at, set to 0 to
	disable eldo3. On some A31(s) tablets it might be used to supply
	1.2V for the SSD2828 chip (converter of parallel LCD interface
	into MIPI DSI).
	On A80 boards it powers the PM pingroup and should be 3.0V.

config AXP_FLDO1_VOLT
	int "axp pmic fldo1 voltage"
	depends on AXP818_POWER
	default 0 if MACH_SUN8I_A83T
	---help---
	Set the voltage (mV) to program the axp pmic fldo1 at, set to 0 to
	disable fldo1.
	On A83T / H8 boards fldo1 is VCC-HSIC and should be 1.2V if HSIC is
	used.

config AXP_FLDO2_VOLT
	int "axp pmic fldo2 voltage"
	depends on AXP818_POWER
	default 900 if MACH_SUN8I_A83T
	---help---
	Set the voltage (mV) to program the axp pmic fldo2 at, set to 0 to
	disable fldo2.
	On A83T / H8 boards fldo2 is VCC-CPUS and should be 0.9V.

config AXP_FLDO3_VOLT
	int "axp pmic fldo3 voltage"
	depends on AXP818_POWER
	default 0
	---help---
	Set the voltage (mV) to program the axp pmic fldo3 at, set to 0 to
	disable fldo3.

config AXP_SW_ON
	bool "axp pmic sw on"
	depends on AXP809_POWER || AXP818_POWER
	---help---
	Enable to turn on axp pmic sw.

config SY8106A_VOUT1_VOLT
	int "SY8106A pmic VOUT1 voltage"
	depends on SY8106A_POWER
	default 1200
	---help---
	Set the voltage (mV) to program the SY8106A pmic VOUT1. This
	is typically used to power the VDD-CPU and should be 1200mV.
	Values can range from 680mV till 1950mV.

config TPS6586X_POWER
	bool "Enable legacy driver for TI TPS6586x power management chip"

config TWL4030_POWER
	depends on OMAP34XX
	bool "Enable driver for TI TWL4030 power management chip"
	imply CMD_POWEROFF
	---help---
	The TWL4030 in a combination audio CODEC/power management with
	GPIO and it is commonly used with the OMAP3 family of processors

config POWER_MT6323
	bool "Poweroff driver for mediatek mt6323"
	select CMD_POWEROFF
	help
	  This adds poweroff driver for mt6323
	  this pmic is used on mt7623 / Bananapi R2

config PALMAS_POWER
	bool "Palmas power support"
	depends on OMAP54XX

config POWER_FSL
	bool "Power control (legacy) for Freescale / NXP platforms"
	depends on POWER_LEGACY

config POWER_I2C
	bool "I2C-based power control for legacy power"
	depends on POWER_LEGACY
	help
	  Enable this to use the I2C driver designed for the legacy PMIC
	  interface.

	  Not to be used for new designs and existing ones should be moved to
	  the new PMIC interface based on driver model.

config POWER_SPI
	bool "SPI-based power control for legacy power_fsl driver"
	depends on POWER_FSL && !POWER_I2C

config SPL_POWER_I2C
	bool "I2C-based power control for legacy power"
	depends on SPL_POWER_LEGACY
	default y if POWER_I2C
	help
	  Enable this to use the I2C driver designed for the legacy PMIC
	  interface.

	  Not to be used for new designs and existing ones should be moved to
	  the new PMIC interface based on driver model.

choice
	prompt "PMIC chip"
	default POWER_FSL_MC13892
	depends on POWER_FSL && POWER_I2C

config POWER_FSL_MC13892
	bool "MC13892"

config POWER_FSL_MC34704
	bool "MC34704"

endchoice

endif
