summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeffy Chen <jeffy.chen@rock-chips.com>2016-11-09 14:29:55 +0800
committerchrome-bot <chrome-bot@chromium.org>2016-11-10 12:25:35 -0800
commit30f2aced129d5f6f392a16b9b8c5c03f5bf62604 (patch)
treeb5ab296cf83447e93166e3410c9389c6dad55c6c
parent5488976a20d1036ba425b4061e435a53a022f876 (diff)
downloadchrome-ec-30f2aced129d5f6f392a16b9b8c5c03f5bf62604.tar.gz
charge_manager: send EC_HOST_EVENT_PD_MCU at the end of refresh
When kernel get EC_HOST_EVENT_PD_MCU event and query power state, we may not done refresh here. Delay EC_HOST_EVENT_PD_MCU event to avoid this race. BUG=chrome-os-partner:59499 BRANCH=gru TEST=Manual on kevin, check power state correct after unplug charger Change-Id: Ib88acf5a39c2780c6e40144ccebfba17cf84f77c Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> Reviewed-on: https://chromium-review.googlesource.com/408131 Commit-Ready: Douglas Anderson <dianders@chromium.org> Tested-by: Wonjoon Lee <woojoo.lee@samsung.com> Reviewed-by: Douglas Anderson <dianders@chromium.org> Reviewed-by: Shawn N <shawnn@chromium.org>
-rw-r--r--common/charge_manager.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/common/charge_manager.c b/common/charge_manager.c
index 3455c8e3f6..fa3a16c321 100644
--- a/common/charge_manager.c
+++ b/common/charge_manager.c
@@ -480,6 +480,7 @@ static void charge_manager_refresh(void)
int updated_new_port = CHARGE_PORT_NONE;
int updated_old_port = CHARGE_PORT_NONE;
int ceil;
+ int power_changed = 0;
/* Hunt for an acceptable charge port */
while (1) {
@@ -570,8 +571,7 @@ static void charge_manager_refresh(void)
new_charge_current_uncapped);
#endif /* HAS_TASK_CHG_RAMP */
- /* notify host of power info change */
- pd_send_host_event(PD_EVENT_POWER_CHANGE);
+ power_changed = 1;
CPRINTS("CL: p%d s%d i%d v%d", new_port, new_supplier,
new_charge_current, new_charge_voltage);
@@ -630,6 +630,10 @@ static void charge_manager_refresh(void)
pd_set_new_power_request(updated_new_port);
if (updated_old_port != CHARGE_PORT_NONE)
pd_set_new_power_request(updated_old_port);
+
+ if (power_changed)
+ /* notify host of power info change */
+ pd_send_host_event(PD_EVENT_POWER_CHANGE);
}
DECLARE_DEFERRED(charge_manager_refresh);