Re: [RFC] media DT bindings

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri July 27 2012 13:26:36 Laurent Pinchart wrote:
> Hi Hans,
> 
> On Tuesday 17 July 2012 21:37:05 Hans Verkuil wrote:
> > On Wed July 11 2012 16:27:52 Guennadi Liakhovetski wrote:
> > > Hi all
> > > 
> > > Background
> > > ==========
> > > 
> > > With ARM adoption of flat Device Trees a need arises to move platform
> > > device descriptions and their data from platform files to DT. This has
> > > also to be done for media devices, e.g., video capture and output
> > > interfaces, data processing devices, camera sensors, TV decoders and
> > > encoders. This RFC is trying to spawn a discussion to define standard V4L
> > > DT bindings. The first version will concentrate on the capture path,
> > > mostly taking care of simple capture-interface - camera sensor / TV
> > > decoder configurations. Since the author is not working intensively yet
> > > with the Media Controller API, pad-level configuration, these topics might
> > > be underrepresented in this RFC. I hope others, actively working in these
> > > areas, will fill me in on them.
> > > 
> > > Overview
> > > ========
> > > 
> > > As mentioned above, typical configurations, that we'll be dealing with
> > > consist of a DMA data capture engine, one or more data sources like camera
> > > sensors, possibly some data processing units. Data capture and processing
> > > engines are usually platform devices, whereas data source devices are
> > > typically I2C slaves. Apart from defining each device we'll also describe
> > > connections between them as well as properties of those connections.
> > > 
> > > Capture devices
> > > ==============================
> > > 
> > > These are usually platform devices, integrated into respective SoCs. There
> > > also exist external image processing devices, but they are rare. Obvious
> > > differences between them and integrated devices include a different bus
> > > attribution and a need to explicitly describe the connection to the SoC.
> > > As far as capture devices are concerned, their configuration will
> > > typically include a few device-specific bindings, as well as standard
> > > ones. Standard bindings will include the usual "reg," "interrupts,"
> > > "clock-frequency" properties.
> > > 
> > > It is more complex to describe external links. We need to describe
> > > configurations, used with various devices, attached to various pads. It is
> > > proposed to describe such links as child nodes. Each such link will
> > > reference a client pad, a local pad and specify the bus configuration. The
> > > media bus can be either parallel or serial, e.g., MIPI CSI-2. It is
> > > proposed to describe both the bus-width in the parallel case and the
> > > number of lanes in the serial case, using the standard "bus-width"
> > > property.
> > > 
> > > On the parallel bus common properties include signal polarities, possibly
> > > data line shift (8 if lines 15:8 are used, 2 if 9:2, and 0 if lines 7:0),
> > > protocol (e.g., BT.656). Additionally device-specific properties can be
> > > defined.
> > > 
> > > A MIPI CSI-2 bus common properties would include, apart from the number of
> > > lanes, routed to that client, the clock frequency, a channel number,
> > > possibly CRC and ECC flags.
> > > 
> > > An sh-mobile CEU DT node could look like
> > > 
> > > 	ceu0@0xfe910000 = {
> > > 	
> > > 		compatible = "renesas,sh-mobile-ceu";
> > > 		reg = <0xfe910000 0xa0>;
> > > 		interrupts = <0x880>;
> > > 		bus-width = <16>;		/* #lines routed on the board */
> > > 		clock-frequency = <50000000>;	/* max clock */
> > > 		#address-cells = <1>;
> > > 		#size-cells = <0>;
> > > 		...
> > > 		ov772x-1 = {
> > > 		
> > > 			reg = <0>;
> > > 			client = <&ov772x@0x21-0>;
> > > 			local-pad = "parallel-sink";
> > > 			remote-pad = "parallel-source";
> > > 			bus-width = <8>;	/* used data lines */
> > > 			data-shift = <0>;	/* lines 7:0 are used */
> > > 			hsync-active = <1>;	/* active high */
> > > 			vsync-active = <1>;	/* active high */
> > > 			pclk-sample = <1>;	/* rising */
> > > 			clock-frequency = <24000000>;
> > > 		
> > > 		};
> > > 	
> > > 	};
> > > 
> > > Client devices
> > > ==============
> > > 
> > > Client nodes are children on their respective busses, e.g., i2c. This
> > > placement leads to these devices being possibly probed before respective
> > > host interfaces, which will fail due to known reasons. Therefore client
> > > drivers have to be adapted to request a delayed probing, as long as the
> > > respective video host hasn't probed.
> > > 
> > > Client nodes will include all the properties, usual for their busses.
> > > Additionally they will specify properties private to this device type and
> > > common for all V4L2 client devices - device global and per-link. I think,
> > > we should make it possible to define client devices, that can at run-time
> > > be connected to different sinks, even though such configurations might not
> > > be very frequent. To achieve this we also specify link information in
> > > child devices, similar to those in host nodes above. This also helps
> > > uniformity and will let us implement and use a universal link-binding
> > > parser. So, a node, that has been referenced above could look like
> > > 
> > > 	ov772x@0x21-0 = {
> > > 	
> > > 		compatible = "omnivision,ov772x";
> > > 		reg = <0x21>;
> > > 		vdd-supply = <&regulator>;
> > > 		bus-width = <10>;
> > > 		#address-cells = <1>;
> > > 		#size-cells = <0>;
> > > 		...
> > > 		ceu0-1 = {
> > > 		
> > > 			reg = <0>;
> > > 			media-parent = <&ceu0@0xfe910000>;
> > > 			bus-width = <8>;
> > > 			hsync-active = <1>;
> > > 			vsync-active = <0>;	/* who came up with an inverter here?... 
> */
> > > 			pclk-sample = <1>;
> > > 		
> > > 		};
> > > 	
> > > 	};
> > > 
> > > Data processors
> > > ===============
> > > 
> > > Data processing modules include resizers, codecs, rotators, serialisers,
> > > etc. A node for an sh-mobile CSI-2 subdevice could look like
> > > 
> > > 	csi2@0xffc90000 = {
> > > 	
> > > 		compatible = "renesas,sh-mobile-csi2";
> > > 		reg = <0xffc90000 0x1000>;
> > > 		interrupts = <0x17a0>;
> > > 		bus-width = <4>;
> > > 		clock-frequency = <30000000>;
> > > 		...
> > > 		imx074-1 = {
> > > 		
> > > 			client = <&imx074@0x1a-0>;
> > > 			local-pad = "csi2-sink";
> > > 			remote-pad = "csi2-source";
> > > 			bus-width = <2>;
> > > 			clock-frequency = <25000000>;
> > > 			csi2-crc;
> > > 			csi2-ecc;
> > > 			sh-csi2,phy = <0>;
> > > 		
> > > 		};
> > > 		ceu0 = {
> > > 		
> > > 			media-parent = <&ceu0@0xfe910000>;
> > > 			immutable;
> > > 		
> > > 		};
> > > 	
> > > 	};
> > > 
> > > The respective child binding in the CEU node could then look like
> > > 
> > > 		csi2-1 = {
> > > 		
> > > 			reg = <1>;
> > > 			client = <&csi2@0xffc90000>;
> > > 			immutable;
> > > 		
> > > 		};
> > > 
> > > Comments welcome.
> > 
> > One thing that is missing, but that is quite important is that the
> > information from ENUMINPUT/ENUMOUTPUT needs to be part of the device tree
> > as well, since that is generally completely board specific. See for example
> > how the davinci vpif_capture.c and vpif_display.c do that now using
> > platform data. This would be solved much more elegantly using the device
> > tree.
> > 
> > This tends not to feature much when dealing with sensors, but any video
> > receiver or transmitter will need this.
> 
> What about just adding connector entities to the DT ?

That would probably be a good approach, yes. Of course, we would first need to
add connector entities to the MC. Let me see if I can start something in that
area next week.

Regards,

	Hans
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux