[PATCH] sandbox: add Xterm escape sequence backed LED driver
Sascha Hauer
sha at pengutronix.de
Mon Mar 15 09:27:43 GMT 2021
On Tue, Mar 09, 2021 at 09:01:31AM +0100, Ahmad Fatoum wrote:
> There is value in testing LED trigger conditions in sandbox,
> especially with the coming bthread work that should replace pollers,
> like the one used by the heartbeat trigger.
>
> To make this testable on sandbox as well, add a simple LED driver.
> It supports 5 brightness levels, which are reflected as dots in
> the terminal title. This requires a Xterm compatible terminal,
> but the LED is inactive by default, so other terminals aren't
> affected if they lack support.
>
> Signed-off-by: Ahmad Fatoum <ahmad at a3f.at>
> ---
> arch/sandbox/board/Makefile | 1 +
> arch/sandbox/board/led.c | 67 ++++++++++++++++++++++++++++++++++++
> arch/sandbox/dts/sandbox.dts | 4 +++
> 3 files changed, 72 insertions(+)
> create mode 100644 arch/sandbox/board/led.c
Applied, thanks
Sascha
>
> diff --git a/arch/sandbox/board/Makefile b/arch/sandbox/board/Makefile
> index c504c967decd..ffb1dbc21ebf 100644
> --- a/arch/sandbox/board/Makefile
> +++ b/arch/sandbox/board/Makefile
> @@ -7,5 +7,6 @@ obj-y += dtb.o
> obj-y += power.o
> obj-y += dev-random.o
> obj-y += watchdog.o
> +obj-$(CONFIG_LED) += led.o
>
> extra-y += barebox.lds
> diff --git a/arch/sandbox/board/led.c b/arch/sandbox/board/led.c
> new file mode 100644
> index 000000000000..b7ab81112baf
> --- /dev/null
> +++ b/arch/sandbox/board/led.c
> @@ -0,0 +1,67 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +
> +#include <common.h>
> +#include <init.h>
> +#include <led.h>
> +#include <mach/linux.h>
> +#include <of.h>
> +
> +static struct sandbox_led {
> + struct led led;
> + bool active;
> +} sandbox_led;
> +
> +static inline void terminal_puts(const char *s)
> +{
> + linux_write(1, s, strlen(s));
> +}
> +
> +static void sandbox_led_set(struct led *led, unsigned int brightness)
> +{
> + terminal_puts("\x1b]2;barebox ");
> + while (brightness--)
> + terminal_puts(".");
> + terminal_puts("\a");
> +
> + sandbox_led.active = true;
> +}
> +
> +static int sandbox_led_of_probe(struct device_d *dev)
> +{
> + struct device_node *np = dev->device_node;
> + int ret;
> +
> + if (sandbox_led.led.set)
> + return -EBUSY;
> +
> + sandbox_led.led.name = xstrdup(np->name);
> + sandbox_led.led.max_value = 5;
> + sandbox_led.led.set = sandbox_led_set;
> +
> + ret = led_register(&sandbox_led.led);
> + if (ret)
> + return ret;
> +
> + led_of_parse_trigger(&sandbox_led.led, np);
> +
> + return 0;
> +}
> +
> +static void sandbox_led_of_remove(struct device_d *dev)
> +{
> + if (sandbox_led.active)
> + sandbox_led_set(NULL, 0);
> +}
> +
> +static struct of_device_id sandbox_led_of_ids[] = {
> + { .compatible = "barebox,sandbox-led", },
> + { }
> +};
> +
> +static struct driver_d sandbox_led_of_driver = {
> + .name = "sandbox-led",
> + .probe = sandbox_led_of_probe,
> + .remove = sandbox_led_of_remove,
> + .of_compatible = sandbox_led_of_ids,
> +};
> +device_platform_driver(sandbox_led_of_driver);
> diff --git a/arch/sandbox/dts/sandbox.dts b/arch/sandbox/dts/sandbox.dts
> index ef1fa7b8661f..e99986bb9062 100644
> --- a/arch/sandbox/dts/sandbox.dts
> +++ b/arch/sandbox/dts/sandbox.dts
> @@ -98,4 +98,8 @@ barebox,sandbox-watchdog
> sound {
> compatible = "barebox,sandbox-sound";
> };
> +
> + led {
> + compatible = "barebox,sandbox-led";
> + };
> };
> --
> 2.30.0
>
>
> _______________________________________________
> barebox mailing list
> barebox at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
>
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
More information about the barebox
mailing list