On Sat, Mar 11, 2017 at 05:32:29PM +0200, Sakari Ailus wrote: > My understanding of the i.MX6 case is the hardware is configurable enough > to warrant the use of the Media controller API. Some patches indicate > there are choices to be made in data routing.
The iMX6 does have configurable data routing, but in some scenarios (eg, when receiving bayer data) there's only one possible routing. > Steve: could you enlighten us on the topic, by e.g. doing media-ctl > --print-dot and sending the results to the list? What kind of different IP > blocks are there and what do they do? A pointer to hardware documentation > wouldn't hurt either (if it's available). Attached for the imx219 camera. Note that although the CSI2 block has four outputs, each output is dedicated to a CSI virtual channel, so they can not be arbitarily assigned without configuring the sensor. Since the imx219 only produces bayer, the graph is also showing the _only_ possible routing for the imx219 configured for CSI virtual channel 0. The iMX6 manuals are available on the 'net. https://community.nxp.com/docs/DOC-101840 There are several chapters that cover the capture side: * MIPI CSI2 * IPU CSI2 gasket * IPU The IPU not only performs capture, but also display as well. -- RMK's Patch system: http://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up according to speedtest.net.
digraph board { rankdir=TB n00000001 [label="{{<port0> 0 | <port1> 1} | ipu1_csi0_mux\n/dev/v4l-subdev0 | {<port2> 2}}", shape=Mrecord, style=filled, fillcolor=green] n00000001:port2 -> n00000044:port0 n00000005 [label="{{<port0> 0 | <port1> 1} | ipu2_csi1_mux\n/dev/v4l-subdev1 | {<port2> 2}}", shape=Mrecord, style=filled, fillcolor=green] n00000005:port2 -> n00000068:port0 [style=dashed] n00000009 [label="{{<port0> 0 | <port1> 1} | ipu1_vdic\n/dev/v4l-subdev2 | {<port2> 2}}", shape=Mrecord, style=filled, fillcolor=green] n00000009:port2 -> n00000011:port0 [style=dashed] n0000000d [label="{{<port0> 0 | <port1> 1} | ipu2_vdic\n/dev/v4l-subdev3 | {<port2> 2}}", shape=Mrecord, style=filled, fillcolor=green] n0000000d:port2 -> n00000027:port0 [style=dashed] n00000011 [label="{{<port0> 0} | ipu1_ic_prp\n/dev/v4l-subdev4 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green] n00000011:port1 -> n00000015:port0 [style=dashed] n00000011:port2 -> n0000001e:port0 [style=dashed] n00000015 [label="{{<port0> 0} | ipu1_ic_prpenc\n/dev/v4l-subdev5 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green] n00000015:port1 -> n00000018 [style=dashed] n00000018 [label="ipu1_ic_prpenc capture\n/dev/video0", shape=box, style=filled, fillcolor=yellow] n0000001e [label="{{<port0> 0} | ipu1_ic_prpvf\n/dev/v4l-subdev6 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green] n0000001e:port1 -> n00000021 [style=dashed] n00000021 [label="ipu1_ic_prpvf capture\n/dev/video1", shape=box, style=filled, fillcolor=yellow] n00000027 [label="{{<port0> 0} | ipu2_ic_prp\n/dev/v4l-subdev7 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green] n00000027:port1 -> n0000002b:port0 [style=dashed] n00000027:port2 -> n00000034:port0 [style=dashed] n0000002b [label="{{<port0> 0} | ipu2_ic_prpenc\n/dev/v4l-subdev8 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green] n0000002b:port1 -> n0000002e [style=dashed] n0000002e [label="ipu2_ic_prpenc capture\n/dev/video2", shape=box, style=filled, fillcolor=yellow] n00000034 [label="{{<port0> 0} | ipu2_ic_prpvf\n/dev/v4l-subdev9 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green] n00000034:port1 -> n00000037 [style=dashed] n00000037 [label="ipu2_ic_prpvf capture\n/dev/video3", shape=box, style=filled, fillcolor=yellow] n0000003d [label="{{<port1> 1} | imx219 0-0010\n/dev/v4l-subdev11 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green] n0000003d:port0 -> n00000058:port0 n00000040 [label="{{} | imx219 pixel 0-0010\n/dev/v4l-subdev10 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green] n00000040:port0 -> n0000003d:port1 [style=bold] n00000044 [label="{{<port0> 0} | ipu1_csi0\n/dev/v4l-subdev12 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green] n00000044:port2 -> n00000048 n00000044:port1 -> n00000011:port0 [style=dashed] n00000044:port1 -> n00000009:port0 [style=dashed] n00000048 [label="ipu1_csi0 capture\n/dev/video4", shape=box, style=filled, fillcolor=yellow] n0000004e [label="{{<port0> 0} | ipu1_csi1\n/dev/v4l-subdev13 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green] n0000004e:port2 -> n00000052 [style=dashed] n0000004e:port1 -> n00000011:port0 [style=dashed] n0000004e:port1 -> n00000009:port0 [style=dashed] n00000052 [label="ipu1_csi1 capture\n/dev/video5", shape=box, style=filled, fillcolor=yellow] n00000058 [label="{{<port0> 0} | imx6-mipi-csi2\n/dev/v4l-subdev14 | {<port1> 1 | <port2> 2 | <port3> 3 | <port4> 4}}", shape=Mrecord, style=filled, fillcolor=green] n00000058:port1 -> n00000001:port0 n00000058:port2 -> n0000004e:port0 [style=dashed] n00000058:port3 -> n0000005e:port0 [style=dashed] n00000058:port4 -> n00000005:port0 [style=dashed] n0000005e [label="{{<port0> 0} | ipu2_csi0\n/dev/v4l-subdev15 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green] n0000005e:port2 -> n00000062 [style=dashed] n0000005e:port1 -> n00000027:port0 [style=dashed] n0000005e:port1 -> n0000000d:port0 [style=dashed] n00000062 [label="ipu2_csi0 capture\n/dev/video6", shape=box, style=filled, fillcolor=yellow] n00000068 [label="{{<port0> 0} | ipu2_csi1\n/dev/v4l-subdev16 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green] n00000068:port2 -> n0000006c [style=dashed] n00000068:port1 -> n00000027:port0 [style=dashed] n00000068:port1 -> n0000000d:port0 [style=dashed] n0000006c [label="ipu2_csi1 capture\n/dev/video7", shape=box, style=filled, fillcolor=yellow] }