mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-08-03 16:07:51 +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
|
||||
|
||||
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: Maxime Ripard <maxime.ripard@bootlin.com>
|
||||
Date: Mon, 19 Aug 2019 21:25:10 +0200
|
||||
|
Loading…
x
Reference in New Issue
Block a user