On Thu, Sep 16, 2021 at 11:12:50AM +0200, Mark Kettenis wrote:
> > Date: Thu, 16 Sep 2021 06:12:39 +0000
> > From: Klemens Nanni <k...@openbsd.org>
> > 
> > On 3 September 2021 20:16:33 GMT+05:00, Klemens Nanni <k...@openbsd.org> 
> > wrote:
> > >Here is a tiny driver enabling machines such as the Pinebook Pro to
> > >indicate power, it is intentionally minimal and does not expose anything
> > >via sysctl(8)/sensorsd(8) or gpioctl(8).
> > >
> > >This is helpful for machines where graphics, keyboard and/or serial
> > >console have problems and people tend to debug things at various
> > >stages, e.g. a green LED now tells me that we reached the kernel.
> > >
> > >Once arm64 has suspend/resume we can indicate that as well.
> > >
> > >Feedback? OK?
> > 
> > Ping.
> 
> Two small nits below.  With those fixed, ok kettenis@

Thanks.  I'll commit the diff below after the tree is unlocked
(now with "first appeared in OpenBSD 7.1" in in the manual as well).


Index: share/man/man4/gpioleds.4
===================================================================
RCS file: share/man/man4/gpioleds.4
diff -N share/man/man4/gpioleds.4
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ share/man/man4/gpioleds.4   24 Sep 2021 22:24:41 -0000
@@ -0,0 +1,45 @@
+.\"    $OpenBSD: $
+.\"
+.\" Copyright (c) 2021 Klemens Nanni <k...@openbsd.org>
+.\"
+.\" Permission to use, copy, modify, and distribute this software for any
+.\" purpose with or without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+.\"
+.Dd $Mdocdate: September 03 2021 $
+.Dt GPIOLEDS 4
+.Os
+.Sh NAME
+.Nm gpioleds
+.Nd GPIO LEDs
+.Sh SYNOPSIS
+.Cd "gpioleds* at fdt?"
+.Sh DESCRIPTION
+The
+.Nm
+driver provides support for LEDs connected to GPIO pins.
+.Pp
+Currently, LEDs are only set to their default state,
+e.g. to indicate the power status of the system.
+.Sh SEE ALSO
+.Xr gpio 4 ,
+.Xr intro 4
+.Sh HISTORY
+The
+.Nm
+driver first appeared in
+.Ox 7.1 .
+.Sh AUTHORS
+.An -nosplit
+The
+.Nm
+driver was written by
+.An Klemens Nanni Aq Mt k...@openbsd.org .
Index: share/man/man4/Makefile
===================================================================
RCS file: /cvs/src/share/man/man4/Makefile,v
retrieving revision 1.806
diff -u -p -r1.806 Makefile
--- share/man/man4/Makefile     4 Sep 2021 12:11:45 -0000       1.806
+++ share/man/man4/Makefile     24 Sep 2021 22:22:10 -0000
@@ -36,7 +36,7 @@ MAN=  aac.4 abcrtc.4 abl.4 ac97.4 acphy.4
        fanpwr.4 fd.4 fdc.4 fec.4 fido.4 fins.4 fintek.4 fms.4 fusbtc.4 \
        fuse.4 fxp.4 \
        gdt.4 gentbi.4 gem.4 gfrtc.4 gif.4 glenv.4 glkgpio.4 gpio.4 gpiodcf.4 \
-       gpioiic.4 gpioow.4 graphaudio.4 gre.4 gscsio.4 \
+       gpioiic.4 gpioleds.4 gpioow.4 graphaudio.4 gre.4 gscsio.4 \
        hds.4 hiclock.4 hidwusb.4 hifn.4 hil.4 hilid.4 hilkbd.4 hilms.4 \
        hireset.4 hitemp.4 hme.4 hotplug.4 hsq.4 \
        hvn.4 hvs.4 hyperv.4 \
