Devicetree
 help / color / mirror / Atom feed
* [PATCH 0/9] ASoC: ux500: Migrate HREF and Samsung audio to simple-card
@ 2026-09-10 23:03 Linus Walleij
  2026-09-10 23:03 ` [PATCH 1/9] ASoC: dt-bindings: ux500: Convert MSP binding to DT schema Linus Walleij
                   ` (9 more replies)
  0 siblings, 10 replies; 21+ messages in thread
From: Linus Walleij @ 2026-09-10 23:03 UTC (permalink / raw)
  To: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Lee Jones, Jaroslav Kysela, Takashi Iwai
  Cc: linux-sound, devicetree, mfd, Linus Walleij

The Ux500 HREF500 and HREF520 audio support still relies on a
MOP500-specific machine driver and ad-hoc text bindings.

Convert the MSP binding to DT schema and make the MSP and AB8500 codec
nodes proper sound DAI providers.

Move the fixed DSP_A and TDM policy into those links.

Add a common two-link simple audio card named Samsung in
ste-ux500-samsung.dtsi and include it from the seven supported Samsung
U8500 phones.

This intentionally breaks the device tree ABI with older Ux500 HREF
device trees. The old binding and driver have been broken for years and
need a clean restart.

The series has been tested on HREF500, HREF520 and Samsung phones.

Assisted-by: LLM
Signed-off-by: Linus Walleij <linusw@kernel.org>
---
Linus Walleij (9):
      ASoC: dt-bindings: ux500: Convert MSP binding to DT schema
      mfd: dt-bindings: ab8500: Describe codec DAI and microphone wiring
      ASoC: dt-bindings: ux500: Remove MOP500 sound card binding
      ASoC: ab8500: Skip digital microphone support on AB8505
      ARM: dts: ux500: Add sound DAI provider cells
      ARM: dts: ux500: Convert HREF audio card to simple-card
      ARM: dts: ux500: Add Samsung phone sound cards
      ASoC: ux500: Remove the MOP500 machine driver
      ARM: config: u8500: Enable the simple audio card

 .../devicetree/bindings/mfd/stericsson,ab8500.yaml |  25 ++
 .../bindings/sound/stericsson,ux500-msp-i2s.yaml   |  92 +++++
 .../devicetree/bindings/sound/ux500-mop500.txt     |  39 --
 .../devicetree/bindings/sound/ux500-msp.txt        |  42 --
 arch/arm/boot/dts/st/ste-ab8500.dtsi               |   7 +-
 arch/arm/boot/dts/st/ste-ab8505.dtsi               |   7 +-
 arch/arm/boot/dts/st/ste-dbx5x0.dtsi               |   9 +-
 arch/arm/boot/dts/st/ste-href-ab8500.dtsi          |  96 +++++
 arch/arm/boot/dts/st/ste-href-ab8505.dtsi          | 108 +++--
 .../boot/dts/st/ste-ux500-samsung-codina-tmo.dts   |   1 +
 arch/arm/boot/dts/st/ste-ux500-samsung-codina.dts  |  27 ++
 arch/arm/boot/dts/st/ste-ux500-samsung-gavini.dts  |   5 +
 arch/arm/boot/dts/st/ste-ux500-samsung-golden.dts  |   1 +
 arch/arm/boot/dts/st/ste-ux500-samsung-janice.dts  |   1 +
 arch/arm/boot/dts/st/ste-ux500-samsung-kyle.dts    |   1 +
 arch/arm/boot/dts/st/ste-ux500-samsung-skomer.dts  |   1 +
 arch/arm/boot/dts/st/ste-ux500-samsung.dtsi        |  67 ++++
 arch/arm/configs/u8500_defconfig                   |   2 +-
 sound/soc/codecs/ab8500-codec.c                    | 144 ++++---
 sound/soc/ux500/Kconfig                            |  23 +-
 sound/soc/ux500/Makefile                           |   3 -
 sound/soc/ux500/mop500.c                           | 167 --------
 sound/soc/ux500/mop500_ab8500.c                    | 437 ---------------------
 sound/soc/ux500/mop500_ab8500.h                    |  17 -
 24 files changed, 495 insertions(+), 827 deletions(-)
---
base-commit: 93edb750120a2a73d6732da4662fcdf663a3efe4
change-id: 20260903-ux500-simple-sound-d077d5486a72

Best regards,
-- 
Linus Walleij <linusw@kernel.org>


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

* [PATCH 1/9] ASoC: dt-bindings: ux500: Convert MSP binding to DT schema
  2026-09-10 23:03 [PATCH 0/9] ASoC: ux500: Migrate HREF and Samsung audio to simple-card Linus Walleij
@ 2026-09-10 23:03 ` Linus Walleij
  2026-09-10 23:10   ` sashiko-bot
  2026-09-10 23:03 ` [PATCH 2/9] mfd: dt-bindings: ab8500: Describe codec DAI and microphone wiring Linus Walleij
                   ` (8 subsequent siblings)
  9 siblings, 1 reply; 21+ messages in thread
From: Linus Walleij @ 2026-09-10 23:03 UTC (permalink / raw)
  To: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Lee Jones, Jaroslav Kysela, Takashi Iwai
  Cc: linux-sound, devicetree, mfd, Linus Walleij

Replace the incomplete text binding with a DT schema that describes
the clocks, reset, DMA channels and power supply consumed by the
driver. Define the MSP as a zero-cell sound DAI provider so generic
sound cards can reference it.

Assisted-by: LLM
Signed-off-by: Linus Walleij <linusw@kernel.org>
---
 .../bindings/sound/stericsson,ux500-msp-i2s.yaml   | 92 ++++++++++++++++++++++
 .../devicetree/bindings/sound/ux500-msp.txt        | 42 ----------
 2 files changed, 92 insertions(+), 42 deletions(-)

diff --git a/Documentation/devicetree/bindings/sound/stericsson,ux500-msp-i2s.yaml b/Documentation/devicetree/bindings/sound/stericsson,ux500-msp-i2s.yaml
new file mode 100644
index 000000000000..0f623a3fb614
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/stericsson,ux500-msp-i2s.yaml
@@ -0,0 +1,92 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/sound/stericsson,ux500-msp-i2s.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: ST-Ericsson Ux500 Multichannel Serial Port
+
+maintainers:
+  - Linus Walleij <linusw@kernel.org>
+
+description:
+  The Ux500 Multichannel Serial Port (MSP) is a synchronous serial audio
+  interface supporting I2S and PCM/TDM protocols. Data is transferred to and
+  from memory using the Ux500 DMA controller.
+
+allOf:
+  - $ref: dai-common.yaml#
+
+properties:
+  compatible:
+    const: stericsson,ux500-msp-i2s
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  v-ape-supply:
+    description: Analog power engine supply
+
+  dmas:
+    minItems: 1
+    maxItems: 2
+
+  dma-names:
+    minItems: 1
+    maxItems: 2
+    items:
+      enum: [ rx, tx ]
+
+  clocks:
+    items:
+      - description: MSP functional clock
+      - description: MSP APB bus clock
+
+  clock-names:
+    items:
+      - const: msp
+      - const: apb_pclk
+
+  resets:
+    maxItems: 1
+
+  '#sound-dai-cells':
+    const: 0
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - v-ape-supply
+  - dmas
+  - dma-names
+  - clocks
+  - clock-names
+  - resets
+  - '#sound-dai-cells'
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+    #include <dt-bindings/interrupt-controller/irq.h>
+    #include <dt-bindings/reset/stericsson,db8500-prcc-reset.h>
+
+    msp@80123000 {
+        compatible = "stericsson,ux500-msp-i2s";
+        reg = <0x80123000 0x1000>;
+        interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
+        v-ape-supply = <&db8500_vape_reg>;
+        dmas = <&dma 31 0 0x12>, <&dma 31 0 0x10>;
+        dma-names = "rx", "tx";
+        clocks = <&prcc_kclk 1 3>, <&prcc_pclk 1 3>;
+        clock-names = "msp", "apb_pclk";
+        resets = <&prcc_reset DB8500_PRCC_1 DB8500_PRCC_1_RESET_MSP0>;
+        #sound-dai-cells = <0>;
+    };
+
+...
diff --git a/Documentation/devicetree/bindings/sound/ux500-msp.txt b/Documentation/devicetree/bindings/sound/ux500-msp.txt
deleted file mode 100644
index 7dd1b96160f5..000000000000
--- a/Documentation/devicetree/bindings/sound/ux500-msp.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-* ux500 MSP (CPU-side Digital Audio Interface)
-
-Required properties:
- - compatible       :"stericsson,ux500-msp-i2s"
- - reg              : Physical base address and length of the device's registers.
-
-Optional properties:
- - interrupts       : The interrupt output from the device.
- - <name>-supply    : Phandle to the regulator <name> supply
-
-Example:
-
-	sound {
-		compatible = "stericsson,snd-soc-mop500";
-
-		stericsson,platform-pcm-dma = <&pcm>;
-		stericsson,cpu-dai = <&msp1 &msp3>;
-		stericsson,audio-codec = <&codec>;
-	};
-
-	pcm: ux500-pcm {
-		compatible = "stericsson,ux500-pcm";
-	};
-
-	msp1: msp@80124000 {
-		compatible = "stericsson,ux500-msp-i2s";
-		reg = <0x80124000 0x1000>;
-		interrupts = <0 62 0x4>;
-		v-ape-supply = <&db8500_vape_reg>;
-	};
-
-	msp3: msp@80125000 {
-		compatible = "stericsson,ux500-msp-i2s";
-		reg = <0x80125000 0x1000>;
-		interrupts = <0 62 0x4>;
-		v-ape-supply = <&db8500_vape_reg>;
-	};
-
-	codec: ab8500-codec {
-		compatible = "stericsson,ab8500-codec";
-		stericsson,earpeice-cmv = <950>; /* Units in mV. */
-	};

-- 
2.55.0


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

