Renesas R-Car Video Input driver (rcar_vin)
-------------------------------------------

The rcar_vin device provides video input capabilities for the Renesas R-Car
family of devices. The current blocks are always slaves and suppot one input
channel which can be either RGB, YUYV or BT656.

 - compatible: Must be one or more of the following
   - "renesas,vin-r8a7795" for the R8A7795 device
   - "renesas,vin-r8a7794" for the R8A7794 device
   - "renesas,vin-r8a7793" for the R8A7793 device
   - "renesas,vin-r8a7792" for the R8A7792 device
   - "renesas,vin-r8a7791" for the R8A7791 device
   - "renesas,vin-r8a7790" for the R8A7790 device
   - "renesas,vin-r8a7779" for the R8A7779 device
   - "renesas,vin-r8a7778" for the R8A7778 device
   - "renesas,rcar-gen2-vin" for a generic R-Car Gen2 compatible device.
   - "renesas,rcar-gen3-vin" for a generic R-Car Gen3 compatible device.

   When compatible with the generic version nodes must list the
   SoC-specific version corresponding to the platform first
   followed by the generic version.

 - reg: the register base and size for the device registers
 - interrupts: the interrupt for the device
 - clocks: Reference to the parent clock

Additionally, an alias named vinX will need to be created to specify
which video input device this is.

The per-board settings:
 - port sub-node describing a single endpoint connected to the vin
   as described in video-interfaces.txt[1]. Only the first one will
   be considered as each vin interface has one input port.

   These settings are used to work out video input format and widths
   into the system.


Device node example
-------------------

	aliases {
	       vin0 = &vin0;
	};

        vin0: vin@0xe6ef0000 {
                compatible = "renesas,vin-r8a7790", "renesas,rcar-gen2-vin";
                clocks = <&mstp8_clks R8A7790_CLK_VIN0>;
                reg = <0 0xe6ef0000 0 0x1000>;
                interrupts = <0 188 IRQ_TYPE_LEVEL_HIGH>;
                status = "disabled";
        };

Board setup example (vin1 composite video input)
------------------------------------------------

&i2c2   {
        status = "ok";
        pinctrl-0 = <&i2c2_pins>;
        pinctrl-names = "default";

        adv7180@20 {
                compatible = "adi,adv7180";
                reg = <0x20>;
                remote = <&vin1>;

                port {
                        adv7180: endpoint {
                                bus-width = <8>;
                                remote-endpoint = <&vin1ep0>;
                        };
                };
        };
};

/* composite video input */
&vin1 {
        pinctrl-0 = <&vin1_pins>;
        pinctrl-names = "default";

        status = "ok";

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

                vin1ep0: endpoint {
                        remote-endpoint = <&adv7180>;
                        bus-width = <8>;
                };
        };
};



[1] video-interfaces.txt common video media interface
