summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorShawn Nematbakhsh <shawnn@chromium.org>2017-10-23 15:45:16 -0700
committerchrome-bot <chrome-bot@chromium.org>2017-11-02 23:21:52 -0700
commit2f127f3081be00dc318b4e0b9a9947c68b24849d (patch)
treea5ca33f3e2654f788e676790dee4d5d65a18b773 /test
parentf28ab5c2ecd0549a72dc042564374faade58abcc (diff)
downloadchrome-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.c43
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);