Blame view

include/linux/leds.h 3.08 KB
c72a1d608   Richard Purdie   [PATCH] LED: add ...
1
2
3
4
5
6
7
8
9
10
11
12
13
  /*
   * Driver model for leds and led triggers
   *
   * Copyright (C) 2005 John Lenz <lenz@cs.wisc.edu>
   * Copyright (C) 2005 Richard Purdie <rpurdie@openedhand.com>
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License version 2 as
   * published by the Free Software Foundation.
   *
   */
  #ifndef __LINUX_LEDS_H_INCLUDED
  #define __LINUX_LEDS_H_INCLUDED
af410fc13   Johannes Berg   [PATCH] make leds...
14
  #include <linux/list.h>
af410fc13   Johannes Berg   [PATCH] make leds...
15

c72a1d608   Richard Purdie   [PATCH] LED: add ...
16
  struct device;
c72a1d608   Richard Purdie   [PATCH] LED: add ...
17
18
19
20
21
  /*
   * LED Core
   */
  
  enum led_brightness {
fb5035dbb   Ben Dooks   [PATCH] leds: re-...
22
23
24
  	LED_OFF		= 0,
  	LED_HALF	= 127,
  	LED_FULL	= 255,
c72a1d608   Richard Purdie   [PATCH] LED: add ...
25
26
27
  };
  
  struct led_classdev {
fb5035dbb   Ben Dooks   [PATCH] leds: re-...
28
29
30
  	const char		*name;
  	int			 brightness;
  	int			 flags;
c72a1d608   Richard Purdie   [PATCH] LED: add ...
31

fb5035dbb   Ben Dooks   [PATCH] leds: re-...
32
  #define LED_SUSPENDED		(1 << 0)
c72a1d608   Richard Purdie   [PATCH] LED: add ...
33

fb5035dbb   Ben Dooks   [PATCH] leds: re-...
34
35
36
  	/* Set LED brightness level */
  	void		(*brightness_set)(struct led_classdev *led_cdev,
  					  enum led_brightness brightness);
f8a7c6fe1   Richard Purdie   leds: Convert fro...
37
  	struct device		*dev;
fb5035dbb   Ben Dooks   [PATCH] leds: re-...
38
39
  	struct list_head	 node;			/* LED Device list */
  	char			*default_trigger;	/* Trigger to use */
c72a1d608   Richard Purdie   [PATCH] LED: add ...
40

c3bc9956e   Richard Purdie   [PATCH] LED: add ...
41
  #ifdef CONFIG_LEDS_TRIGGERS
c3bc9956e   Richard Purdie   [PATCH] LED: add ...
42
  	/* Protects the trigger data below */
fb5035dbb   Ben Dooks   [PATCH] leds: re-...
43
  	rwlock_t		 trigger_lock;
c3bc9956e   Richard Purdie   [PATCH] LED: add ...
44

fb5035dbb   Ben Dooks   [PATCH] leds: re-...
45
46
47
  	struct led_trigger	*trigger;
  	struct list_head	 trig_list;
  	void			*trigger_data;
c3bc9956e   Richard Purdie   [PATCH] LED: add ...
48
  #endif
c72a1d608   Richard Purdie   [PATCH] LED: add ...
49
50
51
  };
  
  extern int led_classdev_register(struct device *parent,
fb5035dbb   Ben Dooks   [PATCH] leds: re-...
52
  				 struct led_classdev *led_cdev);
c72a1d608   Richard Purdie   [PATCH] LED: add ...
53
54
55
  extern void led_classdev_unregister(struct led_classdev *led_cdev);
  extern void led_classdev_suspend(struct led_classdev *led_cdev);
  extern void led_classdev_resume(struct led_classdev *led_cdev);
c3bc9956e   Richard Purdie   [PATCH] LED: add ...
56
57
58
59
60
61
62
63
64
  /*
   * LED Triggers
   */
  #ifdef CONFIG_LEDS_TRIGGERS
  
  #define TRIG_NAME_MAX 50
  
  struct led_trigger {
  	/* Trigger Properties */
fb5035dbb   Ben Dooks   [PATCH] leds: re-...
65
66
67
  	const char	 *name;
  	void		(*activate)(struct led_classdev *led_cdev);
  	void		(*deactivate)(struct led_classdev *led_cdev);
c3bc9956e   Richard Purdie   [PATCH] LED: add ...
68
69
  
  	/* LEDs under control by this trigger (for simple triggers) */
fb5035dbb   Ben Dooks   [PATCH] leds: re-...
70
71
  	rwlock_t	  leddev_list_lock;
  	struct list_head  led_cdevs;
c3bc9956e   Richard Purdie   [PATCH] LED: add ...
72
73
  
  	/* Link to next registered trigger */
fb5035dbb   Ben Dooks   [PATCH] leds: re-...
74
  	struct list_head  next_trig;
c3bc9956e   Richard Purdie   [PATCH] LED: add ...
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
  };
  
  /* Registration functions for complex triggers */
  extern int led_trigger_register(struct led_trigger *trigger);
  extern void led_trigger_unregister(struct led_trigger *trigger);
  
  /* Registration functions for simple triggers */
  #define DEFINE_LED_TRIGGER(x)		static struct led_trigger *x;
  #define DEFINE_LED_TRIGGER_GLOBAL(x)	struct led_trigger *x;
  extern void led_trigger_register_simple(const char *name,
  				struct led_trigger **trigger);
  extern void led_trigger_unregister_simple(struct led_trigger *trigger);
  extern void led_trigger_event(struct led_trigger *trigger,
  				enum led_brightness event);
  
  #else
  
  /* Triggers aren't active - null macros */
  #define DEFINE_LED_TRIGGER(x)
  #define DEFINE_LED_TRIGGER_GLOBAL(x)
  #define led_trigger_register_simple(x, y) do {} while(0)
  #define led_trigger_unregister_simple(x) do {} while(0)
  #define led_trigger_event(x, y) do {} while(0)
  
  #endif
2bfb646cd   Richard Purdie   [PATCH] LED: Add ...
100
101
102
103
104
105
106
  
  /* Trigger specific functions */
  #ifdef CONFIG_LEDS_TRIGGER_IDE_DISK
  extern void ledtrig_ide_activity(void);
  #else
  #define ledtrig_ide_activity() do {} while(0)
  #endif
22e03f3b5   Raphael Assenat   leds: Add generic...
107
108
109
110
111
112
113
114
115
116
117
118
  /* For the leds-gpio driver */
  struct gpio_led {
  	const char *name;
  	char *default_trigger;
  	unsigned 	gpio;
  	u8 		active_low;
  };
  
  struct gpio_led_platform_data {
  	int 		num_leds;
  	struct gpio_led *leds;
  };
c72a1d608   Richard Purdie   [PATCH] LED: add ...
119
  #endif		/* __LINUX_LEDS_H_INCLUDED */