Index: sys/dev/fdt/gpioleds.c
===================================================================
RCS file: sys/dev/fdt/gpioleds.c
diff -N sys/dev/fdt/gpioleds.c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ sys/dev/fdt/gpioleds.c      24 Sep 2021 22:24:07 -0000
@@ -0,0 +1,102 @@
+/*     $OpenBSD: $     */
+/*
+ * Copyright (c) 2021 Klemens Nanni <k...@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/device.h>
+#include <sys/gpio.h>
+#include <sys/malloc.h>
+
+#include <machine/bus.h>
+#include <machine/fdt.h>
+
+#include <dev/gpio/gpiovar.h>
+#include <dev/ofw/ofw_gpio.h>
+#include <dev/ofw/ofw_pinctrl.h>
+#include <dev/ofw/openfirm.h>
+#include <dev/ofw/fdt.h>
+
+struct gpioleds_softc {
+       struct device    sc_dev;
+       int              sc_node;
+};
+
+int    gpioleds_match(struct device *, void *, void *);
+void   gpioleds_attach(struct device *, struct device *, void *);
+
+struct cfattach gpioleds_ca = {
+       sizeof (struct gpioleds_softc), gpioleds_match, gpioleds_attach
+};
+
+struct cfdriver gpioleds_cd = {
+       NULL, "gpioleds", DV_DULL
+};
+
+int
+gpioleds_match(struct device *parent, void *match, void *aux)
+{
+       const struct fdt_attach_args    *faa = aux;
+
+       return OF_is_compatible(faa->fa_node, "gpio-leds");
+}
+
+void
+gpioleds_attach(struct device *parent, struct device *self, void *aux)
+{
+       struct fdt_attach_args  *faa = aux;
+       uint32_t                *led_pin;
+       char                    *function, *default_state;
+       int                      function_len, default_state_len, gpios_len;
+       int                      node, leds = 0;
+
+       pinctrl_byname(faa->fa_node, "default");
+
+       for (node = OF_child(faa->fa_node); node; node = OF_peer(node)) {
+               function_len = OF_getproplen(node, "function");
+               if (function_len <= 0)
+                       continue;
+               default_state_len = OF_getproplen(node, "default-state");
+               if (default_state_len <= 0)
+                       continue;
+               gpios_len = OF_getproplen(node, "gpios");
+               if (gpios_len <= 0)
+                       continue;
+
+               function = malloc(function_len, M_TEMP, M_WAITOK);
+               OF_getprop(node, "function", function, function_len);
+               default_state = malloc(default_state_len, M_TEMP, M_WAITOK);
+               OF_getprop(node, "default-state", default_state, 
default_state_len);
+               led_pin = malloc(gpios_len, M_TEMP, M_WAITOK);
+               OF_getpropintarray(node, "gpios", led_pin, gpios_len);
+               gpio_controller_config_pin(led_pin, GPIO_CONFIG_OUTPUT);
+               if (strcmp(default_state, "on") == 0)
+                       gpio_controller_set_pin(led_pin, 1);
+               else if (strcmp(default_state, "off") == 0)
+                       gpio_controller_set_pin(led_pin, 0);
+
+               printf("%s \"%s\"", leds++ ? "," : ":", function);
+               free(function, M_TEMP, function_len);
+               free(default_state, M_TEMP, default_state_len);
+               free(led_pin, M_TEMP, gpios_len);
+       }
+
+       if (leds == 0) {
+               printf(": no LEDs\n");
+               return;
+       }
+       printf("\n");
+}
Index: sys/dev/fdt/files.fdt
===================================================================
RCS file: /cvs/src/sys/dev/fdt/files.fdt,v
retrieving revision 1.155
diff -u -p -r1.155 files.fdt
--- sys/dev/fdt/files.fdt       29 Jun 2021 12:43:09 -0000      1.155
+++ sys/dev/fdt/files.fdt       24 Sep 2021 22:22:10 -0000
@@ -588,3 +588,7 @@ file        dev/fdt/cwfg.c                  cwfg
 device dapmic
 attach dapmic at i2c
 file   dev/fdt/dapmic.c                dapmic
+
+device gpioleds
+attach gpioleds at fdt
+file   dev/fdt/gpioleds.c              gpioleds
Index: sys/arch/arm64/conf/GENERIC
===================================================================
RCS file: /cvs/src/sys/arch/arm64/conf/GENERIC,v
retrieving revision 1.206
diff -u -p -r1.206 GENERIC
--- sys/arch/arm64/conf/GENERIC 3 Sep 2021 14:53:09 -0000       1.206
+++ sys/arch/arm64/conf/GENERIC 24 Sep 2021 22:22:10 -0000
@@ -131,6 +131,8 @@ amdgpu*             at pci?
 drm*           at amdgpu?
 wsdisplay*     at amdgpu?
 
+gpioleds*      at fdt?
+
 # Apple
 apldart*       at fdt?
 apldog*                at fdt? early 1
Index: distrib/sets/lists/man/mi
===================================================================
RCS file: /cvs/src/distrib/sets/lists/man/mi,v
retrieving revision 1.1639
diff -u -p -r1.1639 mi
--- distrib/sets/lists/man/mi   21 Sep 2021 21:19:22 -0000      1.1639
+++ distrib/sets/lists/man/mi   24 Sep 2021 22:22:10 -0000
@@ -1419,6 +1419,7 @@
 ./usr/share/man/man4/gpio.4
 ./usr/share/man/man4/gpiodcf.4
 ./usr/share/man/man4/gpioiic.4
+./usr/share/man/man4/gpioleds.4
 ./usr/share/man/man4/gpioow.4
 ./usr/share/man/man4/graphaudio.4
 ./usr/share/man/man4/gre.4

Reply via email to