summaryrefslogtreecommitdiff
path: root/driver
diff options
context:
space:
mode:
authorPhilip Chen <philipchen@google.com>2018-04-13 15:53:09 -0700
committerchrome-bot <chrome-bot@chromium.org>2018-05-14 23:56:57 -0700
commit492b1aceeb307949ed42da65aa0ce60b4cb18325 (patch)
tree3acbef43834a5923ccb0b9d342b7887b4f7d33b1 /driver
parentfa6c5abae5d9e962127ec15e79e45ffab9fad658 (diff)
downloadchrome-ec-492b1aceeb307949ed42da65aa0ce60b4cb18325.tar.gz
charger/rt946x: Add an interface to check charge termination
After we set TE (CL:958295), rt946x terminates charging when the charge current is below IEOC in constant-voltage mode. Let's add an interface to check charge termination status. BUG=b:77870927 BRANCH=scarlet TEST=charge scarlet, confirm rt946x_is_charge_done() returns 0 when battery is charging and returns 1 when charge terminates (battery is full). Then keep AC plugged and wait, confirm rt946x_is_charge_done() returns 0 when rt946x restarts charging. Change-Id: I559d328aa0d7c5c4cd5bf7178370ea039aa80204 Signed-off-by: Philip Chen <philipchen@google.com> Reviewed-on: https://chromium-review.googlesource.com/1044768 Commit-Ready: Philip Chen <philipchen@chromium.org> Tested-by: Philip Chen <philipchen@chromium.org> Reviewed-by: Nicolas Boichat <drinkcat@chromium.org>
Diffstat (limited to 'driver')
-rw-r--r--driver/charger/rt946x.c19
-rw-r--r--driver/charger/rt946x.h3
2 files changed, 22 insertions, 0 deletions
diff --git a/driver/charger/rt946x.c b/driver/charger/rt946x.c
index 2d0f15f90c..27b92abf43 100644
--- a/driver/charger/rt946x.c
+++ b/driver/charger/rt946x.c
@@ -63,6 +63,13 @@ enum rt946x_ilmtsel {
RT946X_ILMTSEL_LOWER_LEVEL, /* lower of above two */
};
+enum rt946x_chg_stat {
+ RT946X_CHGSTAT_READY = 0,
+ RT946X_CHGSTAT_IN_PROGRESS,
+ RT946X_CHGSTAT_DONE,
+ RT946X_CHGSTAT_FAULT,
+};
+
enum rt946x_adc_in_sel {
RT946X_ADC_VBUS_DIV5 = 1,
RT946X_ADC_VBUS_DIV2,
@@ -911,6 +918,18 @@ int rt946x_is_vbus_ready(void)
0 : !!(val & RT946X_MASK_PWR_RDY);
}
+int rt946x_is_charge_done(void)
+{
+ int val = 0;
+
+ if (rt946x_read8(RT946X_REG_CHGSTAT, &val))
+ return 0;
+
+ val = (val & RT946X_MASK_CHG_STAT) >> RT946X_SHIFT_CHG_STAT;
+
+ return val == RT946X_CHGSTAT_DONE;
+}
+
int rt946x_cutoff_battery(void)
{
return rt946x_set_bit(RT946X_REG_CHGCTRL2, RT946X_MASK_SHIP_MODE);
diff --git a/driver/charger/rt946x.h b/driver/charger/rt946x.h
index aff1c99928..208a8e80fe 100644
--- a/driver/charger/rt946x.h
+++ b/driver/charger/rt946x.h
@@ -315,6 +315,9 @@ int rt946x_enable_charger_boost(int en);
*/
int rt946x_is_vbus_ready(void);
+/* Return 1 if rt946x triggers charge termination due to full charge. */
+int rt946x_is_charge_done(void);
+
/*
* Cut off the battery (force BATFET to turn off).
* Return 0 if it succeeds.