summaryrefslogtreecommitdiff
path: root/test/charge_manager.c
diff options
context:
space:
mode:
authorAlec Berg <alecaberg@chromium.org>2015-09-06 20:29:08 -0700
committerchrome-bot <chrome-bot@chromium.org>2015-09-08 21:58:21 -0700
commitebfdb59702f02dad5a7daae6b4a38f95a849cf9a (patch)
tree67099248db16760b52321eca12ccf3c823a0adcf /test/charge_manager.c
parent490e8a482f07ce8c39d6a40bcff5abb24a38449a (diff)
downloadchrome-ec-ebfdb59702f02dad5a7daae6b4a38f95a849cf9a.tar.gz
charge_manager: add option to charge from dual-role devices
Add option to charge automatically from dual-role devices. This also changes the charge override behavior such that any new device attached will clear the override because any new source is a potential device we might charge from. BUG=chrome-os-partner:44958 BRANCH=smaug TEST=tested charge_manager unittests with CONFIG_CHARGE_MANAGER_DRP_CHARGING both defined and undefined Change-Id: Iac77ff0c501826d5fb5a9d50f88399ebc3955b87 Signed-off-by: Alec Berg <alecaberg@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/297789 Reviewed-by: Shawn N <shawnn@chromium.org>
Diffstat (limited to 'test/charge_manager.c')
-rw-r--r--test/charge_manager.c91
1 files changed, 73 insertions, 18 deletions
diff --git a/test/charge_manager.c b/test/charge_manager.c
index 09b4540e8c..756926609c 100644
--- a/test/charge_manager.c
+++ b/test/charge_manager.c
@@ -463,17 +463,21 @@ static int test_dual_role(void)
/* Initialize table to no charge. */
initialize_charge_table(0, 5000, 1000);
- /*
- * Mark P0 as dual-role and set a charge. Verify that we don't charge
- * from the port.
- */
+ /* Mark P0 as dual-role and set a charge. */
charge_manager_update_dualrole(0, CAP_DUALROLE);
charge.current = 500;
charge.voltage = 5000;
charge_manager_update_charge(CHARGE_SUPPLIER_TEST2, 0, &charge);
wait_for_charge_manager_refresh();
+#ifdef CONFIG_CHARGE_MANAGER_DRP_CHARGING
+ /* Verify we do charge from dual-role port */
+ TEST_ASSERT(active_charge_port == 0);
+ TEST_ASSERT(active_charge_limit == 500);
+#else
+ /* Verify we don't charge from dual-role port */
TEST_ASSERT(active_charge_port == CHARGE_PORT_NONE);
TEST_ASSERT(active_charge_limit == 0);
+#endif
/* Mark P0 as the override port, verify that we now charge. */
charge_manager_set_override(0);
@@ -482,12 +486,17 @@ static int test_dual_role(void)
TEST_ASSERT(active_charge_limit == 500);
TEST_ASSERT(pd_get_role(0) == PD_ROLE_SINK);
- /* Remove override and verify we go back to not charging */
+ /* Remove override and verify we go back to previous state */
charge_manager_set_override(OVERRIDE_OFF);
wait_for_charge_manager_refresh();
+#ifdef CONFIG_CHARGE_MANAGER_DRP_CHARGING
+ TEST_ASSERT(active_charge_port == 0);
+ TEST_ASSERT(active_charge_limit == 500);
+#else
TEST_ASSERT(active_charge_port == CHARGE_PORT_NONE);
TEST_ASSERT(active_charge_limit == 0);
TEST_ASSERT(pd_get_role(0) == PD_ROLE_SOURCE);
+#endif
/* Mark P0 as the override port, verify that we again charge. */
charge_manager_set_override(0);
@@ -530,9 +539,14 @@ static int test_dual_role(void)
charge.current = 400;
charge_manager_update_charge(CHARGE_SUPPLIER_TEST6, 1, &charge);
wait_for_charge_manager_refresh();
+#ifdef CONFIG_CHARGE_MANAGER_DRP_CHARGING
+ TEST_ASSERT(active_charge_port == 0);
+ TEST_ASSERT(active_charge_limit == 600);
+#else
TEST_ASSERT(active_charge_port == 1);
TEST_ASSERT(active_charge_limit == 400);
TEST_ASSERT(pd_get_role(0) == PD_ROLE_SOURCE);
+#endif
/*
* Verify the port is handled normally if the dual-role source is
@@ -548,8 +562,8 @@ static int test_dual_role(void)
TEST_ASSERT(active_charge_limit == 500);
/*
- * Verify that we charge from the dedicated port if a dual-role
- * source is also attached.
+ * Test one port connected to dedicated charger and one connected
+ * to dual-role device.
*/
charge_manager_update_dualrole(0, CAP_DUALROLE);
charge.current = 0;
@@ -559,9 +573,19 @@ static int test_dual_role(void)
charge.current = 200;
charge_manager_update_charge(CHARGE_SUPPLIER_TEST6, 1, &charge);
wait_for_charge_manager_refresh();
+#ifdef CONFIG_CHARGE_MANAGER_DRP_CHARGING
+ /* Verify we charge from port with higher priority */
+ TEST_ASSERT(active_charge_port == 0);
+ TEST_ASSERT(active_charge_limit == 500);
+#else
+ /*
+ * Verify that we charge from the dedicated port if a dual-role
+ * source is also attached.
+ */
TEST_ASSERT(active_charge_port == 1);
TEST_ASSERT(active_charge_limit == 200);
TEST_ASSERT(pd_get_role(0) == PD_ROLE_SOURCE);
+#endif
return EC_SUCCESS;
}
@@ -605,19 +629,23 @@ static int test_unknown_dualrole_capability(void)
struct charge_port_info charge;
/* Initialize table to no charge. */
- initialize_charge_table(0, 5000, 1000);
+ initialize_charge_table(0, 5000, 2000);
TEST_ASSERT(active_charge_port == CHARGE_PORT_NONE);
- /*
- * Set a charge on P0 with unknown dualrole capability,
- * verify that we don't charge from the port.
- */
+ /* Set a charge on P0 with unknown dualrole capability, */
charge.current = 500;
charge.voltage = 5000;
charge_manager_update_dualrole(0, CAP_UNKNOWN);
charge_manager_update_charge(CHARGE_SUPPLIER_TEST2, 0, &charge);
wait_for_charge_manager_refresh();
+#ifdef CONFIG_CHARGE_MANAGER_DRP_CHARGING
+ /* Verify we do charge from that port */
+ TEST_ASSERT(active_charge_port == 0);
+ TEST_ASSERT(active_charge_limit == 500);
+#else
+ /* Verify that we don't charge from the port. */
TEST_ASSERT(active_charge_port == CHARGE_PORT_NONE);
+#endif
/* Toggle to dedicated and verify port becomes active. */
charge_manager_update_dualrole(0, CAP_DEDICATED);
@@ -629,14 +657,24 @@ static int test_unknown_dualrole_capability(void)
charge_manager_update_dualrole(1, CAP_DUALROLE);
charge_manager_update_charge(CHARGE_SUPPLIER_TEST2, 1, &charge);
wait_for_charge_manager_refresh();
+#ifdef CONFIG_CHARGE_MANAGER_DRP_CHARGING
+ TEST_ASSERT(active_charge_port == 1);
+ TEST_ASSERT(active_charge_limit == 1000);
+#else
TEST_ASSERT(active_charge_port == 0);
+#endif
/* Remove charger on port 0 */
charge.current = 0;
charge_manager_update_dualrole(0, CAP_UNKNOWN);
charge_manager_update_charge(CHARGE_SUPPLIER_TEST2, 0, &charge);
wait_for_charge_manager_refresh();
+#ifdef CONFIG_CHARGE_MANAGER_DRP_CHARGING
+ TEST_ASSERT(active_charge_port == 1);
+ TEST_ASSERT(active_charge_limit == 1000);
+#else
TEST_ASSERT(active_charge_port == CHARGE_PORT_NONE);
+#endif
/* Set override to charge on port 1 */
charge_manager_set_override(1);
@@ -651,26 +689,43 @@ static int test_unknown_dualrole_capability(void)
wait_for_charge_manager_refresh();
TEST_ASSERT(active_charge_port == 1);
- /*
- * Insert UNKNOWN capability charger on port 0, verify that override
- * is still kept.
- */
+ /* Insert UNKNOWN capability charger on port 0 */
charge_manager_update_dualrole(0, CAP_UNKNOWN);
charge.current = 2000;
charge_manager_update_charge(CHARGE_SUPPLIER_TEST2, 0, &charge);
wait_for_charge_manager_refresh();
wait_for_charge_manager_refresh();
+ wait_for_charge_manager_refresh();
+#ifdef CONFIG_CHARGE_MANAGER_DRP_CHARGING
+ /* Verify override is removed */
+ TEST_ASSERT(active_charge_port == 0);
+ TEST_ASSERT(active_charge_limit == 2000);
+#else
+ /* Verify override is still kept */
TEST_ASSERT(active_charge_port == 1);
+#endif
- /* Toggle to dualrole, verify that override is still kept. */
+ /* Toggle to dualrole */
charge_manager_update_dualrole(0, CAP_DUALROLE);
wait_for_charge_manager_refresh();
+#ifdef CONFIG_CHARGE_MANAGER_DRP_CHARGING
+ /* Verify no change */
+ TEST_ASSERT(active_charge_port == 0);
+#else
+ /* Verify override is still kept */
TEST_ASSERT(active_charge_port == 1);
+#endif
- /* Toggle to dedicated, verify that override is removed. */
+ /* Toggle to dedicated */
charge_manager_update_dualrole(0, CAP_UNKNOWN);
wait_for_charge_manager_refresh();
+#ifdef CONFIG_CHARGE_MANAGER_DRP_CHARGING
+ /* Verify no change */
+ TEST_ASSERT(active_charge_port == 0);
+#else
+ /* Verify override is still kept */
TEST_ASSERT(active_charge_port == 1);
+#endif
charge_manager_update_dualrole(0, CAP_DEDICATED);
wait_for_charge_manager_refresh();
TEST_ASSERT(active_charge_port == 0);