diff options
author | Philip Chen <philipchen@google.com> | 2018-02-05 14:47:55 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-02-06 15:41:21 -0800 |
commit | c715d819553ebf70c6261ebccf25a5af366523d5 (patch) | |
tree | 8ec0a7726a46f1739a41158e191e38bb99f802b9 | |
parent | ddd4b363afc5593d73154833d23f773e370e6308 (diff) | |
download | chrome-ec-c715d819553ebf70c6261ebccf25a5af366523d5.tar.gz |
charger/rt946x: Set up pre-charge current
We should set up pre-charge current based on the battery pack we use.
By default this parameter is 150mA.
BUG=chromium:809246
BRANCH=none
TEST=confirm IPREC register is written correctly
Change-Id: I2cb0906c74bef144d80c38b5d15519d594ed42f2
Signed-off-by: Philip Chen <philipchen@google.com>
Reviewed-on: https://chromium-review.googlesource.com/902945
Commit-Ready: Philip Chen <philipchen@chromium.org>
Tested-by: Philip Chen <philipchen@chromium.org>
Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
-rw-r--r-- | driver/charger/rt946x.c | 18 | ||||
-rw-r--r-- | driver/charger/rt946x.h | 10 |
2 files changed, 28 insertions, 0 deletions
diff --git a/driver/charger/rt946x.c b/driver/charger/rt946x.c index 95af454b68..6d1eacc6a9 100644 --- a/driver/charger/rt946x.c +++ b/driver/charger/rt946x.c @@ -5,6 +5,7 @@ * Richtek rt946x battery charger driver. */ +#include "battery.h" #include "battery_smart.h" #include "charger.h" #include "common.h" @@ -305,6 +306,19 @@ static int rt946x_set_ircmp_res(unsigned int res) reg_res << RT946X_SHIFT_IRCMP_RES); } +static int rt946x_set_iprec(unsigned int iprec) +{ + uint8_t reg_iprec = 0; + + reg_iprec = rt946x_closest_reg(RT946X_IPREC_MIN, RT946X_IPREC_MAX, + RT946X_IPREC_STEP, iprec); + + CPRINTF("%s: iprec = %d(0x%02X)\n", __func__, iprec, reg_iprec); + + return rt946x_update_bits(RT946X_REG_CHGCTRL8, RT946X_MASK_IPREC, + reg_iprec << RT946X_SHIFT_IPREC); +} + static int rt946x_init_irq(void) { int rv = 0; @@ -332,6 +346,7 @@ static int rt946x_init_irq(void) static int rt946x_init_setting(void) { int rv = 0; + const struct battery_info *batt_info = battery_get_info(); #ifdef CONFIG_CHARGER_OTG /* Disable boost-mode output voltage */ @@ -371,6 +386,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_iprec(batt_info->precharge_current); + if (rv) + return rv; return rt946x_init_irq(); } diff --git a/driver/charger/rt946x.h b/driver/charger/rt946x.h index 7bf3a915f2..481277726f 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 current */ +#define RT946X_IPREC_MIN 100 +#define RT946X_IPREC_MAX 850 +#define RT946X_IPREC_STEP 50 + /* AICLVTH */ #define RT946X_AICLVTH_MIN 4100 #define RT946X_AICLVTH_MAX 4800 @@ -169,6 +174,11 @@ #define RT946X_MASK_ICHG 0xFC +/* ========== CHGCTRL8 0x08 ============ */ +#define RT946X_SHIFT_IPREC 0 + +#define RT946X_MASK_IPREC 0xF0 + /* ========== CHGCTRL9 0x09 ============ */ #define RT946X_SHIFT_IEOC 4 |