From ba77ddcbcadacff7627535e7f3ba706863e608a4 Mon Sep 17 00:00:00 2001 From: Duncan Laurie Date: Fri, 9 Aug 2013 13:46:11 -0700 Subject: x86: use charge state hook to wake up power button task This is cleaner than having the charge state machine explicitly know about the power button task. BUG=chrome-os-partner:21610 BRANCH=none TEST=reboot EC; see that power button task does not leave init-on state until just after the charge state initializes: [0.022646 Charge state init -> idle0 after 0.005908 sec] [0.022956 PB task 8 = init-on] [0.023147 PB PCH pwrbtn=LOW] [0.023303 PB task 6 = released, wait 199996] Original-Change-Id: I11d70103e3ee545512efe621f53d999680a7ad56 Signed-off-by: Randall Spangler Reviewed-on: https://gerrit.chromium.org/gerrit/64366 Reviewed-by: Vic Yang (cherry picked from commit a566d8d9e42d6f25503e8c897a995fef0b6ae42b) Change-Id: I56beec492eb622c4f14263b09fdc8b5cc967606e Signed-off-by: Duncan Laurie Reviewed-on: https://gerrit.chromium.org/gerrit/65371 --- common/charge_state.c | 13 ------------- common/power_button_x86.c | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/common/charge_state.c b/common/charge_state.c index f425bb6509..d7a809e735 100644 --- a/common/charge_state.c +++ b/common/charge_state.c @@ -705,19 +705,6 @@ void charger_task(void) hook_notify(HOOK_CHARGE_STATE_CHANGE); } -#ifdef HAS_TASK_POWERBTN - /* - * After first init, wake the power button task so it can - * power on the AP if necessary. - * - * TODO(rspangler): API, instead of assuming power button task - * exists - */ - if (ctx->prev.state == PWR_STATE_INIT && - new_state != PWR_STATE_INIT) - task_wake(TASK_ID_POWERBTN); -#endif - switch (new_state) { case PWR_STATE_IDLE0: /* diff --git a/common/power_button_x86.c b/common/power_button_x86.c index 2d353b74ed..e37fb6f81f 100644 --- a/common/power_button_x86.c +++ b/common/power_button_x86.c @@ -397,3 +397,17 @@ static void powerbtn_x86_changed(void) task_wake(TASK_ID_POWERBTN); } DECLARE_HOOK(HOOK_POWER_BUTTON_CHANGE, powerbtn_x86_changed, HOOK_PRIO_DEFAULT); + +/** + * Handle charge state changes + */ +static void powerbtn_x86_charge(void) +{ + /* + * If we were waiting for the charge state machine to init before we + * powered on the chipset, we can stop waiting. + */ + if (pwrbtn_state == PWRBTN_STATE_INIT_ON) + task_wake(TASK_ID_POWERBTN); +} +DECLARE_HOOK(HOOK_CHARGE_STATE_CHANGE, powerbtn_x86_charge, HOOK_PRIO_DEFAULT); -- cgit v1.2.1