diff options
author | Shawn Nematbakhsh <shawnn@chromium.org> | 2015-02-06 11:16:42 -0800 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2015-02-08 03:27:51 +0000 |
commit | 96895743b0287cee5411bfc555d04123af86307d (patch) | |
tree | c5da5271fdec4d94b6a7b2ed677f58cf05355bcb /include/charge_manager.h | |
parent | 8d617567ca52d12352239ac5d4497ecc9620d1bd (diff) | |
download | chrome-ec-96895743b0287cee5411bfc555d04123af86307d.tar.gz |
charge_manager: Wait for dualrole determination before charging
If a dual-role charger is plugged, we will not realize it is dual-role
until after we see a type-C charge source. It can cause us to briefly
charge from a dual-role charger, which has bad side effects related to
charge override and the lightbar. Fix this by not charging from a port
until we are fairly certain that it is a dedicated charger (based upon
PD discovery timeout).
BUG=chrome-os-partner:36390
TEST=Manual on Samus. Insert 1A Apple charger, verify correct detection.
Run 'chgoverride -2' to prevent charging, then repeatedly insert +
remove a dual-role charger on the other charge port. Verify that
charging is still prevented. Finally, insert a dedicated charger and
verify that the override is removed. Also, pass unit tests and verify
correct detection in various scenarios with various chargers.
BRANCH=Samus
Change-Id: Ia4154f34dd0a850b6e72bebadbd938f034532f14
Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/247130
Reviewed-by: Alec Berg <alecaberg@chromium.org>
Diffstat (limited to 'include/charge_manager.h')
-rw-r--r-- | include/charge_manager.h | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/include/charge_manager.h b/include/charge_manager.h index 0b1de3186d..70afd2135e 100644 --- a/include/charge_manager.h +++ b/include/charge_manager.h @@ -22,9 +22,12 @@ struct charge_port_info { }; /* Called by charging tasks to update their available charge */ -void charge_manager_update(int supplier, - int charge_port, - struct charge_port_info *charge); +void charge_manager_update_charge(int supplier, + int port, + struct charge_port_info *charge); + +/* Called by charging tasks to indicate partner dualrole capability change */ +void charge_manager_update_dualrole(int port); /* Update charge ceiling for a given port */ void charge_manager_set_ceil(int port, int ceil); |