summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVic Yang <victoryang@chromium.org>2013-07-25 08:35:13 +0800
committerChromeBot <chrome-bot@google.com>2013-07-24 23:02:14 -0700
commitc8f25867ebe2f1b76d0fad8a0ed1d0439940c6a6 (patch)
treefcf682a21b7bd518c01ffa54b45896291788bcfd
parent0b4a84929e065103498735f4a47817de1eccc61f (diff)
downloadchrome-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.c17
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);