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@xxxxxx> > --- > 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@xxxxxxxxxxxxxxxxxxx > 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 | _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox