From 24eb7b805927e482d2cbdca2505734e6ae64700c Mon Sep 17 00:00:00 2001 From: Yilun Lin Date: Thu, 14 Nov 2019 16:16:21 +0800 Subject: kukui,kodama,jacuzzi: fix charge/discharge control setting order Should enable charge first then the charge port can function normally. Besides, for device using mt6370 and in force discharge mode, mt6370 would receive a DPDM detach event and release BC1.2 charge supply info. We should force BC1.2 detection again to recognize BC1.2 device again. TEST=on krane 'ectool chargecontrol discharge; ectool chargecontrol normal' and see the charge is charging. BUG=b:143045248 BRANCH=kukui Change-Id: I72481dfddf48b1e274d8d81f8d9223ccb8295c72 Signed-off-by: Yilun Lin Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1916160 Reviewed-by: Ting Shen Commit-Queue: Ting Shen --- board/jacuzzi/board.c | 8 ++++---- board/kodama/board.c | 11 +++++++---- board/kukui/board.c | 11 +++++++---- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/board/jacuzzi/board.c b/board/jacuzzi/board.c index f8274dd6a5..1dd26c0e4b 100644 --- a/board/jacuzzi/board.c +++ b/board/jacuzzi/board.c @@ -140,7 +140,7 @@ int board_set_active_charge_port(int charge_port) CPRINTS("New chg p%d", charge_port); /* ignore all request when discharge mode is on */ - if (force_discharge) + if (force_discharge && charge_port != CHARGE_PORT_NONE) return EC_SUCCESS; switch (charge_port) { @@ -186,12 +186,12 @@ int board_discharge_on_ac(int enable) port = charge_manager_get_active_charge_port(); } - ret = board_set_active_charge_port(port); + ret = charger_discharge_on_ac(enable); if (ret) return ret; - force_discharge = enable; - return charger_discharge_on_ac(enable); + force_discharge = enable; + return board_set_active_charge_port(port); } int pd_snk_is_vbus_provided(int port) diff --git a/board/kodama/board.c b/board/kodama/board.c index 905930963a..968f5e5749 100644 --- a/board/kodama/board.c +++ b/board/kodama/board.c @@ -125,7 +125,7 @@ int board_set_active_charge_port(int charge_port) CPRINTS("New chg p%d", charge_port); /* ignore all request when discharge mode is on */ - if (force_discharge) + if (force_discharge && charge_port != CHARGE_PORT_NONE) return EC_SUCCESS; switch (charge_port) { @@ -163,12 +163,15 @@ int board_discharge_on_ac(int enable) port = charge_manager_get_active_charge_port(); } - ret = board_set_active_charge_port(port); + ret = charger_discharge_on_ac(enable); if (ret) return ret; - force_discharge = enable; - return charger_discharge_on_ac(enable); + if (force_discharge && !enable) + rt946x_toggle_bc12_detection(); + + force_discharge = enable; + return board_set_active_charge_port(port); } int extpower_is_present(void) diff --git a/board/kukui/board.c b/board/kukui/board.c index f388dca751..21d77589fe 100644 --- a/board/kukui/board.c +++ b/board/kukui/board.c @@ -161,7 +161,7 @@ int board_set_active_charge_port(int charge_port) CPRINTS("New chg p%d", charge_port); /* ignore all request when discharge mode is on */ - if (force_discharge) + if (force_discharge && charge_port != CHARGE_PORT_NONE) return EC_SUCCESS; switch (charge_port) { @@ -209,12 +209,15 @@ int board_discharge_on_ac(int enable) port = charge_manager_get_active_charge_port(); } - ret = board_set_active_charge_port(port); + ret = charger_discharge_on_ac(enable); if (ret) return ret; - force_discharge = enable; - return charger_discharge_on_ac(enable); + if (force_discharge && !enable) + rt946x_toggle_bc12_detection(); + + force_discharge = enable; + return board_set_active_charge_port(port); } #ifndef VARIANT_KUKUI_POGO_KEYBOARD -- cgit v1.2.1