xref: /linux/Documentation/driver-api/media/tx-rx.rst (revision bba2c3615bd6cfee7456d1130f2e6b01b3f4e9ba)
1.. SPDX-License-Identifier: GPL-2.0
2
3.. _transmitter-receiver:
4
5Pixel data transmitter and receiver drivers
6===========================================
7
8V4L2 supports various devices that transmit and receive pixel data. Examples of
9these devices include a camera sensor, a TV tuner and a parallel, a BT.656 or a
10CSI-2 receiver in an SoC.
11
12Bus types
13---------
14
15The following buses are the most common. This section discusses these two only.
16
17MIPI CSI-2
18^^^^^^^^^^
19
20CSI-2 is a data bus intended for transferring images from cameras to
21the host SoC. It is defined by the `MIPI alliance`_.
22
23.. _`MIPI alliance`: https://www.mipi.org/
24
25Parallel and BT.656
26^^^^^^^^^^^^^^^^^^^
27
28The parallel and `BT.656`_ buses transport one bit of data on each clock cycle
29per data line. The parallel bus uses synchronisation and other additional
30signals whereas BT.656 embeds synchronisation.
31
32.. _`BT.656`: https://en.wikipedia.org/wiki/ITU-R_BT.656
33
34Transmitter drivers
35-------------------
36
37Transmitter drivers generally need to provide the receiver drivers with the
38configuration of the transmitter. What is required depends on the type of the
39bus. These are common for both buses.
40
41Media bus pixel code
42^^^^^^^^^^^^^^^^^^^^
43
44See :ref:`v4l2-mbus-pixelcode`.
45
46Link frequency
47^^^^^^^^^^^^^^
48
49The :ref:`V4L2_CID_LINK_FREQ <v4l2-cid-link-freq>` control is used to tell the
50receiver the frequency of the bus (i.e. it is not the same as the symbol rate).
51
52Drivers that do not have user-configurable link frequency should report it
53through the ``.get_mbus_config()`` subdev pad operation, in the ``link_freq``
54field of struct v4l2_mbus_config, instead of through controls.
55
56Receiver drivers should use :c:func:`v4l2_get_link_freq` helper to obtain the
57link frequency from the transmitter sub-device.
58
59``.enable_streams()`` and ``.disable_streams()`` callbacks
60^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
61
62The struct v4l2_subdev_pad_ops->enable_streams() and struct
63v4l2_subdev_pad_ops->disable_streams() callbacks are used by the receiver driver
64to control the transmitter driver's streaming state. These callbacks may not be
65called directly, but by using ``v4l2_subdev_enable_streams()`` and
66``v4l2_subdev_disable_streams()``.
67
68Stopping the transmitter
69^^^^^^^^^^^^^^^^^^^^^^^^
70
71A transmitter stops sending the stream of images as a result of
72calling the ``.disable_streams()`` callback. Some transmitters may stop the
73stream at a frame boundary whereas others stop immediately,
74effectively leaving the current frame unfinished. The receiver driver
75should not make assumptions either way, but function properly in both
76cases.
77
78CSI-2 transmitter drivers
79-------------------------
80
81Pixel rate
82^^^^^^^^^^
83
84The pixel rate on the bus is calculated as follows::
85
86	pixel_rate = link_freq * 2 * nr_of_lanes * 16 / k / bits_per_sample
87
88where
89
90.. list-table:: variables in pixel rate calculation
91   :header-rows: 1
92
93   * - variable or constant
94     - description
95   * - link_freq
96     - The value of the :ref:`V4L2_CID_LINK_FREQ <v4l2-cid-link-freq>` integer64
97       menu item.
98   * - nr_of_lanes
99     - Number of data lanes used on the CSI-2 link.
100   * - 2
101     - Data is transferred on both rising and falling edge of the signal.
102   * - bits_per_sample
103     - Number of bits per sample.
104   * - k
105     - 16 for D-PHY and 7 for C-PHY.
106
107Information on whether D-PHY or C-PHY is used, and the value of ``nr_of_lanes``, can be obtained from the OF endpoint configuration.
108
109.. note::
110
111	The pixel rate calculated this way is **not** the same thing as the
112	pixel rate on the camera sensor's pixel array which is indicated by the
113	:ref:`V4L2_CID_PIXEL_RATE <v4l2-cid-pixel-rate>` control.
114
115LP-11 and LP-111 states
116^^^^^^^^^^^^^^^^^^^^^^^
117
118As part of transitioning to high speed mode, a CSI-2 transmitter typically
119briefly sets the bus to LP-11 or LP-111 state, depending on the PHY. This period
120may be as short as 100 µs, during which the receiver observes this state and
121proceeds its own part of high speed mode transition.
122
123Most receivers are capable of autonomously handling this once the software has
124configured them to do so, but there are receivers which require software
125involvement in observing LP-11 or LP-111 state. 100 µs is a brief period to hit
126in software, especially when there is no interrupt telling something is
127happening.
128
129One way to address this is to configure the transmitter side explicitly to LP-11
130or LP-111 state, which requires support from the transmitter hardware. This is
131not universally available. Many devices return to this state once streaming is
132stopped while the state after power-on is LP-00 or LP-000.
133
134The ``.pre_streamon()`` callback may be used to prepare a transmitter for
135transitioning to streaming state, but not yet start streaming. Similarly, the
136``.post_streamoff()`` callback is used to undo what was done by the
137``.pre_streamon()`` callback. The caller of ``.pre_streamon()`` is thus required
138to call ``.post_streamoff()`` for each successful call of ``.pre_streamon()``.
139
140In the context of CSI-2, the ``.pre_streamon()`` callback is used to transition
141the transmitter to the LP-11 or LP-111 state. This also requires powering on the
142device, so this should be only done when it is needed.
143
144Receiver drivers that do not need explicit LP-11 or LP-111 state setup are
145waived from calling the two callbacks.
146