GPIO(4)

NAME
gpio - General Purpose Input/Output

SYNOPSIS
gpio* at elansc?
gpio* at gcscpcib?
gpio* at gscpcib?
gpio* at nsclpcsio?
gpio* at ppbus?

#include <sys/types.h>
#include <sys/gpio.h>
#include <sys/ioctl.h>

DESCRIPTION
The gpio device attaches to the GPIO controller and provides a uniform programming interface to its pins.

Each GPIO controller with an attached gpio device has an associated device file under the /dev directory, e.g. /dev/gpio0. Access from userland is performed through ioctl(2) calls on these devices.

IOCTL INTERFACE
The following structures and constants are defined in the <sys/gpio.h> header file:

GPIOINFO (struct gpio_info)
    Returns information about the GPIO controller in the gpio_info structure:

        struct gpio_info {
        	int gpio_npins;		/* total number of pins available */
        };

GPIOPINREAD (struct gpio_pin_op)
    Returns the input pin value in the gpio_pin_op structure:

        struct gpio_pin_op {
        	int gp_pin;		/* pin number */
        	int gp_value;		/* value */
        };

    The gp_pin field must be set before calling.

GPIOPINWRITE (struct gpio_pin_op)
    Writes the output value to the pin. The value set in the gp_value field must be either GPIO_PIN_LOW (logical 0) or GPIO_PIN_HIGH (logical 1). On return, the gp_value field contains the old pin state.

GPIOPINTOGGLE (struct gpio_pin_op)
    Toggles the pin output value, i.e. changes it to the opposite. gp_value field is ignored and on return contains the old pin state.

GPIOPINCTL (struct gpio_pin_ctl)
    Changes pin configuration flags with the new ones provided in the gpio_pin_ctl structure:

        struct gpio_pin_ctl {
        	int gp_pin;		/* pin number */
        	int gp_caps;		/* pin capabilities (read-only) */
        	int gp_flags;		/* pin configuration flags */
        };

    The gp_flags field is a combination of the following flags:

    GPIO_PIN_INPUT
        input direction
    GPIO_PIN_OUTPUT
        output direction
    GPIO_PIN_INOUT
        bi-directional
    GPIO_PIN_OPENDRAIN
        open-drain output
    GPIO_PIN_PUSHPULL
        push-pull output
    GPIO_PIN_TRISTATE
        output disabled
    GPIO_PIN_PULLUP
        internal pull-up enabled
    GPIO_PIN_PULLDOWN
        internal pull-down enabled
    GPIO_PIN_INVIN
        invert input
    GPIO_PIN_INVOUT
        invert output

    Note that the GPIO controller may not support all of these flags. On return the gp_caps field contains flags that are supported. If no flags are specified, the pin configuration stays unchanged.

FILES
/dev/gpiou
    GPIO device unit u file.

SEE ALSO
ioctl(2), gpioctl(8)

HISTORY
The gpio device first appeared in OpenBSD 3.6 and NetBSD 4.0.

AUTHORS
-nosplit The gpio driver was written by Alexander Yurchenko <grange@openbsd.org>. gpio and was ported to NetBSD by Jared D. McNeill <jmcneill@NetBSD.org>.

BUGS
Event capabilities are not supported.