xref: /rk3399_rockchip-uboot/include/led.h (revision 4f66e09bb9fbc47b73f67c3cc08ee2663e8fcdb1)
15917112cSSimon Glass /*
25917112cSSimon Glass  * Copyright (c) 2015 Google, Inc
35917112cSSimon Glass  * Written by Simon Glass <sjg@chromium.org>
45917112cSSimon Glass  *
55917112cSSimon Glass  * SPDX-License-Identifier:	GPL-2.0+
65917112cSSimon Glass  */
75917112cSSimon Glass 
85917112cSSimon Glass #ifndef __LED_H
95917112cSSimon Glass #define __LED_H
105917112cSSimon Glass 
115917112cSSimon Glass /**
1256e19871SSimon Glass  * struct led_uc_plat - Platform data the uclass stores about each device
135917112cSSimon Glass  *
145917112cSSimon Glass  * @label:	LED label
155917112cSSimon Glass  */
1656e19871SSimon Glass struct led_uc_plat {
175917112cSSimon Glass 	const char *label;
185917112cSSimon Glass };
195917112cSSimon Glass 
20*53378dacSSimon Glass /**
21*53378dacSSimon Glass  * struct led_uc_priv - Private data the uclass stores about each device
22*53378dacSSimon Glass  *
23*53378dacSSimon Glass  * @period_ms:	Flash period in milliseconds
24*53378dacSSimon Glass  */
25*53378dacSSimon Glass struct led_uc_priv {
26*53378dacSSimon Glass 	int period_ms;
27*53378dacSSimon Glass };
28*53378dacSSimon Glass 
29ddae9fcdSSimon Glass enum led_state_t {
30ddae9fcdSSimon Glass 	LEDST_OFF = 0,
31ddae9fcdSSimon Glass 	LEDST_ON = 1,
329413ad4fSSimon Glass 	LEDST_TOGGLE,
33*53378dacSSimon Glass #ifdef CONFIG_LED_BLINK
34*53378dacSSimon Glass 	LEDST_BLINK,
35*53378dacSSimon Glass #endif
36ddae9fcdSSimon Glass 
37ddae9fcdSSimon Glass 	LEDST_COUNT,
38ddae9fcdSSimon Glass };
39ddae9fcdSSimon Glass 
405917112cSSimon Glass struct led_ops {
415917112cSSimon Glass 	/**
42ddae9fcdSSimon Glass 	 * set_state() - set the state of an LED
435917112cSSimon Glass 	 *
445917112cSSimon Glass 	 * @dev:	LED device to change
45ddae9fcdSSimon Glass 	 * @state:	LED state to set
465917112cSSimon Glass 	 * @return 0 if OK, -ve on error
475917112cSSimon Glass 	 */
48ddae9fcdSSimon Glass 	int (*set_state)(struct udevice *dev, enum led_state_t state);
498f4b6123SSimon Glass 
508f4b6123SSimon Glass 	/**
518f4b6123SSimon Glass 	 * led_get_state() - get the state of an LED
528f4b6123SSimon Glass 	 *
538f4b6123SSimon Glass 	 * @dev:	LED device to change
548f4b6123SSimon Glass 	 * @return LED state led_state_t, or -ve on error
558f4b6123SSimon Glass 	 */
568f4b6123SSimon Glass 	enum led_state_t (*get_state)(struct udevice *dev);
57*53378dacSSimon Glass 
58*53378dacSSimon Glass #ifdef CONFIG_LED_BLINK
59*53378dacSSimon Glass 	/**
60*53378dacSSimon Glass 	 * led_set_period() - set the blink period of an LED
61*53378dacSSimon Glass 	 *
62*53378dacSSimon Glass 	 * Thie records the period if supported, or returns -ENOSYS if not.
63*53378dacSSimon Glass 	 * To start the LED blinking, use set_state().
64*53378dacSSimon Glass 	 *
65*53378dacSSimon Glass 	 * @dev:	LED device to change
66*53378dacSSimon Glass 	 * @period_ms:	LED blink period in milliseconds
67*53378dacSSimon Glass 	 * @return 0 if OK, -ve on error
68*53378dacSSimon Glass 	 */
69*53378dacSSimon Glass 	int (*set_period)(struct udevice *dev, int period_ms);
70*53378dacSSimon Glass #endif
715917112cSSimon Glass };
725917112cSSimon Glass 
735917112cSSimon Glass #define led_get_ops(dev)	((struct led_ops *)(dev)->driver->ops)
745917112cSSimon Glass 
755917112cSSimon Glass /**
765917112cSSimon Glass  * led_get_by_label() - Find an LED device by label
775917112cSSimon Glass  *
785917112cSSimon Glass  * @label:	LED label to look up
795917112cSSimon Glass  * @devp:	Returns the associated device, if found
80fb8a5ffcSSimon Glass  * @return 0 if found, -ENODEV if not found, other -ve on error
815917112cSSimon Glass  */
825917112cSSimon Glass int led_get_by_label(const char *label, struct udevice **devp);
835917112cSSimon Glass 
845917112cSSimon Glass /**
85ddae9fcdSSimon Glass  * led_set_state() - set the state of an LED
865917112cSSimon Glass  *
875917112cSSimon Glass  * @dev:	LED device to change
88ddae9fcdSSimon Glass  * @state:	LED state to set
895917112cSSimon Glass  * @return 0 if OK, -ve on error
905917112cSSimon Glass  */
91ddae9fcdSSimon Glass int led_set_state(struct udevice *dev, enum led_state_t state);
925917112cSSimon Glass 
938f4b6123SSimon Glass /**
948f4b6123SSimon Glass  * led_get_state() - get the state of an LED
958f4b6123SSimon Glass  *
968f4b6123SSimon Glass  * @dev:	LED device to change
978f4b6123SSimon Glass  * @return LED state led_state_t, or -ve on error
988f4b6123SSimon Glass  */
998f4b6123SSimon Glass enum led_state_t led_get_state(struct udevice *dev);
1008f4b6123SSimon Glass 
101*53378dacSSimon Glass /**
102*53378dacSSimon Glass  * led_set_period() - set the blink period of an LED
103*53378dacSSimon Glass  *
104*53378dacSSimon Glass  * @dev:	LED device to change
105*53378dacSSimon Glass  * @period_ms:	LED blink period in milliseconds
106*53378dacSSimon Glass  * @return 0 if OK, -ve on error
107*53378dacSSimon Glass  */
108*53378dacSSimon Glass int led_set_period(struct udevice *dev, int period_ms);
109*53378dacSSimon Glass 
1105917112cSSimon Glass #endif
111