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@e6ef0000 {
                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
