diff options
author | Vic Yang <victoryang@chromium.org> | 2013-07-25 08:35:13 +0800 |
---|---|---|
committer | ChromeBot <chrome-bot@google.com> | 2013-07-24 23:02:14 -0700 |
commit | c8f25867ebe2f1b76d0fad8a0ed1d0439940c6a6 (patch) | |
tree | fcf682a21b7bd518c01ffa54b45896291788bcfd | |
parent | 0b4a84929e065103498735f4a47817de1eccc61f (diff) | |
download | chrome-ec-c8f25867ebe2f1b76d0fad8a0ed1d0439940c6a6.tar.gz |
spring: Redetect USB host in S5
Sometimes a charger can be incorrectly detected as an USB host in S5. To
prevent this capping the charging current, let's redetect after 5
seconds in this case.
BUG=chrome-os-partner:21310
TEST=Plug in USB host in S5 and see the EC redetects it.
BRANCH=Spring
Change-Id: I044378ad8541d316ea3edaec3f27b1f2fafe2e21
Signed-off-by: Vic Yang <victoryang@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/63298
Reviewed-by: Jeremy Thorpe <jeremyt@chromium.org>
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
-rw-r--r-- | board/spring/usb_charging.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/board/spring/usb_charging.c b/board/spring/usb_charging.c index 4d810ce441..e4fd1fa8f3 100644 --- a/board/spring/usb_charging.c +++ b/board/spring/usb_charging.c @@ -714,6 +714,15 @@ static void notify_dev_type_change(int dev_type) hook_call_deferred(send_battery_key_deferred, BATTERY_KEY_DELAY); } +static int usb_want_redetect(int dev_type) +{ + if (chipset_in_state(CHIPSET_STATE_ANY_OFF) && + dev_type & TSU6721_TYPE_USB_HOST) + return 1; + return (dev_type & TSU6721_TYPE_NON_STD_CHG) || + (dev_type == TSU6721_TYPE_VBUS_DEBOUNCED); +} + static void usb_device_change(int dev_type) { @@ -746,17 +755,15 @@ static void usb_device_change(int dev_type) board_adc_watch_usb(); if (dev_type != current_dev_type) { - if ((dev_type & TSU6721_TYPE_NON_STD_CHG || - dev_type == TSU6721_TYPE_VBUS_DEBOUNCED) && + if (usb_want_redetect(dev_type) && charger_need_redetect == NO_REDETECT) { /* Schedule redetection */ charger_need_redetect = REDETECT_SCHEDULED; charger_redetection_time = get_time(); charger_redetection_time.val += NON_STD_CHARGER_REDETECT_DELAY; - } else if (dev_type != TSU6721_TYPE_VBUS_DEBOUNCED && - !(dev_type & TSU6721_TYPE_NON_STD_CHG)) { - /* Not non-std charger. Disarm redetection timer. */ + } else if (!usb_want_redetect(dev_type)) { + /* Disarm redetection timer. */ charger_need_redetect = NO_REDETECT; } notify_dev_type_change(dev_type); |