Documentation/driver-api/media/cec-core.rst

Source file repositories/reference/linux-study-clean/Documentation/driver-api/media/cec-core.rst

File Facts

System
Linux kernel
Corpus path
Documentation/driver-api/media/cec-core.rst
Extension
.rst
Size
19141 bytes
Lines
503
Domain
Support Tooling And Documentation
Bucket
Documentation
Inferred role
Support Tooling And Documentation: documentation
Status
atlas-only

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

struct cec_adap_ops {
		/* Low-level callbacks */
		...

		/* Error injection callbacks */
		int (*error_inj_show)(struct cec_adapter *adap, struct seq_file *sf);
		bool (*error_inj_parse_line)(struct cec_adapter *adap, char *line);

		/* High-level CEC message callback */
		...
	};

If both callbacks are set, then an ``error-inj`` file will appear in debugfs.
The basic syntax is as follows:

Leading spaces/tabs are ignored. If the next character is a ``#`` or the end of the
line was reached, then the whole line is ignored. Otherwise a command is expected.

This basic parsing is done in the CEC Framework. It is up to the driver to decide
what commands to implement. The only requirement is that the command ``clear`` without
any arguments must be implemented and that it will remove all current error injection
commands.

This ensures that you can always do ``echo clear >error-inj`` to clear any error
injections without having to know the details of the driver-specific commands.

Note that the output of ``error-inj`` shall be valid as input to ``error-inj``.
So this must work:

.. code-block:: none

	$ cat error-inj >einj.txt
	$ cat einj.txt >error-inj

The first callback is called when this file is read and it should show the
current error injection state::

	int (*error_inj_show)(struct cec_adapter *adap, struct seq_file *sf);

It is recommended that it starts with a comment block with basic usage
information. It returns 0 for success and an error otherwise.

The second callback will parse commands written to the ``error-inj`` file::

	bool (*error_inj_parse_line)(struct cec_adapter *adap, char *line);

The ``line`` argument points to the start of the command. Any leading
spaces or tabs have already been skipped. It is a single line only (so there
are no embedded newlines) and it is 0-terminated. The callback is free to
modify the contents of the buffer. It is only called for lines containing a
command, so this callback is never called for empty lines or comment lines.

Return true if the command was valid or false if there were syntax errors.

Implementing the High-Level CEC Adapter
---------------------------------------

The low-level operations drive the hardware, the high-level operations are
CEC protocol driven. The high-level callbacks are called without the adap->lock
mutex being held. The following high-level callbacks are available:

.. code-block:: none

	struct cec_adap_ops {
		/* Low-level callbacks */
		...

		/* Error injection callbacks */
		...

Annotation

Implementation Notes