summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/charge_state_v2.c4
-rw-r--r--driver/charger/bd99955.c19
-rw-r--r--driver/charger/bd99955.h4
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