summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Chen <philipchen@google.com>2018-02-05 14:47:55 -0800
committerchrome-bot <chrome-bot@chromium.org>2018-02-06 15:41:21 -0800
commitc715d819553ebf70c6261ebccf25a5af366523d5 (patch)
tree8ec0a7726a46f1739a41158e191e38bb99f802b9
parentddd4b363afc5593d73154833d23f773e370e6308 (diff)
downloadchrome-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.c18
-rw-r--r--driver/charger/rt946x.h10
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