Commit 2b21207a authored by Shengjiu Wang's avatar Shengjiu Wang Committed by Mark Brown

ASoC: fsl-asoc-card: use integer type for fll_id and pll_id

As the pll_id and pll_id can be zero (WM8960_SYSCLK_AUTO)
with the commit 2bbc2df4 ("ASoC: wm8960: Make automatic the
default clocking mode")

Then the machine driver will skip to call set_sysclk() and set_pll()
for codec, when the sysclk rate is different with what wm8960 read
at probe, the output sound frequency is wrong.

So change the fll_id and pll_id initial value, still keep machine
driver's behavior same as before.
Signed-off-by: default avatarShengjiu Wang <shengjiu.wang@nxp.com>
Link: https://lore.kernel.org/r/1695202992-24864-1-git-send-email-shengjiu.wang@nxp.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 197c53c8
...@@ -52,8 +52,8 @@ struct codec_priv { ...@@ -52,8 +52,8 @@ struct codec_priv {
unsigned long mclk_freq; unsigned long mclk_freq;
unsigned long free_freq; unsigned long free_freq;
u32 mclk_id; u32 mclk_id;
u32 fll_id; int fll_id;
u32 pll_id; int pll_id;
}; };
/** /**
...@@ -206,7 +206,7 @@ static int fsl_asoc_card_hw_params(struct snd_pcm_substream *substream, ...@@ -206,7 +206,7 @@ static int fsl_asoc_card_hw_params(struct snd_pcm_substream *substream,
} }
/* Specific configuration for PLL */ /* Specific configuration for PLL */
if (codec_priv->pll_id && codec_priv->fll_id) { if (codec_priv->pll_id >= 0 && codec_priv->fll_id >= 0) {
if (priv->sample_format == SNDRV_PCM_FORMAT_S24_LE) if (priv->sample_format == SNDRV_PCM_FORMAT_S24_LE)
pll_out = priv->sample_rate * 384; pll_out = priv->sample_rate * 384;
else else
...@@ -248,7 +248,7 @@ static int fsl_asoc_card_hw_free(struct snd_pcm_substream *substream) ...@@ -248,7 +248,7 @@ static int fsl_asoc_card_hw_free(struct snd_pcm_substream *substream)
priv->streams &= ~BIT(substream->stream); priv->streams &= ~BIT(substream->stream);
if (!priv->streams && codec_priv->pll_id && codec_priv->fll_id) { if (!priv->streams && codec_priv->pll_id >= 0 && codec_priv->fll_id >= 0) {
/* Force freq to be free_freq to avoid error message in codec */ /* Force freq to be free_freq to avoid error message in codec */
ret = snd_soc_dai_set_sysclk(asoc_rtd_to_codec(rtd, 0), ret = snd_soc_dai_set_sysclk(asoc_rtd_to_codec(rtd, 0),
codec_priv->mclk_id, codec_priv->mclk_id,
...@@ -621,6 +621,10 @@ static int fsl_asoc_card_probe(struct platform_device *pdev) ...@@ -621,6 +621,10 @@ static int fsl_asoc_card_probe(struct platform_device *pdev)
priv->card.dapm_routes = audio_map; priv->card.dapm_routes = audio_map;
priv->card.num_dapm_routes = ARRAY_SIZE(audio_map); priv->card.num_dapm_routes = ARRAY_SIZE(audio_map);
priv->card.driver_name = DRIVER_NAME; priv->card.driver_name = DRIVER_NAME;
priv->codec_priv.fll_id = -1;
priv->codec_priv.pll_id = -1;
/* Diversify the card configurations */ /* Diversify the card configurations */
if (of_device_is_compatible(np, "fsl,imx-audio-cs42888")) { if (of_device_is_compatible(np, "fsl,imx-audio-cs42888")) {
codec_dai_name = "cs42888"; codec_dai_name = "cs42888";
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment