diff options
author | Michael Polyntsov <michael.polyntsov@iopsys.eu> | 2024-07-19 13:12:13 +0400 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2024-07-30 12:35:23 -0600 |
commit | f15e89efad6f1bd7ddeb6fc5209427133cf22150 (patch) | |
tree | 66f0cee2ce474ce04b5cdc3628e78837a1079b0c /drivers | |
parent | b557f55e90f087ec310592b833441cd326206f61 (diff) | |
download | u-boot-f15e89efad6f1bd7ddeb6fc5209427133cf22150.tar.gz |
led: Add dts property to specify blinking of the led
The standard property
linux,default-trigger = "pattern";
used to get an effect. No blinking parameters can be set yet.
Signed-off-by: Michael Polyntsov <michael.polyntsov@iopsys.eu>
Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/led/led-uclass.c | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/drivers/led/led-uclass.c b/drivers/led/led-uclass.c index e6312d1dc41..199d68bc25a 100644 --- a/drivers/led/led-uclass.c +++ b/drivers/led/led-uclass.c @@ -118,6 +118,14 @@ static int led_post_bind(struct udevice *dev) else return 0; + if (IS_ENABLED(CONFIG_LED_BLINK)) { + const char *trigger; + + trigger = dev_read_string(dev, "linux,default-trigger"); + if (trigger && !strncmp(trigger, "pattern", 7)) + uc_plat->default_state = LEDST_BLINK; + } + /* * In case the LED has default-state DT property, trigger * probe() to configure its default state during startup. @@ -130,12 +138,24 @@ static int led_post_bind(struct udevice *dev) static int led_post_probe(struct udevice *dev) { struct led_uc_plat *uc_plat = dev_get_uclass_plat(dev); + int default_period_ms = 1000; + int ret = 0; + + switch (uc_plat->default_state) { + case LEDST_ON: + case LEDST_OFF: + ret = led_set_state(dev, uc_plat->default_state); + break; + case LEDST_BLINK: + ret = led_set_period(dev, default_period_ms); + if (!ret) + ret = led_set_state(dev, uc_plat->default_state); + break; + default: + break; + } - if (uc_plat->default_state == LEDST_ON || - uc_plat->default_state == LEDST_OFF) - led_set_state(dev, uc_plat->default_state); - - return 0; + return ret; } UCLASS_DRIVER(led) = { |