Linux kernel and device drivers for NXP i.MX platforms
 help / color / mirror / Atom feed
* [PATCH v2 00/17] arm64: dts: Add MQS1 sound card support for i.MX9 EVK platforms
@ 2026-08-18  3:01 Chancel Liu
  2026-08-18  3:01 ` [PATCH v2 01/17] arm64: dts: imx91_93_common: Add clock and sound-dai-cells properties for MQS Chancel Liu
                   ` (16 more replies)
  0 siblings, 17 replies; 20+ messages in thread
From: Chancel Liu @ 2026-08-18  3:01 UTC (permalink / raw)
  To: Frank.Li, s.hauer, robh, krzk+dt, conor+dt, imx
  Cc: kernel, festevam, linux-arm-kernel, devicetree, linux-kernel

From: Chancel Liu <chancel.liu@nxp.com>

MQS (Medium Quality Sound) is an internal audio DAC available on multiple
NXP i.MX9 SoCs. On EVK boards, the MQS output pins are typically shared
with other peripherals (CAN, PDM microphone, etc.), so enabling MQS
requires switching board-level pin muxes and disabling the conflicting
device.

This series adds MQS1 sound card support across the following platforms:
  - i.MX91 11x11 EVK
  - i.MX93 11x11 EVK
  - i.MX93 14x14 EVK
  - i.MX943 EVK
  - i.MX95 15x15 EVK
  - i.MX952 EVK

Changes in v2:
- Amend commit message to describe SAI1 clocks assignments
- Remove redundant clocks/clock-names for MQS on the frdm boards
- Add the missing <&can1_fun> mux state to FlexCAN on imx93-14x14-evk

v1: https://lore.kernel.org/imx/20260814072022.4064009-1-chancel.liu@oss.nxp.com/

Chancel Liu (17):
  arm64: dts: imx91_93_common: Add clock and sound-dai-cells properties
    for MQS
  arm64: dts: imx91-11x11-evk: Add board muxes to select between PDM and
    MQS1
  arm64: dts: imx91-11x11-evk: Add MQS1 pinmux, clocks and mark
    conflicting devices
  arm64: dts: imx93-11x11-evk: Add board muxes to select between PDM and
    MQS1
  arm64: dts: imx93-11x11-evk: Add MQS1 pinmux, clocks and mark
    conflicting devices
  arm64: dts: imx93-14x14-evk: Add board muxes to select between
    FlexCAN1 and MQS1
  arm64: dts: imx93-14x14-evk: Add MQS1 pinmux, clocks and mark
    conflicting devices
  arm64: dts: imx94: Add clock and sound-dai-cells properties for MQS1
  arm64: dts: imx943-evk: Add board muxes to select between CAN1/PDM and
    MQS1/MIC
  arm64: dts: imx943-evk: Add MQS1 pinmux, clocks and mark conflicting
    devices
  arm64: dts: imx95: Add clock and sound-dai-cells properties for MQS1
  arm64: dts: imx95-15x15-evk: Add board muxes to select between PDM and
    MQS1
  arm64: dts: imx95-15x15-evk: Add MQS1 pinmux, clocks and mark
    conflicting devices
  arm64: dts: imx952: Add AONMIX MQS device node
  arm64: dts: imx952-evk: Add board muxes to select between CAN1/PDM
  arm64: dts: imx952-evk: Add MQS1 pinmux, clocks and mark conflicting
    devices
  arm64: dts: fsl: Add DT overlay to build MQS1 sound cards on i.MX9
    platforms

 arch/arm64/boot/dts/freescale/Makefile        | 12 ++++
 arch/arm64/boot/dts/freescale/imx9-mqs.dtso   | 54 ++++++++++++++
 .../boot/dts/freescale/imx91-11x11-evk.dts    | 41 ++++++++++-
 .../boot/dts/freescale/imx91-11x11-frdm-s.dts |  2 -
 .../boot/dts/freescale/imx91-11x11-frdm.dts   |  2 -
 .../boot/dts/freescale/imx91_93_common.dtsi   |  6 ++
 .../boot/dts/freescale/imx93-11x11-evk.dts    | 41 ++++++++++-
 .../boot/dts/freescale/imx93-11x11-frdm.dts   |  2 -
 .../boot/dts/freescale/imx93-14x14-evk.dts    | 52 +++++++++++++-
 arch/arm64/boot/dts/freescale/imx94.dtsi      |  3 +
 arch/arm64/boot/dts/freescale/imx943-evk.dts  | 70 +++++++++++++-----
 .../boot/dts/freescale/imx95-15x15-evk.dts    | 42 ++++++++++-
 .../boot/dts/freescale/imx95-15x15-frdm.dts   |  2 -
 .../dts/freescale/imx95-19x19-frdm-pro.dts    |  2 -
 arch/arm64/boot/dts/freescale/imx95.dtsi      |  3 +
 arch/arm64/boot/dts/freescale/imx952-evk.dts  | 71 ++++++++++++++-----
 arch/arm64/boot/dts/freescale/imx952.dtsi     |  8 +++
 17 files changed, 359 insertions(+), 54 deletions(-)
 create mode 100644 arch/arm64/boot/dts/freescale/imx9-mqs.dtso

--
2.50.1


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH v2 01/17] arm64: dts: imx91_93_common: Add clock and sound-dai-cells properties for MQS
  2026-08-18  3:01 [PATCH v2 00/17] arm64: dts: Add MQS1 sound card support for i.MX9 EVK platforms Chancel Liu
@ 2026-08-18  3:01 ` Chancel Liu
  2026-08-18  3:01 ` [PATCH v2 02/17] arm64: dts: imx91-11x11-evk: Add board muxes to select between PDM and MQS1 Chancel Liu
                   ` (15 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Chancel Liu @ 2026-08-18  3:01 UTC (permalink / raw)
  To: Frank.Li, s.hauer, robh, krzk+dt, conor+dt, imx
  Cc: kernel, festevam, linux-arm-kernel, devicetree, linux-kernel

From: Chancel Liu <chancel.liu@nxp.com>

The "mclk" clock provides the MQS oversampling clock, and #sound-dai-cells
describes the node as an ASoC DAI provider. Both are fixed SoC integration
properties rather than board specific, so add them here in the common dtsi
instead of duplicating them in each board dts.

Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
---
 arch/arm64/boot/dts/freescale/imx91-11x11-frdm-s.dts | 2 --
 arch/arm64/boot/dts/freescale/imx91-11x11-frdm.dts   | 2 --
 arch/arm64/boot/dts/freescale/imx91_93_common.dtsi   | 6 ++++++
 arch/arm64/boot/dts/freescale/imx93-11x11-frdm.dts   | 2 --
 4 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/arch/arm64/boot/dts/freescale/imx91-11x11-frdm-s.dts b/arch/arm64/boot/dts/freescale/imx91-11x11-frdm-s.dts
index 62dc1dedfb0e..c6019d76b998 100644
--- a/arch/arm64/boot/dts/freescale/imx91-11x11-frdm-s.dts
+++ b/arch/arm64/boot/dts/freescale/imx91-11x11-frdm-s.dts
@@ -672,8 +672,6 @@ &media_blk_ctrl {
 };
 
 &mqs1 {
-	clocks = <&clk IMX93_CLK_MQS1_GATE>;
-	clock-names = "mclk";
 	pinctrl-0 = <&pinctrl_mqs1>;
 	pinctrl-names = "default";
 	status = "okay";
diff --git a/arch/arm64/boot/dts/freescale/imx91-11x11-frdm.dts b/arch/arm64/boot/dts/freescale/imx91-11x11-frdm.dts
index c25561574d3f..6144fa6f3706 100644
--- a/arch/arm64/boot/dts/freescale/imx91-11x11-frdm.dts
+++ b/arch/arm64/boot/dts/freescale/imx91-11x11-frdm.dts
@@ -468,8 +468,6 @@ bluetooth {
 };
 
 &mqs1 {
-	clocks = <&clk IMX93_CLK_MQS1_GATE>;
-	clock-names = "mclk";
 	pinctrl-0 = <&pinctrl_mqs1>;
 	pinctrl-names = "default";
 	status = "okay";
diff --git a/arch/arm64/boot/dts/freescale/imx91_93_common.dtsi b/arch/arm64/boot/dts/freescale/imx91_93_common.dtsi
index a1a7e6a0571b..a68ffd04ee08 100644
--- a/arch/arm64/boot/dts/freescale/imx91_93_common.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx91_93_common.dtsi
@@ -100,13 +100,19 @@ gic: interrupt-controller@48000000 {
 
 	mqs1: mqs1 {
 		compatible = "fsl,imx93-mqs";
+		clocks = <&clk IMX93_CLK_MQS1_GATE>;
+		clock-names = "mclk";
 		gpr = <&aonmix_ns_gpr>;
+		#sound-dai-cells = <0>;
 		status = "disabled";
 	};
 
 	mqs2: mqs2 {
 		compatible = "fsl,imx93-mqs";
+		clocks = <&clk IMX93_CLK_MQS2_GATE>;
+		clock-names = "mclk";
 		gpr = <&wakeupmix_gpr>;
+		#sound-dai-cells = <0>;
 		status = "disabled";
 	};
 
diff --git a/arch/arm64/boot/dts/freescale/imx93-11x11-frdm.dts b/arch/arm64/boot/dts/freescale/imx93-11x11-frdm.dts
index bd14ba28690c..038e5ed23e5f 100644
--- a/arch/arm64/boot/dts/freescale/imx93-11x11-frdm.dts
+++ b/arch/arm64/boot/dts/freescale/imx93-11x11-frdm.dts
@@ -400,8 +400,6 @@ bluetooth {
 &mqs1 {
 	pinctrl-names = "default";
 	pinctrl-0 = <&pinctrl_mqs1>;
-	clocks = <&clk IMX93_CLK_MQS1_GATE>;
-	clock-names = "mclk";
 	status = "okay";
 };
 
-- 
2.50.1


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v2 02/17] arm64: dts: imx91-11x11-evk: Add board muxes to select between PDM and MQS1
  2026-08-18  3:01 [PATCH v2 00/17] arm64: dts: Add MQS1 sound card support for i.MX9 EVK platforms Chancel Liu
  2026-08-18  3:01 ` [PATCH v2 01/17] arm64: dts: imx91_93_common: Add clock and sound-dai-cells properties for MQS Chancel Liu
