diff options
author | Ryan Zhang <Ryan.Zhang@quanta.corp-partner.google.com> | 2017-07-17 09:42:23 +0800 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2017-07-17 15:58:20 +0000 |
commit | bc2b4f4c88143861a146b9193bbb523da0dde064 (patch) | |
tree | cacfc1a22edffac87faff9cfcec60947eb5a5027 | |
parent | 60186a15cbd127bda866f4a392af8e05e1303505 (diff) | |
download | chrome-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.c | 17 | ||||
-rw-r--r-- | driver/charger/isl9237.h | 6 |
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 |