Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v2.6.23-rc5 125 lines 3.2 kB view raw
1/* 2 * Driver model for leds and led triggers 3 * 4 * Copyright (C) 2005 John Lenz <lenz@cs.wisc.edu> 5 * Copyright (C) 2005 Richard Purdie <rpurdie@openedhand.com> 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 17struct device; 18/* 19 * LED Core 20 */ 21 22enum led_brightness { 23 LED_OFF = 0, 24 LED_HALF = 127, 25 LED_FULL = 255, 26}; 27 28struct 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 53extern int led_classdev_register(struct device *parent, 54 struct led_classdev *led_cdev); 55extern void led_classdev_unregister(struct led_classdev *led_cdev); 56extern void led_classdev_suspend(struct led_classdev *led_cdev); 57extern 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 66struct 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 */ 81extern int led_trigger_register(struct led_trigger *trigger); 82extern 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; 87extern void led_trigger_register_simple(const char *name, 88 struct led_trigger **trigger); 89extern void led_trigger_unregister_simple(struct led_trigger *trigger); 90extern 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 106extern void ledtrig_ide_activity(void); 107#else 108#define ledtrig_ide_activity() do {} while(0) 109#endif 110 111/* For the leds-gpio driver */ 112struct gpio_led { 113 const char *name; 114 char *default_trigger; 115 unsigned gpio; 116 u8 active_low; 117}; 118 119struct gpio_led_platform_data { 120 int num_leds; 121 struct gpio_led *leds; 122}; 123 124 125#endif /* __LINUX_LEDS_H_INCLUDED */