* [PATCH 2/9] mfd: dt-bindings: ab8500: Describe codec DAI and microphone wiring
  2026-09-10 23:03 [PATCH 0/9] ASoC: ux500: Migrate HREF and Samsung audio to simple-card Linus Walleij
  2026-09-10 23:03 ` [PATCH 1/9] ASoC: dt-bindings: ux500: Convert MSP binding to DT schema Linus Walleij
@ 2026-09-10 23:03 ` Linus Walleij
  2026-09-10 23:08   ` sashiko-bot
  2026-09-10 23:03 ` [PATCH 3/9] ASoC: dt-bindings: ux500: Remove MOP500 sound card binding Linus Walleij
                   ` (7 subsequent siblings)
  9 siblings, 1 reply; 21+ messages in thread
From: Linus Walleij @ 2026-09-10 23:03 UTC (permalink / raw)
  To: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Lee Jones, Jaroslav Kysela, Takashi Iwai
  Cc: linux-sound, devicetree, mfd, Linus Walleij

The AB8500 and AB8505 codec block exposes two digital audio
interfaces. Define the codec as a one-cell sound DAI provider so
generic sound cards can select either interface.

The codec binding conversion also omitted the analog microphone type
and bias-routing properties supported by the driver and documented by
the old text binding. Restore them so boards can describe the codec
wiring without schema warnings.

Assisted-by: LLM
Signed-off-by: Linus Walleij <linusw@kernel.org>
---
Lee: just merge this separately when reviewed for DT and you think
it looks good.
---
 .../devicetree/bindings/mfd/stericsson,ab8500.yaml | 25 ++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/Documentation/devicetree/bindings/mfd/stericsson,ab8500.yaml b/Documentation/devicetree/bindings/mfd/stericsson,ab8500.yaml
index 0fdfbfdfe88a..ab2a0a89b878 100644
--- a/Documentation/devicetree/bindings/mfd/stericsson,ab8500.yaml
+++ b/Documentation/devicetree/bindings/mfd/stericsson,ab8500.yaml
@@ -312,6 +312,30 @@ properties:
         items:
           - const: audioclk
 
+      '#sound-dai-cells':
+        description: Selects one of the two digital audio interfaces
+        const: 1
+
+      stericsson,amic1-type-single-ended:
+        description: Configure analog microphone 1 as single-ended
+        type: boolean
+
+      stericsson,amic2-type-single-ended:
+        description: Configure analog microphone 2 as single-ended
+        type: boolean
+
+      stericsson,amic1a-bias-vamic2:
+        description: Supply analog microphone 1A from VAMIC2 instead of VAMIC1
+        type: boolean
+
+      stericsson,amic1b-bias-vamic2:
+        description: Supply analog microphone 1B from VAMIC2 instead of VAMIC1
+        type: boolean
+
+      stericsson,amic2-bias-vamic1:
+        description: Supply analog microphone 2 from VAMIC1 instead of VAMIC2
+        type: boolean
+
       stericsson,earpeice-cmv:
         description: Earpiece voltage
         $ref: /schemas/types.yaml#/definitions/uint32
@@ -319,6 +343,7 @@ properties:
 
     required:
       - compatible
+      - '#sound-dai-cells'
 
     additionalProperties: false
 

-- 
2.55.0


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

* [PATCH 3/9] ASoC: dt-bindings: ux500: Remove MOP500 sound card binding
  2026-09-10 23:03 [PATCH 0/9] ASoC: ux500: Migrate HREF and Samsung audio to simple-card Linus Walleij
  2026-09-10 23:03 ` [PATCH 1/9] ASoC: dt-bindings: ux500: Convert MSP binding to DT schema Linus Walleij
  2026-09-10 23:03 ` [PATCH 2/9] mfd: dt-bindings: ab8500: Describe codec DAI and microphone wiring Linus Walleij
@ 2026-09-10 23:03 ` Linus Walleij
  2026-09-10 23:07   ` sashiko-bot
  2026-09-10 23:03 ` [PATCH 4/9] ASoC: ab8500: Skip digital microphone support on AB8505 Linus Walleij
                   ` (6 subsequent siblings)
  9 siblings, 1 reply; 21+ messages in thread
From: Linus Walleij @ 2026-09-10 23:03 UTC (permalink / raw)
  To: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Lee Jones, Jaroslav Kysela, Takashi Iwai
  Cc: linux-sound, devicetree, mfd, Linus Walleij

The Ux500 device trees now use simple-audio-card and no longer contain
the MOP500-specific compatible or properties. Remove the obsolete text
binding rather than retaining an unused legacy ABI.

Assisted-by: LLM
Signed-off-by: Linus Walleij <linusw@kernel.org>
---
 .../devicetree/bindings/sound/ux500-mop500.txt     | 39 ----------------------
 1 file changed, 39 deletions(-)

diff --git a/Documentation/devicetree/bindings/sound/ux500-mop500.txt b/Documentation/devicetree/bindings/sound/ux500-mop500.txt
deleted file mode 100644
index 48e071c96b46..000000000000
--- a/Documentation/devicetree/bindings/sound/ux500-mop500.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-* MOP500 Audio Machine Driver
-
-This node is responsible for linking together all ux500 Audio Driver components.
-
-Required properties:
- - compatible              : "stericsson,snd-soc-mop500"
-
-Non-standard properties:
- - stericsson,cpu-dai      : Phandle to the CPU-side DAI
- - stericsson,audio-codec  : Phandle to the Audio CODEC
- - stericsson,card-name    : Over-ride default card name
-
-Example:
-
-	sound {
-		compatible = "stericsson,snd-soc-mop500";
-
-		stericsson,cpu-dai = <&msp1 &msp3>;
-		stericsson,audio-codec = <&codec>;
-	};
-
-	msp1: msp@80124000 {
-		compatible = "stericsson,ux500-msp-i2s";
-		reg = <0x80124000 0x1000>;
-		interrupts = <0 62 0x4>;
-		v-ape-supply = <&db8500_vape_reg>;
-	};
-
-	msp3: msp@80125000 {
-		compatible = "stericsson,ux500-msp-i2s";
-		reg = <0x80125000 0x1000>;
-		interrupts = <0 62 0x4>;
-		v-ape-supply = <&db8500_vape_reg>;
-	};
-
-	codec: ab8500-codec {
-		compatible = "stericsson,ab8500-codec";
-		stericsson,earpeice-cmv = <950>; /* Units in mV. */
-	};

-- 
2.55.0


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

* [PATCH 4/9] ASoC: ab8500: Skip digital microphone support on AB8505
  2026-09-10 23:03 [PATCH 0/9] ASoC: ux500: Migrate HREF and Samsung audio to simple-card Linus Walleij
                   ` (2 preceding siblings ...)
  2026-09-10 23:03 ` [PATCH 3/9] ASoC: dt-bindings: ux500: Remove MOP500 sound card binding Linus Walleij
@ 2026-09-10 23:03 ` Linus Walleij
  2026-09-10 23:17   ` sashiko-bot
  2026-09-10 23:03 ` [PATCH 5/9] ARM: dts: ux500: Add sound DAI provider cells Linus Walleij
                   ` (5 subsequent siblings)
  9 siblings, 1 reply; 21+ messages in thread
From: Linus Walleij @ 2026-09-10 23:03 UTC (permalink / raw)
  To: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Lee Jones, Jaroslav Kysela, Takashi Iwai
  Cc: linux-sound, devicetree, mfd, Linus Walleij

The AB8505 does not have the digital microphone interface, its six
input pins or the VDMIC regulator found in AB8500. The shared codec
driver nevertheless creates the entire AB8500 DMIC DAPM graph. When an
AB8505 sound card binds, the regulator widget requests the nonexistent
V-DMIC supply and falls back to a dummy regulator.

Split the digital microphone widgets and routes from the common codec
graph and add them only when the parent MFD is an actual AB8500. This
also removes the DMIC4-only AD_OUT4 path from AB8505.

Fixes: 679d7abdc754 ("ASoC: codecs: Add AB8500 codec-driver")
Assisted-by: LLM
Signed-off-by: Linus Walleij <linusw@kernel.org>
---
 sound/soc/codecs/ab8500-codec.c | 144 +++++++++++++++++++++++-----------------
 1 file changed, 82 insertions(+), 62 deletions(-)

diff --git a/sound/soc/codecs/ab8500-codec.c b/sound/soc/codecs/ab8500-codec.c
index e1a0e35836e6..35df09705440 100644
--- a/sound/soc/codecs/ab8500-codec.c
+++ b/sound/soc/codecs/ab8500-codec.c
@@ -299,7 +299,6 @@ static const struct snd_soc_dapm_widget ab8500_dapm_widgets[] = {
 	SND_SOC_DAPM_REGULATOR_SUPPLY("V-AUD", 0, 0),
 	SND_SOC_DAPM_REGULATOR_SUPPLY("V-AMIC1", 0, 0),
 	SND_SOC_DAPM_REGULATOR_SUPPLY("V-AMIC2", 0, 0),
-	SND_SOC_DAPM_REGULATOR_SUPPLY("V-DMIC", 0, 0),
 
 	/* Power */
 	SND_SOC_DAPM_SUPPLY("Audio Power",
@@ -324,7 +323,6 @@ static const struct snd_soc_dapm_widget ab8500_dapm_widgets[] = {
 	SND_SOC_DAPM_AIF_OUT("AD_OUT1", NULL, 0, SND_SOC_NOPM, 0, 0),
 	SND_SOC_DAPM_AIF_OUT("AD_OUT2", NULL, 0, SND_SOC_NOPM, 0, 0),
 	SND_SOC_DAPM_AIF_OUT("AD_OUT3", NULL, 0, SND_SOC_NOPM, 0, 0),
-	SND_SOC_DAPM_AIF_OUT("AD_OUT4", NULL, 0, SND_SOC_NOPM, 0, 0),
 	SND_SOC_DAPM_AIF_OUT("AD_OUT57", NULL, 0, SND_SOC_NOPM, 0, 0),
 	SND_SOC_DAPM_AIF_OUT("AD_OUT68", NULL, 0, SND_SOC_NOPM, 0, 0),
 
@@ -584,36 +582,6 @@ static const struct snd_soc_dapm_widget ab8500_dapm_widgets[] = {
 	SND_SOC_DAPM_SUPPLY("AD5768 Enable", AB8500_ADPATHENA,
 			    AB8500_ADPATHENA_ENAD5768, 0, NULL, 0),
 
-	/* Digital Microphone path */
-
-	SND_SOC_DAPM_INPUT("DMic 1"),
-	SND_SOC_DAPM_INPUT("DMic 2"),
-	SND_SOC_DAPM_INPUT("DMic 3"),
-	SND_SOC_DAPM_INPUT("DMic 4"),
-	SND_SOC_DAPM_INPUT("DMic 5"),
-	SND_SOC_DAPM_INPUT("DMic 6"),
-
-	SND_SOC_DAPM_MIXER("DMIC1",
-			AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC1, 0,
-			NULL, 0),
-	SND_SOC_DAPM_MIXER("DMIC2",
-			AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC2, 0,
-			NULL, 0),
-	SND_SOC_DAPM_MIXER("DMIC3",
-			AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC3, 0,
-			NULL, 0),
-	SND_SOC_DAPM_MIXER("DMIC4",
-			AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC4, 0,
-			NULL, 0),
-	SND_SOC_DAPM_MIXER("DMIC5",
-			AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC5, 0,
-			NULL, 0),
-	SND_SOC_DAPM_MIXER("DMIC6",
-			AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC6, 0,
-			NULL, 0),
-	SND_SOC_DAPM_MIXER("AD4 Channel Volume",
-			SND_SOC_NOPM, 0, 0,
-			NULL, 0),
 	/* Acoustical Noise Cancellation path */
 
 	SND_SOC_DAPM_MUX("ANC Source",
@@ -648,6 +616,40 @@ static const struct snd_soc_dapm_widget ab8500_dapm_widgets[] = {
 			NULL, 0),
 };
 
+static const struct snd_soc_dapm_widget ab8500_dmic_dapm_widgets[] = {
+	SND_SOC_DAPM_REGULATOR_SUPPLY("V-DMIC", 0, 0),
+	SND_SOC_DAPM_AIF_OUT("AD_OUT4", NULL, 0, SND_SOC_NOPM, 0, 0),
+
+	SND_SOC_DAPM_INPUT("DMic 1"),
+	SND_SOC_DAPM_INPUT("DMic 2"),
+	SND_SOC_DAPM_INPUT("DMic 3"),
+	SND_SOC_DAPM_INPUT("DMic 4"),
+	SND_SOC_DAPM_INPUT("DMic 5"),
+	SND_SOC_DAPM_INPUT("DMic 6"),
+
+	SND_SOC_DAPM_MIXER("DMIC1",
+			AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC1, 0,
+			NULL, 0),
+	SND_SOC_DAPM_MIXER("DMIC2",
+			AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC2, 0,
+			NULL, 0),
+	SND_SOC_DAPM_MIXER("DMIC3",
+			AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC3, 0,
+			NULL, 0),
+	SND_SOC_DAPM_MIXER("DMIC4",
+			AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC4, 0,
+			NULL, 0),
+	SND_SOC_DAPM_MIXER("DMIC5",
+			AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC5, 0,
+			NULL, 0),
+	SND_SOC_DAPM_MIXER("DMIC6",
+			AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC6, 0,
+			NULL, 0),
+	SND_SOC_DAPM_MIXER("AD4 Channel Volume",
+			SND_SOC_NOPM, 0, 0,
+			NULL, 0),
+};
+
 /*
  * DAPM-routes
  */
@@ -853,35 +855,6 @@ static const struct snd_soc_dapm_route ab8500_dapm_routes[] = {
 	{"AD_OUT68", NULL, "Main Supply"},
 	{"AD_OUT68", NULL, "AD6 Channel Volume"},
 
-	/* Digital Microphone path */
-
-	{"DMic 1", NULL, "V-DMIC"},
-	{"DMic 2", NULL, "V-DMIC"},
-	{"DMic 3", NULL, "V-DMIC"},
-	{"DMic 4", NULL, "V-DMIC"},
-	{"DMic 5", NULL, "V-DMIC"},
-	{"DMic 6", NULL, "V-DMIC"},
-
-	{"DMIC1", NULL, "DMic 1"},
-	{"DMIC2", NULL, "DMic 2"},
-	{"DMIC3", NULL, "DMic 3"},
-	{"DMIC4", NULL, "DMic 4"},
-	{"DMIC5", NULL, "DMic 5"},
-	{"DMIC6", NULL, "DMic 6"},
-
-	{"AD1 Source Select", "DMic 1", "DMIC1"},
-	{"AD2 Source Select", "DMic 2", "DMIC2"},
-	{"AD3 Source Select", "DMic 3", "DMIC3"},
-	{"AD5 Source Select", "DMic 5", "DMIC5"},
-	{"AD6 Source Select", "DMic 6", "DMIC6"},
-
-	{"AD4 Channel Volume", NULL, "DMIC4"},
-	{"AD4 Channel Volume", NULL, "AD34 Enable"},
-
-	{"ab8500_0c", NULL, "AD_OUT4"},
-	{"AD_OUT4", NULL, "Main Supply"},
-	{"AD_OUT4", NULL, "AD4 Channel Volume"},
-
 	/* LineIn Bypass path */
 
 	{"LINL to HSL Volume", NULL, "LINL Enable"},
@@ -911,7 +884,6 @@ static const struct snd_soc_dapm_route ab8500_dapm_routes[] = {
 	{"Sidetone Left Source", "Headset Left", "DA_IN1"},
 	{"Sidetone Right Source", "LineIn Right", "AD2 Channel Volume"},
 	{"Sidetone Right Source", "Mic 1", "AD3 Channel Volume"},
-	{"Sidetone Right Source", "DMic 4", "AD4 Channel Volume"},
 	{"Sidetone Right Source", "Headset Right", "DA_IN2"},
 
 	{"STFIR1 Control", NULL, "Sidetone Left Source"},
@@ -924,6 +896,37 @@ static const struct snd_soc_dapm_route ab8500_dapm_routes[] = {
 	{"DA2 Enable", NULL, "STFIR2 Volume"},
 };
 
+static const struct snd_soc_dapm_route ab8500_dmic_dapm_routes[] = {
+	{"DMic 1", NULL, "V-DMIC"},
+	{"DMic 2", NULL, "V-DMIC"},
+	{"DMic 3", NULL, "V-DMIC"},
+	{"DMic 4", NULL, "V-DMIC"},
+	{"DMic 5", NULL, "V-DMIC"},
+	{"DMic 6", NULL, "V-DMIC"},
+
+	{"DMIC1", NULL, "DMic 1"},
+	{"DMIC2", NULL, "DMic 2"},
+	{"DMIC3", NULL, "DMic 3"},
+	{"DMIC4", NULL, "DMic 4"},
+	{"DMIC5", NULL, "DMic 5"},
+	{"DMIC6", NULL, "DMic 6"},
+
+	{"AD1 Source Select", "DMic 1", "DMIC1"},
+	{"AD2 Source Select", "DMic 2", "DMIC2"},
+	{"AD3 Source Select", "DMic 3", "DMIC3"},
+	{"AD5 Source Select", "DMic 5", "DMIC5"},
+	{"AD6 Source Select", "DMic 6", "DMIC6"},
+
+	{"AD4 Channel Volume", NULL, "DMIC4"},
+	{"AD4 Channel Volume", NULL, "AD34 Enable"},
+
+	{"ab8500_0c", NULL, "AD_OUT4"},
+	{"AD_OUT4", NULL, "Main Supply"},
+	{"AD_OUT4", NULL, "AD4 Channel Volume"},
+
+	{"Sidetone Right Source", "DMic 4", "AD4 Channel Volume"},
+};
+
 static const struct snd_soc_dapm_route ab8500_dapm_routes_mic1a_vamicx[] = {
 	{"MIC1A V-AMICx Enable", NULL, "V-AMIC1"},
 	{"MIC1A V-AMICx Enable", NULL, "V-AMIC2"},
@@ -2043,13 +2046,30 @@ static int ab8500_codec_probe(struct snd_soc_component *component)
 {
 	struct device *dev = component->dev;
 	struct device_node *np = dev->of_node;
+	struct ab8500 *ab8500 = dev_get_drvdata(dev->parent);
 	struct ab8500_codec_platform_data codec_pdata;
+	struct snd_soc_dapm_context *dapm;
 	int status;
 
 	dev_dbg(dev, "%s: Enter.\n", __func__);
 
 	ab8500_codec_of_probe(dev, np, &codec_pdata);
 
+	if (is_ab8500(ab8500)) {
+		dapm = snd_soc_component_to_dapm(component);
+		status = snd_soc_dapm_new_controls(dapm,
+						   ab8500_dmic_dapm_widgets,
+						   ARRAY_SIZE(ab8500_dmic_dapm_widgets));
+		if (status)
+			return status;
+
+		status = snd_soc_dapm_add_routes(dapm,
+						 ab8500_dmic_dapm_routes,
+						 ARRAY_SIZE(ab8500_dmic_dapm_routes));
+		if (status)
+			return status;
+	}
+
 	status = ab8500_audio_init_audioblock(component);
 	if (status < 0) {
 		dev_err(dev, "%s: failed to init audio-block (%d)!\n",

-- 
2.55.0


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

* [PATCH 5/9] ARM: dts: ux500: Add sound DAI provider cells
  2026-09-10 23:03 [PATCH 0/9] ASoC: ux500: Migrate HREF and Samsung audio to simple-card Linus Walleij
                   ` (3 preceding siblings ...)
  2026-09-10 23:03 ` [PATCH 4/9] ASoC: ab8500: Skip digital microphone support on AB8505 Linus Walleij
@ 2026-09-10 23:03 ` Linus Walleij
  2026-09-10 23:08   ` sashiko-bot
  2026-09-10 23:03 ` [PATCH 6/9] ARM: dts: ux500: Convert HREF audio card to simple-card Linus Walleij
                   ` (4 subsequent siblings)
  9 siblings, 1 reply; 21+ messages in thread
From: Linus Walleij @ 2026-09-10 23:03 UTC (permalink / raw)
  To: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Lee Jones, Jaroslav Kysela, Takashi Iwai
  Cc: linux-sound, devicetree, mfd, Linus Walleij

Describe each MSP as a single-DAI provider and the AB8500 codec as a
two-DAI provider. This allows generic sound cards to reference the
playback and capture interfaces by phandle.

Assisted-by: LLM
Signed-off-by: Linus Walleij <linusw@kernel.org>
---
 arch/arm/boot/dts/st/ste-ab8500.dtsi | 1 +
 arch/arm/boot/dts/st/ste-ab8505.dtsi | 1 +
 arch/arm/boot/dts/st/ste-dbx5x0.dtsi | 4 ++++
 3 files changed, 6 insertions(+)

diff --git a/arch/arm/boot/dts/st/ste-ab8500.dtsi b/arch/arm/boot/dts/st/ste-ab8500.dtsi
index dd30d08ccb9b..8bf083addd66 100644
--- a/arch/arm/boot/dts/st/ste-ab8500.dtsi
+++ b/arch/arm/boot/dts/st/ste-ab8500.dtsi
@@ -272,6 +272,7 @@ pwm@3 {
 
 				codec: codec {
 					compatible = "stericsson,ab8500-codec";
+					#sound-dai-cells = <1>;
 
 					V-AUD-supply = <&ab8500_ldo_audio_reg>;
 					V-AMIC1-supply = <&ab8500_ldo_anamic1_reg>;
diff --git a/arch/arm/boot/dts/st/ste-ab8505.dtsi b/arch/arm/boot/dts/st/ste-ab8505.dtsi
index 131c82508e82..e61beb8b5ac3 100644
--- a/arch/arm/boot/dts/st/ste-ab8505.dtsi
+++ b/arch/arm/boot/dts/st/ste-ab8505.dtsi
@@ -224,6 +224,7 @@ pwm@1 {
 
 				codec: codec {
 					compatible = "stericsson,ab8500-codec";
+					#sound-dai-cells = <1>;
 
 					V-AUD-supply = <&ab8500_ldo_audio_reg>;
 					V-AMIC1-supply = <&ab8500_ldo_anamic1_reg>;
diff --git a/arch/arm/boot/dts/st/ste-dbx5x0.dtsi b/arch/arm/boot/dts/st/ste-dbx5x0.dtsi
index 25a20fafc6b9..e6585eeb4553 100644
--- a/arch/arm/boot/dts/st/ste-dbx5x0.dtsi
+++ b/arch/arm/boot/dts/st/ste-dbx5x0.dtsi
@@ -1078,6 +1078,7 @@ sound {
 
 		msp0: msp@80123000 {
 			compatible = "stericsson,ux500-msp-i2s";
+			#sound-dai-cells = <0>;
 			reg = <0x80123000 0x1000>;
 			interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
 			v-ape-supply = <&db8500_vape_reg>;
@@ -1095,6 +1096,7 @@ msp0: msp@80123000 {
 
 		msp1: msp@80124000 {
 			compatible = "stericsson,ux500-msp-i2s";
+			#sound-dai-cells = <0>;
 			reg = <0x80124000 0x1000>;
 			interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
 			v-ape-supply = <&db8500_vape_reg>;
@@ -1113,6 +1115,7 @@ msp1: msp@80124000 {
 		// HDMI sound
 		msp2: msp@80117000 {
 			compatible = "stericsson,ux500-msp-i2s";
+			#sound-dai-cells = <0>;
 			reg = <0x80117000 0x1000>;
 			interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
 			v-ape-supply = <&db8500_vape_reg>;
@@ -1131,6 +1134,7 @@ HighPrio - Fixed */
 
 		msp3: msp@80125000 {
 			compatible = "stericsson,ux500-msp-i2s";
+			#sound-dai-cells = <0>;
 			reg = <0x80125000 0x1000>;
 			interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
 			v-ape-supply = <&db8500_vape_reg>;

-- 
2.55.0


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

* [PATCH 6/9] ARM: dts: ux500: Convert HREF audio card to simple-card
  2026-09-10 23:03 [PATCH 0/9] ASoC: ux500: Migrate HREF and Samsung audio to simple-card Linus Walleij
                   ` (4 preceding siblings ...)
  2026-09-10 23:03 ` [PATCH 5/9] ARM: dts: ux500: Add sound DAI provider cells Linus Walleij
@ 2026-09-10 23:03 ` Linus Walleij
  2026-09-10 23:14   ` sashiko-bot
  2026-09-10 23:03 ` [PATCH 7/9] ARM: dts: ux500: Add Samsung phone sound cards Linus Walleij
                   ` (3 subsequent siblings)
  9 siblings, 1 reply; 21+ messages in thread
From: Linus Walleij @ 2026-09-10 23:03 UTC (permalink / raw)
  To: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Lee Jones, Jaroslav Kysela, Takashi Iwai
  Cc: linux-sound, devicetree, mfd, Linus Walleij

Describe the HREF500 and HREF520 sound hardware with two-link simple
audio cards in their PMIC-specific HREF DTSIs, and name the card
HREF-500. MSP1 drives codec playback while MSP3 receives codec capture
on the shared DB8500 v2 interface.

Describe the DSP_A format, codec-provided clocks, 16-by-16-bit TDM
frame and active slots directly in the links.

Keep each complete card, including its links, connector widgets, routes
and pin switches, in the existing PMIC-specific HREF DTSI. The AB8500
variant exposes six digital microphone endpoints. AB8505 has neither
the digital microphone interface nor its VDMIC regulator, so leave
these endpoints out of HREF520 and remove its stale regulator and pin
configuration nodes.

Select ULPCLK as the fixed parent of the codec audio clock in the
HREF-specific codec DTSIs. This replaces the machine driver clock
control with declarative board policy.

Fixes: 4ecae2ae9535 ("ARM: dts: ux500-href: Switch HREF520 to AB8505")
Assisted-by: LLM
Signed-off-by: Linus Walleij <linusw@kernel.org>
---
 arch/arm/boot/dts/st/ste-ab8500.dtsi      |   6 --
 arch/arm/boot/dts/st/ste-ab8505.dtsi      |   6 --
 arch/arm/boot/dts/st/ste-dbx5x0.dtsi      |   5 --
 arch/arm/boot/dts/st/ste-href-ab8500.dtsi |  96 ++++++++++++++++++++++++++
 arch/arm/boot/dts/st/ste-href-ab8505.dtsi | 108 +++++++++++++++++++++++-------
 5 files changed, 178 insertions(+), 43 deletions(-)

diff --git a/arch/arm/boot/dts/st/ste-ab8500.dtsi b/arch/arm/boot/dts/st/ste-ab8500.dtsi
index 8bf083addd66..c8c8521516e4 100644
--- a/arch/arm/boot/dts/st/ste-ab8500.dtsi
+++ b/arch/arm/boot/dts/st/ste-ab8500.dtsi
@@ -365,12 +365,6 @@ ab8500_ldo_ana_reg: ab8500_ldo_ana {
 			};
 		};
 
-		sound {
-			stericsson,audio-codec = <&codec>;
-			clocks = <&prcmu_clk PRCMU_SYSCLK>, <&ab8500_clock AB8500_SYSCLK_ULP>, <&ab8500_clock AB8500_SYSCLK_INT>;
-			clock-names = "sysclk", "ulpclk", "intclk";
-		};
-
 		mcde@a0350000 {
 			vana-supply = <&ab8500_ldo_ana_reg>;
 
diff --git a/arch/arm/boot/dts/st/ste-ab8505.dtsi b/arch/arm/boot/dts/st/ste-ab8505.dtsi
index e61beb8b5ac3..0bf85b12808d 100644
--- a/arch/arm/boot/dts/st/ste-ab8505.dtsi
+++ b/arch/arm/boot/dts/st/ste-ab8505.dtsi
@@ -302,12 +302,6 @@ ab8500_ldo_ana_reg: ab8500_ldo_ana {
 			};
 		};
 
-		sound {
-			stericsson,audio-codec = <&codec>;
-			clocks = <&prcmu_clk PRCMU_SYSCLK>, <&ab8500_clock AB8500_SYSCLK_ULP>, <&ab8500_clock AB8500_SYSCLK_INT>;
-			clock-names = "sysclk", "ulpclk", "intclk";
-		};
-
 		mcde@a0350000 {
 			vana-supply = <&ab8500_ldo_ana_reg>;
 
diff --git a/arch/arm/boot/dts/st/ste-dbx5x0.dtsi b/arch/arm/boot/dts/st/ste-dbx5x0.dtsi
index e6585eeb4553..912d2505318e 100644
--- a/arch/arm/boot/dts/st/ste-dbx5x0.dtsi
+++ b/arch/arm/boot/dts/st/ste-dbx5x0.dtsi
@@ -1071,11 +1071,6 @@ mmc@80008000 {
 			status = "disabled";
 		};
 
-		sound {
-			compatible = "stericsson,snd-soc-mop500";
-			stericsson,cpu-dai = <&msp1 &msp3>;
-		};
-
 		msp0: msp@80123000 {
 			compatible = "stericsson,ux500-msp-i2s";
 			#sound-dai-cells = <0>;
diff --git a/arch/arm/boot/dts/st/ste-href-ab8500.dtsi b/arch/arm/boot/dts/st/ste-href-ab8500.dtsi
index 5eeb44c5e932..747510c21204 100644
--- a/arch/arm/boot/dts/st/ste-href-ab8500.dtsi
+++ b/arch/arm/boot/dts/st/ste-href-ab8500.dtsi
@@ -6,6 +6,97 @@
 #include "ste-ab8500.dtsi"
 
 / {
+	href_sound: sound {
+		compatible = "simple-audio-card";
+		simple-audio-card,name = "HREF-500";
+		simple-audio-card,widgets =
+			"Headphone", "Headset",
+			"Speaker", "Earpiece Speaker",
+			"Speaker", "Loudspeaker",
+			"Line", "Line Out",
+			"Speaker", "Vibra 1 Motor",
+			"Speaker", "Vibra 2 Motor",
+			"Microphone", "Mic 1 Jack",
+			"Microphone", "Mic 2 Jack",
+			"Line", "Line In",
+			"Microphone", "Digital Mic 1",
+			"Microphone", "Digital Mic 2",
+			"Microphone", "Digital Mic 3",
+			"Microphone", "Digital Mic 4",
+			"Microphone", "Digital Mic 5",
+			"Microphone", "Digital Mic 6";
+		simple-audio-card,routing =
+			"Headset", "Headset Left",
+			"Headset", "Headset Right",
+			"Earpiece Speaker", "Earpiece",
+			"Loudspeaker", "Speaker Left",
+			"Loudspeaker", "Speaker Right",
+			"Line Out", "LineOut Left",
+			"Line Out", "LineOut Right",
+			"Vibra 1 Motor", "Vibra 1",
+			"Vibra 2 Motor", "Vibra 2",
+			"Mic 1", "Mic 1 Jack",
+			"Mic 2", "Mic 2 Jack",
+			"LineIn Left", "Line In",
+			"LineIn Right", "Line In",
+			"DMic 1", "Digital Mic 1",
+			"DMic 2", "Digital Mic 2",
+			"DMic 3", "Digital Mic 3",
+			"DMic 4", "Digital Mic 4",
+			"DMic 5", "Digital Mic 5",
+			"DMic 6", "Digital Mic 6";
+		simple-audio-card,pin-switches =
+			"Headset", "Earpiece Speaker", "Loudspeaker",
+			"Line Out", "Vibra 1 Motor", "Vibra 2 Motor",
+			"Mic 1 Jack", "Mic 2 Jack", "Line In",
+			"Digital Mic 1", "Digital Mic 2", "Digital Mic 3",
+			"Digital Mic 4", "Digital Mic 5", "Digital Mic 6";
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		simple-audio-card,dai-link@0 {
+			reg = <0>;
+			format = "dsp_a";
+			bitclock-master = <&codec_playback>;
+			frame-master = <&codec_playback>;
+
+			cpu {
+				sound-dai = <&msp1>;
+				dai-tdm-slot-num = <16>;
+				dai-tdm-slot-width = <16>;
+				dai-tdm-slot-tx-mask = <0 1 0 1>;
+			};
+
+			codec_playback: codec {
+				sound-dai = <&codec 0>;
+				dai-tdm-slot-num = <16>;
+				dai-tdm-slot-width = <16>;
+				dai-tdm-slot-tx-mask = <0 1 0 1>;
+			};
+		};
+
+		simple-audio-card,dai-link@1 {
+			reg = <1>;
+			format = "dsp_a";
+			bitclock-master = <&codec_capture>;
+			frame-master = <&codec_capture>;
+
+			cpu {
+				sound-dai = <&msp3>;
+				dai-tdm-slot-num = <16>;
+				dai-tdm-slot-width = <16>;
+				dai-tdm-slot-rx-mask = <1>;
+			};
+
+			codec_capture: codec {
+				sound-dai = <&codec 1>;
+				dai-tdm-slot-num = <16>;
+				dai-tdm-slot-width = <16>;
+				dai-tdm-slot-rx-mask = <1>;
+			};
+		};
+	};
+
 	soc {
 		prcmu@80157000 {
 			ab8500 {
@@ -488,3 +579,8 @@ ab8500_chargalg {
 		};
 	};
 };
+
+&codec {
+	assigned-clocks = <&ab8500_clock AB8500_SYSCLK_INT>;
+	assigned-clock-parents = <&ab8500_clock AB8500_SYSCLK_ULP>;
+};
diff --git a/arch/arm/boot/dts/st/ste-href-ab8505.dtsi b/arch/arm/boot/dts/st/ste-href-ab8505.dtsi
index 268db68ccf87..dc1f3b068354 100644
--- a/arch/arm/boot/dts/st/ste-href-ab8505.dtsi
+++ b/arch/arm/boot/dts/st/ste-href-ab8505.dtsi
@@ -6,6 +6,83 @@
 #include "ste-ab8505.dtsi"
 
 / {
+	href_sound: sound {
+		compatible = "simple-audio-card";
+		simple-audio-card,name = "HREF-500";
+		simple-audio-card,widgets =
+			"Headphone", "Headset",
+			"Speaker", "Earpiece Speaker",
+			"Speaker", "Loudspeaker",
+			"Line", "Line Out",
+			"Speaker", "Vibra 1 Motor",
+			"Speaker", "Vibra 2 Motor",
+			"Microphone", "Mic 1 Jack",
+			"Microphone", "Mic 2 Jack",
+			"Line", "Line In";
+		simple-audio-card,routing =
+			"Headset", "Headset Left",
+			"Headset", "Headset Right",
+			"Earpiece Speaker", "Earpiece",
+			"Loudspeaker", "Speaker Left",
+			"Loudspeaker", "Speaker Right",
+			"Line Out", "LineOut Left",
+			"Line Out", "LineOut Right",
+			"Vibra 1 Motor", "Vibra 1",
+			"Vibra 2 Motor", "Vibra 2",
+			"Mic 1", "Mic 1 Jack",
+			"Mic 2", "Mic 2 Jack",
+			"LineIn Left", "Line In",
+			"LineIn Right", "Line In";
+		simple-audio-card,pin-switches =
+			"Headset", "Earpiece Speaker", "Loudspeaker",
+			"Line Out", "Vibra 1 Motor", "Vibra 2 Motor",
+			"Mic 1 Jack", "Mic 2 Jack", "Line In";
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		simple-audio-card,dai-link@0 {
+			reg = <0>;
+			format = "dsp_a";
+			bitclock-master = <&codec_playback>;
+			frame-master = <&codec_playback>;
+
+			cpu {
+				sound-dai = <&msp1>;
+				dai-tdm-slot-num = <16>;
+				dai-tdm-slot-width = <16>;
+				dai-tdm-slot-tx-mask = <0 1 0 1>;
+			};
+
+			codec_playback: codec {
+				sound-dai = <&codec 0>;
+				dai-tdm-slot-num = <16>;
+				dai-tdm-slot-width = <16>;
+				dai-tdm-slot-tx-mask = <0 1 0 1>;
+			};
+		};
+
+		simple-audio-card,dai-link@1 {
+			reg = <1>;
+			format = "dsp_a";
+			bitclock-master = <&codec_capture>;
+			frame-master = <&codec_capture>;
+
+			cpu {
+				sound-dai = <&msp3>;
+				dai-tdm-slot-num = <16>;
+				dai-tdm-slot-width = <16>;
+				dai-tdm-slot-rx-mask = <1>;
+			};
+
+			codec_capture: codec {
+				sound-dai = <&codec 1>;
+				dai-tdm-slot-num = <16>;
+				dai-tdm-slot-width = <16>;
+				dai-tdm-slot-rx-mask = <1>;
+			};
+		};
+	};
+
 	soc {
 		prcmu@80157000 {
 			ab8505 {
@@ -48,10 +125,6 @@ ab8500_ldo_anamic2_reg: ab8500_ldo_anamic2 {
 						regulator-name = "V-AMIC2";
 					};
 
-					ab8500_ldo_dmic_reg: ab8500_ldo_dmic {
-						regulator-name = "V-DMIC";
-					};
-
 					ab8500_ldo_ana_reg: ab8500_ldo_ana {
 						regulator-name = "V-CSI/DSI";
 					};
@@ -80,7 +153,6 @@ gpio {
 						    <&pwm_default_mode>,
 						    <&adi1_default_mode>,
 						    <&usbuicc_default_mode>,
-						    <&dmic_default_mode>,
 						    <&extcpena_default_mode>,
 						    <&modsclsda_default_mode>;
 
@@ -365,27 +437,6 @@ default_cfg {
 							};
 						};
 					};
-					/* This sets up the microphone pins */
-					dmic {
-						dmic_default_mode: dmic_default {
-							default_mux {
-								function = "dmic";
-								groups = "dmic12_d_1",
-									 "dmic34_d_1",
-									 "dmic56_d_1";
-							};
-							default_cfg {
-								pins = "GPIO27_J6",
-									 "GPIO28_K6",
-									 "GPIO29_G6",
-									 "GPIO30_H6",
-									 "GPIO31_F5",
-									 "GPIO32_G5";
-								input-enable;
-								bias-pull-down;
-							};
-						};
-					};
 					extcpena {
 						extcpena_default_mode: extcpena_default {
 							default_mux {
@@ -488,3 +539,8 @@ ab8500_chargalg {
 		};
 	};
 };
+
+&codec {
+	assigned-clocks = <&ab8500_clock AB8500_SYSCLK_INT>;
+	assigned-clock-parents = <&ab8500_clock AB8500_SYSCLK_ULP>;
+};

-- 
2.55.0


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

* [PATCH 7/9] ARM: dts: ux500: Add Samsung phone sound cards
  2026-09-10 23:03 [PATCH 0/9] ASoC: ux500: Migrate HREF and Samsung audio to simple-card Linus Walleij
                   ` (5 preceding siblings ...)
  2026-09-10 23:03 ` [PATCH 6/9] ARM: dts: ux500: Convert HREF audio card to simple-card Linus Walleij
@ 2026-09-10 23:03 ` Linus Walleij
  2026-09-10 23:15   ` sashiko-bot
  2026-09-10 23:03 ` [PATCH 8/9] ASoC: ux500: Remove the MOP500 machine driver Linus Walleij
                   ` (2 subsequent siblings)
  9 siblings, 1 reply; 21+ messages in thread
From: Linus Walleij @ 2026-09-10 23:03 UTC (permalink / raw)
  To: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Lee Jones, Jaroslav Kysela, Takashi Iwai
  Cc: linux-sound, devicetree, mfd, Linus Walleij

The released Samsung product kernels all connect codec DAI 0 to MSP1
for playback and codec DAI 1 to MSP3 for capture. The codec provides
the bit and frame clocks, while ULPCLK is the machine driver's default
audio clock parent.

Add a common Samsung simple audio card and include it from Codina,
Codina-TMO, Gavini, Skomer, Kyle, Golden and Janice. Use the generic
card name "Samsung". The later product kernels use DSP_A with an
8-by-16-bit TDM frame, playback slots 0 and 1 and capture slot 0.

Codina and HD Codina retain their older DSP_B configuration with a
16-by-16-bit frame and playback slots 1 and 3. Preserve Gavini's
AMIC1A-to-VAMIC2 bias routing. Golden and Janice use the configuration
from the newest Codina-TMO product source; their board files are
byte-for-byte identical across the available later product releases.

Kyle's audio I2C bus contains only a disabled placeholder, so AB8505
remains its sole active codec.

Assisted-by: LLM
Signed-off-by: Linus Walleij <linusw@kernel.org>
---
 .../boot/dts/st/ste-ux500-samsung-codina-tmo.dts   |  1 +
 arch/arm/boot/dts/st/ste-ux500-samsung-codina.dts  | 27 +++++++++
 arch/arm/boot/dts/st/ste-ux500-samsung-gavini.dts  |  5 ++
 arch/arm/boot/dts/st/ste-ux500-samsung-golden.dts  |  1 +
 arch/arm/boot/dts/st/ste-ux500-samsung-janice.dts  |  1 +
 arch/arm/boot/dts/st/ste-ux500-samsung-kyle.dts    |  1 +
 arch/arm/boot/dts/st/ste-ux500-samsung-skomer.dts  |  1 +
 arch/arm/boot/dts/st/ste-ux500-samsung.dtsi        | 67 ++++++++++++++++++++++
 8 files changed, 104 insertions(+)

diff --git a/arch/arm/boot/dts/st/ste-ux500-samsung-codina-tmo.dts b/arch/arm/boot/dts/st/ste-ux500-samsung-codina-tmo.dts
index 8f1780d560ff..3350fc775cc9 100644
--- a/arch/arm/boot/dts/st/ste-ux500-samsung-codina-tmo.dts
+++ b/arch/arm/boot/dts/st/ste-ux500-samsung-codina-tmo.dts
@@ -21,6 +21,7 @@
 #include "ste-db8500.dtsi"
 #include "ste-ab8505.dtsi"
 #include "ste-dbx5x0-pinctrl.dtsi"
+#include "ste-ux500-samsung.dtsi"
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/leds/common.h>
 #include <dt-bindings/input/input.h>
diff --git a/arch/arm/boot/dts/st/ste-ux500-samsung-codina.dts b/arch/arm/boot/dts/st/ste-ux500-samsung-codina.dts
index 9f58a3c2d06d..069c621abede 100644
--- a/arch/arm/boot/dts/st/ste-ux500-samsung-codina.dts
+++ b/arch/arm/boot/dts/st/ste-ux500-samsung-codina.dts
@@ -22,6 +22,7 @@
 #include "ste-db8500.dtsi"
 #include "ste-ab8500.dtsi"
 #include "ste-dbx5x0-pinctrl.dtsi"
+#include "ste-ux500-samsung.dtsi"
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/leds/common.h>
 #include <dt-bindings/input/input.h>
@@ -667,6 +668,32 @@ display_out: endpoint {
 	};
 };
 
+&samsung_playback_link {
+	format = "dsp_b";
+};
+
+&samsung_capture_link {
+	format = "dsp_b";
+};
+
+&samsung_playback_cpu {
+	dai-tdm-slot-num = <16>;
+	dai-tdm-slot-tx-mask = <0 1 0 1>;
+};
+
+&samsung_codec_playback {
+	dai-tdm-slot-num = <16>;
+	dai-tdm-slot-tx-mask = <0 1 0 1>;
+};
+
+&samsung_capture_cpu {
+	dai-tdm-slot-num = <16>;
+};
+
+&samsung_codec_capture {
+	dai-tdm-slot-num = <16>;
+};
+
 &pinctrl {
 	/*
 	 * This extends the MC0_A_2 default config to include
diff --git a/arch/arm/boot/dts/st/ste-ux500-samsung-gavini.dts b/arch/arm/boot/dts/st/ste-ux500-samsung-gavini.dts
index 0c3eef7a294a..d99ee1581eb7 100644
--- a/arch/arm/boot/dts/st/ste-ux500-samsung-gavini.dts
+++ b/arch/arm/boot/dts/st/ste-ux500-samsung-gavini.dts
@@ -7,6 +7,7 @@
 #include "ste-db8500.dtsi"
 #include "ste-ab8500.dtsi"
 #include "ste-dbx5x0-pinctrl.dtsi"
+#include "ste-ux500-samsung.dtsi"
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/leds/common.h>
 #include <dt-bindings/input/input.h>
@@ -604,6 +605,10 @@ display_out: endpoint {
 	};
 };
 
+&codec {
+	stericsson,amic1a-bias-vamic2;
+};
+
 &pinctrl {
 	/*
 	 * This extends the MC0_A_2 default config to include
diff --git a/arch/arm/boot/dts/st/ste-ux500-samsung-golden.dts b/arch/arm/boot/dts/st/ste-ux500-samsung-golden.dts
index f736888474e7..730818fe073f 100644
--- a/arch/arm/boot/dts/st/ste-ux500-samsung-golden.dts
+++ b/arch/arm/boot/dts/st/ste-ux500-samsung-golden.dts
@@ -4,6 +4,7 @@
 #include "ste-db8500.dtsi"
 #include "ste-ab8505.dtsi"
 #include "ste-dbx5x0-pinctrl.dtsi"
+#include "ste-ux500-samsung.dtsi"
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/leds/common.h>
 #include <dt-bindings/input/input.h>
diff --git a/arch/arm/boot/dts/st/ste-ux500-samsung-janice.dts b/arch/arm/boot/dts/st/ste-ux500-samsung-janice.dts
index 18fb7263058e..5f69b931d173 100644
--- a/arch/arm/boot/dts/st/ste-ux500-samsung-janice.dts
+++ b/arch/arm/boot/dts/st/ste-ux500-samsung-janice.dts
@@ -7,6 +7,7 @@
 #include "ste-db8500.dtsi"
 #include "ste-ab8500.dtsi"
 #include "ste-dbx5x0-pinctrl.dtsi"
+#include "ste-ux500-samsung.dtsi"
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/leds/common.h>
 #include <dt-bindings/input/input.h>
diff --git a/arch/arm/boot/dts/st/ste-ux500-samsung-kyle.dts b/arch/arm/boot/dts/st/ste-ux500-samsung-kyle.dts
index c34d43a2b750..dc1c3d134199 100644
--- a/arch/arm/boot/dts/st/ste-ux500-samsung-kyle.dts
+++ b/arch/arm/boot/dts/st/ste-ux500-samsung-kyle.dts
@@ -11,6 +11,7 @@
 #include "ste-db8500.dtsi"
 #include "ste-ab8505.dtsi"
 #include "ste-dbx5x0-pinctrl.dtsi"
+#include "ste-ux500-samsung.dtsi"
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/leds/common.h>
 #include <dt-bindings/input/input.h>
diff --git a/arch/arm/boot/dts/st/ste-ux500-samsung-skomer.dts b/arch/arm/boot/dts/st/ste-ux500-samsung-skomer.dts
index 7bf4287f6e13..9ed01cc4fa9a 100644
--- a/arch/arm/boot/dts/st/ste-ux500-samsung-skomer.dts
+++ b/arch/arm/boot/dts/st/ste-ux500-samsung-skomer.dts
@@ -7,6 +7,7 @@
 #include "ste-db8500.dtsi"
 #include "ste-ab8505.dtsi"
 #include "ste-dbx5x0-pinctrl.dtsi"
+#include "ste-ux500-samsung.dtsi"
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/leds/common.h>
 #include <dt-bindings/input/input.h>
diff --git a/arch/arm/boot/dts/st/ste-ux500-samsung.dtsi b/arch/arm/boot/dts/st/ste-ux500-samsung.dtsi
new file mode 100644
index 000000000000..cc46f8ee1c64
--- /dev/null
+++ b/arch/arm/boot/dts/st/ste-ux500-samsung.dtsi
@@ -0,0 +1,67 @@
+// SPDX-License-Identifier: GPL-2.0-only
+
+/ {
+	samsung_sound: sound {
+		compatible = "simple-audio-card";
+		simple-audio-card,name = "Samsung";
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		samsung_playback_link: simple-audio-card,dai-link@0 {
+			reg = <0>;
+			format = "dsp_a";
+			bitclock-master = <&samsung_codec_playback>;
+			frame-master = <&samsung_codec_playback>;
+
+			samsung_playback_cpu: cpu {
+				sound-dai = <&msp1>;
+				dai-tdm-slot-num = <8>;
+				dai-tdm-slot-width = <16>;
+				dai-tdm-slot-tx-mask = <1 1>;
+			};
+
+			samsung_codec_playback: codec {
+				sound-dai = <&codec 0>;
+				dai-tdm-slot-num = <8>;
+				dai-tdm-slot-width = <16>;
+				dai-tdm-slot-tx-mask = <1 1>;
+			};
+		};
+
+		samsung_capture_link: simple-audio-card,dai-link@1 {
+			reg = <1>;
+			format = "dsp_a";
+			bitclock-master = <&samsung_codec_capture>;
+			frame-master = <&samsung_codec_capture>;
+
+			samsung_capture_cpu: cpu {
+				sound-dai = <&msp3>;
+				dai-tdm-slot-num = <8>;
+				dai-tdm-slot-width = <16>;
+				dai-tdm-slot-rx-mask = <1>;
+			};
+
+			samsung_codec_capture: codec {
+				sound-dai = <&codec 1>;
+				dai-tdm-slot-num = <8>;
+				dai-tdm-slot-width = <16>;
+				dai-tdm-slot-rx-mask = <1>;
+			};
+		};
+	};
+};
+
+&codec {
+	assigned-clocks = <&ab8500_clock AB8500_SYSCLK_INT>;
+	assigned-clock-parents = <&ab8500_clock AB8500_SYSCLK_ULP>;
+};
+
+&msp1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&msp1txrx_a_1_default>;
+	status = "okay";
+};
+
+&msp3 {
+	status = "okay";
+};

-- 
2.55.0


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

* [PATCH 8/9] ASoC: ux500: Remove the MOP500 machine driver
  2026-09-10 23:03 [PATCH 0/9] ASoC: ux500: Migrate HREF and Samsung audio to simple-card Linus Walleij
                   ` (6 preceding siblings ...)
  2026-09-10 23:03 ` [PATCH 7/9] ARM: dts: ux500: Add Samsung phone sound cards Linus Walleij
@ 2026-09-10 23:03 ` Linus Walleij
  2026-09-10 23:14   ` sashiko-bot
  2026-09-10 23:03 ` [PATCH 9/9] ARM: config: u8500: Enable the simple audio card Linus Walleij
  2026-09-10 23:10 ` [PATCH 0/9] ASoC: ux500: Migrate HREF and Samsung audio to simple-card Mark Brown
  9 siblings, 1 reply; 21+ messages in thread
From: Linus Walleij @ 2026-09-10 23:03 UTC (permalink / raw)
  To: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Lee Jones, Jaroslav Kysela, Takashi Iwai
  Cc: linux-sound, devicetree, mfd, Linus Walleij

The Ux500 boards now use simple-audio-card, so remove the machine
driver and its obsolete binding. The generic card obtains the DAI
format, clock roles, TDM layout and board routing from the device tree.

Make the codec, MSP and DMA platform components part of the Ux500 ASoC
selection. These providers were previously selected indirectly by the
machine driver.

Assisted-by: LLM
Signed-off-by: Linus Walleij <linusw@kernel.org>
---
 sound/soc/ux500/Kconfig         |  23 +--
 sound/soc/ux500/Makefile        |   3 -
 sound/soc/ux500/mop500.c        | 167 ---------------
 sound/soc/ux500/mop500_ab8500.c | 437 ----------------------------------------
 sound/soc/ux500/mop500_ab8500.h |  17 --
 5 files changed, 7 insertions(+), 640 deletions(-)

diff --git a/sound/soc/ux500/Kconfig b/sound/soc/ux500/Kconfig
index 113058060350..f3c7c216267c 100644
--- a/sound/soc/ux500/Kconfig
+++ b/sound/soc/ux500/Kconfig
@@ -6,28 +6,19 @@ menuconfig SND_SOC_UX500
 	tristate "Ux500"
 	depends on SND_SOC
 	depends on MFD_DB8500_PRCMU
+	depends on AB8500_CORE && AB8500_GPADC
+	select SND_SOC_AB8500_CODEC
+	select SND_SOC_UX500_PLAT_MSP_I2S
+	select SND_SOC_UX500_PLAT_DMA
 	help
-		Say Y if you want to enable ASoC-support for
-		any of the Ux500 platforms (e.g. U8500).
+		Say Y if you want to enable ASoC support for Ux500 platforms
+		using the AB8500 or AB8505 codec.
 
 config SND_SOC_UX500_PLAT_MSP_I2S
 	tristate
 	depends on SND_SOC_UX500
 
 config SND_SOC_UX500_PLAT_DMA
-	tristate "Platform - DB8500 (DMA)"
+	tristate
 	depends on SND_SOC_UX500
 	select SND_SOC_GENERIC_DMAENGINE_PCM
-	help
-		Say Y if you want to enable the Ux500 platform-driver.
-
-config SND_SOC_UX500_MACH_MOP500
-	tristate "Machine - MOP500 (Ux500 + AB8500)"
-	depends on AB8500_CORE && AB8500_GPADC && SND_SOC_UX500
-	select SND_SOC_AB8500_CODEC
-	select SND_SOC_UX500_PLAT_MSP_I2S
-	select SND_SOC_UX500_PLAT_DMA
-	help
-		Select this to enable the MOP500 machine-driver.
-		This will enable platform-drivers for: Ux500
-		This will enable codec-drivers for: AB8500
diff --git a/sound/soc/ux500/Makefile b/sound/soc/ux500/Makefile
index a63787d9d664..83e7aeff70f8 100644
--- a/sound/soc/ux500/Makefile
+++ b/sound/soc/ux500/Makefile
@@ -6,6 +6,3 @@ obj-$(CONFIG_SND_SOC_UX500_PLAT_MSP_I2S) += snd-soc-ux500-plat-msp-i2s.o
 
 snd-soc-ux500-plat-dma-y := ux500_pcm.o
 obj-$(CONFIG_SND_SOC_UX500_PLAT_DMA) += snd-soc-ux500-plat-dma.o
-
-snd-soc-ux500-mach-mop500-y := mop500.o mop500_ab8500.o
-obj-$(CONFIG_SND_SOC_UX500_MACH_MOP500) += snd-soc-ux500-mach-mop500.o
diff --git a/sound/soc/ux500/mop500.c b/sound/soc/ux500/mop500.c
deleted file mode 100644
index 6d196b4b8802..000000000000
--- a/sound/soc/ux500/mop500.c
+++ /dev/null
@@ -1,167 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Copyright (C) ST-Ericsson SA 2012
- *
- * Author: Ola Lilja (ola.o.lilja@stericsson.com)
- *         for ST-Ericsson.
- */
-
-#include <asm/mach-types.h>
-
-#include <linux/module.h>
-#include <linux/io.h>
-#include <linux/spi/spi.h>
-#include <linux/of.h>
-
-#include <sound/soc.h>
-#include <sound/initval.h>
-
-#include "ux500_pcm.h"
-#include "ux500_msp_dai.h"
-
-#include "mop500_ab8500.h"
-
-/* Define the whole MOP500 soundcard, linking platform to the codec-drivers  */
-SND_SOC_DAILINK_DEFS(link1,
-	DAILINK_COMP_ARRAY(COMP_CPU("ux500-msp-i2s.1")),
-	DAILINK_COMP_ARRAY(COMP_CODEC("ab8500-codec.0", "ab8500-codec-dai.0")),
-	DAILINK_COMP_ARRAY(COMP_PLATFORM("ux500-msp-i2s.1")));
-
-SND_SOC_DAILINK_DEFS(link2,
-	DAILINK_COMP_ARRAY(COMP_CPU("ux500-msp-i2s.3")),
-	DAILINK_COMP_ARRAY(COMP_CODEC("ab8500-codec.0", "ab8500-codec-dai.1")),
-	DAILINK_COMP_ARRAY(COMP_PLATFORM("ux500-msp-i2s.3")));
-
-static struct snd_soc_dai_link mop500_dai_links[] = {
-	{
-		.name = "ab8500_0",
-		.stream_name = "ab8500_0",
-		.init = mop500_ab8500_machine_init,
-		.ops = mop500_ab8500_ops,
-		SND_SOC_DAILINK_REG(link1),
-	},
-	{
-		.name = "ab8500_1",
-		.stream_name = "ab8500_1",
-		.init = NULL,
-		.ops = mop500_ab8500_ops,
-		SND_SOC_DAILINK_REG(link2),
-	},
-};
-
-static struct snd_soc_card mop500_card = {
-	.name = "MOP500-card",
-	.owner = THIS_MODULE,
-	.probe = NULL,
-	.dai_link = mop500_dai_links,
-	.num_links = ARRAY_SIZE(mop500_dai_links),
-};
-
-static void mop500_of_node_put(void)
-{
-	int i;
-
-	for (i = 0; i < 2; i++)
-		of_node_put(mop500_dai_links[i].cpus->of_node);
-
-	/* Both links use the same codec, which is refcounted only once */
-	of_node_put(mop500_dai_links[0].codecs->of_node);
-}
-
-static int mop500_of_probe(struct snd_soc_card *card)
-{
-	struct device *dev = card->dev;
-	struct device_node *codec_np, *msp_np[2];
-	struct device_node *np = dev->of_node;
-	int i;
-
-	msp_np[0] = of_parse_phandle(np, "stericsson,cpu-dai", 0);
-	msp_np[1] = of_parse_phandle(np, "stericsson,cpu-dai", 1);
-	codec_np  = of_parse_phandle(np, "stericsson,audio-codec", 0);
-
-	if (!(msp_np[0] && msp_np[1] && codec_np)) {
-		dev_err(dev, "Phandle missing or invalid\n");
-		for (i = 0; i < 2; i++)
-			of_node_put(msp_np[i]);
-		of_node_put(codec_np);
-		return -EINVAL;
-	}
-
-	for (i = 0; i < 2; i++) {
-		mop500_dai_links[i].cpus->of_node = msp_np[i];
-		mop500_dai_links[i].cpus->dai_name = NULL;
-		mop500_dai_links[i].platforms->of_node = msp_np[i];
-		mop500_dai_links[i].platforms->name = NULL;
-		mop500_dai_links[i].codecs->of_node = codec_np;
-		mop500_dai_links[i].codecs->name = NULL;
-	}
-
-	snd_soc_of_parse_card_name(card, "stericsson,card-name");
-
-	return 0;
-}
-
-static int mop500_probe(struct platform_device *pdev)
-{
-	int ret;
-
-	dev_dbg(&pdev->dev, "%s: Enter.\n", __func__);
-
-	mop500_card.dev = &pdev->dev;
-
-	ret = mop500_of_probe(&mop500_card);
-	if (ret)
-		return ret;
-
-	dev_dbg(&pdev->dev, "%s: Card %s: Set platform drvdata.\n",
-		__func__, mop500_card.name);
-
-	snd_soc_card_set_drvdata(&mop500_card, NULL);
-
-	dev_dbg(&pdev->dev, "%s: Card %s: num_links = %d\n",
-		__func__, mop500_card.name, mop500_card.num_links);
-	dev_dbg(&pdev->dev, "%s: Card %s: DAI-link 0: name = %s\n",
-		__func__, mop500_card.name, mop500_card.dai_link[0].name);
-	dev_dbg(&pdev->dev, "%s: Card %s: DAI-link 0: stream_name = %s\n",
-		__func__, mop500_card.name,
-		mop500_card.dai_link[0].stream_name);
-
-	ret = snd_soc_register_card(&mop500_card);
-	if (ret)
-		dev_err(&pdev->dev,
-			"Error: snd_soc_register_card failed (%d)!\n", ret);
-
-	return ret;
-}
-
-static void mop500_remove(struct platform_device *pdev)
-{
-	struct snd_soc_card *card = platform_get_drvdata(pdev);
-
-	pr_debug("%s: Enter.\n", __func__);
-
-	snd_soc_unregister_card(card);
-	mop500_ab8500_remove(card);
-	mop500_of_node_put();
-}
-
-static const struct of_device_id snd_soc_mop500_match[] = {
-	{ .compatible = "stericsson,snd-soc-mop500", },
-	{},
-};
-MODULE_DEVICE_TABLE(of, snd_soc_mop500_match);
-
-static struct platform_driver snd_soc_mop500_driver = {
-	.driver = {
-		.name = "snd-soc-mop500",
-		.of_match_table = snd_soc_mop500_match,
-	},
-	.probe = mop500_probe,
-	.remove = mop500_remove,
-};
-
-module_platform_driver(snd_soc_mop500_driver);
-
-MODULE_LICENSE("GPL v2");
-MODULE_DESCRIPTION("ASoC MOP500 board driver");
-MODULE_AUTHOR("Ola Lilja");
diff --git a/sound/soc/ux500/mop500_ab8500.c b/sound/soc/ux500/mop500_ab8500.c
deleted file mode 100644
index feb683c55d11..000000000000
--- a/sound/soc/ux500/mop500_ab8500.c
+++ /dev/null
@@ -1,437 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Copyright (C) ST-Ericsson SA 2012
- *
- * Author: Ola Lilja <ola.o.lilja@stericsson.com>,
- *         Kristoffer Karlsson <kristoffer.karlsson@stericsson.com>
- *         for ST-Ericsson.
- */
-
-#include <linux/module.h>
-#include <linux/device.h>
-#include <linux/io.h>
-#include <linux/clk.h>
-#include <linux/mutex.h>
-
-#include <sound/soc.h>
-#include <sound/soc-dapm.h>
-#include <sound/pcm.h>
-#include <sound/pcm_params.h>
-
-#include "ux500_pcm.h"
-#include "ux500_msp_dai.h"
-#include "mop500_ab8500.h"
-#include "../codecs/ab8500-codec.h"
-
-#define TX_SLOT_MONO	0x0008
-#define TX_SLOT_STEREO	0x000a
-#define RX_SLOT_MONO	0x0001
-#define RX_SLOT_STEREO	0x0003
-#define TX_SLOT_8CH	0x00FF
-#define RX_SLOT_8CH	0x00FF
-
-#define DEF_TX_SLOTS	TX_SLOT_STEREO
-#define DEF_RX_SLOTS	RX_SLOT_MONO
-
-#define DRIVERMODE_NORMAL	0
-#define DRIVERMODE_CODEC_ONLY	1
-
-/* Slot configuration */
-static unsigned int tx_slots = DEF_TX_SLOTS;
-static unsigned int rx_slots = DEF_RX_SLOTS;
-
-/* Configuration consistency parameters */
-static DEFINE_MUTEX(mop500_ab8500_params_lock);
-static unsigned long mop500_ab8500_usage;
-static int mop500_ab8500_rate;
-static int mop500_ab8500_channels;
-
-/* Clocks */
-static const char * const enum_mclk[] = {
-	"SYSCLK",
-	"ULPCLK"
-};
-enum mclk {
-	MCLK_SYSCLK,
-	MCLK_ULPCLK,
-};
-
-static SOC_ENUM_SINGLE_EXT_DECL(soc_enum_mclk, enum_mclk);
-
-/* Private data for machine-part MOP500<->AB8500 */
-struct mop500_ab8500_drvdata {
-	/* Clocks */
-	enum mclk mclk_sel;
-	struct clk *clk_ptr_intclk;
-	struct clk *clk_ptr_sysclk;
-	struct clk *clk_ptr_ulpclk;
-};
-
-static inline const char *get_mclk_str(enum mclk mclk_sel)
-{
-	switch (mclk_sel) {
-	case MCLK_SYSCLK:
-		return "SYSCLK";
-	case MCLK_ULPCLK:
-		return "ULPCLK";
-	default:
-		return "Unknown";
-	}
-}
-
-static int mop500_ab8500_set_mclk(struct device *dev,
-				struct mop500_ab8500_drvdata *drvdata)
-{
-	int status;
-	struct clk *clk_ptr;
-
-	if (IS_ERR(drvdata->clk_ptr_intclk)) {
-		dev_err(dev,
-			"%s: ERROR: intclk not initialized!\n", __func__);
-		return -EIO;
-	}
-
-	switch (drvdata->mclk_sel) {
-	case MCLK_SYSCLK:
-		clk_ptr = drvdata->clk_ptr_sysclk;
-		break;
-	case MCLK_ULPCLK:
-		clk_ptr = drvdata->clk_ptr_ulpclk;
-		break;
-	default:
-		return -EINVAL;
-	}
-
-	if (IS_ERR(clk_ptr)) {
-		dev_err(dev, "%s: ERROR: %s not initialized!\n", __func__,
-			get_mclk_str(drvdata->mclk_sel));
-		return -EIO;
-	}
-
-	status = clk_set_parent(drvdata->clk_ptr_intclk, clk_ptr);
-	if (status)
-		dev_err(dev,
-			"%s: ERROR: Setting intclk parent to %s failed (ret = %d)!",
-			__func__, get_mclk_str(drvdata->mclk_sel), status);
-	else
-		dev_dbg(dev,
-			"%s: intclk parent changed to %s.\n",
-			__func__, get_mclk_str(drvdata->mclk_sel));
-
-	return status;
-}
-
-/*
- * Control-events
- */
-
-static int mclk_input_control_get(struct snd_kcontrol *kcontrol,
-				struct snd_ctl_elem_value *ucontrol)
-{
-	struct snd_soc_card *card = snd_kcontrol_chip(kcontrol);
-	struct mop500_ab8500_drvdata *drvdata =
-				snd_soc_card_get_drvdata(card);
-
-	ucontrol->value.enumerated.item[0] = drvdata->mclk_sel;
-
-	return 0;
-}
-
-static int mclk_input_control_put(struct snd_kcontrol *kcontrol,
-				struct snd_ctl_elem_value *ucontrol)
-{
-	struct snd_soc_card *card = snd_kcontrol_chip(kcontrol);
-	struct mop500_ab8500_drvdata *drvdata =
-				snd_soc_card_get_drvdata(card);
-	unsigned int val = ucontrol->value.enumerated.item[0];
-
-	if (val > (unsigned int)MCLK_ULPCLK)
-		return -EINVAL;
-	if (drvdata->mclk_sel == val)
-		return 0;
-
-	drvdata->mclk_sel = val;
-
-	return 1;
-}
-
-/*
- * Controls
- */
-
-static struct snd_kcontrol_new mop500_ab8500_ctrls[] = {
-	SOC_ENUM_EXT("Master Clock Select",
-		soc_enum_mclk,
-		mclk_input_control_get, mclk_input_control_put),
-	SOC_DAPM_PIN_SWITCH("Headset Left"),
-	SOC_DAPM_PIN_SWITCH("Headset Right"),
-	SOC_DAPM_PIN_SWITCH("Earpiece"),
-	SOC_DAPM_PIN_SWITCH("Speaker Left"),
-	SOC_DAPM_PIN_SWITCH("Speaker Right"),
-	SOC_DAPM_PIN_SWITCH("LineOut Left"),
-	SOC_DAPM_PIN_SWITCH("LineOut Right"),
-	SOC_DAPM_PIN_SWITCH("Vibra 1"),
-	SOC_DAPM_PIN_SWITCH("Vibra 2"),
-	SOC_DAPM_PIN_SWITCH("Mic 1"),
-	SOC_DAPM_PIN_SWITCH("Mic 2"),
-	SOC_DAPM_PIN_SWITCH("LineIn Left"),
-	SOC_DAPM_PIN_SWITCH("LineIn Right"),
-	SOC_DAPM_PIN_SWITCH("DMic 1"),
-	SOC_DAPM_PIN_SWITCH("DMic 2"),
-	SOC_DAPM_PIN_SWITCH("DMic 3"),
-	SOC_DAPM_PIN_SWITCH("DMic 4"),
-	SOC_DAPM_PIN_SWITCH("DMic 5"),
-	SOC_DAPM_PIN_SWITCH("DMic 6"),
-};
-
-/* ASoC */
-
-static int mop500_ab8500_startup(struct snd_pcm_substream *substream)
-{
-	struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);
-
-	/* Set audio-clock source */
-	return mop500_ab8500_set_mclk(rtd->card->dev,
-				snd_soc_card_get_drvdata(rtd->card));
-}
-
-static void mop500_ab8500_shutdown(struct snd_pcm_substream *substream)
-{
-	struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);
-	struct device *dev = rtd->card->dev;
-
-	dev_dbg(dev, "%s: Enter\n", __func__);
-
-	/* Reset slots configuration to default(s) */
-	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-		tx_slots = DEF_TX_SLOTS;
-	else
-		rx_slots = DEF_RX_SLOTS;
-}
-
-static int mop500_ab8500_hw_params(struct snd_pcm_substream *substream,
-			struct snd_pcm_hw_params *params)
-{
-	struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);
-	struct snd_soc_dai *codec_dai = snd_soc_rtd_to_codec(rtd, 0);
-	struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
-	struct device *dev = rtd->card->dev;
-	unsigned int fmt;
-	int channels, ret = 0, driver_mode, slots;
-	unsigned int sw_codec, sw_cpu;
-	bool is_playback;
-
-	dev_dbg(dev, "%s: Enter\n", __func__);
-
-	dev_dbg(dev, "%s: substream->pcm->name = %s\n"
-		"substream->pcm->id = %s.\n"
-		"substream->name = %s.\n"
-		"substream->number = %d.\n",
-		__func__,
-		substream->pcm->name,
-		substream->pcm->id,
-		substream->name,
-		substream->number);
-
-	/* Ensure configuration consistency between DAIs */
-	scoped_guard(mutex, &mop500_ab8500_params_lock) {
-		if (mop500_ab8500_usage) {
-			if (mop500_ab8500_rate != params_rate(params) ||
-			    mop500_ab8500_channels != params_channels(params)) {
-				return -EBUSY;
-			}
-		} else {
-			mop500_ab8500_rate = params_rate(params);
-			mop500_ab8500_channels = params_channels(params);
-		}
-		__set_bit(cpu_dai->id, &mop500_ab8500_usage);
-	}
-
-	channels = params_channels(params);
-
-	switch (params_format(params)) {
-	case SNDRV_PCM_FORMAT_S32_LE:
-		sw_cpu = 32;
-		break;
-
-	case SNDRV_PCM_FORMAT_S16_LE:
-		sw_cpu = 16;
-		break;
-
-	default:
-		return -EINVAL;
-	}
-
-	/* Setup codec depending on driver-mode */
-	if (channels == 8)
-		driver_mode = DRIVERMODE_CODEC_ONLY;
-	else
-		driver_mode = DRIVERMODE_NORMAL;
-	dev_dbg(dev, "%s: Driver-mode: %s.\n", __func__,
-		(driver_mode == DRIVERMODE_NORMAL) ? "NORMAL" : "CODEC_ONLY");
-
-	/* Setup format */
-
-	if (driver_mode == DRIVERMODE_NORMAL) {
-		fmt = SND_SOC_DAIFMT_DSP_A |
-			SND_SOC_DAIFMT_CBP_CFP |
-			SND_SOC_DAIFMT_NB_NF |
-			SND_SOC_DAIFMT_CONT;
-	} else {
-		fmt = SND_SOC_DAIFMT_DSP_A |
-			SND_SOC_DAIFMT_CBP_CFP |
-			SND_SOC_DAIFMT_NB_NF |
-			SND_SOC_DAIFMT_GATED;
-	}
-
-	ret = snd_soc_runtime_set_dai_fmt(rtd, fmt);
-	if (ret)
-		return ret;
-
-	/* Setup TDM-slots */
-
-	is_playback = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK);
-	switch (channels) {
-	case 1:
-		slots = 16;
-		tx_slots = (is_playback) ? TX_SLOT_MONO : 0;
-		rx_slots = (is_playback) ? 0 : RX_SLOT_MONO;
-		break;
-	case 2:
-		slots = 16;
-		tx_slots = (is_playback) ? TX_SLOT_STEREO : 0;
-		rx_slots = (is_playback) ? 0 : RX_SLOT_STEREO;
-		break;
-	case 8:
-		slots = 16;
-		tx_slots = (is_playback) ? TX_SLOT_8CH : 0;
-		rx_slots = (is_playback) ? 0 : RX_SLOT_8CH;
-		break;
-	default:
-		return -EINVAL;
-	}
-
-	if (driver_mode == DRIVERMODE_NORMAL)
-		sw_codec = sw_cpu;
-	else
-		sw_codec = 20;
-
-	dev_dbg(dev, "%s: CPU-DAI TDM: TX=0x%04X RX=0x%04x\n", __func__,
-		tx_slots, rx_slots);
-	ret = snd_soc_dai_set_tdm_slot(cpu_dai, tx_slots, rx_slots, slots,
-				sw_cpu);
-	if (ret)
-		return ret;
-
-	dev_dbg(dev, "%s: CODEC-DAI TDM: TX=0x%04X RX=0x%04x\n", __func__,
-		tx_slots, rx_slots);
-	ret = snd_soc_dai_set_tdm_slot(codec_dai, tx_slots, rx_slots, slots,
-				sw_codec);
-	if (ret)
-		return ret;
-
-	return 0;
-}
-
-static int mop500_ab8500_hw_free(struct snd_pcm_substream *substream)
-{
-	struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);
-	struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
-
-	guard(mutex)(&mop500_ab8500_params_lock);
-	__clear_bit(cpu_dai->id, &mop500_ab8500_usage);
-
-	return 0;
-}
-
-const struct snd_soc_ops mop500_ab8500_ops[] = {
-	{
-		.hw_params = mop500_ab8500_hw_params,
-		.hw_free = mop500_ab8500_hw_free,
-		.startup = mop500_ab8500_startup,
-		.shutdown = mop500_ab8500_shutdown,
-	}
-};
-
-int mop500_ab8500_machine_init(struct snd_soc_pcm_runtime *rtd)
-{
-	struct snd_soc_dapm_context *dapm = snd_soc_card_to_dapm(rtd->card);
-	struct device *dev = rtd->card->dev;
-	struct mop500_ab8500_drvdata *drvdata;
-	int ret;
-
-	dev_dbg(dev, "%s Enter.\n", __func__);
-
-	/* Create driver private-data struct */
-	drvdata = devm_kzalloc(dev, sizeof(struct mop500_ab8500_drvdata),
-			GFP_KERNEL);
-
-	if (!drvdata)
-		return -ENOMEM;
-
-	snd_soc_card_set_drvdata(rtd->card, drvdata);
-
-	/* Setup clocks */
-
-	drvdata->clk_ptr_sysclk = clk_get(dev, "sysclk");
-	if (IS_ERR(drvdata->clk_ptr_sysclk))
-		dev_warn(dev, "%s: WARNING: clk_get failed for 'sysclk'!\n",
-			__func__);
-	drvdata->clk_ptr_ulpclk = clk_get(dev, "ulpclk");
-	if (IS_ERR(drvdata->clk_ptr_ulpclk))
-		dev_warn(dev, "%s: WARNING: clk_get failed for 'ulpclk'!\n",
-			__func__);
-	drvdata->clk_ptr_intclk = clk_get(dev, "intclk");
-	if (IS_ERR(drvdata->clk_ptr_intclk))
-		dev_warn(dev, "%s: WARNING: clk_get failed for 'intclk'!\n",
-			__func__);
-
-	/* Set intclk default parent to ulpclk */
-	drvdata->mclk_sel = MCLK_ULPCLK;
-	ret = mop500_ab8500_set_mclk(dev, drvdata);
-	if (ret < 0)
-		dev_warn(dev, "%s: WARNING: mop500_ab8500_set_mclk!\n",
-			__func__);
-
-	drvdata->mclk_sel = MCLK_ULPCLK;
-
-	/* Add controls */
-	ret = snd_soc_add_card_controls(rtd->card, mop500_ab8500_ctrls,
-			ARRAY_SIZE(mop500_ab8500_ctrls));
-	if (ret < 0) {
-		pr_err("%s: Failed to add machine-controls (%d)!\n",
-				__func__, ret);
-		return ret;
-	}
-
-	ret = snd_soc_dapm_disable_pin(dapm, "Earpiece");
-	ret |= snd_soc_dapm_disable_pin(dapm, "Speaker Left");
-	ret |= snd_soc_dapm_disable_pin(dapm, "Speaker Right");
-	ret |= snd_soc_dapm_disable_pin(dapm, "LineOut Left");
-	ret |= snd_soc_dapm_disable_pin(dapm, "LineOut Right");
-	ret |= snd_soc_dapm_disable_pin(dapm, "Vibra 1");
-	ret |= snd_soc_dapm_disable_pin(dapm, "Vibra 2");
-	ret |= snd_soc_dapm_disable_pin(dapm, "Mic 1");
-	ret |= snd_soc_dapm_disable_pin(dapm, "Mic 2");
-	ret |= snd_soc_dapm_disable_pin(dapm, "LineIn Left");
-	ret |= snd_soc_dapm_disable_pin(dapm, "LineIn Right");
-	ret |= snd_soc_dapm_disable_pin(dapm, "DMic 1");
-	ret |= snd_soc_dapm_disable_pin(dapm, "DMic 2");
-	ret |= snd_soc_dapm_disable_pin(dapm, "DMic 3");
-	ret |= snd_soc_dapm_disable_pin(dapm, "DMic 4");
-	ret |= snd_soc_dapm_disable_pin(dapm, "DMic 5");
-	ret |= snd_soc_dapm_disable_pin(dapm, "DMic 6");
-
-	return ret;
-}
-
-void mop500_ab8500_remove(struct snd_soc_card *card)
-{
-	struct mop500_ab8500_drvdata *drvdata = snd_soc_card_get_drvdata(card);
-
-	clk_put(drvdata->clk_ptr_sysclk);
-	clk_put(drvdata->clk_ptr_ulpclk);
-	clk_put(drvdata->clk_ptr_intclk);
-
-	snd_soc_card_set_drvdata(card, NULL);
-}
diff --git a/sound/soc/ux500/mop500_ab8500.h b/sound/soc/ux500/mop500_ab8500.h
deleted file mode 100644
index 98de80a9cc4f..000000000000
--- a/sound/soc/ux500/mop500_ab8500.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * Copyright (C) ST-Ericsson SA 2012
- *
- * Author: Ola Lilja <ola.o.lilja@stericsson.com>
- *         for ST-Ericsson.
- */
-
-#ifndef MOP500_AB8500_H
-#define MOP500_AB8500_H
-
-extern const struct snd_soc_ops mop500_ab8500_ops[];
-
-int mop500_ab8500_machine_init(struct snd_soc_pcm_runtime *rtd);
-void mop500_ab8500_remove(struct snd_soc_card *card);
-
-#endif

-- 
2.55.0


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

* [PATCH 9/9] ARM: config: u8500: Enable the simple audio card
  2026-09-10 23:03 [PATCH 0/9] ASoC: ux500: Migrate HREF and Samsung audio to simple-card Linus Walleij
                   ` (7 preceding siblings ...)
  2026-09-10 23:03 ` [PATCH 8/9] ASoC: ux500: Remove the MOP500 machine driver Linus Walleij
@ 2026-09-10 23:03 ` Linus Walleij
  2026-09-10 23:09   ` sashiko-bot
  2026-09-10 23:10 ` [PATCH 0/9] ASoC: ux500: Migrate HREF and Samsung audio to simple-card Mark Brown
  9 siblings, 1 reply; 21+ messages in thread
