|  | .. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later | 
|  | .. c:namespace:: CEC | 
|  |  | 
|  | .. _CEC_ADAP_G_CAPS: | 
|  |  | 
|  | ********************* | 
|  | ioctl CEC_ADAP_G_CAPS | 
|  | ********************* | 
|  |  | 
|  | Name | 
|  | ==== | 
|  |  | 
|  | CEC_ADAP_G_CAPS - Query device capabilities | 
|  |  | 
|  | Synopsis | 
|  | ======== | 
|  |  | 
|  | .. c:macro:: CEC_ADAP_G_CAPS | 
|  |  | 
|  | ``int ioctl(int fd, CEC_ADAP_G_CAPS, struct cec_caps *argp)`` | 
|  |  | 
|  | Arguments | 
|  | ========= | 
|  |  | 
|  | ``fd`` | 
|  | File descriptor returned by :c:func:`open()`. | 
|  |  | 
|  | ``argp`` | 
|  |  | 
|  | Description | 
|  | =========== | 
|  |  | 
|  | All cec devices must support :ref:`ioctl CEC_ADAP_G_CAPS <CEC_ADAP_G_CAPS>`. To query | 
|  | device information, applications call the ioctl with a pointer to a | 
|  | struct :c:type:`cec_caps`. The driver fills the structure and | 
|  | returns the information to the application. The ioctl never fails. | 
|  |  | 
|  | .. tabularcolumns:: |p{1.2cm}|p{2.5cm}|p{13.8cm}| | 
|  |  | 
|  | .. c:type:: cec_caps | 
|  |  | 
|  | .. flat-table:: struct cec_caps | 
|  | :header-rows:  0 | 
|  | :stub-columns: 0 | 
|  | :widths:       1 1 16 | 
|  |  | 
|  | * - char | 
|  | - ``driver[32]`` | 
|  | - The name of the cec adapter driver. | 
|  | * - char | 
|  | - ``name[32]`` | 
|  | - The name of this CEC adapter. The combination ``driver`` and | 
|  | ``name`` must be unique. | 
|  | * - __u32 | 
|  | - ``available_log_addrs`` | 
|  | - The maximum number of logical addresses that can be configured. | 
|  | * - __u32 | 
|  | - ``capabilities`` | 
|  | - The capabilities of the CEC adapter, see | 
|  | :ref:`cec-capabilities`. | 
|  | * - __u32 | 
|  | - ``version`` | 
|  | - CEC Framework API version, formatted with the ``KERNEL_VERSION()`` | 
|  | macro. | 
|  |  | 
|  | .. tabularcolumns:: |p{4.4cm}|p{2.5cm}|p{10.6cm}| | 
|  |  | 
|  | .. _cec-capabilities: | 
|  |  | 
|  | .. flat-table:: CEC Capabilities Flags | 
|  | :header-rows:  0 | 
|  | :stub-columns: 0 | 
|  | :widths:       3 1 8 | 
|  |  | 
|  | * .. _`CEC-CAP-PHYS-ADDR`: | 
|  |  | 
|  | - ``CEC_CAP_PHYS_ADDR`` | 
|  | - 0x00000001 | 
|  | - Userspace has to configure the physical address by calling | 
|  | :ref:`ioctl CEC_ADAP_S_PHYS_ADDR <CEC_ADAP_S_PHYS_ADDR>`. If | 
|  | this capability isn't set, then setting the physical address is | 
|  | handled by the kernel whenever the EDID is set (for an HDMI | 
|  | receiver) or read (for an HDMI transmitter). | 
|  | * .. _`CEC-CAP-LOG-ADDRS`: | 
|  |  | 
|  | - ``CEC_CAP_LOG_ADDRS`` | 
|  | - 0x00000002 | 
|  | - Userspace has to configure the logical addresses by calling | 
|  | :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`. If | 
|  | this capability isn't set, then the kernel will have configured | 
|  | this. | 
|  | * .. _`CEC-CAP-TRANSMIT`: | 
|  |  | 
|  | - ``CEC_CAP_TRANSMIT`` | 
|  | - 0x00000004 | 
|  | - Userspace can transmit CEC messages by calling | 
|  | :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>`. This implies that | 
|  | userspace can be a follower as well, since being able to transmit | 
|  | messages is a prerequisite of becoming a follower. If this | 
|  | capability isn't set, then the kernel will handle all CEC | 
|  | transmits and process all CEC messages it receives. | 
|  | * .. _`CEC-CAP-PASSTHROUGH`: | 
|  |  | 
|  | - ``CEC_CAP_PASSTHROUGH`` | 
|  | - 0x00000008 | 
|  | - Userspace can use the passthrough mode by calling | 
|  | :ref:`ioctl CEC_S_MODE <CEC_S_MODE>`. | 
|  | * .. _`CEC-CAP-RC`: | 
|  |  | 
|  | - ``CEC_CAP_RC`` | 
|  | - 0x00000010 | 
|  | - This adapter supports the remote control protocol. | 
|  | * .. _`CEC-CAP-MONITOR-ALL`: | 
|  |  | 
|  | - ``CEC_CAP_MONITOR_ALL`` | 
|  | - 0x00000020 | 
|  | - The CEC hardware can monitor all messages, not just directed and | 
|  | broadcast messages. | 
|  | * .. _`CEC-CAP-NEEDS-HPD`: | 
|  |  | 
|  | - ``CEC_CAP_NEEDS_HPD`` | 
|  | - 0x00000040 | 
|  | - The CEC hardware is only active if the HDMI Hotplug Detect pin is | 
|  | high. This makes it impossible to use CEC to wake up displays that | 
|  | set the HPD pin low when in standby mode, but keep the CEC bus | 
|  | alive. | 
|  | * .. _`CEC-CAP-MONITOR-PIN`: | 
|  |  | 
|  | - ``CEC_CAP_MONITOR_PIN`` | 
|  | - 0x00000080 | 
|  | - The CEC hardware can monitor CEC pin changes from low to high voltage | 
|  | and vice versa. When in pin monitoring mode the application will | 
|  | receive ``CEC_EVENT_PIN_CEC_LOW`` and ``CEC_EVENT_PIN_CEC_HIGH`` events. | 
|  | * .. _`CEC-CAP-CONNECTOR-INFO`: | 
|  |  | 
|  | - ``CEC_CAP_CONNECTOR_INFO`` | 
|  | - 0x00000100 | 
|  | - If this capability is set, then :ref:`CEC_ADAP_G_CONNECTOR_INFO` can | 
|  | be used. | 
|  |  | 
|  | Return Value | 
|  | ============ | 
|  |  | 
|  | On success 0 is returned, on error -1 and the ``errno`` variable is set | 
|  | appropriately. The generic error codes are described at the | 
|  | :ref:`Generic Error Codes <gen-errors>` chapter. |