> Date: Sat, 25 Sep 2021 15:45:15 +0000 > From: Klemens Nanni <[email protected]> > > On Sat, Sep 25, 2021 at 10:53:12AM +0000, Klemens Nanni wrote: > > On Fri, Sep 24, 2021 at 10:35:56PM +0000, Klemens Nanni wrote: > > > On Thu, Sep 16, 2021 at 11:07:20AM +0200, Mark Kettenis wrote: > > > > > Date: Thu, 16 Sep 2021 06:14:39 +0000 > > > > > From: Klemens Nanni <[email protected]> > > > > > > > > > > On 5 September 2021 01:22:53 GMT+05:00, Klemens Nanni > > > > > <[email protected]> wrote: > > > > > >Read a single GPIO pin indicating whether AC is plugged in or not. > > > > > > > > > > > >This gives me a sensor on my Pinebook Pro. > > > > > >cwfg(4) already provides battery information but not the charger > > > > > >bits. > > > > > > > > > > > >apm(4) integration can follow separately. > > > > > > > > > > > >Feedback? OK? > > > > > > > > > > Ping. > > > > > The diff applies after the "new gpioleds driver" one. > > > > > > New diff. OK for after unlock modulo the gpioleds bits after being > > > committed separately (CVS diffs juggling is annoying)? > > > > > > > > >+ gpios_len = OF_getproplen(node, > > > > > >+ gpios_property = "charger-status-gpios"); > > > > > > > > No, please don't hide assignment statements as function arguments. > > > > > > Fixed, thanks. > > > > Clean diff after gpioleds(4) got in, this time with the same whitespace > > fixes. > > > > Sorry for the noise. > > Sigh, an eagle-eyed reader noticed my copy-paste error: > > > + gpios_property = "charger-status-gpios"); > > Here's the correct diff that also compiles.
ok kettenis@ > Index: share/man/man4/gpiocharger.4 > =================================================================== > RCS file: share/man/man4/gpiocharger.4 > diff -N share/man/man4/gpiocharger.4 > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ share/man/man4/gpiocharger.4 24 Sep 2021 22:33:26 -0000 > @@ -0,0 +1,51 @@ > +.\" $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 04 2021 $ > +.Dt GPIOCHARGER 4 > +.Os > +.Sh NAME > +.Nm gpiocharger > +.Nd GPIO battery charger > +.Sh SYNOPSIS > +.Cd "gpiocharger* at fdt?" > +.Sh DESCRIPTION > +The > +.Nm > +driver provides support for battery chargers connected to GPIO pins. > +Currently, only power supply status events are supported. > +.Pp > +The power supply status (connected or disconnected) is set up as a sensor > +and can be monitored using > +.Xr sysctl 8 > +or > +.Xr sensorsd 8 . > +.Sh SEE ALSO > +.Xr gpio 4 , > +.Xr intro 4 , > +.Xr sensorsd 8 , > +.Xr sysctl 8 > +.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 [email protected] . > Index: share/man/man4/Makefile > =================================================================== > RCS file: /cvs/src/share/man/man4/Makefile,v > retrieving revision 1.807 > diff -u -p -r1.807 Makefile > --- share/man/man4/Makefile 25 Sep 2021 10:43:23 -0000 1.807 > +++ share/man/man4/Makefile 25 Sep 2021 10:45:42 -0000 > @@ -35,7 +35,8 @@ MAN= aac.4 abcrtc.4 abl.4 ac97.4 acphy.4 > eso.4 ess.4 et.4 etherip.4 etphy.4 ex.4 exphy.4 exrtc.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 \ > + gdt.4 gentbi.4 gem.4 gfrtc.4 gif.4 glenv.4 glkgpio.4 gpio.4 \ > + gpiocharger.4 gpiodcf.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 \ > Index: sys/dev/fdt/gpiocharger.c > =================================================================== > RCS file: sys/dev/fdt/gpiocharger.c > diff -N sys/dev/fdt/gpiocharger.c > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ sys/dev/fdt/gpiocharger.c 25 Sep 2021 14:42:16 -0000 > @@ -0,0 +1,117 @@ > +/* $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> > + > +#include <sys/sensors.h> > + > +struct gpiocharger_softc { > + struct device sc_dev; > + int sc_node; > + uint32_t *sc_charger_pin; > + struct ksensor sc_sensor; > + struct ksensordev sc_sensordev; > +}; > + > +int gpiocharger_match(struct device *, void *, void *); > +void gpiocharger_attach(struct device *, struct device *, void *); > + > +struct cfattach gpiocharger_ca = { > + sizeof (struct gpiocharger_softc), gpiocharger_match, gpiocharger_attach > +}; > + > +struct cfdriver gpiocharger_cd = { > + NULL, "gpiocharger", DV_DULL > +}; > + > +void gpiocharger_update_charger(void *); > + > +int > +gpiocharger_match(struct device *parent, void *match, void *aux) > +{ > + const struct fdt_attach_args *faa = aux; > + > + return OF_is_compatible(faa->fa_node, "gpio-charger"); > +} > + > +void > +gpiocharger_attach(struct device *parent, struct device *self, void *aux) > +{ > + struct gpiocharger_softc *sc = (struct gpiocharger_softc *)self; > + struct fdt_attach_args *faa = aux; > + char *charger_type, *gpios_property; > + int charger_type_len, gpios_len; > + int node = faa->fa_node; > + > + pinctrl_byname(node, "default"); > + > + charger_type_len = OF_getproplen(node, "charger-type"); > + if (charger_type_len <= 0) > + goto nocharger; > + gpios_property = "gpios"; > + gpios_len = OF_getproplen(node, gpios_property); > + if (gpios_len <= 0) { > + gpios_property = "charger-status-gpios"; > + gpios_len = OF_getproplen(node, gpios_property); > + if (gpios_len <= 0) > + goto nocharger; > + } > + > + charger_type = malloc(charger_type_len, M_TEMP, M_WAITOK); > + OF_getprop(node, "charger-type", charger_type, charger_type_len); > + sc->sc_charger_pin = malloc(gpios_len, M_DEVBUF, M_WAITOK); > + OF_getpropintarray(node, gpios_property, sc->sc_charger_pin, gpios_len); > + gpio_controller_config_pin(sc->sc_charger_pin, GPIO_CONFIG_INPUT); > + > + strlcpy(sc->sc_sensor.desc, charger_type, sizeof(sc->sc_sensor.desc)); > + strlcat(sc->sc_sensor.desc, " power supply", > + sizeof(sc->sc_sensor.desc)); > + sc->sc_sensor.type = SENSOR_INDICATOR; > + sensor_attach(&sc->sc_sensordev, &sc->sc_sensor); > + strlcpy(sc->sc_sensordev.xname, sc->sc_dev.dv_xname, > + sizeof(sc->sc_sensordev.xname)); > + sensordev_install(&sc->sc_sensordev); > + sensor_task_register(sc, gpiocharger_update_charger, 5); > + > + printf(": \"%s\"\n", charger_type); > + free(charger_type, M_TEMP, charger_type_len); > + return; > + > +nocharger: > + printf(": no charger\n"); > +} > + > +void > +gpiocharger_update_charger(void *arg) > +{ > + struct gpiocharger_softc *sc = arg; > + > + sc->sc_sensor.value = gpio_controller_get_pin(sc->sc_charger_pin); > +} > Index: sys/dev/fdt/files.fdt > =================================================================== > RCS file: /cvs/src/sys/dev/fdt/files.fdt,v > retrieving revision 1.156 > diff -u -p -r1.156 files.fdt > --- sys/dev/fdt/files.fdt 25 Sep 2021 10:43:24 -0000 1.156 > +++ sys/dev/fdt/files.fdt 25 Sep 2021 10:44:59 -0000 > @@ -592,3 +592,7 @@ file dev/fdt/dapmic.c dapmic > device gpioleds > attach gpioleds at fdt > file dev/fdt/gpioleds.c gpioleds > + > +device gpiocharger > +attach gpiocharger at fdt > +file dev/fdt/gpiocharger.c gpiocharger > Index: sys/arch/arm64/conf/GENERIC > =================================================================== > RCS file: /cvs/src/sys/arch/arm64/conf/GENERIC,v > retrieving revision 1.207 > diff -u -p -r1.207 GENERIC > --- sys/arch/arm64/conf/GENERIC 25 Sep 2021 10:43:24 -0000 1.207 > +++ sys/arch/arm64/conf/GENERIC 25 Sep 2021 10:44:18 -0000 > @@ -132,6 +132,7 @@ drm* at amdgpu? > wsdisplay* at amdgpu? > > gpioleds* at fdt? > +gpiocharger* at fdt? > > # Apple > apldart* at fdt? > Index: distrib/sets/lists/man/mi > =================================================================== > RCS file: /cvs/src/distrib/sets/lists/man/mi,v > retrieving revision 1.1640 > diff -u -p -r1.1640 mi > --- distrib/sets/lists/man/mi 25 Sep 2021 10:43:24 -0000 1.1640 > +++ distrib/sets/lists/man/mi 25 Sep 2021 10:44:34 -0000 > @@ -1417,6 +1417,7 @@ > ./usr/share/man/man4/glenv.4 > ./usr/share/man/man4/glkgpio.4 > ./usr/share/man/man4/gpio.4 > +./usr/share/man/man4/gpiocharger.4 > ./usr/share/man/man4/gpiodcf.4 > ./usr/share/man/man4/gpioiic.4 > ./usr/share/man/man4/gpioleds.4 >
