Merge tag 'apparmor-pr-2019-03-12' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / Documentation / media / kapi / csi2.rst
1 .. SPDX-License-Identifier: GPL-2.0
2
3 MIPI CSI-2
4 ==========
5
6 CSI-2 is a data bus intended for transferring images from cameras to
7 the host SoC. It is defined by the `MIPI alliance`_.
8
9 .. _`MIPI alliance`: http://www.mipi.org/
10
11 Transmitter drivers
12 -------------------
13
14 CSI-2 transmitter, such as a sensor or a TV tuner, drivers need to
15 provide the CSI-2 receiver with information on the CSI-2 bus
16 configuration. These include the V4L2_CID_LINK_FREQ and
17 V4L2_CID_PIXEL_RATE controls and
18 (:c:type:`v4l2_subdev_video_ops`->s_stream() callback). These
19 interface elements must be present on the sub-device represents the
20 CSI-2 transmitter.
21
22 The V4L2_CID_LINK_FREQ control is used to tell the receiver driver the
23 frequency (and not the symbol rate) of the link. The
24 V4L2_CID_PIXEL_RATE is may be used by the receiver to obtain the pixel
25 rate the transmitter uses. The
26 :c:type:`v4l2_subdev_video_ops`->s_stream() callback provides an
27 ability to start and stop the stream.
28
29 The value of the V4L2_CID_PIXEL_RATE is calculated as follows::
30
31         pixel_rate = link_freq * 2 * nr_of_lanes / bits_per_sample
32
33 where
34
35 .. list-table:: variables in pixel rate calculation
36    :header-rows: 1
37
38    * - variable or constant
39      - description
40    * - link_freq
41      - The value of the V4L2_CID_LINK_FREQ integer64 menu item.
42    * - nr_of_lanes
43      - Number of data lanes used on the CSI-2 link. This can
44        be obtained from the OF endpoint configuration.
45    * - 2
46      - Two bits are transferred per clock cycle per lane.
47    * - bits_per_sample
48      - Number of bits per sample.
49
50 The transmitter drivers must, if possible, configure the CSI-2
51 transmitter to *LP-11 mode* whenever the transmitter is powered on but
52 not active. Some transmitters do this automatically but some have to
53 be explicitly programmed to do so, and some are unable to do so
54 altogether due to hardware constraints.
55
56 Stopping the transmitter
57 ^^^^^^^^^^^^^^^^^^^^^^^^
58
59 A transmitter stops sending the stream of images as a result of
60 calling the ``.s_stream()`` callback. Some transmitters may stop the
61 stream at a frame boundary whereas others stop immediately,
62 effectively leaving the current frame unfinished. The receiver driver
63 should not make assumptions either way, but function properly in both
64 cases.
65
66 Receiver drivers
67 ----------------
68
69 Before the receiver driver may enable the CSI-2 transmitter by using
70 the :c:type:`v4l2_subdev_video_ops`->s_stream(), it must have powered
71 the transmitter up by using the
72 :c:type:`v4l2_subdev_core_ops`->s_power() callback. This may take
73 place either indirectly by using :c:func:`v4l2_pipeline_pm_use` or
74 directly.