diff options
Diffstat (limited to 'drivers/leds/ledtrig-ide-disk.c')
| -rw-r--r-- | drivers/leds/ledtrig-ide-disk.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/drivers/leds/ledtrig-ide-disk.c b/drivers/leds/ledtrig-ide-disk.c new file mode 100644 index 000000000000..fa651886ab4f --- /dev/null +++ b/drivers/leds/ledtrig-ide-disk.c | |||
| @@ -0,0 +1,62 @@ | |||
| 1 | /* | ||
| 2 | * LED IDE-Disk Activity Trigger | ||
| 3 | * | ||
| 4 | * Copyright 2006 Openedhand Ltd. | ||
| 5 | * | ||
| 6 | * Author: Richard Purdie <rpurdie@openedhand.com> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify | ||
| 9 | * it under the terms of the GNU General Public License version 2 as | ||
| 10 | * published by the Free Software Foundation. | ||
| 11 | * | ||
| 12 | */ | ||
| 13 | |||
| 14 | #include <linux/module.h> | ||
| 15 | #include <linux/kernel.h> | ||
| 16 | #include <linux/init.h> | ||
| 17 | #include <linux/timer.h> | ||
| 18 | #include <linux/leds.h> | ||
| 19 | |||
| 20 | static void ledtrig_ide_timerfunc(unsigned long data); | ||
| 21 | |||
| 22 | DEFINE_LED_TRIGGER(ledtrig_ide); | ||
| 23 | static DEFINE_TIMER(ledtrig_ide_timer, ledtrig_ide_timerfunc, 0, 0); | ||
| 24 | static int ide_activity; | ||
| 25 | static int ide_lastactivity; | ||
| 26 | |||
| 27 | void ledtrig_ide_activity(void) | ||
| 28 | { | ||
| 29 | ide_activity++; | ||
| 30 | if (!timer_pending(&ledtrig_ide_timer)) | ||
| 31 | mod_timer(&ledtrig_ide_timer, jiffies + msecs_to_jiffies(10)); | ||
| 32 | } | ||
| 33 | EXPORT_SYMBOL(ledtrig_ide_activity); | ||
| 34 | |||
| 35 | static void ledtrig_ide_timerfunc(unsigned long data) | ||
| 36 | { | ||
| 37 | if (ide_lastactivity != ide_activity) { | ||
| 38 | ide_lastactivity = ide_activity; | ||
| 39 | led_trigger_event(ledtrig_ide, LED_FULL); | ||
| 40 | mod_timer(&ledtrig_ide_timer, jiffies + msecs_to_jiffies(10)); | ||
| 41 | } else { | ||
| 42 | led_trigger_event(ledtrig_ide, LED_OFF); | ||
| 43 | } | ||
| 44 | } | ||
| 45 | |||
| 46 | static int __init ledtrig_ide_init(void) | ||
| 47 | { | ||
| 48 | led_trigger_register_simple("ide-disk", &ledtrig_ide); | ||
| 49 | return 0; | ||
| 50 | } | ||
| 51 | |||
| 52 | static void __exit ledtrig_ide_exit(void) | ||
| 53 | { | ||
| 54 | led_trigger_unregister_simple(ledtrig_ide); | ||
| 55 | } | ||
| 56 | |||
| 57 | module_init(ledtrig_ide_init); | ||
| 58 | module_exit(ledtrig_ide_exit); | ||
| 59 | |||
| 60 | MODULE_AUTHOR("Richard Purdie <rpurdie@openedhand.com>"); | ||
| 61 | MODULE_DESCRIPTION("LED IDE Disk Activity Trigger"); | ||
| 62 | MODULE_LICENSE("GPL"); | ||
