diff options
author | Shawn Nematbakhsh <shawnn@chromium.org> | 2017-10-23 15:45:16 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2017-11-02 23:21:52 -0700 |
commit | 2f127f3081be00dc318b4e0b9a9947c68b24849d (patch) | |
tree | a5ca33f3e2654f788e676790dee4d5d65a18b773 /test | |
parent | f28ab5c2ecd0549a72dc042564374faade58abcc (diff) | |
download | chrome-ec-2f127f3081be00dc318b4e0b9a9947c68b24849d.tar.gz |
charge_manager: Enter safe mode at boot
Charge port / current selection often needs to be significantly altered
when a battery cannot provide sufficient charge, so have charge_manager
initially enter safe mode. After a battery with sufficient capacity has
been identified, charge manager will leave safe mode, and port / current
selection will return to standard rules.
BUG=chromium:777596
BRANCH=None
TEST=Pass charge_manager unit tests. On kevin, remove battery, attach
Apple PD charger, verify safe mode is not exited and device does not
brown out. Hot-plug battery and verify safe mode is exited. Next,
remove battery, attach to Samus, verify safe mode is not exited and
device doesn't brown out. Hot-plug battery, verify that safe mode is
exited and no active charge port, due to dual-role exclusion.
Change-Id: I7784865750087a037aad8dbbac058b22c77ba6d4
Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/733954
Commit-Ready: Shawn N <shawnn@chromium.org>
Tested-by: Shawn N <shawnn@chromium.org>
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
Diffstat (limited to 'test')
-rw-r--r-- | test/charge_manager.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/test/charge_manager.c b/test/charge_manager.c index b40d42611a..90bdf37a66 100644 --- a/test/charge_manager.c +++ b/test/charge_manager.c @@ -164,6 +164,48 @@ static int test_initialization(void) return EC_SUCCESS; } +static int test_safe_mode(void) +{ + int port = 0; + struct charge_port_info charge; + + /* Initialize table to no charge */ + initialize_charge_table(0, 5000, 5000); + + /* + * Set a 2A non-dedicated charger on port 0 and verify that + * it is selected, due to safe mode. + */ + charge_manager_update_dualrole(port, CAP_DUALROLE); + charge.current = 2000; + charge.voltage = 5000; + charge_manager_update_charge(CHARGE_SUPPLIER_TEST2, port, &charge); + wait_for_charge_manager_refresh(); + TEST_ASSERT(active_charge_port == port); + TEST_ASSERT(active_charge_limit == 2000); + + /* Verify ceil is ignored, due to safe mode. */ + charge_manager_set_ceil(port, 0, 500); + wait_for_charge_manager_refresh(); + TEST_ASSERT(active_charge_limit == 2000); + + /* + * Leave safe mode and verify normal port selection rules go + * into effect. + */ + charge_manager_leave_safe_mode(); + wait_for_charge_manager_refresh(); +#ifdef CONFIG_CHARGE_MANAGER_DRP_CHARGING + TEST_ASSERT(active_charge_port == port); + TEST_ASSERT(active_charge_limit == 500); +#else + TEST_ASSERT(active_charge_port == CHARGE_PORT_NONE); +#endif + + /* For subsequent tests, safe mode is exited. */ + return EC_SUCCESS; +} + static int test_priority(void) { struct charge_port_info charge; @@ -749,6 +791,7 @@ void run_test(void) test_reset(); RUN_TEST(test_initialization); + RUN_TEST(test_safe_mode); RUN_TEST(test_priority); RUN_TEST(test_charge_ceil); RUN_TEST(test_new_power_request); |