Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) .. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) .. c:namespace:: V4L
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) .. _VIDIOC_G_EDID:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) ******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) ioctl VIDIOC_G_EDID, VIDIOC_S_EDID, VIDIOC_SUBDEV_G_EDID, VIDIOC_SUBDEV_S_EDID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) ******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) Name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) ====
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) VIDIOC_G_EDID - VIDIOC_S_EDID - VIDIOC_SUBDEV_G_EDID - VIDIOC_SUBDEV_S_EDID - Get or set the EDID of a video receiver/transmitter
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) Synopsis
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) ========
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) .. c:macro:: VIDIOC_G_EDID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) ``int ioctl(int fd, VIDIOC_G_EDID, struct v4l2_edid *argp)``
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) .. c:macro:: VIDIOC_S_EDID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) ``int ioctl(int fd, VIDIOC_S_EDID, struct v4l2_edid *argp)``
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) .. c:macro:: VIDIOC_SUBDEV_G_EDID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) ``int ioctl(int fd, VIDIOC_SUBDEV_G_EDID, struct v4l2_edid *argp)``
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) .. c:macro:: VIDIOC_SUBDEV_S_EDID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) ``int ioctl(int fd, VIDIOC_SUBDEV_S_EDID, struct v4l2_edid *argp)``
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) Arguments
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) =========
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) ``fd``
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38)     File descriptor returned by :c:func:`open()`.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) ``argp``
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41)    Pointer to struct :c:type:`v4l2_edid`.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) Description
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) ===========
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) These ioctls can be used to get or set an EDID associated with an input
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) from a receiver or an output of a transmitter device. They can be used
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) with subdevice nodes (/dev/v4l-subdevX) or with video nodes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) (/dev/videoX).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) When used with video nodes the ``pad`` field represents the input (for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) video capture devices) or output (for video output devices) index as is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) returned by :ref:`VIDIOC_ENUMINPUT` and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) :ref:`VIDIOC_ENUMOUTPUT` respectively. When used
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) with subdevice nodes the ``pad`` field represents the input or output
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) pad of the subdevice. If there is no EDID support for the given ``pad``
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) value, then the ``EINVAL`` error code will be returned.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) To get the EDID data the application has to fill in the ``pad``,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) ``start_block``, ``blocks`` and ``edid`` fields, zero the ``reserved``
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) array and call :ref:`VIDIOC_G_EDID <VIDIOC_G_EDID>`. The current EDID from block
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) ``start_block`` and of size ``blocks`` will be placed in the memory
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) ``edid`` points to. The ``edid`` pointer must point to memory at least
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) ``blocks`` * 128 bytes large (the size of one block is 128 bytes).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) If there are fewer blocks than specified, then the driver will set
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) ``blocks`` to the actual number of blocks. If there are no EDID blocks
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) available at all, then the error code ``ENODATA`` is set.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) If blocks have to be retrieved from the sink, then this call will block
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) until they have been read.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) If ``start_block`` and ``blocks`` are both set to 0 when
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) :ref:`VIDIOC_G_EDID <VIDIOC_G_EDID>` is called, then the driver will set ``blocks`` to the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) total number of available EDID blocks and it will return 0 without
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) copying any data. This is an easy way to discover how many EDID blocks
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) there are.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) .. note::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81)    If there are no EDID blocks available at all, then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82)    the driver will set ``blocks`` to 0 and it returns 0.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) To set the EDID blocks of a receiver the application has to fill in the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) ``pad``, ``blocks`` and ``edid`` fields, set ``start_block`` to 0 and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) zero the ``reserved`` array. It is not possible to set part of an EDID,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) it is always all or nothing. Setting the EDID data is only valid for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) receivers as it makes no sense for a transmitter.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) The driver assumes that the full EDID is passed in. If there are more
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) EDID blocks than the hardware can handle then the EDID is not written,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) but instead the error code ``E2BIG`` is set and ``blocks`` is set to the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) maximum that the hardware supports. If ``start_block`` is any value
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) other than 0 then the error code ``EINVAL`` is set.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) To disable an EDID you set ``blocks`` to 0. Depending on the hardware
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) this will drive the hotplug pin low and/or block the source from reading
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) the EDID data in some way. In any case, the end result is the same: the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) EDID is no longer available.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) .. c:type:: v4l2_edid
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) .. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) .. flat-table:: struct v4l2_edid
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106)     :header-rows:  0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107)     :stub-columns: 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108)     :widths:       1 1 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110)     * - __u32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111)       - ``pad``
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112)       - Pad for which to get/set the EDID blocks. When used with a video
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	device node the pad represents the input or output index as
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 	returned by :ref:`VIDIOC_ENUMINPUT` and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 	:ref:`VIDIOC_ENUMOUTPUT` respectively.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116)     * - __u32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117)       - ``start_block``
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118)       - Read the EDID from starting with this block. Must be 0 when
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 	setting the EDID.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120)     * - __u32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121)       - ``blocks``
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122)       - The number of blocks to get or set. Must be less or equal to 256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 	(the maximum number of blocks as defined by the standard). When
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 	you set the EDID and ``blocks`` is 0, then the EDID is disabled or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	erased.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126)     * - __u32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127)       - ``reserved``\ [5]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128)       - Reserved for future extensions. Applications and drivers must set
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 	the array to zero.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130)     * - __u8 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131)       - ``edid``
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132)       - Pointer to memory that contains the EDID. The minimum size is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 	``blocks`` * 128.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) Return Value
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) ============
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) On success 0 is returned, on error -1 and the ``errno`` variable is set
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) appropriately. The generic error codes are described at the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) :ref:`Generic Error Codes <gen-errors>` chapter.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) ``ENODATA``
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143)     The EDID data is not available.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) ``E2BIG``
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146)     The EDID data you provided is more than the hardware can handle.