NAME

gpio - General Purpose Input/Output

SYNOPSIS

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

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 OpenBSD3.6 and NetBSD4.0.

AUTHORS

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.