diff mbox series

dt-bindings: adv748x: Convert bindings to json-schema

Message ID 20211012183324.717975-1-niklas.soderlund+renesas@ragnatech.se (mailing list archive)
State Superseded
Delegated to: Kieran Bingham
Headers show
Series dt-bindings: adv748x: Convert bindings to json-schema | expand

Commit Message

Niklas Söderlund Oct. 12, 2021, 6:33 p.m. UTC
Convert ADV748X analog video decoder documentation to json-schema.

Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
---
Hello,

This conversion revealed a problem with the Renesas DTSI files for the 
adv7482 nodes. A fix for that have been submitted in a separate patch,

    [PATCH] arm64: dts: renesas: Add ports node to all adv7482 nodes

Kind Regards,
Niklas Söderlund
---
 .../devicetree/bindings/media/i2c/adv748x.txt | 116 ----------
 .../bindings/media/i2c/adv748x.yaml           | 211 ++++++++++++++++++
 2 files changed, 211 insertions(+), 116 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/media/i2c/adv748x.txt
 create mode 100644 Documentation/devicetree/bindings/media/i2c/adv748x.yaml

Comments

Geert Uytterhoeven Oct. 13, 2021, 3:08 p.m. UTC | #1
Hi Niklas,

Thanks for your patch!

On Tue, Oct 12, 2021 at 8:48 PM Niklas Söderlund
<niklas.soderlund+renesas@ragnatech.se> wrote:
> Convert ADV748X analog video decoder documentation to json-schema.

You may want to list what changes you made:
  - Add missing ports subnode
  - Anything else I didn't notice? ;-)

> Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>

> --- /dev/null
> +++ b/Documentation/devicetree/bindings/media/i2c/adv748x.yaml

> +  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 ]

They can really appear in any order?

> +allOf:
> +  - if:
> +      properties:
> +        compatible:
> +          contains:
> +            const: adi,adv7481
> +    then:
> +      properties:
> +        interrupts:
> +          minItems: 1
> +          maxItems: 3
> +
> +        interrupt-names:
> +          minItems: 1
> +          items:
> +            - enum: [ intrq1, intrq2, intrq3 ]
> +            - enum: [ intrq1, intrq2, intrq3 ]
> +            - enum: [ intrq1, intrq2, intrq3 ]

They can really appear in any order?

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

They can really appear in any order?

If not, you can merge the entries, and just override maxItems.

The rest looks good to me, but I'm no graph expert.
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>

Gr{oetje,eeting}s,

                        Geert
Niklas Söderlund Oct. 14, 2021, 10:47 a.m. UTC | #2
Hi Geert,

Thanks for your review.

On 2021-10-13 17:08:44 +0200, Geert Uytterhoeven wrote:
> Hi Niklas,
> 
> Thanks for your patch!
> 
> On Tue, Oct 12, 2021 at 8:48 PM Niklas Söderlund
> <niklas.soderlund+renesas@ragnatech.se> wrote:
> > Convert ADV748X analog video decoder documentation to json-schema.
> 
> You may want to list what changes you made:
>   - Add missing ports subnode
>   - Anything else I didn't notice? ;-)

Wops, I intended to mention the addition of ports node. Thanks for 
noticing, will send a v2.

> 
> > Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
> 
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/media/i2c/adv748x.yaml
> 
> > +  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 ]
> 
> They can really appear in any order?

Yes they are refereed by i2c_new_ancillary_device() so any order is 
fine. They can only appear once tho, but I'm not sure how to enforce 
that.

> 
> > +allOf:
> > +  - if:
> > +      properties:
> > +        compatible:
> > +          contains:
> > +            const: adi,adv7481
> > +    then:
> > +      properties:
> > +        interrupts:
> > +          minItems: 1
> > +          maxItems: 3
> > +
> > +        interrupt-names:
> > +          minItems: 1
> > +          items:
> > +            - enum: [ intrq1, intrq2, intrq3 ]
> > +            - enum: [ intrq1, intrq2, intrq3 ]
> > +            - enum: [ intrq1, intrq2, intrq3 ]
> 
> They can really appear in any order?

Yes, as not all interrupt lines may be wired up. It would be nice to 
enforce that intrq2 must come before intrq3 if both are wired but I'm 
not sure how to express that.

> 
> > +    else:
> > +      properties:
> > +        interrupts:
> > +          minItems: 1
> > +          maxItems: 2
> > +
> > +        interrupt-names:
> > +          minItems: 1
> > +          items:
> > +            - enum: [ intrq1, intrq2 ]
> > +            - enum: [ intrq1, intrq2 ]
> 
> They can really appear in any order?
> 
> If not, you can merge the entries, and just override maxItems.
> 
> The rest looks good to me, but I'm no graph expert.
> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>

