summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Zhang <Ryan.Zhang@quanta.corp-partner.google.com>2017-07-17 09:42:23 +0800
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2017-07-17 15:58:20 +0000
commitbc2b4f4c88143861a146b9193bbb523da0dde064 (patch)
treecacfc1a22edffac87faff9cfcec60947eb5a5027
parent60186a15cbd127bda866f4a392af8e05e1303505 (diff)
downloadchrome-ec-bc2b4f4c88143861a146b9193bbb523da0dde064.tar.gz
elm: some 15W TypeC adapters will cause CPU throttled
We get adapter type: CHARGE_SUPPLIER_TYPEC and set input current limit to 3000mA and PROCHOT_AC is 3072mA by default. However these two limitation values are so close that ISL9237 will trigger prochot and cause CPU throttled. BUG=b:62291338 BRANCH=oak-8438.B TEST=CPU throttling was release after 0x47 is set to 3200 Signed-off-by: Ryan Zhang <ryan.zhang@quanta.corp-partner.google.com> Change-Id: I9d25901c14e37d27883d87427cc660004e0624d6 Reviewed-on: https://chromium-review.googlesource.com/572888 Commit-Queue: Ryan Zhang <ryan.zhang@quanta.corp-partner.google.com> Tested-by: Ryan Zhang <ryan.zhang@quanta.corp-partner.google.com> Reviewed-by: Shawn N <shawnn@chromium.org>
-rw-r--r--driver/charger/isl9237.c17
-rw-r--r--driver/charger/isl9237.h6
2 files changed, 23 insertions, 0 deletions
diff --git a/driver/charger/isl9237.c b/driver/charger/isl9237.c
index 763c17af7b..f0f3eeb4dd 100644
--- a/driver/charger/isl9237.c
+++ b/driver/charger/isl9237.c
@@ -70,6 +70,16 @@ static int isl9237_set_voltage(uint16_t voltage)
return raw_write16(ISL9237_REG_SYS_VOLTAGE_MAX, voltage);
}
+static int get_prochot_ac_limit(void)
+{
+ int new_limit = AC_CURRENT_TO_REG(PD_MAX_CURRENT_MA *
+ ISL9237_PROCHOT_AC_TOLERANCE) +
+ ISL9237_PROCHOT_AC_STEP;
+
+ /* round new value by minimum step */
+ return new_limit - (new_limit % ISL9237_PROCHOT_AC_STEP);
+}
+
/* chip specific interfaces */
int charger_set_input_current(int input_current)
@@ -256,6 +266,13 @@ int charger_post_init(void)
if (rv)
return rv;
+ /*
+ * Set new threshold due to tolerance of isl9237.
+ */
+ rv = raw_write16(ISL9237_REG_PROCHOT_AC, get_prochot_ac_limit());
+ if (rv)
+ return rv;
+
#ifdef CONFIG_CHARGE_RAMP_HW
/* Set input voltage regulation reference voltage for charge ramp */
reg &= ~ISL9237_C0_VREG_REF_MASK;
diff --git a/driver/charger/isl9237.h b/driver/charger/isl9237.h
index 27a3bab377..5a8b51f926 100644
--- a/driver/charger/isl9237.h
+++ b/driver/charger/isl9237.h
@@ -77,6 +77,12 @@
#define ISL9237_PROCHOT_AC_REG_MAX 6400
#define ISL9237_PROCHOT_DC_REG_MAX 12800
+/* AC PROCHOT minimum value for each step */
+#define ISL9237_PROCHOT_AC_STEP 128
+
+/* ISL9237 has -3% ~ 3% tolerance by itself */
+#define ISL9237_PROCHOT_AC_TOLERANCE 1.05
+
/* Control0: adapter voltage regulation reference */
#define ISL9237_C0_VREG_REF_3900 0
#define ISL9237_C0_VREG_REF_4200 1