GPIO(4)                 NetBSD Kernel Interfaces Manual                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 user-
     land 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
     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.

NetBSD 5.0_STABLE               January 9, 2008              NetBSD 5.0_STABLE
