summaryrefslogtreecommitdiff
path: root/driver
diff options
context:
space:
mode:
authorShawn Nematbakhsh <shawnn@chromium.org>2016-07-20 14:30:24 -0700
committerchrome-bot <chrome-bot@chromium.org>2016-07-20 22:21:44 -0700
commit27aac6efb6cf9945cc8fa41d669d752b604f7d87 (patch)
treec82ad1bcb7af4ebbcf8be0bca24e697b1c0cf27c /driver
parent7f2e7f7212499ca5c2bc5d65a0d8506def64a039 (diff)
downloadchrome-ec-27aac6efb6cf9945cc8fa41d669d752b604f7d87.tar.gz
charger: bd99955: Set pre-charge current in addition to fast charge
Pre-charge vs fast-charge mode depends on battery voltage relative to VSYS. Rather than checking battery voltage (which may change), set pre-charge and fast-charge currents whenever charger_set_current() is called. BUG=chrome-os-partner:55416 BRANCH=None TEST=Manual on kevin. Verify system continues to boot with no battery. Attach depleted battery, run "battery" and verify charger current is ~200 mA. Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org> Change-Id: I68c06108c6d85ceede396294bedd1a017ddddd52 Reviewed-on: https://chromium-review.googlesource.com/361993 Commit-Ready: Shawn N <shawnn@chromium.org> Tested-by: Shawn N <shawnn@chromium.org> Reviewed-by: Vijay P Hiremath <vijay.p.hiremath@intel.com> Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
Diffstat (limited to 'driver')
-rw-r--r--driver/charger/bd99955.c12
-rw-r--r--driver/charger/bd99955.h3
2 files changed, 13 insertions, 2 deletions
diff --git a/driver/charger/bd99955.c b/driver/charger/bd99955.c
index 2ec56ffce9..f6a6519478 100644
--- a/driver/charger/bd99955.c
+++ b/driver/charger/bd99955.c
@@ -592,6 +592,8 @@ int charger_get_current(int *current)
int charger_set_current(int current)
{
+ int rv;
+
/* Charge current step 64 mA */
current &= ~0x3F;
@@ -601,8 +603,14 @@ int charger_set_current(int current)
else if (current < bd99955_charger_info.current_min)
current = bd99955_charger_info.current_min;
- return ch_raw_write16(BD99955_CMD_CHG_CURRENT, current,
- BD99955_BAT_CHG_COMMAND);
+ rv = ch_raw_write16(BD99955_CMD_CHG_CURRENT, current,
+ BD99955_BAT_CHG_COMMAND);
+ if (rv)
+ return rv;
+
+ return ch_raw_write16(BD99955_CMD_IPRECH_SET,
+ MIN(current, BD99955_IPRECH_MAX),
+ BD99955_EXTENDED_COMMAND);
}
int charger_get_voltage(int *voltage)
diff --git a/driver/charger/bd99955.h b/driver/charger/bd99955.h
index 71d9e891a7..e5cf666380 100644
--- a/driver/charger/bd99955.h
+++ b/driver/charger/bd99955.h
@@ -108,7 +108,10 @@ enum bd99955_charge_port {
#define BD99955_CMD_VSYSVAL_THH_SET 0x12
#define BD99955_CMD_VSYSVAL_THL_SET 0x13
#define BD99955_CMD_ITRICH_SET 0x14
+
#define BD99955_CMD_IPRECH_SET 0x15
+#define BD99955_IPRECH_MAX 1024
+
#define BD99955_CMD_ICHG_SET 0x16
#define BD99955_CMD_ITERM_SET 0x17
#define BD99955_CMD_VPRECHG_TH_SET 0x18