power_failed |= axp221_set_aldo1(CONFIG_AXP221_ALDO1_VOLT);
        power_failed |= axp221_set_aldo2(CONFIG_AXP221_ALDO2_VOLT);
        power_failed |= axp221_set_aldo3(CONFIG_AXP221_ALDO3_VOLT);
+       power_failed |= axp221_set_eldo(3, CONFIG_AXP221_ELDO3_VOLT);
 #endif
 
        printf("DRAM:");
 
        Set the voltage (mV) to program the axp221 aldo3 at, set to 0 to
        disable aldo3. This is typically connected to VCC-PLL and AVCC and
        must be set to 3V.
+
+config AXP221_ELDO3_VOLT
+       int "axp221 eldo3 voltage"
+       depends on AXP221_POWER
+       default 0
+       ---help---
+       Set the voltage (mV) to program the axp221 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).
 
                              AXP221_OUTPUT_CTRL3_ALDO3_EN);
 }
 
+int axp221_set_eldo(int eldo_num, unsigned int mvolt)
+{
+       int ret;
+       u8 cfg = axp221_mvolt_to_cfg(mvolt, 700, 3300, 100);
+       u8 addr, bits;
+
+       switch (eldo_num) {
+       case 3:
+               addr = AXP221_ELDO3_CTRL;
+               bits = AXP221_OUTPUT_CTRL2_ELDO3_EN;
+               break;
+       case 2:
+               addr = AXP221_ELDO2_CTRL;
+               bits = AXP221_OUTPUT_CTRL2_ELDO2_EN;
+               break;
+       case 1:
+               addr = AXP221_ELDO1_CTRL;
+               bits = AXP221_OUTPUT_CTRL2_ELDO1_EN;
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       if (mvolt == 0)
+               return axp221_clrbits(AXP221_OUTPUT_CTRL2, bits);
+
+       ret = pmic_bus_write(addr, cfg);
+       if (ret)
+               return ret;
+
+       return axp221_setbits(AXP221_OUTPUT_CTRL2, bits);
+}
+
 int axp221_init(void)
 {
        /* This cannot be 0 because it is used in SPL before BSS is ready */
 
 #define AXP221_OUTPUT_CTRL1_ALDO1_EN   (1 << 6)
 #define AXP221_OUTPUT_CTRL1_ALDO2_EN   (1 << 7)
 #define AXP221_OUTPUT_CTRL2    0x12
+#define AXP221_OUTPUT_CTRL2_ELDO1_EN   (1 << 0)
+#define AXP221_OUTPUT_CTRL2_ELDO2_EN   (1 << 1)
+#define AXP221_OUTPUT_CTRL2_ELDO3_EN   (1 << 2)
 #define AXP221_OUTPUT_CTRL2_DLDO1_EN   (1 << 3)
 #define AXP221_OUTPUT_CTRL2_DLDO2_EN   (1 << 4)
 #define AXP221_OUTPUT_CTRL2_DLDO3_EN   (1 << 5)
 #define AXP221_DLDO2_CTRL      0x16
 #define AXP221_DLDO3_CTRL      0x17
 #define AXP221_DLDO4_CTRL      0x18
+#define AXP221_ELDO1_CTRL      0x19
+#define AXP221_ELDO2_CTRL      0x1a
+#define AXP221_ELDO3_CTRL      0x1b
 #define AXP221_DCDC1_CTRL      0x21
 #define AXP221_DCDC2_CTRL      0x22
 #define AXP221_DCDC3_CTRL      0x23
 int axp221_set_aldo1(unsigned int mvolt);
 int axp221_set_aldo2(unsigned int mvolt);
 int axp221_set_aldo3(unsigned int mvolt);
+int axp221_set_eldo(int eldo_num, unsigned int mvolt);
 int axp221_init(void);
 int axp221_get_sid(unsigned int *sid);
 int axp_drivebus_enable(void);