[PATCH v5 2/2] led: Add dts property to specify blinking of the led
Simon Glass
sjg at chromium.org
Sat Jul 13 17:13:41 CEST 2024
Hi Mikhail,
On Fri, 12 Jul 2024 at 06:25, Mikhail Kshevetskiy
<mikhail.kshevetskiy at iopsys.eu> wrote:
>
> From: Michael Polyntsov <michael.polyntsov at iopsys.eu>
>
> 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 at iopsys.eu>
> Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy at iopsys.eu>
> ---
> drivers/led/led-uclass.c | 33 +++++++++++++++++++++++++++++----
> 1 file changed, 29 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/led/led-uclass.c b/drivers/led/led-uclass.c
> index 4f5dd66765e..90047ad35ba 100644
> --- a/drivers/led/led-uclass.c
> +++ b/drivers/led/led-uclass.c
> @@ -100,6 +100,9 @@ static int led_post_bind(struct udevice *dev)
> {
> struct led_uc_plat *uc_plat = dev_get_uclass_plat(dev);
> const char *default_state;
> +#ifdef CONFIG_LED_BLINK
> + const char *trigger;
> +#endif
>
> if (!uc_plat->label)
> uc_plat->label = dev_read_string(dev, "label");
> @@ -120,6 +123,12 @@ static int led_post_bind(struct udevice *dev)
> else
> return 0;
>
> +#ifdef CONFIG_LED_BLINK
> + trigger = dev_read_string(dev, "linux,default-trigger");
> + if (trigger && !strncmp(trigger, "pattern", 7))
> + uc_plat->default_state = LEDST_BLINK;
> +#endif
I still wonder whether you can use IS_ENABLED() instead of adding #ifdefs?
> +
> /*
> * In case the LED has default-state DT property, trigger
> * probe() to configure its default state during startup.
> @@ -132,12 +141,28 @@ 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 rc = 0;
>
> - if (uc_plat->default_state == LEDST_ON ||
> - uc_plat->default_state == LEDST_OFF)
> - led_set_state(dev, uc_plat->default_state);
> + switch (uc_plat->default_state) {
> + case LEDST_ON:
> + case LEDST_OFF:
> + rc = led_set_state(dev, uc_plat->default_state);
> + break;
> +#ifdef CONFIG_LED_BLINK
> + case LEDST_BLINK: {
> + const int default_period_ms = 1000;
>
> - return 0;
> + rc = led_set_period(dev, default_period_ms);
> + if (rc == 0)
> + rc = led_set_state(dev, uc_plat->default_state);
> + break;
> + }
> +#endif
> + default:
> + break;
> + }
> +
> + return rc;
> }
>
> UCLASS_DRIVER(led) = {
> --
> 2.39.2
>
Regards,
Simon
More information about the U-Boot
mailing list