Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

Cadence MIPI-CSI2 TX controller
===============================

The Cadence MIPI-CSI2 TX controller is a CSI-2 bridge supporting up to
4 CSI lanes in output, and up to 4 different pixel streams in input.

Required properties:
  - compatible: must be set to "cdns,csi2tx" or "cdns,csi2tx-1.3"
    for version 1.3 of the controller, "cdns,csi2tx-2.1" for v2.1
  - reg: base address and size of the memory mapped region
  - clocks: phandles to the clocks driving the controller
  - clock-names: must contain:
    * esc_clk: escape mode clock
    * p_clk: register bank clock
    * pixel_if[0-3]_clk: pixel stream output clock, one for each stream
                         implemented in hardware, between 0 and 3

Optional properties
  - phys: phandle to the D-PHY. If it is set, phy-names need to be set
  - phy-names: must contain "dphy"

Required subnodes:
  - ports: A ports node with one port child node per device input and output
           port, in accordance with the video interface bindings defined in
           Documentation/devicetree/bindings/media/video-interfaces.txt. The
           port nodes are numbered as follows.

           Port Description
           -----------------------------
           0    CSI-2 output
           1    Stream 0 input
           2    Stream 1 input
           3    Stream 2 input
           4    Stream 3 input

           The stream input port nodes are optional if they are not
           connected to anything at the hardware level or implemented
           in the design. Since there is only one endpoint per port,
           the endpoints are not numbered.

Example:

csi2tx: csi-bridge@0d0e1000 {
	compatible = "cdns,csi2tx";
	reg = <0x0d0e1000 0x1000>;
	clocks = <&byteclock>, <&byteclock>,
		 <&coreclock>, <&coreclock>,
		 <&coreclock>, <&coreclock>;
	clock-names = "p_clk", "esc_clk",
		      "pixel_if0_clk", "pixel_if1_clk",
		      "pixel_if2_clk", "pixel_if3_clk";

	ports {
		#address-cells = <1>;
		#size-cells = <0>;

		port@0 {
			reg = <0>;

			csi2tx_out: endpoint {
				remote-endpoint = <&remote_in>;
				clock-lanes = <0>;
				data-lanes = <1 2>;
			};
		};

		port@1 {
			reg = <1>;

			csi2tx_in_stream0: endpoint {
				remote-endpoint = <&stream0_out>;
			};
		};

		port@2 {
			reg = <2>;

			csi2tx_in_stream1: endpoint {
				remote-endpoint = <&stream1_out>;
			};
		};

		port@3 {
			reg = <3>;

			csi2tx_in_stream2: endpoint {
				remote-endpoint = <&stream2_out>;
			};
		};

		port@4 {
			reg = <4>;

			csi2tx_in_stream3: endpoint {
				remote-endpoint = <&stream3_out>;
			};
		};
	};
};