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