From: Patrick Delaunay <patrick.delaunay@st.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v3 3/5] dm: led: move default state support in led uclass
Date: Tue, 24 Jul 2018 10:58:30 +0200 [thread overview]
Message-ID: <1532422712-15107-4-git-send-email-patrick.delaunay@st.com> (raw)
In-Reply-To: <1532422712-15107-1-git-send-email-patrick.delaunay@st.com>
This patch save common LED property "default-state" value
in post bind of LED uclass.
The configuration for this default state is only performed when
led_default_state() is called;
It can be called in your board_init()
or it could added in init_sequence_r[] in future.
Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
Changes in v3: None
Changes in v2: None
drivers/led/led-uclass.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++
drivers/led/led_gpio.c | 8 -------
include/led.h | 23 +++++++++++++++++++++
3 files changed, 77 insertions(+), 8 deletions(-)
diff --git a/drivers/led/led-uclass.c b/drivers/led/led-uclass.c
index 2f4d69e..141401d 100644
--- a/drivers/led/led-uclass.c
+++ b/drivers/led/led-uclass.c
@@ -8,6 +8,7 @@
#include <dm.h>
#include <errno.h>
#include <led.h>
+#include <dm/device-internal.h>
#include <dm/root.h>
#include <dm/uclass-internal.h>
@@ -63,8 +64,61 @@ int led_set_period(struct udevice *dev, int period_ms)
}
#endif
+static int led_post_bind(struct udevice *dev)
+{
+ struct led_uc_plat *uc_pdata;
+ const char *default_state;
+
+ uc_pdata = dev_get_uclass_platdata(dev);
+
+ /* common optional properties */
+ uc_pdata->default_state = LED_DEF_NO;
+ default_state = dev_read_string(dev, "default-state");
+ if (default_state) {
+ if (!strncmp(default_state, "on", 2))
+ uc_pdata->default_state = LED_DEF_ON;
+ else if (!strncmp(default_state, "off", 3))
+ uc_pdata->default_state = LED_DEF_OFF;
+ else if (!strncmp(default_state, "keep", 4))
+ uc_pdata->default_state = LED_DEF_KEEP;
+ }
+
+ return 0;
+}
+
+int led_default_state(void)
+{
+ struct udevice *dev;
+ struct uclass *uc;
+ struct led_uc_plat *uc_pdata;
+ int ret;
+
+ ret = uclass_get(UCLASS_LED, &uc);
+ if (ret)
+ return ret;
+ for (uclass_find_first_device(UCLASS_LED, &dev);
+ dev;
+ uclass_find_next_device(&dev)) {
+ uc_pdata = dev_get_uclass_platdata(dev);
+ if (!uc_pdata || uc_pdata->default_state == LED_DEF_NO)
+ continue;
+ ret = device_probe(dev);
+ if (ret)
+ return ret;
+ if (uc_pdata->default_state == LED_DEF_ON)
+ led_set_state(dev, LEDST_ON);
+ else if (uc_pdata->default_state == LED_DEF_OFF)
+ led_set_state(dev, LEDST_OFF);
+ printf("%s: default_state=%d\n",
+ uc_pdata->label, uc_pdata->default_state);
+ }
+
+ return ret;
+}
+
UCLASS_DRIVER(led) = {
.id = UCLASS_LED,
.name = "led",
+ .post_bind = led_post_bind,
.per_device_platdata_auto_alloc_size = sizeof(struct led_uc_plat),
};
diff --git a/drivers/led/led_gpio.c b/drivers/led/led_gpio.c
index 533587d..93f6b91 100644
--- a/drivers/led/led_gpio.c
+++ b/drivers/led/led_gpio.c
@@ -57,7 +57,6 @@ static int led_gpio_probe(struct udevice *dev)
{
struct led_uc_plat *uc_plat = dev_get_uclass_platdata(dev);
struct led_gpio_priv *priv = dev_get_priv(dev);
- const char *default_state;
int ret;
/* Ignore the top-level LED node */
@@ -68,13 +67,6 @@ static int led_gpio_probe(struct udevice *dev)
if (ret)
return ret;
- default_state = dev_read_string(dev, "default-state");
- if (default_state) {
- if (!strncmp(default_state, "on", 2))
- gpio_led_set_state(dev, LEDST_ON);
- else if (!strncmp(default_state, "off", 3))
- gpio_led_set_state(dev, LEDST_OFF);
- }
return 0;
}
diff --git a/include/led.h b/include/led.h
index 940b97f..ff45f03 100644
--- a/include/led.h
+++ b/include/led.h
@@ -8,12 +8,27 @@
#define __LED_H
/**
+ * enum led_default_state - The initial state of the LED.
+ * see Documentation/devicetree/bindings/leds/common.txt
+ */
+enum led_def_state_t {
+ LED_DEF_NO,
+ LED_DEF_ON,
+ LED_DEF_OFF,
+ LED_DEF_KEEP
+};
+
+/**
* struct led_uc_plat - Platform data the uclass stores about each device
*
* @label: LED label
+ * @default_state* - The initial state of the LED.
+ see Documentation/devicetree/bindings/leds/common.txt
+ * * - set automatically on device bind by the uclass's '.post_bind' method.
*/
struct led_uc_plat {
const char *label;
+ enum led_def_state_t default_state;
};
/**
@@ -106,4 +121,12 @@ enum led_state_t led_get_state(struct udevice *dev);
*/
int led_set_period(struct udevice *dev, int period_ms);
+/**
+ * led_default_state() - set the default state for all the LED
+ *
+ * This enables all leds which have default state.
+ *
+ */
+int led_default_state(void);
+
#endif
--
2.7.4
next prev parent reply other threads:[~2018-07-24 8:58 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-24 8:58 [U-Boot] [PATCH v3 0/5] dm: led: remove auto probe in binding function Patrick Delaunay
2018-07-24 8:58 ` [U-Boot] [PATCH v3 1/5] stm32mp1: add gpio led support Patrick Delaunay
2018-07-24 8:58 ` [U-Boot] [PATCH v3 2/5] Revert "dm: led: auto probe() LEDs with "default-state"" Patrick Delaunay
2018-07-25 2:45 ` Simon Glass
2018-07-24 8:58 ` Patrick Delaunay [this message]
2018-07-26 10:39 ` [U-Boot] [PATCH v3 3/5] dm: led: move default state support in led uclass Patrick Brünn
2018-07-27 14:13 ` Patrick DELAUNAY
2018-07-24 8:58 ` [U-Boot] [PATCH v3 4/5] stm32mp1: use new function led default state Patrick Delaunay
2018-07-24 8:58 ` [U-Boot] [PATCH v3 5/5] sandbox: led: use new function to configure " Patrick Delaunay
2018-07-26 10:45 ` Patrick Brünn
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1532422712-15107-4-git-send-email-patrick.delaunay@st.com \
--to=patrick.delaunay@st.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.