summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Nematbakhsh <shawnn@chromium.org>2014-10-09 15:18:45 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-11-11 22:57:39 +0000
commit5fdcfbcdf76d484d2ca9de8446956fbed9eabd12 (patch)
tree350c67d2db260f7af599f6fb41644bc702c34dda
parent3009fb078ae7bf674d7200429ae72e8847b84668 (diff)
downloadchrome-ec-5fdcfbcdf76d484d2ca9de8446956fbed9eabd12.tar.gz
CHERRY-PICK: pi3usb9281: Add function for translating registers to current limit
Decode Pericom registers to current limits. BUG=chrome-os-partner:32003 TEST=Manual on samus_pd. Insert 1A Apple charger, verify current limit is correctly detected as 1A. BRANCH=samus Change-Id: Ib78f6c32b73d4bb7fbbf3b1dd285dfdad8c67e78 Original-Change-Id: I310d9f22cef80e97c1734e6a56f0034ebe01df31 Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/222638 Reviewed-by: Alec Berg <alecaberg@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/229150 Reviewed-by: Mohammed Habibulla <moch@chromium.org> Commit-Queue: Mohammed Habibulla <moch@chromium.org> Tested-by: Mohammed Habibulla <moch@chromium.org>
-rw-r--r--driver/pi3usb9281.h3
-rw-r--r--driver/usb_switch_pi3usb9281.c22
2 files changed, 25 insertions, 0 deletions
diff --git a/driver/pi3usb9281.h b/driver/pi3usb9281.h
index ebcd333d80..d26295b846 100644
--- a/driver/pi3usb9281.h
+++ b/driver/pi3usb9281.h
@@ -74,6 +74,9 @@ int pi3usb9281_get_device_type(uint8_t chip_idx);
/* Get attached charger status. */
int pi3usb9281_get_charger_status(uint8_t chip_idx);
+/* Get charger current limit based on device type and charger status. */
+int pi3usb9281_get_ilim(int device_type, int charger_status);
+
/* Set switch configuration to manual. */
int pi3usb9281_set_switch_manual(uint8_t chip_idx, int val);
diff --git a/driver/usb_switch_pi3usb9281.c b/driver/usb_switch_pi3usb9281.c
index b7a82a2e09..78580fc7a8 100644
--- a/driver/usb_switch_pi3usb9281.c
+++ b/driver/usb_switch_pi3usb9281.c
@@ -119,6 +119,28 @@ int pi3usb9281_get_charger_status(uint8_t chip_idx)
return pi3usb9281_read(chip_idx, PI3USB9281_REG_CHG_STATUS) & 0x1f;
}
+int pi3usb9281_get_ilim(int device_type, int charger_status)
+{
+ /* Limit USB port current. 500mA for not listed types. */
+ int current_limit_ma = 500;
+
+ if (charger_status & PI3USB9281_CHG_CAR_TYPE1 ||
+ charger_status & PI3USB9281_CHG_CAR_TYPE2)
+ current_limit_ma = 3000;
+ else if (charger_status & PI3USB9281_CHG_APPLE_1A)
+ current_limit_ma = 1000;
+ else if (charger_status & PI3USB9281_CHG_APPLE_2A)
+ current_limit_ma = 2000;
+ else if (charger_status & PI3USB9281_CHG_APPLE_2_4A)
+ current_limit_ma = 2400;
+ else if (device_type & PI3USB9281_TYPE_CDP)
+ current_limit_ma = 1500;
+ else if (device_type & PI3USB9281_TYPE_DCP)
+ current_limit_ma = 1500;
+
+ return current_limit_ma;
+}
+
int pi3usb9281_get_vbus(uint8_t chip_idx)
{
int vbus = pi3usb9281_read(chip_idx, PI3USB9281_REG_VBUS);