Thanks!

> 
> Gr{oetje,eeting}s,
> 
>                         Geert
> 
> -- 
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
> 
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
>                                 -- Linus Torvalds
Geert Uytterhoeven Oct. 14, 2021, 11:07 a.m. UTC | #3
Hi Niklas,

On Thu, Oct 14, 2021 at 12:48 PM Niklas Söderlund
<niklas.soderlund+renesas@ragnatech.se> wrote:
> On 2021-10-13 17:08:44 +0200, Geert Uytterhoeven wrote:
> > On Tue, Oct 12, 2021 at 8:48 PM Niklas Söderlund
> > <niklas.soderlund+renesas@ragnatech.se> wrote:
> > > Convert ADV748X analog video decoder documentation to json-schema.

> > > --- /dev/null
> > > +++ b/Documentation/devicetree/bindings/media/i2c/adv748x.yaml

> > > +allOf:
> > > +  - if:
> > > +      properties:
> > > +        compatible:
> > > +          contains:
> > > +            const: adi,adv7481
> > > +    then:
> > > +      properties:
> > > +        interrupts:
> > > +          minItems: 1
> > > +          maxItems: 3
> > > +
> > > +        interrupt-names:
> > > +          minItems: 1
> > > +          items:
> > > +            - enum: [ intrq1, intrq2, intrq3 ]
> > > +            - enum: [ intrq1, intrq2, intrq3 ]
> > > +            - enum: [ intrq1, intrq2, intrq3 ]
> >
> > They can really appear in any order?
>
> Yes, as not all interrupt lines may be wired up. It would be nice to
> enforce that intrq2 must come before intrq3 if both are wired but I'm
> not sure how to express that.

You mean

    items:
      - const: intrq1
      - const: intrq2
      - const: intrq3

?

If the first two might be exchanged, you can still fix the last one:

    items:
      - const: [ intrq1, intrq2 ]
      - const: [ intrq1, intrq2 ]
      - const: intrq3

Gr{oetje,eeting}s,

                        Geert
Niklas Söderlund Oct. 14, 2021, 11:39 a.m. UTC | #4
Hi Geert,

On 2021-10-14 13:07:30 +0200, Geert Uytterhoeven wrote:
> Hi Niklas,
> 
> On Thu, Oct 14, 2021 at 12:48 PM Niklas Söderlund
> <niklas.soderlund+renesas@ragnatech.se> wrote:
> > On 2021-10-13 17:08:44 +0200, Geert Uytterhoeven wrote:
> > > On Tue, Oct 12, 2021 at 8:48 PM Niklas Söderlund
> > > <niklas.soderlund+renesas@ragnatech.se> wrote:
> > > > Convert ADV748X analog video decoder documentation to json-schema.
> 
> > > > --- /dev/null
> > > > +++ b/Documentation/devicetree/bindings/media/i2c/adv748x.yaml
> 
> > > > +allOf:
> > > > +  - if:
> > > > +      properties:
> > > > +        compatible:
> > > > +          contains:
> > > > +            const: adi,adv7481
> > > > +    then:
> > > > +      properties:
> > > > +        interrupts:
> > > > +          minItems: 1
> > > > +          maxItems: 3
> > > > +
> > > > +        interrupt-names:
> > > > +          minItems: 1
> > > > +          items:
> > > > +            - enum: [ intrq1, intrq2, intrq3 ]
> > > > +            - enum: [ intrq1, intrq2, intrq3 ]
> > > > +            - enum: [ intrq1, intrq2, intrq3 ]
> > >
> > > They can really appear in any order?
> >
> > Yes, as not all interrupt lines may be wired up. It would be nice to
> > enforce that intrq2 must come before intrq3 if both are wired but I'm
> > not sure how to express that.
> 
> You mean
> 
>     items:
>       - const: intrq1
>       - const: intrq2
>       - const: intrq3

Will this not enforce that if intrq2 is present intrq1 must be too?

> 
> ?
> 
> If the first two might be exchanged, you can still fix the last one:
> 
>     items:
>       - const: [ intrq1, intrq2 ]
>       - const: [ intrq1, intrq2 ]
>       - const: intrq3

Same here, will this not fail if only intrq3 is given?

> 
> Gr{oetje,eeting}s,
> 
>                         Geert
> 
> -- 
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
> 
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
>                                 -- Linus Torvalds
Geert Uytterhoeven Oct. 14, 2021, 12:14 p.m. UTC | #5
Hi Niklas,

