diff options
author | Philip Chen <philipchen@google.com> | 2018-04-16 14:16:07 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-04-17 00:47:03 -0700 |
commit | fc006560c15ae1619c6eb0224f3530a023f59688 (patch) | |
tree | edda2d6715c3ed789f53b98a4e44ccf6092e517d /driver/charger | |
parent | 8bc71d174d6f581c5e0f4da3b1db498f1045f558 (diff) | |
download | chrome-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.c | 16 | ||||
-rw-r--r-- | driver/charger/rt946x.h | 7 |
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 ============ */ |