From: Linus Walleij @ 2026-09-10 23:03 UTC (permalink / raw)
  To: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Lee Jones, Jaroslav Kysela, Takashi Iwai
  Cc: linux-sound, devicetree, mfd, Linus Walleij

Replace the removed MOP500 machine-driver option with the generic simple
audio card used by the new Ux500 device tree description.

Assisted-by: LLM
Signed-off-by: Linus Walleij <linusw@kernel.org>
---
 arch/arm/configs/u8500_defconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/configs/u8500_defconfig b/arch/arm/configs/u8500_defconfig
index 2fe25f5eb9a5..c469526b04e3 100644
--- a/arch/arm/configs/u8500_defconfig
+++ b/arch/arm/configs/u8500_defconfig
@@ -122,7 +122,7 @@ CONFIG_SOUND=y
 CONFIG_SND=y
 CONFIG_SND_SOC=y
 CONFIG_SND_SOC_UX500=y
-CONFIG_SND_SOC_UX500_MACH_MOP500=y
+CONFIG_SND_SIMPLE_CARD=y
 CONFIG_USB_MUSB_HDRC=y
 CONFIG_USB_MUSB_UX500=y
 CONFIG_MUSB_PIO_ONLY=y

-- 
2.55.0


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

* Re: [PATCH 3/9] ASoC: dt-bindings: ux500: Remove MOP500 sound card binding
  2026-09-10 23:03 ` [PATCH 3/9] ASoC: dt-bindings: ux500: Remove MOP500 sound card binding Linus Walleij
@ 2026-09-10 23:07   ` sashiko-bot
  0 siblings, 0 replies; 21+ messages in thread
