From fc006560c15ae1619c6eb0224f3530a023f59688 Mon Sep 17 00:00:00 2001 From: Philip Chen Date: Mon, 16 Apr 2018 14:16:07 -0700 Subject: 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 Reviewed-on: https://chromium-review.googlesource.com/1014416 Commit-Ready: Philip Chen Tested-by: Philip Chen Reviewed-by: Aseda Aboagye Reviewed-by: David Schneider --- driver/charger/rt946x.c | 16 ++++++++++++++++ driver/charger/rt946x.h | 7 +++++++ 2 files changed, 23 insertions(+) (limited to 'driver/charger') 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; @@ -394,6 +407,9 @@ static int rt946x_init_setting(void) if (rv) return rv; 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); 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 ============ */ -- cgit v1.2.1