mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-08-06 01:17:49 +00:00
linux (Allwinner): fix 0001-backport-from-5.4.patch for 5.3.4
This commit is contained in:
parent
0ac371937c
commit
84b9af4057
@ -2516,73 +2516,6 @@ index d97d694c48df..70608fa30bf2 100644
|
|||||||
--
|
--
|
||||||
2.23.0
|
2.23.0
|
||||||
|
|
||||||
From 7df8f9a20196072162d9dc8fe99943f2d35f23d5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Maxime Ripard <maxime.ripard@bootlin.com>
|
|
||||||
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 <maxime.ripard@bootlin.com>
|
|
||||||
Link: https://lore.kernel.org/r/c3595e3a9788c2ef2dcc30aa3c8c4953bb5cc249.1566242458.git-series.maxime.ripard@bootlin.com
|
|
||||||
Signed-off-by: Mark Brown <broonie@kernel.org>
|
|
||||||
---
|
|
||||||
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 c7dd0828c088a71f30de8d249f63b2fa9f0d322d Mon Sep 17 00:00:00 2001
|
||||||
From: Maxime Ripard <maxime.ripard@bootlin.com>
|
From: Maxime Ripard <maxime.ripard@bootlin.com>
|
||||||
Date: Mon, 19 Aug 2019 21:25:10 +0200
|
Date: Mon, 19 Aug 2019 21:25:10 +0200
|
||||||
|
Loading…
x
Reference in New Issue
Block a user