[PATCH v4 10/23] ASoC: simple-card: Wrong daifmt for CPU end of DPCM DAI link
Sameer Pujar
spujar at nvidia.com
Sat Jun 27 06:53:32 CEST 2020
Consider following DPCM DAI link for example:
simple-audio-card,dai-link at xxx {
format = "i2s";
bitclock-master=<&cpu1>;
frame-master=<&cpu1>;
cpu1: cpu at 0 {
...
};
codec at 0 {
...
};
...
};
In above case CPU is expected to be configured as a master and Codec as
a slave device. But both CPU/Codec are being configured as slave devices.
This happens because asoc_simple_parse_daifmt() uses Codec reference and
sets up the 'dai_link->dai_fmt' accordingly while parsing both CPU and
Codec. Though populating 'non_legacy_dai_naming' flag as true for CPU
component can address above issue in simple cases, but with multiple
CPU/Codecs with DPCM DAI link it becomes tricky because right now the
first Codec in the DAI link is used as reference.
This is fixed by passing current DAI link child node reference to
asoc_simple_parse_daifmt(). It parses a CPU/Codec node independently and
sets daifmt as per 'bitcloclk/frame-master' property.
Signed-off-by: Sameer Pujar <spujar at nvidia.com>
---
sound/soc/generic/simple-card.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c
index 0f443c0..39cdc71 100644
--- a/sound/soc/generic/simple-card.c
+++ b/sound/soc/generic/simple-card.c
@@ -228,7 +228,7 @@ static int simple_dai_link_of_dpcm(struct asoc_simple_priv *priv,
if (ret)
goto out_put_node;
- ret = asoc_simple_parse_daifmt(dev, node, codec,
+ ret = asoc_simple_parse_daifmt(dev, node, np,
prefix, &dai_link->dai_fmt);
if (ret < 0)
goto out_put_node;
--
2.7.4
More information about the Alsa-devel
mailing list