summaryrefslogtreecommitdiff
path: root/driver/charger
diff options
context:
space:
mode:
authorPhilip Chen <philipchen@google.com>2018-04-16 14:16:07 -0700
committerchrome-bot <chrome-bot@chromium.org>2018-04-17 00:47:03 -0700
commitfc006560c15ae1619c6eb0224f3530a023f59688 (patch)
treeedda2d6715c3ed789f53b98a4e44ccf6092e517d /driver/charger
parent8bc71d174d6f581c5e0f4da3b1db498f1045f558 (diff)
downloadchrome-ec-fc006560c15ae1619c6eb0224f3530a023f59688.tar.gz
charger/rt946x: Set precharge threshold voltage
Let's explicitly set VPREC as voltage_min in battery info, instead of relying on the default reg value. BUG=b:78124353 BRANCH=scarlet TEST=read reg 0x08, confirm VPREC field matches voltage_min Change-Id: I1f8d414b5fd5319b15c3ead031a24a258a325536 Signed-off-by: Philip Chen <philipchen@google.com> Reviewed-on: https://chromium-review.googlesource.com/1014416 Commit-Ready: Philip Chen <philipchen@chromium.org> Tested-by: Philip Chen <philipchen@chromium.org> Reviewed-by: Aseda Aboagye <aaboagye@chromium.org> Reviewed-by: David Schneider <dnschneid@chromium.org>
Diffstat (limited to 'driver/charger')
-rw-r--r--driver/charger/rt946x.c16
-rw-r--r--driver/charger/rt946x.h7
2 files changed, 23 insertions, 0 deletions
diff --git a/driver/charger/rt946x.c b/driver/charger/rt946x.c
index 7d724e68c2..2d0f15f90c 100644
--- a/driver/charger/rt946x.c
+++ b/driver/charger/rt946x.c
@@ -308,6 +308,19 @@ static int rt946x_set_ircmp_res(unsigned int res)
reg_res << RT946X_SHIFT_IRCMP_RES);
}
+static int rt946x_set_vprec(unsigned int vprec)
+{
+ uint8_t reg_vprec = 0;
+
+ reg_vprec = rt946x_closest_reg(RT946X_VPREC_MIN, RT946X_VPREC_MAX,
+ RT946X_VPREC_STEP, vprec);
+
+ CPRINTF("%s: vprec = %d(0x%02X)\n", __func__, vprec, reg_vprec);
+
+ return rt946x_update_bits(RT946X_REG_CHGCTRL8, RT946X_MASK_VPREC,
+ reg_vprec << RT946X_SHIFT_VPREC);
+}
+
static int rt946x_set_iprec(unsigned int iprec)
{
uint8_t reg_iprec = 0;
@@ -396,6 +409,9 @@ static int rt946x_init_setting(void)
rv = rt946x_set_ircmp_res(rt946x_charger_init_setting.ircmp_res);
if (rv)
return rv;
+ rv = rt946x_set_vprec(batt_info->voltage_min);
+ if (rv)
+ return rv;
rv = rt946x_set_iprec(batt_info->precharge_current);
if (rv)
return rv;
diff --git a/driver/charger/rt946x.h b/driver/charger/rt946x.h
index ab86aa8afa..ab0c9fa7d4 100644
--- a/driver/charger/rt946x.h
+++ b/driver/charger/rt946x.h
@@ -109,6 +109,11 @@
#define RT946X_IRCMP_VCLAMP_MAX 224
#define RT946X_IRCMP_VCLAMP_STEP 32
+/* Pre-charge mode threshold voltage */
+#define RT946X_VPREC_MIN 2000
+#define RT946X_VPREC_MAX 3500
+#define RT946X_VPREC_STEP 100
+
/* Pre-charge current */
#define RT946X_IPREC_MIN 100
#define RT946X_IPREC_MAX 850
@@ -177,8 +182,10 @@
#define RT946X_MASK_ICHG 0xFC
/* ========== CHGCTRL8 0x08 ============ */
+#define RT946X_SHIFT_VPREC 4
#define RT946X_SHIFT_IPREC 0
+#define RT946X_MASK_VPREC 0xF0
#define RT946X_MASK_IPREC 0x0F
/* ========== CHGCTRL9 0x09 ============ */