1 /* 2 * Driver model for leds and led triggers 3 * 4 * Copyright (C) 2005 John Lenz <[email protected]> 5 * Copyright (C) 2005 Richard Purdie <[email protected]> 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 9 * published by the Free Software Foundation. 10 * 11 */ 12 #ifndef __LINUX_LEDS_H_INCLUDED 13 #define __LINUX_LEDS_H_INCLUDED 14 15 #include <linux/list.h> 16 17 struct device; 18 /* 19 * LED Core 20 */ 21 22 enum led_brightness { 23 LED_OFF = 0, 24 LED_HALF = 127, 25 LED_FULL = 255, 26 }; 27 28 struct led_classdev { 29 const char *name; 30 int brightness; 31 int flags; 32 33 #define LED_SUSPENDED (1 << 0) 34 35 /* Set LED brightness level */ 36 void (*brightness_set)(struct led_classdev *led_cdev, 37 enum led_brightness brightness); 38 39 struct device *dev; 40 struct list_head node; /* LED Device list */ 41 char *default_trigger; /* Trigger to use */ 42 43 #ifdef CONFIG_LEDS_TRIGGERS 44 /* Protects the trigger data below */ 45 rwlock_t trigger_lock; 46 47 struct led_trigger *trigger; 48 struct list_head trig_list; 49 void *trigger_data; 50 #endif 51 }; 52 53 extern int led_classdev_register(struct device *parent, 54 struct led_classdev *led_cdev); 55 extern void led_classdev_unregister(struct led_classdev *led_cdev); 56 extern void led_classdev_suspend(struct led_classdev *led_cdev); 57 extern void led_classdev_resume(struct led_classdev *led_cdev); 58 59 /* 60 * LED Triggers 61 */ 62 #ifdef CONFIG_LEDS_TRIGGERS 63 64 #define TRIG_NAME_MAX 50 65 66 struct led_trigger { 67 /* Trigger Properties */ 68 const char *name; 69 void (*activate)(struct led_classdev *led_cdev); 70 void (*deactivate)(struct led_classdev *led_cdev); 71 72 /* LEDs under control by this trigger (for simple triggers) */ 73 rwlock_t leddev_list_lock; 74 struct list_head led_cdevs; 75 76 /* Link to next registered trigger */ 77 struct list_head next_trig; 78 }; 79 80 /* Registration functions for complex triggers */ 81 extern int led_trigger_register(struct led_trigger *trigger); 82 extern void led_trigger_unregister(struct led_trigger *trigger); 83 84 /* Registration functions for simple triggers */ 85 #define DEFINE_LED_TRIGGER(x) static struct led_trigger *x; 86 #define DEFINE_LED_TRIGGER_GLOBAL(x) struct led_trigger *x; 87 extern void led_trigger_register_simple(const char *name, 88 struct led_trigger **trigger); 89 extern void led_trigger_unregister_simple(struct led_trigger *trigger); 90 extern void led_trigger_event(struct led_trigger *trigger, 91 enum led_brightness event); 92 93 #else 94 95 /* Triggers aren't active - null macros */ 96 #define DEFINE_LED_TRIGGER(x) 97 #define DEFINE_LED_TRIGGER_GLOBAL(x) 98 #define led_trigger_register_simple(x, y) do {} while(0) 99 #define led_trigger_unregister_simple(x) do {} while(0) 100 #define led_trigger_event(x, y) do {} while(0) 101 102 #endif 103 104 /* Trigger specific functions */ 105 #ifdef CONFIG_LEDS_TRIGGER_IDE_DISK 106 extern void ledtrig_ide_activity(void); 107 #else 108 #define ledtrig_ide_activity() do {} while(0) 109 #endif 110 111 /* For the leds-gpio driver */ 112 struct gpio_led { 113 const char *name; 114 char *default_trigger; 115 unsigned gpio; 116 u8 active_low; 117 }; 118 119 struct gpio_led_platform_data { 120 int num_leds; 121 struct gpio_led *leds; 122 }; 123 124 125 #endif /* __LINUX_LEDS_H_INCLUDED */ 126