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, delays are in
  49         * miliseconds and if none is provided then a sensible default
  50         * should be chosen. The call can adjust the timings if it can't
  51         * match the values specified exactly. */
  52        int             (*blink_set)(struct led_classdev *led_cdev,
  53                                     unsigned long *delay_on,
  54                                     unsigned long *delay_off);
  55
  56        struct device           *dev;
  57        struct list_head         node;                  /* LED Device list */
  58        const char              *default_trigger;       /* Trigger to use */
  59
  60#ifdef CONFIG_LEDS_TRIGGERS
  61        /* Protects the trigger data below */
  62        struct rw_semaphore      trigger_lock;
  63
  64        struct led_trigger      *trigger;
  65        struct list_head         trig_list;
  66        void                    *trigger_data;
  67#endif
  68};
  69
  70extern int led_classdev_register(struct device *parent,
  71                                 struct led_classdev *led_cdev);
  72extern void led_classdev_unregister(struct led_classdev *led_cdev);
  73extern void led_classdev_suspend(struct led_classdev *led_cdev);
  74extern void led_classdev_resume(struct led_classdev *led_cdev);
  75
  76/*
  77 * LED Triggers
  78 */
  79#ifdef CONFIG_LEDS_TRIGGERS
  80
  81#define TRIG_NAME_MAX 50
  82
  83struct led_trigger {
  84        /* Trigger Properties */
  85        const char       *name;
  86        void            (*activate)(struct led_classdev *led_cdev);
  87        void            (*deactivate)(struct led_classdev *led_cdev);
  88
  89        /* LEDs under control by this trigger (for simple triggers) */
  90        rwlock_t          leddev_list_lock;
  91        struct list_head  led_cdevs;
  92
  93        /* Link to next registered trigger */
  94        struct list_head  next_trig;
  95};
  96
  97/* Registration functions for complex triggers */
  98extern int led_trigger_register(struct led_trigger *trigger);
  99extern void led_trigger_unregister(struct led_trigger *trigger);
 100
 101/* Registration functions for simple triggers */
 102#define DEFINE_LED_TRIGGER(x)           static struct led_trigger *x;
 103#define DEFINE_LED_TRIGGER_GLOBAL(x)    struct led_trigger *x;
 104extern void led_trigger_register_simple(const char *name,
 105                                struct led_trigger **trigger);
 106extern void led_trigger_unregister_simple(struct led_trigger *trigger);
 107extern void led_trigger_event(struct led_trigger *trigger,
 108                                enum led_brightness event);
 109
 110#else
 111
 112/* Triggers aren't active - null macros */
 113#define DEFINE_LED_TRIGGER(x)
 114#define DEFINE_LED_TRIGGER_GLOBAL(x)
 115#define led_trigger_register_simple(x, y) do {} while(0)
 116#define led_trigger_unregister_simple(x) do {} while(0)
 117#define led_trigger_event(x, y) do {} while(0)
 118
 119#endif
 120
 121/* Trigger specific functions */
 122#ifdef CONFIG_LEDS_TRIGGER_IDE_DISK
 123extern void ledtrig_ide_activity(void);
 124#else
 125#define ledtrig_ide_activity() do {} while(0)
 126#endif
 127
 128/*
 129 * Generic LED platform data for describing LED names and default triggers.
 130 */
 131struct led_info {
 132        const char      *name;
 133        const char      *default_trigger;
 134        int             flags;
 135};
 136
 137struct led_platform_data {
 138        int             num_leds;
 139        struct led_info *leds;
 140};
 141
 142/* For the leds-gpio driver */
 143struct gpio_led {
 144        const char *name;
 145        const char *default_trigger;
 146        unsigned        gpio;
 147        unsigned        active_low : 1;
 148        unsigned        retain_state_suspended : 1;
 149        unsigned        default_state : 2;
 150        /* default_state should be one of LEDS_GPIO_DEFSTATE_(ON|OFF|KEEP) */
 151};
 152#define LEDS_GPIO_DEFSTATE_OFF          0
 153#define LEDS_GPIO_DEFSTATE_ON           1
 154#define LEDS_GPIO_DEFSTATE_KEEP         2
 155
 156struct gpio_led_platform_data {
 157        int             num_leds;
 158        struct gpio_led *leds;
 159
 160#define GPIO_LED_NO_BLINK_LOW   0       /* No blink GPIO state low */
 161#define GPIO_LED_NO_BLINK_HIGH  1       /* No blink GPIO state high */
 162#define GPIO_LED_BLINK          2       /* Plase, blink */
 163        int             (*gpio_blink_set)(unsigned gpio, int state,
 164                                        unsigned long *delay_on,
 165                                        unsigned long *delay_off);
 166};
 167
 168
 169#endif          /* __LINUX_LEDS_H_INCLUDED */
 170
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.