mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-12 13:34:10 +08:00
ASoC: wm8960: Remove bitclk relax condition in wm8960_configure_sysclk
The call sequence in wm8960_configure_clocking is ret = wm8960_configure_sysclk(); if (ret >= 0) goto configure_clock; .... ret = wm8960_configure_pll(); configure_clock: ... wm8960_configure_sysclk is called before wm8960_configure_pll, as there is bitclk relax on both functions, so wm8960_configure_sysclk always return success, then wm8960_configure_pll() never be called. With this case: aplay -Dhw:0,0 -d 5 -r 48000 -f S24_LE -c 2 audio48k24b2c.wav the required bitclk is 48000 * 24 * 2 = 2304000, bitclk got from wm8960_configure_sysclk is3072000
, but if go to wm8960_configure_pll. it can get correct bitclk 2304000. So bitclk relax condition should be removed in wm8960_configure_sysclk, then wm8960_configure_pll can be called, and there is also bitclk relax function in wm8960_configure_pll. Fixes:3c01b9ee2a
("ASoC: codec: wm8960: Relax bit clock computation") Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com> Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com> Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com> Link: https://lore.kernel.org/r/1614740862-30196-1-git-send-email-shengjiu.wang@nxp.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
df8077c6fe
commit
99067c07e8
@ -608,10 +608,6 @@ static const int bclk_divs[] = {
|
||||
* - lrclk = sysclk / dac_divs
|
||||
* - 10 * bclk = sysclk / bclk_divs
|
||||
*
|
||||
* If we cannot find an exact match for (sysclk, lrclk, bclk)
|
||||
* triplet, we relax the bclk such that bclk is chosen as the
|
||||
* closest available frequency greater than expected bclk.
|
||||
*
|
||||
* @wm8960: codec private data
|
||||
* @mclk: MCLK used to derive sysclk
|
||||
* @sysclk_idx: sysclk_divs index for found sysclk
|
||||
@ -629,7 +625,7 @@ int wm8960_configure_sysclk(struct wm8960_priv *wm8960, int mclk,
|
||||
{
|
||||
int sysclk, bclk, lrclk;
|
||||
int i, j, k;
|
||||
int diff, closest = mclk;
|
||||
int diff;
|
||||
|
||||
/* marker for no match */
|
||||
*bclk_idx = -1;
|
||||
@ -653,12 +649,6 @@ int wm8960_configure_sysclk(struct wm8960_priv *wm8960, int mclk,
|
||||
*bclk_idx = k;
|
||||
break;
|
||||
}
|
||||
if (diff > 0 && closest > diff) {
|
||||
*sysclk_idx = i;
|
||||
*dac_idx = j;
|
||||
*bclk_idx = k;
|
||||
closest = diff;
|
||||
}
|
||||
}
|
||||
if (k != ARRAY_SIZE(bclk_divs))
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user