1.. SPDX-License-Identifier: GPL-2.0
2
3i.MX7 Video Capture Driver
4==========================
5
6Introduction
7------------
8
9The i.MX7 contrary to the i.MX5/6 family does not contain an Image Processing
10Unit (IPU); because of that the capabilities to perform operations or
11manipulation of the capture frames are less feature rich.
12
13For image capture the i.MX7 has three units:
14- CMOS Sensor Interface (CSI)
15- Video Multiplexer
16- MIPI CSI-2 Receiver
17
18.. code-block:: none
19
20   MIPI Camera Input ---> MIPI CSI-2 --- > |\
21                                           | \
22                                           |  \
23                                           | M |
24                                           | U | ------>  CSI ---> Capture
25                                           | X |
26                                           |  /
27   Parallel Camera Input ----------------> | /
28                                           |/
29
30For additional information, please refer to the latest versions of the i.MX7
31reference manual [#f1]_.
32
33Entities
34--------
35
36imx7-mipi-csi2
37--------------
38
39This is the MIPI CSI-2 receiver entity. It has one sink pad to receive the pixel
40data from MIPI CSI-2 camera sensor. It has one source pad, corresponding to the
41virtual channel 0. This module is compliant to previous version of Samsung
42D-phy, and supports two D-PHY Rx Data lanes.
43
44csi-mux
45-------
46
47This is the video multiplexer. It has two sink pads to select from either camera
48sensor with a parallel interface or from MIPI CSI-2 virtual channel 0.  It has
49a single source pad that routes to the CSI.
50
51csi
52---
53
54The CSI enables the chip to connect directly to external CMOS image sensor. CSI
55can interface directly with Parallel and MIPI CSI-2 buses. It has 256 x 64 FIFO
56to store received image pixel data and embedded DMA controllers to transfer data
57from the FIFO through AHB bus.
58
59This entity has one sink pad that receives from the csi-mux entity and a single
60source pad that routes video frames directly to memory buffers. This pad is
61routed to a capture device node.
62
63Usage Notes
64-----------
65
66To aid in configuration and for backward compatibility with V4L2 applications
67that access controls only from video device nodes, the capture device interfaces
68inherit controls from the active entities in the current pipeline, so controls
69can be accessed either directly from the subdev or from the active capture
70device interface. For example, the sensor controls are available either from the
71sensor subdevs or from the active capture device.
72
73Warp7 with OV2680
74-----------------
75
76On this platform an OV2680 MIPI CSI-2 module is connected to the internal MIPI
77CSI-2 receiver. The following example configures a video capture pipeline with
78an output of 800x600, and BGGR 10 bit bayer format:
79
80.. code-block:: none
81
82   # Setup links
83   media-ctl -l "'ov2680 1-0036':0 -> 'imx7-mipi-csis.0':0[1]"
84   media-ctl -l "'imx7-mipi-csis.0':1 -> 'csi-mux':1[1]"
85   media-ctl -l "'csi-mux':2 -> 'csi':0[1]"
86   media-ctl -l "'csi':1 -> 'csi capture':0[1]"
87
88   # Configure pads for pipeline
89   media-ctl -V "'ov2680 1-0036':0 [fmt:SBGGR10_1X10/800x600 field:none]"
90   media-ctl -V "'csi-mux':1 [fmt:SBGGR10_1X10/800x600 field:none]"
91   media-ctl -V "'csi-mux':2 [fmt:SBGGR10_1X10/800x600 field:none]"
92   media-ctl -V "'imx7-mipi-csis.0':0 [fmt:SBGGR10_1X10/800x600 field:none]"
93   media-ctl -V "'csi':0 [fmt:SBGGR10_1X10/800x600 field:none]"
94
95After this streaming can start. The v4l2-ctl tool can be used to select any of
96the resolutions supported by the sensor.
97
98.. code-block:: none
99
100	# media-ctl -p
101	Media controller API version 5.2.0
102
103	Media device information
104	------------------------
105	driver          imx7-csi
106	model           imx-media
107	serial
108	bus info
109	hw revision     0x0
110	driver version  5.2.0
111
112	Device topology
113	- entity 1: csi (2 pads, 2 links)
114	            type V4L2 subdev subtype Unknown flags 0
115	            device node name /dev/v4l-subdev0
116	        pad0: Sink
117	                [fmt:SBGGR10_1X10/800x600 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]
118	                <- "csi-mux":2 [ENABLED]
119	        pad1: Source
120	                [fmt:SBGGR10_1X10/800x600 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]
121	                -> "csi capture":0 [ENABLED]
122
123	- entity 4: csi capture (1 pad, 1 link)
124	            type Node subtype V4L flags 0
125	            device node name /dev/video0
126	        pad0: Sink
127	                <- "csi":1 [ENABLED]
128
129	- entity 10: csi-mux (3 pads, 2 links)
130	             type V4L2 subdev subtype Unknown flags 0
131	             device node name /dev/v4l-subdev1
132	        pad0: Sink
133	                [fmt:Y8_1X8/1x1 field:none]
134	        pad1: Sink
135	               [fmt:SBGGR10_1X10/800x600 field:none]
136	                <- "imx7-mipi-csis.0":1 [ENABLED]
137	        pad2: Source
138	                [fmt:SBGGR10_1X10/800x600 field:none]
139	                -> "csi":0 [ENABLED]
140
141	- entity 14: imx7-mipi-csis.0 (2 pads, 2 links)
142	             type V4L2 subdev subtype Unknown flags 0
143	             device node name /dev/v4l-subdev2
144	        pad0: Sink
145	                [fmt:SBGGR10_1X10/800x600 field:none]
146	                <- "ov2680 1-0036":0 [ENABLED]
147	        pad1: Source
148	                [fmt:SBGGR10_1X10/800x600 field:none]
149	                -> "csi-mux":1 [ENABLED]
150
151	- entity 17: ov2680 1-0036 (1 pad, 1 link)
152	             type V4L2 subdev subtype Sensor flags 0
153	             device node name /dev/v4l-subdev3
154	        pad0: Source
155	                [fmt:SBGGR10_1X10/800x600@1/30 field:none colorspace:srgb]
156	                -> "imx7-mipi-csis.0":0 [ENABLED]
157
158i.MX6ULL-EVK with OV5640
159------------------------
160
161On this platform a parallel OV5640 sensor is connected to the CSI port.
162The following example configures a video capture pipeline with an output
163of 640x480 and UYVY8_2X8 format:
164
165.. code-block:: none
166
167   # Setup links
168   media-ctl -l "'ov5640 1-003c':0 -> 'csi':0[1]"
169   media-ctl -l "'csi':1 -> 'csi capture':0[1]"
170
171   # Configure pads for pipeline
172   media-ctl -v -V "'ov5640 1-003c':0 [fmt:UYVY8_2X8/640x480 field:none]"
173
174After this streaming can start:
175
176.. code-block:: none
177
178   gst-launch-1.0 -v v4l2src device=/dev/video1 ! video/x-raw,format=UYVY,width=640,height=480 ! v4l2convert ! fbdevsink
179
180.. code-block:: none
181
182	# media-ctl -p
183	Media controller API version 5.14.0
184
185	Media device information
186	------------------------
187	driver          imx7-csi
188	model           imx-media
189	serial
190	bus info
191	hw revision     0x0
192	driver version  5.14.0
193
194	Device topology
195	- entity 1: csi (2 pads, 2 links)
196	            type V4L2 subdev subtype Unknown flags 0
197	            device node name /dev/v4l-subdev0
198	        pad0: Sink
199	                [fmt:UYVY8_2X8/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]
200	                <- "ov5640 1-003c":0 [ENABLED,IMMUTABLE]
201	        pad1: Source
202	                [fmt:UYVY8_2X8/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]
203	                -> "csi capture":0 [ENABLED,IMMUTABLE]
204
205	- entity 4: csi capture (1 pad, 1 link)
206	            type Node subtype V4L flags 0
207	            device node name /dev/video1
208	        pad0: Sink
209	                <- "csi":1 [ENABLED,IMMUTABLE]
210
211	- entity 10: ov5640 1-003c (1 pad, 1 link)
212	             type V4L2 subdev subtype Sensor flags 0
213	             device node name /dev/v4l-subdev1
214	        pad0: Source
215	                [fmt:UYVY8_2X8/640x480@1/30 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]
216	                -> "csi":0 [ENABLED,IMMUTABLE]
217
218References
219----------
220
221.. [#f1] https://www.nxp.com/docs/en/reference-manual/IMX7SRM.pdf
222