[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