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-r8a774a1" for the R8A774A1 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
