Lines Matching +full:hdmi +full:- +full:cec
1 .. SPDX-License-Identifier: GPL-2.0
3 CEC Kernel Support
6 The CEC framework provides a unified kernel interface for use with HDMI CEC
14 The CEC Protocol
15 ----------------
17 The CEC protocol enables consumer electronic devices to communicate with each
18 other through the HDMI connection. The protocol uses logical addresses in the
24 The CEC framework described here is up to date with the CEC 2.0 specification.
25 It is documented in the HDMI 1.4 specification with the new 2.0 bits documented
26 in the HDMI 2.0 specification. But for most of the features the freely available
27 HDMI 1.3a specification is sufficient:
32 CEC Adapter Interface
33 ---------------------
35 The struct cec_adapter represents the CEC adapter hardware. It is created by
49 adapter operations which are called by the CEC framework and that you
53 will be stored in adap->priv and can be used by the adapter ops.
57 the name of the CEC adapter. Note: this name will be copied.
60 capabilities of the CEC adapter. These capabilities determine the
95 Implementing the Low-Level CEC Adapter
96 --------------------------------------
98 The following low-level adapter operations have to be implemented in
103 .. code-block:: none
107 /* Low-level callbacks */
120 /* High-level callbacks */
124 The seven low-level ops deal with various aspects of controlling the CEC adapter
132 This callback enables or disables the CEC hardware. Enabling the CEC hardware
134 op assumes that the physical address (adap->phys_addr) is valid when enable is
135 true and will not change while the CEC adapter remains enabled. The initial
136 state of the CEC adapter after calling cec_allocate_adapter() is disabled.
157 If enabled, then the adapter should be put in a mode to also monitor CEC pin
172 should return -ENXIO. Once a logical address is programmed the CEC hardware
196 To log the current CEC hardware status::
200 This optional callback can be used to show the status of the CEC hardware.
201 The status is available through debugfs: cat /sys/kernel/debug/cec/cecX/status
230 arbitration was lost: another CEC initiator
231 took control of the CEC line and you lost the arbitration.
238 low drive was detected on the CEC bus. This indicates that
276 When a CEC message was received:
284 ----------------------------------
286 Typically the CEC hardware provides interrupts that signal when a transmit
288 when a CEC message was received.
290 The CEC driver should always process the transmit interrupts first before
296 ----------------------------------------------
298 If the CEC adapter supports Error Injection functionality, then that can
301 .. code-block:: none
304 /* Low-level callbacks */
311 /* High-level CEC message callback */
315 If both callbacks are set, then an ``error-inj`` file will appear in debugfs.
321 This basic parsing is done in the CEC Framework. It is up to the driver to decide
326 This ensures that you can always do ``echo clear >error-inj`` to clear any error
327 injections without having to know the details of the driver-specific commands.
329 Note that the output of ``error-inj`` shall be valid as input to ``error-inj``.
332 .. code-block:: none
334 $ cat error-inj >einj.txt
335 $ cat einj.txt >error-inj
345 The second callback will parse commands written to the ``error-inj`` file::
351 are no embedded newlines) and it is 0-terminated. The callback is free to
357 Implementing the High-Level CEC Adapter
358 ---------------------------------------
360 The low-level operations drive the hardware, the high-level operations are
361 CEC protocol driven. The following high-level callbacks are available:
363 .. code-block:: none
366 /* Low-level callbacks */
372 /* High-level CEC message callback */
377 received CEC message::
381 If the driver wants to process a CEC message, then it can implement this
383 -ENOMSG, otherwise the CEC framework assumes it processed this message and
387 CEC framework functions
388 -----------------------
390 CEC Adapter drivers can call the following CEC framework functions:
396 Transmit a CEC message. If block is true, then wait until the message has been
402 Change the physical address. This function will set adap->phys_addr and
404 the physical address has become valid, then the CEC framework will start
408 When the physical address is set to a valid value the CEC adapter will
410 then the CEC adapter will be disabled. If you change a valid physical address
426 Claim the CEC logical addresses. Should never be called if CEC_CAP_LOG_ADDRS
430 log_addrs->num_log_addrs set to 0. The block argument is ignored when
435 CEC Pin framework
436 -----------------
438 Most CEC hardware operates on full CEC messages where the software provides
439 the message and the hardware handles the low-level CEC protocol. But some
440 hardware only drives the CEC pin and software has to handle the low-level
441 CEC protocol. The CEC pin framework was created to handle such devices.
443 Note that due to the close-to-realtime requirements it can never be guaranteed
448 One advantage of this low-level implementation is that it can be used as
449 a cheap CEC analyser, especially if interrupts can be used to detect
450 CEC pin transitions from low to high or vice versa.
452 .. kernel-doc:: include/media/cec-pin.h
454 CEC Notifier framework
455 ----------------------
457 Most drm HDMI implementations have an integrated CEC implementation and no
458 notifier support is needed. But some have independent CEC implementations
460 completely separate chip that deals with the CEC pin. For those cases a
462 CEC driver about changes in the physical address.
464 .. kernel-doc:: include/media/cec-notifier.h