diff options
author | Jeffy Chen <jeffy.chen@rock-chips.com> | 2016-11-09 14:29:55 +0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-11-10 12:25:35 -0800 |
commit | 30f2aced129d5f6f392a16b9b8c5c03f5bf62604 (patch) | |
tree | b5ab296cf83447e93166e3410c9389c6dad55c6c /common | |
parent | 5488976a20d1036ba425b4061e435a53a022f876 (diff) | |
download | chrome-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>
Diffstat (limited to 'common')
-rw-r--r-- | common/charge_manager.c | 8 |
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); |