diff options
author | Kim, Milo <Milo.Kim@ti.com> | 2013-03-14 07:29:19 -0400 |
---|---|---|
committer | Bryan Wu <cooloney@gmail.com> | 2013-04-01 14:04:50 -0400 |
commit | 39f7e08af3fd9ca1cb94a8270354afb2ea5cfcd3 (patch) | |
tree | ea818502c32b72175c02167537c862d8e9c79c79 /include/linux/leds.h | |
parent | fbd9df28faeda17b1a9d3e9ab976e969be98d379 (diff) |
leds: trigger: use inline functions instead of macros
Macros are used in case that an inline function doesn't work.
Otherwise, use an empty inline function.
(a) Case of !CONFIG_LEDS_TRIGGERS
Following macros are replaced with inline functions.
led_trigger_register_simple()
led_trigger_unregister_simple()
led_trigger_event()
To make inline types, the structure, 'led_trigger' should be defined.
This structure has no member at all.
(b) Case of !CONFIG_LEDS_TRIGGER_IDE_DISK
ledtrig_ide_activity() macro is replaced with an inline function as well.
(c) DEFINE_LED_TRIGGER() and DEFINE_LED_TRIGGER_GLOBAL()
Struct 'led_trigger' is defined both cases, with CONFIG_LEDS_TRIGGERS and
without CONFIG_LEDS_TRIGGERS.
Those macros are moved out of CONFIG_LED_TRIGGERS because of no-dependency
on CONFIG_LEDS_TRIGGERS.
(d) Fix build errors in mmc-core driver
After replacing macros with inline functions, following build errors occur.
(condition: CONFIG_LEDS_TRIGGERS is not set)
drivers/mmc/core/core.c: In function 'mmc_request_done':
drivers/mmc/core/core.c:164:25: error: 'struct mmc_host' has no member named 'led'
drivers/mmc/core/core.c: In function 'mmc_start_request':
drivers/mmc/core/core.c:254:24: error: 'struct mmc_host' has no member named 'led'
make[3]: *** [drivers/mmc/core/core.o] Error 1
The reason of these errors is non-existent member variable, 'led'.
It is only valid when CONFIG_LEDS_TRIGGERS is set.
But now, it can be used without this dependency.
To fix build errors, member 'led' is always used without its config option in
'include/linux/mmc/host.h'.
Signed-off-by: Milo(Woogyom) Kim <milo.kim@ti.com>
Signed-off-by: Bryan Wu <cooloney@gmail.com>
Diffstat (limited to 'include/linux/leds.h')
-rw-r--r-- | include/linux/leds.h | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/include/linux/leds.h b/include/linux/leds.h index 0d9b5eed714e..2d8c0b4f2f76 100644 --- a/include/linux/leds.h +++ b/include/linux/leds.h | |||
@@ -142,6 +142,10 @@ extern void led_set_brightness(struct led_classdev *led_cdev, | |||
142 | /* | 142 | /* |
143 | * LED Triggers | 143 | * LED Triggers |
144 | */ | 144 | */ |
145 | /* Registration functions for simple triggers */ | ||
146 | #define DEFINE_LED_TRIGGER(x) static struct led_trigger *x; | ||
147 | #define DEFINE_LED_TRIGGER_GLOBAL(x) struct led_trigger *x; | ||
148 | |||
145 | #ifdef CONFIG_LEDS_TRIGGERS | 149 | #ifdef CONFIG_LEDS_TRIGGERS |
146 | 150 | ||
147 | #define TRIG_NAME_MAX 50 | 151 | #define TRIG_NAME_MAX 50 |
@@ -164,9 +168,6 @@ struct led_trigger { | |||
164 | extern int led_trigger_register(struct led_trigger *trigger); | 168 | extern int led_trigger_register(struct led_trigger *trigger); |
165 | extern void led_trigger_unregister(struct led_trigger *trigger); | 169 | extern void led_trigger_unregister(struct led_trigger *trigger); |
166 | 170 | ||
167 | /* Registration functions for simple triggers */ | ||
168 | #define DEFINE_LED_TRIGGER(x) static struct led_trigger *x; | ||
169 | #define DEFINE_LED_TRIGGER_GLOBAL(x) struct led_trigger *x; | ||
170 | extern void led_trigger_register_simple(const char *name, | 171 | extern void led_trigger_register_simple(const char *name, |
171 | struct led_trigger **trigger); | 172 | struct led_trigger **trigger); |
172 | extern void led_trigger_unregister_simple(struct led_trigger *trigger); | 173 | extern void led_trigger_unregister_simple(struct led_trigger *trigger); |
@@ -199,20 +200,22 @@ extern void led_trigger_rename_static(const char *name, | |||
199 | 200 | ||
200 | #else | 201 | #else |
201 | 202 | ||
202 | /* Triggers aren't active - null macros */ | 203 | /* Trigger has no members */ |
203 | #define DEFINE_LED_TRIGGER(x) | 204 | struct led_trigger {}; |
204 | #define DEFINE_LED_TRIGGER_GLOBAL(x) | ||
205 | #define led_trigger_register_simple(x, y) do {} while(0) | ||
206 | #define led_trigger_unregister_simple(x) do {} while(0) | ||
207 | #define led_trigger_event(x, y) do {} while(0) | ||
208 | 205 | ||
209 | #endif | 206 | /* Trigger inline empty functions */ |
207 | static inline void led_trigger_register_simple(const char *name, | ||
208 | struct led_trigger **trigger) {} | ||
209 | static inline void led_trigger_unregister_simple(struct led_trigger *trigger) {} | ||
210 | static inline void led_trigger_event(struct led_trigger *trigger, | ||
211 | enum led_brightness event) {} | ||
212 | #endif /* CONFIG_LEDS_TRIGGERS */ | ||
210 | 213 | ||
211 | /* Trigger specific functions */ | 214 | /* Trigger specific functions */ |
212 | #ifdef CONFIG_LEDS_TRIGGER_IDE_DISK | 215 | #ifdef CONFIG_LEDS_TRIGGER_IDE_DISK |
213 | extern void ledtrig_ide_activity(void); | 216 | extern void ledtrig_ide_activity(void); |
214 | #else | 217 | #else |
215 | #define ledtrig_ide_activity() do {} while(0) | 218 | static inline void ledtrig_ide_activity(void) {} |
216 | #endif | 219 | #endif |
217 | 220 | ||
218 | /* | 221 | /* |