xref: /OK3568_Linux_fs/u-boot/include/led.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright (c) 2015 Google, Inc
3*4882a593Smuzhiyun  * Written by Simon Glass <sjg@chromium.org>
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * SPDX-License-Identifier:	GPL-2.0+
6*4882a593Smuzhiyun  */
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #ifndef __LED_H
9*4882a593Smuzhiyun #define __LED_H
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun /**
12*4882a593Smuzhiyun  * struct led_uc_plat - Platform data the uclass stores about each device
13*4882a593Smuzhiyun  *
14*4882a593Smuzhiyun  * @label:	LED label
15*4882a593Smuzhiyun  */
16*4882a593Smuzhiyun struct led_uc_plat {
17*4882a593Smuzhiyun 	const char *label;
18*4882a593Smuzhiyun };
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun /**
21*4882a593Smuzhiyun  * struct led_uc_priv - Private data the uclass stores about each device
22*4882a593Smuzhiyun  *
23*4882a593Smuzhiyun  * @period_ms:	Flash period in milliseconds
24*4882a593Smuzhiyun  */
25*4882a593Smuzhiyun struct led_uc_priv {
26*4882a593Smuzhiyun 	int period_ms;
27*4882a593Smuzhiyun };
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun enum led_state_t {
30*4882a593Smuzhiyun 	LEDST_OFF = 0,
31*4882a593Smuzhiyun 	LEDST_ON = 1,
32*4882a593Smuzhiyun 	LEDST_TOGGLE,
33*4882a593Smuzhiyun #ifdef CONFIG_LED_BLINK
34*4882a593Smuzhiyun 	LEDST_BLINK,
35*4882a593Smuzhiyun #endif
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun 	LEDST_COUNT,
38*4882a593Smuzhiyun };
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun struct led_ops {
41*4882a593Smuzhiyun 	/**
42*4882a593Smuzhiyun 	 * set_state() - set the state of an LED
43*4882a593Smuzhiyun 	 *
44*4882a593Smuzhiyun 	 * @dev:	LED device to change
45*4882a593Smuzhiyun 	 * @state:	LED state to set
46*4882a593Smuzhiyun 	 * @return 0 if OK, -ve on error
47*4882a593Smuzhiyun 	 */
48*4882a593Smuzhiyun 	int (*set_state)(struct udevice *dev, enum led_state_t state);
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun 	/**
51*4882a593Smuzhiyun 	 * led_get_state() - get the state of an LED
52*4882a593Smuzhiyun 	 *
53*4882a593Smuzhiyun 	 * @dev:	LED device to change
54*4882a593Smuzhiyun 	 * @return LED state led_state_t, or -ve on error
55*4882a593Smuzhiyun 	 */
56*4882a593Smuzhiyun 	enum led_state_t (*get_state)(struct udevice *dev);
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun #ifdef CONFIG_LED_BLINK
59*4882a593Smuzhiyun 	/**
60*4882a593Smuzhiyun 	 * led_set_period() - set the blink period of an LED
61*4882a593Smuzhiyun 	 *
62*4882a593Smuzhiyun 	 * Thie records the period if supported, or returns -ENOSYS if not.
63*4882a593Smuzhiyun 	 * To start the LED blinking, use set_state().
64*4882a593Smuzhiyun 	 *
65*4882a593Smuzhiyun 	 * @dev:	LED device to change
66*4882a593Smuzhiyun 	 * @period_ms:	LED blink period in milliseconds
67*4882a593Smuzhiyun 	 * @return 0 if OK, -ve on error
68*4882a593Smuzhiyun 	 */
69*4882a593Smuzhiyun 	int (*set_period)(struct udevice *dev, int period_ms);
70*4882a593Smuzhiyun #endif
71*4882a593Smuzhiyun };
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun #define led_get_ops(dev)	((struct led_ops *)(dev)->driver->ops)
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun /**
76*4882a593Smuzhiyun  * led_get_by_label() - Find an LED device by label
77*4882a593Smuzhiyun  *
78*4882a593Smuzhiyun  * @label:	LED label to look up
79*4882a593Smuzhiyun  * @devp:	Returns the associated device, if found
80*4882a593Smuzhiyun  * @return 0 if found, -ENODEV if not found, other -ve on error
81*4882a593Smuzhiyun  */
82*4882a593Smuzhiyun int led_get_by_label(const char *label, struct udevice **devp);
83*4882a593Smuzhiyun 
84*4882a593Smuzhiyun /**
85*4882a593Smuzhiyun  * led_set_state() - set the state of an LED
86*4882a593Smuzhiyun  *
87*4882a593Smuzhiyun  * @dev:	LED device to change
88*4882a593Smuzhiyun  * @state:	LED state to set
89*4882a593Smuzhiyun  * @return 0 if OK, -ve on error
90*4882a593Smuzhiyun  */
91*4882a593Smuzhiyun int led_set_state(struct udevice *dev, enum led_state_t state);
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun /**
94*4882a593Smuzhiyun  * led_get_state() - get the state of an LED
95*4882a593Smuzhiyun  *
96*4882a593Smuzhiyun  * @dev:	LED device to change
97*4882a593Smuzhiyun  * @return LED state led_state_t, or -ve on error
98*4882a593Smuzhiyun  */
99*4882a593Smuzhiyun enum led_state_t led_get_state(struct udevice *dev);
100*4882a593Smuzhiyun 
101*4882a593Smuzhiyun /**
102*4882a593Smuzhiyun  * led_set_period() - set the blink period of an LED
103*4882a593Smuzhiyun  *
104*4882a593Smuzhiyun  * @dev:	LED device to change
105*4882a593Smuzhiyun  * @period_ms:	LED blink period in milliseconds
106*4882a593Smuzhiyun  * @return 0 if OK, -ve on error
107*4882a593Smuzhiyun  */
108*4882a593Smuzhiyun int led_set_period(struct udevice *dev, int period_ms);
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun #endif
111