# SPDX-License-Identifier: GPL-2.0-only
# Copyright (C) 2020 Renesas Electronics Corp.
%YAML 1.2
---
$id: http://devicetree.org/schemas/media/renesas,vin.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Renesas R-Car Video Input (VIN)

maintainers:
  - Niklas Söderlund <niklas.soderlund@ragnatech.se>

description:
  The R-Car Video Input (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.

properties:
  compatible:
    oneOf:
      - items:
          - enum:
              - renesas,vin-r8a7742  # RZ/G1H
              - renesas,vin-r8a7743  # RZ/G1M
              - renesas,vin-r8a7744  # RZ/G1N
              - renesas,vin-r8a7745  # RZ/G1E
              - renesas,vin-r8a77470 # RZ/G1C
              - renesas,vin-r8a7790  # R-Car H2
              - renesas,vin-r8a7791  # R-Car M2-W
              - renesas,vin-r8a7792  # R-Car V2H
              - renesas,vin-r8a7793  # R-Car M2-N
              - renesas,vin-r8a7794  # R-Car E2
          - const: renesas,rcar-gen2-vin # Generic R-Car Gen2 or RZ/G1

      - items:
          - enum:
              - renesas,vin-r8a774a1 # RZ/G2M
              - renesas,vin-r8a774b1 # RZ/G2N
              - renesas,vin-r8a774c0 # RZ/G2E
              - renesas,vin-r8a774e1 # RZ/G2H
              - renesas,vin-r8a7778  # R-Car M1
              - renesas,vin-r8a7779  # R-Car H1
              - renesas,vin-r8a7795  # R-Car H3
              - renesas,vin-r8a7796  # R-Car M3-W
              - renesas,vin-r8a77961 # R-Car M3-W+
              - renesas,vin-r8a77965 # R-Car M3-N
              - renesas,vin-r8a77970 # R-Car V3M
              - renesas,vin-r8a77980 # R-Car V3H
              - renesas,vin-r8a77990 # R-Car E3
              - renesas,vin-r8a77995 # R-Car D3
              - renesas,vin-r8a779a0 # R-Car V3U
              - renesas,vin-r8a779g0 # R-Car V4H

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  clocks:
    maxItems: 1

  power-domains:
    maxItems: 1

  resets:
    maxItems: 1

  # The per-board settings for Gen2 and RZ/G1 platforms:
  port:
    $ref: /schemas/graph.yaml#/$defs/port-base
    unevaluatedProperties: false
    description:
      A node containing a parallel input

    properties:
      endpoint:
        $ref: video-interfaces.yaml#
        unevaluatedProperties: false

        properties:
          hsync-active:
            description:
              If both HSYNC and VSYNC polarities are not specified, embedded
              synchronization is selected.
            default: 1

          vsync-active:
            description:
              If both HSYNC and VSYNC polarities are not specified, embedded
              synchronization is selected.
            default: 1

          field-even-active: true

          bus-width: true

          data-shift: true

          data-enable-active:
            description: Polarity of CLKENB signal
            default: 1

          pclk-sample: true

          data-active: true

  # The per-board settings for Gen3 and RZ/G2 platforms:
  renesas,id:
    description: VIN channel number
    $ref: /schemas/types.yaml#/definitions/uint32
    minimum: 0
    maximum: 31

  ports:
    $ref: /schemas/graph.yaml#/properties/ports

    properties:
      port@0:
        $ref: /schemas/graph.yaml#/$defs/port-base
        unevaluatedProperties: false
        description:
          Input port node, single endpoint describing a parallel input source.

        properties:
          endpoint:
            $ref: video-interfaces.yaml#
            unevaluatedProperties: false

            properties:
              hsync-active:
                description:
                  If both HSYNC and VSYNC polarities are not specified, embedded
                  synchronization is selected.
                default: 1

              vsync-active:
                description:
                  If both HSYNC and VSYNC polarities are not specified, embedded
                  synchronization is selected.
                default: 1

              field-even-active: true

              bus-width: true

              data-shift: true

              data-enable-active:
                description: Polarity of CLKENB signal
                default: 1

              pclk-sample: true

              data-active: true

      port@1:
        $ref: /schemas/graph.yaml#/properties/port
        description:
          Input port node, multiple endpoints describing all the R-Car CSI-2
          modules connected the VIN.

        properties:
          endpoint@0:
            $ref: /schemas/graph.yaml#/properties/endpoint
            description: Endpoint connected to CSI20.

          endpoint@1:
            $ref: /schemas/graph.yaml#/properties/endpoint
            description: Endpoint connected to CSI21.

          endpoint@2:
            $ref: /schemas/graph.yaml#/properties/endpoint
            description: Endpoint connected to CSI40.

          endpoint@3:
            $ref: /schemas/graph.yaml#/properties/endpoint
            description: Endpoint connected to CSI41.

        anyOf:
          - required:
              - endpoint@0
          - required:
              - endpoint@1
          - required:
              - endpoint@2
          - required:
              - endpoint@3

      port@2:
        $ref: /schemas/graph.yaml#/properties/port
        description:
          Input port node, multiple endpoints describing all the R-Car ISP
          modules connected the VIN.

        properties:
          endpoint@0:
            $ref: /schemas/graph.yaml#/properties/endpoint
            description: Endpoint connected to ISP0.

          endpoint@1:
            $ref: /schemas/graph.yaml#/properties/endpoint
            description: Endpoint connected to ISP1.

          endpoint@2:
            $ref: /schemas/graph.yaml#/properties/endpoint
            description: Endpoint connected to ISP2.

          endpoint@3:
            $ref: /schemas/graph.yaml#/properties/endpoint
            description: Endpoint connected to ISP3.

required:
  - compatible
  - reg
  - interrupts
  - clocks
  - power-domains

allOf:
  - if:
      not:
        properties:
          compatible:
            contains:
              enum:
                - renesas,vin-r8a7778
                - renesas,vin-r8a7779
    then:
      required:
        - resets

  - if:
      properties:
        compatible:
          contains:
            enum:
              - renesas,vin-r8a7778
              - renesas,vin-r8a7779
              - renesas,rcar-gen2-vin
    then:
      required:
        - port
    else:
      required:
        - renesas,id
        - ports

additionalProperties: false

examples:
  # Device node example for Gen2 platform
  - |
    #include <dt-bindings/clock/r8a7790-cpg-mssr.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    #include <dt-bindings/power/r8a7790-sysc.h>

    vin1: vin@e6ef1000 {
            compatible = "renesas,vin-r8a7790",
                         "renesas,rcar-gen2-vin";
            reg = <0xe6ef1000 0x1000>;
            interrupts = <GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH>;
            clocks = <&cpg CPG_MOD 810>;
            power-domains = <&sysc R8A7790_PD_ALWAYS_ON>;
            resets = <&cpg 810>;

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

  # Device node example for Gen3 platform with only CSI-2
  - |
    #include <dt-bindings/clock/r8a7795-cpg-mssr.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    #include <dt-bindings/power/r8a7795-sysc.h>

    vin0: video@e6ef0000 {
            compatible = "renesas,vin-r8a7795";
            reg = <0xe6ef0000 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>;
                            };
                            vin0csi40: endpoint@2 {
                                    reg = <2>;
                                    remote-endpoint = <&csi40vin0>;
                            };
                    };
            };
    };

  # Device node example for Gen3 platform with CSI-2 and parallel
  - |
    #include <dt-bindings/clock/r8a77970-cpg-mssr.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    #include <dt-bindings/power/r8a77970-sysc.h>

    vin2: video@e6ef2000 {
            compatible = "renesas,vin-r8a77970";
            reg = <0xe6ef2000 0x1000>;
            interrupts = <GIC_SPI 190 IRQ_TYPE_LEVEL_HIGH>;
            clocks = <&cpg CPG_MOD 809>;
            power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
            resets = <&cpg 809>;
            renesas,id = <2>;

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

                    port@0 {
                            reg = <0>;

                            vin2_in: endpoint {
                                    remote-endpoint = <&adv7612_out>;
                                    hsync-active = <0>;
                                    vsync-active = <0>;
                            };
                    };

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

                            reg = <1>;

                            vin2csi40: endpoint@2 {
                                    reg = <2>;
                                    remote-endpoint = <&csi40vin2>;
                            };
                    };
            };
    };
