diff options
Diffstat (limited to 'zephyr/shim/src/ztest_system.c')
-rw-r--r-- | zephyr/shim/src/ztest_system.c | 33 |
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; +} |