mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH] sandbox: add Xterm escape sequence backed LED driver
@ 2021-03-09  8:01 Ahmad Fatoum
  2021-03-15  9:27 ` Sascha Hauer
  0 siblings, 1 reply; 2+ messages in thread
From: Ahmad Fatoum @ 2021-03-09  8:01 UTC (permalink / raw)
  To: barebox; +Cc: Ahmad Fatoum

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@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

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@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] sandbox: add Xterm escape sequence backed LED driver
  2021-03-09  8:01 [PATCH] sandbox: add Xterm escape sequence backed LED driver Ahmad Fatoum
@ 2021-03-15  9:27 ` Sascha Hauer
  0 siblings, 0 replies; 2+ messages in thread
From: Sascha Hauer @ 2021-03-15  9:27 UTC (permalink / raw)
  To: Ahmad Fatoum; +Cc: barebox

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@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@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 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-03-15  9:29 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-09  8:01 [PATCH] sandbox: add Xterm escape sequence backed LED driver Ahmad Fatoum
2021-03-15  9:27 ` Sascha Hauer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox