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"
	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 AXP305_POWER if MACH_SUN50I_H616
	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 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
	default 900 if AXP818_POWER
	default 1400 if AXP152_POWER || AXP209_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

config AXP_DCDC3_VOLT
	int "axp pmic dcdc3 voltage"
	depends on AXP152_POWER || AXP209_POWER || AXP221_POWER || AXP809_POWER || AXP818_POWER
	default 900 if AXP809_POWER || AXP818_POWER
	default 1500 if AXP152_POWER
	default 1250 if AXP209_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.

config AXP_DCDC4_VOLT
	int "axp pmic dcdc4 voltage"
	depends on AXP152_POWER || AXP221_POWER || AXP809_POWER || AXP818_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 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 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 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.

endif
