On Thu, Sep 03, 2026 at 02:09:42PM -0600, James Hilliard wrote: > From: Jernej Skrabec > > Describe the AC200 audio codec and TV encoder as child nodes of the > shared I2C register provider. Keep their analog supplies on the function > consumers and describe the TV encoder display graph and optional bandgap > calibration cell. > > Add the shared interrupt-controller properties and interrupt numbers needed > by the TV encoder. The Ethernet PHY remains represented on its primary MDIO > bus and is therefore not an MFD child. > > Signed-off-by: Jernej Skrabec > Signed-off-by: James Hilliard > --- > .../devicetree/bindings/mfd/x-powers,ac200.yaml | 136 +++++++++++++++++++++ > MAINTAINERS | 1 + > include/dt-bindings/mfd/x-powers,ac200.h | 13 ++ > 3 files changed, 150 insertions(+) > > diff --git a/Documentation/devicetree/bindings/mfd/x-powers,ac200.yaml b/Documentation/devicetree/bindings/mfd/x-powers,ac200.yaml > index ca7a910b2c73..935dc07138cb 100644 > --- a/Documentation/devicetree/bindings/mfd/x-powers,ac200.yaml > +++ b/Documentation/devicetree/bindings/mfd/x-powers,ac200.yaml > @@ -28,15 +28,114 @@ properties: > be 24 or 27 MHz, matching the rates encoded by the documented EPHY clock > selector. > > + interrupts: > + maxItems: 1 > + description: > + The shared open-drain INTB output for the TV encoder, Ethernet PHY and > + RTC interrupts. > + > + interrupt-controller: true > + > + '#interrupt-cells': > + const: 1 > + description: > + The interrupt number, as defined in > + include/dt-bindings/mfd/x-powers,ac200.h. > + > + codec: > + type: object > + $ref: /schemas/sound/dai-common.yaml# > + unevaluatedProperties: false > + > + properties: > + compatible: > + const: x-powers,ac200-codec > + > + '#sound-dai-cells': > + const: 0 > + > + ac-ldoin-supply: > + description: The 3.3 V supply for the audio codec LDO input. > + > + required: > + - compatible > + - '#sound-dai-cells' > + - ac-ldoin-supply > + > + tv-encoder: > + type: object > + additionalProperties: false > + > + properties: > + compatible: > + const: x-powers,ac200-tve > + > + interrupts: > + maxItems: 1 > + description: Cable detection interrupt. Given the example, this looks like a hack. Is this mfd actually an interrupt controller, or is that just part of this hack too? Quite frankly, I am not really sure why either the tv-encoder or codec have dedicated child nodes, they don't appear to have conflicting properties. Additionally, why is this not part of patch 1? Add the binding in a complete state from the get-go. On that basis, at least, pw-bot: changes-requested Cheers, Conor. > + > + tv-vcc-supply: > + description: The 3.3 V supply for the composite-video DAC. > + > + nvmem-cells: > + maxItems: 1 > + > + nvmem-cell-names: > + items: > + - const: bandgap > + > + ports: > + $ref: /schemas/graph.yaml#/properties/ports > + > + properties: > + port@0: > + $ref: /schemas/graph.yaml#/properties/port > + description: Input from the display pipeline, carrying CCIR656. > + > + port@1: > + $ref: /schemas/graph.yaml#/properties/port > + description: Output to the composite-video connector. > + > + required: > + - port@0 > + - port@1 > + > + required: > + - compatible > + - interrupts > + - tv-vcc-supply > + - ports > + > + dependencies: > + nvmem-cells: [ nvmem-cell-names ] > + nvmem-cell-names: [ nvmem-cells ] > + > required: > - compatible > - reg > - clocks > > +allOf: > + - if: > + required: > + - tv-encoder > + then: > + required: > + - interrupts > + - interrupt-controller > + - '#interrupt-cells' > + > +dependencies: > + interrupt-controller: [ '#interrupt-cells', interrupts ] > + '#interrupt-cells': [ interrupt-controller ] > + > additionalProperties: false > > examples: > - | > + #include > + #include > + > i2c { > #address-cells = <1>; > #size-cells = <0>; > @@ -45,6 +144,43 @@ examples: > compatible = "x-powers,ac200"; > reg = <0x10>; > clocks = <&pwm 5>; > + interrupt-parent = <&pio>; > + interrupts = <1 20 IRQ_TYPE_LEVEL_LOW>; > + interrupt-controller; > + #interrupt-cells = <1>; > + > + codec { > + compatible = "x-powers,ac200-codec"; > + #sound-dai-cells = <0>; > + ac-ldoin-supply = <®_aldo2>; > + }; > + > + tv-encoder { > + compatible = "x-powers,ac200-tve"; > + interrupts = ; > + tv-vcc-supply = <®_aldo2>; > + > + ports { > + #address-cells = <1>; > + #size-cells = <0>; > + > + port@0 { > + reg = <0>; > + > + tve_in: endpoint { > + remote-endpoint = <&tcon_out_tve>; > + }; > + }; > + > + port@1 { > + reg = <1>; > + > + tve_out: endpoint { > + remote-endpoint = <&composite_in>; > + }; > + }; > + }; > + }; > }; > }; > ... > diff --git a/MAINTAINERS b/MAINTAINERS > index 1d03b0060bda..8a48f6a1e593 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -29511,6 +29511,7 @@ L: linux-sunxi@lists.linux.dev > S: Maintained > F: Documentation/devicetree/bindings/mfd/x-powers,ac200.yaml > F: drivers/mfd/ac200.c > +F: include/dt-bindings/mfd/x-powers,ac200.h > > X-POWERS AXP288 PMIC DRIVERS > M: Hans de Goede > diff --git a/include/dt-bindings/mfd/x-powers,ac200.h b/include/dt-bindings/mfd/x-powers,ac200.h > new file mode 100644 > index 000000000000..cc59e2ab4912 > --- /dev/null > +++ b/include/dt-bindings/mfd/x-powers,ac200.h > @@ -0,0 +1,13 @@ > +/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ > +/* > + * Interrupt numbers of the X-Powers AC200 interrupt controller. > + */ > + > +#ifndef _DT_BINDINGS_MFD_X_POWERS_AC200_H > +#define _DT_BINDINGS_MFD_X_POWERS_AC200_H > + > +#define AC200_IRQ_TVE 0 > +#define AC200_IRQ_EPHY 1 > +#define AC200_IRQ_RTC 2 > + > +#endif /* _DT_BINDINGS_MFD_X_POWERS_AC200_H */ > > -- > 2.53.0 >