From 56e19871dc2a05aa5508ea51af35df59bbdb6cf5 Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Mon, 10 Apr 2017 11:34:53 -0600 Subject: dm: led: Rename struct led_uclass_plat These structures are normally named with 'uc' instead of 'uclass'. Change this one for consistency. Signed-off-by: Simon Glass Reviewed-by: Ziping Chen --- include/led.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'include/led.h') diff --git a/include/led.h b/include/led.h index b929d0ca3c7..a856b3d9ff7 100644 --- a/include/led.h +++ b/include/led.h @@ -9,11 +9,11 @@ #define __LED_H /** - * struct led_uclass_plat - Platform data the uclass stores about each device + * struct led_uc_plat - Platform data the uclass stores about each device * * @label: LED label */ -struct led_uclass_plat { +struct led_uc_plat { const char *label; }; -- cgit v1.2.3 From ddae9fcddc48d1e624c941148d0df5a4fc7d7d5c Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Mon, 10 Apr 2017 11:34:54 -0600 Subject: dm: led: Adjust the LED uclass At present this is very simple, supporting only on and off. We want to also support toggling and blinking. As a first step, change the name of the main method and use an enum to indicate the state. Signed-off-by: Simon Glass Reviewed-by: Ziping Chen --- include/led.h | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'include/led.h') diff --git a/include/led.h b/include/led.h index a856b3d9ff7..8af87ea8ea8 100644 --- a/include/led.h +++ b/include/led.h @@ -17,15 +17,22 @@ struct led_uc_plat { const char *label; }; +enum led_state_t { + LEDST_OFF = 0, + LEDST_ON = 1, + + LEDST_COUNT, +}; + struct led_ops { /** - * set_on() - set the state of an LED + * set_state() - set the state of an LED * * @dev: LED device to change - * @on: 1 to turn the LED on, 0 to turn it off + * @state: LED state to set * @return 0 if OK, -ve on error */ - int (*set_on)(struct udevice *dev, int on); + int (*set_state)(struct udevice *dev, enum led_state_t state); }; #define led_get_ops(dev) ((struct led_ops *)(dev)->driver->ops) @@ -40,12 +47,12 @@ struct led_ops { int led_get_by_label(const char *label, struct udevice **devp); /** - * led_set_on() - set the state of an LED + * led_set_state() - set the state of an LED * * @dev: LED device to change - * @on: 1 to turn the LED on, 0 to turn it off + * @state: LED state to set * @return 0 if OK, -ve on error */ -int led_set_on(struct udevice *dev, int on); +int led_set_state(struct udevice *dev, enum led_state_t state); #endif -- cgit v1.2.3 From 8f4b612333ee0381eedf767c1c005a830886df27 Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Mon, 10 Apr 2017 11:34:55 -0600 Subject: dm: led: Add support for getting the state of an LED It is useful to be able to read the LED as well as write it. Add this to the uclass and update the GPIO driver. Signed-off-by: Simon Glass Reviewed-by: Ziping Chen --- include/led.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'include/led.h') diff --git a/include/led.h b/include/led.h index 8af87ea8ea8..bbab4d14c98 100644 --- a/include/led.h +++ b/include/led.h @@ -33,6 +33,14 @@ struct led_ops { * @return 0 if OK, -ve on error */ int (*set_state)(struct udevice *dev, enum led_state_t state); + + /** + * led_get_state() - get the state of an LED + * + * @dev: LED device to change + * @return LED state led_state_t, or -ve on error + */ + enum led_state_t (*get_state)(struct udevice *dev); }; #define led_get_ops(dev) ((struct led_ops *)(dev)->driver->ops) @@ -55,4 +63,12 @@ int led_get_by_label(const char *label, struct udevice **devp); */ int led_set_state(struct udevice *dev, enum led_state_t state); +/** + * led_get_state() - get the state of an LED + * + * @dev: LED device to change + * @return LED state led_state_t, or -ve on error + */ +enum led_state_t led_get_state(struct udevice *dev); + #endif -- cgit v1.2.3 From 9413ad4f0def2e06a5042106a6e1650a1aa03a5a Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Mon, 10 Apr 2017 11:34:56 -0600 Subject: dm: led: Support toggling LEDs Add support for toggling an LED into the uclass interface. This can be efficiently implemented by the driver. Signed-off-by: Simon Glass Reviewed-by: Ziping Chen --- include/led.h | 1 + 1 file changed, 1 insertion(+) (limited to 'include/led.h') diff --git a/include/led.h b/include/led.h index bbab4d14c98..8c107e28e78 100644 --- a/include/led.h +++ b/include/led.h @@ -20,6 +20,7 @@ struct led_uc_plat { enum led_state_t { LEDST_OFF = 0, LEDST_ON = 1, + LEDST_TOGGLE, LEDST_COUNT, }; -- cgit v1.2.3 From 53378dac8dc33e3fd5f07d60bd7a5f8258ac7a20 Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Mon, 10 Apr 2017 11:34:57 -0600 Subject: dm: led: Add support for blinking LEDs Allow LEDs to be blinked if the driver supports it. Enable this for sandbox so that the tests run. Signed-off-by: Simon Glass Reviewed-by: Ziping Chen --- include/led.h | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'include/led.h') diff --git a/include/led.h b/include/led.h index 8c107e28e78..c67af225912 100644 --- a/include/led.h +++ b/include/led.h @@ -17,10 +17,22 @@ struct led_uc_plat { const char *label; }; +/** + * struct led_uc_priv - Private data the uclass stores about each device + * + * @period_ms: Flash period in milliseconds + */ +struct led_uc_priv { + int period_ms; +}; + enum led_state_t { LEDST_OFF = 0, LEDST_ON = 1, LEDST_TOGGLE, +#ifdef CONFIG_LED_BLINK + LEDST_BLINK, +#endif LEDST_COUNT, }; @@ -42,6 +54,20 @@ struct led_ops { * @return LED state led_state_t, or -ve on error */ enum led_state_t (*get_state)(struct udevice *dev); + +#ifdef CONFIG_LED_BLINK + /** + * led_set_period() - set the blink period of an LED + * + * Thie records the period if supported, or returns -ENOSYS if not. + * To start the LED blinking, use set_state(). + * + * @dev: LED device to change + * @period_ms: LED blink period in milliseconds + * @return 0 if OK, -ve on error + */ + int (*set_period)(struct udevice *dev, int period_ms); +#endif }; #define led_get_ops(dev) ((struct led_ops *)(dev)->driver->ops) @@ -72,4 +98,13 @@ int led_set_state(struct udevice *dev, enum led_state_t state); */ enum led_state_t led_get_state(struct udevice *dev); +/** + * led_set_period() - set the blink period of an LED + * + * @dev: LED device to change + * @period_ms: LED blink period in milliseconds + * @return 0 if OK, -ve on error + */ +int led_set_period(struct udevice *dev, int period_ms); + #endif -- cgit v1.2.3