diff options
author | Tom Rini <trini@konsulko.com> | 2016-04-01 08:17:55 -0400 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2016-04-01 08:17:55 -0400 |
commit | 40345e9ea74b0caef06f205364bb2cf93528cc40 (patch) | |
tree | 9f19a59f6580893d10933c3c9275552bd613cdcf /drivers/power/axp818.c | |
parent | 7f5b1e9bd952ebdac917264f03522371a473b60c (diff) | |
parent | 3ffe39ed2b66af71c7271d0cef2a248b5bf7dfdb (diff) |
Merge branch 'master' of http://git.denx.de/u-boot-sunxi
Diffstat (limited to 'drivers/power/axp818.c')
-rw-r--r-- | drivers/power/axp818.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/drivers/power/axp818.c b/drivers/power/axp818.c index e885d029840..3ac05ffefe0 100644 --- a/drivers/power/axp818.c +++ b/drivers/power/axp818.c @@ -191,6 +191,40 @@ int axp_set_eldo(int eldo_num, unsigned int mvolt) AXP818_OUTPUT_CTRL2_ELDO1_EN << (eldo_num - 1)); } +int axp_set_fldo(int fldo_num, unsigned int mvolt) +{ + int ret; + u8 cfg; + + if (fldo_num < 1 || fldo_num > 3) + return -EINVAL; + + if (mvolt == 0) + return pmic_bus_clrbits(AXP818_OUTPUT_CTRL3, + AXP818_OUTPUT_CTRL3_FLDO1_EN << (fldo_num - 1)); + + if (fldo_num < 3) { + cfg = axp818_mvolt_to_cfg(mvolt, 700, 1450, 50); + ret = pmic_bus_write(AXP818_FLDO1_CTRL + (fldo_num - 1), cfg); + } else { + /* + * Special case for FLDO3, which is DCDC5 / 2 or FLDOIN / 2 + * Since FLDOIN is unknown, test against DCDC5. + */ + if (mvolt * 2 == CONFIG_AXP_DCDC5_VOLT) + ret = pmic_bus_clrbits(AXP818_FLDO2_3_CTRL, + AXP818_FLDO2_3_CTRL_FLDO3_VOL); + else + ret = pmic_bus_setbits(AXP818_FLDO2_3_CTRL, + AXP818_FLDO2_3_CTRL_FLDO3_VOL); + } + if (ret) + return ret; + + return pmic_bus_setbits(AXP818_OUTPUT_CTRL3, + AXP818_OUTPUT_CTRL3_FLDO1_EN << (fldo_num - 1)); +} + int axp_init(void) { u8 axp_chip_id; |