time.c (7921fc4a25800f4210bca96c05dea67a6b736d32) time.c (373b32abf9b33616ad94283461bb2ab49e8371d5)
1/*
2 * linux/arch/arm/kernel/time.c
3 *
4 * Copyright (C) 1991, 1992, 1995 Linus Torvalds
5 * Modifications for ARM (C) 1994-2001 Russell King
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as

--- 65 unchanged lines hidden (view full) ---

74
75#ifndef CONFIG_GENERIC_TIME
76static unsigned long dummy_gettimeoffset(void)
77{
78 return 0;
79}
80#endif
81
1/*
2 * linux/arch/arm/kernel/time.c
3 *
4 * Copyright (C) 1991, 1992, 1995 Linus Torvalds
5 * Modifications for ARM (C) 1994-2001 Russell King
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as

--- 65 unchanged lines hidden (view full) ---

74
75#ifndef CONFIG_GENERIC_TIME
76static unsigned long dummy_gettimeoffset(void)
77{
78 return 0;
79}
80#endif
81
82#ifdef CONFIG_LEDS
83
84static void dummy_leds_event(led_event_t evt)
85{
86}
87
88void (*leds_event)(led_event_t) = dummy_leds_event;
89
90struct leds_evt_name {
91 const char name[8];
92 int on;
93 int off;
94};
95
96static const struct leds_evt_name evt_names[] = {
97 { "amber", led_amber_on, led_amber_off },
98 { "blue", led_blue_on, led_blue_off },
99 { "green", led_green_on, led_green_off },
100 { "red", led_red_on, led_red_off },
101};
102
103static ssize_t leds_store(struct sys_device *dev,
104 struct sysdev_attribute *attr,
105 const char *buf, size_t size)
106{
107 int ret = -EINVAL, len = strcspn(buf, " ");
108
109 if (len > 0 && buf[len] == '\0')
110 len--;
111
112 if (strncmp(buf, "claim", len) == 0) {
113 leds_event(led_claim);
114 ret = size;
115 } else if (strncmp(buf, "release", len) == 0) {
116 leds_event(led_release);
117 ret = size;
118 } else {
119 int i;
120
121 for (i = 0; i < ARRAY_SIZE(evt_names); i++) {
122 if (strlen(evt_names[i].name) != len ||
123 strncmp(buf, evt_names[i].name, len) != 0)
124 continue;
125 if (strncmp(buf+len, " on", 3) == 0) {
126 leds_event(evt_names[i].on);
127 ret = size;
128 } else if (strncmp(buf+len, " off", 4) == 0) {
129 leds_event(evt_names[i].off);
130 ret = size;
131 }
132 break;
133 }
134 }
135 return ret;
136}
137
138static SYSDEV_ATTR(event, 0200, NULL, leds_store);
139
140static int leds_suspend(struct sys_device *dev, pm_message_t state)
141{
142 leds_event(led_stop);
143 return 0;
144}
145
146static int leds_resume(struct sys_device *dev)
147{
148 leds_event(led_start);
149 return 0;
150}
151
152static int leds_shutdown(struct sys_device *dev)
153{
154 leds_event(led_halted);
155 return 0;
156}
157
158static struct sysdev_class leds_sysclass = {
159 .name = "leds",
160 .shutdown = leds_shutdown,
161 .suspend = leds_suspend,
162 .resume = leds_resume,
163};
164
165static struct sys_device leds_device = {
166 .id = 0,
167 .cls = &leds_sysclass,
168};
169
170static int __init leds_init(void)
171{
172 int ret;
173 ret = sysdev_class_register(&leds_sysclass);
174 if (ret == 0)
175 ret = sysdev_register(&leds_device);
176 if (ret == 0)
177 ret = sysdev_create_file(&leds_device, &attr_event);
178 return ret;
179}
180
181device_initcall(leds_init);
182
183EXPORT_SYMBOL(leds_event);
184#endif
185
186#ifdef CONFIG_LEDS_TIMER
187static inline void do_leds(void)
188{
189 static unsigned int count = HZ/2;
190
191 if (--count == 0) {
192 count = HZ/2;
193 leds_event(led_timer);

--- 134 unchanged lines hidden ---
82#ifdef CONFIG_LEDS_TIMER
83static inline void do_leds(void)
84{
85 static unsigned int count = HZ/2;
86
87 if (--count == 0) {
88 count = HZ/2;
89 leds_event(led_timer);

--- 134 unchanged lines hidden ---