ASoC: meson: axg-tdm-interface: fix link fmt setup
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>
This commit is contained in:
parent
dc5fb6d2e8
commit
6878ba91ce
|
@ -119,17 +119,24 @@ 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;
|
||||
}
|
||||
|
||||
/* If the TDM interface is the clock master, it requires mclk */
|
||||
if (!iface->mclk && (fmt & SND_SOC_DAIFMT_CBS_CFS)) {
|
||||
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;
|
||||
|
||||
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;
|
||||
return 0;
|
||||
|
@ -319,7 +326,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;
|
||||
|
|
Loading…
Reference in New Issue