summaryrefslogtreecommitdiff
path: root/common/usb_charger.c
diff options
context:
space:
mode:
authorShawn Nematbakhsh <shawnn@chromium.org>2016-06-15 12:49:51 -0700
committerchrome-bot <chrome-bot@chromium.org>2016-06-16 12:27:42 -0700
commit48435ece3b65cbec5e8edf68b9d790d66f8d23be (patch)
tree14ba94a98e3be7e8f56a6c81fdc2988ae5474c15 /common/usb_charger.c
parentb12662080799859b326461ae498a10d61dd87e2e (diff)
downloadchrome-ec-48435ece3b65cbec5e8edf68b9d790d66f8d23be.tar.gz
bd99955: Improve interrupt / USB charger task wake scheme
Previously our charger ISR called a deferred task which woke our charger task. We can skip the deferred task and just wake our charger task directly. The other meaningful change here is to assume that we're using the charger for VBUS detection / BC1.2 if we have a usb_chg task, which holds true for all of our current boards with this charger. BUG=None TEST=Manual on kevin with subsequent commit. Verify charger connect / disconnect detection works properly on both ports, with zinger, donette and generic DCP charger. BRANCH=None Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org> Change-Id: Iad4f3ea90947b50859c549b591675e325717209f Reviewed-on: https://chromium-review.googlesource.com/352822 Commit-Ready: Shawn N <shawnn@chromium.org> Tested-by: Shawn N <shawnn@chromium.org> Reviewed-by: Vijay P Hiremath <vijay.p.hiremath@intel.com> Reviewed-by: Mary Ruthven <mruthven@chromium.org> Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
Diffstat (limited to 'common/usb_charger.c')
-rw-r--r--common/usb_charger.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/common/usb_charger.c b/common/usb_charger.c
index 33754120a1..2cd9cfbcd3 100644
--- a/common/usb_charger.c
+++ b/common/usb_charger.c
@@ -59,14 +59,13 @@ int usb_charger_port_is_sourcing_vbus(int port)
void usb_charger_vbus_change(int port, int vbus_level)
{
/* If VBUS has transitioned low, notify PD module directly */
- pd_vbus_low(port);
+ if (!vbus_level)
+ pd_vbus_low(port);
+
/* Update VBUS supplier and signal VBUS change to USB_CHG task */
update_vbus_supplier(port, vbus_level);
-#ifdef HAS_TASK_USB_CHG
- /* USB Charger task */
- task_set_event(TASK_ID_USB_CHG, (1 << port), 0);
-#else
+#ifdef HAS_TASK_USB_CHG_P0
/* USB Charger task(s) */
task_set_event(USB_CHG_PORT_TO_TASK_ID(port), USB_CHG_EVENT_VBUS, 0);
#endif