Merge tag 'for-v2020.07' of https://gitlab.denx.de/u-boot/custodians/u-boot-ubi
[oweals/u-boot.git] / drivers / power / axp209.c
index cf138fc7227391c70dc6b30a0c1deb304fc4e2aa..67b420910c9b39c36bf76164aa66ac202dbe8995 100644 (file)
@@ -122,6 +122,29 @@ int axp_set_aldo3(unsigned int mvolt)
        if (rc)
                return rc;
 
+#ifdef CONFIG_AXP_ALDO3_INRUSH_QUIRK
+       /*
+        * On some boards, LDO3 has a too big capacitor installed. When
+        * turning on LDO3, this causes the AXP209 to shutdown on
+        * voltages over 1.9 volt. As a workaround, we enable LDO3
+        * first with the lowest possible voltage. If this still causes
+        * high inrush currents, the voltage slope should be increased.
+        */
+       rc = pmic_bus_read(AXP209_OUTPUT_CTRL, &cfg);
+       if (rc)
+               return rc;
+
+       if (!(cfg & AXP209_OUTPUT_CTRL_LDO3)) {
+               rc = pmic_bus_write(AXP209_LDO3_VOLTAGE, 0x0); /* 0.7 Volt */
+               mdelay(1);
+               rc |= pmic_bus_setbits(AXP209_OUTPUT_CTRL,
+                                      AXP209_OUTPUT_CTRL_LDO3);
+
+               if (rc)
+                       return rc;
+       }
+#endif
+
        if (mvolt == -1) {
                cfg = AXP209_LDO3_VOLTAGE_FROM_LDO3IN;
        } else {