1 .. SPDX-License-Identifier: GPL-2.0
3 .. _transmitter-receiver:
5 Pixel data transmitter and receiver drivers
6 ===========================================
8 V4L2 supports various devices that transmit and receive pixel data. Examples of
9 these devices include a camera sensor, a TV tuner and a parallel, a BT.656 or a
10 CSI-2 receiver in an SoC.
15 The following busses are the most common. This section discusses these two only.
20 CSI-2 is a data bus intended for transferring images from cameras to
21 the host SoC. It is defined by the `MIPI alliance`_.
23 .. _`MIPI alliance`: https://www.mipi.org/
28 The parallel and `BT.656`_ buses transport one bit of data on each clock cycle
29 per data line. The parallel bus uses synchronisation and other additional
30 signals whereas BT.656 embeds synchronisation.
32 .. _`BT.656`: https://en.wikipedia.org/wiki/ITU-R_BT.656
37 Transmitter drivers generally need to provide the receiver drivers with the
38 configuration of the transmitter. What is required depends on the type of the
39 bus. These are common for both busses.
44 See :ref:`v4l2-mbus-pixelcode`.
49 The :ref:`V4L2_CID_LINK_FREQ <v4l2-cid-link-freq>` control is used to tell the
50 receiver the frequency of the bus (i.e. it is not the same as the symbol rate).
52 ``.enable_streams()`` and ``.disable_streams()`` callbacks
53 ^^^^^^^^^^^^^^^^^^^^^^^^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
55 The struct v4l2_subdev_pad_ops->enable_streams() and struct
56 v4l2_subdev_pad_ops->disable_streams() callbacks are used by the receiver driver
57 to control the transmitter driver's streaming state. These callbacks may not be
58 called directly, but by using ``v4l2_subdev_enable_streams()`` and
59 ``v4l2_subdev_disable_streams()``.
62 CSI-2 transmitter drivers
63 -------------------------
68 The pixel rate on the bus is calculated as follows::
70 pixel_rate = link_freq * 2 * nr_of_lanes * 16 / k / bits_per_sample
74 .. list-table:: variables in pixel rate calculation
77 * - variable or constant
80 - The value of the ``V4L2_CID_LINK_FREQ`` integer64 menu item.
82 - Number of data lanes used on the CSI-2 link. This can
83 be obtained from the OF endpoint configuration.
85 - Data is transferred on both rising and falling edge of the signal.
87 - Number of bits per sample.
89 - 16 for D-PHY and 7 for C-PHY
93 The pixel rate calculated this way is **not** the same thing as the
94 pixel rate on the camera sensor's pixel array which is indicated by the
95 :ref:`V4L2_CID_PIXEL_RATE <v4l2-cid-pixel-rate>` control.
97 LP-11 and LP-111 states
98 ^^^^^^^^^^^^^^^^^^^^^^^
100 As part of transitioning to high speed mode, a CSI-2 transmitter typically
101 briefly sets the bus to LP-11 or LP-111 state, depending on the PHY. This period
102 may be as short as 100 µs, during which the receiver observes this state and
103 proceeds its own part of high speed mode transition.
105 Most receivers are capable of autonomously handling this once the software has
106 configured them to do so, but there are receivers which require software
107 involvement in observing LP-11 or LP-111 state. 100 µs is a brief period to hit
108 in software, especially when there is no interrupt telling something is
111 One way to address this is to configure the transmitter side explicitly to LP-11
112 or LP-111 state, which requires support from the transmitter hardware. This is
113 not universally available. Many devices return to this state once streaming is
114 stopped while the state after power-on is LP-00 or LP-000.
116 The ``.pre_streamon()`` callback may be used to prepare a transmitter for
117 transitioning to streaming state, but not yet start streaming. Similarly, the
118 ``.post_streamoff()`` callback is used to undo what was done by the
119 ``.pre_streamon()`` callback. The caller of ``.pre_streamon()`` is thus required
120 to call ``.post_streamoff()`` for each successful call of ``.pre_streamon()``.
122 In the context of CSI-2, the ``.pre_streamon()`` callback is used to transition
123 the transmitter to the LP-11 or LP-111 state. This also requires powering on the
124 device, so this should be only done when it is needed.
126 Receiver drivers that do not need explicit LP-11 or LP-111 state setup are
127 waived from calling the two callbacks.
129 Stopping the transmitter
130 ^^^^^^^^^^^^^^^^^^^^^^^^
132 A transmitter stops sending the stream of images as a result of
133 calling the ``.disable_streams()`` callback. Some transmitters may stop the
134 stream at a frame boundary whereas others stop immediately,
135 effectively leaving the current frame unfinished. The receiver driver
136 should not make assumptions either way, but function properly in both