diff options
Diffstat (limited to 'driver/charger/isl9237.c')
-rw-r--r-- | driver/charger/isl9237.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/driver/charger/isl9237.c b/driver/charger/isl9237.c index f32ca805e9..94b8669ce6 100644 --- a/driver/charger/isl9237.c +++ b/driver/charger/isl9237.c @@ -29,6 +29,8 @@ /* Console output macros */ #define CPRINTF(format, args...) cprintf(CC_CHARGER, format, ## args) +static int learn_mode; + /* Charger parameters */ static const struct charger_info isl9237_charger_info = { .name = CHARGER_NAME, @@ -172,8 +174,17 @@ int charger_get_status(int *status) int charger_set_mode(int mode) { + int rv = EC_SUCCESS; + + /* + * See crosbug.com/p/51196. Always disable learn mode unless it was set + * explicitly. + */ + if (!learn_mode) + rv = charger_discharge_on_ac(0); + /* ISL9237 does not support inhibit mode setting. */ - return EC_SUCCESS; + return rv; } int charger_get_current(int *current) @@ -272,7 +283,10 @@ int charger_discharge_on_ac(int enable) else control1 &= ~ISL9237_C1_LEARN_MODE_ENABLE; - return raw_write16(ISL9237_REG_CONTROL1, control1); + rv = raw_write16(ISL9237_REG_CONTROL1, control1); + + learn_mode = !rv && enable; + return rv; } /*****************************************************************************/ |