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

The rcar_vin device provides video input capabilities for the Renesas R-Car
family of devices.

Each VIN instance has a single parallel input that supports RGB and YUV video,
with both external synchronization and BT.656 synchronization for the latter.
Depending on the instance the VIN input is connected to external SoC pins, or
on Gen3 platforms to a CSI-2 receiver.

 - compatible: Must be one or more of the following
   - "renesas,vin-r8a7743" for the R8A7743 device
   - "renesas,vin-r8a7745" for the R8A7745 device
   - "renesas,vin-r8a7778" for the R8A7778 device
   - "renesas,vin-r8a7779" for the R8A7779 device
   - "renesas,vin-r8a7790" for the R8A7790 device
   - "renesas,vin-r8a7791" for the R8A7791 device
   - "renesas,vin-r8a7792" for the R8A7792 device
   - "renesas,vin-r8a7793" for the R8A7793 device
   - "renesas,vin-r8a7794" for the R8A7794 device
   - "renesas,vin-r8a7795" for the R8A7795 device
   - "renesas,vin-r8a7796" for the R8A7796 device
   - "renesas,vin-r8a77970" for the R8A77970 device
   - "renesas,rcar-gen2-vin" for a generic R-Car Gen2 or RZ/G1 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 Gen2 platforms:
 - 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.

The per-board settings Gen3 platforms:

Gen3 platforms can support both a single connected parallel input source
from external SoC pins (port0) and/or multiple parallel input sources
from local SoC CSI-2 receivers (port1) depending on SoC.

- renesas,id - ID number of the VIN, VINx in the documentation.
- ports
    - port 0 - sub-node describing a single endpoint connected to the VIN
      from external SoC pins described in video-interfaces.txt[1].
      Describing more then one endpoint in port 0 is invalid. Only VIN
      instances that are connected to external pins should have port 0.
    - port 1 - sub-nodes describing one or more endpoints connected to
      the VIN from local SoC CSI-2 receivers. The endpoint numbers must
      use the following schema.

        - Endpoint 0 - sub-node describing the endpoint connected to CSI20
        - Endpoint 1 - sub-node describing the endpoint connected to CSI21
        - Endpoint 2 - sub-node describing the endpoint connected to CSI40
        - Endpoint 3 - sub-node describing the endpoint connected to CSI41

Device node example for Gen2 platforms
--------------------------------------

        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 for Gen2 platforms (vin1 composite video input)
-------------------------------------------------------------------

&i2c2   {
        status = "okay";
        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 = "okay";

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

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

Device node example for Gen3 platforms
--------------------------------------

        vin0: video@e6ef0000 {
                compatible = "renesas,vin-r8a7795";
                reg = <0 0xe6ef0000 0 0x1000>;
                interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&cpg CPG_MOD 811>;
                power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
                resets = <&cpg 811>;
                renesas,id = <0>;

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

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

                                reg = <1>;

                                vin0csi20: endpoint@0 {
                                        reg = <0>;
                                        remote-endpoint= <&csi20vin0>;
                                };
                                vin0csi21: endpoint@1 {
                                        reg = <1>;
                                        remote-endpoint= <&csi21vin0>;
                                };
                                vin0csi40: endpoint@2 {
                                        reg = <2>;
                                        remote-endpoint= <&csi40vin0>;
                                };
                        };
                };
        };

        csi20: csi2@fea80000 {
                compatible = "renesas,r8a7795-csi2";
                reg = <0 0xfea80000 0 0x10000>;
                interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&cpg CPG_MOD 714>;
                power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
                resets = <&cpg 714>;

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

                        port@0 {
                                reg = <0>;
                                csi20_in: endpoint {
                                        clock-lanes = <0>;
                                        data-lanes = <1>;
                                        remote-endpoint = <&adv7482_txb>;
                                };
                        };

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

                                reg = <1>;

                                csi20vin0: endpoint@0 {
                                        reg = <0>;
                                        remote-endpoint = <&vin0csi20>;
                                };
                        };
                };
        };

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