]> www.infradead.org Git - users/hch/misc.git/commitdiff
ASoC: wm8940: Correct PLL rate rounding
authorCharles Keepax <ckeepax@opensource.cirrus.com>
Thu, 21 Aug 2025 08:26:37 +0000 (09:26 +0100)
committerMark Brown <broonie@kernel.org>
Mon, 1 Sep 2025 13:57:27 +0000 (14:57 +0100)
Using a single value of 22500000 for both 48000Hz and 44100Hz audio
will sometimes result in returning wrong dividers due to rounding.
Update the code to use the actual value for both.

Fixes: 294833fc9eb4 ("ASoC: wm8940: Rewrite code to set proper clocks")
Reported-by: Ankur Tyagi <ankur.tyagi85@gmail.com>
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Tested-by: Ankur Tyagi <ankur.tyagi85@gmail.com>
Link: https://patch.msgid.link/20250821082639.1301453-2-ckeepax@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/wm8940.c

index 401ee20897b1ba364a067776bb19f66c26f186f9..46c16c9bc17a8862300876082b750ffe9d2edcb1 100644 (file)
@@ -693,7 +693,12 @@ static int wm8940_update_clocks(struct snd_soc_dai *dai)
        f = wm8940_get_mclkdiv(priv->mclk, fs256, &mclkdiv);
        if (f != priv->mclk) {
                /* The PLL performs best around 90MHz */
-               fpll = wm8940_get_mclkdiv(22500000, fs256, &mclkdiv);
+               if (fs256 % 8000)
+                       f = 22579200;
+               else
+                       f = 24576000;
+
+               fpll = wm8940_get_mclkdiv(f, fs256, &mclkdiv);
        }
 
        wm8940_set_dai_pll(dai, 0, 0, priv->mclk, fpll);