January 9, 2008 GPIO 4

### 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.