5b21b566b9
Rename the imx7-mipi-csis.c driver to remove the reference to i.MX7. The driver is for an IP core found on i.MX7 and i.MX8 SoC, so do not specify a SoC version number in the driver name. Remove the references to the i.MX7 SoC in the driver symbols and expand the driver's header with more information about the IP core the driver controls. Also rename the associated bindings documentation. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Acked-by: Rui Miguel Silva <rmfrfs@gmail.com> Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
222 lines
7.5 KiB
ReStructuredText
222 lines
7.5 KiB
ReStructuredText
.. 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
|