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>
This commit is contained in:
parent
1f6d81fe33
commit
d7a435a2ce
@ -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",
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -106,4 +106,13 @@ 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.
|
||||
* see Documentation/devicetree/bindings/leds/common.txt
|
||||
*
|
||||
*/
|
||||
int led_default_state(void);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user