summaryrefslogtreecommitdiff
path: root/zephyr/shim/src/ztest_system.c
diff options
context:
space:
mode:
Diffstat (limited to 'zephyr/shim/src/ztest_system.c')
-rw-r--r--zephyr/shim/src/ztest_system.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/zephyr/shim/src/ztest_system.c b/zephyr/shim/src/ztest_system.c
index 7da949dd84..7df64d3b2b 100644
--- a/zephyr/shim/src/ztest_system.c
+++ b/zephyr/shim/src/ztest_system.c
@@ -5,6 +5,10 @@
#include "system.h"
#include "cros_version.h"
+#include "battery.h"
+#include "charge_manager.h"
+
+#define CPRINTS(format, args...) cprints(CC_SYSTEM, format, ## args)
/* Ongoing actions preventing going into deep-sleep mode. */
atomic_t sleep_mask;
@@ -80,3 +84,32 @@ void system_reset(int flags)
{
__builtin_unreachable();
}
+
+int system_can_boot_ap(void)
+{
+ int soc = -1;
+ int pow = -1;
+
+#if defined(CONFIG_BATTERY) && \
+ defined(CONFIG_CHARGER_MIN_BAT_PCT_FOR_POWER_ON)
+ /* Require a minimum battery level to power on. If battery isn't
+ * present, battery_state_of_charge_abs returns false.
+ */
+ if (battery_state_of_charge_abs(&soc) == EC_SUCCESS &&
+ soc >= CONFIG_CHARGER_MIN_BAT_PCT_FOR_POWER_ON)
+ return 1;
+#endif
+
+#if defined(CONFIG_CHARGE_MANAGER) && \
+ defined(CONFIG_CHARGER_MIN_POWER_MW_FOR_POWER_ON)
+ pow = charge_manager_get_power_limit_uw() / 1000;
+ if (pow >= CONFIG_CHARGER_MIN_POWER_MW_FOR_POWER_ON)
+ return 1;
+#else
+ /* For fixed AC system */
+ return 1;
+#endif
+
+ CPRINTS("Not enough power to boot (%d %%, %d mW)", soc, pow);
+ return 0;
+}