diff options
author | Alec Berg <alecaberg@chromium.org> | 2015-09-06 20:29:08 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2015-09-08 21:58:21 -0700 |
commit | ebfdb59702f02dad5a7daae6b4a38f95a849cf9a (patch) | |
tree | 67099248db16760b52321eca12ccf3c823a0adcf /test/charge_manager.c | |
parent | 490e8a482f07ce8c39d6a40bcff5abb24a38449a (diff) | |
download | chrome-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.c | 91 |
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); |