summaryrefslogtreecommitdiff
path: root/baseboard
diff options
context:
space:
mode:
authorxiong.huang <xiong.huang@bitland.corp-partner.google.com>2020-01-21 22:50:43 +0800
committerCommit Bot <commit-bot@chromium.org>2020-02-14 12:31:06 +0000
commitb4ae96731536f40724f425df3c3a6506d9fef724 (patch)
tree994a723d433d0921aefbedc64b62b152122daf5d /baseboard
parentd9d96f85a40d70aaf5e5d8eff456765868547bce (diff)
downloadchrome-ec-b4ae96731536f40724f425df3c3a6506d9fef724.tar.gz
Kodama: delay to enable charger EOC and TE function
When the battery is activated in shutdown mode, the battery needs H/W Initialization and Cu Deposition Checking in 4.2 second. Meanwhile, if the charger EOC function is enabled, charger will close/open the charging path repeatedly and will pull PMIC's VSYSSNS power. It's a workaround to delay 4.5 second to enable charger EOC and TE function. BUG=b:148045048 TEST=The adapter can boot the DUT automatically when the battery enters shutdown mode or ship mode. BRANCH=kukui Change-Id: Ie00d0f7ad506a273dc1b51f03b5d28dfa582f14f Signed-off-by: Xiong Huang <xiong.huang@bitland.corp-partner.google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2012102 Reviewed-by: Eric Yilun Lin <yllin@chromium.org>
Diffstat (limited to 'baseboard')
-rw-r--r--baseboard/kukui/charger_mt6370.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/baseboard/kukui/charger_mt6370.c b/baseboard/kukui/charger_mt6370.c
index 2ad7627fd9..b2c1e90935 100644
--- a/baseboard/kukui/charger_mt6370.c
+++ b/baseboard/kukui/charger_mt6370.c
@@ -243,6 +243,15 @@ update_charge:
prev_stable_current = stable_current;
}
+#ifdef CONFIG_BATTERY_SMART
+static void charge_enable_eoc_and_te(void)
+{
+ rt946x_enable_charge_eoc(1);
+ rt946x_enable_charge_termination(1);
+}
+DECLARE_DEFERRED(charge_enable_eoc_and_te);
+#endif
+
void mt6370_charger_profile_override(struct charge_state_data *curr)
{
static int previous_chg_limit_mv;
@@ -252,6 +261,46 @@ void mt6370_charger_profile_override(struct charge_state_data *curr)
battery_thermal_control(curr);
+#ifdef CONFIG_BATTERY_SMART
+ /*
+ * SMP battery uses HW pre-charge circuit and pre-charge current is
+ * limited to ~50mA. Once the charge current is lower than IEOC level
+ * within CHG_TEDG_EOC, and TE is enabled, the charging power path will
+ * be turned off. Disable EOC and TE when battery stays over discharge
+ * state, otherwise enable EOC and TE.
+ */
+ if (!(curr->batt.flags & BATT_FLAG_BAD_VOLTAGE)) {
+ const struct battery_info *batt_info = battery_get_info();
+ static int normal_charge_lock, over_discharge_lock;
+
+ if (curr->batt.voltage < batt_info->voltage_min) {
+ normal_charge_lock = 0;
+
+ if (!over_discharge_lock && curr->state == ST_CHARGE) {
+ over_discharge_lock = 1;
+ rt946x_enable_charge_eoc(0);
+ rt946x_enable_charge_termination(0);
+ }
+ } else {
+ over_discharge_lock = 0;
+
+ if (!normal_charge_lock) {
+ normal_charge_lock = 1;
+ /*
+ * b/148045048: When the battery is activated
+ * in shutdown mode, the adapter cannot boot
+ * DUT automatically. It's a workaround to
+ * delay 4.5 second to enable charger EOC
+ * and TE function.
+ */
+ hook_call_deferred(
+ &charge_enable_eoc_and_te_data,
+ (4.5 * SECOND));
+ }
+ }
+ }
+#endif
+
/* Limit input (=VBUS) to 5V when soc > 85% and charge current < 1A. */
if (!(curr->batt.flags & BATT_FLAG_BAD_CURRENT) &&
charge_get_percent() > BAT_LEVEL_PD_LIMIT &&
@@ -283,6 +332,7 @@ void mt6370_charger_profile_override(struct charge_state_data *curr)
}
+#ifndef CONFIG_BATTERY_SMART
static void board_charge_termination(void)
{
static uint8_t te;
@@ -295,6 +345,7 @@ static void board_charge_termination(void)
DECLARE_HOOK(HOOK_BATTERY_SOC_CHANGE,
board_charge_termination,
HOOK_PRIO_DEFAULT);
+#endif
void board_set_charge_limit(int port, int supplier, int charge_ma,
int max_ma, int charge_mv)