summaryrefslogtreecommitdiffstats
path: root/drivers/power
diff options
context:
space:
mode:
authorChen-Yu Tsai <wens@csie.org>2016-03-30 00:26:48 +0800
committerHans de Goede <hdegoede@redhat.com>2016-03-31 17:03:58 +0200
commit38491d9c6515eafd97d881cab0420652f07d92a5 (patch)
tree43c2174a8b6f4ecde4a85d96271b0ede5d57f20d /drivers/power
parent4c6a9ca103f953b6e5e6dfcd56fb558e61ca3c05 (diff)
downloadblackbird-obmc-uboot-38491d9c6515eafd97d881cab0420652f07d92a5.tar.gz
blackbird-obmc-uboot-38491d9c6515eafd97d881cab0420652f07d92a5.zip
power: axp818: Add support for FLDOs
The FLDOs on AXP818 PMIC normally provide power to CPUS and USB HSIC PHY on the A83T/H8. Signed-off-by: Chen-Yu Tsai <wens@csie.org> Reviewed-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Diffstat (limited to 'drivers/power')
-rw-r--r--drivers/power/Kconfig27
-rw-r--r--drivers/power/axp818.c34
2 files changed, 61 insertions, 0 deletions
diff --git a/drivers/power/Kconfig b/drivers/power/Kconfig
index 548fe2617d..937b9aa246 100644
--- a/drivers/power/Kconfig
+++ b/drivers/power/Kconfig
@@ -238,6 +238,33 @@ config AXP_ELDO3_VOLT
1.2V for the SSD2828 chip (converter of parallel LCD interface
into MIPI DSI).
+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 eldo2 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 SY8106A_VOUT1_VOLT
int "SY8106A pmic VOUT1 voltage"
depends on SY8106A_POWER
diff --git a/drivers/power/axp818.c b/drivers/power/axp818.c
index e885d02984..3ac05ffefe 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;
OpenPOWER on IntegriCloud