Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 1 | .. -*- coding: utf-8; mode: rst -*- |
| 2 | |
Mauro Carvalho Chehab | af4a4d0 | 2016-07-01 13:42:29 -0300 | [diff] [blame] | 3 | .. _VIDIOC_G_EDID: |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 4 | |
| 5 | ****************************************************************************** |
| 6 | ioctl VIDIOC_G_EDID, VIDIOC_S_EDID, VIDIOC_SUBDEV_G_EDID, VIDIOC_SUBDEV_S_EDID |
| 7 | ****************************************************************************** |
| 8 | |
| 9 | *man VIDIOC_G_EDID(2)* |
| 10 | |
| 11 | VIDIOC_S_EDID |
| 12 | VIDIOC_SUBDEV_G_EDID |
| 13 | VIDIOC_SUBDEV_S_EDID |
| 14 | Get or set the EDID of a video receiver/transmitter |
| 15 | |
| 16 | |
| 17 | Synopsis |
| 18 | ======== |
| 19 | |
| 20 | .. c:function:: int ioctl( int fd, int request, struct v4l2_edid *argp ) |
| 21 | |
| 22 | .. c:function:: int ioctl( int fd, int request, struct v4l2_edid *argp ) |
| 23 | |
| 24 | Arguments |
| 25 | ========= |
| 26 | |
| 27 | ``fd`` |
| 28 | File descriptor returned by :ref:`open() <func-open>`. |
| 29 | |
| 30 | ``request`` |
| 31 | VIDIOC_G_EDID, VIDIOC_S_EDID, VIDIOC_SUBDEV_G_EDID, |
| 32 | VIDIOC_SUBDEV_S_EDID |
| 33 | |
| 34 | ``argp`` |
| 35 | |
| 36 | |
| 37 | Description |
| 38 | =========== |
| 39 | |
| 40 | These ioctls can be used to get or set an EDID associated with an input |
| 41 | from a receiver or an output of a transmitter device. They can be used |
| 42 | with subdevice nodes (/dev/v4l-subdevX) or with video nodes |
| 43 | (/dev/videoX). |
| 44 | |
| 45 | When used with video nodes the ``pad`` field represents the input (for |
| 46 | video capture devices) or output (for video output devices) index as is |
Mauro Carvalho Chehab | 7347081 | 2016-07-01 13:58:44 -0300 | [diff] [blame^] | 47 | returned by :ref:`VIDIOC_ENUMINPUT` and |
| 48 | :ref:`VIDIOC_ENUMOUTPUT` respectively. When used |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 49 | with subdevice nodes the ``pad`` field represents the input or output |
| 50 | pad of the subdevice. If there is no EDID support for the given ``pad`` |
| 51 | value, then the EINVAL error code will be returned. |
| 52 | |
| 53 | To get the EDID data the application has to fill in the ``pad``, |
| 54 | ``start_block``, ``blocks`` and ``edid`` fields, zero the ``reserved`` |
| 55 | array and call ``VIDIOC_G_EDID``. The current EDID from block |
| 56 | ``start_block`` and of size ``blocks`` will be placed in the memory |
| 57 | ``edid`` points to. The ``edid`` pointer must point to memory at least |
| 58 | ``blocks`` * 128 bytes large (the size of one block is 128 bytes). |
| 59 | |
| 60 | If there are fewer blocks than specified, then the driver will set |
| 61 | ``blocks`` to the actual number of blocks. If there are no EDID blocks |
| 62 | available at all, then the error code ENODATA is set. |
| 63 | |
| 64 | If blocks have to be retrieved from the sink, then this call will block |
| 65 | until they have been read. |
| 66 | |
| 67 | If ``start_block`` and ``blocks`` are both set to 0 when |
| 68 | ``VIDIOC_G_EDID`` is called, then the driver will set ``blocks`` to the |
| 69 | total number of available EDID blocks and it will return 0 without |
| 70 | copying any data. This is an easy way to discover how many EDID blocks |
| 71 | there are. Note that if there are no EDID blocks available at all, then |
| 72 | the driver will set ``blocks`` to 0 and it returns 0. |
| 73 | |
| 74 | To set the EDID blocks of a receiver the application has to fill in the |
| 75 | ``pad``, ``blocks`` and ``edid`` fields, set ``start_block`` to 0 and |
| 76 | zero the ``reserved`` array. It is not possible to set part of an EDID, |
| 77 | it is always all or nothing. Setting the EDID data is only valid for |
| 78 | receivers as it makes no sense for a transmitter. |
| 79 | |
| 80 | The driver assumes that the full EDID is passed in. If there are more |
| 81 | EDID blocks than the hardware can handle then the EDID is not written, |
| 82 | but instead the error code E2BIG is set and ``blocks`` is set to the |
| 83 | maximum that the hardware supports. If ``start_block`` is any value |
| 84 | other than 0 then the error code EINVAL is set. |
| 85 | |
| 86 | To disable an EDID you set ``blocks`` to 0. Depending on the hardware |
| 87 | this will drive the hotplug pin low and/or block the source from reading |
| 88 | the EDID data in some way. In any case, the end result is the same: the |
| 89 | EDID is no longer available. |
| 90 | |
| 91 | |
| 92 | .. _v4l2-edid: |
| 93 | |
| 94 | .. flat-table:: struct v4l2_edid |
| 95 | :header-rows: 0 |
| 96 | :stub-columns: 0 |
| 97 | :widths: 1 1 2 |
| 98 | |
| 99 | |
| 100 | - .. row 1 |
| 101 | |
| 102 | - __u32 |
| 103 | |
| 104 | - ``pad`` |
| 105 | |
| 106 | - Pad for which to get/set the EDID blocks. When used with a video |
| 107 | device node the pad represents the input or output index as |
Mauro Carvalho Chehab | 7347081 | 2016-07-01 13:58:44 -0300 | [diff] [blame^] | 108 | returned by :ref:`VIDIOC_ENUMINPUT` and |
| 109 | :ref:`VIDIOC_ENUMOUTPUT` respectively. |
Markus Heiser | 5377d91 | 2016-06-30 15:18:56 +0200 | [diff] [blame] | 110 | |
| 111 | - .. row 2 |
| 112 | |
| 113 | - __u32 |
| 114 | |
| 115 | - ``start_block`` |
| 116 | |
| 117 | - Read the EDID from starting with this block. Must be 0 when |
| 118 | setting the EDID. |
| 119 | |
| 120 | - .. row 3 |
| 121 | |
| 122 | - __u32 |
| 123 | |
| 124 | - ``blocks`` |
| 125 | |
| 126 | - The number of blocks to get or set. Must be less or equal to 256 |
| 127 | (the maximum number of blocks as defined by the standard). When |
| 128 | you set the EDID and ``blocks`` is 0, then the EDID is disabled or |
| 129 | erased. |
| 130 | |
| 131 | - .. row 4 |
| 132 | |
| 133 | - __u32 |
| 134 | |
| 135 | - ``reserved``\ [5] |
| 136 | |
| 137 | - Reserved for future extensions. Applications and drivers must set |
| 138 | the array to zero. |
| 139 | |
| 140 | - .. row 5 |
| 141 | |
| 142 | - __u8 * |
| 143 | |
| 144 | - ``edid`` |
| 145 | |
| 146 | - Pointer to memory that contains the EDID. The minimum size is |
| 147 | ``blocks`` * 128. |
| 148 | |
| 149 | |
| 150 | |
| 151 | Return Value |
| 152 | ============ |
| 153 | |
| 154 | On success 0 is returned, on error -1 and the ``errno`` variable is set |
| 155 | appropriately. The generic error codes are described at the |
| 156 | :ref:`Generic Error Codes <gen-errors>` chapter. |
| 157 | |
| 158 | ENODATA |
| 159 | The EDID data is not available. |
| 160 | |
| 161 | E2BIG |
| 162 | The EDID data you provided is more than the hardware can handle. |
| 163 | |
| 164 | |
| 165 | .. ------------------------------------------------------------------------------ |
| 166 | .. This file was automatically converted from DocBook-XML with the dbxml |
| 167 | .. library (https://github.com/return42/sphkerneldoc). The origin XML comes |
| 168 | .. from the linux kernel, refer to: |
| 169 | .. |
| 170 | .. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook |
| 171 | .. ------------------------------------------------------------------------------ |