# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/media/i2c/adv748x.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Analog Devices ADV748X video decoder with HDMI receiver

maintainers:
  - Kieran Bingham <kieran.bingham@ideasonboard.com>
  - Niklas Söderlund <niklas.soderlund@ragnatech.se>

description:
  The ADV7481 and ADV7482 are multi format video decoders with an integrated
  HDMI receiver. They can output CSI-2 on two independent outputs TXA and TXB
  from three input sources HDMI, analog and TTL.

properties:
  compatible:
    items:
      - enum:
          - adi,adv7481
          - adi,adv7482

  reg:
    minItems: 1
    maxItems: 12
    description:
      The ADV748x has up to twelve 256-byte maps that can be accessed via the
      main I2C ports. Each map has it own I2C address and acts as a standard
      slave device on the I2C bus. The main address is mandatory, others are
      optional and remain at default values if not specified.

  reg-names:
    minItems: 1
    items:
      - const: main
      - enum: [ dpll, cp, hdmi, edid, repeater, infoframe, cbus, cec, sdp, txa, txb ]
      - enum: [ dpll, cp, hdmi, edid, repeater, infoframe, cbus, cec, sdp, txa, txb ]
      - enum: [ dpll, cp, hdmi, edid, repeater, infoframe, cbus, cec, sdp, txa, txb ]
      - enum: [ dpll, cp, hdmi, edid, repeater, infoframe, cbus, cec, sdp, txa, txb ]
      - enum: [ dpll, cp, hdmi, edid, repeater, infoframe, cbus, cec, sdp, txa, txb ]
      - enum: [ dpll, cp, hdmi, edid, repeater, infoframe, cbus, cec, sdp, txa, txb ]
      - enum: [ dpll, cp, hdmi, edid, repeater, infoframe, cbus, cec, sdp, txa, txb ]
      - enum: [ dpll, cp, hdmi, edid, repeater, infoframe, cbus, cec, sdp, txa, txb ]
      - enum: [ dpll, cp, hdmi, edid, repeater, infoframe, cbus, cec, sdp, txa, txb ]
      - enum: [ dpll, cp, hdmi, edid, repeater, infoframe, cbus, cec, sdp, txa, txb ]
      - enum: [ dpll, cp, hdmi, edid, repeater, infoframe, cbus, cec, sdp, txa, txb ]

  interrupts: true

  interrupt-names: true

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

    patternProperties:
      "^port@[0-7]$":
        $ref: /schemas/graph.yaml#/properties/port
        description: Input port nodes for analog inputs AIN[0-7].

    properties:
      port@8:
        $ref: /schemas/graph.yaml#/properties/port
        description: Input port node for HDMI.

      port@9:
        $ref: /schemas/graph.yaml#/properties/port
        description: Input port node for TTL.

      port@a:
        $ref: /schemas/graph.yaml#/$defs/port-base
        unevaluatedProperties: false
        description:
          Output port node, single endpoint describing the CSI-2 transmitter TXA.

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

            properties:
              clock-lanes:
                maxItems: 1

              data-lanes:
                minItems: 1
                maxItems: 4

            required:
              - clock-lanes
              - data-lanes

      port@b:
        $ref: /schemas/graph.yaml#/$defs/port-base
        unevaluatedProperties: false
        description:
          Output port node, single endpoint describing the CSI-2 transmitter TXB.

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

            properties:
              clock-lanes:
                maxItems: 1

              data-lanes:
                maxItems: 1

            required:
              - clock-lanes
              - data-lanes

allOf:
  - if:
      properties:
        compatible:
          contains:
            const: adi,adv7481
    then:
      properties:
        interrupts:
          minItems: 1
          maxItems: 3

        interrupt-names:
          minItems: 1
          maxItems: 3
          items:
            enum: [ intrq1, intrq2, intrq3 ]
    else:
      properties:
        interrupts:
          minItems: 1
          maxItems: 2

        interrupt-names:
          minItems: 1
          maxItems: 2
          items:
            enum: [ intrq1, intrq2 ]

additionalProperties: false

required:
  - compatible
  - reg
  - ports

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>

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

        video-receiver@70 {
            compatible = "adi,adv7482";
            reg = <0x70 0x71 0x72 0x73 0x74 0x75
                   0x60 0x61 0x62 0x63 0x64 0x65>;
            reg-names = "main", "dpll", "cp", "hdmi", "edid", "repeater",
                        "infoframe", "cbus", "cec", "sdp", "txa", "txb";

            interrupt-parent = <&gpio6>;
            interrupts = <30 IRQ_TYPE_LEVEL_LOW>, <31 IRQ_TYPE_LEVEL_LOW>;
            interrupt-names = "intrq1", "intrq2";

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

                port@7 {
                    reg = <7>;

                    adv7482_ain7: endpoint {
                        remote-endpoint = <&cvbs_in>;
                    };
                };

                port@8 {
                    reg = <8>;

                    adv7482_hdmi: endpoint {
                        remote-endpoint = <&hdmi_in>;
                    };
                };

                port@a {
                    reg = <10>;

                    adv7482_txa: endpoint {
                        clock-lanes = <0>;
                        data-lanes = <1 2 3 4>;
                        remote-endpoint = <&csi40_in>;
                    };
                };

                port@b {
                    reg = <11>;

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