diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2021-03-23 12:15:22 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2021-03-23 12:15:22 +0100 |
commit | bb2873db3ef11e7b1299b1cca129f5d002e47f59 (patch) | |
tree | e53a1697f6ffb81d8f866ddadf3862ab0c04ceef /arch/sandbox | |
parent | 31343957ea42a9340345c17288e56cfa07304bb8 (diff) | |
parent | 176bd2605edfd7d64370736abe8c44833068788b (diff) | |
download | barebox-bb2873db3ef11e7b1299b1cca129f5d002e47f59.tar.gz barebox-bb2873db3ef11e7b1299b1cca129f5d002e47f59.tar.xz |
Merge branch 'for-next/misc'
Diffstat (limited to 'arch/sandbox')
-rw-r--r-- | arch/sandbox/board/Makefile | 1 | ||||
-rw-r--r-- | arch/sandbox/board/led.c | 67 | ||||
-rw-r--r-- | arch/sandbox/dts/sandbox.dts | 4 |
3 files changed, 72 insertions, 0 deletions
diff --git a/arch/sandbox/board/Makefile b/arch/sandbox/board/Makefile index c504c967de..ffb1dbc21e 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 0000000000..b7ab81112b --- /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 ef1fa7b866..e99986bb90 100644 --- a/arch/sandbox/dts/sandbox.dts +++ b/arch/sandbox/dts/sandbox.dts @@ -98,4 +98,8 @@ sound { compatible = "barebox,sandbox-sound"; }; + + led { + compatible = "barebox,sandbox-led"; + }; }; |