Message ID | 20240605192146.19052-5-ansuelsmth@gmail.com |
---|---|
State | Changes Requested |
Delegated to: | Tom Rini |
Headers | show |
Series | misc: introduce STATUS LED activity function | expand |
On 05/06/2024 21:21, Christian Marangi wrote: > Add a new activity LED config and additional functions to implement a > simple software blink feature to signal activity of any kind. > > Usual activity might be a file transfer with TFTP, a flash write... > > Driver will call status_led_activity on each activity and LED will be > toggled based on the defined FREQ config value. > > Signed-off-by: Christian Marangi <ansuelsmth@gmail.com> > --- > drivers/led/Kconfig | 15 +++++++++++++++ > drivers/misc/status_led.c | 25 ++++++++++++++++++++----- > include/status_led.h | 1 + > 3 files changed, 36 insertions(+), 5 deletions(-) > > diff --git a/drivers/led/Kconfig b/drivers/led/Kconfig > index 6c4f02d71f2..8eaa74bdd27 100644 > --- a/drivers/led/Kconfig > +++ b/drivers/led/Kconfig > @@ -359,6 +359,21 @@ config LED_STATUS_BOOT > > endif # LED_STATUS_BOOT_ENABLE > > +config LED_STATUS_ACTIVITY_ENABLE > + bool "Enable BOOT LED" > + help > + Enable to turn an LED on when the board is doing some > + activity (flash write, file download). > + > +if LED_STATUS_ACTIVITY_ENABLE > + > +config LED_STATUS_ACTIVITY > + int "LED to light when the board is doing some activity" > + help > + Valid enabled LED device number. I would add multiple entries here, like: LED_STATUS_ACTIVITY_STORAGE LED_STATUS_ACTIVITY_NETWORK ... so we can enable either ones and specify different leds for each applications. Neil > + > +endif # LED_STATUS_ACTIVITY_ENABLE > + > config LED_STATUS_RED_ENABLE > bool "Enable red LED" > help > diff --git a/drivers/misc/status_led.c b/drivers/misc/status_led.c > index 93bfb410662..9490e1d7341 100644 > --- a/drivers/misc/status_led.c > +++ b/drivers/misc/status_led.c > @@ -82,6 +82,14 @@ void status_led_init(void) > status_led_init_done = 1; > } > > +static void status_led_sw_blink(led_dev_t *ld) > +{ > + if (++ld->cnt >= ld->period) { > + __led_toggle(ld->mask); > + ld->cnt -= ld->period; > + } > +} > + > void status_led_tick(ulong timestamp) > { > led_dev_t *ld; > @@ -95,11 +103,7 @@ void status_led_tick(ulong timestamp) > if (ld->state != CONFIG_LED_STATUS_BLINKING) > continue; > > - if (++ld->cnt >= ld->period) { > - __led_toggle (ld->mask); > - ld->cnt -= ld->period; > - } > - > + status_led_sw_blink(ld); > } > } > > @@ -140,3 +144,14 @@ void status_led_toggle(int led) > > __led_toggle(ld->mask); > } > + > +void status_led_activity(int led) > +{ > + led_dev_t *ld; > + > + ld = status_get_led_dev(led); > + if (!ld) > + return; > + > + status_led_sw_blink(ld); > +} > diff --git a/include/status_led.h b/include/status_led.h > index fe0c84fb4b4..037bad159c2 100644 > --- a/include/status_led.h > +++ b/include/status_led.h > @@ -39,6 +39,7 @@ void status_led_init(void); > void status_led_tick(unsigned long timestamp); > void status_led_set(int led, int state); > void status_led_toggle(int led); > +void status_led_activity(int led); > > /***** MVS v1 **********************************************************/ > #if (defined(CONFIG_MVS) && CONFIG_MVS < 2)
diff --git a/drivers/led/Kconfig b/drivers/led/Kconfig index 6c4f02d71f2..8eaa74bdd27 100644 --- a/drivers/led/Kconfig +++ b/drivers/led/Kconfig @@ -359,6 +359,21 @@ config LED_STATUS_BOOT endif # LED_STATUS_BOOT_ENABLE +config LED_STATUS_ACTIVITY_ENABLE + bool "Enable BOOT LED" + help + Enable to turn an LED on when the board is doing some + activity (flash write, file download). + +if LED_STATUS_ACTIVITY_ENABLE + +config LED_STATUS_ACTIVITY + int "LED to light when the board is doing some activity" + help + Valid enabled LED device number. + +endif # LED_STATUS_ACTIVITY_ENABLE + config LED_STATUS_RED_ENABLE bool "Enable red LED" help diff --git a/drivers/misc/status_led.c b/drivers/misc/status_led.c index 93bfb410662..9490e1d7341 100644 --- a/drivers/misc/status_led.c +++ b/drivers/misc/status_led.c @@ -82,6 +82,14 @@ void status_led_init(void) status_led_init_done = 1; } +static void status_led_sw_blink(led_dev_t *ld) +{ + if (++ld->cnt >= ld->period) { + __led_toggle(ld->mask); + ld->cnt -= ld->period; + } +} + void status_led_tick(ulong timestamp) { led_dev_t *ld; @@ -95,11 +103,7 @@ void status_led_tick(ulong timestamp) if (ld->state != CONFIG_LED_STATUS_BLINKING) continue; - if (++ld->cnt >= ld->period) { - __led_toggle (ld->mask); - ld->cnt -= ld->period; - } - + status_led_sw_blink(ld); } } @@ -140,3 +144,14 @@ void status_led_toggle(int led) __led_toggle(ld->mask); } + +void status_led_activity(int led) +{ + led_dev_t *ld; + + ld = status_get_led_dev(led); + if (!ld) + return; + + status_led_sw_blink(ld); +} diff --git a/include/status_led.h b/include/status_led.h index fe0c84fb4b4..037bad159c2 100644 --- a/include/status_led.h +++ b/include/status_led.h @@ -39,6 +39,7 @@ void status_led_init(void); void status_led_tick(unsigned long timestamp); void status_led_set(int led, int state); void status_led_toggle(int led); +void status_led_activity(int led); /***** MVS v1 **********************************************************/ #if (defined(CONFIG_MVS) && CONFIG_MVS < 2)
Add a new activity LED config and additional functions to implement a simple software blink feature to signal activity of any kind. Usual activity might be a file transfer with TFTP, a flash write... Driver will call status_led_activity on each activity and LED will be toggled based on the defined FREQ config value. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com> --- drivers/led/Kconfig | 15 +++++++++++++++ drivers/misc/status_led.c | 25 ++++++++++++++++++++----- include/status_led.h | 1 + 3 files changed, 36 insertions(+), 5 deletions(-)