On Thu, Oct 14, 2021 at 1:39 PM Niklas Söderlund
<niklas.soderlund+renesas@ragnatech.se> wrote:
> On 2021-10-14 13:07:30 +0200, Geert Uytterhoeven wrote:
> > On Thu, Oct 14, 2021 at 12:48 PM Niklas Söderlund
> > <niklas.soderlund+renesas@ragnatech.se> wrote:
> > > On 2021-10-13 17:08:44 +0200, Geert Uytterhoeven wrote:
> > > > On Tue, Oct 12, 2021 at 8:48 PM Niklas Söderlund
> > > > <niklas.soderlund+renesas@ragnatech.se> wrote:
> > > > > Convert ADV748X analog video decoder documentation to json-schema.
> >
> > > > > --- /dev/null
> > > > > +++ b/Documentation/devicetree/bindings/media/i2c/adv748x.yaml
> >
> > > > > +allOf:
> > > > > +  - if:
> > > > > +      properties:
> > > > > +        compatible:
> > > > > +          contains:
> > > > > +            const: adi,adv7481
> > > > > +    then:
> > > > > +      properties:
> > > > > +        interrupts:
> > > > > +          minItems: 1
> > > > > +          maxItems: 3
> > > > > +
> > > > > +        interrupt-names:
> > > > > +          minItems: 1
> > > > > +          items:
> > > > > +            - enum: [ intrq1, intrq2, intrq3 ]
> > > > > +            - enum: [ intrq1, intrq2, intrq3 ]
> > > > > +            - enum: [ intrq1, intrq2, intrq3 ]
> > > >
> > > > They can really appear in any order?
> > >
> > > Yes, as not all interrupt lines may be wired up. It would be nice to
> > > enforce that intrq2 must come before intrq3 if both are wired but I'm
> > > not sure how to express that.
> >
> > You mean
> >
> >     items:
> >       - const: intrq1
> >       - const: intrq2
> >       - const: intrq3
>
> Will this not enforce that if intrq2 is present intrq1 must be too?
>
> >
> > ?
> >
> > If the first two might be exchanged, you can still fix the last one:
> >
> >     items:
> >       - const: [ intrq1, intrq2 ]
> >       - const: [ intrq1, intrq2 ]
> >       - const: intrq3
>
> Same here, will this not fail if only intrq3 is given?

Right. And these combinations are all valid?

Gr{oetje,eeting}s,

                        Geert
Niklas Söderlund Oct. 14, 2021, 12:20 p.m. UTC | #6
Hi Geert,

On 2021-10-14 14:14:26 +0200, Geert Uytterhoeven wrote:
> Hi Niklas,
> 
> On Thu, Oct 14, 2021 at 1:39 PM Niklas Söderlund
> <niklas.soderlund+renesas@ragnatech.se> wrote:
> > On 2021-10-14 13:07:30 +0200, Geert Uytterhoeven wrote:
> > > On Thu, Oct 14, 2021 at 12:48 PM Niklas Söderlund
> > > <niklas.soderlund+renesas@ragnatech.se> wrote:
> > > > On 2021-10-13 17:08:44 +0200, Geert Uytterhoeven wrote:
> > > > > On Tue, Oct 12, 2021 at 8:48 PM Niklas Söderlund
> > > > > <niklas.soderlund+renesas@ragnatech.se> wrote:
> > > > > > Convert ADV748X analog video decoder documentation to json-schema.
> > >
> > > > > > --- /dev/null
> > > > > > +++ b/Documentation/devicetree/bindings/media/i2c/adv748x.yaml
> > >
> > > > > > +allOf:
> > > > > > +  - if:
> > > > > > +      properties:
> > > > > > +        compatible:
> > > > > > +          contains:
> > > > > > +            const: adi,adv7481
> > > > > > +    then:
> > > > > > +      properties:
> > > > > > +        interrupts:
> > > > > > +          minItems: 1
> > > > > > +          maxItems: 3
> > > > > > +
> > > > > > +        interrupt-names:
> > > > > > +          minItems: 1
> > > > > > +          items:
> > > > > > +            - enum: [ intrq1, intrq2, intrq3 ]
> > > > > > +            - enum: [ intrq1, intrq2, intrq3 ]
> > > > > > +            - enum: [ intrq1, intrq2, intrq3 ]
> > > > >
> > > > > They can really appear in any order?
> > > >
> > > > Yes, as not all interrupt lines may be wired up. It would be nice to
> > > > enforce that intrq2 must come before intrq3 if both are wired but I'm
> > > > not sure how to express that.
> > >
> > > You mean
> > >
> > >     items:
> > >       - const: intrq1
> > >       - const: intrq2
> > >       - const: intrq3
> >
> > Will this not enforce that if intrq2 is present intrq1 must be too?
> >
> > >
> > > ?
> > >
> > > If the first two might be exchanged, you can still fix the last one:
> > >
> > >     items:
> > >       - const: [ intrq1, intrq2 ]
> > >       - const: [ intrq1, intrq2 ]
> > >       - const: intrq3
> >
> > Same here, will this not fail if only intrq3 is given?
> 
> Right. And these combinations are all valid?

