blob: 721d17fc829e70d0c5e22b69882f94371b5740d7 [file] [log] [blame]
Markus Heiser5377d912016-06-30 15:18:56 +02001.. -*- coding: utf-8; mode: rst -*-
2
Mauro Carvalho Chehabaf4a4d02016-07-01 13:42:29 -03003.. _VIDIOC_G_EDID:
Markus Heiser5377d912016-06-30 15:18:56 +02004
5******************************************************************************
6ioctl VIDIOC_G_EDID, VIDIOC_S_EDID, VIDIOC_SUBDEV_G_EDID, VIDIOC_SUBDEV_S_EDID
7******************************************************************************
8
Mauro Carvalho Chehab15e7d612016-07-05 15:14:35 -03009Name
Mauro Carvalho Chehab586027c2016-07-05 07:58:48 -030010====
Markus Heiser5377d912016-06-30 15:18:56 +020011
Mauro Carvalho Chehab586027c2016-07-05 07:58:48 -030012VIDIOC_G_EDID - VIDIOC_S_EDID - VIDIOC_SUBDEV_G_EDID - VIDIOC_SUBDEV_S_EDID - Get or set the EDID of a video receiver/transmitter
Markus Heiser5377d912016-06-30 15:18:56 +020013
Mauro Carvalho Chehab15e7d612016-07-05 15:14:35 -030014
15Synopsis
Markus Heiser5377d912016-06-30 15:18:56 +020016========
17
Mauro Carvalho Chehabb7e67f62016-07-02 09:49:16 -030018.. cpp:function:: int ioctl( int fd, int request, struct v4l2_edid *argp )
Markus Heiser5377d912016-06-30 15:18:56 +020019
Mauro Carvalho Chehab586027c2016-07-05 07:58:48 -030020
Mauro Carvalho Chehab15e7d612016-07-05 15:14:35 -030021Arguments
Markus Heiser5377d912016-06-30 15:18:56 +020022=========
23
24``fd``
25 File descriptor returned by :ref:`open() <func-open>`.
26
27``request``
28 VIDIOC_G_EDID, VIDIOC_S_EDID, VIDIOC_SUBDEV_G_EDID,
29 VIDIOC_SUBDEV_S_EDID
30
31``argp``
32
33
Mauro Carvalho Chehab15e7d612016-07-05 15:14:35 -030034Description
Markus Heiser5377d912016-06-30 15:18:56 +020035===========
36
37These ioctls can be used to get or set an EDID associated with an input
38from a receiver or an output of a transmitter device. They can be used
39with subdevice nodes (/dev/v4l-subdevX) or with video nodes
40(/dev/videoX).
41
42When used with video nodes the ``pad`` field represents the input (for
43video capture devices) or output (for video output devices) index as is
Mauro Carvalho Chehab73470812016-07-01 13:58:44 -030044returned by :ref:`VIDIOC_ENUMINPUT` and
45:ref:`VIDIOC_ENUMOUTPUT` respectively. When used
Markus Heiser5377d912016-06-30 15:18:56 +020046with subdevice nodes the ``pad`` field represents the input or output
47pad of the subdevice. If there is no EDID support for the given ``pad``
Mauro Carvalho Chehabcdb4af02016-07-03 11:53:09 -030048value, then the ``EINVAL`` error code will be returned.
Markus Heiser5377d912016-06-30 15:18:56 +020049
50To get the EDID data the application has to fill in the ``pad``,
51``start_block``, ``blocks`` and ``edid`` fields, zero the ``reserved``
Mauro Carvalho Chehab4e03cb72016-07-03 10:02:29 -030052array and call :ref:`VIDIOC_G_EDID <VIDIOC_G_EDID>`. The current EDID from block
Markus Heiser5377d912016-06-30 15:18:56 +020053``start_block`` and of size ``blocks`` will be placed in the memory
54``edid`` points to. The ``edid`` pointer must point to memory at least
55``blocks`` * 128 bytes large (the size of one block is 128 bytes).
56
57If there are fewer blocks than specified, then the driver will set
58``blocks`` to the actual number of blocks. If there are no EDID blocks
Mauro Carvalho Chehabcdb4af02016-07-03 11:53:09 -030059available at all, then the error code ``ENODATA`` is set.
Markus Heiser5377d912016-06-30 15:18:56 +020060
61If blocks have to be retrieved from the sink, then this call will block
62until they have been read.
63
64If ``start_block`` and ``blocks`` are both set to 0 when
Mauro Carvalho Chehab4e03cb72016-07-03 10:02:29 -030065:ref:`VIDIOC_G_EDID <VIDIOC_G_EDID>` is called, then the driver will set ``blocks`` to the
Markus Heiser5377d912016-06-30 15:18:56 +020066total number of available EDID blocks and it will return 0 without
67copying any data. This is an easy way to discover how many EDID blocks
Mauro Carvalho Chehab706f8a92016-07-10 11:57:43 -030068there are.
69
Mauro Carvalho Chehabb6b6e672016-08-15 17:49:50 -030070.. note::
71
72 If there are no EDID blocks available at all, then
Mauro Carvalho Chehab706f8a92016-07-10 11:57:43 -030073 the driver will set ``blocks`` to 0 and it returns 0.
Markus Heiser5377d912016-06-30 15:18:56 +020074
75To set the EDID blocks of a receiver the application has to fill in the
76``pad``, ``blocks`` and ``edid`` fields, set ``start_block`` to 0 and
77zero the ``reserved`` array. It is not possible to set part of an EDID,
78it is always all or nothing. Setting the EDID data is only valid for
79receivers as it makes no sense for a transmitter.
80
81The driver assumes that the full EDID is passed in. If there are more
82EDID blocks than the hardware can handle then the EDID is not written,
Mauro Carvalho Chehabcdb4af02016-07-03 11:53:09 -030083but instead the error code ``E2BIG`` is set and ``blocks`` is set to the
Markus Heiser5377d912016-06-30 15:18:56 +020084maximum that the hardware supports. If ``start_block`` is any value
Mauro Carvalho Chehabcdb4af02016-07-03 11:53:09 -030085other than 0 then the error code ``EINVAL`` is set.
Markus Heiser5377d912016-06-30 15:18:56 +020086
87To disable an EDID you set ``blocks`` to 0. Depending on the hardware
88this will drive the hotplug pin low and/or block the source from reading
89the EDID data in some way. In any case, the end result is the same: the
90EDID is no longer available.
91
92
93.. _v4l2-edid:
94
Mauro Carvalho Chehab5bd4bb72016-08-17 08:14:19 -030095.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}|
96
Markus Heiser5377d912016-06-30 15:18:56 +020097.. flat-table:: struct v4l2_edid
98 :header-rows: 0
99 :stub-columns: 0
100 :widths: 1 1 2
101
102
103 - .. row 1
104
105 - __u32
106
107 - ``pad``
108
109 - Pad for which to get/set the EDID blocks. When used with a video
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300110 device node the pad represents the input or output index as
111 returned by :ref:`VIDIOC_ENUMINPUT` and
112 :ref:`VIDIOC_ENUMOUTPUT` respectively.
Markus Heiser5377d912016-06-30 15:18:56 +0200113
114 - .. row 2
115
116 - __u32
117
118 - ``start_block``
119
120 - Read the EDID from starting with this block. Must be 0 when
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300121 setting the EDID.
Markus Heiser5377d912016-06-30 15:18:56 +0200122
123 - .. row 3
124
125 - __u32
126
127 - ``blocks``
128
129 - The number of blocks to get or set. Must be less or equal to 256
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300130 (the maximum number of blocks as defined by the standard). When
131 you set the EDID and ``blocks`` is 0, then the EDID is disabled or
132 erased.
Markus Heiser5377d912016-06-30 15:18:56 +0200133
134 - .. row 4
135
136 - __u32
137
Mauro Carvalho Chehab8968da92016-07-13 08:43:30 -0300138 - ``reserved``\ [5]
Markus Heiser5377d912016-06-30 15:18:56 +0200139
140 - Reserved for future extensions. Applications and drivers must set
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300141 the array to zero.
Markus Heiser5377d912016-06-30 15:18:56 +0200142
143 - .. row 5
144
145 - __u8 *
146
147 - ``edid``
148
149 - Pointer to memory that contains the EDID. The minimum size is
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300150 ``blocks`` * 128.
Markus Heiser5377d912016-06-30 15:18:56 +0200151
152
Mauro Carvalho Chehab15e7d612016-07-05 15:14:35 -0300153Return Value
Markus Heiser5377d912016-06-30 15:18:56 +0200154============
155
156On success 0 is returned, on error -1 and the ``errno`` variable is set
157appropriately. The generic error codes are described at the
158:ref:`Generic Error Codes <gen-errors>` chapter.
159
Mauro Carvalho Chehabcdb4af02016-07-03 11:53:09 -0300160``ENODATA``
Markus Heiser5377d912016-06-30 15:18:56 +0200161 The EDID data is not available.
162
Mauro Carvalho Chehabcdb4af02016-07-03 11:53:09 -0300163``E2BIG``
Markus Heiser5377d912016-06-30 15:18:56 +0200164 The EDID data you provided is more than the hardware can handle.