From: sashiko-bot @ 2026-09-10 23:07 UTC (permalink / raw)
  To: Linus Walleij; +Cc: devicetree, robh, conor+dt, mfd, lee

> The Ux500 device trees now use simple-audio-card and no longer contain
> the MOP500-specific compatible or properties. Remove the obsolete text
> binding rather than retaining an unused legacy ABI.
> 
> Assisted-by: LLM
> Signed-off-by: Linus Walleij <linusw@kernel.org>

Sashiko has reviewed this patch and found no issues. It looks great!

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260911-ux500-simple-sound-v1-0-6771ac714e82@kernel.org?part=3


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

* Re: [PATCH 5/9] ARM: dts: ux500: Add sound DAI provider cells
  2026-09-10 23:03 ` [PATCH 5/9] ARM: dts: ux500: Add sound DAI provider cells Linus Walleij
@ 2026-09-10 23:08   ` sashiko-bot
  0 siblings, 0 replies; 21+ messages in thread
From: sashiko-bot @ 2026-09-10 23:08 UTC (permalink / raw)
  To: Linus Walleij; +Cc: mfd, robh, conor+dt, devicetree, lee

> Describe each MSP as a single-DAI provider and the AB8500 codec as a
> two-DAI provider. This allows generic sound cards to reference the
> playback and capture interfaces by phandle.
> 
> Assisted-by: LLM
> Signed-off-by: Linus Walleij <linusw@kernel.org>

