summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/charge_state_v2.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/common/charge_state_v2.c b/common/charge_state_v2.c
index cb742f1bb6..7a926cfb54 100644
--- a/common/charge_state_v2.c
+++ b/common/charge_state_v2.c
@@ -1044,6 +1044,28 @@ int charge_prevent_power_on(int power_button_pressed)
));
#endif
+#ifdef CONFIG_CHARGE_MANAGER
+ /* Always prevent power on until charge current is initialized */
+ if (extpower_is_present() &&
+ (charge_manager_get_charger_current() ==
+ CHARGE_CURRENT_UNINITIALIZED))
+ prevent_power_on = 1;
+#ifdef CONFIG_BATTERY_HW_PRESENT_CUSTOM
+ /*
+ * If battery is NOT physically present then prevent power on until
+ * charge manager provides at least LIKELY_PD_USBC_POWER_MW.
+ */
+ if (extpower_is_present() && battery_hw_present() == BP_NO &&
+ charge_manager_get_power_limit_uw() <
+#ifdef CONFIG_CHARGER_LIMIT_POWER_THRESH_BAT_PCT
+ MIN(LIKELY_PD_USBC_POWER_MW * 1000,
+ CONFIG_CHARGER_LIMIT_POWER_THRESH_CHG_MW * 1000))
+#else
+ (LIKELY_PD_USBC_POWER_MW * 1000))
+#endif
+ prevent_power_on = 1;
+#endif
+#endif
return prevent_power_on;
}