* [PATCH v2 1/9] ASoC: dt-bindings: sound: Prepare Ux500 audio graph links
2026-09-17 22:50 [PATCH v2 0/9] ASoC: ux500: Migrate HREF and Samsung audio to audio-graph-card2 Linus Walleij
@ 2026-09-17 22:50 ` Linus Walleij
2026-09-17 22:51 ` [PATCH v2 2/9] mfd: dt-bindings: ab8500: Describe codec graph and microphone wiring Linus Walleij
` (8 subsequent siblings)
9 siblings, 0 replies; 18+ messages in thread
From: Linus Walleij @ 2026-09-17 22:50 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
Audio graph card drivers parse TDM slot data and continuous clock
selection from endpoint nodes. The audio graph endpoint schema describes
slot count and width directly but does not cover sparse slot masks or
continuous clocking. Reference the common TDM slot schema so TX and RX
masks are documented, and add the continuous-clock flag.
Replace the incomplete Ux500 MSP 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 and allow
it to expose an audio graph port.
Assisted-by: LLM
Signed-off-by: Linus Walleij <linusw@kernel.org>
---
.../bindings/sound/audio-graph-port.yaml | 10 +--
.../bindings/sound/stericsson,ux500-msp-i2s.yaml | 96 ++++++++++++++++++++++
.../devicetree/bindings/sound/ux500-msp.txt | 42 ----------
3 files changed, 100 insertions(+), 48 deletions(-)
diff --git a/Documentation/devicetree/bindings/sound/audio-graph-port.yaml b/Documentation/devicetree/bindings/sound/audio-graph-port.yaml
index d1cbfc5edd3a..565d723d0398 100644
--- a/Documentation/devicetree/bindings/sound/audio-graph-port.yaml
+++ b/Documentation/devicetree/bindings/sound/audio-graph-port.yaml
@@ -39,6 +39,7 @@ definitions:
allOf:
- $ref: /schemas/graph.yaml#/$defs/endpoint-base
- $ref: /schemas/sound/dai-params.yaml#
+ - $ref: /schemas/sound/tdm-slot.yaml#
properties:
mclk-fs:
$ref: simple-card.yaml#/definitions/mclk-fs
@@ -48,6 +49,9 @@ definitions:
bitclock-inversion:
description: dai-link uses bit clock inversion
$ref: /schemas/types.yaml#/definitions/flag
+ continuous-clock:
+ description: dai-link bit clock runs continuously rather than gated
+ $ref: /schemas/types.yaml#/definitions/flag
frame-master:
description: Indicates dai-link frame master.
oneOf:
@@ -82,12 +86,6 @@ definitions:
- msb
- lsb
- dai-tdm-slot-num:
- description: Number of slots in use.
- $ref: /schemas/types.yaml#/definitions/uint32
- dai-tdm-slot-width:
- description: Width in bits for each slot.
- $ref: /schemas/types.yaml#/definitions/uint32
dai-tdm-slot-width-map:
description: Mapping of sample widths to slot widths. For hardware
that cannot support a fixed slot width or a slot width always
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..bdfcd5376cfe
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/stericsson,ux500-msp-i2s.yaml
@@ -0,0 +1,96 @@
+# 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
+
+ port:
+ $ref: audio-graph-port.yaml#
+ unevaluatedProperties: false
+
+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] 18+ messages in thread* [PATCH v2 2/9] mfd: dt-bindings: ab8500: Describe codec graph and microphone wiring
2026-09-17 22:50 [PATCH v2 0/9] ASoC: ux500: Migrate HREF and Samsung audio to audio-graph-card2 Linus Walleij
2026-09-17 22:50 ` [PATCH v2 1/9] ASoC: dt-bindings: sound: Prepare Ux500 audio graph links Linus Walleij
@ 2026-09-17 22:51 ` Linus Walleij
2026-09-24 14:21 ` (subset) " Lee Jones
2026-09-17 22:51 ` [PATCH v2 3/9] ASoC: dt-bindings: ux500: Remove MOP500 sound card binding Linus Walleij
` (7 subsequent siblings)
9 siblings, 1 reply; 18+ messages in thread
From: Linus Walleij @ 2026-09-17 22:51 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 and allow
it to expose both interfaces as audio graph ports.
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 | 28 ++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/Documentation/devicetree/bindings/mfd/stericsson,ab8500.yaml b/Documentation/devicetree/bindings/mfd/stericsson,ab8500.yaml
index 0fdfbfdfe88a..873e08266a2b 100644
--- a/Documentation/devicetree/bindings/mfd/stericsson,ab8500.yaml
+++ b/Documentation/devicetree/bindings/mfd/stericsson,ab8500.yaml
@@ -312,6 +312,33 @@ properties:
items:
- const: audioclk
+ '#sound-dai-cells':
+ description: Selects one of the two digital audio interfaces
+ const: 1
+
+ ports:
+ $ref: /schemas/sound/audio-graph-port.yaml#/definitions/ports
+
+ 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 +346,7 @@ properties:
required:
- compatible
+ - '#sound-dai-cells'
additionalProperties: false
--
2.55.0
^ permalink raw reply related [flat|nested] 18+ messages in thread* Re: (subset) [PATCH v2 2/9] mfd: dt-bindings: ab8500: Describe codec graph and microphone wiring
2026-09-17 22:51 ` [PATCH v2 2/9] mfd: dt-bindings: ab8500: Describe codec graph and microphone wiring Linus Walleij
@ 2026-09-24 14:21 ` Lee Jones
0 siblings, 0 replies; 18+ messages in thread
From: Lee Jones @ 2026-09-24 14:21 UTC (permalink / raw)
To: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Lee Jones, Jaroslav Kysela, Takashi Iwai,
Linus Walleij
Cc: linux-sound, devicetree, mfd
On Fri, 18 Sep 2026 00:51:00 +0200, Linus Walleij wrote:
> The AB8500 and AB8505 codec block exposes two digital audio
> interfaces. Define the codec as a one-cell sound DAI provider and allow
> it to expose both interfaces as audio graph ports.
>
> 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.
>
> [...]
Applied, thanks!
[2/9] mfd: dt-bindings: ab8500: Describe codec graph and microphone wiring
commit: 43be6abd6775820fdac3729962f7e7b841104fda
--
Lee Jones [李琼斯]
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH v2 3/9] ASoC: dt-bindings: ux500: Remove MOP500 sound card binding
2026-09-17 22:50 [PATCH v2 0/9] ASoC: ux500: Migrate HREF and Samsung audio to audio-graph-card2 Linus Walleij
2026-09-17 22:50 ` [PATCH v2 1/9] ASoC: dt-bindings: sound: Prepare Ux500 audio graph links Linus Walleij
2026-09-17 22:51 ` [PATCH v2 2/9] mfd: dt-bindings: ab8500: Describe codec graph and microphone wiring Linus Walleij
@ 2026-09-17 22:51 ` Linus Walleij
2026-09-17 22:51 ` [PATCH v2 4/9] ASoC: ab8500: Skip digital microphone support on AB8505 Linus Walleij
` (6 subsequent siblings)
9 siblings, 0 replies; 18+ messages in thread
From: Linus Walleij @ 2026-09-17 22:51 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 audio-graph-card2 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] 18+ messages in thread* [PATCH v2 4/9] ASoC: ab8500: Skip digital microphone support on AB8505
2026-09-17 22:50 [PATCH v2 0/9] ASoC: ux500: Migrate HREF and Samsung audio to audio-graph-card2 Linus Walleij
` (2 preceding siblings ...)
2026-09-17 22:51 ` [PATCH v2 3/9] ASoC: dt-bindings: ux500: Remove MOP500 sound card binding Linus Walleij
@ 2026-09-17 22:51 ` Linus Walleij
2026-09-17 22:51 ` [PATCH v2 5/9] ASoC: ux500: Remove the MOP500 machine driver Linus Walleij
` (5 subsequent siblings)
9 siblings, 0 replies; 18+ messages in thread
From: Linus Walleij @ 2026-09-17 22:51 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] 18+ messages in thread* [PATCH v2 5/9] ASoC: ux500: Remove the MOP500 machine driver
2026-09-17 22:50 [PATCH v2 0/9] ASoC: ux500: Migrate HREF and Samsung audio to audio-graph-card2 Linus Walleij
` (3 preceding siblings ...)
2026-09-17 22:51 ` [PATCH v2 4/9] ASoC: ab8500: Skip digital microphone support on AB8505 Linus Walleij
@ 2026-09-17 22:51 ` Linus Walleij
2026-09-17 22:51 ` [PATCH v2 6/9] ARM: dts: ux500: Add sound DAI provider cells Linus Walleij
` (4 subsequent siblings)
9 siblings, 0 replies; 18+ messages in thread
From: Linus Walleij @ 2026-09-17 22:51 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 audio-graph-card2, 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 graphs.
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] 18+ messages in thread* [PATCH v2 6/9] ARM: dts: ux500: Add sound DAI provider cells
2026-09-17 22:50 [PATCH v2 0/9] ASoC: ux500: Migrate HREF and Samsung audio to audio-graph-card2 Linus Walleij
` (4 preceding siblings ...)
2026-09-17 22:51 ` [PATCH v2 5/9] ASoC: ux500: Remove the MOP500 machine driver Linus Walleij
@ 2026-09-17 22:51 ` Linus Walleij
2026-09-23 17:27 ` Linus Walleij
2026-09-17 22:51 ` [PATCH v2 7/9] ARM: dts: ux500: Convert HREF audio to audio-graph-card2 Linus Walleij
` (3 subsequent siblings)
9 siblings, 1 reply; 18+ messages in thread
From: Linus Walleij @ 2026-09-17 22:51 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 lets audio graph endpoints resolve the MSP DAI
and select the codec playback or capture interface by port number.
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] 18+ messages in thread* Re: [PATCH v2 6/9] ARM: dts: ux500: Add sound DAI provider cells
2026-09-17 22:51 ` [PATCH v2 6/9] ARM: dts: ux500: Add sound DAI provider cells Linus Walleij
@ 2026-09-23 17:27 ` Linus Walleij
2026-09-24 6:54 ` Lee Jones
0 siblings, 1 reply; 18+ messages in thread
From: Linus Walleij @ 2026-09-23 17:27 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
On Fri, Sep 18, 2026 at 12:51 AM Linus Walleij <linusw@kernel.org> wrote:
> Describe each MSP as a single-DAI provider and the AB8500 codec as a
> two-DAI provider. This lets audio graph endpoints resolve the MSP DAI
> and select the codec playback or capture interface by port number.
>
> Assisted-by: LLM
> Signed-off-by: Linus Walleij <linusw@kernel.org>
Assuming Lee will apply the ACKed binding patch so I applied this and
the rest of the DTS patches to the ux500 DTS branch for v7.4.
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 6/9] ARM: dts: ux500: Add sound DAI provider cells
2026-09-23 17:27 ` Linus Walleij
@ 2026-09-24 6:54 ` Lee Jones
2026-09-24 7:00 ` Linus Walleij
0 siblings, 1 reply; 18+ messages in thread
From: Lee Jones @ 2026-09-24 6:54 UTC (permalink / raw)
To: Linus Walleij
Cc: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Jaroslav Kysela, Takashi Iwai, linux-sound,
devicetree, mfd
On Wed, 23 Sep 2026, Linus Walleij wrote:
> On Fri, Sep 18, 2026 at 12:51 AM Linus Walleij <linusw@kernel.org> wrote:
>
> > Describe each MSP as a single-DAI provider and the AB8500 codec as a
> > two-DAI provider. This lets audio graph endpoints resolve the MSP DAI
> > and select the codec playback or capture interface by port number.
> >
> > Assisted-by: LLM
> > Signed-off-by: Linus Walleij <linusw@kernel.org>
>
> Assuming Lee will apply the ACKed binding patch so I applied this and
> the rest of the DTS patches to the ux500 DTS branch for v7.4.
Right, but it's not Acked yet, is it? Or did I miss something?
--
Lee Jones
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 6/9] ARM: dts: ux500: Add sound DAI provider cells
2026-09-24 6:54 ` Lee Jones
@ 2026-09-24 7:00 ` Linus Walleij
2026-09-24 9:44 ` Lee Jones
0 siblings, 1 reply; 18+ messages in thread
From: Linus Walleij @ 2026-09-24 7:00 UTC (permalink / raw)
To: Lee Jones
Cc: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Jaroslav Kysela, Takashi Iwai, linux-sound,
devicetree, mfd
On Thu, Sep 24, 2026 at 8:54 AM Lee Jones <lee@kernel.org> wrote:
> On Wed, 23 Sep 2026, Linus Walleij wrote:
> > On Fri, Sep 18, 2026 at 12:51 AM Linus Walleij <linusw@kernel.org> wrote:
> >
> > > Describe each MSP as a single-DAI provider and the AB8500 codec as a
> > > two-DAI provider. This lets audio graph endpoints resolve the MSP DAI
> > > and select the codec playback or capture interface by port number.
> > >
> > > Assisted-by: LLM
> > > Signed-off-by: Linus Walleij <linusw@kernel.org>
> >
> > Assuming Lee will apply the ACKed binding patch so I applied this and
> > the rest of the DTS patches to the ux500 DTS branch for v7.4.
>
> Right, but it's not Acked yet, is it? Or did I miss something?
It was ACKed under a different Subject: so I resent the patch
for clarity, sorry for the mess.
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 6/9] ARM: dts: ux500: Add sound DAI provider cells
2026-09-24 7:00 ` Linus Walleij
@ 2026-09-24 9:44 ` Lee Jones
2026-09-24 11:04 ` Linus Walleij
0 siblings, 1 reply; 18+ messages in thread
From: Lee Jones @ 2026-09-24 9:44 UTC (permalink / raw)
To: Linus Walleij
Cc: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Jaroslav Kysela, Takashi Iwai, linux-sound,
devicetree, mfd
On Thu, 24 Sep 2026, Linus Walleij wrote:
> On Thu, Sep 24, 2026 at 8:54 AM Lee Jones <lee@kernel.org> wrote:
>
> > On Wed, 23 Sep 2026, Linus Walleij wrote:
> > > On Fri, Sep 18, 2026 at 12:51 AM Linus Walleij <linusw@kernel.org> wrote:
> > >
> > > > Describe each MSP as a single-DAI provider and the AB8500 codec as a
> > > > two-DAI provider. This lets audio graph endpoints resolve the MSP DAI
> > > > and select the codec playback or capture interface by port number.
> > > >
> > > > Assisted-by: LLM
> > > > Signed-off-by: Linus Walleij <linusw@kernel.org>
> > >
> > > Assuming Lee will apply the ACKed binding patch so I applied this and
> > > the rest of the DTS patches to the ux500 DTS branch for v7.4.
> >
> > Right, but it's not Acked yet, is it? Or did I miss something?
>
> It was ACKed under a different Subject: so I resent the patch
> for clarity, sorry for the mess.
Are you going to tell me what that subject was? =;-)
--
Lee Jones
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 6/9] ARM: dts: ux500: Add sound DAI provider cells
2026-09-24 9:44 ` Lee Jones
@ 2026-09-24 11:04 ` Linus Walleij
2026-09-24 14:22 ` Lee Jones
0 siblings, 1 reply; 18+ messages in thread
From: Linus Walleij @ 2026-09-24 11:04 UTC (permalink / raw)
To: Lee Jones
Cc: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Jaroslav Kysela, Takashi Iwai, linux-sound,
devicetree, mfd
On Thu, Sep 24, 2026 at 11:44 AM Lee Jones <lee@kernel.org> wrote:
> On Thu, 24 Sep 2026, Linus Walleij wrote:
> > On Thu, Sep 24, 2026 at 8:54 AM Lee Jones <lee@kernel.org> wrote:
> > > > Assuming Lee will apply the ACKed binding patch so I applied this and
> > > > the rest of the DTS patches to the ux500 DTS branch for v7.4.
> > >
> > > Right, but it's not Acked yet, is it? Or did I miss something?
> >
> > It was ACKed under a different Subject: so I resent the patch
> > for clarity, sorry for the mess.
>
> Are you going to tell me what that subject was? =;-)
Sorry!
"[PATCH v3] mfd: dt-bindings: ab8500: Describe codec graph and
microphone wiring"
https://lore.kernel.org/mfd/20260923-ux500-simple-sound-v3-1-56a771c3ea28@kernel.org/
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v2 6/9] ARM: dts: ux500: Add sound DAI provider cells
2026-09-24 11:04 ` Linus Walleij
@ 2026-09-24 14:22 ` Lee Jones
0 siblings, 0 replies; 18+ messages in thread
From: Lee Jones @ 2026-09-24 14:22 UTC (permalink / raw)
To: Linus Walleij
Cc: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Jaroslav Kysela, Takashi Iwai, linux-sound,
devicetree, mfd
On Thu, 24 Sep 2026, Linus Walleij wrote:
> On Thu, Sep 24, 2026 at 11:44 AM Lee Jones <lee@kernel.org> wrote:
> > On Thu, 24 Sep 2026, Linus Walleij wrote:
> > > On Thu, Sep 24, 2026 at 8:54 AM Lee Jones <lee@kernel.org> wrote:
>
> > > > > Assuming Lee will apply the ACKed binding patch so I applied this and
> > > > > the rest of the DTS patches to the ux500 DTS branch for v7.4.
> > > >
> > > > Right, but it's not Acked yet, is it? Or did I miss something?
> > >
> > > It was ACKed under a different Subject: so I resent the patch
> > > for clarity, sorry for the mess.
> >
> > Are you going to tell me what that subject was? =;-)
>
> Sorry!
> "[PATCH v3] mfd: dt-bindings: ab8500: Describe codec graph and
> microphone wiring"
> https://lore.kernel.org/mfd/20260923-ux500-simple-sound-v3-1-56a771c3ea28@kernel.org/
Already merged.
--
Lee Jones
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH v2 7/9] ARM: dts: ux500: Convert HREF audio to audio-graph-card2
2026-09-17 22:50 [PATCH v2 0/9] ASoC: ux500: Migrate HREF and Samsung audio to audio-graph-card2 Linus Walleij
` (5 preceding siblings ...)
2026-09-17 22:51 ` [PATCH v2 6/9] ARM: dts: ux500: Add sound DAI provider cells Linus Walleij
@ 2026-09-17 22:51 ` Linus Walleij
2026-09-17 22:51 ` [PATCH v2 8/9] ARM: dts: ux500: Add Samsung phone audio graphs Linus Walleij
` (2 subsequent siblings)
9 siblings, 0 replies; 18+ messages in thread
From: Linus Walleij @ 2026-09-17 22:51 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 audio
graph cards in their PMIC-specific HREF DTSIs, and name the card
HREF-500. Connect MSP1 to codec DAI 0 for playback and MSP3 to codec
DAI 1 for capture.
Describe the DSP_A format, codec-provided bit and frame clocks,
16-by-16-bit TDM frame and active slots on the graph endpoints. Keep the
clocks running continuously, matching the legacy machine driver's normal
one- and two-channel mode.
Keep each complete card, including its endpoint graph, connector
widgets and routes, 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 | 104 ++++++++++++++++++++++++++
arch/arm/boot/dts/st/ste-href-ab8505.dtsi | 118 +++++++++++++++++++++++-------
5 files changed, 196 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..ff72f5f6d652 100644
--- a/arch/arm/boot/dts/st/ste-href-ab8500.dtsi
+++ b/arch/arm/boot/dts/st/ste-href-ab8500.dtsi
@@ -6,6 +6,48 @@
#include "ste-ab8500.dtsi"
/ {
+ href_sound: sound {
+ compatible = "audio-graph-card2";
+ label = "HREF-500";
+ 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";
+ 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";
+ links = <&href_msp1_port &href_msp3_port>;
+ };
+
soc {
prcmu@80157000 {
ab8500 {
@@ -488,3 +530,65 @@ ab8500_chargalg {
};
};
};
+
+&codec {
+ assigned-clocks = <&ab8500_clock AB8500_SYSCLK_INT>;
+ assigned-clock-parents = <&ab8500_clock AB8500_SYSCLK_ULP>;
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+
+ href_codec_playback: endpoint {
+ remote-endpoint = <&href_msp1_endpoint>;
+ bitclock-master;
+ frame-master;
+ dai-tdm-slot-num = <16>;
+ dai-tdm-slot-width = <16>;
+ dai-tdm-slot-tx-mask = <0 1 0 1>;
+ };
+ };
+
+ port@1 {
+ reg = <1>;
+
+ href_codec_capture: endpoint {
+ remote-endpoint = <&href_msp3_endpoint>;
+ bitclock-master;
+ frame-master;
+ dai-tdm-slot-num = <16>;
+ dai-tdm-slot-width = <16>;
+ dai-tdm-slot-rx-mask = <1>;
+ };
+ };
+ };
+};
+
+&msp1 {
+ href_msp1_port: port {
+ href_msp1_endpoint: endpoint {
+ continuous-clock;
+ remote-endpoint = <&href_codec_playback>;
+ dai-format = "dsp_a";
+ dai-tdm-slot-num = <16>;
+ dai-tdm-slot-width = <16>;
+ dai-tdm-slot-tx-mask = <0 1 0 1>;
+ };
+ };
+};
+
+&msp3 {
+ href_msp3_port: port {
+ href_msp3_endpoint: endpoint {
+ continuous-clock;
+ remote-endpoint = <&href_codec_capture>;
+ dai-format = "dsp_a";
+ dai-tdm-slot-num = <16>;
+ dai-tdm-slot-width = <16>;
+ dai-tdm-slot-rx-mask = <1>;
+ };
+ };
+};
diff --git a/arch/arm/boot/dts/st/ste-href-ab8505.dtsi b/arch/arm/boot/dts/st/ste-href-ab8505.dtsi
index 268db68ccf87..eba6f674c691 100644
--- a/arch/arm/boot/dts/st/ste-href-ab8505.dtsi
+++ b/arch/arm/boot/dts/st/ste-href-ab8505.dtsi
@@ -6,6 +6,36 @@
#include "ste-ab8505.dtsi"
/ {
+ href_sound: sound {
+ compatible = "audio-graph-card2";
+ label = "HREF-500";
+ 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";
+ 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";
+ links = <&href_msp1_port &href_msp3_port>;
+ };
+
soc {
prcmu@80157000 {
ab8505 {
@@ -48,10 +78,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 +106,6 @@ gpio {
<&pwm_default_mode>,
<&adi1_default_mode>,
<&usbuicc_default_mode>,
- <&dmic_default_mode>,
<&extcpena_default_mode>,
<&modsclsda_default_mode>;
@@ -365,27 +390,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 +492,65 @@ ab8500_chargalg {
};
};
};
+
+&codec {
+ assigned-clocks = <&ab8500_clock AB8500_SYSCLK_INT>;
+ assigned-clock-parents = <&ab8500_clock AB8500_SYSCLK_ULP>;
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+
+ href_codec_playback: endpoint {
+ remote-endpoint = <&href_msp1_endpoint>;
+ bitclock-master;
+ frame-master;
+ dai-tdm-slot-num = <16>;
+ dai-tdm-slot-width = <16>;
+ dai-tdm-slot-tx-mask = <0 1 0 1>;
+ };
+ };
+
+ port@1 {
+ reg = <1>;
+
+ href_codec_capture: endpoint {
+ remote-endpoint = <&href_msp3_endpoint>;
+ bitclock-master;
+ frame-master;
+ dai-tdm-slot-num = <16>;
+ dai-tdm-slot-width = <16>;
+ dai-tdm-slot-rx-mask = <1>;
+ };
+ };
+ };
+};
+
+&msp1 {
+ href_msp1_port: port {
+ href_msp1_endpoint: endpoint {
+ continuous-clock;
+ remote-endpoint = <&href_codec_playback>;
+ dai-format = "dsp_a";
+ dai-tdm-slot-num = <16>;
+ dai-tdm-slot-width = <16>;
+ dai-tdm-slot-tx-mask = <0 1 0 1>;
+ };
+ };
+};
+
+&msp3 {
+ href_msp3_port: port {
+ href_msp3_endpoint: endpoint {
+ continuous-clock;
+ remote-endpoint = <&href_codec_capture>;
+ dai-format = "dsp_a";
+ dai-tdm-slot-num = <16>;
+ dai-tdm-slot-width = <16>;
+ dai-tdm-slot-rx-mask = <1>;
+ };
+ };
+};
--
2.55.0
^ permalink raw reply related [flat|nested] 18+ messages in thread* [PATCH v2 8/9] ARM: dts: ux500: Add Samsung phone audio graphs
2026-09-17 22:50 [PATCH v2 0/9] ASoC: ux500: Migrate HREF and Samsung audio to audio-graph-card2 Linus Walleij
` (6 preceding siblings ...)
2026-09-17 22:51 ` [PATCH v2 7/9] ARM: dts: ux500: Convert HREF audio to audio-graph-card2 Linus Walleij
@ 2026-09-17 22:51 ` Linus Walleij
2026-09-17 22:51 ` [PATCH v2 9/9] ARM: config: u8500: Enable audio graph card2 Linus Walleij
2026-09-18 17:17 ` (subset) [PATCH v2 0/9] ASoC: ux500: Migrate HREF and Samsung audio to audio-graph-card2 Mark Brown
9 siblings, 0 replies; 18+ messages in thread
From: Linus Walleij @ 2026-09-17 22:51 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. Keep the codec-provided clocks continuous as in the
product kernels.
Add a common two-link audio graph 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 | 21 ++++++
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 | 77 ++++++++++++++++++++++
8 files changed, 108 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..857396201147 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,26 @@ display_out: endpoint {
};
};
+&samsung_playback_cpu {
+ dai-format = "dsp_b";
+ 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-format = "dsp_b";
+ 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..2b46145f68c9
--- /dev/null
+++ b/arch/arm/boot/dts/st/ste-ux500-samsung.dtsi
@@ -0,0 +1,77 @@
+// SPDX-License-Identifier: GPL-2.0-only
+
+/ {
+ samsung_sound: sound {
+ compatible = "audio-graph-card2";
+ label = "Samsung";
+ links = <&samsung_msp1_port &samsung_msp3_port>;
+ };
+};
+
+&codec {
+ assigned-clocks = <&ab8500_clock AB8500_SYSCLK_INT>;
+ assigned-clock-parents = <&ab8500_clock AB8500_SYSCLK_ULP>;
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+
+ samsung_codec_playback: endpoint {
+ remote-endpoint = <&samsung_playback_cpu>;
+ bitclock-master;
+ frame-master;
+ dai-tdm-slot-num = <8>;
+ dai-tdm-slot-width = <16>;
+ dai-tdm-slot-tx-mask = <1 1>;
+ };
+ };
+
+ port@1 {
+ reg = <1>;
+
+ samsung_codec_capture: endpoint {
+ remote-endpoint = <&samsung_capture_cpu>;
+ bitclock-master;
+ frame-master;
+ dai-tdm-slot-num = <8>;
+ dai-tdm-slot-width = <16>;
+ dai-tdm-slot-rx-mask = <1>;
+ };
+ };
+ };
+};
+
+&msp1 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&msp1txrx_a_1_default>;
+ status = "okay";
+
+ samsung_msp1_port: port {
+ samsung_playback_cpu: endpoint {
+ continuous-clock;
+ remote-endpoint = <&samsung_codec_playback>;
+ dai-format = "dsp_a";
+ dai-tdm-slot-num = <8>;
+ dai-tdm-slot-width = <16>;
+ dai-tdm-slot-tx-mask = <1 1>;
+ };
+ };
+};
+
+&msp3 {
+ status = "okay";
+
+ samsung_msp3_port: port {
+ samsung_capture_cpu: endpoint {
+ continuous-clock;
+ remote-endpoint = <&samsung_codec_capture>;
+ dai-format = "dsp_a";
+ dai-tdm-slot-num = <8>;
+ dai-tdm-slot-width = <16>;
+ dai-tdm-slot-rx-mask = <1>;
+ };
+ };
+};
--
2.55.0
^ permalink raw reply related [flat|nested] 18+ messages in thread* [PATCH v2 9/9] ARM: config: u8500: Enable audio graph card2
2026-09-17 22:50 [PATCH v2 0/9] ASoC: ux500: Migrate HREF and Samsung audio to audio-graph-card2 Linus Walleij
` (7 preceding siblings ...)
2026-09-17 22:51 ` [PATCH v2 8/9] ARM: dts: ux500: Add Samsung phone audio graphs Linus Walleij
@ 2026-09-17 22:51 ` Linus Walleij
2026-09-18 17:17 ` (subset) [PATCH v2 0/9] ASoC: ux500: Migrate HREF and Samsung audio to audio-graph-card2 Mark Brown
9 siblings, 0 replies; 18+ messages in thread
From: Linus Walleij @ 2026-09-17 22:51 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 audio
graph card2 used by the new Ux500 device tree descriptions.
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..1015f9c3ef04 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_AUDIO_GRAPH_CARD2=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] 18+ messages in thread* Re: (subset) [PATCH v2 0/9] ASoC: ux500: Migrate HREF and Samsung audio to audio-graph-card2
2026-09-17 22:50 [PATCH v2 0/9] ASoC: ux500: Migrate HREF and Samsung audio to audio-graph-card2 Linus Walleij
` (8 preceding siblings ...)
2026-09-17 22:51 ` [PATCH v2 9/9] ARM: config: u8500: Enable audio graph card2 Linus Walleij
@ 2026-09-18 17:17 ` Mark Brown
9 siblings, 0 replies; 18+ messages in thread
From: Mark Brown @ 2026-09-18 17:17 UTC (permalink / raw)
To: Liam Girdwood, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Lee Jones, Jaroslav Kysela, Takashi Iwai, Linus Walleij
Cc: linux-sound, devicetree, mfd
On Fri, 18 Sep 2026 00:50:58 +0200, Linus Walleij wrote:
> ASoC: ux500: Migrate HREF and Samsung audio to audio-graph-card2
>
> 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 with audio graph ports. Document the
> sparse TDM slot masks already parsed from audio graph endpoints.
>
> [...]
Applied to
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-7.4
Thanks!
[1/9] ASoC: dt-bindings: sound: Prepare Ux500 audio graph links
https://git.kernel.org/broonie/sound/c/cc47a544d4f7
[3/9] ASoC: dt-bindings: ux500: Remove MOP500 sound card binding
https://git.kernel.org/broonie/sound/c/661b5aa81093
[4/9] ASoC: ab8500: Skip digital microphone support on AB8505
https://git.kernel.org/broonie/sound/c/0d46182a1be7
[5/9] ASoC: ux500: Remove the MOP500 machine driver
https://git.kernel.org/broonie/sound/c/f25d142baa23
All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying
to this mail.
Thanks,
Mark
^ permalink raw reply [flat|nested] 18+ messages in thread