.. SPDX-License-Identifier: GPL-2.0 =================================== GPIO Character Device Userspace API =================================== This is latest version (v2) of the character device API, as defined in ``include/uapi/linux/gpio.h.`` First added in 5.10. .. note:: Do NOT abuse userspace APIs to control hardware that has proper kernel drivers. There may already be a driver for your use case, and an existing kernel driver is sure to provide a superior solution to bitbashing from userspace. Read Documentation/driver-api/gpio/drivers-on-gpio.rst to avoid reinventing kernel wheels in userspace. Similarly, for multi-function lines there may be other subsystems, such as Documentation/spi/index.rst, Documentation/i2c/index.rst, Documentation/driver-api/pwm.rst, Documentation/w1/index.rst etc, that provide suitable drivers and APIs for your hardware. Basic examples using the character device API can be found in ``tools/gpio/*``. The API is based around two major objects, the :ref:`gpio-v2-chip` and the :ref:`gpio-v2-line-request`. .. _gpio-v2-chip: Chip ==== The Chip represents a single GPIO chip and is exposed to userspace using device files of the form ``/dev/gpiochipX``. Each chip supports a number of GPIO lines, :c:type:`chip.lines`. Lines on the chip are identified by an ``offset`` in the range from 0 to ``chip.lines - 1``, i.e. `[0,chip.lines)`. Lines are requested from the chip using gpio-v2-get-line-ioctl.rst and the resulting line request is used to access the GPIO chip's lines or monitor the lines for edge events. Within this documentation, the file descriptor returned by calling `open()` on the GPIO device file is referred to as ``chip_fd``. Operations ---------- The following operations may be performed on the chip: .. toctree:: :titlesonly: Get Line Get Chip Info Get Line Info Watch Line Info Unwatch Line Info Read Line Info Changed Events .. _gpio-v2-line-request: Line Request ============ Line requests are created by gpio-v2-get-line-ioctl.rst and provide access to a set of requested lines. The line request is exposed to userspace via the anonymous file descriptor returned in :c:type:`request.fd` by gpio-v2-get-line-ioctl.rst. Within this documentation, the line request file descriptor is referred to as ``req_fd``. Operations ---------- The following operations may be performed on the line request: .. toctree:: :titlesonly: Get Line Values Set Line Values Read Line Edge Events Reconfigure Lines Types ===== This section contains the structs and enums that are referenced by the API v2, as defined in ``include/uapi/linux/gpio.h``. .. kernel-doc:: include/uapi/linux/gpio.h :identifiers: gpio_v2_line_attr_id gpio_v2_line_attribute gpio_v2_line_changed_type gpio_v2_line_config gpio_v2_line_config_attribute gpio_v2_line_event gpio_v2_line_event_id gpio_v2_line_flag gpio_v2_line_info gpio_v2_line_info_changed gpio_v2_line_request gpio_v2_line_values gpiochip_info .. toctree:: :hidden: error-codes