blob: f0084d892db67eeb3f5bbe2625063e97a3a4d134 [file] [log] [blame]
Markus Heisere2460b12016-07-08 20:55:42 +02001.. -*- coding: utf-8; mode: rst -*-
2
Markus Heiser21c62692016-07-08 20:55:43 +02003.. _CEC_MODE:
4.. _CEC_G_MODE:
5.. _CEC_S_MODE:
Markus Heisere2460b12016-07-08 20:55:42 +02006
Hans Verkuil1267c602016-07-13 08:48:54 -03007********************************
8ioctls CEC_G_MODE and CEC_S_MODE
9********************************
Markus Heisere2460b12016-07-08 20:55:42 +020010
Markus Heiser21c62692016-07-08 20:55:43 +020011CEC_G_MODE, CEC_S_MODE - Get or set exclusive use of the CEC adapter
Markus Heisere2460b12016-07-08 20:55:42 +020012
13Synopsis
14========
15
Markus Heiser21c62692016-07-08 20:55:43 +020016.. cpp:function:: int ioctl( int fd, int request, __u32 *argp )
Markus Heisere2460b12016-07-08 20:55:42 +020017
18Arguments
19=========
20
21``fd``
22 File descriptor returned by :ref:`open() <cec-func-open>`.
23
24``request``
25 CEC_G_MODE, CEC_S_MODE
26
27``argp``
28
29
30Description
31===========
32
Mauro Carvalho Chehab706f8a92016-07-10 11:57:43 -030033.. note:: This documents the proposed CEC API. This API is not yet finalized
34 and is currently only available as a staging kernel module.
Markus Heisere2460b12016-07-08 20:55:42 +020035
Hans Verkuil1267c602016-07-13 08:48:54 -030036By default any filehandle can use :ref:`CEC_TRANSMIT`, but in order to prevent
Markus Heisere2460b12016-07-08 20:55:42 +020037applications from stepping on each others toes it must be possible to
38obtain exclusive access to the CEC adapter. This ioctl sets the
39filehandle to initiator and/or follower mode which can be exclusive
40depending on the chosen mode. The initiator is the filehandle that is
41used to initiate messages, i.e. it commands other CEC devices. The
42follower is the filehandle that receives messages sent to the CEC
43adapter and processes them. The same filehandle can be both initiator
44and follower, or this role can be taken by two different filehandles.
45
46When a CEC message is received, then the CEC framework will decide how
47it will be processed. If the message is a reply to an earlier
48transmitted message, then the reply is sent back to the filehandle that
49is waiting for it. In addition the CEC framework will process it.
50
51If the message is not a reply, then the CEC framework will process it
52first. If there is no follower, then the message is just discarded and a
53feature abort is sent back to the initiator if the framework couldn't
54process it. If there is a follower, then the message is passed on to the
Hans Verkuil1267c602016-07-13 08:48:54 -030055follower who will use :ref:`ioctl CEC_RECEIVE <CEC_RECEIVE>` to dequeue
Markus Heisere2460b12016-07-08 20:55:42 +020056the new message. The framework expects the follower to make the right
57decisions.
58
59The CEC framework will process core messages unless requested otherwise
60by the follower. The follower can enable the passthrough mode. In that
61case, the CEC framework will pass on most core messages without
62processing them and the follower will have to implement those messages.
63There are some messages that the core will always process, regardless of
64the passthrough mode. See :ref:`cec-core-processing` for details.
65
66If there is no initiator, then any CEC filehandle can use
Hans Verkuil1267c602016-07-13 08:48:54 -030067:ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>`. If there is an exclusive
Markus Heisere2460b12016-07-08 20:55:42 +020068initiator then only that initiator can call
Markus Heiser21c62692016-07-08 20:55:43 +020069:ref:`CEC_TRANSMIT`. The follower can of course
Hans Verkuil1267c602016-07-13 08:48:54 -030070always call :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>`.
Markus Heisere2460b12016-07-08 20:55:42 +020071
72Available initiator modes are:
73
74
Mauro Carvalho Chehab96f69e02016-07-09 10:25:05 -030075.. _cec-mode-initiator_e:
Markus Heisere2460b12016-07-08 20:55:42 +020076
77.. flat-table:: Initiator Modes
78 :header-rows: 0
79 :stub-columns: 0
Mauro Carvalho Chehabb2a58432016-07-08 17:59:27 -030080 :widths: 3 1 16
Markus Heisere2460b12016-07-08 20:55:42 +020081
82
Mauro Carvalho Chehab96f69e02016-07-09 10:25:05 -030083 - .. _`CEC-MODE-NO-INITIATOR`:
Markus Heisere2460b12016-07-08 20:55:42 +020084
85 - ``CEC_MODE_NO_INITIATOR``
86
87 - 0x0
88
89 - This is not an initiator, i.e. it cannot transmit CEC messages or
Mauro Carvalho Chehab706f8a92016-07-10 11:57:43 -030090 make any other changes to the CEC adapter.
Markus Heisere2460b12016-07-08 20:55:42 +020091
Mauro Carvalho Chehab96f69e02016-07-09 10:25:05 -030092 - .. _`CEC-MODE-INITIATOR`:
Markus Heisere2460b12016-07-08 20:55:42 +020093
94 - ``CEC_MODE_INITIATOR``
95
96 - 0x1
97
98 - This is an initiator (the default when the device is opened) and
Mauro Carvalho Chehab706f8a92016-07-10 11:57:43 -030099 it can transmit CEC messages and make changes to the CEC adapter,
100 unless there is an exclusive initiator.
Markus Heisere2460b12016-07-08 20:55:42 +0200101
Mauro Carvalho Chehab96f69e02016-07-09 10:25:05 -0300102 - .. _`CEC-MODE-EXCL-INITIATOR`:
Markus Heisere2460b12016-07-08 20:55:42 +0200103
104 - ``CEC_MODE_EXCL_INITIATOR``
105
106 - 0x2
107
108 - This is an exclusive initiator and this file descriptor is the
Mauro Carvalho Chehab706f8a92016-07-10 11:57:43 -0300109 only one that can transmit CEC messages and make changes to the
110 CEC adapter. If someone else is already the exclusive initiator
Hans Verkuile5208ed2016-07-19 06:26:13 -0300111 then an attempt to become one will return the ``EBUSY`` error code
Mauro Carvalho Chehab706f8a92016-07-10 11:57:43 -0300112 error.
Markus Heisere2460b12016-07-08 20:55:42 +0200113
114
115Available follower modes are:
116
117
Mauro Carvalho Chehab96f69e02016-07-09 10:25:05 -0300118.. _cec-mode-follower_e:
Markus Heisere2460b12016-07-08 20:55:42 +0200119
120.. flat-table:: Follower Modes
121 :header-rows: 0
122 :stub-columns: 0
Mauro Carvalho Chehabb2a58432016-07-08 17:59:27 -0300123 :widths: 3 1 16
Markus Heisere2460b12016-07-08 20:55:42 +0200124
125
Mauro Carvalho Chehab96f69e02016-07-09 10:25:05 -0300126 - .. _`CEC-MODE-NO-FOLLOWER`:
Markus Heisere2460b12016-07-08 20:55:42 +0200127
128 - ``CEC_MODE_NO_FOLLOWER``
129
130 - 0x00
131
132 - This is not a follower (the default when the device is opened).
133
Mauro Carvalho Chehab96f69e02016-07-09 10:25:05 -0300134 - .. _`CEC-MODE-FOLLOWER`:
Markus Heisere2460b12016-07-08 20:55:42 +0200135
136 - ``CEC_MODE_FOLLOWER``
137
138 - 0x10
139
140 - This is a follower and it will receive CEC messages unless there
Mauro Carvalho Chehab706f8a92016-07-10 11:57:43 -0300141 is an exclusive follower. You cannot become a follower if
Hans Verkuil1267c602016-07-13 08:48:54 -0300142 :ref:`CEC_CAP_TRANSMIT <CEC-CAP-TRANSMIT>` is not set or if :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>`
Hans Verkuile5208ed2016-07-19 06:26:13 -0300143 was specified, the ``EINVAL`` error code is returned in that case.
Markus Heisere2460b12016-07-08 20:55:42 +0200144
Mauro Carvalho Chehab96f69e02016-07-09 10:25:05 -0300145 - .. _`CEC-MODE-EXCL-FOLLOWER`:
Markus Heisere2460b12016-07-08 20:55:42 +0200146
147 - ``CEC_MODE_EXCL_FOLLOWER``
148
149 - 0x20
150
151 - This is an exclusive follower and only this file descriptor will
Mauro Carvalho Chehab706f8a92016-07-10 11:57:43 -0300152 receive CEC messages for processing. If someone else is already
153 the exclusive follower then an attempt to become one will return
Hans Verkuile5208ed2016-07-19 06:26:13 -0300154 the ``EBUSY`` error code. You cannot become a follower if
Hans Verkuil1267c602016-07-13 08:48:54 -0300155 :ref:`CEC_CAP_TRANSMIT <CEC-CAP-TRANSMIT>` is not set or if :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>`
Hans Verkuile5208ed2016-07-19 06:26:13 -0300156 was specified, the ``EINVAL`` error code is returned in that case.
Markus Heisere2460b12016-07-08 20:55:42 +0200157
Mauro Carvalho Chehab96f69e02016-07-09 10:25:05 -0300158 - .. _`CEC-MODE-EXCL-FOLLOWER-PASSTHRU`:
Markus Heisere2460b12016-07-08 20:55:42 +0200159
160 - ``CEC_MODE_EXCL_FOLLOWER_PASSTHRU``
161
162 - 0x30
163
164 - This is an exclusive follower and only this file descriptor will
Mauro Carvalho Chehab706f8a92016-07-10 11:57:43 -0300165 receive CEC messages for processing. In addition it will put the
166 CEC device into passthrough mode, allowing the exclusive follower
167 to handle most core messages instead of relying on the CEC
168 framework for that. If someone else is already the exclusive
Hans Verkuile5208ed2016-07-19 06:26:13 -0300169 follower then an attempt to become one will return the ``EBUSY`` error
170 code. You cannot become a follower if :ref:`CEC_CAP_TRANSMIT <CEC-CAP-TRANSMIT>`
171 is not set or if :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>` was specified,
172 the ``EINVAL`` error code is returned in that case.
Markus Heisere2460b12016-07-08 20:55:42 +0200173
Mauro Carvalho Chehab96f69e02016-07-09 10:25:05 -0300174 - .. _`CEC-MODE-MONITOR`:
Markus Heisere2460b12016-07-08 20:55:42 +0200175
176 - ``CEC_MODE_MONITOR``
177
178 - 0xe0
179
180 - Put the file descriptor into monitor mode. Can only be used in
Mauro Carvalho Chehab706f8a92016-07-10 11:57:43 -0300181 combination with :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>`, otherwise EINVAL error
182 code will be returned. In monitor mode all messages this CEC
183 device transmits and all messages it receives (both broadcast
184 messages and directed messages for one its logical addresses) will
185 be reported. This is very useful for debugging. This is only
186 allowed if the process has the ``CAP_NET_ADMIN`` capability. If
Hans Verkuile5208ed2016-07-19 06:26:13 -0300187 that is not set, then the ``EPERM`` error code is returned.
Markus Heisere2460b12016-07-08 20:55:42 +0200188
Mauro Carvalho Chehab96f69e02016-07-09 10:25:05 -0300189 - .. _`CEC-MODE-MONITOR-ALL`:
Markus Heisere2460b12016-07-08 20:55:42 +0200190
191 - ``CEC_MODE_MONITOR_ALL``
192
193 - 0xf0
194
195 - Put the file descriptor into 'monitor all' mode. Can only be used
Hans Verkuile5208ed2016-07-19 06:26:13 -0300196 in combination with :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>`, otherwise
197 the ``EINVAL`` error code will be returned. In 'monitor all' mode all messages
Mauro Carvalho Chehab706f8a92016-07-10 11:57:43 -0300198 this CEC device transmits and all messages it receives, including
199 directed messages for other CEC devices will be reported. This is
200 very useful for debugging, but not all devices support this. This
201 mode requires that the :ref:`CEC_CAP_MONITOR_ALL <CEC-CAP-MONITOR-ALL>` capability is set,
Hans Verkuile5208ed2016-07-19 06:26:13 -0300202 otherwise the ``EINVAL`` error code is returned. This is only allowed if
Mauro Carvalho Chehab706f8a92016-07-10 11:57:43 -0300203 the process has the ``CAP_NET_ADMIN`` capability. If that is not
Hans Verkuile5208ed2016-07-19 06:26:13 -0300204 set, then the ``EPERM`` error code is returned.
Markus Heisere2460b12016-07-08 20:55:42 +0200205
206
207Core message processing details:
208
209
210.. _cec-core-processing:
211
212.. flat-table:: Core Message Processing
213 :header-rows: 0
214 :stub-columns: 0
Mauro Carvalho Chehabb2a58432016-07-08 17:59:27 -0300215 :widths: 1 8
Markus Heisere2460b12016-07-08 20:55:42 +0200216
217
Mauro Carvalho Chehab96f69e02016-07-09 10:25:05 -0300218 - .. _`CEC-MSG-GET-CEC-VERSION`:
Markus Heisere2460b12016-07-08 20:55:42 +0200219
220 - ``CEC_MSG_GET_CEC_VERSION``
221
222 - When in passthrough mode this message has to be handled by
Mauro Carvalho Chehab706f8a92016-07-10 11:57:43 -0300223 userspace, otherwise the core will return the CEC version that was
Hans Verkuil1267c602016-07-13 08:48:54 -0300224 set with :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`.
Markus Heisere2460b12016-07-08 20:55:42 +0200225
Mauro Carvalho Chehab96f69e02016-07-09 10:25:05 -0300226 - .. _`CEC-MSG-GIVE-DEVICE-VENDOR-ID`:
Markus Heisere2460b12016-07-08 20:55:42 +0200227
228 - ``CEC_MSG_GIVE_DEVICE_VENDOR_ID``
229
230 - When in passthrough mode this message has to be handled by
Mauro Carvalho Chehab706f8a92016-07-10 11:57:43 -0300231 userspace, otherwise the core will return the vendor ID that was
Hans Verkuil1267c602016-07-13 08:48:54 -0300232 set with :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`.
Markus Heisere2460b12016-07-08 20:55:42 +0200233
Mauro Carvalho Chehab96f69e02016-07-09 10:25:05 -0300234 - .. _`CEC-MSG-ABORT`:
Markus Heisere2460b12016-07-08 20:55:42 +0200235
236 - ``CEC_MSG_ABORT``
237
238 - When in passthrough mode this message has to be handled by
Mauro Carvalho Chehab706f8a92016-07-10 11:57:43 -0300239 userspace, otherwise the core will return a feature refused
240 message as per the specification.
Markus Heisere2460b12016-07-08 20:55:42 +0200241
Mauro Carvalho Chehab96f69e02016-07-09 10:25:05 -0300242 - .. _`CEC-MSG-GIVE-PHYSICAL-ADDR`:
Markus Heisere2460b12016-07-08 20:55:42 +0200243
244 - ``CEC_MSG_GIVE_PHYSICAL_ADDR``
245
246 - When in passthrough mode this message has to be handled by
Mauro Carvalho Chehab706f8a92016-07-10 11:57:43 -0300247 userspace, otherwise the core will report the current physical
248 address.
Markus Heisere2460b12016-07-08 20:55:42 +0200249
Mauro Carvalho Chehab96f69e02016-07-09 10:25:05 -0300250 - .. _`CEC-MSG-GIVE-OSD-NAME`:
Markus Heisere2460b12016-07-08 20:55:42 +0200251
252 - ``CEC_MSG_GIVE_OSD_NAME``
253
254 - When in passthrough mode this message has to be handled by
Mauro Carvalho Chehab706f8a92016-07-10 11:57:43 -0300255 userspace, otherwise the core will report the current OSD name as
Hans Verkuil1267c602016-07-13 08:48:54 -0300256 was set with :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`.
Markus Heisere2460b12016-07-08 20:55:42 +0200257
Mauro Carvalho Chehab96f69e02016-07-09 10:25:05 -0300258 - .. _`CEC-MSG-GIVE-FEATURES`:
Markus Heisere2460b12016-07-08 20:55:42 +0200259
260 - ``CEC_MSG_GIVE_FEATURES``
261
262 - When in passthrough mode this message has to be handled by
Mauro Carvalho Chehab706f8a92016-07-10 11:57:43 -0300263 userspace, otherwise the core will report the current features as
Hans Verkuil1267c602016-07-13 08:48:54 -0300264 was set with :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`
265 or the message is ignored if the CEC version was older than 2.0.
Markus Heisere2460b12016-07-08 20:55:42 +0200266
Mauro Carvalho Chehab96f69e02016-07-09 10:25:05 -0300267 - .. _`CEC-MSG-USER-CONTROL-PRESSED`:
Markus Heisere2460b12016-07-08 20:55:42 +0200268
269 - ``CEC_MSG_USER_CONTROL_PRESSED``
270
Mauro Carvalho Chehab96f69e02016-07-09 10:25:05 -0300271 - If :ref:`CEC_CAP_RC <CEC-CAP-RC>` is set, then generate a remote control key
Mauro Carvalho Chehab706f8a92016-07-10 11:57:43 -0300272 press. This message is always passed on to userspace.
Markus Heisere2460b12016-07-08 20:55:42 +0200273
Mauro Carvalho Chehab96f69e02016-07-09 10:25:05 -0300274 - .. _`CEC-MSG-USER-CONTROL-RELEASED`:
Markus Heisere2460b12016-07-08 20:55:42 +0200275
276 - ``CEC_MSG_USER_CONTROL_RELEASED``
277
Mauro Carvalho Chehab96f69e02016-07-09 10:25:05 -0300278 - If :ref:`CEC_CAP_RC <CEC-CAP-RC>` is set, then generate a remote control key
Mauro Carvalho Chehab706f8a92016-07-10 11:57:43 -0300279 release. This message is always passed on to userspace.
Markus Heisere2460b12016-07-08 20:55:42 +0200280
Mauro Carvalho Chehab96f69e02016-07-09 10:25:05 -0300281 - .. _`CEC-MSG-REPORT-PHYSICAL-ADDR`:
Markus Heisere2460b12016-07-08 20:55:42 +0200282
283 - ``CEC_MSG_REPORT_PHYSICAL_ADDR``
284
285 - The CEC framework will make note of the reported physical address
Mauro Carvalho Chehab706f8a92016-07-10 11:57:43 -0300286 and then just pass the message on to userspace.
Markus Heisere2460b12016-07-08 20:55:42 +0200287
288
289
290Return Value
291============
292
293On success 0 is returned, on error -1 and the ``errno`` variable is set
294appropriately. The generic error codes are described at the
295:ref:`Generic Error Codes <gen-errors>` chapter.