Sashiko has reviewed this patch and found no issues. It looks great!

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260911-ux500-simple-sound-v1-0-6771ac714e82@kernel.org?part=5


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

* Re: [PATCH 2/9] mfd: dt-bindings: ab8500: Describe codec DAI and microphone wiring
  2026-09-10 23:03 ` [PATCH 2/9] mfd: dt-bindings: ab8500: Describe codec DAI and microphone wiring Linus Walleij
@ 2026-09-10 23:08   ` sashiko-bot
  0 siblings, 0 replies; 21+ messages in thread
From: sashiko-bot @ 2026-09-10 23:08 UTC (permalink / raw)
  To: Linus Walleij; +Cc: robh, devicetree, conor+dt, lee, mfd

> The AB8500 and AB8505 codec block exposes two digital audio
> interfaces. Define the codec as a one-cell sound DAI provider so
> generic sound cards can select either interface.
> 
> The codec binding conversion also omitted the analog microphone type
> and bias-routing properties supported by the driver and documented by
> the old text binding. Restore them so boards can describe the codec
> wiring without schema warnings.
> 
> Assisted-by: LLM
> Signed-off-by: Linus Walleij <linusw@kernel.org>

Sashiko has reviewed this patch and found no issues. It looks great!

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260911-ux500-simple-sound-v1-0-6771ac714e82@kernel.org?part=2


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

