> Date: Thu, 16 Sep 2021 06:12:39 +0000
> From: Klemens Nanni <[email protected]>
> 
> On 3 September 2021 20:16:33 GMT+05:00, Klemens Nanni <[email protected]> 
> 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@

> >diff 3a5fa1afe4fc417b263a9d7363eaa933acbf5f2c refs/heads/master
> >blob - b597911b8f43a730799bbe34290843f3429c6958
> >blob + eec643f20e0feae7d4a4930f7d30575cffc25913
> >--- distrib/sets/lists/man/mi
> >+++ distrib/sets/lists/man/mi
> >@@ -1415,6 +1415,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
> >blob - 1541bb05749defd67419b07460def0f4065cbfce
> >blob + bb62c44d32f152ecf64aa77d60a1a5a3454d3968
> >--- share/man/man4/Makefile
> >+++ share/man/man4/Makefile
> >@@ -36,7 +36,7 @@ MAN=       aac.4 abcrtc.4 abl.4 ac97.4 acphy.4 acrtc.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 \
> >blob - /dev/null
> >blob + 5338437382ce25842ac833cfb847d8fe08e90e6d (mode 644)
> >--- /dev/null
> >+++ share/man/man4/gpioleds.4
> >@@ -0,0 +1,45 @@
> >+.\" $OpenBSD: $
> >+.\"
> >+.\" Copyright (c) 2021 Klemens Nanni <[email protected]>
> >+.\"
> >+.\" 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.0 .
> >+.Sh AUTHORS
> >+.An -nosplit
> >+The
> >+.Nm
> >+driver was written by
> >+.An Klemens Nanni Aq Mt [email protected] .
> >blob - 3e6591124cad872771cd68599761c26981d185d8
> >blob + d3c3afb621f20013dc2475b4d87bd959e4127c9d
> >--- sys/arch/arm64/conf/GENERIC
> >+++ sys/arch/arm64/conf/GENERIC
> >@@ -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
> >blob - 3b23523493a12c8b8091f9744561c6bcbb685751
> >blob + f749803b07408179ddc090d484ed4f79bfcb52a7
> >--- sys/dev/fdt/files.fdt
> >+++ sys/dev/fdt/files.fdt
> >@@ -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
> >blob - /dev/null
> >blob + f5ad5e7b6220f3d20b129fe26f8ada2d63eb5909 (mode 644)
> >--- /dev/null
> >+++ sys/dev/fdt/gpioleds.c
> >@@ -0,0 +1,102 @@
> >+/*  $OpenBSD: $     */
> >+/*
> >+ * Copyright (c) 2021 Klemens Nanni <[email protected]>
> >+ *
> >+ * 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 *);

tab vs. space issue here

> >+
> >+struct cfattach     gpioleds_ca = {

remove the tab here

> >+    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");
> >+}
> >
> 
> 

Reply via email to