All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v6 00/15] SDM660 sound card and internal MI2S support
@ 2026-07-30 17:43 Richard Acayan
  2026-07-30 17:43 ` [PATCH v6 01/15] ASoC: dt-bindings: qcom,sm8250: add compatible for sdm660 Richard Acayan
                   ` (14 more replies)
  0 siblings, 15 replies; 27+ messages in thread
From: Richard Acayan @ 2026-07-30 17:43 UTC (permalink / raw)
  To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
	Konrad Dybcio, linux-sound, linux-arm-msm, devicetree
  Cc: Nickolay Goppen, Adam Skladowski, Vladimir Lypak,
	Dmitry Baryshkov, Mohammad Rafi Shaik, Johan Hovold, Kees Cook,
	Charles Keepax, Kuninori Morimoto, Richard Acayan

This adds support for the SDM660 (formerly "SDM660 internal") sound card
and support for WCD codecs over internal MI2S (represented in APIs as
LPI MI2S).

Like on MSM8916 and MSM8953, some SDM660 and SDM670 devices connect to a
digital and analog codec. The connection to the digital codec is through
special "internal" MI2S ports. The digital and analog codecs are used on
the Xiaomi Redmi Note 7 for headset (playback + capture) and earpiece,
and also on the Google Pixel 3a for the headset.

This series does not include devicetree patches.

