LCOV - code coverage report
Current view: top level - lkbce/include/linux - leds.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 1 100.0 %
Date: 2017-01-25 Functions: 0 0 -

          Line data    Source code
       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             : 
      19             : struct device;
      20             : /*
      21             :  * LED Core
      22             :  */
      23             : 
      24             : enum led_brightness {
      25             :         LED_OFF         = 0,
      26             :         LED_HALF        = 127,
      27             :         LED_FULL        = 255,
      28             : };
      29             : 
      30             : struct 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             : 
      70             : extern int led_classdev_register(struct device *parent,
      71             :                                  struct led_classdev *led_cdev);
      72             : extern void led_classdev_unregister(struct led_classdev *led_cdev);
      73             : extern void led_classdev_suspend(struct led_classdev *led_cdev);
      74             : extern 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             : 
      83             : struct 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 */
      98             : extern int led_trigger_register(struct led_trigger *trigger);
      99             : extern 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;
     104             : extern void led_trigger_register_simple(const char *name,
     105             :                                 struct led_trigger **trigger);
     106             : extern void led_trigger_unregister_simple(struct led_trigger *trigger);
     107             : extern 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
     123             : extern 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             :  */
     131             : struct led_info {
     132             :         const char      *name;
     133             :         const char      *default_trigger;
     134             :         int             flags;
     135             : };
     136             : 
     137             : struct led_platform_data {
     138             :         int             num_leds;
     139             :         struct led_info *leds;
     140             : };
     141             : 
     142             : /* For the leds-gpio driver */
     143             : struct 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             : 
     156             : struct gpio_led_platform_data {
     157             :         int             num_leds;
     158             :         struct gpio_led *leds;
     159             :         int             (*gpio_blink_set)(unsigned gpio,
     160             :                                         unsigned long *delay_on,
     161           1 :                                         unsigned long *delay_off);
     162             : };
     163             : 
     164             : 
     165             : #endif          /* __LINUX_LEDS_H_INCLUDED */

Generated by: LCOV version 1.10