diff options
author | Randall Spangler <rspangler@chromium.org> | 2012-10-30 13:01:55 -0700 |
---|---|---|
committer | Gerrit <chrome-bot@google.com> | 2012-10-30 15:33:25 -0700 |
commit | 433f98c6b67e23641f9808e6ca6effc4285dd42e (patch) | |
tree | 2852e69a904cba0ffbe1ca541d721169a054f653 /common/hooks.c | |
parent | 8b3a242ff0b8398b37378c67fe2c63beec1fa827 (diff) | |
download | chrome-ec-433f98c6b67e23641f9808e6ca6effc4285dd42e.tar.gz |
Add per-second hook
PWM and temp sensor monitoring want to happen every second,
vs. several times a second for watchdog and LPC.
This is still considerably simpler than having tick functions declare
an interval at which they want to be called, which would require a
RAM-based array of pending tick functions and alarm times. If you
need that level of complexity, you still need a task.
BUG=chrome-os-partner:15714
BRANCH=none
TEST=temporarily add HOOK_TICK and HOOK_SECOND hooks and see that on
LM4, HOOK_TICK is called 4x a second and HOOK_SECOND is called every
second.
Change-Id: I5c09842fd356d3254021486949b2799142068b4f
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/36938
Commit-Ready: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'common/hooks.c')
-rw-r--r-- | common/hooks.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/common/hooks.c b/common/hooks.c index 385f0e0478..a17cf1ade1 100644 --- a/common/hooks.c +++ b/common/hooks.c @@ -31,6 +31,7 @@ static const struct hook_ptrs hook_list[] = { {__hooks_ac_change, __hooks_ac_change_end}, {__hooks_lid_change, __hooks_lid_change_end}, {__hooks_tick, __hooks_tick_end}, + {__hooks_second, __hooks_second_end}, }; void hook_notify(enum hook_type type) @@ -64,11 +65,19 @@ void hook_notify(enum hook_type type) void hook_task(void) { + /* Per-second hook will be called first time through the loop */ + static uint64_t last_second = -SECOND; + while (1) { uint64_t t = get_time().val; hook_notify(HOOK_TICK); + if (t - last_second >= SECOND) { + hook_notify(HOOK_SECOND); + last_second = t; + } + /* Use up the rest of our hook tick interval */ t = get_time().val - t; if (t < HOOK_TICK_INTERVAL) |