diff options
-rw-r--r-- | common/charge_state_v2.c | 4 | ||||
-rw-r--r-- | driver/charger/bd99955.c | 19 | ||||
-rw-r--r-- | driver/charger/bd99955.h | 4 |
3 files changed, 26 insertions, 1 deletions
diff --git a/common/charge_state_v2.c b/common/charge_state_v2.c index 60875d0ff6..95b46a63ed 100644 --- a/common/charge_state_v2.c +++ b/common/charge_state_v2.c @@ -415,7 +415,11 @@ static int charge_request(int voltage, int current) * Set the charge inhibit bit when possible as it appears to save * power in some cases (e.g. Nyan with BQ24735). */ +#ifdef CONFIG_CHARGER_BD99955 + if (current > 0) +#else if (voltage > 0 || current > 0) +#endif r3 = charger_set_mode(0); else r3 = charger_set_mode(CHARGE_FLAG_INHIBIT_CHARGE); diff --git a/driver/charger/bd99955.c b/driver/charger/bd99955.c index e59543bfce..f02249b068 100644 --- a/driver/charger/bd99955.c +++ b/driver/charger/bd99955.c @@ -393,6 +393,15 @@ static void usb_charger_process(enum bd99955_charge_port port) } #endif /* HAS_TASK_USB_CHG */ +static int bd99955_set_vsysreg(int voltage) +{ + /* VSYS Regulation voltage is in 64mV steps. */ + voltage &= ~0x3F; + + return ch_raw_write16(BD99955_CMD_VSYSREG_SETa, voltage, + BD99955_EXTENDED_COMMAND); +} + /* chip specific interfaces */ int charger_set_input_current(int input_current) @@ -548,7 +557,15 @@ int charger_set_mode(int mode) { int rv; - rv = bd99955_charger_enable(mode & CHARGE_FLAG_INHIBIT_CHARGE ? 0 : 1); + if (mode & CHARGE_FLAG_INHIBIT_CHARGE) { + rv = bd99955_set_vsysreg(DISCHARGE_VSYSREG); + msleep(50); + rv |= bd99955_charger_enable(0); + } else { + rv = bd99955_charger_enable(1); + msleep(1); + rv |= bd99955_set_vsysreg(CHARGE_VSYSREG); + } if (rv) return rv; diff --git a/driver/charger/bd99955.h b/driver/charger/bd99955.h index f6ef29a2c6..d53c1faf7d 100644 --- a/driver/charger/bd99955.h +++ b/driver/charger/bd99955.h @@ -39,6 +39,10 @@ enum bd99955_charge_port { #define INPUT_I_MIN 512 #define INPUT_I_STEP 32 +/* VSYSREG settings */ +#define DISCHARGE_VSYSREG 8960 +#define CHARGE_VSYSREG 6144 + /* Battery Charger Commands */ #define BD99955_CMD_CHG_CURRENT 0x14 #define BD99955_CMD_CHG_VOLTAGE 0x15 |