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 and RZ/G2 platforms to a CSI-2 receiver.

 - compatible: Must be one or more of the following
   - "renesas,vin-r8a7743" for the R8A7743 device
   - "renesas,vin-r8a7744" for the R8A7744 device
   - "renesas,vin-r8a7745" for the R8A7745 device
   - "renesas,vin-r8a774c0" for the R8A774C0 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-r8a77965" for the R8A77965 device
   - "renesas,vin-r8a77970" for the R8A77970 device
   - "renesas,vin-r8a77980" for the R8A77980 device
   - "renesas,vin-r8a77990" for the R8A77990 device
   - "renesas,vin-r8a77995" for the R8A77995 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
  from external SoC pins as described in video-interfaces.txt[1].
  Only the first one will be considered as each vin interface has one
  input port.

  - Optional properties for endpoint nodes:
    - hsync-active: see [1] for description. Default is active high.
    - vsync-active: see [1] for description. Default is active high.
      If both HSYNC and VSYNC polarities are not specified, embedded
      synchronization is selected.
    - field-active-even: see [1] for description. Default is active high.
    - bus-width: see [1] for description. The selected bus width depends on
      the SoC type and selected input image format.
      Valid values are: 8, 10, 12, 16, 24 and 32.
    - data-shift: see [1] for description. Valid values are 0 and 8.
    - data-enable-active: polarity of CLKENB signal, see [1] for
      description. Default is active high.

The per-board settings Gen3 and RZ/G2 platforms:

Gen3 and RZ/G2 platforms can support both a single connected parallel input
source from external SoC pins (port@0) and/or multiple parallel input sources
from local SoC CSI-2 receivers (port@1) 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 as described in video-interfaces.txt[1].
      Describing more than one endpoint in port@0 is invalid. Only VIN
      instances that are connected to external pins should have port@0.

      Endpoint nodes of port@0 support the optional properties listed in
      the Gen2 per-board settings description.

    - 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

      Endpoint nodes of port@1 do not support any optional endpoint property.

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