summaryrefslogtreecommitdiff
path: root/drivers/power/axp818.c
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2016-04-01 08:17:55 -0400
committerTom Rini <trini@konsulko.com>2016-04-01 08:17:55 -0400
commit40345e9ea74b0caef06f205364bb2cf93528cc40 (patch)
tree9f19a59f6580893d10933c3c9275552bd613cdcf /drivers/power/axp818.c
parent7f5b1e9bd952ebdac917264f03522371a473b60c (diff)
parent3ffe39ed2b66af71c7271d0cef2a248b5bf7dfdb (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.c34
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;