* Re: [PATCH 9/9] ARM: config: u8500: Enable the simple audio card
  2026-09-10 23:03 ` [PATCH 9/9] ARM: config: u8500: Enable the simple audio card Linus Walleij
@ 2026-09-10 23:09   ` sashiko-bot
  0 siblings, 0 replies; 21+ messages in thread
From: sashiko-bot @ 2026-09-10 23:09 UTC (permalink / raw)
  To: Linus Walleij; +Cc: devicetree, robh, lee, conor+dt, mfd

> Replace the removed MOP500 machine-driver option with the generic simple
> audio card used by the new Ux500 device tree description.
> 
> Assisted-by: LLM
> Signed-off-by: Linus Walleij <linusw@kernel.org>

Sashiko has reviewed this patch and found no issues. It looks great!

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260911-ux500-simple-sound-v1-0-6771ac714e82@kernel.org?part=9


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

* Re: [PATCH 1/9] ASoC: dt-bindings: ux500: Convert MSP binding to DT schema
  2026-09-10 23:03 ` [PATCH 1/9] ASoC: dt-bindings: ux500: Convert MSP binding to DT schema Linus Walleij
@ 2026-09-10 23:10   ` sashiko-bot
  0 siblings, 0 replies; 21+ messages in thread
From: sashiko-bot @ 2026-09-10 23:10 UTC (permalink / raw)
  To: Linus Walleij; +Cc: robh, conor+dt, lee, mfd, devicetree

