~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/admin-guide/media/imx.rst

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /Documentation/admin-guide/media/imx.rst (Version linux-6.12-rc7) and /Documentation/admin-guide/media/imx.rst (Version linux-6.2.16)


  1 .. SPDX-License-Identifier: GPL-2.0                 1 .. SPDX-License-Identifier: GPL-2.0
  2                                                     2 
  3 i.MX Video Capture Driver                           3 i.MX Video Capture Driver
  4 =========================                           4 =========================
  5                                                     5 
  6 Introduction                                        6 Introduction
  7 ------------                                        7 ------------
  8                                                     8 
  9 The Freescale i.MX5/6 contains an Image Proces      9 The Freescale i.MX5/6 contains an Image Processing Unit (IPU), which
 10 handles the flow of image frames to and from c     10 handles the flow of image frames to and from capture devices and
 11 display devices.                                   11 display devices.
 12                                                    12 
 13 For image capture, the IPU contains the follow     13 For image capture, the IPU contains the following internal subunits:
 14                                                    14 
 15 - Image DMA Controller (IDMAC)                     15 - Image DMA Controller (IDMAC)
 16 - Camera Serial Interface (CSI)                    16 - Camera Serial Interface (CSI)
 17 - Image Converter (IC)                             17 - Image Converter (IC)
 18 - Sensor Multi-FIFO Controller (SMFC)              18 - Sensor Multi-FIFO Controller (SMFC)
 19 - Image Rotator (IRT)                              19 - Image Rotator (IRT)
 20 - Video De-Interlacing or Combining Block (VDI     20 - Video De-Interlacing or Combining Block (VDIC)
 21                                                    21 
 22 The IDMAC is the DMA controller for transfer o     22 The IDMAC is the DMA controller for transfer of image frames to and from
 23 memory. Various dedicated DMA channels exist f     23 memory. Various dedicated DMA channels exist for both video capture and
 24 display paths. During transfer, the IDMAC is a     24 display paths. During transfer, the IDMAC is also capable of vertical
 25 image flip, 8x8 block transfer (see IRT descri     25 image flip, 8x8 block transfer (see IRT description), pixel component
 26 re-ordering (for example UYVY to YUYV) within      26 re-ordering (for example UYVY to YUYV) within the same colorspace, and
 27 packed <--> planar conversion. The IDMAC can a     27 packed <--> planar conversion. The IDMAC can also perform a simple
 28 de-interlacing by interweaving even and odd li     28 de-interlacing by interweaving even and odd lines during transfer
 29 (without motion compensation which requires th     29 (without motion compensation which requires the VDIC).
 30                                                    30 
 31 The CSI is the backend capture unit that inter     31 The CSI is the backend capture unit that interfaces directly with
 32 camera sensors over Parallel, BT.656/1120, and     32 camera sensors over Parallel, BT.656/1120, and MIPI CSI-2 buses.
 33                                                    33 
 34 The IC handles color-space conversion, resizin     34 The IC handles color-space conversion, resizing (downscaling and
 35 upscaling), horizontal flip, and 90/270 degree     35 upscaling), horizontal flip, and 90/270 degree rotation operations.
 36                                                    36 
 37 There are three independent "tasks" within the     37 There are three independent "tasks" within the IC that can carry out
 38 conversions concurrently: pre-process encoding     38 conversions concurrently: pre-process encoding, pre-process viewfinder,
 39 and post-processing. Within each task, convers     39 and post-processing. Within each task, conversions are split into three
 40 sections: downsizing section, main section (up     40 sections: downsizing section, main section (upsizing, flip, colorspace
 41 conversion, and graphics plane combining), and     41 conversion, and graphics plane combining), and rotation section.
 42                                                    42 
 43 The IPU time-shares the IC task operations. Th     43 The IPU time-shares the IC task operations. The time-slice granularity
 44 is one burst of eight pixels in the downsizing     44 is one burst of eight pixels in the downsizing section, one image line
 45 in the main processing section, one image fram     45 in the main processing section, one image frame in the rotation section.
 46                                                    46 
 47 The SMFC is composed of four independent FIFOs     47 The SMFC is composed of four independent FIFOs that each can transfer
 48 captured frames from sensors directly to memor     48 captured frames from sensors directly to memory concurrently via four
 49 IDMAC channels.                                    49 IDMAC channels.
 50                                                    50 
 51 The IRT carries out 90 and 270 degree image ro     51 The IRT carries out 90 and 270 degree image rotation operations. The
 52 rotation operation is carried out on 8x8 pixel     52 rotation operation is carried out on 8x8 pixel blocks at a time. This
 53 operation is supported by the IDMAC which hand     53 operation is supported by the IDMAC which handles the 8x8 block transfer
 54 along with block reordering, in coordination w     54 along with block reordering, in coordination with vertical flip.
 55                                                    55 
 56 The VDIC handles the conversion of interlaced      56 The VDIC handles the conversion of interlaced video to progressive, with
 57 support for different motion compensation mode     57 support for different motion compensation modes (low, medium, and high
 58 motion). The deinterlaced output frames from t     58 motion). The deinterlaced output frames from the VDIC can be sent to the
 59 IC pre-process viewfinder task for further con     59 IC pre-process viewfinder task for further conversions. The VDIC also
 60 contains a Combiner that combines two image pl     60 contains a Combiner that combines two image planes, with alpha blending
 61 and color keying.                                  61 and color keying.
 62                                                    62 
 63 In addition to the IPU internal subunits, ther     63 In addition to the IPU internal subunits, there are also two units
 64 outside the IPU that are also involved in vide     64 outside the IPU that are also involved in video capture on i.MX:
 65                                                    65 
 66 - MIPI CSI-2 Receiver for camera sensors with      66 - MIPI CSI-2 Receiver for camera sensors with the MIPI CSI-2 bus
 67   interface. This is a Synopsys DesignWare cor     67   interface. This is a Synopsys DesignWare core.
 68 - Two video multiplexers for selecting among m     68 - Two video multiplexers for selecting among multiple sensor inputs
 69   to send to a CSI.                                69   to send to a CSI.
 70                                                    70 
 71 For more info, refer to the latest versions of     71 For more info, refer to the latest versions of the i.MX5/6 reference
 72 manuals [#f1]_ and [#f2]_.                         72 manuals [#f1]_ and [#f2]_.
 73                                                    73 
 74                                                    74 
 75 Features                                           75 Features
 76 --------                                           76 --------
 77                                                    77 
 78 Some of the features of this driver include:       78 Some of the features of this driver include:
 79                                                    79 
 80 - Many different pipelines can be configured v     80 - Many different pipelines can be configured via media controller API,
 81   that correspond to the hardware video captur     81   that correspond to the hardware video capture pipelines supported in
 82   the i.MX.                                        82   the i.MX.
 83                                                    83 
 84 - Supports parallel, BT.565, and MIPI CSI-2 in     84 - Supports parallel, BT.565, and MIPI CSI-2 interfaces.
 85                                                    85 
 86 - Concurrent independent streams, by configuri     86 - Concurrent independent streams, by configuring pipelines to multiple
 87   video capture interfaces using independent e     87   video capture interfaces using independent entities.
 88                                                    88 
 89 - Scaling, color-space conversion, horizontal      89 - Scaling, color-space conversion, horizontal and vertical flip, and
 90   image rotation via IC task subdevs.              90   image rotation via IC task subdevs.
 91                                                    91 
 92 - Many pixel formats supported (RGB, packed an     92 - Many pixel formats supported (RGB, packed and planar YUV, partial
 93   planar YUV).                                     93   planar YUV).
 94                                                    94 
 95 - The VDIC subdev supports motion compensated      95 - The VDIC subdev supports motion compensated de-interlacing, with three
 96   motion compensation modes: low, medium, and      96   motion compensation modes: low, medium, and high motion. Pipelines are
 97   defined that allow sending frames to the VDI     97   defined that allow sending frames to the VDIC subdev directly from the
 98   CSI. There is also support in the future for     98   CSI. There is also support in the future for sending frames to the
 99   VDIC from memory buffers via a output/mem2me     99   VDIC from memory buffers via a output/mem2mem devices.
100                                                   100 
101 - Includes a Frame Interval Monitor (FIM) that    101 - Includes a Frame Interval Monitor (FIM) that can correct vertical sync
102   problems with the ADV718x video decoders.       102   problems with the ADV718x video decoders.
103                                                   103 
104                                                   104 
105 Topology                                          105 Topology
106 --------                                          106 --------
107                                                   107 
108 The following shows the media topologies for t    108 The following shows the media topologies for the i.MX6Q SabreSD and
109 i.MX6Q SabreAuto. Refer to these diagrams in t    109 i.MX6Q SabreAuto. Refer to these diagrams in the entity descriptions
110 in the next section.                              110 in the next section.
111                                                   111 
112 The i.MX5/6 topologies can differ upstream fro    112 The i.MX5/6 topologies can differ upstream from the IPUv3 CSI video
113 multiplexers, but the internal IPUv3 topology     113 multiplexers, but the internal IPUv3 topology downstream from there
114 is common to all i.MX5/6 platforms. For exampl    114 is common to all i.MX5/6 platforms. For example, the SabreSD, with the
115 MIPI CSI-2 OV5640 sensor, requires the i.MX6 M    115 MIPI CSI-2 OV5640 sensor, requires the i.MX6 MIPI CSI-2 receiver. But
116 the SabreAuto has only the ADV7180 decoder on     116 the SabreAuto has only the ADV7180 decoder on a parallel bt.656 bus, and
117 therefore does not require the MIPI CSI-2 rece    117 therefore does not require the MIPI CSI-2 receiver, so it is missing in
118 its graph.                                        118 its graph.
119                                                   119 
120 .. _imx6q_topology_graph:                         120 .. _imx6q_topology_graph:
121                                                   121 
122 .. kernel-figure:: imx6q-sabresd.dot              122 .. kernel-figure:: imx6q-sabresd.dot
123     :alt:   Diagram of the i.MX6Q SabreSD medi    123     :alt:   Diagram of the i.MX6Q SabreSD media pipeline topology
124     :align: center                                124     :align: center
125                                                   125 
126     Media pipeline graph on i.MX6Q SabreSD        126     Media pipeline graph on i.MX6Q SabreSD
127                                                   127 
128 .. kernel-figure:: imx6q-sabreauto.dot            128 .. kernel-figure:: imx6q-sabreauto.dot
129     :alt:   Diagram of the i.MX6Q SabreAuto me    129     :alt:   Diagram of the i.MX6Q SabreAuto media pipeline topology
130     :align: center                                130     :align: center
131                                                   131 
132     Media pipeline graph on i.MX6Q SabreAuto      132     Media pipeline graph on i.MX6Q SabreAuto
133                                                   133 
134 Entities                                          134 Entities
135 --------                                          135 --------
136                                                   136 
137 imx6-mipi-csi2                                    137 imx6-mipi-csi2
138 --------------                                    138 --------------
139                                                   139 
140 This is the MIPI CSI-2 receiver entity. It has    140 This is the MIPI CSI-2 receiver entity. It has one sink pad to receive
141 the MIPI CSI-2 stream (usually from a MIPI CSI    141 the MIPI CSI-2 stream (usually from a MIPI CSI-2 camera sensor). It has
142 four source pads, corresponding to the four MI    142 four source pads, corresponding to the four MIPI CSI-2 demuxed virtual
143 channel outputs. Multiple source pads can be e    143 channel outputs. Multiple source pads can be enabled to independently
144 stream from multiple virtual channels.            144 stream from multiple virtual channels.
145                                                   145 
146 This entity actually consists of two sub-block    146 This entity actually consists of two sub-blocks. One is the MIPI CSI-2
147 core. This is a Synopsys Designware MIPI CSI-2    147 core. This is a Synopsys Designware MIPI CSI-2 core. The other sub-block
148 is a "CSI-2 to IPU gasket". The gasket acts as    148 is a "CSI-2 to IPU gasket". The gasket acts as a demultiplexer of the
149 four virtual channels streams, providing four     149 four virtual channels streams, providing four separate parallel buses
150 containing each virtual channel that are route    150 containing each virtual channel that are routed to CSIs or video
151 multiplexers as described below.                  151 multiplexers as described below.
152                                                   152 
153 On i.MX6 solo/dual-lite, all four virtual chan    153 On i.MX6 solo/dual-lite, all four virtual channel buses are routed to
154 two video multiplexers. Both CSI0 and CSI1 can    154 two video multiplexers. Both CSI0 and CSI1 can receive any virtual
155 channel, as selected by the video multiplexers    155 channel, as selected by the video multiplexers.
156                                                   156 
157 On i.MX6 Quad, virtual channel 0 is routed to     157 On i.MX6 Quad, virtual channel 0 is routed to IPU1-CSI0 (after selected
158 by a video mux), virtual channels 1 and 2 are     158 by a video mux), virtual channels 1 and 2 are hard-wired to IPU1-CSI1
159 and IPU2-CSI0, respectively, and virtual chann    159 and IPU2-CSI0, respectively, and virtual channel 3 is routed to
160 IPU2-CSI1 (again selected by a video mux).        160 IPU2-CSI1 (again selected by a video mux).
161                                                   161 
162 ipuX_csiY_mux                                     162 ipuX_csiY_mux
163 -------------                                     163 -------------
164                                                   164 
165 These are the video multiplexers. They have tw    165 These are the video multiplexers. They have two or more sink pads to
166 select from either camera sensors with a paral    166 select from either camera sensors with a parallel interface, or from
167 MIPI CSI-2 virtual channels from imx6-mipi-csi    167 MIPI CSI-2 virtual channels from imx6-mipi-csi2 entity. They have a
168 single source pad that routes to a CSI (ipuX_c    168 single source pad that routes to a CSI (ipuX_csiY entities).
169                                                   169 
170 On i.MX6 solo/dual-lite, there are two video m    170 On i.MX6 solo/dual-lite, there are two video mux entities. One sits
171 in front of IPU1-CSI0 to select between a para    171 in front of IPU1-CSI0 to select between a parallel sensor and any of
172 the four MIPI CSI-2 virtual channels (a total     172 the four MIPI CSI-2 virtual channels (a total of five sink pads). The
173 other mux sits in front of IPU1-CSI1, and agai    173 other mux sits in front of IPU1-CSI1, and again has five sink pads to
174 select between a parallel sensor and any of th    174 select between a parallel sensor and any of the four MIPI CSI-2 virtual
175 channels.                                         175 channels.
176                                                   176 
177 On i.MX6 Quad, there are two video mux entitie    177 On i.MX6 Quad, there are two video mux entities. One sits in front of
178 IPU1-CSI0 to select between a parallel sensor     178 IPU1-CSI0 to select between a parallel sensor and MIPI CSI-2 virtual
179 channel 0 (two sink pads). The other mux sits     179 channel 0 (two sink pads). The other mux sits in front of IPU2-CSI1 to
180 select between a parallel sensor and MIPI CSI-    180 select between a parallel sensor and MIPI CSI-2 virtual channel 3 (two
181 sink pads).                                       181 sink pads).
182                                                   182 
183 ipuX_csiY                                         183 ipuX_csiY
184 ---------                                         184 ---------
185                                                   185 
186 These are the CSI entities. They have a single    186 These are the CSI entities. They have a single sink pad receiving from
187 either a video mux or from a MIPI CSI-2 virtua    187 either a video mux or from a MIPI CSI-2 virtual channel as described
188 above.                                            188 above.
189                                                   189 
190 This entity has two source pads. The first sou    190 This entity has two source pads. The first source pad can link directly
191 to the ipuX_vdic entity or the ipuX_ic_prp ent    191 to the ipuX_vdic entity or the ipuX_ic_prp entity, using hardware links
192 that require no IDMAC memory buffer transfer.     192 that require no IDMAC memory buffer transfer.
193                                                   193 
194 When the direct source pad is routed to the ip    194 When the direct source pad is routed to the ipuX_ic_prp entity, frames
195 from the CSI can be processed by one or both o    195 from the CSI can be processed by one or both of the IC pre-processing
196 tasks.                                            196 tasks.
197                                                   197 
198 When the direct source pad is routed to the ip    198 When the direct source pad is routed to the ipuX_vdic entity, the VDIC
199 will carry out motion-compensated de-interlace    199 will carry out motion-compensated de-interlace using "high motion" mode
200 (see description of ipuX_vdic entity).            200 (see description of ipuX_vdic entity).
201                                                   201 
202 The second source pad sends video frames direc    202 The second source pad sends video frames directly to memory buffers
203 via the SMFC and an IDMAC channel, bypassing I    203 via the SMFC and an IDMAC channel, bypassing IC pre-processing. This
204 source pad is routed to a capture device node,    204 source pad is routed to a capture device node, with a node name of the
205 format "ipuX_csiY capture".                       205 format "ipuX_csiY capture".
206                                                   206 
207 Note that since the IDMAC source pad makes use    207 Note that since the IDMAC source pad makes use of an IDMAC channel,
208 pixel reordering within the same colorspace ca    208 pixel reordering within the same colorspace can be carried out by the
209 IDMAC channel. For example, if the CSI sink pa    209 IDMAC channel. For example, if the CSI sink pad is receiving in UYVY
210 order, the capture device linked to the IDMAC     210 order, the capture device linked to the IDMAC source pad can capture
211 in YUYV order. Also, if the CSI sink pad is re    211 in YUYV order. Also, if the CSI sink pad is receiving a packed YUV
212 format, the capture device can capture a plana    212 format, the capture device can capture a planar YUV format such as
213 YUV420.                                           213 YUV420.
214                                                   214 
215 The IDMAC channel at the IDMAC source pad also    215 The IDMAC channel at the IDMAC source pad also supports simple
216 interweave without motion compensation, which     216 interweave without motion compensation, which is activated if the source
217 pad's field type is sequential top-bottom or b    217 pad's field type is sequential top-bottom or bottom-top, and the
218 requested capture interface field type is set     218 requested capture interface field type is set to interlaced (t-b, b-t,
219 or unqualified interlaced). The capture interf    219 or unqualified interlaced). The capture interface will enforce the same
220 field order as the source pad field order (int    220 field order as the source pad field order (interlaced-bt if source pad
221 is seq-bt, interlaced-tb if source pad is seq-    221 is seq-bt, interlaced-tb if source pad is seq-tb).
222                                                   222 
223 For events produced by ipuX_csiY, see ref:`imx    223 For events produced by ipuX_csiY, see ref:`imx_api_ipuX_csiY`.
224                                                   224 
225 Cropping in ipuX_csiY                             225 Cropping in ipuX_csiY
226 ---------------------                             226 ---------------------
227                                                   227 
228 The CSI supports cropping the incoming raw sen    228 The CSI supports cropping the incoming raw sensor frames. This is
229 implemented in the ipuX_csiY entities at the s    229 implemented in the ipuX_csiY entities at the sink pad, using the
230 crop selection subdev API.                        230 crop selection subdev API.
231                                                   231 
232 The CSI also supports fixed divide-by-two down    232 The CSI also supports fixed divide-by-two downscaling independently in
233 width and height. This is implemented in the i    233 width and height. This is implemented in the ipuX_csiY entities at
234 the sink pad, using the compose selection subd    234 the sink pad, using the compose selection subdev API.
235                                                   235 
236 The output rectangle at the ipuX_csiY source p    236 The output rectangle at the ipuX_csiY source pad is the same as
237 the compose rectangle at the sink pad. So the     237 the compose rectangle at the sink pad. So the source pad rectangle
238 cannot be negotiated, it must be set using the    238 cannot be negotiated, it must be set using the compose selection
239 API at sink pad (if /2 downscale is desired, o    239 API at sink pad (if /2 downscale is desired, otherwise source pad
240 rectangle is equal to incoming rectangle).        240 rectangle is equal to incoming rectangle).
241                                                   241 
242 To give an example of crop and /2 downscale, t    242 To give an example of crop and /2 downscale, this will crop a
243 1280x960 input frame to 640x480, and then /2 d    243 1280x960 input frame to 640x480, and then /2 downscale in both
244 dimensions to 320x240 (assumes ipu1_csi0 is li    244 dimensions to 320x240 (assumes ipu1_csi0 is linked to ipu1_csi0_mux):
245                                                   245 
246 .. code-block:: none                              246 .. code-block:: none
247                                                   247 
248    media-ctl -V "'ipu1_csi0_mux':2[fmt:UYVY2X8    248    media-ctl -V "'ipu1_csi0_mux':2[fmt:UYVY2X8/1280x960]"
249    media-ctl -V "'ipu1_csi0':0[crop:(0,0)/640x    249    media-ctl -V "'ipu1_csi0':0[crop:(0,0)/640x480]"
250    media-ctl -V "'ipu1_csi0':0[compose:(0,0)/3    250    media-ctl -V "'ipu1_csi0':0[compose:(0,0)/320x240]"
251                                                   251 
252 Frame Skipping in ipuX_csiY                       252 Frame Skipping in ipuX_csiY
253 ---------------------------                       253 ---------------------------
254                                                   254 
255 The CSI supports frame rate decimation, via fr    255 The CSI supports frame rate decimation, via frame skipping. Frame
256 rate decimation is specified by setting the fr    256 rate decimation is specified by setting the frame intervals at
257 sink and source pads. The ipuX_csiY entity the    257 sink and source pads. The ipuX_csiY entity then applies the best
258 frame skip setting to the CSI to achieve the d    258 frame skip setting to the CSI to achieve the desired frame rate
259 at the source pad.                                259 at the source pad.
260                                                   260 
261 The following example reduces an assumed incom    261 The following example reduces an assumed incoming 60 Hz frame
262 rate by half at the IDMAC output source pad:      262 rate by half at the IDMAC output source pad:
263                                                   263 
264 .. code-block:: none                              264 .. code-block:: none
265                                                   265 
266    media-ctl -V "'ipu1_csi0':0[fmt:UYVY2X8/640    266    media-ctl -V "'ipu1_csi0':0[fmt:UYVY2X8/640x480@1/60]"
267    media-ctl -V "'ipu1_csi0':2[fmt:UYVY2X8/640    267    media-ctl -V "'ipu1_csi0':2[fmt:UYVY2X8/640x480@1/30]"
268                                                   268 
269 Frame Interval Monitor in ipuX_csiY               269 Frame Interval Monitor in ipuX_csiY
270 -----------------------------------               270 -----------------------------------
271                                                   271 
272 See ref:`imx_api_FIM`.                            272 See ref:`imx_api_FIM`.
273                                                   273 
274 ipuX_vdic                                         274 ipuX_vdic
275 ---------                                         275 ---------
276                                                   276 
277 The VDIC carries out motion compensated de-int    277 The VDIC carries out motion compensated de-interlacing, with three
278 motion compensation modes: low, medium, and hi    278 motion compensation modes: low, medium, and high motion. The mode is
279 specified with the menu control V4L2_CID_DEINT    279 specified with the menu control V4L2_CID_DEINTERLACING_MODE. The VDIC
280 has two sink pads and a single source pad.        280 has two sink pads and a single source pad.
281                                                   281 
282 The direct sink pad receives from an ipuX_csiY    282 The direct sink pad receives from an ipuX_csiY direct pad. With this
283 link the VDIC can only operate in high motion     283 link the VDIC can only operate in high motion mode.
284                                                   284 
285 When the IDMAC sink pad is activated, it recei    285 When the IDMAC sink pad is activated, it receives from an output
286 or mem2mem device node. With this pipeline, th    286 or mem2mem device node. With this pipeline, the VDIC can also operate
287 in low and medium modes, because these modes r    287 in low and medium modes, because these modes require receiving
288 frames from memory buffers. Note that an outpu    288 frames from memory buffers. Note that an output or mem2mem device
289 is not implemented yet, so this sink pad curre    289 is not implemented yet, so this sink pad currently has no links.
290                                                   290 
291 The source pad routes to the IC pre-processing    291 The source pad routes to the IC pre-processing entity ipuX_ic_prp.
292                                                   292 
293 ipuX_ic_prp                                       293 ipuX_ic_prp
294 -----------                                       294 -----------
295                                                   295 
296 This is the IC pre-processing entity. It acts     296 This is the IC pre-processing entity. It acts as a router, routing
297 data from its sink pad to one or both of its s    297 data from its sink pad to one or both of its source pads.
298                                                   298 
299 This entity has a single sink pad. The sink pa    299 This entity has a single sink pad. The sink pad can receive from the
300 ipuX_csiY direct pad, or from ipuX_vdic.          300 ipuX_csiY direct pad, or from ipuX_vdic.
301                                                   301 
302 This entity has two source pads. One source pa    302 This entity has two source pads. One source pad routes to the
303 pre-process encode task entity (ipuX_ic_prpenc    303 pre-process encode task entity (ipuX_ic_prpenc), the other to the
304 pre-process viewfinder task entity (ipuX_ic_pr    304 pre-process viewfinder task entity (ipuX_ic_prpvf). Both source pads
305 can be activated at the same time if the sink     305 can be activated at the same time if the sink pad is receiving from
306 ipuX_csiY. Only the source pad to the pre-proc    306 ipuX_csiY. Only the source pad to the pre-process viewfinder task entity
307 can be activated if the sink pad is receiving     307 can be activated if the sink pad is receiving from ipuX_vdic (frames
308 from the VDIC can only be processed by the pre    308 from the VDIC can only be processed by the pre-process viewfinder task).
309                                                   309 
310 ipuX_ic_prpenc                                    310 ipuX_ic_prpenc
311 --------------                                    311 --------------
312                                                   312 
313 This is the IC pre-processing encode entity. I    313 This is the IC pre-processing encode entity. It has a single sink
314 pad from ipuX_ic_prp, and a single source pad.    314 pad from ipuX_ic_prp, and a single source pad. The source pad is
315 routed to a capture device node, with a node n    315 routed to a capture device node, with a node name of the format
316 "ipuX_ic_prpenc capture".                         316 "ipuX_ic_prpenc capture".
317                                                   317 
318 This entity performs the IC pre-process encode    318 This entity performs the IC pre-process encode task operations:
319 color-space conversion, resizing (downscaling     319 color-space conversion, resizing (downscaling and upscaling),
320 horizontal and vertical flip, and 90/270 degre    320 horizontal and vertical flip, and 90/270 degree rotation. Flip
321 and rotation are provided via standard V4L2 co    321 and rotation are provided via standard V4L2 controls.
322                                                   322 
323 Like the ipuX_csiY IDMAC source, this entity a    323 Like the ipuX_csiY IDMAC source, this entity also supports simple
324 de-interlace without motion compensation, and     324 de-interlace without motion compensation, and pixel reordering.
325                                                   325 
326 ipuX_ic_prpvf                                     326 ipuX_ic_prpvf
327 -------------                                     327 -------------
328                                                   328 
329 This is the IC pre-processing viewfinder entit    329 This is the IC pre-processing viewfinder entity. It has a single sink
330 pad from ipuX_ic_prp, and a single source pad.    330 pad from ipuX_ic_prp, and a single source pad. The source pad is routed
331 to a capture device node, with a node name of     331 to a capture device node, with a node name of the format
332 "ipuX_ic_prpvf capture".                          332 "ipuX_ic_prpvf capture".
333                                                   333 
334 This entity is identical in operation to ipuX_    334 This entity is identical in operation to ipuX_ic_prpenc, with the same
335 resizing and CSC operations and flip/rotation     335 resizing and CSC operations and flip/rotation controls. It will receive
336 and process de-interlaced frames from the ipuX    336 and process de-interlaced frames from the ipuX_vdic if ipuX_ic_prp is
337 receiving from ipuX_vdic.                         337 receiving from ipuX_vdic.
338                                                   338 
339 Like the ipuX_csiY IDMAC source, this entity s    339 Like the ipuX_csiY IDMAC source, this entity supports simple
340 interweaving without motion compensation. Howe    340 interweaving without motion compensation. However, note that if the
341 ipuX_vdic is included in the pipeline (ipuX_ic    341 ipuX_vdic is included in the pipeline (ipuX_ic_prp is receiving from
342 ipuX_vdic), it's not possible to use interweav    342 ipuX_vdic), it's not possible to use interweave in ipuX_ic_prpvf,
343 since the ipuX_vdic has already carried out de    343 since the ipuX_vdic has already carried out de-interlacing (with
344 motion compensation) and therefore the field t    344 motion compensation) and therefore the field type output from
345 ipuX_vdic can only be none (progressive).         345 ipuX_vdic can only be none (progressive).
346                                                   346 
347 Capture Pipelines                                 347 Capture Pipelines
348 -----------------                                 348 -----------------
349                                                   349 
350 The following describe the various use-cases s    350 The following describe the various use-cases supported by the pipelines.
351                                                   351 
352 The links shown do not include the backend sen    352 The links shown do not include the backend sensor, video mux, or mipi
353 csi-2 receiver links. This depends on the type    353 csi-2 receiver links. This depends on the type of sensor interface
354 (parallel or mipi csi-2). So these pipelines b    354 (parallel or mipi csi-2). So these pipelines begin with:
355                                                   355 
356 sensor -> ipuX_csiY_mux -> ...                    356 sensor -> ipuX_csiY_mux -> ...
357                                                   357 
358 for parallel sensors, or:                         358 for parallel sensors, or:
359                                                   359 
360 sensor -> imx6-mipi-csi2 -> (ipuX_csiY_mux) ->    360 sensor -> imx6-mipi-csi2 -> (ipuX_csiY_mux) -> ...
361                                                   361 
362 for mipi csi-2 sensors. The imx6-mipi-csi2 rec    362 for mipi csi-2 sensors. The imx6-mipi-csi2 receiver may need to route
363 to the video mux (ipuX_csiY_mux) before sendin    363 to the video mux (ipuX_csiY_mux) before sending to the CSI, depending
364 on the mipi csi-2 virtual channel, hence ipuX_    364 on the mipi csi-2 virtual channel, hence ipuX_csiY_mux is shown in
365 parenthesis.                                      365 parenthesis.
366                                                   366 
367 Unprocessed Video Capture:                        367 Unprocessed Video Capture:
368 --------------------------                        368 --------------------------
369                                                   369 
370 Send frames directly from sensor to camera dev    370 Send frames directly from sensor to camera device interface node, with
371 no conversions, via ipuX_csiY IDMAC source pad    371 no conversions, via ipuX_csiY IDMAC source pad:
372                                                   372 
373 -> ipuX_csiY:2 -> ipuX_csiY capture               373 -> ipuX_csiY:2 -> ipuX_csiY capture
374                                                   374 
375 IC Direct Conversions:                            375 IC Direct Conversions:
376 ----------------------                            376 ----------------------
377                                                   377 
378 This pipeline uses the preprocess encode entit    378 This pipeline uses the preprocess encode entity to route frames directly
379 from the CSI to the IC, to carry out scaling u    379 from the CSI to the IC, to carry out scaling up to 1024x1024 resolution,
380 CSC, flipping, and image rotation:                380 CSC, flipping, and image rotation:
381                                                   381 
382 -> ipuX_csiY:1 -> 0:ipuX_ic_prp:1 -> 0:ipuX_ic    382 -> ipuX_csiY:1 -> 0:ipuX_ic_prp:1 -> 0:ipuX_ic_prpenc:1 -> ipuX_ic_prpenc capture
383                                                   383 
384 Motion Compensated De-interlace:                  384 Motion Compensated De-interlace:
385 --------------------------------                  385 --------------------------------
386                                                   386 
387 This pipeline routes frames from the CSI direc    387 This pipeline routes frames from the CSI direct pad to the VDIC entity to
388 support motion-compensated de-interlacing (hig    388 support motion-compensated de-interlacing (high motion mode only),
389 scaling up to 1024x1024, CSC, flip, and rotati    389 scaling up to 1024x1024, CSC, flip, and rotation:
390                                                   390 
391 -> ipuX_csiY:1 -> 0:ipuX_vdic:2 -> 0:ipuX_ic_p    391 -> ipuX_csiY:1 -> 0:ipuX_vdic:2 -> 0:ipuX_ic_prp:2 -> 0:ipuX_ic_prpvf:1 -> ipuX_ic_prpvf capture
392                                                   392 
393                                                   393 
394 Usage Notes                                       394 Usage Notes
395 -----------                                       395 -----------
396                                                   396 
397 To aid in configuration and for backward compa    397 To aid in configuration and for backward compatibility with V4L2
398 applications that access controls only from vi    398 applications that access controls only from video device nodes, the
399 capture device interfaces inherit controls fro    399 capture device interfaces inherit controls from the active entities
400 in the current pipeline, so controls can be ac    400 in the current pipeline, so controls can be accessed either directly
401 from the subdev or from the active capture dev    401 from the subdev or from the active capture device interface. For
402 example, the FIM controls are available either    402 example, the FIM controls are available either from the ipuX_csiY
403 subdevs or from the active capture device.        403 subdevs or from the active capture device.
404                                                   404 
405 The following are specific usage notes for the    405 The following are specific usage notes for the Sabre* reference
406 boards:                                           406 boards:
407                                                   407 
408                                                   408 
409 i.MX6Q SabreLite with OV5642 and OV5640           409 i.MX6Q SabreLite with OV5642 and OV5640
410 ---------------------------------------           410 ---------------------------------------
411                                                   411 
412 This platform requires the OmniVision OV5642 m    412 This platform requires the OmniVision OV5642 module with a parallel
413 camera interface, and the OV5640 module with a    413 camera interface, and the OV5640 module with a MIPI CSI-2
414 interface. Both modules are available from Bou    414 interface. Both modules are available from Boundary Devices:
415                                                   415 
416 - https://boundarydevices.com/product/nit6x_5m    416 - https://boundarydevices.com/product/nit6x_5mp
417 - https://boundarydevices.com/product/nit6x_5m    417 - https://boundarydevices.com/product/nit6x_5mp_mipi
418                                                   418 
419 Note that if only one camera module is availab    419 Note that if only one camera module is available, the other sensor
420 node can be disabled in the device tree.          420 node can be disabled in the device tree.
421                                                   421 
422 The OV5642 module is connected to the parallel    422 The OV5642 module is connected to the parallel bus input on the i.MX
423 internal video mux to IPU1 CSI0. It's i2c bus     423 internal video mux to IPU1 CSI0. It's i2c bus connects to i2c bus 2.
424                                                   424 
425 The MIPI CSI-2 OV5640 module is connected to t    425 The MIPI CSI-2 OV5640 module is connected to the i.MX internal MIPI CSI-2
426 receiver, and the four virtual channel outputs    426 receiver, and the four virtual channel outputs from the receiver are
427 routed as follows: vc0 to the IPU1 CSI0 mux, v    427 routed as follows: vc0 to the IPU1 CSI0 mux, vc1 directly to IPU1 CSI1,
428 vc2 directly to IPU2 CSI0, and vc3 to the IPU2    428 vc2 directly to IPU2 CSI0, and vc3 to the IPU2 CSI1 mux. The OV5640 is
429 also connected to i2c bus 2 on the SabreLite,     429 also connected to i2c bus 2 on the SabreLite, therefore the OV5642 and
430 OV5640 must not share the same i2c slave addre    430 OV5640 must not share the same i2c slave address.
431                                                   431 
432 The following basic example configures unproce    432 The following basic example configures unprocessed video capture
433 pipelines for both sensors. The OV5642 is rout    433 pipelines for both sensors. The OV5642 is routed to ipu1_csi0, and
434 the OV5640, transmitting on MIPI CSI-2 virtual    434 the OV5640, transmitting on MIPI CSI-2 virtual channel 1 (which is
435 imx6-mipi-csi2 pad 2), is routed to ipu1_csi1.    435 imx6-mipi-csi2 pad 2), is routed to ipu1_csi1. Both sensors are
436 configured to output 640x480, and the OV5642 o    436 configured to output 640x480, and the OV5642 outputs YUYV2X8, the
437 OV5640 UYVY2X8:                                   437 OV5640 UYVY2X8:
438                                                   438 
439 .. code-block:: none                              439 .. code-block:: none
440                                                   440 
441    # Setup links for OV5642                       441    # Setup links for OV5642
442    media-ctl -l "'ov5642 1-0042':0 -> 'ipu1_cs    442    media-ctl -l "'ov5642 1-0042':0 -> 'ipu1_csi0_mux':1[1]"
443    media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_cs    443    media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_csi0':0[1]"
444    media-ctl -l "'ipu1_csi0':2 -> 'ipu1_csi0 c    444    media-ctl -l "'ipu1_csi0':2 -> 'ipu1_csi0 capture':0[1]"
445    # Setup links for OV5640                       445    # Setup links for OV5640
446    media-ctl -l "'ov5640 1-0040':0 -> 'imx6-mi    446    media-ctl -l "'ov5640 1-0040':0 -> 'imx6-mipi-csi2':0[1]"
447    media-ctl -l "'imx6-mipi-csi2':2 -> 'ipu1_c    447    media-ctl -l "'imx6-mipi-csi2':2 -> 'ipu1_csi1':0[1]"
448    media-ctl -l "'ipu1_csi1':2 -> 'ipu1_csi1 c    448    media-ctl -l "'ipu1_csi1':2 -> 'ipu1_csi1 capture':0[1]"
449    # Configure pads for OV5642 pipeline           449    # Configure pads for OV5642 pipeline
450    media-ctl -V "'ov5642 1-0042':0 [fmt:YUYV2X    450    media-ctl -V "'ov5642 1-0042':0 [fmt:YUYV2X8/640x480 field:none]"
451    media-ctl -V "'ipu1_csi0_mux':2 [fmt:YUYV2X    451    media-ctl -V "'ipu1_csi0_mux':2 [fmt:YUYV2X8/640x480 field:none]"
452    media-ctl -V "'ipu1_csi0':2 [fmt:AYUV32/640    452    media-ctl -V "'ipu1_csi0':2 [fmt:AYUV32/640x480 field:none]"
453    # Configure pads for OV5640 pipeline           453    # Configure pads for OV5640 pipeline
454    media-ctl -V "'ov5640 1-0040':0 [fmt:UYVY2X    454    media-ctl -V "'ov5640 1-0040':0 [fmt:UYVY2X8/640x480 field:none]"
455    media-ctl -V "'imx6-mipi-csi2':2 [fmt:UYVY2    455    media-ctl -V "'imx6-mipi-csi2':2 [fmt:UYVY2X8/640x480 field:none]"
456    media-ctl -V "'ipu1_csi1':2 [fmt:AYUV32/640    456    media-ctl -V "'ipu1_csi1':2 [fmt:AYUV32/640x480 field:none]"
457                                                   457 
458 Streaming can then begin independently on the     458 Streaming can then begin independently on the capture device nodes
459 "ipu1_csi0 capture" and "ipu1_csi1 capture". T    459 "ipu1_csi0 capture" and "ipu1_csi1 capture". The v4l2-ctl tool can
460 be used to select any supported YUV pixelforma    460 be used to select any supported YUV pixelformat on the capture device
461 nodes, including planar.                          461 nodes, including planar.
462                                                   462 
463 i.MX6Q SabreAuto with ADV7180 decoder             463 i.MX6Q SabreAuto with ADV7180 decoder
464 -------------------------------------             464 -------------------------------------
465                                                   465 
466 On the i.MX6Q SabreAuto, an on-board ADV7180 S    466 On the i.MX6Q SabreAuto, an on-board ADV7180 SD decoder is connected to the
467 parallel bus input on the internal video mux t    467 parallel bus input on the internal video mux to IPU1 CSI0.
468                                                   468 
469 The following example configures a pipeline to    469 The following example configures a pipeline to capture from the ADV7180
470 video decoder, assuming NTSC 720x480 input sig    470 video decoder, assuming NTSC 720x480 input signals, using simple
471 interweave (unconverted and without motion com    471 interweave (unconverted and without motion compensation). The adv7180
472 must output sequential or alternating fields (    472 must output sequential or alternating fields (field type 'seq-bt' for
473 NTSC, or 'alternate'):                            473 NTSC, or 'alternate'):
474                                                   474 
475 .. code-block:: none                              475 .. code-block:: none
476                                                   476 
477    # Setup links                                  477    # Setup links
478    media-ctl -l "'adv7180 3-0021':0 -> 'ipu1_c    478    media-ctl -l "'adv7180 3-0021':0 -> 'ipu1_csi0_mux':1[1]"
479    media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_cs    479    media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_csi0':0[1]"
480    media-ctl -l "'ipu1_csi0':2 -> 'ipu1_csi0 c    480    media-ctl -l "'ipu1_csi0':2 -> 'ipu1_csi0 capture':0[1]"
481    # Configure pads                               481    # Configure pads
482    media-ctl -V "'adv7180 3-0021':0 [fmt:UYVY2    482    media-ctl -V "'adv7180 3-0021':0 [fmt:UYVY2X8/720x480 field:seq-bt]"
483    media-ctl -V "'ipu1_csi0_mux':2 [fmt:UYVY2X    483    media-ctl -V "'ipu1_csi0_mux':2 [fmt:UYVY2X8/720x480]"
484    media-ctl -V "'ipu1_csi0':2 [fmt:AYUV32/720    484    media-ctl -V "'ipu1_csi0':2 [fmt:AYUV32/720x480]"
485    # Configure "ipu1_csi0 capture" interface (    485    # Configure "ipu1_csi0 capture" interface (assumed at /dev/video4)
486    v4l2-ctl -d4 --set-fmt-video=field=interlac    486    v4l2-ctl -d4 --set-fmt-video=field=interlaced_bt
487                                                   487 
488 Streaming can then begin on /dev/video4. The v    488 Streaming can then begin on /dev/video4. The v4l2-ctl tool can also be
489 used to select any supported YUV pixelformat o    489 used to select any supported YUV pixelformat on /dev/video4.
490                                                   490 
491 This example configures a pipeline to capture     491 This example configures a pipeline to capture from the ADV7180
492 video decoder, assuming PAL 720x576 input sign    492 video decoder, assuming PAL 720x576 input signals, with Motion
493 Compensated de-interlacing. The adv7180 must o    493 Compensated de-interlacing. The adv7180 must output sequential or
494 alternating fields (field type 'seq-tb' for PA    494 alternating fields (field type 'seq-tb' for PAL, or 'alternate').
495                                                   495 
496 .. code-block:: none                              496 .. code-block:: none
497                                                   497 
498    # Setup links                                  498    # Setup links
499    media-ctl -l "'adv7180 3-0021':0 -> 'ipu1_c    499    media-ctl -l "'adv7180 3-0021':0 -> 'ipu1_csi0_mux':1[1]"
500    media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_cs    500    media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_csi0':0[1]"
501    media-ctl -l "'ipu1_csi0':1 -> 'ipu1_vdic':    501    media-ctl -l "'ipu1_csi0':1 -> 'ipu1_vdic':0[1]"
502    media-ctl -l "'ipu1_vdic':2 -> 'ipu1_ic_prp    502    media-ctl -l "'ipu1_vdic':2 -> 'ipu1_ic_prp':0[1]"
503    media-ctl -l "'ipu1_ic_prp':2 -> 'ipu1_ic_p    503    media-ctl -l "'ipu1_ic_prp':2 -> 'ipu1_ic_prpvf':0[1]"
504    media-ctl -l "'ipu1_ic_prpvf':1 -> 'ipu1_ic    504    media-ctl -l "'ipu1_ic_prpvf':1 -> 'ipu1_ic_prpvf capture':0[1]"
505    # Configure pads                               505    # Configure pads
506    media-ctl -V "'adv7180 3-0021':0 [fmt:UYVY2    506    media-ctl -V "'adv7180 3-0021':0 [fmt:UYVY2X8/720x576 field:seq-tb]"
507    media-ctl -V "'ipu1_csi0_mux':2 [fmt:UYVY2X    507    media-ctl -V "'ipu1_csi0_mux':2 [fmt:UYVY2X8/720x576]"
508    media-ctl -V "'ipu1_csi0':1 [fmt:AYUV32/720    508    media-ctl -V "'ipu1_csi0':1 [fmt:AYUV32/720x576]"
509    media-ctl -V "'ipu1_vdic':2 [fmt:AYUV32/720    509    media-ctl -V "'ipu1_vdic':2 [fmt:AYUV32/720x576 field:none]"
510    media-ctl -V "'ipu1_ic_prp':2 [fmt:AYUV32/7    510    media-ctl -V "'ipu1_ic_prp':2 [fmt:AYUV32/720x576 field:none]"
511    media-ctl -V "'ipu1_ic_prpvf':1 [fmt:AYUV32    511    media-ctl -V "'ipu1_ic_prpvf':1 [fmt:AYUV32/720x576 field:none]"
512    # Configure "ipu1_ic_prpvf capture" interfa    512    # Configure "ipu1_ic_prpvf capture" interface (assumed at /dev/video2)
513    v4l2-ctl -d2 --set-fmt-video=field=none        513    v4l2-ctl -d2 --set-fmt-video=field=none
514                                                   514 
515 Streaming can then begin on /dev/video2. The v    515 Streaming can then begin on /dev/video2. The v4l2-ctl tool can also be
516 used to select any supported YUV pixelformat o    516 used to select any supported YUV pixelformat on /dev/video2.
517                                                   517 
518 This platform accepts Composite Video analog i    518 This platform accepts Composite Video analog inputs to the ADV7180 on
519 Ain1 (connector J42).                             519 Ain1 (connector J42).
520                                                   520 
521 i.MX6DL SabreAuto with ADV7180 decoder            521 i.MX6DL SabreAuto with ADV7180 decoder
522 --------------------------------------            522 --------------------------------------
523                                                   523 
524 On the i.MX6DL SabreAuto, an on-board ADV7180     524 On the i.MX6DL SabreAuto, an on-board ADV7180 SD decoder is connected to the
525 parallel bus input on the internal video mux t    525 parallel bus input on the internal video mux to IPU1 CSI0.
526                                                   526 
527 The following example configures a pipeline to    527 The following example configures a pipeline to capture from the ADV7180
528 video decoder, assuming NTSC 720x480 input sig    528 video decoder, assuming NTSC 720x480 input signals, using simple
529 interweave (unconverted and without motion com    529 interweave (unconverted and without motion compensation). The adv7180
530 must output sequential or alternating fields (    530 must output sequential or alternating fields (field type 'seq-bt' for
531 NTSC, or 'alternate'):                            531 NTSC, or 'alternate'):
532                                                   532 
533 .. code-block:: none                              533 .. code-block:: none
534                                                   534 
535    # Setup links                                  535    # Setup links
536    media-ctl -l "'adv7180 4-0021':0 -> 'ipu1_c    536    media-ctl -l "'adv7180 4-0021':0 -> 'ipu1_csi0_mux':4[1]"
537    media-ctl -l "'ipu1_csi0_mux':5 -> 'ipu1_cs    537    media-ctl -l "'ipu1_csi0_mux':5 -> 'ipu1_csi0':0[1]"
538    media-ctl -l "'ipu1_csi0':2 -> 'ipu1_csi0 c    538    media-ctl -l "'ipu1_csi0':2 -> 'ipu1_csi0 capture':0[1]"
539    # Configure pads                               539    # Configure pads
540    media-ctl -V "'adv7180 4-0021':0 [fmt:UYVY2    540    media-ctl -V "'adv7180 4-0021':0 [fmt:UYVY2X8/720x480 field:seq-bt]"
541    media-ctl -V "'ipu1_csi0_mux':5 [fmt:UYVY2X    541    media-ctl -V "'ipu1_csi0_mux':5 [fmt:UYVY2X8/720x480]"
542    media-ctl -V "'ipu1_csi0':2 [fmt:AYUV32/720    542    media-ctl -V "'ipu1_csi0':2 [fmt:AYUV32/720x480]"
543    # Configure "ipu1_csi0 capture" interface (    543    # Configure "ipu1_csi0 capture" interface (assumed at /dev/video0)
544    v4l2-ctl -d0 --set-fmt-video=field=interlac    544    v4l2-ctl -d0 --set-fmt-video=field=interlaced_bt
545                                                   545 
546 Streaming can then begin on /dev/video0. The v    546 Streaming can then begin on /dev/video0. The v4l2-ctl tool can also be
547 used to select any supported YUV pixelformat o    547 used to select any supported YUV pixelformat on /dev/video0.
548                                                   548 
549 This example configures a pipeline to capture     549 This example configures a pipeline to capture from the ADV7180
550 video decoder, assuming PAL 720x576 input sign    550 video decoder, assuming PAL 720x576 input signals, with Motion
551 Compensated de-interlacing. The adv7180 must o    551 Compensated de-interlacing. The adv7180 must output sequential or
552 alternating fields (field type 'seq-tb' for PA    552 alternating fields (field type 'seq-tb' for PAL, or 'alternate').
553                                                   553 
554 .. code-block:: none                              554 .. code-block:: none
555                                                   555 
556    # Setup links                                  556    # Setup links
557    media-ctl -l "'adv7180 4-0021':0 -> 'ipu1_c    557    media-ctl -l "'adv7180 4-0021':0 -> 'ipu1_csi0_mux':4[1]"
558    media-ctl -l "'ipu1_csi0_mux':5 -> 'ipu1_cs    558    media-ctl -l "'ipu1_csi0_mux':5 -> 'ipu1_csi0':0[1]"
559    media-ctl -l "'ipu1_csi0':1 -> 'ipu1_vdic':    559    media-ctl -l "'ipu1_csi0':1 -> 'ipu1_vdic':0[1]"
560    media-ctl -l "'ipu1_vdic':2 -> 'ipu1_ic_prp    560    media-ctl -l "'ipu1_vdic':2 -> 'ipu1_ic_prp':0[1]"
561    media-ctl -l "'ipu1_ic_prp':2 -> 'ipu1_ic_p    561    media-ctl -l "'ipu1_ic_prp':2 -> 'ipu1_ic_prpvf':0[1]"
562    media-ctl -l "'ipu1_ic_prpvf':1 -> 'ipu1_ic    562    media-ctl -l "'ipu1_ic_prpvf':1 -> 'ipu1_ic_prpvf capture':0[1]"
563    # Configure pads                               563    # Configure pads
564    media-ctl -V "'adv7180 4-0021':0 [fmt:UYVY2    564    media-ctl -V "'adv7180 4-0021':0 [fmt:UYVY2X8/720x576 field:seq-tb]"
565    media-ctl -V "'ipu1_csi0_mux':5 [fmt:UYVY2X    565    media-ctl -V "'ipu1_csi0_mux':5 [fmt:UYVY2X8/720x576]"
566    media-ctl -V "'ipu1_csi0':1 [fmt:AYUV32/720    566    media-ctl -V "'ipu1_csi0':1 [fmt:AYUV32/720x576]"
567    media-ctl -V "'ipu1_vdic':2 [fmt:AYUV32/720    567    media-ctl -V "'ipu1_vdic':2 [fmt:AYUV32/720x576 field:none]"
568    media-ctl -V "'ipu1_ic_prp':2 [fmt:AYUV32/7    568    media-ctl -V "'ipu1_ic_prp':2 [fmt:AYUV32/720x576 field:none]"
569    media-ctl -V "'ipu1_ic_prpvf':1 [fmt:AYUV32    569    media-ctl -V "'ipu1_ic_prpvf':1 [fmt:AYUV32/720x576 field:none]"
570    # Configure "ipu1_ic_prpvf capture" interfa    570    # Configure "ipu1_ic_prpvf capture" interface (assumed at /dev/video2)
571    v4l2-ctl -d2 --set-fmt-video=field=none        571    v4l2-ctl -d2 --set-fmt-video=field=none
572                                                   572 
573 Streaming can then begin on /dev/video2. The v    573 Streaming can then begin on /dev/video2. The v4l2-ctl tool can also be
574 used to select any supported YUV pixelformat o    574 used to select any supported YUV pixelformat on /dev/video2.
575                                                   575 
576 This platform accepts Composite Video analog i    576 This platform accepts Composite Video analog inputs to the ADV7180 on
577 Ain1 (connector J42).                             577 Ain1 (connector J42).
578                                                   578 
579 i.MX6Q SabreSD with MIPI CSI-2 OV5640             579 i.MX6Q SabreSD with MIPI CSI-2 OV5640
580 -------------------------------------             580 -------------------------------------
581                                                   581 
582 Similarly to i.MX6Q SabreLite, the i.MX6Q Sabr    582 Similarly to i.MX6Q SabreLite, the i.MX6Q SabreSD supports a parallel
583 interface OV5642 module on IPU1 CSI0, and a MI    583 interface OV5642 module on IPU1 CSI0, and a MIPI CSI-2 OV5640
584 module. The OV5642 connects to i2c bus 1 and t    584 module. The OV5642 connects to i2c bus 1 and the OV5640 to i2c bus 2.
585                                                   585 
586 The device tree for SabreSD includes OF graphs    586 The device tree for SabreSD includes OF graphs for both the parallel
587 OV5642 and the MIPI CSI-2 OV5640, but as of th    587 OV5642 and the MIPI CSI-2 OV5640, but as of this writing only the MIPI
588 CSI-2 OV5640 has been tested, so the OV5642 no    588 CSI-2 OV5640 has been tested, so the OV5642 node is currently disabled.
589 The OV5640 module connects to MIPI connector J    589 The OV5640 module connects to MIPI connector J5. The NXP part number
590 for the OV5640 module that connects to the Sab    590 for the OV5640 module that connects to the SabreSD board is H120729.
591                                                   591 
592 The following example configures unprocessed v    592 The following example configures unprocessed video capture pipeline to
593 capture from the OV5640, transmitting on MIPI     593 capture from the OV5640, transmitting on MIPI CSI-2 virtual channel 0:
594                                                   594 
595 .. code-block:: none                              595 .. code-block:: none
596                                                   596 
597    # Setup links                                  597    # Setup links
598    media-ctl -l "'ov5640 1-003c':0 -> 'imx6-mi    598    media-ctl -l "'ov5640 1-003c':0 -> 'imx6-mipi-csi2':0[1]"
599    media-ctl -l "'imx6-mipi-csi2':1 -> 'ipu1_c    599    media-ctl -l "'imx6-mipi-csi2':1 -> 'ipu1_csi0_mux':0[1]"
600    media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_cs    600    media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_csi0':0[1]"
601    media-ctl -l "'ipu1_csi0':2 -> 'ipu1_csi0 c    601    media-ctl -l "'ipu1_csi0':2 -> 'ipu1_csi0 capture':0[1]"
602    # Configure pads                               602    # Configure pads
603    media-ctl -V "'ov5640 1-003c':0 [fmt:UYVY2X    603    media-ctl -V "'ov5640 1-003c':0 [fmt:UYVY2X8/640x480]"
604    media-ctl -V "'imx6-mipi-csi2':1 [fmt:UYVY2    604    media-ctl -V "'imx6-mipi-csi2':1 [fmt:UYVY2X8/640x480]"
605    media-ctl -V "'ipu1_csi0_mux':0 [fmt:UYVY2X    605    media-ctl -V "'ipu1_csi0_mux':0 [fmt:UYVY2X8/640x480]"
606    media-ctl -V "'ipu1_csi0':0 [fmt:AYUV32/640    606    media-ctl -V "'ipu1_csi0':0 [fmt:AYUV32/640x480]"
607                                                   607 
608 Streaming can then begin on "ipu1_csi0 capture    608 Streaming can then begin on "ipu1_csi0 capture" node. The v4l2-ctl
609 tool can be used to select any supported pixel    609 tool can be used to select any supported pixelformat on the capture
610 device node.                                      610 device node.
611                                                   611 
612 To determine what is the /dev/video node corre    612 To determine what is the /dev/video node correspondent to
613 "ipu1_csi0 capture":                              613 "ipu1_csi0 capture":
614                                                   614 
615 .. code-block:: none                              615 .. code-block:: none
616                                                   616 
617    media-ctl -e "ipu1_csi0 capture"               617    media-ctl -e "ipu1_csi0 capture"
618    /dev/video0                                    618    /dev/video0
619                                                   619 
620 /dev/video0 is the streaming element in this c    620 /dev/video0 is the streaming element in this case.
621                                                   621 
622 Starting the streaming via v4l2-ctl:              622 Starting the streaming via v4l2-ctl:
623                                                   623 
624 .. code-block:: none                              624 .. code-block:: none
625                                                   625 
626    v4l2-ctl --stream-mmap -d /dev/video0          626    v4l2-ctl --stream-mmap -d /dev/video0
627                                                   627 
628 Starting the streaming via Gstreamer and sendi    628 Starting the streaming via Gstreamer and sending the content to the display:
629                                                   629 
630 .. code-block:: none                              630 .. code-block:: none
631                                                   631 
632    gst-launch-1.0 v4l2src device=/dev/video0 !    632    gst-launch-1.0 v4l2src device=/dev/video0 ! kmssink
633                                                   633 
634 The following example configures a direct conv    634 The following example configures a direct conversion pipeline to capture
635 from the OV5640, transmitting on MIPI CSI-2 vi    635 from the OV5640, transmitting on MIPI CSI-2 virtual channel 0. It also
636 shows colorspace conversion and scaling at IC     636 shows colorspace conversion and scaling at IC output.
637                                                   637 
638 .. code-block:: none                              638 .. code-block:: none
639                                                   639 
640    # Setup links                                  640    # Setup links
641    media-ctl -l "'ov5640 1-003c':0 -> 'imx6-mi    641    media-ctl -l "'ov5640 1-003c':0 -> 'imx6-mipi-csi2':0[1]"
642    media-ctl -l "'imx6-mipi-csi2':1 -> 'ipu1_c    642    media-ctl -l "'imx6-mipi-csi2':1 -> 'ipu1_csi0_mux':0[1]"
643    media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_cs    643    media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_csi0':0[1]"
644    media-ctl -l "'ipu1_csi0':1 -> 'ipu1_ic_prp    644    media-ctl -l "'ipu1_csi0':1 -> 'ipu1_ic_prp':0[1]"
645    media-ctl -l "'ipu1_ic_prp':1 -> 'ipu1_ic_p    645    media-ctl -l "'ipu1_ic_prp':1 -> 'ipu1_ic_prpenc':0[1]"
646    media-ctl -l "'ipu1_ic_prpenc':1 -> 'ipu1_i    646    media-ctl -l "'ipu1_ic_prpenc':1 -> 'ipu1_ic_prpenc capture':0[1]"
647    # Configure pads                               647    # Configure pads
648    media-ctl -V "'ov5640 1-003c':0 [fmt:UYVY2X    648    media-ctl -V "'ov5640 1-003c':0 [fmt:UYVY2X8/640x480]"
649    media-ctl -V "'imx6-mipi-csi2':1 [fmt:UYVY2    649    media-ctl -V "'imx6-mipi-csi2':1 [fmt:UYVY2X8/640x480]"
650    media-ctl -V "'ipu1_csi0_mux':2 [fmt:UYVY2X    650    media-ctl -V "'ipu1_csi0_mux':2 [fmt:UYVY2X8/640x480]"
651    media-ctl -V "'ipu1_csi0':1 [fmt:AYUV32/640    651    media-ctl -V "'ipu1_csi0':1 [fmt:AYUV32/640x480]"
652    media-ctl -V "'ipu1_ic_prp':1 [fmt:AYUV32/6    652    media-ctl -V "'ipu1_ic_prp':1 [fmt:AYUV32/640x480]"
653    media-ctl -V "'ipu1_ic_prpenc':1 [fmt:ARGB8    653    media-ctl -V "'ipu1_ic_prpenc':1 [fmt:ARGB8888_1X32/800x600]"
654    # Set a format at the capture interface        654    # Set a format at the capture interface
655    v4l2-ctl -d /dev/video1 --set-fmt-video=pix    655    v4l2-ctl -d /dev/video1 --set-fmt-video=pixelformat=RGB3
656                                                   656 
657 Streaming can then begin on "ipu1_ic_prpenc ca    657 Streaming can then begin on "ipu1_ic_prpenc capture" node.
658                                                   658 
659 To determine what is the /dev/video node corre    659 To determine what is the /dev/video node correspondent to
660 "ipu1_ic_prpenc capture":                         660 "ipu1_ic_prpenc capture":
661                                                   661 
662 .. code-block:: none                              662 .. code-block:: none
663                                                   663 
664    media-ctl -e "ipu1_ic_prpenc capture"          664    media-ctl -e "ipu1_ic_prpenc capture"
665    /dev/video1                                    665    /dev/video1
666                                                   666 
667                                                   667 
668 /dev/video1 is the streaming element in this c    668 /dev/video1 is the streaming element in this case.
669                                                   669 
670 Starting the streaming via v4l2-ctl:              670 Starting the streaming via v4l2-ctl:
671                                                   671 
672 .. code-block:: none                              672 .. code-block:: none
673                                                   673 
674    v4l2-ctl --stream-mmap -d /dev/video1          674    v4l2-ctl --stream-mmap -d /dev/video1
675                                                   675 
676 Starting the streaming via Gstreamer and sendi    676 Starting the streaming via Gstreamer and sending the content to the display:
677                                                   677 
678 .. code-block:: none                              678 .. code-block:: none
679                                                   679 
680    gst-launch-1.0 v4l2src device=/dev/video1 !    680    gst-launch-1.0 v4l2src device=/dev/video1 ! kmssink
681                                                   681 
682 Known Issues                                      682 Known Issues
683 ------------                                      683 ------------
684                                                   684 
685 1. When using 90 or 270 degree rotation contro    685 1. When using 90 or 270 degree rotation control at capture resolutions
686    near the IC resizer limit of 1024x1024, and    686    near the IC resizer limit of 1024x1024, and combined with planar
687    pixel formats (YUV420, YUV422p), frame capt    687    pixel formats (YUV420, YUV422p), frame capture will often fail with
688    no end-of-frame interrupts from the IDMAC c    688    no end-of-frame interrupts from the IDMAC channel. To work around
689    this, use lower resolution and/or packed fo    689    this, use lower resolution and/or packed formats (YUYV, RGB3, etc.)
690    when 90 or 270 rotations are needed.           690    when 90 or 270 rotations are needed.
691                                                   691 
692                                                   692 
693 File list                                         693 File list
694 ---------                                         694 ---------
695                                                   695 
696 drivers/staging/media/imx/                        696 drivers/staging/media/imx/
697 include/media/imx.h                               697 include/media/imx.h
698 include/linux/imx-media.h                         698 include/linux/imx-media.h
699                                                   699 
700 References                                        700 References
701 ----------                                        701 ----------
702                                                   702 
703 .. [#f1] http://www.nxp.com/assets/documents/d    703 .. [#f1] http://www.nxp.com/assets/documents/data/en/reference-manuals/IMX6DQRM.pdf
704 .. [#f2] http://www.nxp.com/assets/documents/d    704 .. [#f2] http://www.nxp.com/assets/documents/data/en/reference-manuals/IMX6SDLRM.pdf
705                                                   705 
706                                                   706 
707 Authors                                           707 Authors
708 -------                                           708 -------
709                                                   709 
710 - Steve Longerbeam <steve_longerbeam@mentor.com    710 - Steve Longerbeam <steve_longerbeam@mentor.com>
711 - Philipp Zabel <kernel@pengutronix.de>            711 - Philipp Zabel <kernel@pengutronix.de>
712 - Russell King <linux@armlinux.org.uk>             712 - Russell King <linux@armlinux.org.uk>
713                                                   713 
714 Copyright (C) 2012-2017 Mentor Graphics Inc.      714 Copyright (C) 2012-2017 Mentor Graphics Inc.
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php