2 * LED support code, ripped out of arch/arm/kernel/time.c
4 * Copyright (C) 1994-2001 Russell King
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
10 #include <linux/module.h>
11 #include <linux/init.h>
12 #include <linux/sysdev.h>
13 #include <linux/syscore_ops.h>
17 static void dummy_leds_event(led_event_t evt
)
21 void (*leds_event
)(led_event_t
) = dummy_leds_event
;
23 struct leds_evt_name
{
29 static const struct leds_evt_name evt_names
[] = {
30 { "amber", led_amber_on
, led_amber_off
},
31 { "blue", led_blue_on
, led_blue_off
},
32 { "green", led_green_on
, led_green_off
},
33 { "red", led_red_on
, led_red_off
},
36 static ssize_t
leds_store(struct sys_device
*dev
,
37 struct sysdev_attribute
*attr
,
38 const char *buf
, size_t size
)
40 int ret
= -EINVAL
, len
= strcspn(buf
, " ");
42 if (len
> 0 && buf
[len
] == '\0')
45 if (strncmp(buf
, "claim", len
) == 0) {
46 leds_event(led_claim
);
48 } else if (strncmp(buf
, "release", len
) == 0) {
49 leds_event(led_release
);
54 for (i
= 0; i
< ARRAY_SIZE(evt_names
); i
++) {
55 if (strlen(evt_names
[i
].name
) != len
||
56 strncmp(buf
, evt_names
[i
].name
, len
) != 0)
58 if (strncmp(buf
+len
, " on", 3) == 0) {
59 leds_event(evt_names
[i
].on
);
61 } else if (strncmp(buf
+len
, " off", 4) == 0) {
62 leds_event(evt_names
[i
].off
);
71 static SYSDEV_ATTR(event
, 0200, NULL
, leds_store
);
73 static struct sysdev_class leds_sysclass
= {
77 static struct sys_device leds_device
= {
79 .cls
= &leds_sysclass
,
82 static int leds_suspend(void)
88 static void leds_resume(void)
90 leds_event(led_start
);
93 static void leds_shutdown(void)
95 leds_event(led_halted
);
98 static struct syscore_ops leds_syscore_ops
= {
99 .shutdown
= leds_shutdown
,
100 .suspend
= leds_suspend
,
101 .resume
= leds_resume
,
104 static int __init
leds_init(void)
107 ret
= sysdev_class_register(&leds_sysclass
);
109 ret
= sysdev_register(&leds_device
);
111 ret
= sysdev_create_file(&leds_device
, &attr_event
);
113 register_syscore_ops(&leds_syscore_ops
);
117 device_initcall(leds_init
);
119 EXPORT_SYMBOL(leds_event
);