diff options
author | Patrick Delaunay <patrick.delaunay@st.com> | 2018-07-27 16:37:07 +0200 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2018-08-10 10:27:32 -0400 |
commit | d7a435a2ce3591b7d0b408d8710586415d797e58 (patch) | |
tree | e01b3d1bfdb753cd47cafbb08b4eb5ac682fb490 /drivers/led/led-uclass.c | |
parent | 1f6d81fe3398309cacd79f0fdc809502552d3e0c (diff) |
dm: led: move default state support in led uclass
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.
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
Diffstat (limited to 'drivers/led/led-uclass.c')
-rw-r--r-- | drivers/led/led-uclass.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/drivers/led/led-uclass.c b/drivers/led/led-uclass.c index 2f4d69eedd..2859475a6b 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,6 +64,35 @@ int led_set_period(struct udevice *dev, int period_ms) } #endif +int led_default_state(void) +{ + struct udevice *dev; + struct uclass *uc; + const char *default_state; + 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)) { + default_state = dev_read_string(dev, "default-state"); + if (!default_state) + continue; + ret = device_probe(dev); + if (ret) + return ret; + if (!strncmp(default_state, "on", 2)) + led_set_state(dev, LEDST_ON); + else if (!strncmp(default_state, "off", 3)) + led_set_state(dev, LEDST_OFF); + /* default-state = "keep" : device is only probed */ + } + + return ret; +} + UCLASS_DRIVER(led) = { .id = UCLASS_LED, .name = "led", |