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

  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:
    type: object
    description:
      A node containing a parallel input with a single endpoint definitions as
      documented in
      Documentation/devicetree/bindings/media/video-interfaces.txt

    properties:
      endpoint:
        type: object

        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-active-even: true

          bus-width: true

          data-shift: true

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

          pclk-sample: true

          data-active: true

          remote-endpoint: true

        required:
          - remote-endpoint

        additionalProperties: false

    additionalProperties: false

  #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: 15

  ports:
    type: object
    description:
      A node containing input nodes with endpoint definitions as documented in
      Documentation/devicetree/bindings/media/video-interfaces.txt

    properties:
      port@0:
        type: object
        description:
          Input port node, single endpoint describing a parallel input source.

        properties:
          reg:
            const: 0

          endpoint:
            type: object

            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-active-even: true

              bus-width: true

              data-shift: true

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

              pclk-sample: true

              data-active: true

              remote-endpoint: true

            required:
              - remote-endpoint

            additionalProperties: false

        required:
          - endpoint

        additionalProperties: false

      port@1:
        type: object
        description:
          Input port node, multiple endpoints describing all the R-Car CSI-2
          modules connected the VIN.

        properties:
          '#address-cells':
            const: 1

          '#size-cells':
            const: 0

          reg:
            const: 1

          endpoint@0:
            type: object
            description: Endpoint connected to CSI20.

            properties:
              reg:
                const: 0

              remote-endpoint: true

            required:
              - reg
              - remote-endpoint

            additionalProperties: false

          endpoint@1:
            type: object
            description: Endpoint connected to CSI21.

            properties:
              reg:
                const: 1

              remote-endpoint: true

            required:
              - reg
              - remote-endpoint

            additionalProperties: false

          endpoint@2:
            type: object
            description: Endpoint connected to CSI40.

            properties:
              reg:
                const: 2

              remote-endpoint: true

            required:
              - reg
              - remote-endpoint

            additionalProperties: false

          endpoint@3:
            type: object
            description: Endpoint connected to CSI41.

            properties:
              reg:
                const: 3

              remote-endpoint: true

            required:
              - reg
              - remote-endpoint

            additionalProperties: false

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

        additionalProperties: false

required:
  - compatible
  - reg
  - interrupts
  - clocks
  - power-domains
  - 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>;
                            };
                    };
            };
    };
