linux/include/linux/leds.h
<<
>>
Prefs
   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#include <linux/spinlock.h>
  17#include <linux/rwsem.h>
  18
  19struct device;
  20/*
  21 * LED Core
  22 */
  23
  24enum led_brightness {
  25        LED_OFF         = 0,
  26        LED_HALF        = 127,
  27        LED_FULL        = 255,
  28};
  29
  30struct led_classdev {
  31        const char              *name;
  32        int                      brightness;
  33        int                      max_brightness;
  34        int                      flags;
  35
  36        /* Lower 16 bits reflect status */
  37#define LED_SUSPENDED           (1 << 0)
  38        /* Upper 16 bits reflect control information */
  39#define LED_CORE_SUSPENDRESUME  (1 << 16)
  40
  41        /* Set LED brightness level */
  42        /* Must not sleep, use a workqueue if needed */
  43        void            (*brightness_set)(struct led_classdev *led_cdev,
  44                                          enum led_brightness brightness);
  45        /* Get LED brightness level */
  46        enum led_brightness (*brightness_get)(struct led_classdev *led_cdev);
  47
  48        /* Activate hardware accelerated blink */
  49        int             (*blink_set)(struct led_classdev *led_cdev,
  50                                     unsigned long *delay_on,
  51                                     unsigned long *delay_off);
  52
  53        struct device           *dev;
  54        struct list_head         node;                  /* LED Device list */
  55        const char              *default_trigger;       /* Trigger to use */
  56
  57#ifdef CONFIG_LEDS_TRIGGERS
  58        /* Protects the trigger data below */
  59        struct rw_semaphore      trigger_lock;
  60
  61        struct led_trigger      *trigger;
  62        struct list_head         trig_list;
  63        void                    *trigger_data;
  64#endif
  65};
  66
  67extern int led_classdev_register(struct device *parent,
  68                                 struct led_classdev *led_cdev);
  69extern void led_classdev_unregister(struct led_classdev *led_cdev);
  70extern void led_classdev_suspend(struct led_classdev *led_cdev);
  71extern void led_classdev_resume(struct led_classdev *led_cdev);
  72
  73/*
  74 * LED Triggers
  75 */
  76#ifdef CONFIG_LEDS_TRIGGERS
  77
  78#define TRIG_NAME_MAX 50
  79
  80struct led_trigger {
  81        /* Trigger Properties */
  82        const char       *name;
  83        void            (*activate)(struct led_classdev *led_cdev);
  84        void            (*deactivate)(struct led_classdev *led_cdev);
  85
  86        /* LEDs under control by this trigger (for simple triggers) */
  87        rwlock_t          leddev_list_lock;
  88        struct list_head  led_cdevs;
  89
  90        /* Link to next registered trigger */
  91        struct list_head  next_trig;
  92};
  93
  94/* Registration functions for complex triggers */
  95extern int led_trigger_register(struct led_trigger *trigger);
  96extern void led_trigger_unregister(struct led_trigger *trigger);
  97
  98/* Registration functions for simple triggers */
  99#define DEFINE_LED_TRIGGER(x)           static struct led_trigger *x;
 100#define DEFINE_LED_TRIGGER_GLOBAL(x)    struct led_trigger *x;
 101extern void led_trigger_register_simple(const char *name,
 102                                struct led_trigger **trigger);
 103extern void led_trigger_unregister_simple(struct led_trigger *trigger);
 104extern void led_trigger_event(struct led_trigger *trigger,
 105                                enum led_brightness event);
 106
 107#else
 108
 109/* Triggers aren't active - null macros */
 110#define DEFINE_LED_TRIGGER(x)
 111#define DEFINE_LED_TRIGGER_GLOBAL(x)
 112#define led_trigger_register_simple(x, y) do {} while(0)
 113#define led_trigger_unregister_simple(x) do {} while(0)
 114#define led_trigger_event(x, y) do {} while(0)
 115
 116#endif
 117
 118/* Trigger specific functions */
 119#ifdef CONFIG_LEDS_TRIGGER_IDE_DISK
 120extern void ledtrig_ide_activity(void);
 121#else
 122#define ledtrig_ide_activity() do {} while(0)
 123#endif
 124
 125/*
 126 * Generic LED platform data for describing LED names and default triggers.
 127 */
 128struct led_info {
 129        const char      *name;
 130        const char      *default_trigger;
 131        int             flags;
 132};
 133
 134struct led_platform_data {
 135        int             num_leds;
 136        struct led_info *leds;
 137};
 138
 139/* For the leds-gpio driver */
 140struct gpio_led {
 141        const char *name;
 142        const char *default_trigger;
 143        unsigned        gpio;
 144        u8              active_low : 1;
 145        u8              retain_state_suspended : 1;
 146};
 147
 148struct gpio_led_platform_data {
 149        int             num_leds;
 150        struct gpio_led *leds;
 151        int             (*gpio_blink_set)(unsigned gpio,
 152                                        unsigned long *delay_on,
 153                                        unsigned long *delay_off);
 154};
 155
 156
 157#endif          /* __LINUX_LEDS_H_INCLUDED */
 158
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.