> Replace the incomplete text binding with a DT schema that describes
> the clocks, reset, DMA channels and power supply consumed by the
> driver. Define the MSP as a zero-cell sound DAI provider so generic
> sound cards can reference it.
> 
> Assisted-by: LLM
> Signed-off-by: Linus Walleij <linusw@kernel.org>

Sashiko has reviewed this patch and found no issues. It looks great!

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260911-ux500-simple-sound-v1-0-6771ac714e82@kernel.org?part=1


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

* Re: [PATCH 0/9] ASoC: ux500: Migrate HREF and Samsung audio to simple-card
  2026-09-10 23:03 [PATCH 0/9] ASoC: ux500: Migrate HREF and Samsung audio to simple-card Linus Walleij
                   ` (8 preceding siblings ...)
  2026-09-10 23:03 ` [PATCH 9/9] ARM: config: u8500: Enable the simple audio card Linus Walleij
@ 2026-09-10 23:10 ` Mark Brown
  2026-09-11  8:36   ` Linus Walleij
  9 siblings, 1 reply; 21+ messages in thread
From: Mark Brown @ 2026-09-10 23:10 UTC (permalink / raw)
  To: Linus Walleij
  Cc: Liam Girdwood, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Lee Jones, Jaroslav Kysela, Takashi Iwai, linux-sound, devicetree,
	mfd