@ 2026-08-18  3:01 ` Chancel Liu
  2026-08-18  3:01 ` [PATCH v2 03/17] arm64: dts: imx91-11x11-evk: Add MQS1 pinmux, clocks and mark conflicting devices Chancel Liu
                   ` (14 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Chancel Liu @ 2026-08-18  3:01 UTC (permalink / raw)
  To: Frank.Li, s.hauer, robh, krzk+dt, conor+dt, imx
  Cc: kernel, festevam, linux-arm-kernel, devicetree, linux-kernel

From: Chancel Liu <chancel.liu@nxp.com>

PDM has pin conflict with MQS1. Add GPIO-controlled board muxes to
route shared signals between PDM and MQS1.

Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
---
 .../boot/dts/freescale/imx91-11x11-evk.dts    | 21 ++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/arch/arm64/boot/dts/freescale/imx91-11x11-evk.dts b/arch/arm64/boot/dts/freescale/imx91-11x11-evk.dts
index 5716febb5a50..4d1ada6a3942 100644
--- a/arch/arm64/boot/dts/freescale/imx91-11x11-evk.dts
+++ b/arch/arm64/boot/dts/freescale/imx91-11x11-evk.dts
@@ -41,6 +41,25 @@ chosen {
 		stdout-path = &lpuart1;
 	};
 
+	pdm_mqs1_mux: mux-controller-0 {
+		compatible = "gpio-mux";
+		#mux-control-cells = <0>;
+		#mux-state-cells = <1>;
+		mux-gpios = <&adp5585 2 GPIO_ACTIVE_HIGH>;
+	};
+
+	pinctrl-gpiomux {
+		compatible = "pinctrl-multiplexer";
+
+		mqs1_fun: mqs1-grp {
+			mux-states = <&pdm_mqs1_mux 1>;
+		};
+
+		pdm_fun: pdm-grp {
+			mux-states = <&pdm_mqs1_mux 0>;
+		};
+	};
+
 	reg_vref_1v8: regulator-adc-vref {
 		compatible = "regulator-fixed";
 		regulator-max-microvolt = <1800000>;
@@ -484,7 +503,7 @@ bluetooth {
 
 &micfil {
 	pinctrl-names = "default", "sleep";
-	pinctrl-0 = <&pinctrl_pdm>;
+	pinctrl-0 = <&pinctrl_pdm>, <&pdm_fun>;
 	pinctrl-1 = <&pinctrl_pdm_sleep>;
 	assigned-clocks = <&clk IMX93_CLK_PDM>;
 	assigned-clock-parents = <&clk IMX93_CLK_AUDIO_PLL>;
-- 
2.50.1


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v2 03/17] arm64: dts: imx91-11x11-evk: Add MQS1 pinmux, clocks and mark conflicting devices
  2026-08-18  3:01 [PATCH v2 00/17] arm64: dts: Add MQS1 sound card support for i.MX9 EVK platforms Chancel Liu
  2026-08-18  3:01 ` [PATCH v2 01/17] arm64: dts: imx91_93_common: Add clock and sound-dai-cells properties for MQS Chancel Liu
  2026-08-18  3:01 ` [PATCH v2 02/17] arm64: dts: imx91-11x11-evk: Add board muxes to select between PDM and MQS1 Chancel Liu
@ 2026-08-18  3:01 ` Chancel Liu
  2026-08-18  3:01 ` [PATCH v2 04/17] arm64: dts: imx93-11x11-evk: Add board muxes to select between PDM and MQS1 Chancel Liu
                   ` (13 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Chancel Liu @ 2026-08-18  3:01 UTC (permalink / raw)
  To: Frank.Li, s.hauer, robh, krzk+dt, conor+dt, imx
  Cc: kernel, festevam, linux-arm-kernel, devicetree, linux-kernel

From: Chancel Liu <chancel.liu@nxp.com>

MQS1 shares pins with PDM and its sound card conflicts with the BT SCO
card. Add the MQS1 pinctrl group and label the conflicting device and
card so the shared imx9-mqs overlay can disable them. The overlay and
its Makefile rule are added in a later patch.

Update SAI1 clock assignments to provide the MQS MCLK source.

Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
---
 .../boot/dts/freescale/imx91-11x11-evk.dts    | 20 +++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/arch/arm64/boot/dts/freescale/imx91-11x11-evk.dts b/arch/arm64/boot/dts/freescale/imx91-11x11-evk.dts
index 4d1ada6a3942..4a3dfafae377 100644
--- a/arch/arm64/boot/dts/freescale/imx91-11x11-evk.dts
+++ b/arch/arm64/boot/dts/freescale/imx91-11x11-evk.dts
@@ -145,7 +145,7 @@ sound-wm8962 {
 			"IN1R", "AMIC";
 	};
 
-	sound-bt-sco {
+	mqs1_conflict_card: sound-bt-sco {
 		compatible = "simple-audio-card";
 		simple-audio-card,name = "bt-sco-audio";
 		simple-audio-card,format = "dsp_a";
@@ -501,7 +501,7 @@ bluetooth {
 	};
 };
 
-&micfil {
+mqs1_conflict_dev: &micfil {
 	pinctrl-names = "default", "sleep";
 	pinctrl-0 = <&pinctrl_pdm>, <&pdm_fun>;
 	pinctrl-1 = <&pinctrl_pdm_sleep>;
@@ -511,10 +511,19 @@ &micfil {
 	status = "okay";
 };
 
+&mqs1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_mqs1>, <&mqs1_fun>;
+};
+
 &sai1 {
 	pinctrl-names = "default", "sleep";
 	pinctrl-0 = <&pinctrl_sai1>;
 	pinctrl-1 = <&pinctrl_sai1_sleep>;
+	clocks = <&clk IMX93_CLK_SAI1_IPG>, <&clk IMX93_CLK_DUMMY>,
+		 <&clk IMX93_CLK_SAI1_GATE>, <&clk IMX93_CLK_DUMMY>,
+		 <&clk IMX93_CLK_DUMMY>, <&clk IMX93_CLK_AUDIO_PLL>;
+	clock-names = "bus", "mclk0", "mclk1", "mclk2", "mclk3", "pll8k";
 	assigned-clocks = <&clk IMX93_CLK_SAI1>;
 	assigned-clock-parents = <&clk IMX93_CLK_AUDIO_PLL>;
 	assigned-clock-rates = <12288000>;
@@ -720,6 +729,13 @@ MX91_PAD_I2C2_SDA__LPI2C2_SDA                           0x40000b9e
 		>;
 	};
 
+	pinctrl_mqs1: mqs1grp {
+		fsl,pins = <
+			MX91_PAD_PDM_CLK__MQS1_LEFT			0x31e
+			MX91_PAD_PDM_BIT_STREAM0__MQS1_RIGHT		0x31e
+		>;
+	};
+
 	pinctrl_pdm: pdmgrp {
 		fsl,pins = <
 			MX91_PAD_PDM_CLK__PDM_CLK			0x31e
-- 
2.50.1


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v2 04/17] arm64: dts: imx93-11x11-evk: Add board muxes to select between PDM and MQS1
  2026-08-18  3:01 [PATCH v2 00/17] arm64: dts: Add MQS1 sound card support for i.MX9 EVK platforms Chancel Liu
                   ` (2 preceding siblings ...)
  2026-08-18  3:01 ` [PATCH v2 03/17] arm64: dts: imx91-11x11-evk: Add MQS1 pinmux, clocks and mark conflicting devices Chancel Liu
@ 2026-08-18  3:01 ` Chancel Liu
  2026-08-18  3:01 ` [PATCH v2 05/17] arm64: dts: imx93-11x11-evk: Add MQS1 pinmux, clocks and mark conflicting devices Chancel Liu
                   ` (12 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Chancel Liu @ 2026-08-18  3:01 UTC (permalink / raw)
  To: Frank.Li, s.hauer, robh, krzk+dt, conor+dt, imx
  Cc: kernel, festevam, linux-arm-kernel, devicetree, linux-kernel

From: Chancel Liu <chancel.liu@nxp.com>

PDM has pin conflict with MQS1. Add GPIO-controlled board muxes to
route shared signals between PDM and MQS1.

Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
---
 .../boot/dts/freescale/imx93-11x11-evk.dts    | 21 ++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts b/arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts
index c6db9c85f2ac..4418fc6a0901 100644
--- a/arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts
+++ b/arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts
@@ -16,6 +16,25 @@ aliases {
 		mmc2 = &usdhc3;
 	};
 
+	pdm_mqs1_mux: mux-controller-0 {
+		compatible = "gpio-mux";
+		#mux-control-cells = <0>;
+		#mux-state-cells = <1>;
+		mux-gpios = <&adp5585 2 GPIO_ACTIVE_HIGH>;
+	};
+
+	pinctrl-gpiomux {
+		compatible = "pinctrl-multiplexer";
+
+		mqs1_fun: mqs1-grp {
+			mux-states = <&pdm_mqs1_mux 1>;
+		};
+
+		pdm_fun: pdm-grp {
+			mux-states = <&pdm_mqs1_mux 0>;
+		};
+	};
+
 	reg_m2_pwr: regulator-m2-pwr {
 		compatible = "regulator-fixed";
 		regulator-name = "M.2-power";
@@ -88,7 +107,7 @@ cpu {
 
 &micfil {
 	pinctrl-names = "default", "sleep";
-	pinctrl-0 = <&pinctrl_pdm>;
+	pinctrl-0 = <&pinctrl_pdm>, <&pdm_fun>;
 	pinctrl-1 = <&pinctrl_pdm_sleep>;
 	assigned-clocks = <&clk IMX93_CLK_PDM>;
 	assigned-clock-parents = <&clk IMX93_CLK_AUDIO_PLL>;
-- 
2.50.1


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v2 05/17] arm64: dts: imx93-11x11-evk: Add MQS1 pinmux, clocks and mark conflicting devices
  2026-08-18  3:01 [PATCH v2 00/17] arm64: dts: Add MQS1 sound card support for i.MX9 EVK platforms Chancel Liu
                   ` (3 preceding siblings ...)
  2026-08-18  3:01 ` [PATCH v2 04/17] arm64: dts: imx93-11x11-evk: Add board muxes to select between PDM and MQS1 Chancel Liu
@ 2026-08-18  3:01 ` Chancel Liu
  2026-08-18  3:02 ` [PATCH v2 06/17] arm64: dts: imx93-14x14-evk: Add board muxes to select between FlexCAN1 and MQS1 Chancel Liu
                   ` (11 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Chancel Liu @ 2026-08-18  3:01 UTC (permalink / raw)
  To: Frank.Li, s.hauer, robh, krzk+dt, conor+dt, imx
  Cc: kernel, festevam, linux-arm-kernel, devicetree, linux-kernel

From: Chancel Liu <chancel.liu@nxp.com>

MQS1 shares pins with PDM and its sound card conflicts with the BT SCO
card. Add the MQS1 pinctrl group and label the conflicting device and
card so the shared imx9-mqs overlay can disable them. The overlay and
its Makefile rule are added in a later patch.

Update SAI1 clock assignments to provide the MQS MCLK source.

Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
---
 .../boot/dts/freescale/imx93-11x11-evk.dts    | 20 +++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts b/arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts
index 4418fc6a0901..71822d06ebf6 100644
--- a/arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts
+++ b/arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts
@@ -71,7 +71,7 @@ bt_sco_codec: bt-sco-codec {
 		#sound-dai-cells = <1>;
 	};
 
-	sound-bt-sco {
+	mqs1_conflict_card: sound-bt-sco {
 		compatible = "simple-audio-card";
 		simple-audio-card,name = "bt-sco-audio";
 		simple-audio-card,format = "dsp_a";
@@ -105,7 +105,7 @@ cpu {
 	};
 };
 
-&micfil {
+mqs1_conflict_dev: &micfil {
 	pinctrl-names = "default", "sleep";
 	pinctrl-0 = <&pinctrl_pdm>, <&pdm_fun>;
 	pinctrl-1 = <&pinctrl_pdm_sleep>;
@@ -115,6 +115,11 @@ &micfil {
 	status = "okay";
 };
 
+&mqs1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_mqs1>, <&mqs1_fun>;
+};
+
 &pcal6524 {
 	m2-pcm-level-shifter-hog {
 		gpio-hog;
@@ -127,6 +132,10 @@ &sai1 {
 	pinctrl-names = "default", "sleep";
 	pinctrl-0 = <&pinctrl_sai1>;
 	pinctrl-1 = <&pinctrl_sai1_sleep>;
+	clocks = <&clk IMX93_CLK_SAI1_IPG>, <&clk IMX93_CLK_DUMMY>,
+		 <&clk IMX93_CLK_SAI1_GATE>, <&clk IMX93_CLK_DUMMY>,
+		 <&clk IMX93_CLK_DUMMY>, <&clk IMX93_CLK_AUDIO_PLL>;
+	clock-names = "bus", "mclk0", "mclk1", "mclk2", "mclk3", "pll8k";
 	assigned-clocks = <&clk IMX93_CLK_SAI1>;
 	assigned-clock-parents = <&clk IMX93_CLK_AUDIO_PLL>;
 	assigned-clock-rates = <12288000>;
@@ -150,6 +159,13 @@ &usdhc3 {
 };
 
 &iomuxc {
+	pinctrl_mqs1: mqs1grp {
+		fsl,pins = <
+			MX93_PAD_PDM_CLK__MQS1_LEFT			0x31e
+			MX93_PAD_PDM_BIT_STREAM0__MQS1_RIGHT		0x31e
+		>;
+	};
+
 	pinctrl_pdm: pdmgrp {
 		fsl,pins = <
 			MX93_PAD_PDM_CLK__PDM_CLK			0x31e
-- 
2.50.1


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v2 06/17] arm64: dts: imx93-14x14-evk: Add board muxes to select between FlexCAN1 and MQS1
  2026-08-18  3:01 [PATCH v2 00/17] arm64: dts: Add MQS1 sound card support for i.MX9 EVK platforms Chancel Liu
                   ` (4 preceding siblings ...)
  2026-08-18  3:01 ` [PATCH v2 05/17] arm64: dts: imx93-11x11-evk: Add MQS1 pinmux, clocks and mark conflicting devices Chancel Liu
@ 2026-08-18  3:02 ` Chancel Liu
  2026-08-18  3:13   ` sashiko-bot
  2026-08-18  3:02 ` [PATCH v2 07/17] arm64: dts: imx93-14x14-evk: Add MQS1 pinmux, clocks and mark conflicting devices Chancel Liu
                   ` (10 subsequent siblings)
  16 siblings, 1 reply; 20+ messages in thread
From: Chancel Liu @ 2026-08-18  3:02 UTC (permalink / raw)
  To: Frank.Li, s.hauer, robh, krzk+dt, conor+dt, imx
  Cc: kernel, festevam, linux-arm-kernel, devicetree, linux-kernel

From: Chancel Liu <chancel.liu@nxp.com>

FlexCAN1 has pin conflict with MQS1. Add GPIO-controlled board muxes to
route shared signals between FlexCAN1 and MQS1.

Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
---
 .../boot/dts/freescale/imx93-14x14-evk.dts    | 32 ++++++++++++++++++-
 1 file changed, 31 insertions(+), 1 deletion(-)

diff --git a/arch/arm64/boot/dts/freescale/imx93-14x14-evk.dts b/arch/arm64/boot/dts/freescale/imx93-14x14-evk.dts
index ec78c03f4788..6dcfbca65cbd 100644
--- a/arch/arm64/boot/dts/freescale/imx93-14x14-evk.dts
+++ b/arch/arm64/boot/dts/freescale/imx93-14x14-evk.dts
@@ -37,6 +37,36 @@ chosen {
 		stdout-path = &lpuart1;
 	};
 
+	can1_mqs1_mux: mux-controller-0 {
+		compatible = "gpio-mux";
+		#mux-control-cells = <0>;
+		#mux-state-cells = <1>;
+		mux-gpios = <&pcal6524_2 2 GPIO_ACTIVE_HIGH>;
+	};
+
+	mqs1_amp_en_mux: mux-controller-1 {
+		compatible = "gpio-mux";
+		#mux-control-cells = <0>;
+		#mux-state-cells = <1>;
+		mux-gpios = <&pcal6524_2 1 GPIO_ACTIVE_HIGH>;
+	};
+
+	pinctrl-gpiomux {
+		compatible = "pinctrl-multiplexer";
+
+		can1_fun: can1-grp {
+			mux-states = <&can1_mqs1_mux 0>;
+		};
+
+		mqs1_amp_en: mqs1-amp-en-grp {
+			mux-states = <&mqs1_amp_en_mux 1>;
+		};
+
+		mqs1_fun: mqs1-grp {
+			mux-states = <&can1_mqs1_mux 1>;
+		};
+	};
+
 	reserved-memory {
 		#address-cells = <2>;
 		#size-cells = <2>;
@@ -254,7 +284,7 @@ ethphy2: ethernet-phy@2 {
 
 &flexcan1 {
 	pinctrl-names = "default";
-	pinctrl-0 = <&pinctrl_flexcan1>;
+	pinctrl-0 = <&pinctrl_flexcan1>, <&can1_fun>;
 	xceiver-supply = <&reg_can1_stby>;
 	status = "okay";
 };
-- 
2.50.1


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v2 07/17] arm64: dts: imx93-14x14-evk: Add MQS1 pinmux, clocks and mark conflicting devices
  2026-08-18  3:01 [PATCH v2 00/17] arm64: dts: Add MQS1 sound card support for i.MX9 EVK platforms Chancel Liu
                   ` (5 preceding siblings ...)
  2026-08-18  3:02 ` [PATCH v2 06/17] arm64: dts: imx93-14x14-evk: Add board muxes to select between FlexCAN1 and MQS1 Chancel Liu
@ 2026-08-18  3:02 ` Chancel Liu
  2026-08-18  3:02 ` [PATCH v2 08/17] arm64: dts: imx94: Add clock and sound-dai-cells properties for MQS1 Chancel Liu
                   ` (9 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Chancel Liu @ 2026-08-18  3:02 UTC (permalink / raw)
  To: Frank.Li, s.hauer, robh, krzk+dt, conor+dt, imx
  Cc: kernel, festevam, linux-arm-kernel, devicetree, linux-kernel

From: Chancel Liu <chancel.liu@nxp.com>

MQS1 shares pins with FlexCAN1 and its sound card conflicts with the BT
SCO card. Add the MQS1 pinctrl group and label the conflicting device
and card so the shared imx9-mqs overlay can disable them. The overlay
and its Makefile rule are added in a later patch.

Update SAI1 clock assignments to provide the MQS MCLK source.

Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
---
 .../boot/dts/freescale/imx93-14x14-evk.dts    | 20 +++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/arch/arm64/boot/dts/freescale/imx93-14x14-evk.dts b/arch/arm64/boot/dts/freescale/imx93-14x14-evk.dts
index 6dcfbca65cbd..525504366f27 100644
--- a/arch/arm64/boot/dts/freescale/imx93-14x14-evk.dts
+++ b/arch/arm64/boot/dts/freescale/imx93-14x14-evk.dts
@@ -204,7 +204,7 @@ reg_vref_1v8: regulator-adc-vref {
 		regulator-max-microvolt = <1800000>;
 	};
 
-	sound-bt-sco {
+	mqs1_conflict_card: sound-bt-sco {
 		compatible = "simple-audio-card";
 		simple-audio-card,name = "bt-sco-audio";
 		simple-audio-card,format = "dsp_a";
@@ -282,7 +282,7 @@ ethphy2: ethernet-phy@2 {
 	};
 };
 
-&flexcan1 {
+mqs1_conflict_dev: &flexcan1 {
 	pinctrl-names = "default";
 	pinctrl-0 = <&pinctrl_flexcan1>, <&can1_fun>;
 	xceiver-supply = <&reg_can1_stby>;
@@ -442,6 +442,11 @@ bluetooth {
 	};
 };
 
+&mqs1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_mqs1>, <&mqs1_fun>, <&mqs1_amp_en>;
+};
+
 &mu1 {
 	status = "okay";
 };
@@ -453,6 +458,10 @@ &mu2 {
 &sai1 {
 	pinctrl-names = "default";
 	pinctrl-0 = <&pinctrl_sai1>;
+	clocks = <&clk IMX93_CLK_SAI1_IPG>, <&clk IMX93_CLK_DUMMY>,
+		 <&clk IMX93_CLK_SAI1_GATE>, <&clk IMX93_CLK_DUMMY>,
+		 <&clk IMX93_CLK_DUMMY>, <&clk IMX93_CLK_AUDIO_PLL>;
+	clock-names = "bus", "mclk0", "mclk1", "mclk2", "mclk3", "pll8k";
 	assigned-clocks = <&clk IMX93_CLK_SAI1>;
 	assigned-clock-parents = <&clk IMX93_CLK_AUDIO_PLL>;
 	assigned-clock-rates = <12288000>;
@@ -570,6 +579,13 @@ MX93_PAD_GPIO_IO29__LPI2C3_SCL			0x40000b9e
 		>;
 	};
 
+	pinctrl_mqs1: mqs1grp {
+		fsl,pins = <
+			MX93_PAD_PDM_CLK__MQS1_LEFT			0x31e
+			MX93_PAD_PDM_BIT_STREAM0__MQS1_RIGHT		0x31e
+		>;
+	};
+
 	pinctrl_pcal6524: pcal6524grp {
 		fsl,pins = <
 			MX93_PAD_CCM_CLKO2__GPIO3_IO27			0x31e
-- 
2.50.1


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v2 08/17] arm64: dts: imx94: Add clock and sound-dai-cells properties for MQS1
  2026-08-18  3:01 [PATCH v2 00/17] arm64: dts: Add MQS1 sound card support for i.MX9 EVK platforms Chancel Liu
                   ` (6 preceding siblings ...)
  2026-08-18  3:02 ` [PATCH v2 07/17] arm64: dts: imx93-14x14-evk: Add MQS1 pinmux, clocks and mark conflicting devices Chancel Liu
@ 2026-08-18  3:02 ` Chancel Liu
  2026-08-18  3:02 ` [PATCH v2 09/17] arm64: dts: imx943-evk: Add board muxes to select between CAN1/PDM and MQS1/MIC Chancel Liu
                   ` (8 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Chancel Liu @ 2026-08-18  3:02 UTC (permalink / raw)
  To: Frank.Li, s.hauer, robh, krzk+dt, conor+dt, imx
  Cc: kernel, festevam, linux-arm-kernel, devicetree, linux-kernel

From: Chancel Liu <chancel.liu@nxp.com>

MQS1 MCLK input is driven from the respective SAI1 MCLK output, and
sound-dai-cells describes the node as an ASoC DAI provider. Both are
fixed SoC integration properties rather than board specific, so add them
here in the common dtsi instead of duplicating them in each board dts.

Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
---
 arch/arm64/boot/dts/freescale/imx94.dtsi | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/arm64/boot/dts/freescale/imx94.dtsi b/arch/arm64/boot/dts/freescale/imx94.dtsi
index 34833e62bd79..a0d1922389d6 100644
--- a/arch/arm64/boot/dts/freescale/imx94.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx94.dtsi
@@ -131,6 +131,9 @@ scmi_misc: protocol@84 {
 
 	mqs1: mqs1 {
 		compatible = "fsl,imx943-aonmix-mqs";
+		clocks = <&scmi_clk IMX94_CLK_SAI1>;
+		clock-names = "mclk";
+		#sound-dai-cells = <0>;
 		status = "disabled";
 	};
 
-- 
2.50.1


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v2 09/17] arm64: dts: imx943-evk: Add board muxes to select between CAN1/PDM and MQS1/MIC
  2026-08-18  3:01 [PATCH v2 00/17] arm64: dts: Add MQS1 sound card support for i.MX9 EVK platforms Chancel Liu
                   ` (7 preceding siblings ...)
  2026-08-18  3:02 ` [PATCH v2 08/17] arm64: dts: imx94: Add clock and sound-dai-cells properties for MQS1 Chancel Liu
@ 2026-08-18  3:02 ` Chancel Liu
  2026-08-18  3:02 ` [PATCH v2 10/17] arm64: dts: imx943-evk: Add MQS1 pinmux, clocks and mark conflicting devices Chancel Liu
                   ` (7 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Chancel Liu @ 2026-08-18  3:02 UTC (permalink / raw)
  To: Frank.Li, s.hauer, robh, krzk+dt, conor+dt, imx
  Cc: kernel, festevam, linux-arm-kernel, devicetree, linux-kernel

From: Chancel Liu <chancel.liu@nxp.com>

CAN1 has pin conflict with PDM, and MQS1 has pin conflict with the
MICFIL function. Replace static gpio-hog settings with GPIO-controlled
board muxes using the pinctrl-multiplexer framework, so that the
conflicting functions can be selected at runtime.

Update the MICFIL node to select MICFIL function via PINCTRL.

Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
---
 arch/arm64/boot/dts/freescale/imx943-evk.dts | 49 ++++++++++++++------
 1 file changed, 35 insertions(+), 14 deletions(-)

diff --git a/arch/arm64/boot/dts/freescale/imx943-evk.dts b/arch/arm64/boot/dts/freescale/imx943-evk.dts
index 64660f94f4e9..07b782ef698a 100644
--- a/arch/arm64/boot/dts/freescale/imx943-evk.dts
+++ b/arch/arm64/boot/dts/freescale/imx943-evk.dts
@@ -38,6 +38,40 @@ bt_sco_codec: bt-sco-codec {
 		#sound-dai-cells = <1>;
 	};
 
+	can1_pdm_mux: mux-controller-0 {
+		compatible = "gpio-mux";
+		#mux-control-cells = <0>;
+		#mux-state-cells = <1>;
+		mux-gpios = <&pcal6416_i2c6_u44 12 GPIO_ACTIVE_HIGH>;
+	};
+
+	mqs1_mic_mux: mux-controller-1 {
+		compatible = "gpio-mux";
+		#mux-control-cells = <0>;
+		#mux-state-cells = <1>;
+		mux-gpios = <&pcal6416_i2c3_u171 11 GPIO_ACTIVE_HIGH>;
+	};
+
+	pinctrl-gpiomux {
+		compatible = "pinctrl-multiplexer";
+
+		can1_fun: can1-grp {
+			mux-states = <&can1_pdm_mux 1>;
+		};
+
+		mic_fun: mic-grp {
+			mux-states = <&mqs1_mic_mux 0>;
+		};
+
+		mqs1_fun: mqs1-grp {
+			mux-states = <&mqs1_mic_mux 1>;
+		};
+
+		pdm_fun: pdm-grp {
+			mux-states = <&can1_pdm_mux 0>;
+		};
+	};
+
 	flexcan2_phy: can-phy0 {
 		compatible = "nxp,tjr1443";
 		#phy-cells = <0>;
@@ -535,12 +569,6 @@ audio-pwren-hog {
 					gpio-hog;
 					output-high;
 				};
-
-				mqs-mic-sel-hog {
-					gpios = <11 GPIO_ACTIVE_HIGH>;
-					gpio-hog;
-					output-low;
-				};
 			};
 		};
 
@@ -651,13 +679,6 @@ pcal6416_i2c6_u44: gpio@20 {
 				#gpio-cells = <2>;
 				gpio-controller;
 
-				/* pdm selection */
-				can-pdm-sel-hog {
-					gpios = <12 GPIO_ACTIVE_HIGH>;
-					gpio-hog;
-					output-low;
-				};
-
 				sai3-sel-hog {
 					gpios = <11 GPIO_ACTIVE_HIGH>;
 					gpio-hog;
@@ -710,7 +731,7 @@ &micfil {
 	assigned-clock-rates = <3932160000>,
 			       <3612672000>, <393216000>,
 			       <361267200>, <49152000>;
-	pinctrl-0 = <&pinctrl_pdm>;
+	pinctrl-0 = <&pinctrl_pdm>, <&mic_fun>, <&pdm_fun>;
 	pinctrl-names = "default";
 	status = "okay";
 };
-- 
2.50.1


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v2 10/17] arm64: dts: imx943-evk: Add MQS1 pinmux, clocks and mark conflicting devices
  2026-08-18  3:01 [PATCH v2 00/17] arm64: dts: Add MQS1 sound card support for i.MX9 EVK platforms Chancel Liu
                   ` (8 preceding siblings ...)
  2026-08-18  3:02 ` [PATCH v2 09/17] arm64: dts: imx943-evk: Add board muxes to select between CAN1/PDM and MQS1/MIC Chancel Liu
@ 2026-08-18  3:02 ` Chancel Liu
  2026-08-18  3:02 ` [PATCH v2 11/17] arm64: dts: imx95: Add clock and sound-dai-cells properties for MQS1 Chancel Liu
                   ` (6 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Chancel Liu @ 2026-08-18  3:02 UTC (permalink / raw)
  To: Frank.Li, s.hauer, robh, krzk+dt, conor+dt, imx
  Cc: kernel, festevam, linux-arm-kernel, devicetree, linux-kernel

From: Chancel Liu <chancel.liu@nxp.com>

MQS1 shares pins with PDM and its sound card conflicts with the WM8962
sound card. Add the MQS1 pinctrl group and label the conflicting device
and card so the shared imx9-mqs overlay can disable them. The overlay
and its Makefile rule are added in a later patch.

Update SAI1 clock assignments to provide the MQS MCLK source.

Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
---
 arch/arm64/boot/dts/freescale/imx943-evk.dts | 21 ++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/arch/arm64/boot/dts/freescale/imx943-evk.dts b/arch/arm64/boot/dts/freescale/imx943-evk.dts
index 07b782ef698a..389def180b6d 100644
--- a/arch/arm64/boot/dts/freescale/imx943-evk.dts
+++ b/arch/arm64/boot/dts/freescale/imx943-evk.dts
@@ -341,7 +341,7 @@ cpu {
 		};
 	};
 
-	sound-wm8962 {
+	mqs1_conflict_card: sound-wm8962 {
 		compatible = "fsl,imx-audio-wm8962";
 		audio-codec = <&wm8962>;
 		audio-cpu = <&sai1>;
@@ -720,7 +720,7 @@ bluetooth {
 	};
 };
 
-&micfil {
+mqs1_conflict_dev: &micfil {
 	assigned-clocks = <&scmi_clk IMX94_CLK_AUDIOPLL1_VCO>,
 			  <&scmi_clk IMX94_CLK_AUDIOPLL2_VCO>,
 			  <&scmi_clk IMX94_CLK_AUDIOPLL1>,
@@ -736,6 +736,11 @@ &micfil {
 	status = "okay";
 };
 
+&mqs1 {
+	pinctrl-0 = <&pinctrl_mqs1>, <&mqs1_fun>, <&pdm_fun>;
+	pinctrl-names = "default";
+};
+
 &mu11 {
 	status = "okay";
 };
@@ -782,6 +787,11 @@ &netc_timer1 {
 };
 
 &sai1 {
+	clocks = <&scmi_clk IMX94_CLK_BUSAON>, <&dummy>,
+		 <&scmi_clk IMX94_CLK_SAI1>, <&dummy>,
+		 <&dummy>, <&scmi_clk IMX94_CLK_AUDIOPLL1>,
+		 <&scmi_clk IMX94_CLK_AUDIOPLL2>;
+	clock-names = "bus", "mclk0", "mclk1", "mclk2", "mclk3", "pll8k", "pll11k";
 	assigned-clocks = <&scmi_clk IMX94_CLK_AUDIOPLL1_VCO>,
 			  <&scmi_clk IMX94_CLK_AUDIOPLL2_VCO>,
 			  <&scmi_clk IMX94_CLK_AUDIOPLL1>,
@@ -904,6 +914,13 @@ IMX94_PAD_GPIO_IO28__LPI2C6_SCL		0x40000b9e
 		>;
 	};
 
+	pinctrl_mqs1: mqs1grp {
+		fsl,pins = <
+			IMX94_PAD_PDM_CLK__MQS1_LEFT		0x31e
+			IMX94_PAD_PDM_BIT_STREAM0__MQS1_RIGHT	0x31e
+		>;
+	};
+
 	pinctrl_pcie0: pcie0grp {
 		fsl,pins = <
 			IMX94_PAD_GPIO_IO20__PCIE1_CLKREQ_B	0x4000031e
-- 
2.50.1


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v2 11/17] arm64: dts: imx95: Add clock and sound-dai-cells properties for MQS1
  2026-08-18  3:01 [PATCH v2 00/17] arm64: dts: Add MQS1 sound card support for i.MX9 EVK platforms Chancel Liu
                   ` (9 preceding siblings ...)
  2026-08-18  3:02 ` [PATCH v2 10/17] arm64: dts: imx943-evk: Add MQS1 pinmux, clocks and mark conflicting devices Chancel Liu
@ 2026-08-18  3:02 ` Chancel Liu
  2026-08-18  3:02 ` [PATCH v2 12/17] arm64: dts: imx95-15x15-evk: Add board muxes to select between PDM and MQS1 Chancel Liu
                   ` (5 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Chancel Liu @ 2026-08-18  3:02 UTC (permalink / raw)
  To: Frank.Li, s.hauer, robh, krzk+dt, conor+dt, imx
  Cc: kernel, festevam, linux-arm-kernel, devicetree, linux-kernel

From: Chancel Liu <chancel.liu@nxp.com>

MQS1 MCLK input is driven from the respective SAI1 MCLK output, and
sound-dai-cells describes the node as an ASoC DAI provider. Both are
fixed SoC integration properties rather than board specific, so add them
here in the common dtsi instead of duplicating them in each board dts.

Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
---
 arch/arm64/boot/dts/freescale/imx95-15x15-frdm.dts     | 2 --
 arch/arm64/boot/dts/freescale/imx95-19x19-frdm-pro.dts | 2 --
 arch/arm64/boot/dts/freescale/imx95.dtsi               | 3 +++
 3 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/arch/arm64/boot/dts/freescale/imx95-15x15-frdm.dts b/arch/arm64/boot/dts/freescale/imx95-15x15-frdm.dts
index 0f43e3be7058..0a1646ae5b00 100644
--- a/arch/arm64/boot/dts/freescale/imx95-15x15-frdm.dts
+++ b/arch/arm64/boot/dts/freescale/imx95-15x15-frdm.dts
@@ -480,8 +480,6 @@ &mu7 {
 };
 
 &mqs1 {
-	clocks = <&scmi_clk IMX95_CLK_SAI1>;
-	clock-names = "mclk";
 	pinctrl-0 = <&pinctrl_mqs1>;
 	pinctrl-names = "default";
 	status = "okay";
diff --git a/arch/arm64/boot/dts/freescale/imx95-19x19-frdm-pro.dts b/arch/arm64/boot/dts/freescale/imx95-19x19-frdm-pro.dts
index b87a26b0d7fc..1f62d729a5e7 100644
--- a/arch/arm64/boot/dts/freescale/imx95-19x19-frdm-pro.dts
+++ b/arch/arm64/boot/dts/freescale/imx95-19x19-frdm-pro.dts
@@ -450,8 +450,6 @@ &micfil {
 };
 
 &mqs1 {
-	clocks = <&scmi_clk IMX95_CLK_SAI1>;
-	clock-names = "mclk";
 	pinctrl-0 = <&pinctrl_mqs1>;
 	pinctrl-names = "default";
 	status = "okay";
diff --git a/arch/arm64/boot/dts/freescale/imx95.dtsi b/arch/arm64/boot/dts/freescale/imx95.dtsi
index 38fc47024841..7bc74307d9ae 100644
--- a/arch/arm64/boot/dts/freescale/imx95.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx95.dtsi
@@ -439,6 +439,9 @@ hugo_funnel_out_port0: endpoint {
 
 	mqs1: mqs-1 {
 		compatible = "fsl,imx95-aonmix-mqs";
+		clocks = <&scmi_clk IMX95_CLK_SAI1>;
+		clock-names = "mclk";
+		#sound-dai-cells = <0>;
 		status = "disabled";
 	};
 
-- 
2.50.1


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v2 12/17] arm64: dts: imx95-15x15-evk: Add board muxes to select between PDM and MQS1
  2026-08-18  3:01 [PATCH v2 00/17] arm64: dts: Add MQS1 sound card support for i.MX9 EVK platforms Chancel Liu
                   ` (10 preceding siblings ...)
  2026-08-18  3:02 ` [PATCH v2 11/17] arm64: dts: imx95: Add clock and sound-dai-cells properties for MQS1 Chancel Liu
@ 2026-08-18  3:02 ` Chancel Liu
  2026-08-18  3:02 ` [PATCH v2 13/17] arm64: dts: imx95-15x15-evk: Add MQS1 pinmux, clocks and mark conflicting devices Chancel Liu
                   ` (4 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Chancel Liu @ 2026-08-18  3:02 UTC (permalink / raw)
  To: Frank.Li, s.hauer, robh, krzk+dt, conor+dt, imx
  Cc: kernel, festevam, linux-arm-kernel, devicetree, linux-kernel

From: Chancel Liu <chancel.liu@nxp.com>

PDM has pin conflict with MQS1. Add GPIO-controlled board muxes to
route shared signals between PDM and MQS1.

Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
---
 .../boot/dts/freescale/imx95-15x15-evk.dts    | 21 ++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/arch/arm64/boot/dts/freescale/imx95-15x15-evk.dts b/arch/arm64/boot/dts/freescale/imx95-15x15-evk.dts
index 6aedcbbe915a..aaa2608793bf 100644
--- a/arch/arm64/boot/dts/freescale/imx95-15x15-evk.dts
+++ b/arch/arm64/boot/dts/freescale/imx95-15x15-evk.dts
@@ -114,6 +114,25 @@ flexcan2_phy: can-phy {
 		silent-gpios = <&pcal6524 14 GPIO_ACTIVE_HIGH>;
 	};
 
+	pdm_mqs1_mux: mux-controller-0 {
+		compatible = "gpio-mux";
+		#mux-control-cells = <0>;
+		#mux-state-cells = <1>;
+		mux-gpios = <&pcal6524 20 GPIO_ACTIVE_HIGH>;
+	};
+
+	pinctrl-gpiomux {
+		compatible = "pinctrl-multiplexer";
+
+		pdm_fun: pdm-grp {
+			mux-states = <&pdm_mqs1_mux 0>;
+		};
+
+		mqs1_fun: mqs1-grp {
+			mux-states = <&pdm_mqs1_mux 1>;
+		};
+	};
+
 	reg_m2_pwr: regulator-m2-pwr {
 		compatible = "regulator-fixed";
 		regulator-max-microvolt = <3300000>;
@@ -488,7 +507,7 @@ &micfil {
 	assigned-clock-parents = <0>, <0>, <0>, <0>, <&scmi_clk IMX95_CLK_AUDIOPLL1>;
 	assigned-clock-rates = <3932160000>, <3612672000>, <393216000>, <361267200>, <49152000>;
 	#sound-dai-cells = <0>;
-	pinctrl-0 = <&pinctrl_pdm>;
+	pinctrl-0 = <&pinctrl_pdm>, <&pdm_fun>;
 	pinctrl-names = "default";
 	status = "okay";
 };
-- 
2.50.1


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v2 13/17] arm64: dts: imx95-15x15-evk: Add MQS1 pinmux, clocks and mark conflicting devices
  2026-08-18  3:01 [PATCH v2 00/17] arm64: dts: Add MQS1 sound card support for i.MX9 EVK platforms Chancel Liu
                   ` (11 preceding siblings ...)
  2026-08-18  3:02 ` [PATCH v2 12/17] arm64: dts: imx95-15x15-evk: Add board muxes to select between PDM and MQS1 Chancel Liu
@ 2026-08-18  3:02 ` Chancel Liu
  2026-08-18  3:02 ` [PATCH v2 14/17] arm64: dts: imx952: Add AONMIX MQS device node Chancel Liu
                   ` (3 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Chancel Liu @ 2026-08-18  3:02 UTC (permalink / raw)
  To: Frank.Li, s.hauer, robh, krzk+dt, conor+dt, imx
  Cc: kernel, festevam, linux-arm-kernel, devicetree, linux-kernel

From: Chancel Liu <chancel.liu@nxp.com>

MQS1 shares pins with PDM and its sound card conflicts with the BT SCO
card. Add the MQS1 pinctrl group and label the conflicting device and
card so the shared imx9-mqs overlay can disable them. The overlay and
its Makefile rule are added in a later patch.

Update SAI1 clock assignments to provide the MQS MCLK source.

Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
---
 .../boot/dts/freescale/imx95-15x15-evk.dts    | 21 +++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/arch/arm64/boot/dts/freescale/imx95-15x15-evk.dts b/arch/arm64/boot/dts/freescale/imx95-15x15-evk.dts
index aaa2608793bf..1013bbfc08b3 100644
--- a/arch/arm64/boot/dts/freescale/imx95-15x15-evk.dts
+++ b/arch/arm64/boot/dts/freescale/imx95-15x15-evk.dts
@@ -239,7 +239,7 @@ vpu_boot: vpu-boot@a0000000 {
 		};
 	};
 
-	sound-bt-sco {
+	mqs1_conflict_card: sound-bt-sco {
 		compatible = "simple-audio-card";
 		simple-audio-card,bitclock-inversion;
 		simple-audio-card,bitclock-master = <&btcpu>;
@@ -498,7 +498,7 @@ bluetooth {
 	};
 };
 
-&micfil {
+mqs1_conflict_dev: &micfil {
 	assigned-clocks = <&scmi_clk IMX95_CLK_AUDIOPLL1_VCO>,
 			  <&scmi_clk IMX95_CLK_AUDIOPLL2_VCO>,
 			  <&scmi_clk IMX95_CLK_AUDIOPLL1>,
@@ -512,6 +512,11 @@ &micfil {
 	status = "okay";
 };
 
+&mqs1 {
+	pinctrl-0 = <&pinctrl_mqs1>, <&mqs1_fun>;
+	pinctrl-names = "default";
+};
+
 &mu7 {
 	status = "okay";
 };
@@ -592,6 +597,11 @@ &pcie0_port0 {
 };
 
 &sai1 {
+	clocks = <&scmi_clk IMX95_CLK_BUSAON>, <&dummy>,
+		 <&scmi_clk IMX95_CLK_SAI1>, <&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>,
@@ -670,6 +680,13 @@ IMX95_PAD_GPIO_IO27__CAN2_RX				0x39e
 		>;
 	};
 
+	pinctrl_mqs1: mqs1grp {
+		fsl,pins = <
+			IMX95_PAD_PDM_CLK__AONMIX_TOP_MQS1_LEFT			0x31e
+			IMX95_PAD_PDM_BIT_STREAM0__AONMIX_TOP_MQS1_RIGHT	0x31e
+		>;
+	};
+
 	pinctrl_hp: hpgrp {
 		fsl,pins = <
 			IMX95_PAD_GPIO_IO21__GPIO2_IO_BIT21			0x31e
-- 
2.50.1


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v2 14/17] arm64: dts: imx952: Add AONMIX MQS device node
  2026-08-18  3:01 [PATCH v2 00/17] arm64: dts: Add MQS1 sound card support for i.MX9 EVK platforms Chancel Liu
                   ` (12 preceding siblings ...)
  2026-08-18  3:02 ` [PATCH v2 13/17] arm64: dts: imx95-15x15-evk: Add MQS1 pinmux, clocks and mark conflicting devices Chancel Liu
@ 2026-08-18  3:02 ` Chancel Liu
  2026-08-18  3:02 ` [PATCH v2 15/17] arm64: dts: imx952-evk: Add board muxes to select between CAN1/PDM Chancel Liu
                   ` (2 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Chancel Liu @ 2026-08-18  3:02 UTC (permalink / raw)
  To: Frank.Li, s.hauer, robh, krzk+dt, conor+dt, imx
  Cc: kernel, festevam, linux-arm-kernel, devicetree, linux-kernel

From: Chancel Liu <chancel.liu@nxp.com>

Add DT node for AONMIX MQS (i.e. MQS1).

Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
---
 arch/arm64/boot/dts/freescale/imx952.dtsi | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/arch/arm64/boot/dts/freescale/imx952.dtsi b/arch/arm64/boot/dts/freescale/imx952.dtsi
index 020de00e8285..54dc793a2f69 100644
--- a/arch/arm64/boot/dts/freescale/imx952.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx952.dtsi
@@ -261,6 +261,14 @@ scmi_misc: protocol@84 {
 		};
 	};
 
+	mqs1: mqs1 {
+		compatible = "fsl,imx95-aonmix-mqs";
+		clocks = <&scmi_clk IMX952_CLK_SAI1>;
+		clock-names = "mclk";
+		#sound-dai-cells = <0>;
+		status = "disabled";
+	};
+
 	gic: interrupt-controller@48000000 {
 		compatible = "arm,gic-v3";
 		reg = <0 0x48000000 0 0x10000>,
-- 
2.50.1


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v2 15/17] arm64: dts: imx952-evk: Add board muxes to select between CAN1/PDM
  2026-08-18  3:01 [PATCH v2 00/17] arm64: dts: Add MQS1 sound card support for i.MX9 EVK platforms Chancel Liu
                   ` (13 preceding siblings ...)
  2026-08-18  3:02 ` [PATCH v2 14/17] arm64: dts: imx952: Add AONMIX MQS device node Chancel Liu
@ 2026-08-18  3:02 ` Chancel Liu
  2026-08-18  3:02 ` [PATCH v2 16/17] arm64: dts: imx952-evk: Add MQS1 pinmux, clocks and mark conflicting devices Chancel Liu
  2026-08-18  3:02 ` [PATCH v2 17/17] arm64: dts: fsl: Add DT overlay to build MQS1 sound cards on i.MX9 platforms Chancel Liu
  16 siblings, 0 replies; 20+ messages in thread
From: Chancel Liu @ 2026-08-18  3:02 UTC (permalink / raw)
  To: Frank.Li, s.hauer, robh, krzk+dt, conor+dt, imx
  Cc: kernel, festevam, linux-arm-kernel, devicetree, linux-kernel

From: Chancel Liu <chancel.liu@nxp.com>

CAN1 has pin conflict with PDM. MQS1 requires an enable signal via a
separate GPIO. Replace static gpio-hog settings with GPIO-controlled
board muxes using the pinctrl-multiplexer framework, so that the
conflicting functions can be selected at runtime.

Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
---
 arch/arm64/boot/dts/freescale/imx952-evk.dts | 50 ++++++++++++++------
 1 file changed, 36 insertions(+), 14 deletions(-)

diff --git a/arch/arm64/boot/dts/freescale/imx952-evk.dts b/arch/arm64/boot/dts/freescale/imx952-evk.dts
index 2224b90aafe9..e9d735dc2a51 100644
--- a/arch/arm64/boot/dts/freescale/imx952-evk.dts
+++ b/arch/arm64/boot/dts/freescale/imx952-evk.dts
@@ -52,6 +52,40 @@ chosen {
 		stdout-path = &lpuart1;
 	};
 
+	can1_pdm_mux: mux-controller-0 {
+		compatible = "gpio-mux";
+		#mux-control-cells = <0>;
+		#mux-state-cells = <1>;
+		mux-gpios = <&pcal6416 10 GPIO_ACTIVE_HIGH>;
+	};
+
+	mqs1_en_mux: mux-controller-1 {
+		compatible = "gpio-mux";
+		#mux-control-cells = <0>;
+		#mux-state-cells = <1>;
+		mux-gpios = <&pcal6416 15 GPIO_ACTIVE_HIGH>;
+	};
+
+	pinctrl-gpiomux {
+		compatible = "pinctrl-multiplexer";
+
+		can1_fun: can1-grp {
+			mux-states = <&can1_pdm_mux 1>;
+		};
+
+		mqs1_disable: mqs1-disable-grp {
+			mux-states = <&mqs1_en_mux 0>;
+		};
+
+		mqs1_enable: mqs1-enable-grp {
+			mux-states = <&mqs1_en_mux 1>;
+		};
+
+		pdm_fun: pdm-grp {
+			mux-states = <&can1_pdm_mux 0>;
+		};
+	};
+
 	dmic: dmic {
 		compatible = "dmic-codec";
 		#sound-dai-cells = <0>;
@@ -284,7 +318,7 @@ &asrc2 {
 /* pin conflict with PDM */
 &flexcan1 {
 	pinctrl-names = "default";
-	pinctrl-0 = <&pinctrl_flexcan1>;
+	pinctrl-0 = <&pinctrl_flexcan1>, <&mqs1_disable>, <&can1_fun>;
 	phys = <&flexcan1_phy>;
 	status = "disabled";
 };
@@ -387,18 +421,6 @@ pcal6416: gpio@21 {
 		pinctrl-names = "default";
 		pinctrl-0 = <&pinctrl_pcal6416>;
 		vcc-supply = <&reg_3p3v>;
-
-		pdm-can-sel-hog {
-			gpio-hog;
-			gpios = <10 GPIO_ACTIVE_HIGH>;
-			output-low;
-		};
-
-		mqs-en-hog {
-			gpio-hog;
-			gpios = <15 GPIO_ACTIVE_HIGH>;
-			output-low;
-		};
 	};
 };
 
@@ -491,7 +513,7 @@ &micfil {
 				<&scmi_clk IMX952_CLK_AUDIOPLL1>;
 	assigned-clock-rates = <3932160000>, <3612672000>,
 			       <393216000>, <361267200>, <49152000>;
-	pinctrl-0 = <&pinctrl_pdm>;
+	pinctrl-0 = <&pinctrl_pdm>, <&mqs1_disable>, <&pdm_fun>;
 	pinctrl-1 = <&pinctrl_pdm_sleep>;
 	pinctrl-names = "default", "sleep";
 	status = "okay";
-- 
2.50.1


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v2 16/17] arm64: dts: imx952-evk: Add MQS1 pinmux, clocks and mark conflicting devices
  2026-08-18  3:01 [PATCH v2 00/17] arm64: dts: Add MQS1 sound card support for i.MX9 EVK platforms Chancel Liu
                   ` (14 preceding siblings ...)
  2026-08-18  3:02 ` [PATCH v2 15/17] arm64: dts: imx952-evk: Add board muxes to select between CAN1/PDM Chancel Liu
@ 2026-08-18  3:02 ` Chancel Liu
  2026-08-18  3:02 ` [PATCH v2 17/17] arm64: dts: fsl: Add DT overlay to build MQS1 sound cards on i.MX9 platforms Chancel Liu
  16 siblings, 0 replies; 20+ messages in thread
From: Chancel Liu @ 2026-08-18  3:02 UTC (permalink / raw)
  To: Frank.Li, s.hauer, robh, krzk+dt, conor+dt, imx
  Cc: kernel, festevam, linux-arm-kernel, devicetree, linux-kernel

From: Chancel Liu <chancel.liu@nxp.com>

MQS1 shares pins with PDM and its sound card conflicts with the BT SCO
card. Add the MQS1 pinctrl group and label the conflicting device and
card so the shared imx9-mqs overlay can disable them. The overlay and
its Makefile rule are added in a later patch.

Update SAI1 clock assignments to provide the MQS MCLK source.

Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
---
 arch/arm64/boot/dts/freescale/imx952-evk.dts | 21 ++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/arch/arm64/boot/dts/freescale/imx952-evk.dts b/arch/arm64/boot/dts/freescale/imx952-evk.dts
index e9d735dc2a51..522c6cb9abf2 100644
--- a/arch/arm64/boot/dts/freescale/imx952-evk.dts
+++ b/arch/arm64/boot/dts/freescale/imx952-evk.dts
@@ -231,7 +231,7 @@ &mu7 1 1
 				<&vdev1vring0>, <&vdev1vring1>, <&rsc_table>, <&m7_reserved>;
 	};
 
-	sound-bt-sco {
+	mqs1_conflict_card: sound-bt-sco {
 		compatible = "simple-audio-card";
 		simple-audio-card,bitclock-inversion;
 		simple-audio-card,bitclock-master = <&btcpu>;
@@ -503,7 +503,7 @@ &lpspi7 {
 	status = "okay";
 };
 
-&micfil {
+mqs1_conflict_dev: &micfil {
 	assigned-clocks = <&scmi_clk IMX952_CLK_AUDIOPLL1_VCO>,
 			  <&scmi_clk IMX952_CLK_AUDIOPLL2_VCO>,
 			  <&scmi_clk IMX952_CLK_AUDIOPLL1>,
@@ -519,11 +519,21 @@ &micfil {
 	status = "okay";
 };
 
+&mqs1 {
+	pinctrl-0 = <&pinctrl_mqs1>, <&mqs1_enable>;
+	pinctrl-names = "default";
+};
+
 &mu7 {
 	status = "okay";
 };
 
 &sai1 {
+	clocks = <&scmi_clk IMX952_CLK_BUSAON>, <&clk_dummy>,
+		 <&scmi_clk IMX952_CLK_SAI1>, <&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>,
@@ -704,6 +714,13 @@ IMX952_PAD_GPIO_IO07__WAKEUPMIX_TOP_LPSPI7_SCK		0x39e
 		>;
 	};
 
+	pinctrl_mqs1: mqs1grp {
+		fsl,pins = <
+			IMX952_PAD_PDM_CLK__AONMIX_TOP_MQS1_LEFT		0x31e
+			IMX952_PAD_PDM_BIT_STREAM0__AONMIX_TOP_MQS1_RIGHT	0x31e
+		>;
+	};
+
 	pinctrl_pcal6416: pcal6416grp {
 		fsl,pins = <
 			IMX952_PAD_GPIO_IO10__WAKEUPMIX_TOP_GPIO2_IO_10		0x31e
-- 
2.50.1


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH v2 17/17] arm64: dts: fsl: Add DT overlay to build MQS1 sound cards on i.MX9 platforms
  2026-08-18  3:01 [PATCH v2 00/17] arm64: dts: Add MQS1 sound card support for i.MX9 EVK platforms Chancel Liu
                   ` (15 preceding siblings ...)
  2026-08-18  3:02 ` [PATCH v2 16/17] arm64: dts: imx952-evk: Add MQS1 pinmux, clocks and mark conflicting devices Chancel Liu
@ 2026-08-18  3:02 ` Chancel Liu
  16 siblings, 0 replies; 20+ messages in thread
From: Chancel Liu @ 2026-08-18  3:02 UTC (permalink / raw)
  To: Frank.Li, s.hauer, robh, krzk+dt, conor+dt, imx
  Cc: kernel, festevam, linux-arm-kernel, devicetree, linux-kernel

From: Chancel Liu <chancel.liu@nxp.com>

Add a common DT overlay to support MQS sound cards on i.MX9 platforms.
MQS output pins are often shared with other devices, so the overlay
routes SAI1 to MQS1 and disables the conflicting device and sound card.

Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
---
 arch/arm64/boot/dts/freescale/Makefile      | 12 +++++
 arch/arm64/boot/dts/freescale/imx9-mqs.dtso | 54 +++++++++++++++++++++
 2 files changed, 66 insertions(+)
 create mode 100644 arch/arm64/boot/dts/freescale/imx9-mqs.dtso

diff --git a/arch/arm64/boot/dts/freescale/Makefile b/arch/arm64/boot/dts/freescale/Makefile
index 95ae85ab4adf..6e9e3226a693 100644
--- a/arch/arm64/boot/dts/freescale/Makefile
+++ b/arch/arm64/boot/dts/freescale/Makefile
@@ -613,6 +613,8 @@ dtb-$(CONFIG_ARCH_MXC) += imx91-9x9-qsb.dtb
 dtb-$(CONFIG_ARCH_MXC) += imx91-11x11-evk.dtb
 dtb-$(CONFIG_ARCH_MXC) += imx91-11x11-frdm.dtb
 dtb-$(CONFIG_ARCH_MXC) += imx91-11x11-frdm-s.dtb
+imx91-11x11-evk-mqs-dtbs += imx91-11x11-evk.dtb imx9-mqs.dtbo
+dtb-$(CONFIG_ARCH_MXC) += imx91-11x11-evk-mqs.dtb
 dtb-$(CONFIG_ARCH_MXC) += imx91-phyboard-segin.dtb
 
 imx91-9x9-qsb-can1-dtbs += imx91-9x9-qsb.dtb imx91-9x9-qsb-can1.dtbo
@@ -645,6 +647,8 @@ dtb-$(CONFIG_ARCH_MXC) += imx93-11x11-evk.dtb
 
 imx93-11x11-evk-dy1212w-4856-dtbs += imx93-11x11-evk.dtb imx93-11x11-evk-dy1212w-4856.dtbo
 dtb-$(CONFIG_ARCH_MXC) += imx93-11x11-evk-dy1212w-4856.dtb
+imx93-11x11-evk-mqs-dtbs += imx93-11x11-evk.dtb imx9-mqs.dtbo
+dtb-$(CONFIG_ARCH_MXC) += imx93-11x11-evk-mqs.dtb
 
 dtb-$(CONFIG_ARCH_MXC) += imx93-11x11-frdm.dtb
 
@@ -652,6 +656,8 @@ imx93-11x11-frdm-pixpaper-dtbs += imx93-11x11-frdm.dtb imx93-11x11-frdm-pixpaper
 dtb-$(CONFIG_ARCH_MXC) += imx93-11x11-frdm-pixpaper.dtb
 
 dtb-$(CONFIG_ARCH_MXC) += imx93-14x14-evk.dtb
+imx93-14x14-evk-mqs-dtbs += imx93-14x14-evk.dtb imx9-mqs.dtbo
+dtb-$(CONFIG_ARCH_MXC) += imx93-14x14-evk-mqs.dtb
 dtb-$(CONFIG_ARCH_MXC) += imx93-kontron-bl-osm-s.dtb
 dtb-$(CONFIG_ARCH_MXC) += imx93-phyboard-nash.dtb
 dtb-$(CONFIG_ARCH_MXC) += imx93-phyboard-segin.dtb
@@ -703,6 +709,8 @@ dtb-$(CONFIG_ARCH_MXC) += imx943-evk-pcie0-ep.dtb imx943-evk-pcie1-ep.dtb
 
 imx943-evk-sdwifi-dtbs := imx943-evk.dtb imx943-evk-sdwifi.dtbo
 dtb-$(CONFIG_ARCH_MXC) += imx943-evk-sdwifi.dtb
+imx943-evk-mqs-dtbs += imx943-evk.dtb imx9-mqs.dtbo
+dtb-$(CONFIG_ARCH_MXC) += imx943-evk-mqs.dtb
 
 dtb-$(CONFIG_ARCH_MXC) += imx95-15x15-ab2.dtb
 dtb-$(CONFIG_ARCH_MXC) += imx95-15x15-evk.dtb
@@ -734,6 +742,8 @@ dtb-$(CONFIG_ARCH_MXC) += imx95-15x15-evk-pcie.dtb
 
 imx95-15x15-evk-pcie0-ep-dtbs = imx95-15x15-evk-pcie.dtb imx-pcie0-ep.dtbo
 dtb-$(CONFIG_ARCH_MXC) += imx95-15x15-evk-pcie0-ep.dtb
+imx95-15x15-evk-mqs-dtbs += imx95-15x15-evk.dtb imx9-mqs.dtbo
+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
@@ -742,6 +752,8 @@ dtb-$(CONFIG_ARCH_MXC) += imx95-libra-rdk-fpsc.dtb
 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
 
 imx8mm-kontron-dl-dtbs			:= imx8mm-kontron-bl.dtb imx8mm-kontron-dl.dtbo
 imx8mm-kontron-bl-lte-dtbs		:= imx8mm-kontron-bl.dtb imx8mm-kontron-bl-lte.dtbo
diff --git a/arch/arm64/boot/dts/freescale/imx9-mqs.dtso b/arch/arm64/boot/dts/freescale/imx9-mqs.dtso
new file mode 100644
index 000000000000..9ac6d58eacbb
--- /dev/null
+++ b/arch/arm64/boot/dts/freescale/imx9-mqs.dtso
@@ -0,0 +1,54 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright 2026 NXP
+ */
+
+/dts-v1/;
+/plugin/;
+
+&{/} {
+	sound-mqs {
+		compatible = "audio-graph-card2";
+		links = <&sai1_port1>;
+		label = "mqs-audio";
+	};
+};
+
+&mqs1_conflict_card {
+	status = "disabled";
+};
+
+&mqs1_conflict_dev {
+	status = "disabled";
+};
+
+&mqs1 {
+	status = "okay";
+
+	port {
+		mqs1_endpoint: endpoint {
+			remote-endpoint = <&sai1_endpoint1>;
+		};
+	};
+};
+
+&sai1 {
+	ports {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		sai1_port1: port@1 {
+			reg = <1>;
+			playback-only;
+
+			sai1_endpoint1: endpoint {
+				dai-format = "left_j";
+				bitclock-master;
+				frame-master;
+				mclk-fs = <512>;
+				system-clock-direction-out;
+				remote-endpoint = <&mqs1_endpoint>;
+			};
+		};
+	};
+};
-- 
2.50.1


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* Re: [PATCH v2 06/17] arm64: dts: imx93-14x14-evk: Add board muxes to select between FlexCAN1 and MQS1
  2026-08-18  3:02 ` [PATCH v2 06/17] arm64: dts: imx93-14x14-evk: Add board muxes to select between FlexCAN1 and MQS1 Chancel Liu
@ 2026-08-18  3:13   ` sashiko-bot
  2026-08-19 10:09     ` Chancel Liu
  0 siblings, 1 reply; 20+ messages in thread
From: sashiko-bot @ 2026-08-18  3:13 UTC (permalink / raw)
  To: Chancel Liu; +Cc: imx, Frank.Li, robh, conor+dt, devicetree

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] The amplifier enable GPIO for MQS1 is incorrectly modeled as a multiplexer to hijack the pinctrl subsystem.
--

--- Patch [6]: [PATCH v2 06/17] arm64: dts: imx93-14x14-evk: Add board muxes to select between FlexCAN1 and MQS1 ---
commit cd0b6d22bf4426d5f5510c7f3a258a4b50405fb8
Author: Chancel Liu <chancel.liu@nxp.com>

arm64: dts: imx93-14x14-evk: Add board muxes to select between FlexCAN1 and MQS1

FlexCAN1 has pin conflict with MQS1. Add GPIO-controlled board muxes to
route shared signals between FlexCAN1 and MQS1.

> diff --git a/arch/arm64/boot/dts/freescale/imx93-14x14-evk.dts b/arch/arm64/boot/dts/freescale/imx93-14x14-evk.dts
> index ec78c03f4788b..6dcfbca65cbd5 100644
> --- a/arch/arm64/boot/dts/freescale/imx93-14x14-evk.dts
> +++ b/arch/arm64/boot/dts/freescale/imx93-14x14-evk.dts
> @@ -37,6 +37,36 @@ chosen {
>  		stdout-path = &lpuart1;
>  	};
>  
[ ... ]
> +	mqs1_amp_en_mux: mux-controller-1 {
> +		compatible = "gpio-mux";
> +		#mux-control-cells = <0>;
> +		#mux-state-cells = <1>;
> +		mux-gpios = <&pcal6524_2 1 GPIO_ACTIVE_HIGH>;
> +	};

[Severity: Medium]
Is it appropriate to use the gpio-mux binding to control an amplifier enable
pin?

Device Tree generally describes the hardware structure. A hardware multiplexer
routes signals between inputs and outputs, whereas an amplifier enable pin is
usually a binary control.

Would it be better to model this with an audio-amplifier or regulator-fixed
node so that standard power management can dynamically toggle the amplifier
during audio playback and suspend, rather than statically evaluating it as a
mux state?

> +
> +	pinctrl-gpiomux {
> +		compatible = "pinctrl-multiplexer";
> +
[ ... ]
> +		mqs1_amp_en: mqs1-amp-en-grp {
> +			mux-states = <&mqs1_amp_en_mux 1>;
> +		};

[Severity: Medium]
Does modeling the amplifier enable as a pinctrl multiplexer state bypass the
expected power management abstractions?

It appears this uses the pinctrl subsystem to assert a basic power enable GPIO,
which might prevent the system from turning off the amplifier when not in use.

> +
> +		mqs1_fun: mqs1-grp {
> +			mux-states = <&can1_mqs1_mux 1>;
> +		};
> +	};

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260818030211.3141710-1-chancel.liu@oss.nxp.com?part=6

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v2 06/17] arm64: dts: imx93-14x14-evk: Add board muxes to select between FlexCAN1 and MQS1
  2026-08-18  3:13   ` sashiko-bot
@ 2026-08-19 10:09     ` Chancel Liu
  0 siblings, 0 replies; 20+ messages in thread
From: Chancel Liu @ 2026-08-19 10:09 UTC (permalink / raw)
  To: sashiko-reviews; +Cc: imx, Frank.Li, robh, conor+dt, devicetree

> Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
> - [Medium] The amplifier enable GPIO for MQS1 is incorrectly modeled as a multiplexer to hijack the pinctrl subsystem.
> --
> 
> --- Patch [6]: [PATCH v2 06/17] arm64: dts: imx93-14x14-evk: Add board muxes to select between FlexCAN1 and MQS1 ---
> commit cd0b6d22bf4426d5f5510c7f3a258a4b50405fb8
> Author: Chancel Liu <chancel.liu@nxp.com>
> 
> arm64: dts: imx93-14x14-evk: Add board muxes to select between FlexCAN1 and MQS1
> 
> FlexCAN1 has pin conflict with MQS1. Add GPIO-controlled board muxes to
> route shared signals between FlexCAN1 and MQS1.
> 
>> diff --git a/arch/arm64/boot/dts/freescale/imx93-14x14-evk.dts b/arch/arm64/boot/dts/freescale/imx93-14x14-evk.dts
>> index ec78c03f4788b..6dcfbca65cbd5 100644
>> --- a/arch/arm64/boot/dts/freescale/imx93-14x14-evk.dts
>> +++ b/arch/arm64/boot/dts/freescale/imx93-14x14-evk.dts
>> @@ -37,6 +37,36 @@ chosen {
>>  		stdout-path = &lpuart1;
>>  	};
>>  
> [ ... ]
>> +	mqs1_amp_en_mux: mux-controller-1 {
>> +		compatible = "gpio-mux";
>> +		#mux-control-cells = <0>;
>> +		#mux-state-cells = <1>;
>> +		mux-gpios = <&pcal6524_2 1 GPIO_ACTIVE_HIGH>;
>> +	};
> 
> [Severity: Medium]
> Is it appropriate to use the gpio-mux binding to control an amplifier enable
> pin?
> 
> Device Tree generally describes the hardware structure. A hardware multiplexer
> routes signals between inputs and outputs, whereas an amplifier enable pin is
> usually a binary control.
> 
> Would it be better to model this with an audio-amplifier or regulator-fixed
> node so that standard power management can dynamically toggle the amplifier
> during audio playback and suspend, rather than statically evaluating it as a
> mux state?
>

That's a good point. I will try to model it with an audio-amplifier device.

Regards,
Chancel Liu


^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2026-08-19 10:09 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-18  3:01 [PATCH v2 00/17] arm64: dts: Add MQS1 sound card support for i.MX9 EVK platforms Chancel Liu
2026-08-18  3:01 ` [PATCH v2 01/17] arm64: dts: imx91_93_common: Add clock and sound-dai-cells properties for MQS Chancel Liu
2026-08-18  3:01 ` [PATCH v2 02/17] arm64: dts: imx91-11x11-evk: Add board muxes to select between PDM and MQS1 Chancel Liu
2026-08-18  3:01 ` [PATCH v2 03/17] arm64: dts: imx91-11x11-evk: Add MQS1 pinmux, clocks and mark conflicting devices Chancel Liu
2026-08-18  3:01 ` [PATCH v2 04/17] arm64: dts: imx93-11x11-evk: Add board muxes to select between PDM and MQS1 Chancel Liu
2026-08-18  3:01 ` [PATCH v2 05/17] arm64: dts: imx93-11x11-evk: Add MQS1 pinmux, clocks and mark conflicting devices Chancel Liu
2026-08-18  3:02 ` [PATCH v2 06/17] arm64: dts: imx93-14x14-evk: Add board muxes to select between FlexCAN1 and MQS1 Chancel Liu
2026-08-18  3:13   ` sashiko-bot
2026-08-19 10:09     ` Chancel Liu
2026-08-18  3:02 ` [PATCH v2 07/17] arm64: dts: imx93-14x14-evk: Add MQS1 pinmux, clocks and mark conflicting devices Chancel Liu
2026-08-18  3:02 ` [PATCH v2 08/17] arm64: dts: imx94: Add clock and sound-dai-cells properties for MQS1 Chancel Liu
2026-08-18  3:02 ` [PATCH v2 09/17] arm64: dts: imx943-evk: Add board muxes to select between CAN1/PDM and MQS1/MIC Chancel Liu
2026-08-18  3:02 ` [PATCH v2 10/17] arm64: dts: imx943-evk: Add MQS1 pinmux, clocks and mark conflicting devices Chancel Liu
2026-08-18  3:02 ` [PATCH v2 11/17] arm64: dts: imx95: Add clock and sound-dai-cells properties for MQS1 Chancel Liu
2026-08-18  3:02 ` [PATCH v2 12/17] arm64: dts: imx95-15x15-evk: Add board muxes to select between PDM and MQS1 Chancel Liu
2026-08-18  3:02 ` [PATCH v2 13/17] arm64: dts: imx95-15x15-evk: Add MQS1 pinmux, clocks and mark conflicting devices Chancel Liu
2026-08-18  3:02 ` [PATCH v2 14/17] arm64: dts: imx952: Add AONMIX MQS device node Chancel Liu
2026-08-18  3:02 ` [PATCH v2 15/17] arm64: dts: imx952-evk: Add board muxes to select between CAN1/PDM Chancel Liu
2026-08-18  3:02 ` [PATCH v2 16/17] arm64: dts: imx952-evk: Add MQS1 pinmux, clocks and mark conflicting devices Chancel Liu
2026-08-18  3:02 ` [PATCH v2 17/17] arm64: dts: fsl: Add DT overlay to build MQS1 sound cards on i.MX9 platforms Chancel Liu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox