diff --git a/projects/Allwinner/patches/linux/0001-backport-from-5.4.patch b/projects/Allwinner/patches/linux/0001-backport-from-5.4.patch index ee957d068e..f756c8f84f 100644 --- a/projects/Allwinner/patches/linux/0001-backport-from-5.4.patch +++ b/projects/Allwinner/patches/linux/0001-backport-from-5.4.patch @@ -2516,73 +2516,6 @@ index d97d694c48df..70608fa30bf2 100644 -- 2.23.0 -From 7df8f9a20196072162d9dc8fe99943f2d35f23d5 Mon Sep 17 00:00:00 2001 -From: Maxime Ripard -Date: Mon, 19 Aug 2019 21:25:14 +0200 -Subject: [PATCH] ASoC: sun4i-i2s: Don't use the oversample to calculate BCLK - -The BCLK divider should be calculated using the parameters that actually -make the BCLK rate: the number of channels, the sampling rate and the -sample width. - -We've been using the oversample_rate previously because in the former SoCs, -the BCLK's parent is MCLK, which in turn is being used to generate the -oversample rate, so we end up with something like this: - -oversample = mclk_rate / sampling_rate -bclk_div = oversample / word_size / channels - -So, bclk_div = mclk_rate / sampling_rate / word_size / channels. - -And this is actually better, since the oversampling ratio only plays a role -because the MCLK is its parent, not because of what BCLK is supposed to be. - -Furthermore, that assumption of MCLK being the parent has been broken on -newer SoCs, so let's use the proper formula, and have the parent rate as an -argument. - -Fixes: 7d2993811a1e ("ASoC: sun4i-i2s: Add support for H3") -Fixes: 21faaea1343f ("ASoC: sun4i-i2s: Add support for A83T") -Fixes: 66ecce332538 ("ASoC: sun4i-i2s: Add compatibility with A64 codec I2S") -Signed-off-by: Maxime Ripard -Link: https://lore.kernel.org/r/c3595e3a9788c2ef2dcc30aa3c8c4953bb5cc249.1566242458.git-series.maxime.ripard@bootlin.com -Signed-off-by: Mark Brown ---- - sound/soc/sunxi/sun4i-i2s.c | 9 +++++---- - 1 file changed, 5 insertions(+), 4 deletions(-) - -diff --git a/sound/soc/sunxi/sun4i-i2s.c b/sound/soc/sunxi/sun4i-i2s.c -index 70608fa30bf2..d879db581073 100644 ---- a/sound/soc/sunxi/sun4i-i2s.c -+++ b/sound/soc/sunxi/sun4i-i2s.c -@@ -222,10 +222,11 @@ static const struct sun4i_i2s_clk_div sun4i_i2s_mclk_div[] = { - }; - - static int sun4i_i2s_get_bclk_div(struct sun4i_i2s *i2s, -- unsigned int oversample_rate, -+ unsigned long parent_rate, -+ unsigned int sampling_rate, - unsigned int word_size) - { -- int div = oversample_rate / word_size / 2; -+ int div = parent_rate / sampling_rate / word_size / 2; - int i; - - for (i = 0; i < ARRAY_SIZE(sun4i_i2s_bclk_div); i++) { -@@ -315,8 +316,8 @@ static int sun4i_i2s_set_clk_rate(struct snd_soc_dai *dai, - return -EINVAL; - } - -- bclk_div = sun4i_i2s_get_bclk_div(i2s, oversample_rate, -- word_size); -+ bclk_div = sun4i_i2s_get_bclk_div(i2s, i2s->mclk_freq, -+ rate, word_size); - if (bclk_div < 0) { - dev_err(dai->dev, "Unsupported BCLK divider: %d\n", bclk_div); - return -EINVAL; --- -2.23.0 - From c7dd0828c088a71f30de8d249f63b2fa9f0d322d Mon Sep 17 00:00:00 2001 From: Maxime Ripard Date: Mon, 19 Aug 2019 21:25:10 +0200