Changes since v5 (https://lore.kernel.org/r/20260609162255.31074-1-mailingradian@gmail.com):
- add reviewed-by for LPASS ports patch (2/15)

Changes since v4 (https://lore.kernel.org/r/20260501153128.8152-1-mailingradian@gmail.com):
- name internal MI2S ports as LPI for public API (2/15, 6/15, 7/15, 8/15, 9/15, 10/15, 11/15, 12/15)
- fix capture stream macro (11/15)
- fix is_rx in q6afe port map (7/15)
- use NULL pointer in place of "NULL" string (8/15)
- change fallback compatible for WCD analog codec to pm8953 (4/15)
- add ack tags (1/15, 3/15)

Changes since v3 (https://lore.kernel.org/r/20260331193939.40636-1-mailingradian@gmail.com):
- rebase onto v7.1-rc1

Changes since v2 (https://lore.kernel.org/r/20260304195815.52347-1-mailingradian@gmail.com):
- add missing sign-off (1/15)
- use definition of last dt-bindings dai cell for LPASS_MAX_PORT (6/15)
- move sdm660 support to existing sm8250 driver (11-12/15)
- import WCD codec patches for MSM8953 (3/15, 13-14/15)
	Changes from original (https://lore.kernel.org/r/20240731-msm8953-msm8976-asoc-v3-0-163f23c3a28d@gmail.com):
	- add back empty line in WCD dt-bindings patch (3/15)
	- add Dmitry's review tags (13-14/15)
	- rebase onto q6dsp fixes
- rebase onto q6dsp fixes

Changes since v1 (https://lore.kernel.org/r/20260211020302.2674-1-mailingradian@gmail.com):
- rename sound card to drop "internal" (1/11, 10/11)
- use common headphone jack code (9/11, 10/11)
- remove no-op code in sound card driver (10/11)
- remove inaccurate comment about clock consumer/producer (10/11)
- add review tags (3/11, 4/11)

Adam Skladowski (2):
  ASoC: dt-bindings: pm8916-wcd-analog-codec: Document pm8950/pm8953
  ASoC: msm8916-wcd-analog: add pm8950 codec

Nickolay Goppen (1):
  ASoC: dt-bindings: qcom,sm8250: add compatible for sdm660

Richard Acayan (11):
  ASoC: dt-bindings: qcom: q6dsp: add support for lpi mi2s ports 5-6
  ASoC: dt-bindings: pm8916-analog-codec: Add PM660L compatible
  ASoC: dt-bindings: msm8916-digital-codec: Add SDM660 compatible
  ASoC: qdsp6: q6dsp-lpass-ports: add support for lpi mi2s ports 5-6
  ASoC: qdsp6: q6afe: add internal mi2s support
  ASoC: qdsp6: q6afe-dai: add internal mi2s support
  ASoC: qdsp6: q6routing: add lpi mi2s support
  ASoC: qdsp6: common: support headphone jacks connected to lpi mi2s
  ASoC: qcom: sm8250: add support for LPI_MI2S_RX_0 and LPI_MI2S_TX_3
  ASoC: qcom: sm8250: add SDM660 compatible
  ASoC: msm8916-wcd-analog: add quirk for cajon 2.0

Vladimir Lypak (1):
  ASoC: msm8916-wcd-analog: add pm8953 codec

 .../sound/qcom,msm8916-wcd-digital-codec.yaml |   8 +-
 .../sound/qcom,pm8916-wcd-analog-codec.yaml   |  11 +-
 .../sound/qcom,q6dsp-lpass-ports.yaml         |   4 +-
 .../bindings/sound/qcom,sm8250.yaml           |   1 +
 .../sound/qcom,q6dsp-lpass-ports.h            |   4 +
 sound/soc/codecs/msm8916-wcd-analog.c         | 144 +++++++++++++++++-
 sound/soc/qcom/common.c                       |   1 +
 sound/soc/qcom/common.h                       |   2 +-
 sound/soc/qcom/qdsp6/q6afe-dai.c              |  48 ++++++
 sound/soc/qcom/qdsp6/q6afe.c                  |  56 +++++++
 sound/soc/qcom/qdsp6/q6dsp-lpass-ports.c      |   5 +
 sound/soc/qcom/qdsp6/q6routing.c              |  78 +++++++++-
 sound/soc/qcom/sm8250.c                       |  17 +++
 13 files changed, 367 insertions(+), 12 deletions(-)

-- 
2.55.0


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

* [PATCH v6 01/15] ASoC: dt-bindings: qcom,sm8250: add compatible for sdm660
  2026-07-30 17:43 [PATCH v6 00/15] SDM660 sound card and internal MI2S support Richard Acayan
@ 2026-07-30 17:43 ` Richard Acayan
  2026-07-30 17:43 ` [PATCH v6 02/15] ASoC: dt-bindings: qcom: q6dsp: add support for lpi mi2s ports 5-6 Richard Acayan
                   ` (13 subsequent siblings)
  14 siblings, 0 replies; 27+ messages in thread
From: Richard Acayan @ 2026-07-30 17:43 UTC (permalink / raw)
  To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
	Konrad Dybcio, linux-sound, linux-arm-msm, devicetree
  Cc: Nickolay Goppen, Adam Skladowski, Vladimir Lypak,
	Dmitry Baryshkov, Mohammad Rafi Shaik, Johan Hovold, Kees Cook,
	Charles Keepax, Kuninori Morimoto, Richard Acayan

From: Nickolay Goppen <setotau@mainlining.org>

Add compatibles for sdm660 based soundcards.

Signed-off-by: Nickolay Goppen <setotau@mainlining.org>
Signed-off-by: Richard Acayan <mailingradian@gmail.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
---
 Documentation/devicetree/bindings/sound/qcom,sm8250.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/sound/qcom,sm8250.yaml b/Documentation/devicetree/bindings/sound/qcom,sm8250.yaml
index 15f38622b98b..63c744524e01 100644
--- a/Documentation/devicetree/bindings/sound/qcom,sm8250.yaml
+++ b/Documentation/devicetree/bindings/sound/qcom,sm8250.yaml
@@ -44,6 +44,7 @@ properties:
           - qcom,qrb5165-rb5-sndcard
           - qcom,sc7180-qdsp6-sndcard
           - qcom,sc8280xp-sndcard
+          - qcom,sdm660-sndcard
           - qcom,sdm845-sndcard
           - qcom,sm8250-sndcard
           - qcom,sm8450-sndcard
-- 
2.55.0


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

* [PATCH v6 02/15] ASoC: dt-bindings: qcom: q6dsp: add support for lpi mi2s ports 5-6
  2026-07-30 17:43 [PATCH v6 00/15] SDM660 sound card and internal MI2S support Richard Acayan
  2026-07-30 17:43 ` [PATCH v6 01/15] ASoC: dt-bindings: qcom,sm8250: add compatible for sdm660 Richard Acayan
@ 2026-07-30 17:43 ` Richard Acayan
  2026-07-30 17:43 ` [PATCH v6 03/15] ASoC: dt-bindings: pm8916-wcd-analog-codec: Document pm8950/pm8953 Richard Acayan
                   ` (12 subsequent siblings)
  14 siblings, 0 replies; 27+ messages in thread
From: Richard Acayan @ 2026-07-30 17:43 UTC (permalink / raw)
  To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
	Konrad Dybcio, linux-sound, linux-arm-msm, devicetree
  Cc: Nickolay Goppen, Adam Skladowski, Vladimir Lypak,
	Dmitry Baryshkov, Mohammad Rafi Shaik, Johan Hovold, Kees Cook,
	Charles Keepax, Kuninori Morimoto, Richard Acayan

There are 7 internal MI2S ports per direction found on devices with the
internal sound card for Snapdragon 660. This is similar to the LPI MI2S
ports, and the LPI MI2S bindings can be reused for internal MI2S. Extend
the bindings for LPI MI2S ports to accommodate the internal MI2S ports.

Signed-off-by: Richard Acayan <mailingradian@gmail.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
---
 .../devicetree/bindings/sound/qcom,q6dsp-lpass-ports.yaml     | 4 ++--
 include/dt-bindings/sound/qcom,q6dsp-lpass-ports.h            | 4 ++++
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/sound/qcom,q6dsp-lpass-ports.yaml b/Documentation/devicetree/bindings/sound/qcom,q6dsp-lpass-ports.yaml
index 2b27d6c8f58f..3b03e2acd67e 100644
--- a/Documentation/devicetree/bindings/sound/qcom,q6dsp-lpass-ports.yaml
+++ b/Documentation/devicetree/bindings/sound/qcom,q6dsp-lpass-ports.yaml
@@ -127,7 +127,7 @@ patternProperties:
               contains:
                 # MI2S DAI ID range PRIMARY_MI2S_RX - QUATERNARY_MI2S_TX and
                 # QUINARY_MI2S_RX - QUINARY_MI2S_TX and
-                # LPI_MI2S_RX_0 - SENARY_MI2S_TX
+                # LPI_MI2S_RX_0 - LPI_MI2S_TX_6
                 items:
                   oneOf:
                     - minimum: 16
@@ -135,7 +135,7 @@ patternProperties:
                     - minimum: 127
                       maximum: 128
                     - minimum: 137
-                      maximum: 148
+                      maximum: 152
         then:
           required:
             - qcom,sd-lines
diff --git a/include/dt-bindings/sound/qcom,q6dsp-lpass-ports.h b/include/dt-bindings/sound/qcom,q6dsp-lpass-ports.h
index 45850f2d4342..f0a6899b6523 100644
--- a/include/dt-bindings/sound/qcom,q6dsp-lpass-ports.h
+++ b/include/dt-bindings/sound/qcom,q6dsp-lpass-ports.h
@@ -152,6 +152,10 @@
 #define LPI_MI2S_TX_4		146
 #define SENARY_MI2S_RX		147
 #define SENARY_MI2S_TX		148
+#define LPI_MI2S_RX_5		149
+#define LPI_MI2S_TX_5		150
+#define LPI_MI2S_RX_6		151
+#define LPI_MI2S_TX_6		152
 
 #define LPASS_CLK_ID_PRI_MI2S_IBIT	1
 #define LPASS_CLK_ID_PRI_MI2S_EBIT	2
-- 
2.55.0


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

* [PATCH v6 03/15] ASoC: dt-bindings: pm8916-wcd-analog-codec: Document pm8950/pm8953
  2026-07-30 17:43 [PATCH v6 00/15] SDM660 sound card and internal MI2S support Richard Acayan
  2026-07-30 17:43 ` [PATCH v6 01/15] ASoC: dt-bindings: qcom,sm8250: add compatible for sdm660 Richard Acayan
  2026-07-30 17:43 ` [PATCH v6 02/15] ASoC: dt-bindings: qcom: q6dsp: add support for lpi mi2s ports 5-6 Richard Acayan
@ 2026-07-30 17:43 ` Richard Acayan
  2026-07-30 17:43 ` [PATCH v6 04/15] ASoC: dt-bindings: pm8916-analog-codec: Add PM660L compatible Richard Acayan
                   ` (11 subsequent siblings)
  14 siblings, 0 replies; 27+ messages in thread
From: Richard Acayan @ 2026-07-30 17:43 UTC (permalink / raw)
  To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
	Konrad Dybcio, linux-sound, linux-arm-msm, devicetree
  Cc: Nickolay Goppen, Adam Skladowski, Vladimir Lypak,
	Dmitry Baryshkov, Mohammad Rafi Shaik, Johan Hovold, Kees Cook,
	Charles Keepax, Kuninori Morimoto, Richard Acayan

From: Adam Skladowski <a39.skl@gmail.com>

Document pm8950 and pm8953 analog audio codecs.

Signed-off-by: Adam Skladowski <a39.skl@gmail.com>
[richard: add back empty line]
Signed-off-by: Richard Acayan <mailingradian@gmail.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
---
 .../bindings/sound/qcom,pm8916-wcd-analog-codec.yaml         | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/sound/qcom,pm8916-wcd-analog-codec.yaml b/Documentation/devicetree/bindings/sound/qcom,pm8916-wcd-analog-codec.yaml
index 94e7a1860977..15389645a3e8 100644
--- a/Documentation/devicetree/bindings/sound/qcom,pm8916-wcd-analog-codec.yaml
+++ b/Documentation/devicetree/bindings/sound/qcom,pm8916-wcd-analog-codec.yaml
@@ -14,7 +14,10 @@ description:
 
 properties:
   compatible:
-    const: qcom,pm8916-wcd-analog-codec
+    enum:
+      - qcom,pm8916-wcd-analog-codec
+      - qcom,pm8950-wcd-analog-codec
+      - qcom,pm8953-wcd-analog-codec
 
   reg:
     maxItems: 1
-- 
2.55.0


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

* [PATCH v6 04/15] ASoC: dt-bindings: pm8916-analog-codec: Add PM660L compatible
  2026-07-30 17:43 [PATCH v6 00/15] SDM660 sound card and internal MI2S support Richard Acayan
                   ` (2 preceding siblings ...)
  2026-07-30 17:43 ` [PATCH v6 03/15] ASoC: dt-bindings: pm8916-wcd-analog-codec: Document pm8950/pm8953 Richard Acayan
@ 2026-07-30 17:43 ` Richard Acayan
  2026-07-30 17:43 ` [PATCH v6 05/15] ASoC: dt-bindings: msm8916-digital-codec: Add SDM660 compatible Richard Acayan
                   ` (10 subsequent siblings)
  14 siblings, 0 replies; 27+ messages in thread
From: Richard Acayan @ 2026-07-30 17:43 UTC (permalink / raw)
  To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
	Konrad Dybcio, linux-sound, linux-arm-msm, devicetree
  Cc: Nickolay Goppen, Adam Skladowski, Vladimir Lypak,
	Dmitry Baryshkov, Mohammad Rafi Shaik, Johan Hovold, Kees Cook,
	Charles Keepax, Kuninori Morimoto, Richard Acayan

The PM8953 (cajon 2.0) revision of the PM8916 analog codec is also found
on PM660L, typically connected to the SDM660 internal sound card via the
digital codec. Provide a space for specific compatibles and add the
compatible for PM660L.

Signed-off-by: Richard Acayan <mailingradian@gmail.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
---
 .../sound/qcom,pm8916-wcd-analog-codec.yaml        | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/Documentation/devicetree/bindings/sound/qcom,pm8916-wcd-analog-codec.yaml b/Documentation/devicetree/bindings/sound/qcom,pm8916-wcd-analog-codec.yaml
index 15389645a3e8..be47dbdb2e92 100644
--- a/Documentation/devicetree/bindings/sound/qcom,pm8916-wcd-analog-codec.yaml
+++ b/Documentation/devicetree/bindings/sound/qcom,pm8916-wcd-analog-codec.yaml
@@ -14,10 +14,16 @@ description:
 
 properties:
   compatible:
-    enum:
-      - qcom,pm8916-wcd-analog-codec
-      - qcom,pm8950-wcd-analog-codec
-      - qcom,pm8953-wcd-analog-codec
+    oneOf:
+      - items:
+          - enum:
+              - qcom,pm660l-wcd-analog-codec
+          - const: qcom,pm8953-wcd-analog-codec
+
+      - enum:
+          - qcom,pm8916-wcd-analog-codec
+          - qcom,pm8950-wcd-analog-codec
+          - qcom,pm8953-wcd-analog-codec
 
   reg:
     maxItems: 1
-- 
2.55.0


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

* [PATCH v6 05/15] ASoC: dt-bindings: msm8916-digital-codec: Add SDM660 compatible
  2026-07-30 17:43 [PATCH v6 00/15] SDM660 sound card and internal MI2S support Richard Acayan
                   ` (3 preceding siblings ...)
  2026-07-30 17:43 ` [PATCH v6 04/15] ASoC: dt-bindings: pm8916-analog-codec: Add PM660L compatible Richard Acayan
@ 2026-07-30 17:43 ` Richard Acayan
  2026-07-30 17:43 ` [PATCH v6 06/15] ASoC: qdsp6: q6dsp-lpass-ports: add support for lpi mi2s ports 5-6 Richard Acayan
                   ` (9 subsequent siblings)
  14 siblings, 0 replies; 27+ messages in thread
From: Richard Acayan @ 2026-07-30 17:43 UTC (permalink / raw)
  To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
	Konrad Dybcio, linux-sound, linux-arm-msm, devicetree
  Cc: Nickolay Goppen, Adam Skladowski, Vladimir Lypak,
	Dmitry Baryshkov, Mohammad Rafi Shaik, Johan Hovold, Kees Cook,
	Charles Keepax, Kuninori Morimoto, Richard Acayan

The MSM8916 digital codec is also found on SDM660, typically connected to
the SDM660 internal sound card. Provide a space
for specific compatibles and add the compatible for SDM660.

Signed-off-by: Richard Acayan <mailingradian@gmail.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
---
 .../bindings/sound/qcom,msm8916-wcd-digital-codec.yaml    | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/sound/qcom,msm8916-wcd-digital-codec.yaml b/Documentation/devicetree/bindings/sound/qcom,msm8916-wcd-digital-codec.yaml
index a899c4e7c1c9..33bc23b6176a 100644
--- a/Documentation/devicetree/bindings/sound/qcom,msm8916-wcd-digital-codec.yaml
+++ b/Documentation/devicetree/bindings/sound/qcom,msm8916-wcd-digital-codec.yaml
@@ -14,7 +14,13 @@ description:
 
 properties:
   compatible:
-    const: qcom,msm8916-wcd-digital-codec
+    oneOf:
+      - items:
+          - enum:
+              - qcom,sdm660-wcd-digital-codec
+          - const: qcom,msm8916-wcd-digital-codec
+
+      - const: qcom,msm8916-wcd-digital-codec
 
   reg:
     maxItems: 1
-- 
2.55.0


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

* [PATCH v6 06/15] ASoC: qdsp6: q6dsp-lpass-ports: add support for lpi mi2s ports 5-6
  2026-07-30 17:43 [PATCH v6 00/15] SDM660 sound card and internal MI2S support Richard Acayan
                   ` (4 preceding siblings ...)
  2026-07-30 17:43 ` [PATCH v6 05/15] ASoC: dt-bindings: msm8916-digital-codec: Add SDM660 compatible Richard Acayan
@ 2026-07-30 17:43 ` Richard Acayan
  2026-07-30 18:15   ` sashiko-bot
  2026-07-30 22:49   ` Srinivas Kandagatla
  2026-07-30 17:43 ` [PATCH v6 07/15] ASoC: qdsp6: q6afe: add internal mi2s support Richard Acayan
                   ` (8 subsequent siblings)
  14 siblings, 2 replies; 27+ messages in thread
From: Richard Acayan @ 2026-07-30 17:43 UTC (permalink / raw)
  To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
	Konrad Dybcio, linux-sound, linux-arm-msm, devicetree
  Cc: Nickolay Goppen, Adam Skladowski, Vladimir Lypak,
	Dmitry Baryshkov, Mohammad Rafi Shaik, Johan Hovold, Kees Cook,
	Charles Keepax, Kuninori Morimoto, Richard Acayan

Add the extra LPI MI2S ports used for internal MI2S on SDM660.

Link: https://android.googlesource.com/kernel/msm-extra/+/530cffa4cc977a348753831b163eb9d3302b954a/asoc/msm-dai-q6-v2.c#4597
Signed-off-by: Richard Acayan <mailingradian@gmail.com>
---
 sound/soc/qcom/common.h                  | 2 +-
 sound/soc/qcom/qdsp6/q6dsp-lpass-ports.c | 5 +++++
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/sound/soc/qcom/common.h b/sound/soc/qcom/common.h
index ee6662885593..48b114eb46a5 100644
--- a/sound/soc/qcom/common.h
+++ b/sound/soc/qcom/common.h
@@ -7,7 +7,7 @@
 #include <dt-bindings/sound/qcom,q6afe.h>
 #include <sound/soc.h>
 
-#define LPASS_MAX_PORT			(SENARY_MI2S_TX + 1)
+#define LPASS_MAX_PORT			(LPI_MI2S_TX_6 + 1)
 
 int qcom_snd_parse_of(struct snd_soc_card *card);
 int qcom_snd_wcd_jack_setup(struct snd_soc_pcm_runtime *rtd,
diff --git a/sound/soc/qcom/qdsp6/q6dsp-lpass-ports.c b/sound/soc/qcom/qdsp6/q6dsp-lpass-ports.c
index e5cd82f77b55..c3d8116ad503 100644
--- a/sound/soc/qcom/qdsp6/q6dsp-lpass-ports.c
+++ b/sound/soc/qcom/qdsp6/q6dsp-lpass-ports.c
@@ -553,11 +553,15 @@ static struct snd_soc_dai_driver q6dsp_audio_fe_dais[] = {
 	Q6AFE_MI2S_RX_DAI("LPI RX2", LPI_MI2S_RX_2),
 	Q6AFE_MI2S_RX_DAI("LPI RX3", LPI_MI2S_RX_3),
 	Q6AFE_MI2S_RX_DAI("LPI RX4", LPI_MI2S_RX_4),
+	Q6AFE_MI2S_RX_DAI("LPI RX5", LPI_MI2S_RX_5),
+	Q6AFE_MI2S_RX_DAI("LPI RX6", LPI_MI2S_RX_6),
 	Q6AFE_MI2S_TX_DAI("LPI TX0", LPI_MI2S_TX_0),
 	Q6AFE_MI2S_TX_DAI("LPI TX1", LPI_MI2S_TX_1),
 	Q6AFE_MI2S_TX_DAI("LPI TX2", LPI_MI2S_TX_2),
 	Q6AFE_MI2S_TX_DAI("LPI TX3", LPI_MI2S_TX_3),
 	Q6AFE_MI2S_TX_DAI("LPI TX4", LPI_MI2S_TX_4),
+	Q6AFE_MI2S_TX_DAI("LPI TX5", LPI_MI2S_TX_5),
+	Q6AFE_MI2S_TX_DAI("LPI TX6", LPI_MI2S_TX_6),
 	Q6AFE_TDM_PB_DAI("Primary", 0, PRIMARY_TDM_RX_0),
 	Q6AFE_TDM_PB_DAI("Primary", 1, PRIMARY_TDM_RX_1),
 	Q6AFE_TDM_PB_DAI("Primary", 2, PRIMARY_TDM_RX_2),
@@ -712,6 +716,7 @@ struct snd_soc_dai_driver *q6dsp_audio_ports_set_config(struct device *dev,
 		case QUINARY_MI2S_RX ... QUINARY_MI2S_TX:
 		case PRIMARY_MI2S_RX ... QUATERNARY_MI2S_TX:
 		case LPI_MI2S_RX_0 ... LPI_MI2S_TX_4:
+		case LPI_MI2S_RX_5 ... LPI_MI2S_TX_6:
 			q6dsp_audio_fe_dais[i].ops = cfg->q6i2s_ops;
 			break;
 		case PRIMARY_TDM_RX_0 ... QUINARY_TDM_TX_7:
-- 
2.55.0


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

* [PATCH v6 07/15] ASoC: qdsp6: q6afe: add internal mi2s support
  2026-07-30 17:43 [PATCH v6 00/15] SDM660 sound card and internal MI2S support Richard Acayan
                   ` (5 preceding siblings ...)
  2026-07-30 17:43 ` [PATCH v6 06/15] ASoC: qdsp6: q6dsp-lpass-ports: add support for lpi mi2s ports 5-6 Richard Acayan
@ 2026-07-30 17:43 ` Richard Acayan
  2026-07-30 18:21   ` sashiko-bot
  2026-07-30 22:51   ` Srinivas Kandagatla
  2026-07-30 17:43 ` [PATCH v6 08/15] ASoC: qdsp6: q6afe-dai: " Richard Acayan
                   ` (7 subsequent siblings)
  14 siblings, 2 replies; 27+ messages in thread
From: Richard Acayan @ 2026-07-30 17:43 UTC (permalink / raw)
  To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
	Konrad Dybcio, linux-sound, linux-arm-msm, devicetree
  Cc: Nickolay Goppen, Adam Skladowski, Vladimir Lypak,
	Dmitry Baryshkov, Mohammad Rafi Shaik, Johan Hovold, Kees Cook,
	Charles Keepax, Kuninori Morimoto, Richard Acayan

The bindings for LPI MI2S ports, originally exclusive to q6apm, can be
used for internal MI2S ports on q6afe. Add the port mappings for
internal MI2S, found on the Snapdragon 660 internal sound card.

Signed-off-by: Richard Acayan <mailingradian@gmail.com>
---
 sound/soc/qcom/qdsp6/q6afe.c | 56 ++++++++++++++++++++++++++++++++++++
 1 file changed, 56 insertions(+)

diff --git a/sound/soc/qcom/qdsp6/q6afe.c b/sound/soc/qcom/qdsp6/q6afe.c
index 40237267fda0..1d68a80e8e0c 100644
--- a/sound/soc/qcom/qdsp6/q6afe.c
+++ b/sound/soc/qcom/qdsp6/q6afe.c
@@ -132,6 +132,20 @@
 #define AFE_PORT_ID_QUINARY_MI2S_TX	    0x1017
 #define AFE_PORT_ID_SENARY_MI2S_RX          0x1018
 #define AFE_PORT_ID_SENARY_MI2S_TX          0x1019
+#define AFE_PORT_ID_INT0_MI2S_RX	    0x102e
+#define AFE_PORT_ID_INT0_MI2S_TX	    0x102f
+#define AFE_PORT_ID_INT1_MI2S_RX	    0x1030
+#define AFE_PORT_ID_INT1_MI2S_TX	    0x1031
+#define AFE_PORT_ID_INT2_MI2S_RX	    0x1032
+#define AFE_PORT_ID_INT2_MI2S_TX	    0x1033
+#define AFE_PORT_ID_INT3_MI2S_RX	    0x1034
+#define AFE_PORT_ID_INT3_MI2S_TX	    0x1035
+#define AFE_PORT_ID_INT4_MI2S_RX	    0x1036
+#define AFE_PORT_ID_INT4_MI2S_TX	    0x1037
+#define AFE_PORT_ID_INT5_MI2S_RX	    0x1038
+#define AFE_PORT_ID_INT5_MI2S_TX	    0x1039
+#define AFE_PORT_ID_INT6_MI2S_RX	    0x103a
+#define AFE_PORT_ID_INT6_MI2S_TX	    0x103b
 
 /* Start of the range of port IDs for TDM devices. */
 #define AFE_PORT_ID_TDM_PORT_RANGE_START	0x9000
@@ -931,6 +945,34 @@ static struct afe_port_map port_maps[AFE_PORT_MAX] = {
 	[RX_CODEC_DMA_RX_7] = { AFE_PORT_ID_RX_CODEC_DMA_RX_7,
 				RX_CODEC_DMA_RX_7, 1, 1},
 	[USB_RX] = { AFE_PORT_ID_USB_RX, USB_RX, 1, 1},
+	[LPI_MI2S_RX_0] = { AFE_PORT_ID_INT0_MI2S_RX,
+				LPI_MI2S_RX_0, 1, 1},
+	[LPI_MI2S_TX_0] = { AFE_PORT_ID_INT0_MI2S_TX,
+				LPI_MI2S_TX_0, 0, 1},
+	[LPI_MI2S_RX_1] = { AFE_PORT_ID_INT1_MI2S_RX,
+				LPI_MI2S_RX_1, 1, 1},
+	[LPI_MI2S_TX_1] = { AFE_PORT_ID_INT1_MI2S_TX,
+				LPI_MI2S_TX_1, 0, 1},
+	[LPI_MI2S_RX_2] = { AFE_PORT_ID_INT2_MI2S_RX,
+				LPI_MI2S_RX_2, 1, 1},
+	[LPI_MI2S_TX_2] = { AFE_PORT_ID_INT2_MI2S_TX,
+				LPI_MI2S_TX_2, 0, 1},
+	[LPI_MI2S_RX_3] = { AFE_PORT_ID_INT3_MI2S_RX,
+				LPI_MI2S_RX_3, 1, 1},
+	[LPI_MI2S_TX_3] = { AFE_PORT_ID_INT3_MI2S_TX,
+				LPI_MI2S_TX_3, 0, 1},
+	[LPI_MI2S_RX_4] = { AFE_PORT_ID_INT4_MI2S_RX,
+				LPI_MI2S_RX_4, 1, 1},
+	[LPI_MI2S_TX_4] = { AFE_PORT_ID_INT4_MI2S_TX,
+				LPI_MI2S_TX_4, 0, 1},
+	[LPI_MI2S_RX_5] = { AFE_PORT_ID_INT5_MI2S_RX,
+				LPI_MI2S_RX_5, 1, 1},
+	[LPI_MI2S_TX_5] = { AFE_PORT_ID_INT5_MI2S_TX,
+				LPI_MI2S_TX_5, 0, 1},
+	[LPI_MI2S_RX_6] = { AFE_PORT_ID_INT6_MI2S_RX,
+				LPI_MI2S_RX_6, 1, 1},
+	[LPI_MI2S_TX_6] = { AFE_PORT_ID_INT6_MI2S_TX,
+				LPI_MI2S_TX_6, 0, 1},
 };
 
 static void q6afe_port_free(struct kref *ref)
@@ -1785,6 +1827,20 @@ struct q6afe_port *q6afe_port_get_from_id(struct device *dev, int id)
 	case AFE_PORT_ID_QUINARY_MI2S_TX:
 	case AFE_PORT_ID_SENARY_MI2S_RX:
 	case AFE_PORT_ID_SENARY_MI2S_TX:
+	case AFE_PORT_ID_INT0_MI2S_RX:
+	case AFE_PORT_ID_INT0_MI2S_TX:
+	case AFE_PORT_ID_INT1_MI2S_RX:
+	case AFE_PORT_ID_INT1_MI2S_TX:
+	case AFE_PORT_ID_INT2_MI2S_RX:
+	case AFE_PORT_ID_INT2_MI2S_TX:
+	case AFE_PORT_ID_INT3_MI2S_RX:
+	case AFE_PORT_ID_INT3_MI2S_TX:
+	case AFE_PORT_ID_INT4_MI2S_RX:
+	case AFE_PORT_ID_INT4_MI2S_TX:
+	case AFE_PORT_ID_INT5_MI2S_RX:
+	case AFE_PORT_ID_INT5_MI2S_TX:
+	case AFE_PORT_ID_INT6_MI2S_RX:
+	case AFE_PORT_ID_INT6_MI2S_TX:
 		cfg_type = AFE_PARAM_ID_I2S_CONFIG;
 		break;
 	case AFE_PORT_ID_PRIMARY_TDM_RX ... AFE_PORT_ID_QUINARY_TDM_TX_7:
-- 
2.55.0


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

* [PATCH v6 08/15] ASoC: qdsp6: q6afe-dai: add internal mi2s support
  2026-07-30 17:43 [PATCH v6 00/15] SDM660 sound card and internal MI2S support Richard Acayan
                   ` (6 preceding siblings ...)
  2026-07-30 17:43 ` [PATCH v6 07/15] ASoC: qdsp6: q6afe: add internal mi2s support Richard Acayan
@ 2026-07-30 17:43 ` Richard Acayan
  2026-07-30 18:06   ` sashiko-bot
  2026-07-30 22:55   ` Srinivas Kandagatla
  2026-07-30 17:43 ` [PATCH v6 09/15] ASoC: qdsp6: q6routing: add lpi " Richard Acayan
                   ` (6 subsequent siblings)
  14 siblings, 2 replies; 27+ messages in thread
From: Richard Acayan @ 2026-07-30 17:43 UTC (permalink / raw)
  To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
	Konrad Dybcio, linux-sound, linux-arm-msm, devicetree
  Cc: Nickolay Goppen, Adam Skladowski, Vladimir Lypak,
	Dmitry Baryshkov, Mohammad Rafi Shaik, Johan Hovold, Kees Cook,
	Charles Keepax, Kuninori Morimoto, Richard Acayan

The bindings for LPI MI2S ports, originally exclusive to q6apm, can be
used for internal MI2S ports on q6afe. Add the internal MI2S ports found
on the SDM660 internal sound card using the LPI MI2S bindings.

Signed-off-by: Richard Acayan <mailingradian@gmail.com>
---
 sound/soc/qcom/qdsp6/q6afe-dai.c | 48 ++++++++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)

diff --git a/sound/soc/qcom/qdsp6/q6afe-dai.c b/sound/soc/qcom/qdsp6/q6afe-dai.c
index a0d21034a626..920345609d2c 100644
--- a/sound/soc/qcom/qdsp6/q6afe-dai.c
+++ b/sound/soc/qcom/qdsp6/q6afe-dai.c
@@ -412,6 +412,8 @@ static int q6afe_dai_prepare(struct snd_pcm_substream *substream,
 	case SENARY_MI2S_RX ... SENARY_MI2S_TX:
 	case QUINARY_MI2S_RX ... QUINARY_MI2S_TX:
 	case PRIMARY_MI2S_RX ... QUATERNARY_MI2S_TX:
+	case LPI_MI2S_RX_0 ... LPI_MI2S_TX_4:
+	case LPI_MI2S_RX_5 ... LPI_MI2S_TX_6:
 		rc = q6afe_i2s_port_prepare(dai_data->port[dai->id],
 			       &dai_data->port_config[dai->id].i2s_cfg);
 		if (rc < 0) {
@@ -665,6 +667,21 @@ static const struct snd_soc_dapm_route q6afe_dapm_routes[] = {
 
 	/* USB playback AFE port receives data for playback, hence use the RX port */
 	{"USB Playback", NULL, "USB_RX"},
+
+	{"LPI RX0 MI2S Playback", NULL, "LPI_MI2S_RX_0"},
+	{"LPI_MI2S_TX_0", NULL, "LPI TX0 MI2S Capture"},
+	{"LPI RX1 MI2S Playback", NULL, "LPI_MI2S_RX_1"},
+	{"LPI_MI2S_TX_1", NULL, "LPI TX1 MI2S Capture"},
+	{"LPI RX2 MI2S Playback", NULL, "LPI_MI2S_RX_2"},
+	{"LPI_MI2S_TX_2", NULL, "LPI TX2 MI2S Capture"},
+	{"LPI RX3 MI2S Playback", NULL, "LPI_MI2S_RX_3"},
+	{"LPI_MI2S_TX_3", NULL, "LPI TX3 MI2S Capture"},
+	{"LPI RX4 MI2S Playback", NULL, "LPI_MI2S_RX_4"},
+	{"LPI_MI2S_TX_4", NULL, "LPI TX4 MI2S Capture"},
+	{"LPI RX5 MI2S Playback", NULL, "LPI_MI2S_RX_5"},
+	{"LPI_MI2S_TX_5", NULL, "LPI TX5 MI2S Capture"},
+	{"LPI RX6 MI2S Playback", NULL, "LPI_MI2S_RX_6"},
+	{"LPI_MI2S_TX_6", NULL, "LPI TX6 MI2S Capture"},
 };
 
 static int msm_dai_q6_dai_probe(struct snd_soc_dai *dai)
@@ -1011,6 +1028,35 @@ static const struct snd_soc_dapm_widget q6afe_dai_widgets[] = {
 		0, SND_SOC_NOPM, 0, 0),
 
 	SND_SOC_DAPM_AIF_IN("USB_RX", NULL, 0, SND_SOC_NOPM, 0, 0),
+
+	SND_SOC_DAPM_AIF_IN("LPI_MI2S_RX_0", NULL,
+		0, SND_SOC_NOPM, 0, 0),
+	SND_SOC_DAPM_AIF_OUT("LPI_MI2S_TX_0", NULL,
+		0, SND_SOC_NOPM, 0, 0),
+	SND_SOC_DAPM_AIF_IN("LPI_MI2S_RX_1", NULL,
+		0, SND_SOC_NOPM, 0, 0),
+	SND_SOC_DAPM_AIF_OUT("LPI_MI2S_TX_1", NULL,
+		0, SND_SOC_NOPM, 0, 0),
+	SND_SOC_DAPM_AIF_IN("LPI_MI2S_RX_2", NULL,
+		0, SND_SOC_NOPM, 0, 0),
+	SND_SOC_DAPM_AIF_OUT("LPI_MI2S_TX_2", NULL,
+		0, SND_SOC_NOPM, 0, 0),
+	SND_SOC_DAPM_AIF_IN("LPI_MI2S_RX_3", NULL,
+		0, SND_SOC_NOPM, 0, 0),
+	SND_SOC_DAPM_AIF_OUT("LPI_MI2S_TX_3", NULL,
+		0, SND_SOC_NOPM, 0, 0),
+	SND_SOC_DAPM_AIF_IN("LPI_MI2S_RX_4", NULL,
+		0, SND_SOC_NOPM, 0, 0),
+	SND_SOC_DAPM_AIF_OUT("LPI_MI2S_TX_4", NULL,
+		0, SND_SOC_NOPM, 0, 0),
+	SND_SOC_DAPM_AIF_IN("LPI_MI2S_RX_5", NULL,
+		0, SND_SOC_NOPM, 0, 0),
+	SND_SOC_DAPM_AIF_OUT("LPI_MI2S_TX_5", NULL,
+		0, SND_SOC_NOPM, 0, 0),
+	SND_SOC_DAPM_AIF_IN("LPI_MI2S_RX_6", NULL,
+		0, SND_SOC_NOPM, 0, 0),
+	SND_SOC_DAPM_AIF_OUT("LPI_MI2S_TX_6", NULL,
+		0, SND_SOC_NOPM, 0, 0),
 };
 
 static const struct snd_soc_component_driver q6afe_dai_component = {
@@ -1045,6 +1091,8 @@ static void of_q6afe_parse_dai_data(struct device *dev,
 		case SENARY_MI2S_RX ... SENARY_MI2S_TX:
 		case QUINARY_MI2S_RX ... QUINARY_MI2S_TX:
 		case PRIMARY_MI2S_RX ... QUATERNARY_MI2S_TX:
+		case LPI_MI2S_RX_0 ... LPI_MI2S_TX_4:
+		case LPI_MI2S_RX_5 ... LPI_MI2S_TX_6:
 			priv = &data->priv[id];
 			ret = of_property_read_variable_u32_array(node,
 							"qcom,sd-lines",
-- 
2.55.0


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

* [PATCH v6 09/15] ASoC: qdsp6: q6routing: add lpi mi2s support
  2026-07-30 17:43 [PATCH v6 00/15] SDM660 sound card and internal MI2S support Richard Acayan
                   ` (7 preceding siblings ...)
  2026-07-30 17:43 ` [PATCH v6 08/15] ASoC: qdsp6: q6afe-dai: " Richard Acayan
@ 2026-07-30 17:43 ` Richard Acayan
  2026-07-30 22:57   ` Srinivas Kandagatla
  2026-07-30 17:43 ` [PATCH v6 10/15] ASoC: qdsp6: common: support headphone jacks connected to lpi mi2s Richard Acayan
                   ` (5 subsequent siblings)
  14 siblings, 1 reply; 27+ messages in thread
From: Richard Acayan @ 2026-07-30 17:43 UTC (permalink / raw)
  To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
	Konrad Dybcio, linux-sound, linux-arm-msm, devicetree
  Cc: Nickolay Goppen, Adam Skladowski, Vladimir Lypak,
	Dmitry Baryshkov, Mohammad Rafi Shaik, Johan Hovold, Kees Cook,
	Charles Keepax, Kuninori Morimoto, Richard Acayan

Add the ASM-AFE routing for LPI MI2S ports which represent internal MI2S
ports on SDM660.

Signed-off-by: Richard Acayan <mailingradian@gmail.com>
---
 sound/soc/qcom/qdsp6/q6routing.c | 78 +++++++++++++++++++++++++++++++-
 1 file changed, 77 insertions(+), 1 deletion(-)

diff --git a/sound/soc/qcom/qdsp6/q6routing.c b/sound/soc/qcom/qdsp6/q6routing.c
index 7386226046fa..d076c99f197f 100644
--- a/sound/soc/qcom/qdsp6/q6routing.c
+++ b/sound/soc/qcom/qdsp6/q6routing.c
@@ -127,7 +127,14 @@
 	{ mix_name, "TX_CODEC_DMA_TX_2", "TX_CODEC_DMA_TX_2"},	\
 	{ mix_name, "TX_CODEC_DMA_TX_3", "TX_CODEC_DMA_TX_3"},	\
 	{ mix_name, "TX_CODEC_DMA_TX_4", "TX_CODEC_DMA_TX_4"},	\
-	{ mix_name, "TX_CODEC_DMA_TX_5", "TX_CODEC_DMA_TX_5"}
+	{ mix_name, "TX_CODEC_DMA_TX_5", "TX_CODEC_DMA_TX_5"},	\
+	{ mix_name, "LPI_MI2S_TX_0", "LPI_MI2S_TX_0" },		\
+	{ mix_name, "LPI_MI2S_TX_1", "LPI_MI2S_TX_1" },		\
+	{ mix_name, "LPI_MI2S_TX_2", "LPI_MI2S_TX_2" },		\
+	{ mix_name, "LPI_MI2S_TX_3", "LPI_MI2S_TX_3" },		\
+	{ mix_name, "LPI_MI2S_TX_4", "LPI_MI2S_TX_4" },		\
+	{ mix_name, "LPI_MI2S_TX_5", "LPI_MI2S_TX_5" },		\
+	{ mix_name, "LPI_MI2S_TX_6", "LPI_MI2S_TX_6" }
 
 #define Q6ROUTING_TX_MIXERS(id)						\
 	SOC_SINGLE_EXT("PRI_MI2S_TX", PRIMARY_MI2S_TX,			\
@@ -320,6 +327,27 @@
 		id, 1, 0, msm_routing_get_audio_mixer,			\
 		msm_routing_put_audio_mixer),				\
 	SOC_SINGLE_EXT("TX_CODEC_DMA_TX_5", TX_CODEC_DMA_TX_5,		\
+		id, 1, 0, msm_routing_get_audio_mixer,			\
+		msm_routing_put_audio_mixer),				\
+	SOC_SINGLE_EXT("LPI_MI2S_TX_0", LPI_MI2S_TX_0,			\
+		id, 1, 0, msm_routing_get_audio_mixer,			\
+		msm_routing_put_audio_mixer),				\
+	SOC_SINGLE_EXT("LPI_MI2S_TX_1", LPI_MI2S_TX_1,			\
+		id, 1, 0, msm_routing_get_audio_mixer,			\
+		msm_routing_put_audio_mixer),				\
+	SOC_SINGLE_EXT("LPI_MI2S_TX_2", LPI_MI2S_TX_2,			\
+		id, 1, 0, msm_routing_get_audio_mixer,			\
+		msm_routing_put_audio_mixer),				\
+	SOC_SINGLE_EXT("LPI_MI2S_TX_3", LPI_MI2S_TX_3,			\
+		id, 1, 0, msm_routing_get_audio_mixer,			\
+		msm_routing_put_audio_mixer),				\
+	SOC_SINGLE_EXT("LPI_MI2S_TX_4", LPI_MI2S_TX_4,			\
+		id, 1, 0, msm_routing_get_audio_mixer,			\
+		msm_routing_put_audio_mixer),				\
+	SOC_SINGLE_EXT("LPI_MI2S_TX_5", LPI_MI2S_TX_5,			\
+		id, 1, 0, msm_routing_get_audio_mixer,			\
+		msm_routing_put_audio_mixer),				\
+	SOC_SINGLE_EXT("LPI_MI2S_TX_6", LPI_MI2S_TX_6,			\
 		id, 1, 0, msm_routing_get_audio_mixer,			\
 		msm_routing_put_audio_mixer),
 
@@ -709,6 +737,26 @@ static const struct snd_kcontrol_new rxcodec_dma_rx_6_mixer_controls[] = {
 static const struct snd_kcontrol_new rx_codec_dma_rx_7_mixer_controls[] = {
 	Q6ROUTING_RX_MIXERS(RX_CODEC_DMA_RX_7) };
 
+static const struct snd_kcontrol_new lpi_mi2s_rx_0_mixer_controls[] = {
+	Q6ROUTING_RX_MIXERS(LPI_MI2S_RX_0) };
+
+static const struct snd_kcontrol_new lpi_mi2s_rx_1_mixer_controls[] = {
+	Q6ROUTING_RX_MIXERS(LPI_MI2S_RX_1) };
+
+static const struct snd_kcontrol_new lpi_mi2s_rx_2_mixer_controls[] = {
+	Q6ROUTING_RX_MIXERS(LPI_MI2S_RX_2) };
+
+static const struct snd_kcontrol_new lpi_mi2s_rx_3_mixer_controls[] = {
+	Q6ROUTING_RX_MIXERS(LPI_MI2S_RX_3) };
+
+static const struct snd_kcontrol_new lpi_mi2s_rx_4_mixer_controls[] = {
+	Q6ROUTING_RX_MIXERS(LPI_MI2S_RX_4) };
+
+static const struct snd_kcontrol_new lpi_mi2s_rx_5_mixer_controls[] = {
+	Q6ROUTING_RX_MIXERS(LPI_MI2S_RX_5) };
+
+static const struct snd_kcontrol_new lpi_mi2s_rx_6_mixer_controls[] = {
+	Q6ROUTING_RX_MIXERS(LPI_MI2S_RX_6) };
 
 static const struct snd_kcontrol_new mmul1_mixer_controls[] = {
 	Q6ROUTING_TX_MIXERS(MSM_FRONTEND_DAI_MULTIMEDIA1) };
@@ -938,6 +986,27 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = {
 	SND_SOC_DAPM_MIXER("USB_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
 			   usb_rx_mixer_controls,
 			   ARRAY_SIZE(usb_rx_mixer_controls)),
+	SND_SOC_DAPM_MIXER("LPI_MI2S_RX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
+		lpi_mi2s_rx_0_mixer_controls,
+		ARRAY_SIZE(lpi_mi2s_rx_0_mixer_controls)),
+	SND_SOC_DAPM_MIXER("LPI_MI2S_RX_1 Audio Mixer", SND_SOC_NOPM, 0, 0,
+		lpi_mi2s_rx_1_mixer_controls,
+		ARRAY_SIZE(lpi_mi2s_rx_1_mixer_controls)),
+	SND_SOC_DAPM_MIXER("LPI_MI2S_RX_2 Audio Mixer", SND_SOC_NOPM, 0, 0,
+		lpi_mi2s_rx_2_mixer_controls,
+		ARRAY_SIZE(lpi_mi2s_rx_2_mixer_controls)),
+	SND_SOC_DAPM_MIXER("LPI_MI2S_RX_3 Audio Mixer", SND_SOC_NOPM, 0, 0,
+		lpi_mi2s_rx_3_mixer_controls,
+		ARRAY_SIZE(lpi_mi2s_rx_3_mixer_controls)),
+	SND_SOC_DAPM_MIXER("LPI_MI2S_RX_4 Audio Mixer", SND_SOC_NOPM, 0, 0,
+		lpi_mi2s_rx_4_mixer_controls,
+		ARRAY_SIZE(lpi_mi2s_rx_4_mixer_controls)),
+	SND_SOC_DAPM_MIXER("LPI_MI2S_RX_5 Audio Mixer", SND_SOC_NOPM, 0, 0,
+		lpi_mi2s_rx_5_mixer_controls,
+		ARRAY_SIZE(lpi_mi2s_rx_5_mixer_controls)),
+	SND_SOC_DAPM_MIXER("LPI_MI2S_RX_6 Audio Mixer", SND_SOC_NOPM, 0, 0,
+		lpi_mi2s_rx_6_mixer_controls,
+		ARRAY_SIZE(lpi_mi2s_rx_6_mixer_controls)),
 	SND_SOC_DAPM_MIXER("MultiMedia1 Mixer", SND_SOC_NOPM, 0, 0,
 		mmul1_mixer_controls, ARRAY_SIZE(mmul1_mixer_controls)),
 	SND_SOC_DAPM_MIXER("MultiMedia2 Mixer", SND_SOC_NOPM, 0, 0,
@@ -1031,6 +1100,13 @@ static const struct snd_soc_dapm_route intercon[] = {
 	Q6ROUTING_RX_DAPM_ROUTE("RX_CODEC_DMA_RX_6 Audio Mixer", "RX_CODEC_DMA_RX_6"),
 	Q6ROUTING_RX_DAPM_ROUTE("RX_CODEC_DMA_RX_7 Audio Mixer", "RX_CODEC_DMA_RX_7"),
 	Q6ROUTING_RX_DAPM_ROUTE("USB_RX Audio Mixer", "USB_RX"),
+	Q6ROUTING_RX_DAPM_ROUTE("LPI_MI2S_RX_0 Audio Mixer", "LPI_MI2S_RX_0"),
+	Q6ROUTING_RX_DAPM_ROUTE("LPI_MI2S_RX_1 Audio Mixer", "LPI_MI2S_RX_1"),
+	Q6ROUTING_RX_DAPM_ROUTE("LPI_MI2S_RX_2 Audio Mixer", "LPI_MI2S_RX_2"),
+	Q6ROUTING_RX_DAPM_ROUTE("LPI_MI2S_RX_3 Audio Mixer", "LPI_MI2S_RX_3"),
+	Q6ROUTING_RX_DAPM_ROUTE("LPI_MI2S_RX_4 Audio Mixer", "LPI_MI2S_RX_4"),
+	Q6ROUTING_RX_DAPM_ROUTE("LPI_MI2S_RX_5 Audio Mixer", "LPI_MI2S_RX_5"),
+	Q6ROUTING_RX_DAPM_ROUTE("LPI_MI2S_RX_6 Audio Mixer", "LPI_MI2S_RX_6"),
 	Q6ROUTING_TX_DAPM_ROUTE("MultiMedia1 Mixer"),
 	Q6ROUTING_TX_DAPM_ROUTE("MultiMedia2 Mixer"),
 	Q6ROUTING_TX_DAPM_ROUTE("MultiMedia3 Mixer"),
-- 
2.55.0


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

* [PATCH v6 10/15] ASoC: qdsp6: common: support headphone jacks connected to lpi mi2s
  2026-07-30 17:43 [PATCH v6 00/15] SDM660 sound card and internal MI2S support Richard Acayan
                   ` (8 preceding siblings ...)
  2026-07-30 17:43 ` [PATCH v6 09/15] ASoC: qdsp6: q6routing: add lpi " Richard Acayan
@ 2026-07-30 17:43 ` Richard Acayan
  2026-07-30 17:43 ` [PATCH v6 11/15] ASoC: qcom: sm8250: add support for LPI_MI2S_RX_0 and LPI_MI2S_TX_3 Richard Acayan
                   ` (4 subsequent siblings)
  14 siblings, 0 replies; 27+ messages in thread
From: Richard Acayan @ 2026-07-30 17:43 UTC (permalink / raw)
  To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
	Konrad Dybcio, linux-sound, linux-arm-msm, devicetree
  Cc: Nickolay Goppen, Adam Skladowski, Vladimir Lypak,
	Dmitry Baryshkov, Mohammad Rafi Shaik, Johan Hovold, Kees Cook,
	Charles Keepax, Kuninori Morimoto, Richard Acayan

On SDM660, LPI MI2S ports can be connected to a WCD codec which may
support headphones. Register the headphone jack on codecs connected to
the playback port, LPI_MI2S_RX_0.

Signed-off-by: Richard Acayan <mailingradian@gmail.com>
---
 sound/soc/qcom/common.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sound/soc/qcom/common.c b/sound/soc/qcom/common.c
index edc4611691f7..b570d81583f2 100644
--- a/sound/soc/qcom/common.c
+++ b/sound/soc/qcom/common.c
@@ -215,6 +215,7 @@ int qcom_snd_wcd_jack_setup(struct snd_soc_pcm_runtime *rtd,
 	}
 
 	switch (cpu_dai->id) {
+	case LPI_MI2S_RX_0:
 	case TX_CODEC_DMA_TX_0:
 	case TX_CODEC_DMA_TX_1:
 	case TX_CODEC_DMA_TX_2:
-- 
2.55.0


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

* [PATCH v6 11/15] ASoC: qcom: sm8250: add support for LPI_MI2S_RX_0 and LPI_MI2S_TX_3
  2026-07-30 17:43 [PATCH v6 00/15] SDM660 sound card and internal MI2S support Richard Acayan
                   ` (9 preceding siblings ...)
  2026-07-30 17:43 ` [PATCH v6 10/15] ASoC: qdsp6: common: support headphone jacks connected to lpi mi2s Richard Acayan
@ 2026-07-30 17:43 ` Richard Acayan
  2026-07-30 18:02   ` sashiko-bot
  2026-07-30 17:43 ` [PATCH v6 12/15] ASoC: qcom: sm8250: add SDM660 compatible Richard Acayan
                   ` (3 subsequent siblings)
  14 siblings, 1 reply; 27+ messages in thread
From: Richard Acayan @ 2026-07-30 17:43 UTC (permalink / raw)
  To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
	Konrad Dybcio, linux-sound, linux-arm-msm, devicetree
  Cc: Nickolay Goppen, Adam Skladowski, Vladimir Lypak,
	Dmitry Baryshkov, Mohammad Rafi Shaik, Johan Hovold, Kees Cook,
	Charles Keepax, Kuninori Morimoto, Richard Acayan

The LPI_MI2S_RX_0 and LPI_MI2S_TX_3 ports on SDM660 can be connected to
the digital and analog WCD codecs. They can be supported with the same
logic for other ports, but just need to be explicitly stated. Add
support for these ports.

Signed-off-by: Richard Acayan <mailingradian@gmail.com>
---
 sound/soc/qcom/sm8250.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/sound/soc/qcom/sm8250.c b/sound/soc/qcom/sm8250.c
index f193d0ba63d0..1952c599e004 100644
--- a/sound/soc/qcom/sm8250.c
+++ b/sound/soc/qcom/sm8250.c
@@ -112,6 +112,22 @@ static int sm8250_snd_startup(struct snd_pcm_substream *substream)
 		snd_soc_dai_set_fmt(cpu_dai, fmt);
 		snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
 		break;
+	case LPI_MI2S_RX_0:
+		codec_dai_fmt |= SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_I2S;
+		snd_soc_dai_set_sysclk(cpu_dai,
+			Q6AFE_LPASS_CLK_ID_INT0_MI2S_IBIT,
+			MI2S_BCLK_RATE, SNDRV_PCM_STREAM_PLAYBACK);
+		snd_soc_dai_set_fmt(cpu_dai, fmt);
+		snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
+		break;
+	case LPI_MI2S_TX_3:
+		codec_dai_fmt |= SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_I2S;
+		snd_soc_dai_set_sysclk(cpu_dai,
+			Q6AFE_LPASS_CLK_ID_INT3_MI2S_IBIT,
+			MI2S_BCLK_RATE, SNDRV_PCM_STREAM_CAPTURE);
+		snd_soc_dai_set_fmt(cpu_dai, fmt);
+		snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
+		break;
 	default:
 		break;
 	}
-- 
2.55.0


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

* [PATCH v6 12/15] ASoC: qcom: sm8250: add SDM660 compatible
  2026-07-30 17:43 [PATCH v6 00/15] SDM660 sound card and internal MI2S support Richard Acayan
                   ` (10 preceding siblings ...)
  2026-07-30 17:43 ` [PATCH v6 11/15] ASoC: qcom: sm8250: add support for LPI_MI2S_RX_0 and LPI_MI2S_TX_3 Richard Acayan
@ 2026-07-30 17:43 ` Richard Acayan
  2026-07-30 17:43 ` [PATCH v6 13/15] ASoC: msm8916-wcd-analog: add pm8950 codec Richard Acayan
                   ` (2 subsequent siblings)
  14 siblings, 0 replies; 27+ messages in thread
From: Richard Acayan @ 2026-07-30 17:43 UTC (permalink / raw)
  To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
	Konrad Dybcio, linux-sound, linux-arm-msm, devicetree
  Cc: Nickolay Goppen, Adam Skladowski, Vladimir Lypak,
	Dmitry Baryshkov, Mohammad Rafi Shaik, Johan Hovold, Kees Cook,
	Charles Keepax, Kuninori Morimoto, Richard Acayan

Add the compatible for SDM660 and SDM670 devices, which can use the
support for WCD codecs connected to internal MI2S.

Signed-off-by: Richard Acayan <mailingradian@gmail.com>
---
 sound/soc/qcom/sm8250.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sound/soc/qcom/sm8250.c b/sound/soc/qcom/sm8250.c
index 1952c599e004..76dc3a3f4a31 100644
--- a/sound/soc/qcom/sm8250.c
+++ b/sound/soc/qcom/sm8250.c
@@ -210,6 +210,7 @@ static const struct of_device_id snd_sm8250_dt_match[] = {
 	{ .compatible = "qcom,qrb2210-sndcard", .data = "qcm2290" },
 	{ .compatible = "qcom,qrb4210-rb2-sndcard", .data = "sm4250" },
 	{ .compatible = "qcom,qrb5165-rb5-sndcard", .data = "sm8250" },
+	{ .compatible = "qcom,sdm660-sndcard", .data = "sdm660" },
 	{ .compatible = "qcom,sm8250-sndcard", .data = "sm8250" },
 	{}
 };
-- 
2.55.0


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

* [PATCH v6 13/15] ASoC: msm8916-wcd-analog: add pm8950 codec
  2026-07-30 17:43 [PATCH v6 00/15] SDM660 sound card and internal MI2S support Richard Acayan
                   ` (11 preceding siblings ...)
  2026-07-30 17:43 ` [PATCH v6 12/15] ASoC: qcom: sm8250: add SDM660 compatible Richard Acayan
@ 2026-07-30 17:43 ` Richard Acayan
  2026-07-30 17:59   ` sashiko-bot
  2026-07-30 17:43 ` [PATCH v6 14/15] ASoC: msm8916-wcd-analog: add pm8953 codec Richard Acayan
  2026-07-30 17:43 ` [PATCH v6 15/15] ASoC: msm8916-wcd-analog: add quirk for cajon 2.0 Richard Acayan
  14 siblings, 1 reply; 27+ messages in thread
From: Richard Acayan @ 2026-07-30 17:43 UTC (permalink / raw)
  To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
	Konrad Dybcio, linux-sound, linux-arm-msm, devicetree
  Cc: Nickolay Goppen, Adam Skladowski, Vladimir Lypak,
	Dmitry Baryshkov, Mohammad Rafi Shaik, Johan Hovold, Kees Cook,
	Charles Keepax, Kuninori Morimoto, Richard Acayan

From: Adam Skladowski <a39.skl@gmail.com>

Add regs overrides for PM8950 codec and implement matching reg overrides
via compatible.

Signed-off-by: Adam Skladowski <a39.skl@gmail.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Signed-off-by: Richard Acayan <mailingradian@gmail.com>
---
 sound/soc/codecs/msm8916-wcd-analog.c | 52 ++++++++++++++++++++++++---
 1 file changed, 48 insertions(+), 4 deletions(-)

diff --git a/sound/soc/codecs/msm8916-wcd-analog.c b/sound/soc/codecs/msm8916-wcd-analog.c
index 9ca381812975..13df60409857 100644
--- a/sound/soc/codecs/msm8916-wcd-analog.c
+++ b/sound/soc/codecs/msm8916-wcd-analog.c
@@ -232,6 +232,8 @@
 #define RX_EAR_CTL_PA_SEL_MASK			BIT(7)
 #define RX_EAR_CTL_PA_SEL			BIT(7)
 
+#define CDC_A_RX_EAR_STATUS		(0xf1A1)
+
 #define CDC_A_SPKR_DAC_CTL		(0xf1B0)
 #define SPKR_DAC_CTL_DAC_RESET_MASK	BIT(4)
 #define SPKR_DAC_CTL_DAC_RESET_NORMAL	0
@@ -250,6 +252,7 @@
 		SPKR_DRV_CAL_EN | SPKR_DRV_SETTLE_EN | \
 		SPKR_DRV_FW_EN | SPKR_DRV_BOOST_SET | \
 		SPKR_DRV_CMFB_SET | SPKR_DRV_GAIN_SET)
+#define CDC_A_SPKR_ANA_BIAS_SET		(0xf1B3)
 #define CDC_A_SPKR_OCP_CTL		(0xf1B4)
 #define CDC_A_SPKR_PWRSTG_CTL		(0xf1B5)
 #define SPKR_PWRSTG_CTL_DAC_EN_MASK	BIT(0)
@@ -264,6 +267,7 @@
 
 #define CDC_A_SPKR_DRV_DBG		(0xf1B7)
 #define CDC_A_CURRENT_LIMIT		(0xf1C0)
+#define CDC_A_BYPASS_MODE		(0xf1C2)
 #define CDC_A_BOOST_EN_CTL		(0xf1C3)
 #define CDC_A_SLOPE_COMP_IP_ZERO	(0xf1C4)
 #define CDC_A_SEC_ACCESS		(0xf1D0)
@@ -286,6 +290,11 @@ static const char * const supply_names[] = {
 
 #define MBHC_MAX_BUTTONS	(5)
 
+struct wcd_reg_seq {
+	const struct reg_default *seq;
+	int seq_size;
+};
+
 struct pm8916_wcd_analog_priv {
 	u16 pmic_rev;
 	u16 codec_version;
@@ -715,9 +724,41 @@ static const struct reg_default wcd_reg_defaults_2_0[] = {
 	{CDC_A_MASTER_BIAS_CTL, 0x30},
 };
 
+static const struct wcd_reg_seq pm8916_data = {
+	.seq = wcd_reg_defaults_2_0,
+	.seq_size = ARRAY_SIZE(wcd_reg_defaults_2_0),
+};
+
+static const struct reg_default wcd_reg_defaults_pm8950[] = {
+	{CDC_A_RX_COM_OCP_CTL, 0xd1},
+	{CDC_A_RX_COM_OCP_COUNT, 0xff},
+	{CDC_D_SEC_ACCESS, 0xa5},
+	{CDC_D_PERPH_RESET_CTL3, 0x0f},
+	{CDC_A_TX_1_2_OPAMP_BIAS, 0x4c},
+	{CDC_A_NCP_FBCTRL, 0xa8},
+	{CDC_A_NCP_VCTRL, 0xa4},
+	{CDC_A_SPKR_DRV_CTL, 0x69},
+	{CDC_A_SPKR_DRV_DBG, 0x01},
+	{CDC_A_SEC_ACCESS, 0xa5},
+	{CDC_A_PERPH_RESET_CTL3, 0x0f},
+	{CDC_A_CURRENT_LIMIT, 0x82},
+	{CDC_A_SPKR_ANA_BIAS_SET, 0x41},
+	{CDC_A_SPKR_DAC_CTL, 0x03},
+	{CDC_A_SPKR_OCP_CTL, 0xe1},
+	{CDC_A_RX_HPH_BIAS_PA, 0xfa},
+	{CDC_A_MASTER_BIAS_CTL, 0x30},
+	{CDC_A_MICB_1_INT_RBIAS, 0x00},
+};
+
+static const struct wcd_reg_seq pm8950_data = {
+	.seq = wcd_reg_defaults_pm8950,
+	.seq_size = ARRAY_SIZE(wcd_reg_defaults_pm8950),
+};
+
 static int pm8916_wcd_analog_probe(struct snd_soc_component *component)
 {
 	struct pm8916_wcd_analog_priv *priv = dev_get_drvdata(component->dev);
+	const struct wcd_reg_seq *wcd_reg_init_data;
 	int err, reg;
 
 	err = regulator_bulk_enable(ARRAY_SIZE(priv->supplies), priv->supplies);
@@ -738,9 +779,11 @@ static int pm8916_wcd_analog_probe(struct snd_soc_component *component)
 	snd_soc_component_write(component, CDC_D_PERPH_RESET_CTL4, 0x01);
 	snd_soc_component_write(component, CDC_A_PERPH_RESET_CTL4, 0x01);
 
-	for (reg = 0; reg < ARRAY_SIZE(wcd_reg_defaults_2_0); reg++)
-		snd_soc_component_write(component, wcd_reg_defaults_2_0[reg].reg,
-			      wcd_reg_defaults_2_0[reg].def);
+	wcd_reg_init_data = of_device_get_match_data(component->dev);
+
+	for (reg = 0; reg < wcd_reg_init_data->seq_size; reg++)
+		snd_soc_component_write(component, wcd_reg_init_data->seq[reg].reg,
+					wcd_reg_init_data->seq[reg].def);
 
 	priv->component = component;
 
@@ -1259,7 +1302,8 @@ static int pm8916_wcd_analog_spmi_probe(struct platform_device *pdev)
 }
 
 static const struct of_device_id pm8916_wcd_analog_spmi_match_table[] = {
-	{ .compatible = "qcom,pm8916-wcd-analog-codec", },
+	{ .compatible = "qcom,pm8916-wcd-analog-codec", .data = &pm8916_data },
+	{ .compatible = "qcom,pm8950-wcd-analog-codec", .data = &pm8950_data },
 	{ }
 };
 
-- 
2.55.0


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

* [PATCH v6 14/15] ASoC: msm8916-wcd-analog: add pm8953 codec
  2026-07-30 17:43 [PATCH v6 00/15] SDM660 sound card and internal MI2S support Richard Acayan
                   ` (12 preceding siblings ...)
  2026-07-30 17:43 ` [PATCH v6 13/15] ASoC: msm8916-wcd-analog: add pm8950 codec Richard Acayan
@ 2026-07-30 17:43 ` Richard Acayan
  2026-07-30 18:03   ` sashiko-bot
  2026-07-30 17:43 ` [PATCH v6 15/15] ASoC: msm8916-wcd-analog: add quirk for cajon 2.0 Richard Acayan
  14 siblings, 1 reply; 27+ messages in thread
From: Richard Acayan @ 2026-07-30 17:43 UTC (permalink / raw)
  To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
	Konrad Dybcio, linux-sound, linux-arm-msm, devicetree
  Cc: Nickolay Goppen, Adam Skladowski, Vladimir Lypak,
	Dmitry Baryshkov, Mohammad Rafi Shaik, Johan Hovold, Kees Cook,
	Charles Keepax, Kuninori Morimoto, Richard Acayan

From: Vladimir Lypak <vladimir.lypak@gmail.com>

Add regs overrides for PM8953 codec.

Signed-off-by: Vladimir Lypak <vladimir.lypak@gmail.com>
[Adam: rename codec]
Signed-off-by: Adam Skladowski <a39.skl@gmail.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Signed-off-by: Richard Acayan <mailingradian@gmail.com>
---
 sound/soc/codecs/msm8916-wcd-analog.c | 29 +++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/sound/soc/codecs/msm8916-wcd-analog.c b/sound/soc/codecs/msm8916-wcd-analog.c
index 13df60409857..b9325290c28d 100644
--- a/sound/soc/codecs/msm8916-wcd-analog.c
+++ b/sound/soc/codecs/msm8916-wcd-analog.c
@@ -755,6 +755,34 @@ static const struct wcd_reg_seq pm8950_data = {
 	.seq_size = ARRAY_SIZE(wcd_reg_defaults_pm8950),
 };
 
+static const struct reg_default wcd_reg_defaults_pm8953[] = {
+	{CDC_A_RX_COM_OCP_CTL, 0xd1},
+	{CDC_A_RX_COM_OCP_COUNT, 0xff},
+	{CDC_D_SEC_ACCESS, 0xa5},
+	{CDC_D_PERPH_RESET_CTL3, 0x0f},
+	{CDC_A_TX_1_2_OPAMP_BIAS, 0x4c},
+	{CDC_A_NCP_FBCTRL, 0xa8},
+	{CDC_A_NCP_VCTRL, 0xa4},
+	{CDC_A_SPKR_DRV_CTL, 0x69},
+	{CDC_A_SPKR_DRV_DBG, 0x01},
+	{CDC_A_SEC_ACCESS, 0xa5},
+	{CDC_A_PERPH_RESET_CTL3, 0x0f},
+	{CDC_A_CURRENT_LIMIT, 0xa2},
+	{CDC_A_BYPASS_MODE, 0x18},
+	{CDC_A_SPKR_ANA_BIAS_SET, 0x41},
+	{CDC_A_SPKR_DAC_CTL, 0x03},
+	{CDC_A_SPKR_OCP_CTL, 0xe1},
+	{CDC_A_RX_HPH_BIAS_PA, 0xfa},
+	{CDC_A_RX_EAR_STATUS, 0x10},
+	{CDC_A_MASTER_BIAS_CTL, 0x30},
+	{CDC_A_MICB_1_INT_RBIAS, 0x00},
+};
+
+static const struct wcd_reg_seq pm8953_data = {
+	.seq = wcd_reg_defaults_pm8953,
+	.seq_size = ARRAY_SIZE(wcd_reg_defaults_pm8953),
+};
+
 static int pm8916_wcd_analog_probe(struct snd_soc_component *component)
 {
 	struct pm8916_wcd_analog_priv *priv = dev_get_drvdata(component->dev);
@@ -1304,6 +1332,7 @@ static int pm8916_wcd_analog_spmi_probe(struct platform_device *pdev)
 static const struct of_device_id pm8916_wcd_analog_spmi_match_table[] = {
 	{ .compatible = "qcom,pm8916-wcd-analog-codec", .data = &pm8916_data },
 	{ .compatible = "qcom,pm8950-wcd-analog-codec", .data = &pm8950_data },
+	{ .compatible = "qcom,pm8953-wcd-analog-codec", .data = &pm8953_data },
 	{ }
 };
 
-- 
2.55.0


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

* [PATCH v6 15/15] ASoC: msm8916-wcd-analog: add quirk for cajon 2.0
  2026-07-30 17:43 [PATCH v6 00/15] SDM660 sound card and internal MI2S support Richard Acayan
                   ` (13 preceding siblings ...)
  2026-07-30 17:43 ` [PATCH v6 14/15] ASoC: msm8916-wcd-analog: add pm8953 codec Richard Acayan
@ 2026-07-30 17:43 ` Richard Acayan
  2026-07-30 18:03   ` sashiko-bot
  14 siblings, 1 reply; 27+ messages in thread
From: Richard Acayan @ 2026-07-30 17:43 UTC (permalink / raw)
  To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
	Konrad Dybcio, linux-sound, linux-arm-msm, devicetree
  Cc: Nickolay Goppen, Adam Skladowski, Vladimir Lypak,
	Dmitry Baryshkov, Mohammad Rafi Shaik, Johan Hovold, Kees Cook,
	Charles Keepax, Kuninori Morimoto, Richard Acayan

The codec version CAJON_2_0 on the Snapdragon 670 requires touching the
HPH test registers. Add the quirk so this driver can also support
SDM670.

Signed-off-by: Richard Acayan <mailingradian@gmail.com>
---
 sound/soc/codecs/msm8916-wcd-analog.c | 63 ++++++++++++++++++++++++++-
 1 file changed, 61 insertions(+), 2 deletions(-)

diff --git a/sound/soc/codecs/msm8916-wcd-analog.c b/sound/soc/codecs/msm8916-wcd-analog.c
index b9325290c28d..87f8a47cc293 100644
--- a/sound/soc/codecs/msm8916-wcd-analog.c
+++ b/sound/soc/codecs/msm8916-wcd-analog.c
@@ -217,9 +217,11 @@
 #define CDC_A_RX_HPH_BIAS_LDO_OCP	(0xf195)
 #define CDC_A_RX_HPH_BIAS_CNP		(0xf196)
 #define CDC_A_RX_HPH_CNP_EN		(0xf197)
+#define CDC_A_RX_HPH_L_TEST		(0xf19A)
 #define CDC_A_RX_HPH_L_PA_DAC_CTL	(0xf19B)
 #define RX_HPA_L_PA_DAC_CTL_DATA_RESET_MASK	BIT(1)
 #define RX_HPA_L_PA_DAC_CTL_DATA_RESET_RESET	BIT(1)
+#define CDC_A_RX_HPH_R_TEST		(0xf19C)
 #define CDC_A_RX_HPH_R_PA_DAC_CTL	(0xf19D)
 #define RX_HPH_R_PA_DAC_CTL_DATA_RESET	BIT(1)
 #define RX_HPH_R_PA_DAC_CTL_DATA_RESET_MASK BIT(1)
@@ -705,6 +707,59 @@ static int pm8916_wcd_analog_enable_ear_pa(struct snd_soc_dapm_widget *w,
 	return 0;
 }
 
+static int pm8916_wcd_analog_enable_hphl_pa(struct snd_soc_dapm_widget *w,
+					    struct snd_kcontrol *kcontrol,
+					    int event)
+{
+	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
+	struct pm8916_wcd_analog_priv *priv = dev_get_drvdata(component->dev);
+
+	/* This quirk is not required for revisions prior to CAJON_2_0 */
+	if (priv->codec_version < 4)
+		return 0;
+
+	switch (event) {
+	case SND_SOC_DAPM_POST_PMU:
+		usleep_range(7000, 7100);
+		snd_soc_component_update_bits(component, CDC_A_RX_HPH_L_TEST,
+				0x04, 0x04);
+		break;
+	case SND_SOC_DAPM_POST_PMD:
+		/* wait 20 ms after the digital codec has powered down */
+		msleep(20);
+		snd_soc_component_update_bits(component, CDC_A_RX_HPH_L_TEST,
+				0x04, 0x00);
+		break;
+	}
+	return 0;
+}
+
+static int pm8916_wcd_analog_enable_hphr_pa(struct snd_soc_dapm_widget *w,
+					    struct snd_kcontrol *kcontrol,
+					    int event)
+{
+	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
+	struct pm8916_wcd_analog_priv *priv = dev_get_drvdata(component->dev);
+
+	/* This quirk is not required for revisions prior to CAJON_2_0 */
+	if (priv->codec_version < 4)
+		return 0;
+
+	switch (event) {
+	case SND_SOC_DAPM_POST_PMU:
+		usleep_range(7000, 7100);
+		snd_soc_component_update_bits(component, CDC_A_RX_HPH_R_TEST,
+				0x04, 0x04);
+		break;
+	case SND_SOC_DAPM_POST_PMD:
+		msleep(20);
+		snd_soc_component_update_bits(component, CDC_A_RX_HPH_R_TEST,
+				0x04, 0x00);
+		break;
+	}
+	return 0;
+}
+
 static const struct reg_default wcd_reg_defaults_2_0[] = {
 	{CDC_A_RX_COM_OCP_CTL, 0xD1},
 	{CDC_A_RX_COM_OCP_COUNT, 0xFF},
@@ -954,11 +1009,15 @@ static const struct snd_soc_dapm_widget pm8916_wcd_analog_dapm_widgets[] = {
 	SND_SOC_DAPM_MUX("EAR_S", SND_SOC_NOPM, 0, 0, &ear_mux),
 	SND_SOC_DAPM_SUPPLY("EAR CP", CDC_A_NCP_EN, 4, 0, NULL, 0),
 
-	SND_SOC_DAPM_PGA("HPHL PA", CDC_A_RX_HPH_CNP_EN, 5, 0, NULL, 0),
+	SND_SOC_DAPM_PGA_E("HPHL PA", CDC_A_RX_HPH_CNP_EN, 5, 0, NULL, 0,
+			   pm8916_wcd_analog_enable_hphl_pa,
+			   SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
 	SND_SOC_DAPM_MUX("HPHL", SND_SOC_NOPM, 0, 0, &hphl_mux),
 	SND_SOC_DAPM_MIXER("HPHL DAC", CDC_A_RX_HPH_L_PA_DAC_CTL, 3, 0, NULL,
 			   0),
-	SND_SOC_DAPM_PGA("HPHR PA", CDC_A_RX_HPH_CNP_EN, 4, 0, NULL, 0),
+	SND_SOC_DAPM_PGA_E("HPHR PA", CDC_A_RX_HPH_CNP_EN, 4, 0, NULL, 0,
+			   pm8916_wcd_analog_enable_hphr_pa,
+			   SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
 	SND_SOC_DAPM_MUX("HPHR", SND_SOC_NOPM, 0, 0, &hphr_mux),
 	SND_SOC_DAPM_MIXER("HPHR DAC", CDC_A_RX_HPH_R_PA_DAC_CTL, 3, 0, NULL,
 			   0),
-- 
2.55.0


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

* Re: [PATCH v6 13/15] ASoC: msm8916-wcd-analog: add pm8950 codec
  2026-07-30 17:43 ` [PATCH v6 13/15] ASoC: msm8916-wcd-analog: add pm8950 codec Richard Acayan
@ 2026-07-30 17:59   ` sashiko-bot
  0 siblings, 0 replies; 27+ messages in thread
From: sashiko-bot @ 2026-07-30 17:59 UTC (permalink / raw)
  To: Richard Acayan; +Cc: robh, conor+dt, devicetree

Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:

New issues:
- [High] Missing NULL pointer check for the return value of `of_device_get_match_data()` leads to a kernel panic if the driver is bound via a non-OF mechanism.

Pre-existing issues:
- [High] Interrupt handlers are requested and enabled before the component state they depend on is initialized, leading to a NULL pointer dereference if the interrupt fires early.
- [High] Component removal powers off regulators while threaded IRQ handlers are still active, leading to hardware accesses to a powered-off device.
--

--- Patch [13]: [PATCH v6 13/15] ASoC: msm8916-wcd-analog: add pm8950 codec ---
Note: The format of this review report is altered to provide a free-form summary of findings without directly quoting the original patch code due to recitation restrictions.

commit 16b89870656fc786971dbd432019e6b7585632a2
Author: Adam Skladowski <a39.skl@gmail.com>

ASoC: msm8916-wcd-analog: add pm8950 codec
    
Add regs overrides for PM8950 codec and implement matching reg overrides
via compatible.

In pm8916_wcd_analog_probe(), the code retrieves match data using
of_device_get_match_data() and assigns it to wcd_reg_init_data, which is
then immediately used in a loop condition.

[Severity: High]
Does this code handle cases where the driver might be bound via a non-OF
mechanism? If of_device_get_match_data() returns NULL, the immediate
dereference of wcd_reg_init_data->seq_size will cause a kernel panic. Could
a NULL pointer check be added before accessing the match data?

In pm8916_wcd_analog_spmi_probe(), threaded IRQs are requested using
devm_request_threaded_irq() and unmasked. The ASoC component state
priv->component is initialized later in pm8916_wcd_analog_probe().

[Severity: High]
This isn't a bug introduced by this patch, but can the interrupt handlers
execute before priv->component is properly initialized? If an interrupt fires
early during initialization, pm8916_mbhc_switch_irq_handler() will
dereference the uninitialized priv->component pointer, leading to a crash.
Should the interrupt registration be deferred, or the IRQs kept disabled
until the component probe completes?

In pm8916_wcd_analog_remove(), the regulators are disabled using
regulator_bulk_disable(). The threaded IRQ handlers are tied to the platform
device via devm_request_threaded_irq() and remain active.

[Severity: High]
This is a pre-existing issue, but does this function properly synchronize
or disable the associated threaded IRQ handlers before powering off the
regulators? If an interrupt fires right before the regulators are disabled,
the IRQ thread could wake up and attempt to access the hardware via
snd_soc_component_read() while the device is powered off, potentially
causing a bus timeout or crash. Should the IRQs be explicitly disabled
before turning off the regulators?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260730174353.108023-1-mailingradian@gmail.com?part=13

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

* Re: [PATCH v6 11/15] ASoC: qcom: sm8250: add support for LPI_MI2S_RX_0 and LPI_MI2S_TX_3
  2026-07-30 17:43 ` [PATCH v6 11/15] ASoC: qcom: sm8250: add support for LPI_MI2S_RX_0 and LPI_MI2S_TX_3 Richard Acayan
@ 2026-07-30 18:02   ` sashiko-bot
  0 siblings, 0 replies; 27+ messages in thread
From: sashiko-bot @ 2026-07-30 18:02 UTC (permalink / raw)
  To: Richard Acayan; +Cc: conor+dt, devicetree, robh

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] The machine driver enables sysclk on startup for the new LPI_MI2S DAIs but fails to disable it on shutdown, resulting in a clock and power leak.
- [Medium] Ignored return values from hardware configuration functions `snd_soc_dai_set_sysclk` and `snd_soc_dai_set_fmt`.
--

--- Patch [11]: [PATCH v6 11/15] ASoC: qcom: sm8250: add support for LPI_MI2S_RX_0 and LPI_MI2S_TX_3 ---
commit ed124256581921c49604c5e5d63d1989a91f17c4
Author: Richard Acayan <mailingradian@gmail.com>

ASoC: qcom: sm8250: add support for LPI_MI2S_RX_0 and LPI_MI2S_TX_3

This commit adds support for the LPI_MI2S_RX_0 and LPI_MI2S_TX_3 ports
on SDM660. The new ports are connected to digital and analog WCD codecs
and are initialized using the same logic as the existing ports.

> diff --git a/sound/soc/qcom/sm8250.c b/sound/soc/qcom/sm8250.c
> --- a/sound/soc/qcom/sm8250.c
> +++ b/sound/soc/qcom/sm8250.c
[ ... ]
> @@ -112,6 +112,22 @@ static int sm8250_snd_startup(struct snd_pcm_substream *substream)
>  		snd_soc_dai_set_fmt(cpu_dai, fmt);
>  		snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
>  		break;
> +	case LPI_MI2S_RX_0:
> +		codec_dai_fmt |= SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_I2S;
> +		snd_soc_dai_set_sysclk(cpu_dai,
> +			Q6AFE_LPASS_CLK_ID_INT0_MI2S_IBIT,
> +			MI2S_BCLK_RATE, SNDRV_PCM_STREAM_PLAYBACK);

[Severity: High]
Does this code leak the DSP clock reference? The sysclk is enabled for the
new LPI_MI2S DAIs on stream startup by passing a positive frequency, but
there does not appear to be a corresponding shutdown handler to set the
frequency back to 0. 

This might leave the clock running and prevent the SoC from entering deeper
sleep states.

> +		snd_soc_dai_set_fmt(cpu_dai, fmt);
> +		snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);

[Severity: Medium]
Should the return values of snd_soc_dai_set_sysclk() and
snd_soc_dai_set_fmt() be evaluated? 

Hardware initialization errors in sm8250_snd_startup() will be silently
ignored, which could cause cryptic audio playback or capture failures rather
than a clean initialization error.

> +		break;
> +	case LPI_MI2S_TX_3:
> +		codec_dai_fmt |= SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_I2S;
> +		snd_soc_dai_set_sysclk(cpu_dai,
> +			Q6AFE_LPASS_CLK_ID_INT3_MI2S_IBIT,
> +			MI2S_BCLK_RATE, SNDRV_PCM_STREAM_CAPTURE);
> +		snd_soc_dai_set_fmt(cpu_dai, fmt);
> +		snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
> +		break;
>  	default:
>  		break;
>  	}

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260730174353.108023-1-mailingradian@gmail.com?part=11

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

* Re: [PATCH v6 14/15] ASoC: msm8916-wcd-analog: add pm8953 codec
  2026-07-30 17:43 ` [PATCH v6 14/15] ASoC: msm8916-wcd-analog: add pm8953 codec Richard Acayan
@ 2026-07-30 18:03   ` sashiko-bot
  0 siblings, 0 replies; 27+ messages in thread
From: sashiko-bot @ 2026-07-30 18:03 UTC (permalink / raw)
  To: Richard Acayan; +Cc: conor+dt, devicetree, robh

Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:

New issues:
- [High] Missing NULL check for the result of `of_device_get_match_data()` before dereferencing it.
- [Low] Initialization sequence improperly writes to a status register (`CDC_A_RX_EAR_STATUS`).

Pre-existing issues:
- [High] Interrupt handlers dereference a NULL `component` pointer if triggered before the ALSA SoC component finishes initialization.
--

--- Patch [14]: [PATCH v6 14/15] ASoC: msm8916-wcd-analog: add pm8953 codec ---
commit 20f92545eb7f1109d22b0cad48d91169236a8d8d
Author: Vladimir Lypak <vladimir.lypak@gmail.com>
ASoC: msm8916-wcd-analog: add pm8953 codec

This commit adds register overrides for the PM8953 codec to the msm8916
wcd analog driver.

(Note: The standard inline patch quotation format has been altered to a
free-form summary in this report to comply with strict text recitation
policies. The issues below are presented without quoting the diff.)

[Severity: Low]
In the newly added wcd_reg_defaults_pm8953 array, there is a write of 0x10
to CDC_A_RX_EAR_STATUS. Is this intended? Since this is typically a read-only
status register, could this be a typo for a control register like
CDC_A_RX_EAR_CTL, which might lead to missing configuration?

[Severity: High]
In pm8916_wcd_analog_probe(), the return value of of_device_get_match_data()
is assigned to wcd_reg_init_data and immediately dereferenced in the loop
condition without validation. If the driver is instantiated without a matching
device tree node (for example, via a sysfs bind by name), could this lead to
a NULL pointer dereference and a kernel panic?

[Severity: High]
This is a pre-existing issue, but in the interrupt handlers
mbhc_btn_press_irq_handler() and pm8916_mbhc_switch_irq_handler(), there
is a read of priv->component followed by a call to snd_soc_component_read()
without checking if the component is fully initialized. Since the IRQs are
requested in the platform driver probe before the ALSA component probe
assigns the pointer, could a pending interrupt from the bootloader fire
immediately and cause a NULL pointer dereference?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260730174353.108023-1-mailingradian@gmail.com?part=14

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

* Re: [PATCH v6 15/15] ASoC: msm8916-wcd-analog: add quirk for cajon 2.0
  2026-07-30 17:43 ` [PATCH v6 15/15] ASoC: msm8916-wcd-analog: add quirk for cajon 2.0 Richard Acayan
@ 2026-07-30 18:03   ` sashiko-bot
  0 siblings, 0 replies; 27+ messages in thread
From: sashiko-bot @ 2026-07-30 18:03 UTC (permalink / raw)
  To: Richard Acayan; +Cc: robh, conor+dt, devicetree

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] The 20ms delay and TEST bit clear in `POST_PMD` for HPHL/HPHR PAs execute before the digital codec has powered down, contradicting the hardware requirement and potentially violating hardware constraints.
--

--- Patch [15]: [PATCH v6 15/15] ASoC: msm8916-wcd-analog: add quirk for cajon 2.0 ---
commit 3ee3737216b7e26df5f18202ad771c230e2fa0e3
Author: Richard Acayan <mailingradian@gmail.com>

ASoC: msm8916-wcd-analog: add quirk for cajon 2.0

The codec version CAJON_2_0 on the Snapdragon 670 requires touching the
HPH test registers. Add the quirk so this driver can also support
SDM670.

> diff --git a/sound/soc/codecs/msm8916-wcd-analog.c b/sound/soc/codecs/msm8916-wcd-analog.c
> index b9325290c28d9..87f8a47cc293f 100644
> --- a/sound/soc/codecs/msm8916-wcd-analog.c
> +++ b/sound/soc/codecs/msm8916-wcd-analog.c
[ ... ]
> @@ -705,6 +707,59 @@ static int pm8916_wcd_analog_enable_ear_pa(struct snd_soc_dapm_widget *w,
>  	return 0;
>  }
>  
> +static int pm8916_wcd_analog_enable_hphl_pa(struct snd_soc_dapm_widget *w,
> +					    struct snd_kcontrol *kcontrol,
> +					    int event)
> +{
[ ... ]
> +	switch (event) {
> +	case SND_SOC_DAPM_POST_PMU:
> +		usleep_range(7000, 7100);
> +		snd_soc_component_update_bits(component, CDC_A_RX_HPH_L_TEST,
> +				0x04, 0x04);
> +		break;
> +	case SND_SOC_DAPM_POST_PMD:
> +		/* wait 20 ms after the digital codec has powered down */
> +		msleep(20);
> +		snd_soc_component_update_bits(component, CDC_A_RX_HPH_L_TEST,
> +				0x04, 0x00);
> +		break;

[Severity: High]
Will this POST_PMD event actually wait until after the digital codec has
powered down?

During the DAPM power-down sequence, PGAs are processed (sequence 6) before
Mixers (sequence 7), DACs (sequence 8), and AIFs (sequence 12). Since this
event is attached to the "HPHL PA" PGA widget, the POST_PMD event will execute
immediately after the PA powers down, which is before the digital codec (DACs,
Mixers, AIFs) powers down.

Could this premature delay and test bit clearing cause audible pops or
hardware instability?

> +	}
> +	return 0;
> +}
> +
> +static int pm8916_wcd_analog_enable_hphr_pa(struct snd_soc_dapm_widget *w,
> +					    struct snd_kcontrol *kcontrol,
> +					    int event)
> +{
[ ... ]
> +	switch (event) {
> +	case SND_SOC_DAPM_POST_PMU:
> +		usleep_range(7000, 7100);
> +		snd_soc_component_update_bits(component, CDC_A_RX_HPH_R_TEST,
> +				0x04, 0x04);
> +		break;
> +	case SND_SOC_DAPM_POST_PMD:
> +		msleep(20);
> +		snd_soc_component_update_bits(component, CDC_A_RX_HPH_R_TEST,
> +				0x04, 0x00);
> +		break;

[Severity: High]
Similarly here, does this execute before the digital codec powers down?

Since "HPHR PA" is also a PGA widget, it seems the 20ms sleep and TEST bit
clear will occur while the digital codec is still powered on, just like the
left channel.

> +	}
> +	return 0;
> +}
[ ... ]
> @@ -954,11 +1009,15 @@ static const struct snd_soc_dapm_widget pm8916_wcd_analog_dapm_widgets[] = {
>  	SND_SOC_DAPM_MUX("EAR_S", SND_SOC_NOPM, 0, 0, &ear_mux),
>  	SND_SOC_DAPM_SUPPLY("EAR CP", CDC_A_NCP_EN, 4, 0, NULL, 0),
>  
> -	SND_SOC_DAPM_PGA("HPHL PA", CDC_A_RX_HPH_CNP_EN, 5, 0, NULL, 0),
> +	SND_SOC_DAPM_PGA_E("HPHL PA", CDC_A_RX_HPH_CNP_EN, 5, 0, NULL, 0,
> +			   pm8916_wcd_analog_enable_hphl_pa,
> +			   SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
>  	SND_SOC_DAPM_MUX("HPHL", SND_SOC_NOPM, 0, 0, &hphl_mux),
>  	SND_SOC_DAPM_MIXER("HPHL DAC", CDC_A_RX_HPH_L_PA_DAC_CTL, 3, 0, NULL,
>  			   0),
> -	SND_SOC_DAPM_PGA("HPHR PA", CDC_A_RX_HPH_CNP_EN, 4, 0, NULL, 0),
> +	SND_SOC_DAPM_PGA_E("HPHR PA", CDC_A_RX_HPH_CNP_EN, 4, 0, NULL, 0,
> +			   pm8916_wcd_analog_enable_hphr_pa,
> +			   SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260730174353.108023-1-mailingradian@gmail.com?part=15

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

* Re: [PATCH v6 08/15] ASoC: qdsp6: q6afe-dai: add internal mi2s support
  2026-07-30 17:43 ` [PATCH v6 08/15] ASoC: qdsp6: q6afe-dai: " Richard Acayan
@ 2026-07-30 18:06   ` sashiko-bot
  2026-07-30 22:55   ` Srinivas Kandagatla
  1 sibling, 0 replies; 27+ messages in thread
From: sashiko-bot @ 2026-07-30 18:06 UTC (permalink / raw)
  To: Richard Acayan; +Cc: devicetree, robh, conor+dt

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] Missing DAPM routing entries for LPI MI2S ports in q6routing.c renders them unusable.
--

--- Patch [8]: [PATCH v6 08/15] ASoC: qdsp6: q6afe-dai: add internal mi2s support ---
commit e726403dddb3e85ced40616ddd6f3d6790dddb30
Author: Richard Acayan <mailingradian@gmail.com>

ASoC: qdsp6: q6afe-dai: add internal mi2s support

This commit adds support for internal MI2S ports on q6afe using the existing
LPI MI2S bindings. It introduces the necessary port preparation logic, DAPM
widgets, and DAPM routes for LPI_MI2S_RX_0 through LPI_MI2S_TX_6.

> diff --git a/sound/soc/qcom/qdsp6/q6afe-dai.c b/sound/soc/qcom/qdsp6/q6afe-dai.c
> index a0d21034a6264..920345609d2c8 100644
> --- a/sound/soc/qcom/qdsp6/q6afe-dai.c
> +++ b/sound/soc/qcom/qdsp6/q6afe-dai.c
[ ... ]
> @@ -665,6 +667,21 @@ static const struct snd_soc_dapm_route q6afe_dapm_routes[] = {
>  
>  	/* USB playback AFE port receives data for playback, hence use the RX port */
>  	{"USB Playback", NULL, "USB_RX"},
> +
> +	{"LPI RX0 MI2S Playback", NULL, "LPI_MI2S_RX_0"},
> +	{"LPI_MI2S_TX_0", NULL, "LPI TX0 MI2S Capture"},
> +	{"LPI RX1 MI2S Playback", NULL, "LPI_MI2S_RX_1"},
> +	{"LPI_MI2S_TX_1", NULL, "LPI TX1 MI2S Capture"},
> +	{"LPI RX2 MI2S Playback", NULL, "LPI_MI2S_RX_2"},
> +	{"LPI_MI2S_TX_2", NULL, "LPI TX2 MI2S Capture"},
> +	{"LPI RX3 MI2S Playback", NULL, "LPI_MI2S_RX_3"},
> +	{"LPI_MI2S_TX_3", NULL, "LPI TX3 MI2S Capture"},
> +	{"LPI RX4 MI2S Playback", NULL, "LPI_MI2S_RX_4"},
> +	{"LPI_MI2S_TX_4", NULL, "LPI TX4 MI2S Capture"},
> +	{"LPI RX5 MI2S Playback", NULL, "LPI_MI2S_RX_5"},
> +	{"LPI_MI2S_TX_5", NULL, "LPI TX5 MI2S Capture"},
> +	{"LPI RX6 MI2S Playback", NULL, "LPI_MI2S_RX_6"},
> +	{"LPI_MI2S_TX_6", NULL, "LPI TX6 MI2S Capture"},
>  };

[Severity: High]
Are DAPM routing entries for the new LPI MI2S ports also required in
sound/soc/qcom/qdsp6/q6routing.c?

Looking at how other ports are routed, it seems we might be missing the
audio mixers in msm_qdsp6_widgets (such as an "LPI_MI2S_RX_0 Audio Mixer")
and the Front-End to Back-End mapping in the intercon array.

Without these entries in q6routing.c, will the ASoC core be able to
construct a valid audio path? It appears these newly added Back-End DAIs
might remain completely disconnected from the Front-End MultiMedia streams,
causing attempts to play or capture audio through them to fail.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260730174353.108023-1-mailingradian@gmail.com?part=8

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

* Re: [PATCH v6 06/15] ASoC: qdsp6: q6dsp-lpass-ports: add support for lpi mi2s ports 5-6
  2026-07-30 17:43 ` [PATCH v6 06/15] ASoC: qdsp6: q6dsp-lpass-ports: add support for lpi mi2s ports 5-6 Richard Acayan
@ 2026-07-30 18:15   ` sashiko-bot
  2026-07-30 22:49   ` Srinivas Kandagatla
  1 sibling, 0 replies; 27+ messages in thread
From: sashiko-bot @ 2026-07-30 18:15 UTC (permalink / raw)
  To: Richard Acayan; +Cc: devicetree, robh, conor+dt

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] The newly added LPI MI2S DAIs lack corresponding backend AFE port mappings and configuration handlers, causing DAI probe and stream preparation to unconditionally fail on AFE-based systems like SDM660.
--

--- Patch [6]: [PATCH v6 06/15] ASoC: qdsp6: q6dsp-lpass-ports: add support for lpi mi2s ports 5-6 ---
commit d2dcc25c1d269d302ba0498e0de038f74d01d735
Author: Richard Acayan <mailingradian@gmail.com>

ASoC: qdsp6: q6dsp-lpass-ports: add support for lpi mi2s ports 5-6

This commit adds the extra LPI MI2S ports used for internal MI2S on SDM660.

Link: https://android.googlesource.com/kernel/msm-extra/+/530cffa4cc977a348753831b163eb9d3302b954a/asoc/msm-dai-q6-v2.c#4597

> diff --git a/sound/soc/qcom/qdsp6/q6dsp-lpass-ports.c b/sound/soc/qcom/qdsp6/q6dsp-lpass-ports.c
> index e5cd82f77b552..c3d8116ad5035 100644
> --- a/sound/soc/qcom/qdsp6/q6dsp-lpass-ports.c
> +++ b/sound/soc/qcom/qdsp6/q6dsp-lpass-ports.c
> @@ -553,11 +553,15 @@ static struct snd_soc_dai_driver q6dsp_audio_fe_dais[] = {
>  	Q6AFE_MI2S_RX_DAI("LPI RX2", LPI_MI2S_RX_2),
>  	Q6AFE_MI2S_RX_DAI("LPI RX3", LPI_MI2S_RX_3),
>  	Q6AFE_MI2S_RX_DAI("LPI RX4", LPI_MI2S_RX_4),
> +	Q6AFE_MI2S_RX_DAI("LPI RX5", LPI_MI2S_RX_5),
> +	Q6AFE_MI2S_RX_DAI("LPI RX6", LPI_MI2S_RX_6),
>  	Q6AFE_MI2S_TX_DAI("LPI TX0", LPI_MI2S_TX_0),
>  	Q6AFE_MI2S_TX_DAI("LPI TX1", LPI_MI2S_TX_1),
>  	Q6AFE_MI2S_TX_DAI("LPI TX2", LPI_MI2S_TX_2),
>  	Q6AFE_MI2S_TX_DAI("LPI TX3", LPI_MI2S_TX_3),
>  	Q6AFE_MI2S_TX_DAI("LPI TX4", LPI_MI2S_TX_4),
> +	Q6AFE_MI2S_TX_DAI("LPI TX5", LPI_MI2S_TX_5),
> +	Q6AFE_MI2S_TX_DAI("LPI TX6", LPI_MI2S_TX_6),

[Severity: High]
Will these new ports fail to probe and prepare because they are missing
backend AFE port mappings and configuration handlers?

When the machine driver binds to the LPI MI2S DAIs, q6afe_port_get_from_id()
looks up the port mapping in the static port_maps array in
sound/soc/qcom/qdsp6/q6afe.c.

Because the new LPI_MI2S ports are missing from the port_maps array, the
port_id used for the lookup will be 0 (uninitialized). This causes the
switch statement in q6afe_port_get_from_id() to fall through to the default
error case and return -EINVAL:

sound/soc/qcom/qdsp6/q6afe.c:q6afe_port_get_from_id() {
    ...
    switch (port_id) {
    ...
    default:
        dev_err(dev, "AFE port id not supported %d\n", port_id);
        return ERR_PTR(-EINVAL);
    }
}

Furthermore, q6afe_dai_prepare() and of_q6afe_parse_dai_data() in
sound/soc/qcom/qdsp6/q6afe-dai.c also lack switch cases for the new
ports, which guarantees they will fall back to their default error paths.

Should these ports also be added to the port_maps array and the relevant
switch statements in q6afe.c and q6afe-dai.c?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260730174353.108023-1-mailingradian@gmail.com?part=6

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

* Re: [PATCH v6 07/15] ASoC: qdsp6: q6afe: add internal mi2s support
  2026-07-30 17:43 ` [PATCH v6 07/15] ASoC: qdsp6: q6afe: add internal mi2s support Richard Acayan
@ 2026-07-30 18:21   ` sashiko-bot
  2026-07-30 22:51   ` Srinivas Kandagatla
  1 sibling, 0 replies; 27+ messages in thread
From: sashiko-bot @ 2026-07-30 18:21 UTC (permalink / raw)
  To: Richard Acayan; +Cc: devicetree, conor+dt, robh

Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
- [High] q6afe_dai_prepare() unconditionally fails for LPI_MI2S DAIs due to missing switch cases.
- [High] of_q6afe_parse_dai_data() skips parsing 'qcom,sd-lines' for LPI_MI2S DAIs.
- [High] Missing DAPM widgets and routes for LPI_MI2S DAIs in q6afe-dai.c.
--

--- Patch [7]: [PATCH v6 07/15] ASoC: qdsp6: q6afe: add internal mi2s support ---
commit 29b5c067f4b9a1db3d8b82e2cd046a58a12a3c4e
Author: Richard Acayan <mailingradian@gmail.com>

ASoC: qdsp6: q6afe: add internal mi2s support

This commit adds port mappings for internal MI2S ports found on the
Snapdragon 660. It updates the port_maps array and q6afe_port_get_from_id()
to support LPI_MI2S RX and TX ports.

> diff --git a/sound/soc/qcom/qdsp6/q6afe.c b/sound/soc/qcom/qdsp6/q6afe.c
> index 40237267fda05..1d68a80e8e0c0 100644
> --- a/sound/soc/qcom/qdsp6/q6afe.c
> +++ b/sound/soc/qcom/qdsp6/q6afe.c
[ ... ]
> @@ -931,6 +945,34 @@ static struct afe_port_map port_maps[AFE_PORT_MAX] = {
>  	[RX_CODEC_DMA_RX_7] = { AFE_PORT_ID_RX_CODEC_DMA_RX_7,
>  				RX_CODEC_DMA_RX_7, 1, 1},
>  	[USB_RX] = { AFE_PORT_ID_USB_RX, USB_RX, 1, 1},
> +	[LPI_MI2S_RX_0] = { AFE_PORT_ID_INT0_MI2S_RX,
> +				LPI_MI2S_RX_0, 1, 1},

[Severity: High]
Does this code also require updates to sound/soc/qcom/qdsp6/q6afe-dai.c to
function correctly?

Looking at q6afe_dai_prepare(), LPI_MI2S ports are missing from the switch
statement:

sound/soc/qcom/qdsp6/q6afe-dai.c:q6afe_dai_prepare() {
    switch (dai->id) {
    ...
    case SENARY_MI2S_RX ... SENARY_MI2S_TX:
    case QUINARY_MI2S_RX ... QUINARY_MI2S_TX:
    case PRIMARY_MI2S_RX ... QUATERNARY_MI2S_TX:
        rc = q6afe_i2s_port_prepare(dai_data->port[dai->id],
                                   &dai_data->port_config[dai->id].i2s_cfg);
        ...
        break;
    ...
    default:
        return -EINVAL;
    }
}

Will this cause ALSA stream preparation to fail unconditionally with -EINVAL
for these new DAIs?

> +	[LPI_MI2S_TX_0] = { AFE_PORT_ID_INT0_MI2S_TX,
> +				LPI_MI2S_TX_0, 0, 1},

[Severity: High]
Additionally, it appears of_q6afe_parse_dai_data() skips parsing the
"qcom,sd-lines" devicetree property for LPI_MI2S DAIs because they are omitted
from its switch statement:

sound/soc/qcom/qdsp6/q6afe-dai.c:of_q6afe_parse_dai_data() {
    switch (id) {
    /* MI2S specific properties */
    case SENARY_MI2S_RX ... SENARY_MI2S_TX:
    case QUINARY_MI2S_RX ... QUINARY_MI2S_TX:
    case PRIMARY_MI2S_RX ... QUATERNARY_MI2S_TX:
        priv = &data->priv[id];
        ret = of_property_read_variable_u32_array(node,
                                        "qcom,sd-lines",
                                        lines, 0,
                                        Q6AFE_MAX_MI2S_LINES);
    ...
}

Could this cause sd_line_mask to remain 0 and lead to q6afe_i2s_port_prepare()
returning -EINVAL when trying to use these lines?

> +	[LPI_MI2S_RX_1] = { AFE_PORT_ID_INT1_MI2S_RX,
> +				LPI_MI2S_RX_1, 1, 1},

[Severity: High]
Finally, q6afe_dai_widgets[] in sound/soc/qcom/qdsp6/q6afe-dai.c lacks
SND_SOC_DAPM_AIF_IN and SND_SOC_DAPM_AIF_OUT entries for LPI_MI2S_RX_0 through
LPI_MI2S_TX_6.

Without these DAPM widgets, can the new DAIs be properly connected to audio
frontends or powered via DAPM?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260730174353.108023-1-mailingradian@gmail.com?part=7

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

* Re: [PATCH v6 06/15] ASoC: qdsp6: q6dsp-lpass-ports: add support for lpi mi2s ports 5-6
  2026-07-30 17:43 ` [PATCH v6 06/15] ASoC: qdsp6: q6dsp-lpass-ports: add support for lpi mi2s ports 5-6 Richard Acayan
  2026-07-30 18:15   ` sashiko-bot
@ 2026-07-30 22:49   ` Srinivas Kandagatla
  1 sibling, 0 replies; 27+ messages in thread
From: Srinivas Kandagatla @ 2026-07-30 22:49 UTC (permalink / raw)
  To: Richard Acayan, Srinivas Kandagatla, Liam Girdwood, Mark Brown,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela,
	Takashi Iwai, Konrad Dybcio, linux-sound, linux-arm-msm,
	devicetree
  Cc: Nickolay Goppen, Adam Skladowski, Vladimir Lypak,
	Dmitry Baryshkov, Mohammad Rafi Shaik, Johan Hovold, Kees Cook,
	Charles Keepax, Kuninori Morimoto



On 7/30/26 6:43 PM, Richard Acayan wrote:
> Add the extra LPI MI2S ports used for internal MI2S on SDM660.
> 
> Link: https://android.googlesource.com/kernel/msm-extra/+/530cffa4cc977a348753831b163eb9d3302b954a/asoc/msm-dai-q6-v2.c#4597
> Signed-off-by: Richard Acayan <mailingradian@gmail.com>
> ---

lgtm,

Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>

--srini
>  sound/soc/qcom/common.h                  | 2 +-
>  sound/soc/qcom/qdsp6/q6dsp-lpass-ports.c | 5 +++++
>  2 files changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/sound/soc/qcom/common.h b/sound/soc/qcom/common.h
> index ee6662885593..48b114eb46a5 100644
> --- a/sound/soc/qcom/common.h
> +++ b/sound/soc/qcom/common.h
> @@ -7,7 +7,7 @@
>  #include <dt-bindings/sound/qcom,q6afe.h>
>  #include <sound/soc.h>
>  
> -#define LPASS_MAX_PORT			(SENARY_MI2S_TX + 1)
> +#define LPASS_MAX_PORT			(LPI_MI2S_TX_6 + 1)
>  
>  int qcom_snd_parse_of(struct snd_soc_card *card);
>  int qcom_snd_wcd_jack_setup(struct snd_soc_pcm_runtime *rtd,
> diff --git a/sound/soc/qcom/qdsp6/q6dsp-lpass-ports.c b/sound/soc/qcom/qdsp6/q6dsp-lpass-ports.c
> index e5cd82f77b55..c3d8116ad503 100644
> --- a/sound/soc/qcom/qdsp6/q6dsp-lpass-ports.c
> +++ b/sound/soc/qcom/qdsp6/q6dsp-lpass-ports.c
> @@ -553,11 +553,15 @@ static struct snd_soc_dai_driver q6dsp_audio_fe_dais[] = {
>  	Q6AFE_MI2S_RX_DAI("LPI RX2", LPI_MI2S_RX_2),
>  	Q6AFE_MI2S_RX_DAI("LPI RX3", LPI_MI2S_RX_3),
>  	Q6AFE_MI2S_RX_DAI("LPI RX4", LPI_MI2S_RX_4),
> +	Q6AFE_MI2S_RX_DAI("LPI RX5", LPI_MI2S_RX_5),
> +	Q6AFE_MI2S_RX_DAI("LPI RX6", LPI_MI2S_RX_6),
>  	Q6AFE_MI2S_TX_DAI("LPI TX0", LPI_MI2S_TX_0),
>  	Q6AFE_MI2S_TX_DAI("LPI TX1", LPI_MI2S_TX_1),
>  	Q6AFE_MI2S_TX_DAI("LPI TX2", LPI_MI2S_TX_2),
>  	Q6AFE_MI2S_TX_DAI("LPI TX3", LPI_MI2S_TX_3),
>  	Q6AFE_MI2S_TX_DAI("LPI TX4", LPI_MI2S_TX_4),
> +	Q6AFE_MI2S_TX_DAI("LPI TX5", LPI_MI2S_TX_5),
> +	Q6AFE_MI2S_TX_DAI("LPI TX6", LPI_MI2S_TX_6),
>  	Q6AFE_TDM_PB_DAI("Primary", 0, PRIMARY_TDM_RX_0),
>  	Q6AFE_TDM_PB_DAI("Primary", 1, PRIMARY_TDM_RX_1),
>  	Q6AFE_TDM_PB_DAI("Primary", 2, PRIMARY_TDM_RX_2),
> @@ -712,6 +716,7 @@ struct snd_soc_dai_driver *q6dsp_audio_ports_set_config(struct device *dev,
>  		case QUINARY_MI2S_RX ... QUINARY_MI2S_TX:
>  		case PRIMARY_MI2S_RX ... QUATERNARY_MI2S_TX:
>  		case LPI_MI2S_RX_0 ... LPI_MI2S_TX_4:
> +		case LPI_MI2S_RX_5 ... LPI_MI2S_TX_6:
>  			q6dsp_audio_fe_dais[i].ops = cfg->q6i2s_ops;
>  			break;
>  		case PRIMARY_TDM_RX_0 ... QUINARY_TDM_TX_7:


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

* Re: [PATCH v6 07/15] ASoC: qdsp6: q6afe: add internal mi2s support
  2026-07-30 17:43 ` [PATCH v6 07/15] ASoC: qdsp6: q6afe: add internal mi2s support Richard Acayan
  2026-07-30 18:21   ` sashiko-bot
@ 2026-07-30 22:51   ` Srinivas Kandagatla
  1 sibling, 0 replies; 27+ messages in thread
From: Srinivas Kandagatla @ 2026-07-30 22:51 UTC (permalink / raw)
  To: Richard Acayan, Srinivas Kandagatla, Liam Girdwood, Mark Brown,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela,
	Takashi Iwai, Konrad Dybcio, linux-sound, linux-arm-msm,
	devicetree
  Cc: Nickolay Goppen, Adam Skladowski, Vladimir Lypak,
	Dmitry Baryshkov, Mohammad Rafi Shaik, Johan Hovold, Kees Cook,
	Charles Keepax, Kuninori Morimoto



On 7/30/26 6:43 PM, Richard Acayan wrote:
> The bindings for LPI MI2S ports, originally exclusive to q6apm, can be
> used for internal MI2S ports on q6afe. Add the port mappings for
> internal MI2S, found on the Snapdragon 660 internal sound card.
> 
> Signed-off-by: Richard Acayan <mailingradian@gmail.com>
> ---
lgtm,

Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>

--srini

>  sound/soc/qcom/qdsp6/q6afe.c | 56 ++++++++++++++++++++++++++++++++++++
>  1 file changed, 56 insertions(+)
> 
> diff --git a/sound/soc/qcom/qdsp6/q6afe.c b/sound/soc/qcom/qdsp6/q6afe.c
> index 40237267fda0..1d68a80e8e0c 100644
> --- a/sound/soc/qcom/qdsp6/q6afe.c
> +++ b/sound/soc/qcom/qdsp6/q6afe.c
> @@ -132,6 +132,20 @@
>  #define AFE_PORT_ID_QUINARY_MI2S_TX	    0x1017
>  #define AFE_PORT_ID_SENARY_MI2S_RX          0x1018
>  #define AFE_PORT_ID_SENARY_MI2S_TX          0x1019
> +#define AFE_PORT_ID_INT0_MI2S_RX	    0x102e
> +#define AFE_PORT_ID_INT0_MI2S_TX	    0x102f
> +#define AFE_PORT_ID_INT1_MI2S_RX	    0x1030
> +#define AFE_PORT_ID_INT1_MI2S_TX	    0x1031
> +#define AFE_PORT_ID_INT2_MI2S_RX	    0x1032
> +#define AFE_PORT_ID_INT2_MI2S_TX	    0x1033
> +#define AFE_PORT_ID_INT3_MI2S_RX	    0x1034
> +#define AFE_PORT_ID_INT3_MI2S_TX	    0x1035
> +#define AFE_PORT_ID_INT4_MI2S_RX	    0x1036
> +#define AFE_PORT_ID_INT4_MI2S_TX	    0x1037
> +#define AFE_PORT_ID_INT5_MI2S_RX	    0x1038
> +#define AFE_PORT_ID_INT5_MI2S_TX	    0x1039
> +#define AFE_PORT_ID_INT6_MI2S_RX	    0x103a
> +#define AFE_PORT_ID_INT6_MI2S_TX	    0x103b
>  
>  /* Start of the range of port IDs for TDM devices. */
>  #define AFE_PORT_ID_TDM_PORT_RANGE_START	0x9000
> @@ -931,6 +945,34 @@ static struct afe_port_map port_maps[AFE_PORT_MAX] = {
>  	[RX_CODEC_DMA_RX_7] = { AFE_PORT_ID_RX_CODEC_DMA_RX_7,
>  				RX_CODEC_DMA_RX_7, 1, 1},
>  	[USB_RX] = { AFE_PORT_ID_USB_RX, USB_RX, 1, 1},
> +	[LPI_MI2S_RX_0] = { AFE_PORT_ID_INT0_MI2S_RX,
> +				LPI_MI2S_RX_0, 1, 1},
> +	[LPI_MI2S_TX_0] = { AFE_PORT_ID_INT0_MI2S_TX,
> +				LPI_MI2S_TX_0, 0, 1},
> +	[LPI_MI2S_RX_1] = { AFE_PORT_ID_INT1_MI2S_RX,
> +				LPI_MI2S_RX_1, 1, 1},
> +	[LPI_MI2S_TX_1] = { AFE_PORT_ID_INT1_MI2S_TX,
> +				LPI_MI2S_TX_1, 0, 1},
> +	[LPI_MI2S_RX_2] = { AFE_PORT_ID_INT2_MI2S_RX,
> +				LPI_MI2S_RX_2, 1, 1},
> +	[LPI_MI2S_TX_2] = { AFE_PORT_ID_INT2_MI2S_TX,
> +				LPI_MI2S_TX_2, 0, 1},
> +	[LPI_MI2S_RX_3] = { AFE_PORT_ID_INT3_MI2S_RX,
> +				LPI_MI2S_RX_3, 1, 1},
> +	[LPI_MI2S_TX_3] = { AFE_PORT_ID_INT3_MI2S_TX,
> +				LPI_MI2S_TX_3, 0, 1},
> +	[LPI_MI2S_RX_4] = { AFE_PORT_ID_INT4_MI2S_RX,
> +				LPI_MI2S_RX_4, 1, 1},
> +	[LPI_MI2S_TX_4] = { AFE_PORT_ID_INT4_MI2S_TX,
> +				LPI_MI2S_TX_4, 0, 1},
> +	[LPI_MI2S_RX_5] = { AFE_PORT_ID_INT5_MI2S_RX,
> +				LPI_MI2S_RX_5, 1, 1},
> +	[LPI_MI2S_TX_5] = { AFE_PORT_ID_INT5_MI2S_TX,
> +				LPI_MI2S_TX_5, 0, 1},
> +	[LPI_MI2S_RX_6] = { AFE_PORT_ID_INT6_MI2S_RX,
> +				LPI_MI2S_RX_6, 1, 1},
> +	[LPI_MI2S_TX_6] = { AFE_PORT_ID_INT6_MI2S_TX,
> +				LPI_MI2S_TX_6, 0, 1},
>  };
>  
>  static void q6afe_port_free(struct kref *ref)
> @@ -1785,6 +1827,20 @@ struct q6afe_port *q6afe_port_get_from_id(struct device *dev, int id)
>  	case AFE_PORT_ID_QUINARY_MI2S_TX:
>  	case AFE_PORT_ID_SENARY_MI2S_RX:
>  	case AFE_PORT_ID_SENARY_MI2S_TX:
> +	case AFE_PORT_ID_INT0_MI2S_RX:
> +	case AFE_PORT_ID_INT0_MI2S_TX:
> +	case AFE_PORT_ID_INT1_MI2S_RX:
> +	case AFE_PORT_ID_INT1_MI2S_TX:
> +	case AFE_PORT_ID_INT2_MI2S_RX:
> +	case AFE_PORT_ID_INT2_MI2S_TX:
> +	case AFE_PORT_ID_INT3_MI2S_RX:
> +	case AFE_PORT_ID_INT3_MI2S_TX:
> +	case AFE_PORT_ID_INT4_MI2S_RX:
> +	case AFE_PORT_ID_INT4_MI2S_TX:
> +	case AFE_PORT_ID_INT5_MI2S_RX:
> +	case AFE_PORT_ID_INT5_MI2S_TX:
> +	case AFE_PORT_ID_INT6_MI2S_RX:
> +	case AFE_PORT_ID_INT6_MI2S_TX:
>  		cfg_type = AFE_PARAM_ID_I2S_CONFIG;
>  		break;
>  	case AFE_PORT_ID_PRIMARY_TDM_RX ... AFE_PORT_ID_QUINARY_TDM_TX_7:


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

* Re: [PATCH v6 08/15] ASoC: qdsp6: q6afe-dai: add internal mi2s support
  2026-07-30 17:43 ` [PATCH v6 08/15] ASoC: qdsp6: q6afe-dai: " Richard Acayan
  2026-07-30 18:06   ` sashiko-bot
@ 2026-07-30 22:55   ` Srinivas Kandagatla
  1 sibling, 0 replies; 27+ messages in thread
From: Srinivas Kandagatla @ 2026-07-30 22:55 UTC (permalink / raw)
  To: Richard Acayan, Srinivas Kandagatla, Liam Girdwood, Mark Brown,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela,
	Takashi Iwai, Konrad Dybcio, linux-sound, linux-arm-msm,
	devicetree
  Cc: Nickolay Goppen, Adam Skladowski, Vladimir Lypak,
	Dmitry Baryshkov, Mohammad Rafi Shaik, Johan Hovold, Kees Cook,
	Charles Keepax, Kuninori Morimoto



On 7/30/26 6:43 PM, Richard Acayan wrote:
> The bindings for LPI MI2S ports, originally exclusive to q6apm, can be
> used for internal MI2S ports on q6afe. Add the internal MI2S ports found
> on the SDM660 internal sound card using the LPI MI2S bindings.
> 
> Signed-off-by: Richard Acayan <mailingradian@gmail.com>
> ---

Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>

--srini

>  sound/soc/qcom/qdsp6/q6afe-dai.c | 48 ++++++++++++++++++++++++++++++++
>  1 file changed, 48 insertions(+)
> 
> diff --git a/sound/soc/qcom/qdsp6/q6afe-dai.c b/sound/soc/qcom/qdsp6/q6afe-dai.c
> index a0d21034a626..920345609d2c 100644
> --- a/sound/soc/qcom/qdsp6/q6afe-dai.c
> +++ b/sound/soc/qcom/qdsp6/q6afe-dai.c
> @@ -412,6 +412,8 @@ static int q6afe_dai_prepare(struct snd_pcm_substream *substream,
>  	case SENARY_MI2S_RX ... SENARY_MI2S_TX:
>  	case QUINARY_MI2S_RX ... QUINARY_MI2S_TX:
>  	case PRIMARY_MI2S_RX ... QUATERNARY_MI2S_TX:
> +	case LPI_MI2S_RX_0 ... LPI_MI2S_TX_4:
> +	case LPI_MI2S_RX_5 ... LPI_MI2S_TX_6:
>  		rc = q6afe_i2s_port_prepare(dai_data->port[dai->id],
>  			       &dai_data->port_config[dai->id].i2s_cfg);
>  		if (rc < 0) {
> @@ -665,6 +667,21 @@ static const struct snd_soc_dapm_route q6afe_dapm_routes[] = {
>  
>  	/* USB playback AFE port receives data for playback, hence use the RX port */
>  	{"USB Playback", NULL, "USB_RX"},
> +
> +	{"LPI RX0 MI2S Playback", NULL, "LPI_MI2S_RX_0"},
> +	{"LPI_MI2S_TX_0", NULL, "LPI TX0 MI2S Capture"},
> +	{"LPI RX1 MI2S Playback", NULL, "LPI_MI2S_RX_1"},
> +	{"LPI_MI2S_TX_1", NULL, "LPI TX1 MI2S Capture"},
> +	{"LPI RX2 MI2S Playback", NULL, "LPI_MI2S_RX_2"},
> +	{"LPI_MI2S_TX_2", NULL, "LPI TX2 MI2S Capture"},
> +	{"LPI RX3 MI2S Playback", NULL, "LPI_MI2S_RX_3"},
> +	{"LPI_MI2S_TX_3", NULL, "LPI TX3 MI2S Capture"},
> +	{"LPI RX4 MI2S Playback", NULL, "LPI_MI2S_RX_4"},
> +	{"LPI_MI2S_TX_4", NULL, "LPI TX4 MI2S Capture"},
> +	{"LPI RX5 MI2S Playback", NULL, "LPI_MI2S_RX_5"},
> +	{"LPI_MI2S_TX_5", NULL, "LPI TX5 MI2S Capture"},
> +	{"LPI RX6 MI2S Playback", NULL, "LPI_MI2S_RX_6"},
> +	{"LPI_MI2S_TX_6", NULL, "LPI TX6 MI2S Capture"},
>  };
>  
>  static int msm_dai_q6_dai_probe(struct snd_soc_dai *dai)
> @@ -1011,6 +1028,35 @@ static const struct snd_soc_dapm_widget q6afe_dai_widgets[] = {
>  		0, SND_SOC_NOPM, 0, 0),
>  
>  	SND_SOC_DAPM_AIF_IN("USB_RX", NULL, 0, SND_SOC_NOPM, 0, 0),
> +
> +	SND_SOC_DAPM_AIF_IN("LPI_MI2S_RX_0", NULL,
> +		0, SND_SOC_NOPM, 0, 0),
> +	SND_SOC_DAPM_AIF_OUT("LPI_MI2S_TX_0", NULL,
> +		0, SND_SOC_NOPM, 0, 0),
> +	SND_SOC_DAPM_AIF_IN("LPI_MI2S_RX_1", NULL,
> +		0, SND_SOC_NOPM, 0, 0),
> +	SND_SOC_DAPM_AIF_OUT("LPI_MI2S_TX_1", NULL,
> +		0, SND_SOC_NOPM, 0, 0),
> +	SND_SOC_DAPM_AIF_IN("LPI_MI2S_RX_2", NULL,
> +		0, SND_SOC_NOPM, 0, 0),
> +	SND_SOC_DAPM_AIF_OUT("LPI_MI2S_TX_2", NULL,
> +		0, SND_SOC_NOPM, 0, 0),
> +	SND_SOC_DAPM_AIF_IN("LPI_MI2S_RX_3", NULL,
> +		0, SND_SOC_NOPM, 0, 0),
> +	SND_SOC_DAPM_AIF_OUT("LPI_MI2S_TX_3", NULL,
> +		0, SND_SOC_NOPM, 0, 0),
> +	SND_SOC_DAPM_AIF_IN("LPI_MI2S_RX_4", NULL,
> +		0, SND_SOC_NOPM, 0, 0),
> +	SND_SOC_DAPM_AIF_OUT("LPI_MI2S_TX_4", NULL,
> +		0, SND_SOC_NOPM, 0, 0),
> +	SND_SOC_DAPM_AIF_IN("LPI_MI2S_RX_5", NULL,
> +		0, SND_SOC_NOPM, 0, 0),
> +	SND_SOC_DAPM_AIF_OUT("LPI_MI2S_TX_5", NULL,
> +		0, SND_SOC_NOPM, 0, 0),
> +	SND_SOC_DAPM_AIF_IN("LPI_MI2S_RX_6", NULL,
> +		0, SND_SOC_NOPM, 0, 0),
> +	SND_SOC_DAPM_AIF_OUT("LPI_MI2S_TX_6", NULL,
> +		0, SND_SOC_NOPM, 0, 0),
>  };
>  
>  static const struct snd_soc_component_driver q6afe_dai_component = {
> @@ -1045,6 +1091,8 @@ static void of_q6afe_parse_dai_data(struct device *dev,
>  		case SENARY_MI2S_RX ... SENARY_MI2S_TX:
>  		case QUINARY_MI2S_RX ... QUINARY_MI2S_TX:
>  		case PRIMARY_MI2S_RX ... QUATERNARY_MI2S_TX:
> +		case LPI_MI2S_RX_0 ... LPI_MI2S_TX_4:
> +		case LPI_MI2S_RX_5 ... LPI_MI2S_TX_6:
>  			priv = &data->priv[id];
>  			ret = of_property_read_variable_u32_array(node,
>  							"qcom,sd-lines",


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

* Re: [PATCH v6 09/15] ASoC: qdsp6: q6routing: add lpi mi2s support
  2026-07-30 17:43 ` [PATCH v6 09/15] ASoC: qdsp6: q6routing: add lpi " Richard Acayan
@ 2026-07-30 22:57   ` Srinivas Kandagatla
  0 siblings, 0 replies; 27+ messages in thread
From: Srinivas Kandagatla @ 2026-07-30 22:57 UTC (permalink / raw)
  To: Richard Acayan, Srinivas Kandagatla, Liam Girdwood, Mark Brown,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela,
	Takashi Iwai, Konrad Dybcio, linux-sound, linux-arm-msm,
	devicetree
  Cc: Nickolay Goppen, Adam Skladowski, Vladimir Lypak,
	Dmitry Baryshkov, Mohammad Rafi Shaik, Johan Hovold, Kees Cook,
	Charles Keepax, Kuninori Morimoto



On 7/30/26 6:43 PM, Richard Acayan wrote:
> Add the ASM-AFE routing for LPI MI2S ports which represent internal MI2S
> ports on SDM660.
> 
> Signed-off-by: Richard Acayan <mailingradian@gmail.com>
> ---

Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>

--srini
>  sound/soc/qcom/qdsp6/q6routing.c | 78 +++++++++++++++++++++++++++++++-
>  1 file changed, 77 insertions(+), 1 deletion(-)
> 
> diff --git a/sound/soc/qcom/qdsp6/q6routing.c b/sound/soc/qcom/qdsp6/q6routing.c
> index 7386226046fa..d076c99f197f 100644
> --- a/sound/soc/qcom/qdsp6/q6routing.c
> +++ b/sound/soc/qcom/qdsp6/q6routing.c
> @@ -127,7 +127,14 @@
>  	{ mix_name, "TX_CODEC_DMA_TX_2", "TX_CODEC_DMA_TX_2"},	\
>  	{ mix_name, "TX_CODEC_DMA_TX_3", "TX_CODEC_DMA_TX_3"},	\
>  	{ mix_name, "TX_CODEC_DMA_TX_4", "TX_CODEC_DMA_TX_4"},	\
> -	{ mix_name, "TX_CODEC_DMA_TX_5", "TX_CODEC_DMA_TX_5"}
> +	{ mix_name, "TX_CODEC_DMA_TX_5", "TX_CODEC_DMA_TX_5"},	\
> +	{ mix_name, "LPI_MI2S_TX_0", "LPI_MI2S_TX_0" },		\
> +	{ mix_name, "LPI_MI2S_TX_1", "LPI_MI2S_TX_1" },		\
> +	{ mix_name, "LPI_MI2S_TX_2", "LPI_MI2S_TX_2" },		\
> +	{ mix_name, "LPI_MI2S_TX_3", "LPI_MI2S_TX_3" },		\
> +	{ mix_name, "LPI_MI2S_TX_4", "LPI_MI2S_TX_4" },		\
> +	{ mix_name, "LPI_MI2S_TX_5", "LPI_MI2S_TX_5" },		\
> +	{ mix_name, "LPI_MI2S_TX_6", "LPI_MI2S_TX_6" }
>  
>  #define Q6ROUTING_TX_MIXERS(id)						\
>  	SOC_SINGLE_EXT("PRI_MI2S_TX", PRIMARY_MI2S_TX,			\
> @@ -320,6 +327,27 @@
>  		id, 1, 0, msm_routing_get_audio_mixer,			\
>  		msm_routing_put_audio_mixer),				\
>  	SOC_SINGLE_EXT("TX_CODEC_DMA_TX_5", TX_CODEC_DMA_TX_5,		\
> +		id, 1, 0, msm_routing_get_audio_mixer,			\
> +		msm_routing_put_audio_mixer),				\
> +	SOC_SINGLE_EXT("LPI_MI2S_TX_0", LPI_MI2S_TX_0,			\
> +		id, 1, 0, msm_routing_get_audio_mixer,			\
> +		msm_routing_put_audio_mixer),				\
> +	SOC_SINGLE_EXT("LPI_MI2S_TX_1", LPI_MI2S_TX_1,			\
> +		id, 1, 0, msm_routing_get_audio_mixer,			\
> +		msm_routing_put_audio_mixer),				\
> +	SOC_SINGLE_EXT("LPI_MI2S_TX_2", LPI_MI2S_TX_2,			\
> +		id, 1, 0, msm_routing_get_audio_mixer,			\
> +		msm_routing_put_audio_mixer),				\
> +	SOC_SINGLE_EXT("LPI_MI2S_TX_3", LPI_MI2S_TX_3,			\
> +		id, 1, 0, msm_routing_get_audio_mixer,			\
> +		msm_routing_put_audio_mixer),				\
> +	SOC_SINGLE_EXT("LPI_MI2S_TX_4", LPI_MI2S_TX_4,			\
> +		id, 1, 0, msm_routing_get_audio_mixer,			\
> +		msm_routing_put_audio_mixer),				\
> +	SOC_SINGLE_EXT("LPI_MI2S_TX_5", LPI_MI2S_TX_5,			\
> +		id, 1, 0, msm_routing_get_audio_mixer,			\
> +		msm_routing_put_audio_mixer),				\
> +	SOC_SINGLE_EXT("LPI_MI2S_TX_6", LPI_MI2S_TX_6,			\
>  		id, 1, 0, msm_routing_get_audio_mixer,			\
>  		msm_routing_put_audio_mixer),
>  
> @@ -709,6 +737,26 @@ static const struct snd_kcontrol_new rxcodec_dma_rx_6_mixer_controls[] = {
>  static const struct snd_kcontrol_new rx_codec_dma_rx_7_mixer_controls[] = {
>  	Q6ROUTING_RX_MIXERS(RX_CODEC_DMA_RX_7) };
>  
> +static const struct snd_kcontrol_new lpi_mi2s_rx_0_mixer_controls[] = {
> +	Q6ROUTING_RX_MIXERS(LPI_MI2S_RX_0) };
> +
> +static const struct snd_kcontrol_new lpi_mi2s_rx_1_mixer_controls[] = {
> +	Q6ROUTING_RX_MIXERS(LPI_MI2S_RX_1) };
> +
> +static const struct snd_kcontrol_new lpi_mi2s_rx_2_mixer_controls[] = {
> +	Q6ROUTING_RX_MIXERS(LPI_MI2S_RX_2) };
> +
> +static const struct snd_kcontrol_new lpi_mi2s_rx_3_mixer_controls[] = {
> +	Q6ROUTING_RX_MIXERS(LPI_MI2S_RX_3) };
> +
> +static const struct snd_kcontrol_new lpi_mi2s_rx_4_mixer_controls[] = {
> +	Q6ROUTING_RX_MIXERS(LPI_MI2S_RX_4) };
> +
> +static const struct snd_kcontrol_new lpi_mi2s_rx_5_mixer_controls[] = {
> +	Q6ROUTING_RX_MIXERS(LPI_MI2S_RX_5) };
> +
> +static const struct snd_kcontrol_new lpi_mi2s_rx_6_mixer_controls[] = {
> +	Q6ROUTING_RX_MIXERS(LPI_MI2S_RX_6) };
>  
>  static const struct snd_kcontrol_new mmul1_mixer_controls[] = {
>  	Q6ROUTING_TX_MIXERS(MSM_FRONTEND_DAI_MULTIMEDIA1) };
> @@ -938,6 +986,27 @@ static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = {
>  	SND_SOC_DAPM_MIXER("USB_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
>  			   usb_rx_mixer_controls,
>  			   ARRAY_SIZE(usb_rx_mixer_controls)),
> +	SND_SOC_DAPM_MIXER("LPI_MI2S_RX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
> +		lpi_mi2s_rx_0_mixer_controls,
> +		ARRAY_SIZE(lpi_mi2s_rx_0_mixer_controls)),
> +	SND_SOC_DAPM_MIXER("LPI_MI2S_RX_1 Audio Mixer", SND_SOC_NOPM, 0, 0,
> +		lpi_mi2s_rx_1_mixer_controls,
> +		ARRAY_SIZE(lpi_mi2s_rx_1_mixer_controls)),
> +	SND_SOC_DAPM_MIXER("LPI_MI2S_RX_2 Audio Mixer", SND_SOC_NOPM, 0, 0,
> +		lpi_mi2s_rx_2_mixer_controls,
> +		ARRAY_SIZE(lpi_mi2s_rx_2_mixer_controls)),
> +	SND_SOC_DAPM_MIXER("LPI_MI2S_RX_3 Audio Mixer", SND_SOC_NOPM, 0, 0,
> +		lpi_mi2s_rx_3_mixer_controls,
> +		ARRAY_SIZE(lpi_mi2s_rx_3_mixer_controls)),
> +	SND_SOC_DAPM_MIXER("LPI_MI2S_RX_4 Audio Mixer", SND_SOC_NOPM, 0, 0,
> +		lpi_mi2s_rx_4_mixer_controls,
> +		ARRAY_SIZE(lpi_mi2s_rx_4_mixer_controls)),
> +	SND_SOC_DAPM_MIXER("LPI_MI2S_RX_5 Audio Mixer", SND_SOC_NOPM, 0, 0,
> +		lpi_mi2s_rx_5_mixer_controls,
> +		ARRAY_SIZE(lpi_mi2s_rx_5_mixer_controls)),
> +	SND_SOC_DAPM_MIXER("LPI_MI2S_RX_6 Audio Mixer", SND_SOC_NOPM, 0, 0,
> +		lpi_mi2s_rx_6_mixer_controls,
> +		ARRAY_SIZE(lpi_mi2s_rx_6_mixer_controls)),
>  	SND_SOC_DAPM_MIXER("MultiMedia1 Mixer", SND_SOC_NOPM, 0, 0,
>  		mmul1_mixer_controls, ARRAY_SIZE(mmul1_mixer_controls)),
>  	SND_SOC_DAPM_MIXER("MultiMedia2 Mixer", SND_SOC_NOPM, 0, 0,
> @@ -1031,6 +1100,13 @@ static const struct snd_soc_dapm_route intercon[] = {
>  	Q6ROUTING_RX_DAPM_ROUTE("RX_CODEC_DMA_RX_6 Audio Mixer", "RX_CODEC_DMA_RX_6"),
>  	Q6ROUTING_RX_DAPM_ROUTE("RX_CODEC_DMA_RX_7 Audio Mixer", "RX_CODEC_DMA_RX_7"),
>  	Q6ROUTING_RX_DAPM_ROUTE("USB_RX Audio Mixer", "USB_RX"),
> +	Q6ROUTING_RX_DAPM_ROUTE("LPI_MI2S_RX_0 Audio Mixer", "LPI_MI2S_RX_0"),
> +	Q6ROUTING_RX_DAPM_ROUTE("LPI_MI2S_RX_1 Audio Mixer", "LPI_MI2S_RX_1"),
> +	Q6ROUTING_RX_DAPM_ROUTE("LPI_MI2S_RX_2 Audio Mixer", "LPI_MI2S_RX_2"),
> +	Q6ROUTING_RX_DAPM_ROUTE("LPI_MI2S_RX_3 Audio Mixer", "LPI_MI2S_RX_3"),
> +	Q6ROUTING_RX_DAPM_ROUTE("LPI_MI2S_RX_4 Audio Mixer", "LPI_MI2S_RX_4"),
> +	Q6ROUTING_RX_DAPM_ROUTE("LPI_MI2S_RX_5 Audio Mixer", "LPI_MI2S_RX_5"),
> +	Q6ROUTING_RX_DAPM_ROUTE("LPI_MI2S_RX_6 Audio Mixer", "LPI_MI2S_RX_6"),
>  	Q6ROUTING_TX_DAPM_ROUTE("MultiMedia1 Mixer"),
>  	Q6ROUTING_TX_DAPM_ROUTE("MultiMedia2 Mixer"),
>  	Q6ROUTING_TX_DAPM_ROUTE("MultiMedia3 Mixer"),


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

end of thread, other threads:[~2026-07-30 22:57 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-30 17:43 [PATCH v6 00/15] SDM660 sound card and internal MI2S support Richard Acayan
2026-07-30 17:43 ` [PATCH v6 01/15] ASoC: dt-bindings: qcom,sm8250: add compatible for sdm660 Richard Acayan
2026-07-30 17:43 ` [PATCH v6 02/15] ASoC: dt-bindings: qcom: q6dsp: add support for lpi mi2s ports 5-6 Richard Acayan
2026-07-30 17:43 ` [PATCH v6 03/15] ASoC: dt-bindings: pm8916-wcd-analog-codec: Document pm8950/pm8953 Richard Acayan
2026-07-30 17:43 ` [PATCH v6 04/15] ASoC: dt-bindings: pm8916-analog-codec: Add PM660L compatible Richard Acayan
2026-07-30 17:43 ` [PATCH v6 05/15] ASoC: dt-bindings: msm8916-digital-codec: Add SDM660 compatible Richard Acayan
2026-07-30 17:43 ` [PATCH v6 06/15] ASoC: qdsp6: q6dsp-lpass-ports: add support for lpi mi2s ports 5-6 Richard Acayan
2026-07-30 18:15   ` sashiko-bot
2026-07-30 22:49   ` Srinivas Kandagatla
2026-07-30 17:43 ` [PATCH v6 07/15] ASoC: qdsp6: q6afe: add internal mi2s support Richard Acayan
2026-07-30 18:21   ` sashiko-bot
2026-07-30 22:51   ` Srinivas Kandagatla
2026-07-30 17:43 ` [PATCH v6 08/15] ASoC: qdsp6: q6afe-dai: " Richard Acayan
2026-07-30 18:06   ` sashiko-bot
2026-07-30 22:55   ` Srinivas Kandagatla
2026-07-30 17:43 ` [PATCH v6 09/15] ASoC: qdsp6: q6routing: add lpi " Richard Acayan
2026-07-30 22:57   ` Srinivas Kandagatla
2026-07-30 17:43 ` [PATCH v6 10/15] ASoC: qdsp6: common: support headphone jacks connected to lpi mi2s Richard Acayan
2026-07-30 17:43 ` [PATCH v6 11/15] ASoC: qcom: sm8250: add support for LPI_MI2S_RX_0 and LPI_MI2S_TX_3 Richard Acayan
2026-07-30 18:02   ` sashiko-bot
2026-07-30 17:43 ` [PATCH v6 12/15] ASoC: qcom: sm8250: add SDM660 compatible Richard Acayan
2026-07-30 17:43 ` [PATCH v6 13/15] ASoC: msm8916-wcd-analog: add pm8950 codec Richard Acayan
2026-07-30 17:59   ` sashiko-bot
2026-07-30 17:43 ` [PATCH v6 14/15] ASoC: msm8916-wcd-analog: add pm8953 codec Richard Acayan
2026-07-30 18:03   ` sashiko-bot
2026-07-30 17:43 ` [PATCH v6 15/15] ASoC: msm8916-wcd-analog: add quirk for cajon 2.0 Richard Acayan
2026-07-30 18:03   ` sashiko-bot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.