mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 11:26:02 +09:00
ASoC: meson: axg-tdm-interface: fix link fmt setup
[ Upstream commit6878ba91ce] The .set_fmt() callback of the axg tdm interface incorrectly test the content of SND_SOC_DAIFMT_MASTER_MASK as if it was a bitfield, which it is not. Implement the test correctly. Fixes:d60e4f1e4b("ASoC: meson: add tdm interface driver") Signed-off-by: Jerome Brunet <jbrunet@baylibre.com> Link: https://lore.kernel.org/r/20200729154456.1983396-2-jbrunet@baylibre.com Signed-off-by: Mark Brown <broonie@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
8615b9cacd
commit
62b15380d0
@@ -111,16 +111,23 @@ static int axg_tdm_iface_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
|
||||
{
|
||||
struct axg_tdm_iface *iface = snd_soc_dai_get_drvdata(dai);
|
||||
|
||||
/* These modes are not supported */
|
||||
if (fmt & (SND_SOC_DAIFMT_CBS_CFM | SND_SOC_DAIFMT_CBM_CFS)) {
|
||||
dev_err(dai->dev, "only CBS_CFS and CBM_CFM are supported\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
|
||||
case SND_SOC_DAIFMT_CBS_CFS:
|
||||
if (!iface->mclk) {
|
||||
dev_err(dai->dev, "cpu clock master: mclk missing\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
break;
|
||||
|
||||
/* If the TDM interface is the clock master, it requires mclk */
|
||||
if (!iface->mclk && (fmt & SND_SOC_DAIFMT_CBS_CFS)) {
|
||||
dev_err(dai->dev, "cpu clock master: mclk missing\n");
|
||||
return -ENODEV;
|
||||
case SND_SOC_DAIFMT_CBM_CFM:
|
||||
break;
|
||||
|
||||
case SND_SOC_DAIFMT_CBS_CFM:
|
||||
case SND_SOC_DAIFMT_CBM_CFS:
|
||||
dev_err(dai->dev, "only CBS_CFS and CBM_CFM are supported\n");
|
||||
/* Fall-through */
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
iface->fmt = fmt;
|
||||
@@ -311,7 +318,8 @@ static int axg_tdm_iface_hw_params(struct snd_pcm_substream *substream,
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (iface->fmt & SND_SOC_DAIFMT_CBS_CFS) {
|
||||
if ((iface->fmt & SND_SOC_DAIFMT_MASTER_MASK) ==
|
||||
SND_SOC_DAIFMT_CBS_CFS) {
|
||||
ret = axg_tdm_iface_set_sclk(dai, params);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
Reference in New Issue
Block a user