Yes, there is two or three depending on model irq pins on the device 
itself and all, none or any combination of them could be wired up.

> 
> Gr{oetje,eeting}s,
> 
>                         Geert
> 
> -- 
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
> 
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
>                                 -- Linus Torvalds
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/media/i2c/adv748x.txt b/Documentation/devicetree/bindings/media/i2c/adv748x.txt
deleted file mode 100644
index 4f91686e54a6b939..0000000000000000
--- a/Documentation/devicetree/bindings/media/i2c/adv748x.txt
+++ /dev/null
@@ -1,116 +0,0 @@ 
-* Analog Devices ADV748X video decoder with HDMI receiver
-
-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.
-
-Required Properties:
-
-  - compatible: Must contain one of the following
-    - "adi,adv7481" for the ADV7481
-    - "adi,adv7482" for the ADV7482
-
-  - reg: I2C slave addresses
-    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.
-
-Optional Properties:
-
-  - interrupt-names: Should specify the interrupts as "intrq1", "intrq2" and/or
-		     "intrq3". All interrupts are optional. The "intrq3" interrupt
-		     is only available on the adv7481
-  - interrupts: Specify the interrupt lines for the ADV748x
-  - reg-names : Names of maps with programmable addresses.
-		It shall contain all maps needing a non-default address.
-		Possible map names are:
-		  "main", "dpll", "cp", "hdmi", "edid", "repeater",
-		  "infoframe", "cbus", "cec", "sdp", "txa", "txb"
-
-The device node must contain one 'port' child node per device input and output
-port, in accordance with the video interface bindings defined in
-Documentation/devicetree/bindings/media/video-interfaces.txt. The port nodes
-are numbered as follows.
-
-	  Name		Type		Port
-	---------------------------------------
-	  AIN0		sink		0
-	  AIN1		sink		1
-	  AIN2		sink		2
-	  AIN3		sink		3
-	  AIN4		sink		4
-	  AIN5		sink		5
-	  AIN6		sink		6
-	  AIN7		sink		7
-	  HDMI		sink		8
-	  TTL		sink		9
-	  TXA		source		10
-	  TXB		source		11
-
-The digital output port nodes, when present, shall contain at least one
-endpoint. Each of those endpoints shall contain the data-lanes property as
-described in video-interfaces.txt.
-
-Required source endpoint properties:
-  - data-lanes: an array of physical data lane indexes
-    The accepted value(s) for this property depends on which of the two
-    sources are described. For TXA 1, 2 or 4 data lanes can be described
-    while for TXB only 1 data lane is valid. See video-interfaces.txt
-    for detailed description.
-
-Ports are optional if they are not connected to anything at the hardware level.
-
-Example:
-
-	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";
-
-		#address-cells = <1>;
-		#size-cells = <0>;
-
-		interrupt-parent = <&gpio6>;
-		interrupt-names = "intrq1", "intrq2";
-		interrupts = <30 IRQ_TYPE_LEVEL_LOW>,
-			     <31 IRQ_TYPE_LEVEL_LOW>;
-
-		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>;
-			};
-		};
-	};
diff --git a/Documentation/devicetree/bindings/media/i2c/adv748x.yaml b/Documentation/devicetree/bindings/media/i2c/adv748x.yaml
new file mode 100644
index 0000000000000000..37df0441d8790c6e
--- /dev/null
+++ b/Documentation/devicetree/bindings/media/i2c/adv748x.yaml
@@ -0,0 +1,211 @@ 
+# 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>
+
+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
+          items:
+            - enum: [ intrq1, intrq2, intrq3 ]
+            - enum: [ intrq1, intrq2, intrq3 ]
+            - enum: [ intrq1, intrq2, intrq3 ]
+    else:
+      properties:
+        interrupts:
+          minItems: 1
+          maxItems: 2
+
+        interrupt-names:
+          minItems: 1
+          items:
+            - enum: [ intrq1, intrq2 ]
+            - 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>;
+                    };
+                };
+            };
+        };
+    };