summaryrefslogtreecommitdiffstats
path: root/include/led.h
blob: f17621e1644c774fbbeb412d8b2a1b76dd1ef313 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#ifndef __LED_H
#define __LED_H

#include <errno.h>

struct led {
	void (*set)(struct led *, unsigned int value);
	int max_value;
	char *name;
	int num;
	struct list_head list;
};

struct led *led_by_number(int no);
struct led *led_by_name(const char *name);
struct led *led_by_name_or_number(const char *str);

static inline int led_get_number(struct led *led)
{
	return led->num;
}

int led_set_num(int num, unsigned int value);
int led_set(struct led *led, unsigned int value);
int led_register(struct led *led);
void led_unregister(struct led *led);
void led_unregister(struct led *led);

/* LED trigger support */
enum led_trigger {
	LED_TRIGGER_PANIC,
	LED_TRIGGER_HEARTBEAT,
	LED_TRIGGER_NET_RX,
	LED_TRIGGER_NET_TX,
	LED_TRIGGER_NET_TXRX,
	LED_TRIGGER_DEFAULT_ON,
	LED_TRIGGER_MAX,
};

enum trigger_type {
	TRIGGER_ENABLE,
	TRIGGER_DISABLE,
	TRIGGER_FLASH,
};

#ifdef CONFIG_LED_TRIGGERS
int led_set_trigger(enum led_trigger trigger, struct led *led);
void led_trigger(enum led_trigger trigger, enum trigger_type);
#else
static inline int led_set_trigger(enum led_trigger trigger, struct led *led)
{
	return 0;
}

static inline void led_trigger(enum led_trigger trigger, enum trigger_type type)
{
}
#endif

int led_get_trigger(enum led_trigger trigger);

void led_of_parse_trigger(struct led *led, struct device_node *np);

/* gpio LED support */
struct gpio_led {
	int gpio;
	bool active_low;
	struct led led;
};

struct gpio_bicolor_led {
	int gpio_c0, gpio_c1;
	bool active_low;
	struct led led;
};

struct gpio_rgb_led {
	int gpio_r, gpio_g, gpio_b;
	bool active_low;
	struct led led;
};

#ifdef CONFIG_LED_GPIO
int led_gpio_register(struct gpio_led *led);
void led_gpio_unregister(struct gpio_led *led);
#else
static inline int led_gpio_register(struct gpio_led *led)
{
	return -ENOSYS;
}

static inline void led_gpio_unregister(struct gpio_led *led)
{
}
#endif

#ifdef CONFIG_LED_GPIO_BICOLOR
int led_gpio_bicolor_register(struct gpio_bicolor_led *led);
void led_gpio_bicolor_unregister(struct gpio_bicolor_led *led);
#else
static inline int led_gpio_bicolor_register(struct gpio_bicolor_led *led)
{
	return -ENOSYS;
}

static inline void led_gpio_bicolor_unregister(struct gpio_bicolor_led *led)
{
}
#endif

#ifdef CONFIG_LED_GPIO_RGB
int led_gpio_rgb_register(struct gpio_rgb_led *led);
void led_gpio_rgb_unregister(struct gpio_led *led);
#else
static inline int led_gpio_rgb_register(struct gpio_rgb_led *led)
{
	return -ENOSYS;
}

static inline void led_gpio_rgb_unregister(struct gpio_led *led)
{
}
#endif

#endif /* __LED_H */