|  | .. SPDX-License-Identifier: GPL-2.0 | 
|  |  | 
|  | .. _GPIO_V2_LINEINFO_CHANGED_READ: | 
|  |  | 
|  | ***************************** | 
|  | GPIO_V2_LINEINFO_CHANGED_READ | 
|  | ***************************** | 
|  |  | 
|  | Name | 
|  | ==== | 
|  |  | 
|  | GPIO_V2_LINEINFO_CHANGED_READ - Read line info changed 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<gpio_v2_line_info_changed>`. | 
|  |  | 
|  | ``count`` | 
|  | The number of bytes available in ``buf``, which must be at least the size | 
|  | of a :c:type:`gpio_v2_line_info_changed` event. | 
|  |  | 
|  | Description | 
|  | =========== | 
|  |  | 
|  | Read line info changed 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-v2-line-event-read.rst to receive events when a | 
|  | line changes value. | 
|  |  | 
|  | A line must be watched using gpio-v2-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. | 
|  |  | 
|  | Return Value | 
|  | ============ | 
|  |  | 
|  | On success the number of bytes read, which will be a multiple of the size | 
|  | of a :c:type:`gpio_v2_line_info_changed` event. | 
|  |  | 
|  | On error -1 and the ``errno`` variable is set appropriately. | 
|  | Common error codes are described in error-codes.rst. |