summaryrefslogtreecommitdiff
path: root/static/openbsd/man4/gpio.4
diff options
context:
space:
mode:
Diffstat (limited to 'static/openbsd/man4/gpio.4')
-rw-r--r--static/openbsd/man4/gpio.4219
1 files changed, 219 insertions, 0 deletions
diff --git a/static/openbsd/man4/gpio.4 b/static/openbsd/man4/gpio.4
new file mode 100644
index 00000000..ebabe04f
--- /dev/null
+++ b/static/openbsd/man4/gpio.4
@@ -0,0 +1,219 @@
+.\" $OpenBSD: gpio.4,v 1.30 2026/04/21 19:58:21 jca Exp $
+.\"
+.\" Copyright (c) 2004 Alexander Yurchenko <grange@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: April 21 2026 $
+.Dt GPIO 4
+.Os
+.Sh NAME
+.Nm gpio
+.Nd General Purpose Input/Output
+.Sh SYNOPSIS
+.Cd "gpio* at ath?"
+.Cd "gpio* at bcmgpio?" Pq arm64, armv7
+.Cd "gpio* at glxpcib?" Pq i386
+.Cd "gpio* at gscpcib?" Pq i386
+.Cd "gpio* at isagpio?"
+.Cd "gpio* at mpfgpio?" Pq riscv64
+.Cd "gpio* at nsclpcsio?"
+.Cd "gpio* at omgpio?" Pq armv7
+.Cd "gpio* at pcagpio?"
+.Cd "gpio* at pcaled?"
+.Cd "gpio* at sfgpio?" Pq riscv64
+.Cd "gpio* at skgpio?" Pq amd64, i386
+.Cd "gpio* at smtgpio?" Pq riscv64
+.Cd "gpio* at sxipio?" Pq arm64, armv7
+.Cd "gpio0 at voyager?" Pq loongson
+.Pp
+.In sys/types.h
+.In sys/gpio.h
+.In sys/ioctl.h
+.Sh DESCRIPTION
+The
+.Nm
+device attaches to the GPIO
+controller and provides a uniform programming interface to its pins.
+.Pp
+Each GPIO controller with an attached
+.Nm
+device has an associated device file under the
+.Pa /dev
+directory, e.g.\&
+.Pa /dev/gpio0 .
+Access from userland is performed through
+.Xr ioctl 2
+calls on these devices.
+.Pp
+The layout of the GPIO device is defined at securelevel 0, i.e. typically
+during system boot, and cannot be changed later.
+GPIO pins can be configured and given a symbolic name and device drivers
+that use GPIO pins can be attached to the
+.Nm
+device at securelevel 0.
+All other pins will not be accessible once the runlevel has been raised.
+.Sh IOCTL INTERFACE
+The following structures and constants are defined in the
+.In sys/gpio.h
+header file:
+.Bl -tag -width XXXX
+.It Dv GPIOINFO Fa "struct gpio_info"
+Returns information about the GPIO
+controller in the
+.Fa gpio_info
+structure:
+.Bd -literal
+struct gpio_info {
+ int gpio_npins; /* total number of pins available */
+};
+.Ed
+.It Dv GPIOPINREAD Fa "struct gpio_pin_op"
+Returns the input pin value in the
+.Fa gpio_pin_op
+structure:
+.Bd -literal
+#define GPIOPINMAXNAME 64
+
+struct gpio_pin_op {
+ char gp_name[GPIOPINMAXNAME]; /* pin name */
+ int gp_pin; /* pin number */
+ int gp_value; /* value */
+};
+.Ed
+.Pp
+The
+.Fa gp_name
+or
+.Fa gp_pin
+field must be set before calling.
+.It Dv GPIOPINWRITE Fa "struct gpio_pin_op"
+Writes the output value to the pin.
+The value set in the
+.Fa gp_value
+field must be either
+.Dv GPIO_PIN_LOW
+(logical 0) or
+.Dv GPIO_PIN_HIGH
+(logical 1).
+On return, the
+.Fa gp_value
+field contains the old pin state.
+.It Dv GPIOPINTOGGLE Fa "struct gpio_pin_op"
+Toggles the pin output value, i.e. changes it to the opposite.
+.Fa gp_value
+field is ignored and on return contains the old pin state.
+.It Dv GPIOPINSET Fa "struct gpio_pin_set"
+Changes pin configuration flags with the new ones provided in the
+.Fa gpio_pin_set
+structure:
+.Bd -literal
+#define GPIOPINMAXNAME 64
+
+struct gpio_pin_set {
+ char gp_name[GPIOPINMAXNAME]; /* pin name */
+ int gp_pin; /* pin number */
+ int gp_caps; /* pin capabilities (ro) */
+ int gp_flags; /* pin configuration flags */
+ char gp_name2[GPIOPINMAXNAME]; /* new name */
+};
+.Ed
+.Pp
+The
+.Fa gp_flags
+field is a combination of the following flags:
+.Pp
+.Bl -tag -width GPIO_PIN_OPENDRAIN -compact
+.It Dv GPIO_PIN_INPUT
+input direction
+.It Dv GPIO_PIN_OUTPUT
+output direction
+.It Dv GPIO_PIN_INOUT
+bi-directional
+.It Dv GPIO_PIN_OPENDRAIN
+open-drain output
+.It Dv GPIO_PIN_PUSHPULL
+push-pull output
+.It Dv GPIO_PIN_TRISTATE
+output disabled
+.It Dv GPIO_PIN_PULLUP
+internal pull-up enabled
+.It Dv GPIO_PIN_PULLDOWN
+internal pull-down enabled
+.It Dv GPIO_PIN_INVIN
+invert input
+.It Dv GPIO_PIN_INVOUT
+invert output
+.El
+.Pp
+Note that the GPIO controller
+may not support all of these flags.
+On return the
+.Fa gp_caps
+field contains flags that are supported.
+If no flags are specified, the pin configuration stays unchanged.
+.Pp
+Only GPIO pins that have been set using
+.Ar GPIOPINSET
+will be accessible at securelevels greater than 0.
+.It Dv GPIOPINUNSET Fa "struct gpio_pin_set"
+Unset the specified pin, i.e. clear its name and make it inaccessible
+at securelevels greater than 0.
+.It Dv GPIOATTACH Fa "struct gpio_attach"
+Attach the device described in the
+.Fa gpio_attach
+structure on this gpio device.
+.Bd -literal
+struct gpio_attach {
+ char ga_dvname[16]; /* device name */
+ int ga_offset; /* pin number */
+ u_int32_t ga_mask; /* binary mask */
+};
+.Ed
+.It Dv GPIODETACH Fa "struct gpio_attach"
+Detach a device from this gpio device that was previously attached using the
+.Dv GPIOATTACH
+.Xr ioctl 2 .
+The
+.Fa ga_offset
+and
+.Fa ga_mask
+fields of the
+.Fa gpio_attach
+structure are ignored.
+.El
+.Sh FILES
+.Bl -tag -width "/dev/gpiou" -compact
+.It /dev/gpio Ns Ar u
+GPIO device unit
+.Ar u
+file.
+.El
+.Sh SEE ALSO
+.Xr ioctl 2 ,
+.Xr gpioctl 8
+.Sh HISTORY
+The
+.Nm
+device first appeared in
+.Ox 3.6 .
+.Sh AUTHORS
+.An -nosplit
+The
+.Nm
+driver was written by
+.An Alexander Yurchenko Aq Mt grange@openbsd.org .
+Runtime device attachment was added by
+.An Marc Balmer Aq Mt mbalmer@openbsd.org .
+.Sh BUGS
+Event capabilities are not supported.