From 417a77edb589f7bef8f7e7ae65197586a619aa24 Mon Sep 17 00:00:00 2001 From: Russell King Date: Sat, 4 Oct 2003 12:50:21 +0100 Subject: [PATCH] [ARM] Add system device for LEDs. This allows us to make the suspend/resume handling local to the LEDs code itself, rather than being scattered in several files. --- arch/arm/kernel/pm.c | 5 ----- arch/arm/kernel/process.c | 2 -- arch/arm/kernel/time.c | 44 +++++++++++++++++++++++++++++++++++++-- 3 files changed, 42 insertions(+), 9 deletions(-) diff --git a/arch/arm/kernel/pm.c b/arch/arm/kernel/pm.c index fbe2d7a895808..7c6687624697a 100644 --- a/arch/arm/kernel/pm.c +++ b/arch/arm/kernel/pm.c @@ -15,7 +15,6 @@ #include #include -#include #include /* @@ -42,15 +41,11 @@ int suspend(void) goto resume_legacy; local_irq_disable(); - leds_event(led_stop); - sysdev_suspend(3); ret = pm_do_suspend(); sysdev_resume(); - - leds_event(led_start); local_irq_enable(); device_resume(); diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index 4a4532e91896e..51eba65be0db7 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c @@ -117,12 +117,10 @@ __setup("reboot=", reboot_setup); void machine_halt(void) { - leds_event(led_halted); } void machine_power_off(void) { - leds_event(led_halted); if (pm_power_off) pm_power_off(); } diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c index 475350f53601d..d9edb669a9988 100644 --- a/arch/arm/kernel/time.c +++ b/arch/arm/kernel/time.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include @@ -72,8 +73,6 @@ unsigned long (*gettimeoffset)(void) = dummy_gettimeoffset; */ unsigned long long sched_clock(void) { - unsigned long long this_offset; - return (unsigned long long)jiffies * (1000000000 / HZ); } @@ -137,6 +136,47 @@ static void dummy_leds_event(led_event_t evt) void (*leds_event)(led_event_t) = dummy_leds_event; +static int leds_suspend(struct sys_device *dev, u32 state) +{ + leds_event(led_stop); + return 0; +} + +static int leds_resume(struct sys_device *dev) +{ + leds_event(led_start); + return 0; +} + +static int leds_shutdown(struct sys_device *dev) +{ + leds_event(led_halted); + return 0; +} + +static struct sysdev_class leds_sysclass = { + set_kset_name("leds"), + .shutdown = leds_shutdown, + .suspend = leds_suspend, + .resume = leds_resume, +}; + +static struct sys_device leds_device = { + .id = 0, + .cls = &leds_sysclass, +}; + +static int __init leds_init(void) +{ + int ret; + ret = sysdev_class_register(&leds_sysclass); + if (ret == 0) + ret = sys_device_register(&leds_device); + return ret; +} + +device_initcall(leds_init); + EXPORT_SYMBOL(leds_event); #endif -- 2.53.0