| From 3a0fad11000e1533c3132e024304cbe8b4f0f826 Mon Sep 17 00:00:00 2001 |
| From: Johannes Krude <johannes@krude.de> |
| Date: Sat, 16 Nov 2019 12:41:06 +0100 |
| Subject: [PATCH] sound/soc: only first codec is master in multicodec |
| setup |
| |
| When using multiple codecs, at most one codec should generate the master |
| clock. All codecs except the first are therefore configured for slave |
| mode. |
| |
| Signed-off-by: Johannes Krude <johannes@krude.de> |
| --- |
| sound/soc/soc-core.c | 10 +++++++++- |
| 1 file changed, 9 insertions(+), 1 deletion(-) |
| |
| --- a/sound/soc/soc-core.c |
| +++ b/sound/soc/soc-core.c |
| @@ -1656,7 +1656,15 @@ int snd_soc_runtime_set_dai_fmt(struct s |
| int ret; |
| |
| for_each_rtd_codec_dai(rtd, i, codec_dai) { |
| - ret = snd_soc_dai_set_fmt(codec_dai, dai_fmt); |
| + unsigned int codec_dai_fmt = dai_fmt; |
| + |
| + // there can only be one master when using multiple codecs |
| + if (i && (codec_dai_fmt & SND_SOC_DAIFMT_MASTER_MASK)) { |
| + codec_dai_fmt &= ~SND_SOC_DAIFMT_MASTER_MASK; |
| + codec_dai_fmt |= SND_SOC_DAIFMT_CBS_CFS; |
| + } |
| + |
| + ret = snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt); |
| if (ret != 0 && ret != -ENOTSUPP) { |
| dev_warn(codec_dai->dev, |
| "ASoC: Failed to set DAI format: %d\n", ret); |