Documentation: gpio: add chardev v1 userspace API documentation
Add documentation for v1 of the GPIO character device userspace API to the obsolete section of both the admin-guide and userspace-api books. Signed-off-by: Kent Gibson <warthog618@gmail.com> Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
This commit is contained in:
parent
e10b641753
commit
16b2bb7fe5
@ -7,5 +7,6 @@ Obsolete GPIO APIs
|
|||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
|
Character Device Userspace API (v1) <../../userspace-api/gpio/chardev_v1>
|
||||||
Sysfs Interface <../../userspace-api/gpio/sysfs>
|
Sysfs Interface <../../userspace-api/gpio/sysfs>
|
||||||
|
|
||||||
|
131
Documentation/userspace-api/gpio/chardev_v1.rst
Normal file
131
Documentation/userspace-api/gpio/chardev_v1.rst
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
========================================
|
||||||
|
GPIO Character Device Userspace API (v1)
|
||||||
|
========================================
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
This API is obsoleted by chardev.rst (v2).
|
||||||
|
|
||||||
|
New developments should use the v2 API, and existing developments are
|
||||||
|
encouraged to migrate as soon as possible, as this API will be removed
|
||||||
|
in the future. The v2 API is a functional superset of the v1 API so any
|
||||||
|
v1 call can be directly translated to a v2 equivalent.
|
||||||
|
|
||||||
|
This interface will continue to be maintained for the migration period,
|
||||||
|
but new features will only be added to the new API.
|
||||||
|
|
||||||
|
First added in 4.8.
|
||||||
|
|
||||||
|
The API is based around three major objects, the :ref:`gpio-v1-chip`, the
|
||||||
|
:ref:`gpio-v1-line-handle`, and the :ref:`gpio-v1-line-event`.
|
||||||
|
|
||||||
|
Where "line event" is used in this document it refers to the request that can
|
||||||
|
monitor a line for edge events, not the edge events themselves.
|
||||||
|
|
||||||
|
.. _gpio-v1-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<gpiochip_info>`. 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 either gpio-get-linehandle-ioctl.rst
|
||||||
|
and the resulting line handle is used to access the GPIO chip's lines, or
|
||||||
|
gpio-get-lineevent-ioctl.rst and the resulting line event is used to monitor
|
||||||
|
a GPIO line 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 Handle <gpio-get-linehandle-ioctl>
|
||||||
|
Get Line Event <gpio-get-lineevent-ioctl>
|
||||||
|
Get Chip Info <gpio-get-chipinfo-ioctl>
|
||||||
|
Get Line Info <gpio-get-lineinfo-ioctl>
|
||||||
|
Watch Line Info <gpio-get-lineinfo-watch-ioctl>
|
||||||
|
Unwatch Line Info <gpio-get-lineinfo-unwatch-ioctl>
|
||||||
|
Read Line Info Changed Events <gpio-lineinfo-changed-read>
|
||||||
|
|
||||||
|
.. _gpio-v1-line-handle:
|
||||||
|
|
||||||
|
Line Handle
|
||||||
|
===========
|
||||||
|
|
||||||
|
Line handles are created by gpio-get-linehandle-ioctl.rst and provide
|
||||||
|
access to a set of requested lines. The line handle is exposed to userspace
|
||||||
|
via the anonymous file descriptor returned in
|
||||||
|
:c:type:`request.fd<gpiohandle_request>` by gpio-get-linehandle-ioctl.rst.
|
||||||
|
|
||||||
|
Within this documentation, the line handle file descriptor is referred to
|
||||||
|
as ``handle_fd``.
|
||||||
|
|
||||||
|
Operations
|
||||||
|
----------
|
||||||
|
|
||||||
|
The following operations may be performed on the line handle:
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:titlesonly:
|
||||||
|
|
||||||
|
Get Line Values <gpio-handle-get-line-values-ioctl>
|
||||||
|
Set Line Values <gpio-handle-set-line-values-ioctl>
|
||||||
|
Reconfigure Lines <gpio-handle-set-config-ioctl>
|
||||||
|
|
||||||
|
.. _gpio-v1-line-event:
|
||||||
|
|
||||||
|
Line Event
|
||||||
|
==========
|
||||||
|
|
||||||
|
Line events are created by gpio-get-lineevent-ioctl.rst and provide
|
||||||
|
access to a requested line. The line event is exposed to userspace
|
||||||
|
via the anonymous file descriptor returned in
|
||||||
|
:c:type:`request.fd<gpioevent_request>` by gpio-get-lineevent-ioctl.rst.
|
||||||
|
|
||||||
|
Within this documentation, the line event file descriptor is referred to
|
||||||
|
as ``event_fd``.
|
||||||
|
|
||||||
|
Operations
|
||||||
|
----------
|
||||||
|
|
||||||
|
The following operations may be performed on the line event:
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:titlesonly:
|
||||||
|
|
||||||
|
Get Line Value <gpio-handle-get-line-values-ioctl>
|
||||||
|
Read Line Edge Events <gpio-lineevent-data-read>
|
||||||
|
|
||||||
|
Types
|
||||||
|
=====
|
||||||
|
|
||||||
|
This section contains the structs that are referenced by the ABI v1.
|
||||||
|
|
||||||
|
The :c:type:`struct gpiochip_info<gpiochip_info>` is common to ABI v1 and v2.
|
||||||
|
|
||||||
|
.. kernel-doc:: include/uapi/linux/gpio.h
|
||||||
|
:identifiers:
|
||||||
|
gpioevent_data
|
||||||
|
gpioevent_request
|
||||||
|
gpiohandle_config
|
||||||
|
gpiohandle_data
|
||||||
|
gpiohandle_request
|
||||||
|
gpioline_info
|
||||||
|
gpioline_info_changed
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:hidden:
|
||||||
|
|
||||||
|
error-codes
|
@ -0,0 +1,78 @@
|
|||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
.. _GPIO_GET_LINEEVENT_IOCTL:
|
||||||
|
|
||||||
|
************************
|
||||||
|
GPIO_GET_LINEEVENT_IOCTL
|
||||||
|
************************
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
This ioctl is part of chardev_v1.rst and is obsoleted by
|
||||||
|
gpio-v2-get-line-ioctl.rst.
|
||||||
|
|
||||||
|
Name
|
||||||
|
====
|
||||||
|
|
||||||
|
GPIO_GET_LINEEVENT_IOCTL - Request a line with edge detection from the kernel.
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
========
|
||||||
|
|
||||||
|
.. c:macro:: GPIO_GET_LINEEVENT_IOCTL
|
||||||
|
|
||||||
|
``int ioctl(int chip_fd, GPIO_GET_LINEEVENT_IOCTL, struct gpioevent_request *request)``
|
||||||
|
|
||||||
|
Arguments
|
||||||
|
=========
|
||||||
|
|
||||||
|
``chip_fd``
|
||||||
|
The file descriptor of the GPIO character device returned by `open()`.
|
||||||
|
|
||||||
|
``request``
|
||||||
|
The :c:type:`event_request<gpioevent_request>` specifying the line
|
||||||
|
to request and its configuration.
|
||||||
|
|
||||||
|
Description
|
||||||
|
===========
|
||||||
|
|
||||||
|
Request a line with edge detection from the kernel.
|
||||||
|
|
||||||
|
On success, the requesting process is granted exclusive access to the line
|
||||||
|
value and may receive events when edges are detected on the line, as
|
||||||
|
described in gpio-lineevent-data-read.rst.
|
||||||
|
|
||||||
|
The state of a line is guaranteed to remain as requested until the returned
|
||||||
|
file descriptor is closed. Once the file descriptor is closed, the state of
|
||||||
|
the line becomes uncontrolled from the userspace perspective, and may revert
|
||||||
|
to its default state.
|
||||||
|
|
||||||
|
Requesting a line already in use is an error (**EBUSY**).
|
||||||
|
|
||||||
|
Closing the ``chip_fd`` has no effect on existing line events.
|
||||||
|
|
||||||
|
Configuration Rules
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
The following configuration rules apply:
|
||||||
|
|
||||||
|
The line event is requested as an input, so no flags specific to output lines,
|
||||||
|
``GPIOHANDLE_REQUEST_OUTPUT``, ``GPIOHANDLE_REQUEST_OPEN_DRAIN``, or
|
||||||
|
``GPIOHANDLE_REQUEST_OPEN_SOURCE``, may be set.
|
||||||
|
|
||||||
|
Only one bias flag, ``GPIOHANDLE_REQUEST_BIAS_xxx``, may be set.
|
||||||
|
If no bias flags are set then the bias configuration is not changed.
|
||||||
|
|
||||||
|
The edge flags, ``GPIOEVENT_REQUEST_RISING_EDGE`` and
|
||||||
|
``GPIOEVENT_REQUEST_FALLING_EDGE``, may be combined to detect both rising
|
||||||
|
and falling edges.
|
||||||
|
|
||||||
|
Requesting an invalid configuration is an error (**EINVAL**).
|
||||||
|
|
||||||
|
Return Value
|
||||||
|
============
|
||||||
|
|
||||||
|
On success 0 and the :c:type:`request.fd<gpioevent_request>` contains the file
|
||||||
|
descriptor for the request.
|
||||||
|
|
||||||
|
On error -1 and the ``errno`` variable is set appropriately.
|
||||||
|
Common error codes are described in error-codes.rst.
|
@ -0,0 +1,86 @@
|
|||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
.. _GPIO_GET_LINEHANDLE_IOCTL:
|
||||||
|
|
||||||
|
*************************
|
||||||
|
GPIO_GET_LINEHANDLE_IOCTL
|
||||||
|
*************************
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
This ioctl is part of chardev_v1.rst and is obsoleted by
|
||||||
|
gpio-v2-get-line-ioctl.rst.
|
||||||
|
|
||||||
|
Name
|
||||||
|
====
|
||||||
|
|
||||||
|
GPIO_GET_LINEHANDLE_IOCTL - Request a line or lines from the kernel.
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
========
|
||||||
|
|
||||||
|
.. c:macro:: GPIO_GET_LINEHANDLE_IOCTL
|
||||||
|
|
||||||
|
``int ioctl(int chip_fd, GPIO_GET_LINEHANDLE_IOCTL, struct gpiohandle_request *request)``
|
||||||
|
|
||||||
|
Arguments
|
||||||
|
=========
|
||||||
|
|
||||||
|
``chip_fd``
|
||||||
|
The file descriptor of the GPIO character device returned by `open()`.
|
||||||
|
|
||||||
|
``request``
|
||||||
|
The :c:type:`handle_request<gpiohandle_request>` specifying the lines to
|
||||||
|
request and their configuration.
|
||||||
|
|
||||||
|
Description
|
||||||
|
===========
|
||||||
|
|
||||||
|
Request a line or lines from the kernel.
|
||||||
|
|
||||||
|
While multiple lines may be requested, the same configuration applies to all
|
||||||
|
lines in the request.
|
||||||
|
|
||||||
|
On success, the requesting process is granted exclusive access to the line
|
||||||
|
value and write access to the line configuration.
|
||||||
|
|
||||||
|
The state of a line, including the value of output lines, is guaranteed to
|
||||||
|
remain as requested until the returned file descriptor is closed. Once the
|
||||||
|
file descriptor is closed, the state of the line becomes uncontrolled from
|
||||||
|
the userspace perspective, and may revert to its default state.
|
||||||
|
|
||||||
|
Requesting a line already in use is an error (**EBUSY**).
|
||||||
|
|
||||||
|
Closing the ``chip_fd`` has no effect on existing line handles.
|
||||||
|
|
||||||
|
.. _gpio-get-linehandle-config-rules:
|
||||||
|
|
||||||
|
Configuration Rules
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
The following configuration rules apply:
|
||||||
|
|
||||||
|
The direction flags, ``GPIOHANDLE_REQUEST_INPUT`` and
|
||||||
|
``GPIOHANDLE_REQUEST_OUTPUT``, cannot be combined. If neither are set then the
|
||||||
|
only other flag that may be set is ``GPIOHANDLE_REQUEST_ACTIVE_LOW`` and the
|
||||||
|
line is requested "as-is" to allow reading of the line value without altering
|
||||||
|
the electrical configuration.
|
||||||
|
|
||||||
|
The drive flags, ``GPIOHANDLE_REQUEST_OPEN_xxx``, require the
|
||||||
|
``GPIOHANDLE_REQUEST_OUTPUT`` to be set.
|
||||||
|
Only one drive flag may be set.
|
||||||
|
If none are set then the line is assumed push-pull.
|
||||||
|
|
||||||
|
Only one bias flag, ``GPIOHANDLE_REQUEST_BIAS_xxx``, may be set, and
|
||||||
|
it requires a direction flag to also be set.
|
||||||
|
If no bias flags are set then the bias configuration is not changed.
|
||||||
|
|
||||||
|
Requesting an invalid configuration is an error (**EINVAL**).
|
||||||
|
|
||||||
|
Return Value
|
||||||
|
============
|
||||||
|
|
||||||
|
On success 0 and the :c:type:`request.fd<gpiohandle_request>` contains the
|
||||||
|
file descriptor for the request.
|
||||||
|
|
||||||
|
On error -1 and the ``errno`` variable is set appropriately.
|
||||||
|
Common error codes are described in error-codes.rst.
|
54
Documentation/userspace-api/gpio/gpio-get-lineinfo-ioctl.rst
Normal file
54
Documentation/userspace-api/gpio/gpio-get-lineinfo-ioctl.rst
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
.. _GPIO_GET_LINEINFO_IOCTL:
|
||||||
|
|
||||||
|
***********************
|
||||||
|
GPIO_GET_LINEINFO_IOCTL
|
||||||
|
***********************
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
This ioctl is part of chardev_v1.rst and is obsoleted by
|
||||||
|
gpio-v2-get-lineinfo-ioctl.rst.
|
||||||
|
|
||||||
|
Name
|
||||||
|
====
|
||||||
|
|
||||||
|
GPIO_GET_LINEINFO_IOCTL - Get the publicly available information for a line.
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
========
|
||||||
|
|
||||||
|
.. c:macro:: GPIO_GET_LINEINFO_IOCTL
|
||||||
|
|
||||||
|
``int ioctl(int chip_fd, GPIO_GET_LINEINFO_IOCTL, struct gpioline_info *info)``
|
||||||
|
|
||||||
|
Arguments
|
||||||
|
=========
|
||||||
|
|
||||||
|
``chip_fd``
|
||||||
|
The file descriptor of the GPIO character device returned by `open()`.
|
||||||
|
|
||||||
|
``info``
|
||||||
|
The :c:type:`line_info<gpioline_info>` to be populated, with the
|
||||||
|
``offset`` field set to indicate the line to be collected.
|
||||||
|
|
||||||
|
Description
|
||||||
|
===========
|
||||||
|
|
||||||
|
Get the publicly available information for a line.
|
||||||
|
|
||||||
|
This information is available independent of whether the line is in use.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
The line info does not include the line value.
|
||||||
|
|
||||||
|
The line must be requested using gpio-get-linehandle-ioctl.rst or
|
||||||
|
gpio-get-lineevent-ioctl.rst to access its value.
|
||||||
|
|
||||||
|
Return Value
|
||||||
|
============
|
||||||
|
|
||||||
|
On success 0 and ``info`` is populated with the chip info.
|
||||||
|
|
||||||
|
On error -1 and the ``errno`` variable is set appropriately.
|
||||||
|
Common error codes are described in error-codes.rst.
|
@ -33,7 +33,7 @@ Description
|
|||||||
|
|
||||||
Remove the line from the list of lines being watched on this ``chip_fd``.
|
Remove the line from the list of lines being watched on this ``chip_fd``.
|
||||||
|
|
||||||
This is the opposite of gpio-v2-get-lineinfo-watch-ioctl.rst (v2) and
|
This is the reverse of gpio-v2-get-lineinfo-watch-ioctl.rst (v2) and
|
||||||
gpio-get-lineinfo-watch-ioctl.rst (v1).
|
gpio-get-lineinfo-watch-ioctl.rst (v1).
|
||||||
|
|
||||||
Unwatching a line that is not watched is an error (**EBUSY**).
|
Unwatching a line that is not watched is an error (**EBUSY**).
|
||||||
|
@ -0,0 +1,74 @@
|
|||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
.. _GPIO_GET_LINEINFO_WATCH_IOCTL:
|
||||||
|
|
||||||
|
*****************************
|
||||||
|
GPIO_GET_LINEINFO_WATCH_IOCTL
|
||||||
|
*****************************
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
This ioctl is part of chardev_v1.rst and is obsoleted by
|
||||||
|
gpio-v2-get-lineinfo-watch-ioctl.rst.
|
||||||
|
|
||||||
|
Name
|
||||||
|
====
|
||||||
|
|
||||||
|
GPIO_GET_LINEINFO_WATCH_IOCTL - Enable watching a line for changes to its
|
||||||
|
request state and configuration information.
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
========
|
||||||
|
|
||||||
|
.. c:macro:: GPIO_GET_LINEINFO_WATCH_IOCTL
|
||||||
|
|
||||||
|
``int ioctl(int chip_fd, GPIO_GET_LINEINFO_WATCH_IOCTL, struct gpioline_info *info)``
|
||||||
|
|
||||||
|
Arguments
|
||||||
|
=========
|
||||||
|
|
||||||
|
``chip_fd``
|
||||||
|
The file descriptor of the GPIO character device returned by `open()`.
|
||||||
|
|
||||||
|
``info``
|
||||||
|
The :c:type:`line_info<gpioline_info>` struct to be populated, with
|
||||||
|
the ``offset`` set to indicate the line to watch
|
||||||
|
|
||||||
|
Description
|
||||||
|
===========
|
||||||
|
|
||||||
|
Enable watching a line for changes to its request state and configuration
|
||||||
|
information. Changes to line info include a line being requested, released
|
||||||
|
or reconfigured.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
Watching line info is not generally required, and would typically only be
|
||||||
|
used by a system monitoring component.
|
||||||
|
|
||||||
|
The line info does NOT include the line value.
|
||||||
|
|
||||||
|
The line must be requested using gpio-get-linehandle-ioctl.rst or
|
||||||
|
gpio-get-lineevent-ioctl.rst to access its value, and the line event can
|
||||||
|
monitor a line for events using gpio-lineevent-data-read.rst.
|
||||||
|
|
||||||
|
By default all lines are unwatched when the GPIO chip is opened.
|
||||||
|
|
||||||
|
Multiple lines may be watched simultaneously by adding a watch for each.
|
||||||
|
|
||||||
|
Once a watch is set, any changes to line info will generate events which can be
|
||||||
|
read from the ``chip_fd`` as described in
|
||||||
|
gpio-lineinfo-changed-read.rst.
|
||||||
|
|
||||||
|
Adding a watch to a line that is already watched is an error (**EBUSY**).
|
||||||
|
|
||||||
|
Watches are specific to the ``chip_fd`` and are independent of watches
|
||||||
|
on the same GPIO chip opened with a separate call to `open()`.
|
||||||
|
|
||||||
|
First added in 5.7.
|
||||||
|
|
||||||
|
Return Value
|
||||||
|
============
|
||||||
|
|
||||||
|
On success 0 and ``info`` is populated with the current line info.
|
||||||
|
|
||||||
|
On error -1 and the ``errno`` variable is set appropriately.
|
||||||
|
Common error codes are described in error-codes.rst.
|
@ -0,0 +1,56 @@
|
|||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
.. _GPIOHANDLE_GET_LINE_VALUES_IOCTL:
|
||||||
|
|
||||||
|
********************************
|
||||||
|
GPIOHANDLE_GET_LINE_VALUES_IOCTL
|
||||||
|
********************************
|
||||||
|
.. warning::
|
||||||
|
This ioctl is part of chardev_v1.rst and is obsoleted by
|
||||||
|
gpio-v2-line-get-values-ioctl.rst.
|
||||||
|
|
||||||
|
Name
|
||||||
|
====
|
||||||
|
|
||||||
|
GPIOHANDLE_GET_LINE_VALUES_IOCTL - Get the values of all requested lines.
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
========
|
||||||
|
|
||||||
|
.. c:macro:: GPIOHANDLE_GET_LINE_VALUES_IOCTL
|
||||||
|
|
||||||
|
``int ioctl(int handle_fd, GPIOHANDLE_GET_LINE_VALUES_IOCTL, struct gpiohandle_data *values)``
|
||||||
|
|
||||||
|
Arguments
|
||||||
|
=========
|
||||||
|
|
||||||
|
``handle_fd``
|
||||||
|
The file descriptor of the GPIO character device, as returned in the
|
||||||
|
:c:type:`request.fd<gpiohandle_request>` by gpio-get-linehandle-ioctl.rst.
|
||||||
|
|
||||||
|
``values``
|
||||||
|
The :c:type:`line_values<gpiohandle_data>` to be populated.
|
||||||
|
|
||||||
|
Description
|
||||||
|
===========
|
||||||
|
|
||||||
|
Get the values of all requested lines.
|
||||||
|
|
||||||
|
The values of both input and output lines may be read.
|
||||||
|
|
||||||
|
For output lines, the value returned is driver and configuration dependent and
|
||||||
|
may be either the output buffer (the last requested value set) or the input
|
||||||
|
buffer (the actual level of the line), and depending on the hardware and
|
||||||
|
configuration these may differ.
|
||||||
|
|
||||||
|
This ioctl can also be used to read the line value for line events,
|
||||||
|
substituting the ``event_fd`` for the ``handle_fd``. As there is only
|
||||||
|
one line requested in that case, only the one value is returned in ``values``.
|
||||||
|
|
||||||
|
Return Value
|
||||||
|
============
|
||||||
|
|
||||||
|
On success 0 and ``values`` populated with the values read.
|
||||||
|
|
||||||
|
On error -1 and the ``errno`` variable is set appropriately.
|
||||||
|
Common error codes are described in error-codes.rst.
|
@ -0,0 +1,62 @@
|
|||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
.. _GPIOHANDLE_SET_CONFIG_IOCTL:
|
||||||
|
|
||||||
|
***************************
|
||||||
|
GPIOHANDLE_SET_CONFIG_IOCTL
|
||||||
|
***************************
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
This ioctl is part of chardev_v1.rst and is obsoleted by
|
||||||
|
gpio-v2-line-set-config-ioctl.rst.
|
||||||
|
|
||||||
|
Name
|
||||||
|
====
|
||||||
|
|
||||||
|
GPIOHANDLE_SET_CONFIG_IOCTL - Update the configuration of previously requested lines.
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
========
|
||||||
|
|
||||||
|
.. c:macro:: GPIOHANDLE_SET_CONFIG_IOCTL
|
||||||
|
|
||||||
|
``int ioctl(int handle_fd, GPIOHANDLE_SET_CONFIG_IOCTL, struct gpiohandle_config *config)``
|
||||||
|
|
||||||
|
Arguments
|
||||||
|
=========
|
||||||
|
|
||||||
|
``handle_fd``
|
||||||
|
The file descriptor of the GPIO character device, as returned in the
|
||||||
|
:c:type:`request.fd<gpiohandle_request>` by gpio-get-linehandle-ioctl.rst.
|
||||||
|
|
||||||
|
``config``
|
||||||
|
The new :c:type:`configuration<gpiohandle_config>` to apply to the
|
||||||
|
requested lines.
|
||||||
|
|
||||||
|
Description
|
||||||
|
===========
|
||||||
|
|
||||||
|
Update the configuration of previously requested lines, without releasing the
|
||||||
|
line or introducing potential glitches.
|
||||||
|
|
||||||
|
The configuration applies to all requested lines.
|
||||||
|
|
||||||
|
The same :ref:`gpio-get-linehandle-config-rules` that apply when requesting the
|
||||||
|
lines also apply when updating the line configuration.
|
||||||
|
|
||||||
|
The motivating use case for this command is changing direction of
|
||||||
|
bi-directional lines between input and output, but it may be used more
|
||||||
|
generally move lines seamlessly from one configuration state to another.
|
||||||
|
|
||||||
|
To only change the value of output lines, use
|
||||||
|
gpio-handle-set-line-values-ioctl.rst.
|
||||||
|
|
||||||
|
First added in 5.5.
|
||||||
|
|
||||||
|
Return Value
|
||||||
|
============
|
||||||
|
|
||||||
|
On success 0.
|
||||||
|
|
||||||
|
On error -1 and the ``errno`` variable is set appropriately.
|
||||||
|
Common error codes are described in error-codes.rst.
|
@ -0,0 +1,48 @@
|
|||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
.. _GPIO_HANDLE_SET_LINE_VALUES_IOCTL:
|
||||||
|
|
||||||
|
*********************************
|
||||||
|
GPIO_HANDLE_SET_LINE_VALUES_IOCTL
|
||||||
|
*********************************
|
||||||
|
.. warning::
|
||||||
|
This ioctl is part of chardev_v1.rst and is obsoleted by
|
||||||
|
gpio-v2-line-set-values-ioctl.rst.
|
||||||
|
|
||||||
|
Name
|
||||||
|
====
|
||||||
|
|
||||||
|
GPIO_HANDLE_SET_LINE_VALUES_IOCTL - Set the values of all requested output lines.
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
========
|
||||||
|
|
||||||
|
.. c:macro:: GPIO_HANDLE_SET_LINE_VALUES_IOCTL
|
||||||
|
|
||||||
|
``int ioctl(int handle_fd, GPIO_HANDLE_SET_LINE_VALUES_IOCTL, struct gpiohandle_data *values)``
|
||||||
|
|
||||||
|
Arguments
|
||||||
|
=========
|
||||||
|
|
||||||
|
``handle_fd``
|
||||||
|
The file descriptor of the GPIO character device, as returned in the
|
||||||
|
:c:type:`request.fd<gpiohandle_request>` by gpio-get-linehandle-ioctl.rst.
|
||||||
|
|
||||||
|
``values``
|
||||||
|
The :c:type:`line_values<gpiohandle_data>` to set.
|
||||||
|
|
||||||
|
Description
|
||||||
|
===========
|
||||||
|
|
||||||
|
Set the values of all requested output lines.
|
||||||
|
|
||||||
|
Only the values of output lines may be set.
|
||||||
|
Attempting to set the value of input lines is an error (**EPERM**).
|
||||||
|
|
||||||
|
Return Value
|
||||||
|
============
|
||||||
|
|
||||||
|
On success 0.
|
||||||
|
|
||||||
|
On error -1 and the ``errno`` variable is set appropriately.
|
||||||
|
Common error codes are described in error-codes.rst.
|
@ -0,0 +1,84 @@
|
|||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
.. _GPIO_LINEEVENT_DATA_READ:
|
||||||
|
|
||||||
|
************************
|
||||||
|
GPIO_LINEEVENT_DATA_READ
|
||||||
|
************************
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
This ioctl is part of chardev_v1.rst and is obsoleted by
|
||||||
|
gpio-v2-line-event-read.rst.
|
||||||
|
|
||||||
|
Name
|
||||||
|
====
|
||||||
|
|
||||||
|
GPIO_LINEEVENT_DATA_READ - Read edge detection events from a line event.
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
========
|
||||||
|
|
||||||
|
``int read(int event_fd, void *buf, size_t count)``
|
||||||
|
|
||||||
|
Arguments
|
||||||
|
=========
|
||||||
|
|
||||||
|
``event_fd``
|
||||||
|
The file descriptor of the GPIO character device, as returned in the
|
||||||
|
:c:type:`request.fd<gpioevent_request>` by gpio-get-lineevent-ioctl.rst.
|
||||||
|
|
||||||
|
``buf``
|
||||||
|
The buffer to contain the :c:type:`events<gpioevent_data>`.
|
||||||
|
|
||||||
|
``count``
|
||||||
|
The number of bytes available in ``buf``, which must be at
|
||||||
|
least the size of a :c:type:`gpioevent_data`.
|
||||||
|
|
||||||
|
Description
|
||||||
|
===========
|
||||||
|
|
||||||
|
Read edge detection events for a line from a line event.
|
||||||
|
|
||||||
|
Edge detection must be enabled for the input line using either
|
||||||
|
``GPIOEVENT_REQUEST_RISING_EDGE`` or ``GPIOEVENT_REQUEST_FALLING_EDGE``, or
|
||||||
|
both. Edge events are then generated whenever edge interrupts are detected on
|
||||||
|
the input line.
|
||||||
|
|
||||||
|
The kernel captures and timestamps edge events as close as possible to their
|
||||||
|
occurrence and stores them in a buffer from where they can be read by
|
||||||
|
userspace at its convenience using `read()`.
|
||||||
|
|
||||||
|
The source of the clock for :c:type:`event.timestamp<gpioevent_data>` is
|
||||||
|
``CLOCK_MONOTONIC``, except for kernels earlier than Linux 5.7 when it was
|
||||||
|
``CLOCK_REALTIME``. There is no indication in the :c:type:`gpioevent_data`
|
||||||
|
as to which clock source is used, it must be determined from either the kernel
|
||||||
|
version or sanity checks on the timestamp itself.
|
||||||
|
|
||||||
|
Events read from the buffer are always in the same order that they were
|
||||||
|
detected by the kernel.
|
||||||
|
|
||||||
|
The size of the kernel event buffer is fixed at 16 events.
|
||||||
|
|
||||||
|
The buffer may overflow if bursts of events occur quicker than they are read
|
||||||
|
by userspace. If an overflow occurs then the most recent event is discarded.
|
||||||
|
Overflow cannot be detected from userspace.
|
||||||
|
|
||||||
|
To minimize the number of calls required to copy events from the kernel to
|
||||||
|
userspace, `read()` supports copying multiple events. The number of events
|
||||||
|
copied is the lower of the number available in the kernel buffer and the
|
||||||
|
number that will fit in the userspace buffer (``buf``).
|
||||||
|
|
||||||
|
The `read()` will block if no event is available and the ``event_fd`` has not
|
||||||
|
been set **O_NONBLOCK**.
|
||||||
|
|
||||||
|
The presence of an event can be tested for by checking that the ``event_fd`` is
|
||||||
|
readable using `poll()` or an equivalent.
|
||||||
|
|
||||||
|
Return Value
|
||||||
|
============
|
||||||
|
|
||||||
|
On success the number of bytes read, which will be a multiple of the size of
|
||||||
|
a :c:type:`gpio_lineevent_data` event.
|
||||||
|
|
||||||
|
On error -1 and the ``errno`` variable is set appropriately.
|
||||||
|
Common error codes are described in error-codes.rst.
|
@ -0,0 +1,87 @@
|
|||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
.. _GPIO_LINEINFO_CHANGED_READ:
|
||||||
|
|
||||||
|
**************************
|
||||||
|
GPIO_LINEINFO_CHANGED_READ
|
||||||
|
**************************
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
This ioctl is part of chardev_v1.rst and is obsoleted by
|
||||||
|
gpio-v2-lineinfo-changed-read.rst.
|
||||||
|
|
||||||
|
Name
|
||||||
|
====
|
||||||
|
|
||||||
|
GPIO_LINEINFO_CHANGED_READ - Read line info change events for watched lines
|
||||||
|
from the chip.
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
========
|
||||||
|
|
||||||
|
``int read(int chip_fd, void *buf, size_t count)``
|
||||||
|
|
||||||
|
Arguments
|
||||||
|
=========
|
||||||
|
|
||||||
|
``chip_fd``
|
||||||
|
The file descriptor of the GPIO character device returned by `open()`.
|
||||||
|
|
||||||
|
``buf``
|
||||||
|
The buffer to contain the :c:type:`events<gpioline_info_changed>`.
|
||||||
|
|
||||||
|
``count``
|
||||||
|
The number of bytes available in ``buf``, which must be at least the size
|
||||||
|
of a :c:type:`gpioline_info_changed` event.
|
||||||
|
|
||||||
|
Description
|
||||||
|
===========
|
||||||
|
|
||||||
|
Read line info change events for watched lines from the chip.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
Monitoring line info changes is not generally required, and would typically
|
||||||
|
only be performed by a system monitoring component.
|
||||||
|
|
||||||
|
These events relate to changes in a line's request state or configuration,
|
||||||
|
not its value. Use gpio-lineevent-data-read.rst to receive events when a
|
||||||
|
line changes value.
|
||||||
|
|
||||||
|
A line must be watched using gpio-get-lineinfo-watch-ioctl.rst to generate
|
||||||
|
info changed events. Subsequently, a request, release, or reconfiguration
|
||||||
|
of the line will generate an info changed event.
|
||||||
|
|
||||||
|
The kernel timestamps events when they occur and stores them in a buffer
|
||||||
|
from where they can be read by userspace at its convenience using `read()`.
|
||||||
|
|
||||||
|
The size of the kernel event buffer is fixed at 32 events per ``chip_fd``.
|
||||||
|
|
||||||
|
The buffer may overflow if bursts of events occur quicker than they are read
|
||||||
|
by userspace. If an overflow occurs then the most recent event is discarded.
|
||||||
|
Overflow cannot be detected from userspace.
|
||||||
|
|
||||||
|
Events read from the buffer are always in the same order that they were
|
||||||
|
detected by the kernel, including when multiple lines are being monitored by
|
||||||
|
the one ``chip_fd``.
|
||||||
|
|
||||||
|
To minimize the number of calls required to copy events from the kernel to
|
||||||
|
userspace, `read()` supports copying multiple events. The number of events
|
||||||
|
copied is the lower of the number available in the kernel buffer and the
|
||||||
|
number that will fit in the userspace buffer (``buf``).
|
||||||
|
|
||||||
|
A `read()` will block if no event is available and the ``chip_fd`` has not
|
||||||
|
been set **O_NONBLOCK**.
|
||||||
|
|
||||||
|
The presence of an event can be tested for by checking that the ``chip_fd`` is
|
||||||
|
readable using `poll()` or an equivalent.
|
||||||
|
|
||||||
|
First added in 5.7.
|
||||||
|
|
||||||
|
Return Value
|
||||||
|
============
|
||||||
|
|
||||||
|
On success the number of bytes read, which will be a multiple of the size of
|
||||||
|
a :c:type:`gpioline_info_changed` event.
|
||||||
|
|
||||||
|
On error -1 and the ``errno`` variable is set appropriately.
|
||||||
|
Common error codes are described in error-codes.rst.
|
@ -7,4 +7,5 @@ Obsolete GPIO Userspace APIs
|
|||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
|
Character Device Userspace API (v1) <chardev_v1>
|
||||||
Sysfs Interface <sysfs>
|
Sysfs Interface <sysfs>
|
||||||
|
Loading…
Reference in New Issue
Block a user