summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAseda Aboagye <aaboagye@google.com>2016-07-13 14:22:20 -0700
committerchrome-bot <chrome-bot@chromium.org>2016-07-18 21:47:50 -0700
commitb7a604728abe7e332a616b0cad761dec6e501877 (patch)
treef5d233f9b14ef9b36f246e4362ba6ddfd3688d40
parent3b241c212ecc17dd9151694609045b1aac903953 (diff)
downloadchrome-ec-b7a604728abe7e332a616b0cad761dec6e501877.tar.gz
bd99955: Make changes for new OTP change.
There's a new OTP change for the BD99955 and therefore the following changes needed to be made. - Change VFASTCHG_SET1 to 8.704V before CHG_EN is set to 1. - Change VSYS_REG to 6.144V when starting Fast Charging. - Change VSYS_REG back to 8.906V when Fast Charge is finished. - Wait for 50ms to set CHG_EN to off (0) after Fast Charging has ended. BUG=chrome-os-partner:55220 BUG=chrome-os-partner:55238 BRANCH=None TEST=Flash kevin, plug discharged battery in. Plug AC in. `bd99955 r 0x11 1' and verify that VSYSREG is set to 0x1800 (6144mV). TEST=`bd99955 r 0x1a 1' and verify that VFASTCHARGE is set to 0x2200 (8704mV). TEST=Remove battery. `bd99955 r 0x11 1' and verify that VSYSREG is set to 0x2300 (8960 mV). TEST=Plug in battery and let charge to full. Verify that VSYSREG is set to 0x2300 (8960 mV). Change-Id: I5e5ca2cdcd4ead383416901c904df1e6fe5a9e28 Signed-off-by: Aseda Aboagye <aaboagye@google.com> Reviewed-on: https://chromium-review.googlesource.com/360421 Commit-Ready: Aseda Aboagye <aaboagye@chromium.org> Tested-by: Aseda Aboagye <aaboagye@chromium.org> Reviewed-by: Mary Ruthven <mruthven@chromium.org>
-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