diff options
| author | Todd Poynor <toddpoynor@google.com> | 2011-06-24 19:33:01 -0700 |
|---|---|---|
| committer | Colin Cross <ccross@android.com> | 2012-04-09 13:57:52 -0700 |
| commit | 1feb42e7fbd6549f665573c1f97673cb48805c5b (patch) | |
| tree | cdfa708b78173d6805f7fb77df4e935589721383 | |
| parent | 82a3b9c100f34967fed1ab892aa3a7446ce5e42f (diff) | |
ARM: Move leds idle start/stop calls to idle notifiers
Change-Id: I5d8e4e85b17bbab7992ecb477f0bdb5e4138b166
Acked-by: Nicolas Pitre <nicolas.pitre@linaro.org>
Signed-off-by: Todd Poynor <toddpoynor@google.com>
| -rw-r--r-- | arch/arm/kernel/leds.c | 26 | ||||
| -rw-r--r-- | arch/arm/kernel/process.c | 3 |
2 files changed, 25 insertions, 4 deletions
diff --git a/arch/arm/kernel/leds.c b/arch/arm/kernel/leds.c index 1911dae19e4..2050399ebd0 100644 --- a/arch/arm/kernel/leds.c +++ b/arch/arm/kernel/leds.c @@ -10,6 +10,8 @@ #include <linux/export.h> #include <linux/init.h> #include <linux/device.h> +#include <linux/notifier.h> +#include <linux/cpu.h> #include <linux/syscore_ops.h> #include <linux/string.h> @@ -103,6 +105,25 @@ static struct syscore_ops leds_syscore_ops = { .resume = leds_resume, }; +static int leds_idle_notifier(struct notifier_block *nb, unsigned long val, + void *data) +{ + switch (val) { + case IDLE_START: + leds_event(led_idle_start); + break; + case IDLE_END: + leds_event(led_idle_end); + break; + } + + return 0; +} + +static struct notifier_block leds_idle_nb = { + .notifier_call = leds_idle_notifier, +}; + static int __init leds_init(void) { int ret; @@ -111,8 +132,11 @@ static int __init leds_init(void) ret = device_register(&leds_device); if (ret == 0) ret = device_create_file(&leds_device, &dev_attr_event); - if (ret == 0) + if (ret == 0) { register_syscore_ops(&leds_syscore_ops); + idle_notifier_register(&leds_idle_nb); + } + return ret; } diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index 3f7777e539b..014f0908b7b 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c @@ -34,7 +34,6 @@ #include <linux/console.h> #include <asm/cacheflush.h> -#include <asm/leds.h> #include <asm/processor.h> #include <asm/thread_notify.h> #include <asm/stacktrace.h> @@ -248,7 +247,6 @@ void cpu_idle(void) idle_notifier_call_chain(IDLE_START); tick_nohz_idle_enter(); rcu_idle_enter(); - leds_event(led_idle_start); while (!need_resched()) { #ifdef CONFIG_HOTPLUG_CPU if (cpu_is_offline(smp_processor_id())) @@ -279,7 +277,6 @@ void cpu_idle(void) } else local_irq_enable(); } - leds_event(led_idle_end); rcu_idle_exit(); tick_nohz_idle_exit(); idle_notifier_call_chain(IDLE_END); |
