sunxi: power: Add support for disabling axp209 regulators
PATCH 1/3 sunxi: power: Add support for disabling axp209 regulators
Add support for disabling the regulators found on the axp209 pmic.
--- drivers/power/axp209.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++---- include/axp209.h | 8 ++++++++ 2 files changed, 54 insertions(+), 4 deletions(-)
drivers/power/axp209.c +46 -4
@@ -24,6 +24,14 @@ int axp_set_dcdc2(unsigned int mvolt)int rc;u8 cfg, current; +if (mvolt ==0 ) +return pmic_bus_clrbits (AXP209_OUTPUT_CTRL , +AXP209_OUTPUT_CTRL_DCDC2 ); + + rc =pmic_bus_setbits (AXP209_OUTPUT_CTRL ,AXP209_OUTPUT_CTRL_DCDC2 ); +if (rc) +return rc; + cfg =axp209_mvolt_to_cfg (mvolt,700 ,2275 ,25 );/* Do we really need to be this gentle? It has built-in voltage slope */
@@ -45,8 +53,17 @@ int axp_set_dcdc2(unsigned int mvolt)int axp_set_dcdc3 (unsigned int mvolt) {u8 cfg =axp209_mvolt_to_cfg (mvolt,700 ,3500 ,25 ); +int rc; + +if (mvolt ==0 ) +return pmic_bus_clrbits (AXP209_OUTPUT_CTRL , +AXP209_OUTPUT_CTRL_DCDC3 ); -return pmic_bus_write (AXP209_DCDC3_VOLTAGE , cfg); + rc =pmic_bus_write (AXP209_DCDC3_VOLTAGE , cfg); +if (rc) +return rc; + +return pmic_bus_setbits (AXP209_OUTPUT_CTRL ,AXP209_OUTPUT_CTRL_DCDC3 ); }int axp_set_aldo2 (unsigned int mvolt)
@@ -54,6 +71,10 @@ int axp_set_aldo2(unsigned int mvolt)int rc;u8 cfg, reg; +if (mvolt ==0 ) +return pmic_bus_clrbits (AXP209_OUTPUT_CTRL , +AXP209_OUTPUT_CTRL_LDO2 ); + cfg =axp209_mvolt_to_cfg (mvolt,1800 ,3300 ,100 ); rc =pmic_bus_read (AXP209_LDO24_VOLTAGE , ®);
@@ -62,19 +83,32 @@ int axp_set_aldo2(unsigned int mvolt)/* LDO2 configuration is in upper 4 bits */ reg = (reg &0x0f ) | (cfg <<4 ); -return pmic_bus_write (AXP209_LDO24_VOLTAGE , reg); + rc =pmic_bus_write (AXP209_LDO24_VOLTAGE , reg); +if (rc) +return rc; + +return pmic_bus_setbits (AXP209_OUTPUT_CTRL ,AXP209_OUTPUT_CTRL_LDO2 ); }int axp_set_aldo3 (unsigned int mvolt) {u8 cfg; +int rc; + +if (mvolt ==0 ) +return pmic_bus_clrbits (AXP209_OUTPUT_CTRL , +AXP209_OUTPUT_CTRL_LDO3 );if (mvolt ==-1 ) cfg =0x80 ;/* determined by LDO3IN pin */ else cfg =axp209_mvolt_to_cfg (mvolt,700 ,3500 ,25 ); -return pmic_bus_write (AXP209_LDO3_VOLTAGE , cfg); + rc =pmic_bus_write (AXP209_LDO3_VOLTAGE , cfg); +if (rc) +return rc; + +return pmic_bus_setbits (AXP209_OUTPUT_CTRL ,AXP209_OUTPUT_CTRL_LDO3 ); }int axp_set_aldo4 (unsigned int mvolt)
@@ -86,6 +120,10 @@ int axp_set_aldo4(unsigned int mvolt) };u8 cfg, reg; +if (mvolt ==0 ) +return pmic_bus_clrbits (AXP209_OUTPUT_CTRL , +AXP209_OUTPUT_CTRL_LDO4 ); +/* Translate mvolt to register cfg value, requested <= selected */ for (cfg =15 ; vindex[cfg] > mvolt && cfg >0 ; cfg--);
@@ -95,7 +133,11 @@ int axp_set_aldo4(unsigned int mvolt)/* LDO4 configuration is in lower 4 bits */ reg = (reg &0xf0 ) | (cfg <<0 ); -return pmic_bus_write (AXP209_LDO24_VOLTAGE , reg); + rc =pmic_bus_write (AXP209_LDO24_VOLTAGE , reg); +if (rc) +return rc; + +return pmic_bus_setbits (AXP209_OUTPUT_CTRL ,AXP209_OUTPUT_CTRL_LDO4 ); }int axp_init (void )
include/axp209.h +8 -0
@@ -7,6 +7,7 @@enum axp209_reg {AXP209_POWER_STATUS =0x00 ,AXP209_CHIP_VERSION =0x03 , +AXP209_OUTPUT_CTRL =0x12 ,AXP209_DCDC2_VOLTAGE =0x23 ,AXP209_DCDC3_VOLTAGE =0x27 ,AXP209_LDO24_VOLTAGE =0x28 ,
@@ -23,6 +24,13 @@ enum axp209_reg {#define AXP209_POWER_STATUS_ON_BY_DC (1 << 0)#define AXP209_POWER_STATUS_VBUS_USABLE (1 << 4) +#define AXP209_OUTPUT_CTRL_EXTEN (1 << 0) +#define AXP209_OUTPUT_CTRL_DCDC3 (1 << 1) +#define AXP209_OUTPUT_CTRL_LDO2 (1 << 2) +#define AXP209_OUTPUT_CTRL_LDO4 (1 << 3) +#define AXP209_OUTPUT_CTRL_DCDC2 (1 << 4) +#define AXP209_OUTPUT_CTRL_LDO3 (1 << 6) +#define AXP209_IRQ5_PEK_UP (1 << 6)#define AXP209_IRQ5_PEK_DOWN (1 << 5)
Signature · 1 line
2.5.0
PATCH 2/3 sunxi: power: Change axp209 LDO3 and LDO4 default to disabled
LDO3 and LDO4 are normally either unused, or used to power csi attached camera sensors, and as such do not need to be enabled at boot time.
--- drivers/power/Kconfig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/power/Kconfig +2 -2
@@ -126,7 +126,7 @@ config AXP_ALDO2_VOLT config AXP_ALDO3_VOLT int "axp pmic (a)ldo3 voltage" depends on AXP209_POWER || AXP221_POWER - default 2800 if AXP209_POWER + default 0 if AXP209_POWER default 3000 if MACH_SUN6I || MACH_SUN8I ---help--- Set the voltage (mV) to program the axp pmic aldo3 at, set to 0 to
@@ -137,7 +137,7 @@ config AXP_ALDO3_VOLT config AXP_ALDO4_VOLT int "axp pmic (a)ldo4 voltage" depends on AXP209_POWER - default 2800 if 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.
Signature · 1 line
2.5.0
PATCH 3/3 sunxi: power: Columbus: only enable ELDO3 when necessary
In reply to Hans de GoedeELDO3 is only necessary when using the lcd-panel, and not when using hdmi, the display code already takes care of enabling ELDO3 when necessary, so there is no need to permanently enable it in the deconfig.
--- configs/Colombus_defconfig | 1 - 1 file changed, 1 deletion(-)
configs/Colombus_defconfig +0 -1
@@ -23,5 +23,4 @@ CONFIG_SYS_EXTRA_OPTIONS="SUNXI_GMAC,RGMII" # CONFIG_CMD_FPGA is not set CONFIG_ETH_DESIGNWARE=y CONFIG_AXP_ALDO1_VOLT=3300 -CONFIG_AXP_ELDO3_VOLT=1800 CONFIG_USB_EHCI_HCD=y
Signature · 1 line
2.5.0
PATCH 1/3 sunxi: power: Add support for disabling axp209 regulators
In reply to Hans de GoedeQuoted 3 lines · Hans de Goede
Add support for disabling the regulators found on the axp209 pmic.
Signed-off-by Hans de Goede <[email protected]>
All 3 patches in this series: Acked-by: Ian Campbell <[email protected]>