summaryrefslogtreecommitdiff
path: root/power
diff options
context:
space:
mode:
authorAnton Staaf <robotboy@chromium.org>2016-03-23 12:45:28 -0700
committerchrome-bot <chrome-bot@chromium.org>2016-04-18 17:32:40 -0700
commit068cd0850684ee28a5a514e5a270edce2edb3979 (patch)
treee84f2316e37baa72f1c9611e665749d91a3ce8fd /power
parent1e7c280491232110e1006d545f9a61ca05d469d5 (diff)
downloadchrome-ec-068cd0850684ee28a5a514e5a270edce2edb3979.tar.gz
Deferred: Use deferred_data instead of function pointer
Previously calls to hook_call_deferred were passed the function to call, which was then looked up in the .rodata.deferred section with a linear search. This linear search can be replaced with a subtract by passing the pointer to the deferred_data object created when DECLARE_DEFERRED was invoked. Signed-off-by: Anton Staaf <robotboy@chromium.org> BRANCH=None BUG=None CQ-DEPEND=CL:*255812 TEST=make buildall -j Change-Id: I951dd1541302875b102dd086154cf05591694440 Reviewed-on: https://chromium-review.googlesource.com/334315 Commit-Ready: Bill Richardson <wfrichar@chromium.org> Tested-by: Bill Richardson <wfrichar@chromium.org> Reviewed-by: Bill Richardson <wfrichar@chromium.org>
Diffstat (limited to 'power')
-rw-r--r--power/common.c2
-rw-r--r--power/gaia.c2
-rw-r--r--power/mediatek.c5
-rw-r--r--power/skylake.c2
4 files changed, 6 insertions, 5 deletions
diff --git a/power/common.c b/power/common.c
index f455b3a3b3..696fed1fb0 100644
--- a/power/common.c
+++ b/power/common.c
@@ -473,7 +473,7 @@ static void siglog_add(enum gpio_signal signal)
siglog[siglog_entries].level = gpio_get_level(signal);
siglog_entries++;
- hook_call_deferred(siglog_deferred, SECOND);
+ hook_call_deferred(&siglog_deferred_data, SECOND);
}
#define SIGLOG(S) siglog_add(S)
diff --git a/power/gaia.c b/power/gaia.c
index 161cf14553..a5e0ff0fd7 100644
--- a/power/gaia.c
+++ b/power/gaia.c
@@ -281,7 +281,7 @@ void power_signal_interrupt(enum gpio_signal signal)
{
if (signal == GPIO_SUSPEND_L) {
/* Handle suspend events in the hook task */
- hook_call_deferred(gaia_suspend_deferred, 0);
+ hook_call_deferred(&gaia_suspend_deferred_data, 0);
} else {
/* All other events are handled in the chipset task */
task_wake(TASK_ID_CHIPSET);
diff --git a/power/mediatek.c b/power/mediatek.c
index bf4f0e5cc1..1ac5066712 100644
--- a/power/mediatek.c
+++ b/power/mediatek.c
@@ -613,7 +613,8 @@ static void power_on(void)
/* Push the power button */
set_pmic_pwron(1);
- hook_call_deferred(release_pmic_pwron_deferred, PMIC_PWRON_PRESS_TIME);
+ hook_call_deferred(&release_pmic_pwron_deferred_data,
+ PMIC_PWRON_PRESS_TIME);
/* enable interrupt */
gpio_set_flags(GPIO_SUSPEND_L, INT_BOTH_PULL_UP);
@@ -645,7 +646,7 @@ void chipset_reset(int is_cold)
usleep(PMIC_COLD_RESET_L_HOLD_TIME);
/* Press the PMIC power button */
set_pmic_pwron(1);
- hook_call_deferred(release_pmic_pwron_deferred,
+ hook_call_deferred(&release_pmic_pwron_deferred_data,
PMIC_PWRON_PRESS_TIME);
} else {
CPRINTS("EC triggered warm reboot");
diff --git a/power/skylake.c b/power/skylake.c
index 58f2d58f12..d59f5a7349 100644
--- a/power/skylake.c
+++ b/power/skylake.c
@@ -465,7 +465,7 @@ void power_signal_interrupt_S0(enum gpio_signal signal)
{
if (gpio_get_level(GPIO_PCH_SLP_S0_L)) {
slp_s0_debounce.required = 1;
- hook_call_deferred(slp_s0_assertion_deferred, 3 * MSEC);
+ hook_call_deferred(&slp_s0_assertion_deferred_data, 3 * MSEC);
}
else if (slp_s0_debounce.required == 0) {
slp_s0_debounce.done = 0;