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 2bbc2df46e67 ("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: Shengjiu Wang <shengjiu.wang@nxp.com> Link: https://lore.kernel.org/r/1695202992-24864-1-git-send-email-shengjiu.wang@nxp.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
197c53c8ec
commit
2b21207afd
@ -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,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 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)
|
|||||||
|
|
||||||
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)
|
|||||||
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";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user