[-- Attachment #1: Type: text/plain, Size: 705 bytes --]

On Fri, Sep 11, 2026 at 01:03:43AM +0200, Linus Walleij wrote:
> The Ux500 HREF500 and HREF520 audio support still relies on a
> MOP500-specific machine driver and ad-hoc text bindings.
> 
> Convert the MSP binding to DT schema and make the MSP and AB8500 codec
> nodes proper sound DAI providers.
> 
> Move the fixed DSP_A and TDM policy into those links.
> 
> Add a common two-link simple audio card named Samsung in
> ste-ux500-samsung.dtsi and include it from the seven supported Samsung
> U8500 phones.

The modern thing is to use audio-graph-card2 (which scales down to the
use cases that simple- handles with a more flexible binding).

What's your thinking on merge strategy here?

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

* Re: [PATCH 8/9] ASoC: ux500: Remove the MOP500 machine driver
  2026-09-10 23:03 ` [PATCH 8/9] ASoC: ux500: Remove the MOP500 machine driver Linus Walleij
@ 2026-09-10 23:14   ` sashiko-bot
  0 siblings, 0 replies; 21+ messages in thread
From: sashiko-bot @ 2026-09-10 23:14 UTC (permalink / raw)
  To: Linus Walleij; +Cc: robh, conor+dt, mfd, devicetree, lee

> The Ux500 boards now use simple-audio-card, so remove the machine
> driver and its obsolete binding. The generic card obtains the DAI
> format, clock roles, TDM layout and board routing from the device tree.
> 
> Make the codec, MSP and DMA platform components part of the Ux500 ASoC
> selection. These providers were previously selected indirectly by the
> machine driver.
> 
> Assisted-by: LLM
> Signed-off-by: Linus Walleij <linusw@kernel.org>

Sashiko has reviewed this patch and found no issues. It looks great!

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260911-ux500-simple-sound-v1-0-6771ac714e82@kernel.org?part=8


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

* Re: [PATCH 6/9] ARM: dts: ux500: Convert HREF audio card to simple-card
  2026-09-10 23:03 ` [PATCH 6/9] ARM: dts: ux500: Convert HREF audio card to simple-card Linus Walleij
@ 2026-09-10 23:14   ` sashiko-bot
  0 siblings, 0 replies; 21+ messages in thread
From: sashiko-bot @ 2026-09-10 23:14 UTC (permalink / raw)
  To: Linus Walleij; +Cc: devicetree, conor+dt, mfd, robh, lee

> Describe the HREF500 and HREF520 sound hardware with two-link simple
> audio cards in their PMIC-specific HREF DTSIs, and name the card
> HREF-500. MSP1 drives codec playback while MSP3 receives codec capture
> on the shared DB8500 v2 interface.
> 
> Describe the DSP_A format, codec-provided clocks, 16-by-16-bit TDM
> frame and active slots directly in the links.
> 
> Keep each complete card, including its links, connector widgets, routes
> and pin switches, in the existing PMIC-specific HREF DTSI. The AB8500
> variant exposes six digital microphone endpoints. AB8505 has neither
> the digital microphone interface nor its VDMIC regulator, so leave
> these endpoints out of HREF520 and remove its stale regulator and pin
> configuration nodes.
> 
> Select ULPCLK as the fixed parent of the codec audio clock in the
> HREF-specific codec DTSIs. This replaces the machine driver clock
> control with declarative board policy.
> 
> Fixes: 4ecae2ae9535 ("ARM: dts: ux500-href: Switch HREF520 to AB8505")
> Assisted-by: LLM
> Signed-off-by: Linus Walleij <linusw@kernel.org>

Sashiko has reviewed this patch and found no issues. It looks great!

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260911-ux500-simple-sound-v1-0-6771ac714e82@kernel.org?part=6


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

* Re: [PATCH 7/9] ARM: dts: ux500: Add Samsung phone sound cards
  2026-09-10 23:03 ` [PATCH 7/9] ARM: dts: ux500: Add Samsung phone sound cards Linus Walleij
@ 2026-09-10 23:15   ` sashiko-bot
  0 siblings, 0 replies; 21+ messages in thread
From: sashiko-bot @ 2026-09-10 23:15 UTC (permalink / raw)
  To: Linus Walleij; +Cc: mfd, lee, robh, devicetree, conor+dt

> The released Samsung product kernels all connect codec DAI 0 to MSP1
> for playback and codec DAI 1 to MSP3 for capture. The codec provides
> the bit and frame clocks, while ULPCLK is the machine driver's default
> audio clock parent.
> 
> Add a common Samsung simple audio card and include it from Codina,
> Codina-TMO, Gavini, Skomer, Kyle, Golden and Janice. Use the generic
> card name "Samsung". The later product kernels use DSP_A with an
> 8-by-16-bit TDM frame, playback slots 0 and 1 and capture slot 0.
> 
> Codina and HD Codina retain their older DSP_B configuration with a
> 16-by-16-bit frame and playback slots 1 and 3. Preserve Gavini's
> AMIC1A-to-VAMIC2 bias routing. Golden and Janice use the configuration
> from the newest Codina-TMO product source; their board files are
> byte-for-byte identical across the available later product releases.
> 
> Kyle's audio I2C bus contains only a disabled placeholder, so AB8505
> remains its sole active codec.
> 
> Assisted-by: LLM
> Signed-off-by: Linus Walleij <linusw@kernel.org>

Sashiko has reviewed this patch and found no issues. It looks great!

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260911-ux500-simple-sound-v1-0-6771ac714e82@kernel.org?part=7


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

* Re: [PATCH 4/9] ASoC: ab8500: Skip digital microphone support on AB8505
  2026-09-10 23:03 ` [PATCH 4/9] ASoC: ab8500: Skip digital microphone support on AB8505 Linus Walleij
@ 2026-09-10 23:17   ` sashiko-bot
  0 siblings, 0 replies; 21+ messages in thread
From: sashiko-bot @ 2026-09-10 23:17 UTC (permalink / raw)
  To: Linus Walleij; +Cc: lee, robh, mfd, devicetree, conor+dt

> The AB8505 does not have the digital microphone interface, its six
> input pins or the VDMIC regulator found in AB8500. The shared codec
> driver nevertheless creates the entire AB8500 DMIC DAPM graph. When an
> AB8505 sound card binds, the regulator widget requests the nonexistent
> V-DMIC supply and falls back to a dummy regulator.
> 
> Split the digital microphone widgets and routes from the common codec
> graph and add them only when the parent MFD is an actual AB8500. This
> also removes the DMIC4-only AD_OUT4 path from AB8505.
> 
> Fixes: 679d7abdc754 ("ASoC: codecs: Add AB8500 codec-driver")
> Assisted-by: LLM
> Signed-off-by: Linus Walleij <linusw@kernel.org>

Sashiko has reviewed this patch and found no issues. It looks great!

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260911-ux500-simple-sound-v1-0-6771ac714e82@kernel.org?part=4


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

* Re: [PATCH 0/9] ASoC: ux500: Migrate HREF and Samsung audio to simple-card
  2026-09-10 23:10 ` [PATCH 0/9] ASoC: ux500: Migrate HREF and Samsung audio to simple-card Mark Brown
@ 2026-09-11  8:36   ` Linus Walleij
  0 siblings, 0 replies; 21+ messages in thread
From: Linus Walleij @ 2026-09-11  8:36 UTC (permalink / raw)
  To: Mark Brown
  Cc: Liam Girdwood, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Lee Jones, Jaroslav Kysela, Takashi Iwai, linux-sound, devicetree,
	mfd

On Fri, Sep 11, 2026 at 1:10 AM Mark Brown <broonie@kernel.org> wrote:

> The modern thing is to use audio-graph-card2 (which scales down to the
> use cases that simple- handles with a more flexible binding).

OK I will take a look and see if I can phase over to that thing.

> What's your thinking on merge strategy here?

First finalize the bindings and have them approved, Lee want to merge
the MFD binding change in his tree, when that is done all ASoC
things can go in and the DTS changes in parallel through the SoC
tree.

(I have the similar idea with the regulator set that is floating.)

Yours,
Linus Walleij

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

end of thread, other threads:[~2026-09-11  8:36 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-10 23:03 [PATCH 0/9] ASoC: ux500: Migrate HREF and Samsung audio to simple-card Linus Walleij
2026-09-10 23:03 ` [PATCH 1/9] ASoC: dt-bindings: ux500: Convert MSP binding to DT schema Linus Walleij
2026-09-10 23:10   ` sashiko-bot
2026-09-10 23:03 ` [PATCH 2/9] mfd: dt-bindings: ab8500: Describe codec DAI and microphone wiring Linus Walleij
2026-09-10 23:08   ` sashiko-bot
2026-09-10 23:03 ` [PATCH 3/9] ASoC: dt-bindings: ux500: Remove MOP500 sound card binding Linus Walleij
2026-09-10 23:07   ` sashiko-bot
2026-09-10 23:03 ` [PATCH 4/9] ASoC: ab8500: Skip digital microphone support on AB8505 Linus Walleij
2026-09-10 23:17   ` sashiko-bot
2026-09-10 23:03 ` [PATCH 5/9] ARM: dts: ux500: Add sound DAI provider cells Linus Walleij
2026-09-10 23:08   ` sashiko-bot
2026-09-10 23:03 ` [PATCH 6/9] ARM: dts: ux500: Convert HREF audio card to simple-card Linus Walleij
2026-09-10 23:14   ` sashiko-bot
2026-09-10 23:03 ` [PATCH 7/9] ARM: dts: ux500: Add Samsung phone sound cards Linus Walleij
2026-09-10 23:15   ` sashiko-bot
2026-09-10 23:03 ` [PATCH 8/9] ASoC: ux500: Remove the MOP500 machine driver Linus Walleij
2026-09-10 23:14   ` sashiko-bot
2026-09-10 23:03 ` [PATCH 9/9] ARM: config: u8500: Enable the simple audio card Linus Walleij
2026-09-10 23:09   ` sashiko-bot
2026-09-10 23:10 ` [PATCH 0/9] ASoC: ux500: Migrate HREF and Samsung audio to simple-card Mark Brown
2026-09-11  8:36   ` Linus Walleij

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