* [PATCH v3 1/4] dt-bindings: connector: Add fsl,aud-io-slot binding
2026-11-03 7:04 [PATCH v3 0/4] arm64: dts: freescale: Add IMX-AUD-IO add-on board support Chancel Liu
@ 2026-11-03 7:04 ` Chancel Liu
2026-11-03 7:32 ` sashiko-bot
2026-11-03 15:26 ` Frank Li
2026-11-03 7:04 ` [PATCH v3 2/4] arm64: dts: freescale: imx95-19x19-evk: Add IMX-AUD-IO board support Chancel Liu
` (2 subsequent siblings)
3 siblings, 2 replies; 7+ messages in thread
From: Chancel Liu @ 2026-11-03 7:04 UTC (permalink / raw)
To: robh, krzk+dt, conor+dt, Frank.Li, s.hauer
Cc: kernel, festevam, devicetree, linux-kernel, imx, linux-arm-kernel
From: Chancel Liu <chancel.liu@nxp.com>
The NXP AUD-IO slot represents a physically present I/O connector on
the base board. It acts as a nexus that exposes a constrained set of
I/O resources, such as GPIOs, clocks and interrupts, through fixed
electrical wiring. All actual hardware providers reside on the base
board. The connector node only defines index-based mappings to those
providers.
This connector type is present on i.MX95 19x19 EVK and i.MX952 EVK,
where it is used to attach the IMX-AUD-IO audio expansion card[1]. The
same add-on board can be reused across different base boards that carry
this connector.
[1]https://www.nxp.com/part/IMX-AUD-IO
Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
---
.../bindings/connector/fsl,aud-io-slot.yaml | 106 ++++++++++++++++++
1 file changed, 106 insertions(+)
create mode 100644 Documentation/devicetree/bindings/connector/fsl,aud-io-slot.yaml
diff --git a/Documentation/devicetree/bindings/connector/fsl,aud-io-slot.yaml b/Documentation/devicetree/bindings/connector/fsl,aud-io-slot.yaml
new file mode 100644
index 000000000000..fc3896d0fafa
--- /dev/null
+++ b/Documentation/devicetree/bindings/connector/fsl,aud-io-slot.yaml
@@ -0,0 +1,106 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/connector/fsl,aud-io-slot.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: NXP AUD-IO Slot
+
+maintainers:
+ - Frank Li <Frank.Li@nxp.com>
+ - Chancel Liu <chancel.liu@nxp.com>
+
+description:
+ The NXP AUD-IO slot represents a physically present I/O connector on
+ the base board. It acts as a nexus that exposes a constrained set of
+ I/O resources, such as GPIOs, clocks and interrupts, through fixed
+ electrical wiring. All actual hardware providers reside on the base
+ board. The connector node only defines index-based mappings to those
+ providers. This connector type is present on i.MX95 19x19 EVK and
+ i.MX952 EVK, where it is used to attach the IMX-AUD-IO expansion card.
+
+properties:
+ compatible:
+ oneOf:
+ - items:
+ - enum:
+ - fsl,imx952-evk-aud-io
+ - const: fsl,imx95-19x19-evk-aud-io
+ - const: fsl,imx95-19x19-evk-aud-io
+
+ gpio-controller: true
+
+ '#gpio-cells':
+ const: 2
+
+ gpio-map:
+ minItems: 1
+ maxItems: 3
+
+ gpio-map-mask:
+ items:
+ - const: 0xf
+ - const: 0x0
+
+ gpio-map-pass-thru:
+ items:
+ - const: 0x0
+ - const: 0x1
+
+ '#clock-cells':
+ const: 1
+
+ clock-map:
+ minItems: 1
+ maxItems: 2
+
+ '#address-cells':
+ const: 0
+
+ interrupt-controller: true
+
+ '#interrupt-cells':
+ const: 2
+
+ interrupt-map:
+ minItems: 1
+ maxItems: 2
+
+ interrupt-map-mask:
+ items:
+ - const: 0xf
+ - const: 0x0
+
+allOf:
+ - $ref: /schemas/gpio/gpio-nexus-node.yaml#
+ - $ref: /schemas/clock/clock-nexus-node.yaml#
+
+required:
+ - compatible
+ - gpio-controller
+ - '#gpio-cells'
+ - gpio-map
+ - gpio-map-mask
+ - gpio-map-pass-thru
+
+additionalProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/interrupt-controller/irq.h>
+
+ connector {
+ compatible = "fsl,imx95-19x19-evk-aud-io";
+ gpio-controller;
+ #gpio-cells = <2>;
+ gpio-map = <0 0 &gpio1 8 1>;
+ gpio-map-mask = <0xf 0x0>;
+ gpio-map-pass-thru = <0x0 0x1>;
+ #clock-cells = <1>;
+ clock-map = <0 &clk 1>;
+ #address-cells = <0>;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ interrupt-map-mask = <0xf 0x0>;
+ interrupt-map = <0 0 &gpio2 27 IRQ_TYPE_LEVEL_LOW>;
+ };
--
2.50.1
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH v3 1/4] dt-bindings: connector: Add fsl,aud-io-slot binding
2026-11-03 7:04 ` [PATCH v3 1/4] dt-bindings: connector: Add fsl,aud-io-slot binding Chancel Liu
@ 2026-11-03 7:32 ` sashiko-bot
2026-11-03 15:26 ` Frank Li
1 sibling, 0 replies; 7+ messages in thread
From: sashiko-bot @ 2026-11-03 7:32 UTC (permalink / raw)
To: Chancel Liu; +Cc: devicetree, imx, robh, conor+dt, Frank.Li
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
- [Medium] dt-bindings: connector: controller properties on passive nexus node
- [Low] dt-bindings: connector: reference to non-existent gpio-nexus-node.yaml
- [Low] dt-bindings: connector: 2-space indent and raw GPIO flag in example
--
commit e914717ab225094e8907a50041ee664ef2ac92f2
Author: Chancel Liu <chancel.liu@nxp.com>
dt-bindings: connector: Add fsl,aud-io-slot binding
This patch adds a Device Tree binding schema for the NXP AUD-IO slot
connector found on the i.MX95 19x19 EVK and i.MX952 EVK base boards. The
connector acts as a nexus node that remaps GPIOs, clocks, and interrupts
to base board providers for the IMX-AUD-IO expansion card.
> diff --git a/Documentation/devicetree/bindings/connector/fsl,aud-io-slot.yaml b/Documentation/devicetree/bindings/connector/fsl,aud-io-slot.yaml
> new file mode 100644
> index 0000000000000..fc3896d0fafab
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/connector/fsl,aud-io-slot.yaml
> @@ -0,0 +1,106 @@
[ ... ]
> + gpio-controller: true
> +
> + '#gpio-cells':
> + const: 2
> +
> + gpio-map:
> + minItems: 1
> + maxItems: 3
> +
> + gpio-map-mask:
> + items:
> + - const: 0xf
> + - const: 0x0
> +
> + gpio-map-pass-thru:
> + items:
> + - const: 0x0
> + - const: 0x1
> +
> + '#clock-cells':
> + const: 1
> +
> + clock-map:
> + minItems: 1
> + maxItems: 2
> +
> + '#address-cells':
> + const: 0
> +
> + interrupt-controller: true
> +
> + '#interrupt-cells':
> + const: 2
> +
> + interrupt-map:
> + minItems: 1
> + maxItems: 2
> +
> + interrupt-map-mask:
> + items:
> + - const: 0xf
> + - const: 0x0
> +
> +allOf:
> + - $ref: /schemas/gpio/gpio-nexus-node.yaml#
> + - $ref: /schemas/clock/clock-nexus-node.yaml#
[Severity: Low]
Will this cause dt_binding_check to fail when resolving the allOf references?
There is no Documentation/devicetree/bindings/gpio/gpio-nexus-node.yaml in
the kernel tree or in dtschema (where gpio-map, gpio-map-mask, and
gpio-map-pass-thru are defined in schemas/gpio/gpio.yaml).
Also, Documentation/devicetree/bindings/clock/clock-nexus-node.yaml defines
select: true so it is applied globally by dtschema rather than being
referenced via allOf in individual bindings. Should the allOf block be
dropped here?
> +
> +required:
> + - compatible
> + - gpio-controller
[Severity: Medium]
Should a passive connector nexus node declare or require gpio-controller and
interrupt-controller?
The binding description notes that all actual hardware providers reside on
the base board and the connector node only defines index-based mappings via
gpio-map, clock-map, and interrupt-map. Per the Devicetree Specification, a
nexus node that remaps specifiers is not itself a controller.
In the kernel, gpio_shared_of_traverse() in drivers/gpio/gpiolib-shared.c
calls of_parse_phandle_with_args() (which does not traverse gpio-map) and
checks for gpio-controller to identify the backing hardware controller:
drivers/gpio/gpiolib-shared.c:gpio_shared_of_traverse() {
...
ret = of_parse_phandle_with_args(curr, prop->name,
"#gpio-cells", i,
&args);
if (ret)
continue;
np = args.np;
if (!of_property_present(np, "gpio-controller"))
continue;
...
}
When gpio-controller is present on the connector node, gpiolib-shared
records the passive connector node as the GPIO controller device instead of
the actual GPIO controller on the base board.
Similarly, in of_irq_parse_raw() in drivers/of/irq.c:
drivers/of/irq.c:of_irq_parse_raw() {
...
bool intc = of_property_read_bool(ipar, "interrupt-controller");
imap = of_get_property(ipar, "interrupt-map", &imaplen);
if (intc &&
(!imap || of_device_compatible_match(ipar, of_irq_imap_abusers))) {
pr_debug(" -> got it !\n");
return 0;
}
...
}
If a node sets interrupt-controller without interrupt-map (which is optional
in this schema), interrupt resolution stops at the passive connector node
where no irq_domain exists.
Could gpio-controller and interrupt-controller be removed from properties,
required, and the example?
> + - '#gpio-cells'
> + - gpio-map
> + - gpio-map-mask
> + - gpio-map-pass-thru
> +
> +additionalProperties: false
> +
> +examples:
> + - |
> + #include <dt-bindings/interrupt-controller/irq.h>
> +
> + connector {
> + compatible = "fsl,imx95-19x19-evk-aud-io";
> + gpio-controller;
> + #gpio-cells = <2>;
> + gpio-map = <0 0 &gpio1 8 1>;
> + gpio-map-mask = <0xf 0x0>;
> + gpio-map-pass-thru = <0x0 0x1>;
> + #clock-cells = <1>;
> + clock-map = <0 &clk 1>;
> + #address-cells = <0>;
> + interrupt-controller;
> + #interrupt-cells = <2>;
> + interrupt-map-mask = <0xf 0x0>;
> + interrupt-map = <0 0 &gpio2 27 IRQ_TYPE_LEVEL_LOW>;
> + };
[Severity: Low]
This isn't a bug, but the properties inside the connector node in the
example use 2-space indentation instead of 4-space indentation, which
triggers a warning in scripts/dtc/dt-check-style --mode=strict. Also,
could gpio-map include dt-bindings/gpio/gpio.h and use a symbolic GPIO flag
macro instead of the raw integer 1?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261103070433.2307145-1-chancel.liu@oss.nxp.com?part=1
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH v3 1/4] dt-bindings: connector: Add fsl,aud-io-slot binding
2026-11-03 7:04 ` [PATCH v3 1/4] dt-bindings: connector: Add fsl,aud-io-slot binding Chancel Liu
2026-11-03 7:32 ` sashiko-bot
@ 2026-11-03 15:26 ` Frank Li
1 sibling, 0 replies; 7+ messages in thread
From: Frank Li @ 2026-11-03 15:26 UTC (permalink / raw)
To: Chancel Liu
Cc: robh, krzk+dt, conor+dt, Frank.Li, s.hauer, kernel, festevam,
devicetree, linux-kernel, imx, linux-arm-kernel
On Tue, Nov 03, 2026 at 04:04:30PM +0900, Chancel Liu wrote:
> From: Chancel Liu <chancel.liu@nxp.com>
>
> The NXP AUD-IO slot represents a physically present I/O connector on
> the base board. It acts as a nexus that exposes a constrained set of
> I/O resources, such as GPIOs, clocks and interrupts, through fixed
> electrical wiring. All actual hardware providers reside on the base
> board. The connector node only defines index-based mappings to those
> providers.
>
> This connector type is present on i.MX95 19x19 EVK and i.MX952 EVK,
> where it is used to attach the IMX-AUD-IO audio expansion card[1]. The
> same add-on board can be reused across different base boards that carry
> this connector.
>
> [1]https://www.nxp.com/part/IMX-AUD-IO
>
> Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
> ---
> .../bindings/connector/fsl,aud-io-slot.yaml | 106 ++++++++++++++++++
> 1 file changed, 106 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/connector/fsl,aud-io-slot.yaml
>
> diff --git a/Documentation/devicetree/bindings/connector/fsl,aud-io-slot.yaml b/Documentation/devicetree/bindings/connector/fsl,aud-io-slot.yaml
> new file mode 100644
> index 000000000000..fc3896d0fafa
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/connector/fsl,aud-io-slot.yaml
> @@ -0,0 +1,106 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/connector/fsl,aud-io-slot.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: NXP AUD-IO Slot
> +
> +maintainers:
> + - Frank Li <Frank.Li@nxp.com>
> + - Chancel Liu <chancel.liu@nxp.com>
> +
> +description:
> + The NXP AUD-IO slot represents a physically present I/O connector on
> + the base board. It acts as a nexus that exposes a constrained set of
> + I/O resources, such as GPIOs, clocks and interrupts, through fixed
> + electrical wiring. All actual hardware providers reside on the base
> + board. The connector node only defines index-based mappings to those
> + providers. This connector type is present on i.MX95 19x19 EVK and
> + i.MX952 EVK, where it is used to attach the IMX-AUD-IO expansion card.
> +
> +properties:
> + compatible:
> + oneOf:
> + - items:
> + - enum:
> + - fsl,imx952-evk-aud-io
> + - const: fsl,imx95-19x19-evk-aud-io
> + - const: fsl,imx95-19x19-evk-aud-io
> +
> + gpio-controller: true
I remember Rob said needn't gpio-controller if gpio-map exist
> +
> + '#gpio-cells':
> + const: 2
> +
> + gpio-map:
> + minItems: 1
> + maxItems: 3
> +
> + gpio-map-mask:
> + items:
> + - const: 0xf
> + - const: 0x0
> +
> + gpio-map-pass-thru:
> + items:
> + - const: 0x0
> + - const: 0x1
I think you should pass thru whole u32 0xffffffff in case GPIO add
new flags in future.
> +
> + '#clock-cells':
> + const: 1
> +
> + clock-map:
> + minItems: 1
> + maxItems: 2
> +
> + '#address-cells':
> + const: 0
There are not child node, why need #address-cells?
> +
> + interrupt-controller: true
> +
> + '#interrupt-cells':
> + const: 2
> +
> + interrupt-map:
> + minItems: 1
> + maxItems: 2
> +
> + interrupt-map-mask:
> + items:
> + - const: 0xf
> + - const: 0x0
> +
> +allOf:
> + - $ref: /schemas/gpio/gpio-nexus-node.yaml#
> + - $ref: /schemas/clock/clock-nexus-node.yaml#
> +
> +required:
> + - compatible
> + - gpio-controller
> + - '#gpio-cells'
> + - gpio-map
> + - gpio-map-mask
> + - gpio-map-pass-thru
> +
> +additionalProperties: false
> +
> +examples:
> + - |
> + #include <dt-bindings/interrupt-controller/irq.h>
> +
> + connector {
> + compatible = "fsl,imx95-19x19-evk-aud-io";
> + gpio-controller;
> + #gpio-cells = <2>;
> + gpio-map = <0 0 &gpio1 8 1>;
> + gpio-map-mask = <0xf 0x0>;
> + gpio-map-pass-thru = <0x0 0x1>;
> + #clock-cells = <1>;
> + clock-map = <0 &clk 1>;
> + #address-cells = <0>;
> + interrupt-controller;
> + #interrupt-cells = <2>;
> + interrupt-map-mask = <0xf 0x0>;
> + interrupt-map = <0 0 &gpio2 27 IRQ_TYPE_LEVEL_LOW>;
^ missed count?
Frank
> + };
> --
> 2.50.1
>
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v3 2/4] arm64: dts: freescale: imx95-19x19-evk: Add IMX-AUD-IO board support
2026-11-03 7:04 [PATCH v3 0/4] arm64: dts: freescale: Add IMX-AUD-IO add-on board support Chancel Liu
2026-11-03 7:04 ` [PATCH v3 1/4] dt-bindings: connector: Add fsl,aud-io-slot binding Chancel Liu
@ 2026-11-03 7:04 ` Chancel Liu
2026-11-03 7:04 ` [PATCH v3 3/4] arm64: dts: freescale: imx952-evk: " Chancel Liu
2026-11-03 7:04 ` [PATCH v3 4/4] arm64: dts: freescale: Add common DTS overlay for IMX-AUD-IO add-on board Chancel Liu
3 siblings, 0 replies; 7+ messages in thread
From: Chancel Liu @ 2026-11-03 7:04 UTC (permalink / raw)
To: robh, krzk+dt, conor+dt, Frank.Li, s.hauer
Cc: kernel, festevam, devicetree, linux-kernel, imx, linux-arm-kernel
From: Chancel Liu <chancel.liu@nxp.com>
IMX-AUD-IO is an add-on board which can be connected to i.MX95 19x19
EVK through a physical connector. This connector is described as a
fsl,aud-io-slot connector to expose a constrained subset of GPIO and
clock resources to the add-on board using fixed electrical wiring.
Also add required regulator, sound CPU DAI and I2C bus configuration to
support IMX-AUD-IO on this base board.
Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
---
.../boot/dts/freescale/imx95-19x19-evk.dts | 54 ++++++++++++++++++-
1 file changed, 52 insertions(+), 2 deletions(-)
diff --git a/arch/arm64/boot/dts/freescale/imx95-19x19-evk.dts b/arch/arm64/boot/dts/freescale/imx95-19x19-evk.dts
index 47ed0ef67611..ddc5aed2ea8a 100644
--- a/arch/arm64/boot/dts/freescale/imx95-19x19-evk.dts
+++ b/arch/arm64/boot/dts/freescale/imx95-19x19-evk.dts
@@ -43,6 +43,18 @@ aliases {
serial4 = &lpuart5;
};
+ aud_io_slot: connector {
+ compatible = "fsl,imx95-19x19-evk-aud-io";
+ gpio-controller;
+ #gpio-cells = <2>;
+ gpio-map = <0 0 &i2c6_pcal6416 8 1>;
+ gpio-map-mask = <0xf 0x0>;
+ /* Only pass through GPIO polarity flag bit 0. */
+ gpio-map-pass-thru = <0x0 0x1>;
+ #clock-cells = <1>;
+ clock-map = <0 &scmi_clk IMX95_CLK_SAI2>;
+ };
+
bt_sco_codec: audio-codec-bt-sco {
#sound-dai-cells = <1>;
compatible = "linux,bt-sco";
@@ -161,7 +173,7 @@ flexcan2_phy: can-phy1 {
standby-gpios = <&i2c4_gpio_expander_21 3 GPIO_ACTIVE_LOW>;
};
- reg_vref_1v8: regulator-1p8v {
+ aud_io_reg_1v8: reg_vref_1v8: regulator-1p8v {
compatible = "regulator-fixed";
regulator-max-microvolt = <1800000>;
regulator-min-microvolt = <1800000>;
@@ -175,6 +187,22 @@ reg_3p3v: regulator-3p3v {
regulator-name = "+V3.3_SW";
};
+ aud_io_reg_3v3: regulator-aud-io-3v3 {
+ compatible = "regulator-fixed";
+ regulator-name = "aud-io-3v3";
+ regulator-max-microvolt = <3300000>;
+ regulator-min-microvolt = <3300000>;
+ gpio = <&i2c6_pcal6416 11 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+
+ aud_io_reg_5v: regulator-aud-io-5v {
+ compatible = "regulator-fixed";
+ regulator-name = "aud-io-5v";
+ regulator-max-microvolt = <5000000>;
+ regulator-min-microvolt = <5000000>;
+ };
+
reg_audio_pwr: regulator-audio-pwr {
compatible = "regulator-fixed";
regulator-name = "audio-pwr";
@@ -449,7 +477,7 @@ i2c5_pcal6408: gpio@21 {
};
};
-&lpi2c6 {
+aud_io_i2c: &lpi2c6 {
clock-frequency = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_lpi2c6>;
@@ -671,6 +699,28 @@ &sai1 {
status = "okay";
};
+aud_io_cpu: &sai2 {
+ #sound-dai-cells = <0>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_sai2>;
+ clocks = <&scmi_clk IMX95_CLK_BUSNETCMIX>, <&dummy>,
+ <&scmi_clk IMX95_CLK_SAI2>, <&dummy>,
+ <&dummy>, <&scmi_clk IMX95_CLK_AUDIOPLL1>,
+ <&scmi_clk IMX95_CLK_AUDIOPLL2>;
+ clock-names = "bus", "mclk0", "mclk1", "mclk2", "mclk3", "pll8k", "pll11k";
+ assigned-clocks = <&scmi_clk IMX95_CLK_AUDIOPLL1_VCO>,
+ <&scmi_clk IMX95_CLK_AUDIOPLL2_VCO>,
+ <&scmi_clk IMX95_CLK_AUDIOPLL1>,
+ <&scmi_clk IMX95_CLK_AUDIOPLL2>,
+ <&scmi_clk IMX95_CLK_SAI2>;
+ assigned-clock-parents = <0>, <0>, <0>, <0>,
+ <&scmi_clk IMX95_CLK_AUDIOPLL1>;
+ assigned-clock-rates = <3932160000>, <3612672000>,
+ <393216000>, <361267200>, <12288000>;
+ fsl,sai-mclk-direction-output;
+ fsl,sai-asynchronous;
+};
+
&sai3 {
#sound-dai-cells = <0>;
pinctrl-names = "default";
--
2.50.1
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH v3 3/4] arm64: dts: freescale: imx952-evk: Add IMX-AUD-IO board support
2026-11-03 7:04 [PATCH v3 0/4] arm64: dts: freescale: Add IMX-AUD-IO add-on board support Chancel Liu
2026-11-03 7:04 ` [PATCH v3 1/4] dt-bindings: connector: Add fsl,aud-io-slot binding Chancel Liu
2026-11-03 7:04 ` [PATCH v3 2/4] arm64: dts: freescale: imx95-19x19-evk: Add IMX-AUD-IO board support Chancel Liu
@ 2026-11-03 7:04 ` Chancel Liu
2026-11-03 7:04 ` [PATCH v3 4/4] arm64: dts: freescale: Add common DTS overlay for IMX-AUD-IO add-on board Chancel Liu
3 siblings, 0 replies; 7+ messages in thread
From: Chancel Liu @ 2026-11-03 7:04 UTC (permalink / raw)
To: robh, krzk+dt, conor+dt, Frank.Li, s.hauer
Cc: kernel, festevam, devicetree, linux-kernel, imx, linux-arm-kernel
From: Chancel Liu <chancel.liu@nxp.com>
IMX-AUD-IO is an add-on board which can be connected to i.MX952 EVK
through a physical connector. This connector is described as a
fsl,aud-io-slot connector to expose a constrained subset of GPIO and
clock resources to the add-on board using fixed electrical wiring.
Also add required regulator, sound CPU DAI and I2C bus configuration to
support IMX-AUD-IO on this base board.
Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
---
arch/arm64/boot/dts/freescale/imx952-evk.dts | 69 +++++++++++++++++++-
1 file changed, 67 insertions(+), 2 deletions(-)
diff --git a/arch/arm64/boot/dts/freescale/imx952-evk.dts b/arch/arm64/boot/dts/freescale/imx952-evk.dts
index 047dfde20718..401e16b7e4a0 100644
--- a/arch/arm64/boot/dts/freescale/imx952-evk.dts
+++ b/arch/arm64/boot/dts/freescale/imx952-evk.dts
@@ -49,6 +49,18 @@ amp_mqs1: audio-amplifier {
VCC-supply = <®_3p3v>;
};
+ aud_io_slot: connector {
+ compatible = "fsl,imx952-evk-aud-io", "fsl,imx95-19x19-evk-aud-io";
+ gpio-controller;
+ #gpio-cells = <2>;
+ gpio-map = <0 0 &pcal6416 8 1>;
+ gpio-map-mask = <0xf 0x0>;
+ /* Only pass through GPIO polarity flag bit 0. */
+ gpio-map-pass-thru = <0x0 0x1>;
+ #clock-cells = <1>;
+ clock-map = <0 &scmi_clk IMX952_CLK_SAI2>;
+ };
+
bt_sco_codec: audio-codec-bt-sco {
#sound-dai-cells = <1>;
compatible = "linux,bt-sco";
@@ -190,13 +202,29 @@ reg_1p8v: regulator-1p8v {
regulator-name = "+V1.8_SW";
};
- reg_vref_1v8: regulator-adc-vref {
+ aud_io_reg_1v8: reg_vref_1v8: regulator-adc-vref {
compatible = "regulator-fixed";
regulator-name = "vref_1v8";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
};
+ aud_io_reg_3v3: regulator-aud-io-3v3 {
+ compatible = "regulator-fixed";
+ regulator-name = "aud-io-3v3";
+ regulator-max-microvolt = <3300000>;
+ regulator-min-microvolt = <3300000>;
+ gpio = <&pcal6416 11 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+
+ aud_io_reg_5v: regulator-aud-io-5v {
+ compatible = "regulator-fixed";
+ regulator-name = "aud-io-5v";
+ regulator-max-microvolt = <5000000>;
+ regulator-min-microvolt = <5000000>;
+ };
+
reg_audio_pwr: regulator-audio-pwr {
compatible = "regulator-fixed";
regulator-name = "audio-pwr";
@@ -409,7 +437,7 @@ i2c4_pcal6408: gpio@21 {
};
};
-&lpi2c6 {
+aud_io_i2c: &lpi2c6 {
clock-frequency = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_lpi2c6>;
@@ -556,6 +584,27 @@ &sai1 {
status = "okay";
};
+aud_io_cpu: &sai2 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_sai2>;
+ clocks = <&scmi_clk IMX952_CLK_BUSNETCMIX>, <&clk_dummy>,
+ <&scmi_clk IMX952_CLK_SAI2>, <&clk_dummy>,
+ <&clk_dummy>, <&scmi_clk IMX952_CLK_AUDIOPLL1>,
+ <&scmi_clk IMX952_CLK_AUDIOPLL2>;
+ clock-names = "bus", "mclk0", "mclk1", "mclk2", "mclk3", "pll8k", "pll11k";
+ assigned-clocks = <&scmi_clk IMX952_CLK_AUDIOPLL1_VCO>,
+ <&scmi_clk IMX952_CLK_AUDIOPLL2_VCO>,
+ <&scmi_clk IMX952_CLK_AUDIOPLL1>,
+ <&scmi_clk IMX952_CLK_AUDIOPLL2>,
+ <&scmi_clk IMX952_CLK_SAI2>;
+ assigned-clock-parents = <0>, <0>, <0>, <0>,
+ <&scmi_clk IMX952_CLK_AUDIOPLL1>;
+ assigned-clock-rates = <3932160000>, <3612672000>,
+ <393216000>, <361267200>, <12288000>;
+ fsl,sai-mclk-direction-output;
+ fsl,sai-asynchronous;
+};
+
&sai3 {
assigned-clocks = <&scmi_clk IMX952_CLK_AUDIOPLL1_VCO>,
<&scmi_clk IMX952_CLK_AUDIOPLL2_VCO>,
@@ -783,6 +832,22 @@ IMX952_PAD_SAI1_TXD0__AONMIX_TOP_GPIO1_IO_13 0x51e
>;
};
+ pinctrl_sai2: sai2grp {
+ fsl,pins = <
+ IMX952_PAD_ENET2_MDIO__NETCMIX_TOP_SAI2_RX_BCLK 0x31e
+ IMX952_PAD_ENET2_MDC__NETCMIX_TOP_SAI2_RX_SYNC 0x31e
+ IMX952_PAD_ENET2_TD3__NETCMIX_TOP_SAI2_RX_DATA_0 0x31e
+ IMX952_PAD_ENET2_TD2__NETCMIX_TOP_SAI2_RX_DATA_1 0x31e
+ IMX952_PAD_ENET2_TXC__NETCMIX_TOP_SAI2_TX_BCLK 0x31e
+ IMX952_PAD_ENET2_TX_CTL__NETCMIX_TOP_SAI2_TX_SYNC 0x31e
+ IMX952_PAD_ENET2_RX_CTL__NETCMIX_TOP_SAI2_TX_DATA_0 0x31e
+ IMX952_PAD_ENET2_RXC__NETCMIX_TOP_SAI2_TX_DATA_1 0x31e
+ IMX952_PAD_ENET2_RD0__NETCMIX_TOP_SAI2_TX_DATA_2 0x31e
+ IMX952_PAD_ENET2_RD1__NETCMIX_TOP_SAI2_TX_DATA_3 0x31e
+ IMX952_PAD_ENET2_RD2__NETCMIX_TOP_SAI2_MCLK 0x31e
+ >;
+ };
+
pinctrl_sai3: sai3grp {
fsl,pins = <
IMX952_PAD_GPIO_IO17__WAKEUPMIX_TOP_SAI3_MCLK 0x31e
--
2.50.1
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH v3 4/4] arm64: dts: freescale: Add common DTS overlay for IMX-AUD-IO add-on board
2026-11-03 7:04 [PATCH v3 0/4] arm64: dts: freescale: Add IMX-AUD-IO add-on board support Chancel Liu
` (2 preceding siblings ...)
2026-11-03 7:04 ` [PATCH v3 3/4] arm64: dts: freescale: imx952-evk: " Chancel Liu
@ 2026-11-03 7:04 ` Chancel Liu
3 siblings, 0 replies; 7+ messages in thread
From: Chancel Liu @ 2026-11-03 7:04 UTC (permalink / raw)
To: robh, krzk+dt, conor+dt, Frank.Li, s.hauer
Cc: kernel, festevam, devicetree, linux-kernel, imx, linux-arm-kernel
From: Chancel Liu <chancel.liu@nxp.com>
Add common DTS overlay for the IMX-AUD-IO add-on board[1] which
connects to the base board through a fsl,aud-io-slot connector.
This board features a CS42888 codec providing 2 microphone inputs, 2
line inputs and 6 channels audio output capability.
[1]https://www.nxp.com/part/IMX-AUD-IO
Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
---
arch/arm64/boot/dts/freescale/Makefile | 4 ++
arch/arm64/boot/dts/freescale/imx-aud-io.dtso | 57 +++++++++++++++++++
2 files changed, 61 insertions(+)
create mode 100644 arch/arm64/boot/dts/freescale/imx-aud-io.dtso
diff --git a/arch/arm64/boot/dts/freescale/Makefile b/arch/arm64/boot/dts/freescale/Makefile
index a80cccf34eb5..aaf546cec0c8 100644
--- a/arch/arm64/boot/dts/freescale/Makefile
+++ b/arch/arm64/boot/dts/freescale/Makefile
@@ -994,6 +994,8 @@ dtb-$(CONFIG_ARCH_MXC) += imx95-15x15-evk-mqs.dtb
imx95-19x19-evk-pcie0-ep-dtbs += imx95-19x19-evk.dtb imx-pcie0-ep.dtbo
imx95-19x19-evk-pcie1-ep-dtbs += imx95-19x19-evk.dtb imx-pcie1-ep.dtbo
dtb-$(CONFIG_ARCH_MXC) += imx95-19x19-evk-pcie0-ep.dtb imx95-19x19-evk-pcie1-ep.dtb
+imx95-19x19-evk-aud-io-dtbs += imx95-19x19-evk.dtb imx-aud-io.dtbo
+dtb-$(CONFIG_ARCH_MXC) += imx95-19x19-evk-aud-io.dtb
dtb-$(CONFIG_ARCH_MXC) += imx95-libra-rdk-fpsc.dtb
dtb-$(CONFIG_ARCH_MXC) += imx95-19x19-verdin-evk.dtb
@@ -1001,6 +1003,8 @@ dtb-$(CONFIG_ARCH_MXC) += imx95-19x19-verdin-evk.dtb
dtb-$(CONFIG_ARCH_MXC) += imx952-evk.dtb
imx952-evk-mqs-dtbs += imx952-evk.dtb imx9-mqs.dtbo
dtb-$(CONFIG_ARCH_MXC) += imx952-evk-mqs.dtb
+imx952-evk-aud-io-dtbs += imx952-evk.dtb imx-aud-io.dtbo
+dtb-$(CONFIG_ARCH_MXC) += imx952-evk-aud-io.dtb
dtb-$(CONFIG_ARCH_MXC) += imx952-frdm.dtb
diff --git a/arch/arm64/boot/dts/freescale/imx-aud-io.dtso b/arch/arm64/boot/dts/freescale/imx-aud-io.dtso
new file mode 100644
index 000000000000..311b7f984576
--- /dev/null
+++ b/arch/arm64/boot/dts/freescale/imx-aud-io.dtso
@@ -0,0 +1,57 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Common Device Tree for the IMX-AUD-IO add-on board[1].
+ * It connects to the base board through an AUD-IO slot.
+ *
+ * [1]https://www.nxp.com/part/IMX-AUD-IO
+ *
+ * Copyright 2026 NXP
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include <dt-bindings/gpio/gpio.h>
+
+&{/} {
+ aud-io-sound-cs42888 {
+ compatible = "fsl,imx-audio-card";
+ model = "imx-cs42888";
+
+ pri-dai-link {
+ link-name = "cs42888";
+ format = "i2s";
+ fsl,mclk-equal-bclk;
+
+ codec {
+ sound-dai = <&audio_io_codec>;
+ };
+
+ cpu {
+ sound-dai = <&aud_io_cpu>;
+ };
+ };
+ };
+};
+
+&aud_io_i2c {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ audio_io_codec: codec@48 {
+ compatible = "cirrus,cs42888";
+ reg = <0x48>;
+ clocks = <&aud_io_slot 0>;
+ clock-names = "mclk";
+ VA-supply = <&aud_io_reg_5v>;
+ VD-supply = <&aud_io_reg_3v3>;
+ VLS-supply = <&aud_io_reg_1v8>;
+ VLC-supply = <&aud_io_reg_1v8>;
+ #sound-dai-cells = <0>;
+ reset-gpios = <&aud_io_slot 0 GPIO_ACTIVE_LOW>;
+ };
+};
+
+&aud_io_cpu {
+ status = "okay";
+};
--
2.50.1
^ permalink raw reply related [flat|nested] 7+ messages in thread