mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-26 23:15:24 +07:00
8fd390b89c
Currently, v4l2_pipeline_pm_use() prototype is: int v4l2_pipeline_pm_use(struct media_entity *entity, int use) Where the 'use' argument shall only be set to '1' for enable/power-on, or to '0' for disable/power-off. The integer return is specified as only meaningful when 'use' is set to '1'. Let's enforce this semantic by splitting the function in two: v4l2_pipeline_pm_get and v4l2_pipeline_pm_put. This is done for several reasons. It makes the API easier to use (or harder to misuse). It removes the constraint on the values the 'use' argument shall take. Also, it removes the need to constraint the return value, by making v4l2_pipeline_pm_put void return. And last, it's more consistent with other kernel APIs, such as the runtime pm APIs, which makes the code more symmetric. Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
86 lines
2.9 KiB
ReStructuredText
86 lines
2.9 KiB
ReStructuredText
.. SPDX-License-Identifier: GPL-2.0
|
|
|
|
MIPI CSI-2
|
|
==========
|
|
|
|
CSI-2 is a data bus intended for transferring images from cameras to
|
|
the host SoC. It is defined by the `MIPI alliance`_.
|
|
|
|
.. _`MIPI alliance`: http://www.mipi.org/
|
|
|
|
Transmitter drivers
|
|
-------------------
|
|
|
|
CSI-2 transmitter, such as a sensor or a TV tuner, drivers need to
|
|
provide the CSI-2 receiver with information on the CSI-2 bus
|
|
configuration. These include the V4L2_CID_LINK_FREQ and
|
|
V4L2_CID_PIXEL_RATE controls and
|
|
(:c:type:`v4l2_subdev_video_ops`->s_stream() callback). These
|
|
interface elements must be present on the sub-device represents the
|
|
CSI-2 transmitter.
|
|
|
|
The V4L2_CID_LINK_FREQ control is used to tell the receiver driver the
|
|
frequency (and not the symbol rate) of the link. The
|
|
V4L2_CID_PIXEL_RATE is may be used by the receiver to obtain the pixel
|
|
rate the transmitter uses. The
|
|
:c:type:`v4l2_subdev_video_ops`->s_stream() callback provides an
|
|
ability to start and stop the stream.
|
|
|
|
The value of the V4L2_CID_PIXEL_RATE is calculated as follows::
|
|
|
|
pixel_rate = link_freq * 2 * nr_of_lanes / bits_per_sample
|
|
|
|
where
|
|
|
|
.. list-table:: variables in pixel rate calculation
|
|
:header-rows: 1
|
|
|
|
* - variable or constant
|
|
- description
|
|
* - link_freq
|
|
- The value of the V4L2_CID_LINK_FREQ integer64 menu item.
|
|
* - nr_of_lanes
|
|
- Number of data lanes used on the CSI-2 link. This can
|
|
be obtained from the OF endpoint configuration.
|
|
* - 2
|
|
- Two bits are transferred per clock cycle per lane.
|
|
* - bits_per_sample
|
|
- Number of bits per sample.
|
|
|
|
The transmitter drivers must, if possible, configure the CSI-2
|
|
transmitter to *LP-11 mode* whenever the transmitter is powered on but
|
|
not active, and maintain *LP-11 mode* until stream on. Only at stream
|
|
on should the transmitter activate the clock on the clock lane and
|
|
transition to *HS mode*.
|
|
|
|
Some transmitters do this automatically but some have to be explicitly
|
|
programmed to do so, and some are unable to do so altogether due to
|
|
hardware constraints.
|
|
|
|
Stopping the transmitter
|
|
^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
A transmitter stops sending the stream of images as a result of
|
|
calling the ``.s_stream()`` callback. Some transmitters may stop the
|
|
stream at a frame boundary whereas others stop immediately,
|
|
effectively leaving the current frame unfinished. The receiver driver
|
|
should not make assumptions either way, but function properly in both
|
|
cases.
|
|
|
|
Receiver drivers
|
|
----------------
|
|
|
|
Before the receiver driver may enable the CSI-2 transmitter by using
|
|
the :c:type:`v4l2_subdev_video_ops`->s_stream(), it must have powered
|
|
the transmitter up by using the
|
|
:c:type:`v4l2_subdev_core_ops`->s_power() callback. This may take
|
|
place either indirectly by using :c:func:`v4l2_pipeline_pm_get` or
|
|
directly.
|
|
|
|
Formats
|
|
-------
|
|
|
|
The media bus pixel codes document parallel formats. Should the pixel data be
|
|
transported over a serial bus, the media bus pixel code that describes a
|
|
parallel format that transfers a sample on a single clock cycle is used.
|