| .. SPDX-License-Identifier: GPL-2.0 | 
 |  | 
 | i.MX7 Video Capture Driver | 
 | ========================== | 
 |  | 
 | Introduction | 
 | ------------ | 
 |  | 
 | The i.MX7 contrary to the i.MX5/6 family does not contain an Image Processing | 
 | Unit (IPU); because of that the capabilities to perform operations or | 
 | manipulation of the capture frames are less feature rich. | 
 |  | 
 | For image capture the i.MX7 has three units: | 
 | - CMOS Sensor Interface (CSI) | 
 | - Video Multiplexer | 
 | - MIPI CSI-2 Receiver | 
 |  | 
 | .. code-block:: none | 
 |  | 
 |    MIPI Camera Input ---> MIPI CSI-2 --- > |\ | 
 |                                            | \ | 
 |                                            |  \ | 
 |                                            | M | | 
 |                                            | U | ------>  CSI ---> Capture | 
 |                                            | X | | 
 |                                            |  / | 
 |    Parallel Camera Input ----------------> | / | 
 |                                            |/ | 
 |  | 
 | For additional information, please refer to the latest versions of the i.MX7 | 
 | reference manual [#f1]_. | 
 |  | 
 | Entities | 
 | -------- | 
 |  | 
 | imx-mipi-csi2 | 
 | -------------- | 
 |  | 
 | This is the MIPI CSI-2 receiver entity. It has one sink pad to receive the pixel | 
 | data from MIPI CSI-2 camera sensor. It has one source pad, corresponding to the | 
 | virtual channel 0. This module is compliant to previous version of Samsung | 
 | D-phy, and supports two D-PHY Rx Data lanes. | 
 |  | 
 | csi-mux | 
 | ------- | 
 |  | 
 | This is the video multiplexer. It has two sink pads to select from either camera | 
 | sensor with a parallel interface or from MIPI CSI-2 virtual channel 0.  It has | 
 | a single source pad that routes to the CSI. | 
 |  | 
 | csi | 
 | --- | 
 |  | 
 | The CSI enables the chip to connect directly to external CMOS image sensor. CSI | 
 | can interface directly with Parallel and MIPI CSI-2 buses. It has 256 x 64 FIFO | 
 | to store received image pixel data and embedded DMA controllers to transfer data | 
 | from the FIFO through AHB bus. | 
 |  | 
 | This entity has one sink pad that receives from the csi-mux entity and a single | 
 | source pad that routes video frames directly to memory buffers. This pad is | 
 | routed to a capture device node. | 
 |  | 
 | Usage Notes | 
 | ----------- | 
 |  | 
 | To aid in configuration and for backward compatibility with V4L2 applications | 
 | that access controls only from video device nodes, the capture device interfaces | 
 | inherit controls from the active entities in the current pipeline, so controls | 
 | can be accessed either directly from the subdev or from the active capture | 
 | device interface. For example, the sensor controls are available either from the | 
 | sensor subdevs or from the active capture device. | 
 |  | 
 | Warp7 with OV2680 | 
 | ----------------- | 
 |  | 
 | On this platform an OV2680 MIPI CSI-2 module is connected to the internal MIPI | 
 | CSI-2 receiver. The following example configures a video capture pipeline with | 
 | an output of 800x600, and BGGR 10 bit bayer format: | 
 |  | 
 | .. code-block:: none | 
 |  | 
 |    # Setup links | 
 |    media-ctl -l "'ov2680 1-0036':0 -> 'imx7-mipi-csis.0':0[1]" | 
 |    media-ctl -l "'imx7-mipi-csis.0':1 -> 'csi-mux':1[1]" | 
 |    media-ctl -l "'csi-mux':2 -> 'csi':0[1]" | 
 |    media-ctl -l "'csi':1 -> 'csi capture':0[1]" | 
 |  | 
 |    # Configure pads for pipeline | 
 |    media-ctl -V "'ov2680 1-0036':0 [fmt:SBGGR10_1X10/800x600 field:none]" | 
 |    media-ctl -V "'csi-mux':1 [fmt:SBGGR10_1X10/800x600 field:none]" | 
 |    media-ctl -V "'csi-mux':2 [fmt:SBGGR10_1X10/800x600 field:none]" | 
 |    media-ctl -V "'imx7-mipi-csis.0':0 [fmt:SBGGR10_1X10/800x600 field:none]" | 
 |    media-ctl -V "'csi':0 [fmt:SBGGR10_1X10/800x600 field:none]" | 
 |  | 
 | After this streaming can start. The v4l2-ctl tool can be used to select any of | 
 | the resolutions supported by the sensor. | 
 |  | 
 | .. code-block:: none | 
 |  | 
 | 	# media-ctl -p | 
 | 	Media controller API version 5.2.0 | 
 |  | 
 | 	Media device information | 
 | 	------------------------ | 
 | 	driver          imx7-csi | 
 | 	model           imx-media | 
 | 	serial | 
 | 	bus info | 
 | 	hw revision     0x0 | 
 | 	driver version  5.2.0 | 
 |  | 
 | 	Device topology | 
 | 	- entity 1: csi (2 pads, 2 links) | 
 | 	            type V4L2 subdev subtype Unknown flags 0 | 
 | 	            device node name /dev/v4l-subdev0 | 
 | 	        pad0: Sink | 
 | 	                [fmt:SBGGR10_1X10/800x600 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range] | 
 | 	                <- "csi-mux":2 [ENABLED] | 
 | 	        pad1: Source | 
 | 	                [fmt:SBGGR10_1X10/800x600 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range] | 
 | 	                -> "csi capture":0 [ENABLED] | 
 |  | 
 | 	- entity 4: csi capture (1 pad, 1 link) | 
 | 	            type Node subtype V4L flags 0 | 
 | 	            device node name /dev/video0 | 
 | 	        pad0: Sink | 
 | 	                <- "csi":1 [ENABLED] | 
 |  | 
 | 	- entity 10: csi-mux (3 pads, 2 links) | 
 | 	             type V4L2 subdev subtype Unknown flags 0 | 
 | 	             device node name /dev/v4l-subdev1 | 
 | 	        pad0: Sink | 
 | 	                [fmt:Y8_1X8/1x1 field:none] | 
 | 	        pad1: Sink | 
 | 	               [fmt:SBGGR10_1X10/800x600 field:none] | 
 | 	                <- "imx7-mipi-csis.0":1 [ENABLED] | 
 | 	        pad2: Source | 
 | 	                [fmt:SBGGR10_1X10/800x600 field:none] | 
 | 	                -> "csi":0 [ENABLED] | 
 |  | 
 | 	- entity 14: imx7-mipi-csis.0 (2 pads, 2 links) | 
 | 	             type V4L2 subdev subtype Unknown flags 0 | 
 | 	             device node name /dev/v4l-subdev2 | 
 | 	        pad0: Sink | 
 | 	                [fmt:SBGGR10_1X10/800x600 field:none] | 
 | 	                <- "ov2680 1-0036":0 [ENABLED] | 
 | 	        pad1: Source | 
 | 	                [fmt:SBGGR10_1X10/800x600 field:none] | 
 | 	                -> "csi-mux":1 [ENABLED] | 
 |  | 
 | 	- entity 17: ov2680 1-0036 (1 pad, 1 link) | 
 | 	             type V4L2 subdev subtype Sensor flags 0 | 
 | 	             device node name /dev/v4l-subdev3 | 
 | 	        pad0: Source | 
 | 	                [fmt:SBGGR10_1X10/800x600@1/30 field:none colorspace:srgb] | 
 | 	                -> "imx7-mipi-csis.0":0 [ENABLED] | 
 |  | 
 | i.MX6ULL-EVK with OV5640 | 
 | ------------------------ | 
 |  | 
 | On this platform a parallel OV5640 sensor is connected to the CSI port. | 
 | The following example configures a video capture pipeline with an output | 
 | of 640x480 and UYVY8_2X8 format: | 
 |  | 
 | .. code-block:: none | 
 |  | 
 |    # Setup links | 
 |    media-ctl -l "'ov5640 1-003c':0 -> 'csi':0[1]" | 
 |    media-ctl -l "'csi':1 -> 'csi capture':0[1]" | 
 |  | 
 |    # Configure pads for pipeline | 
 |    media-ctl -v -V "'ov5640 1-003c':0 [fmt:UYVY8_2X8/640x480 field:none]" | 
 |  | 
 | After this streaming can start: | 
 |  | 
 | .. code-block:: none | 
 |  | 
 |    gst-launch-1.0 -v v4l2src device=/dev/video1 ! video/x-raw,format=UYVY,width=640,height=480 ! v4l2convert ! fbdevsink | 
 |  | 
 | .. code-block:: none | 
 |  | 
 | 	# media-ctl -p | 
 | 	Media controller API version 5.14.0 | 
 |  | 
 | 	Media device information | 
 | 	------------------------ | 
 | 	driver          imx7-csi | 
 | 	model           imx-media | 
 | 	serial | 
 | 	bus info | 
 | 	hw revision     0x0 | 
 | 	driver version  5.14.0 | 
 |  | 
 | 	Device topology | 
 | 	- entity 1: csi (2 pads, 2 links) | 
 | 	            type V4L2 subdev subtype Unknown flags 0 | 
 | 	            device node name /dev/v4l-subdev0 | 
 | 	        pad0: Sink | 
 | 	                [fmt:UYVY8_2X8/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range] | 
 | 	                <- "ov5640 1-003c":0 [ENABLED,IMMUTABLE] | 
 | 	        pad1: Source | 
 | 	                [fmt:UYVY8_2X8/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range] | 
 | 	                -> "csi capture":0 [ENABLED,IMMUTABLE] | 
 |  | 
 | 	- entity 4: csi capture (1 pad, 1 link) | 
 | 	            type Node subtype V4L flags 0 | 
 | 	            device node name /dev/video1 | 
 | 	        pad0: Sink | 
 | 	                <- "csi":1 [ENABLED,IMMUTABLE] | 
 |  | 
 | 	- entity 10: ov5640 1-003c (1 pad, 1 link) | 
 | 	             type V4L2 subdev subtype Sensor flags 0 | 
 | 	             device node name /dev/v4l-subdev1 | 
 | 	        pad0: Source | 
 | 	                [fmt:UYVY8_2X8/640x480@1/30 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range] | 
 | 	                -> "csi":0 [ENABLED,IMMUTABLE] | 
 |  | 
 | References | 
 | ---------- | 
 |  | 
 | .. [#f1] https://www.nxp.com/docs/en/reference-manual/IMX7SRM.pdf |