home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / leds.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.9 KB  |  111 lines

  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. struct device;
  16. struct class_device;
  17. /*
  18.  * LED Core
  19.  */
  20.  
  21. enum led_brightness {
  22.     LED_OFF        = 0,
  23.     LED_HALF    = 127,
  24.     LED_FULL    = 255,
  25. };
  26.  
  27. struct led_classdev {
  28.     const char        *name;
  29.     int             brightness;
  30.     int             flags;
  31.  
  32. #define LED_SUSPENDED        (1 << 0)
  33.  
  34.     /* Set LED brightness level */
  35.     void        (*brightness_set)(struct led_classdev *led_cdev,
  36.                       enum led_brightness brightness);
  37.  
  38.     struct class_device    *class_dev;
  39.     struct list_head     node;            /* LED Device list */
  40.     char            *default_trigger;    /* Trigger to use */
  41.  
  42. #ifdef CONFIG_LEDS_TRIGGERS
  43.     /* Protects the trigger data below */
  44.     rwlock_t         trigger_lock;
  45.  
  46.     struct led_trigger    *trigger;
  47.     struct list_head     trig_list;
  48.     void            *trigger_data;
  49. #endif
  50. };
  51.  
  52. extern int led_classdev_register(struct device *parent,
  53.                  struct led_classdev *led_cdev);
  54. extern void led_classdev_unregister(struct led_classdev *led_cdev);
  55. extern void led_classdev_suspend(struct led_classdev *led_cdev);
  56. extern void led_classdev_resume(struct led_classdev *led_cdev);
  57.  
  58. /*
  59.  * LED Triggers
  60.  */
  61. #ifdef CONFIG_LEDS_TRIGGERS
  62.  
  63. #define TRIG_NAME_MAX 50
  64.  
  65. struct led_trigger {
  66.     /* Trigger Properties */
  67.     const char     *name;
  68.     void        (*activate)(struct led_classdev *led_cdev);
  69.     void        (*deactivate)(struct led_classdev *led_cdev);
  70.  
  71.     /* LEDs under control by this trigger (for simple triggers) */
  72.     rwlock_t      leddev_list_lock;
  73.     struct list_head  led_cdevs;
  74.  
  75.     /* Link to next registered trigger */
  76.     struct list_head  next_trig;
  77. };
  78.  
  79. /* Registration functions for complex triggers */
  80. extern int led_trigger_register(struct led_trigger *trigger);
  81. extern void led_trigger_unregister(struct led_trigger *trigger);
  82.  
  83. /* Registration functions for simple triggers */
  84. #define DEFINE_LED_TRIGGER(x)        static struct led_trigger *x;
  85. #define DEFINE_LED_TRIGGER_GLOBAL(x)    struct led_trigger *x;
  86. extern void led_trigger_register_simple(const char *name,
  87.                 struct led_trigger **trigger);
  88. extern void led_trigger_unregister_simple(struct led_trigger *trigger);
  89. extern void led_trigger_event(struct led_trigger *trigger,
  90.                 enum led_brightness event);
  91.  
  92. #else
  93.  
  94. /* Triggers aren't active - null macros */
  95. #define DEFINE_LED_TRIGGER(x)
  96. #define DEFINE_LED_TRIGGER_GLOBAL(x)
  97. #define led_trigger_register_simple(x, y) do {} while(0)
  98. #define led_trigger_unregister_simple(x) do {} while(0)
  99. #define led_trigger_event(x, y) do {} while(0)
  100.  
  101. #endif
  102.  
  103. /* Trigger specific functions */
  104. #ifdef CONFIG_LEDS_TRIGGER_IDE_DISK
  105. extern void ledtrig_ide_activity(void);
  106. #else
  107. #define ledtrig_ide_activity() do {} while(0)
  108. #endif
  109.  
  110. #endif        /* __LINUX_LEDS_H_INCLUDED */
  111.