diff options
Diffstat (limited to 'target/linux/brcm2708/patches-4.19/950-0187-rpi-wm8804-soundcard-configure-wm8804-clocks-only-on.patch')
-rw-r--r-- | target/linux/brcm2708/patches-4.19/950-0187-rpi-wm8804-soundcard-configure-wm8804-clocks-only-on.patch | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/target/linux/brcm2708/patches-4.19/950-0187-rpi-wm8804-soundcard-configure-wm8804-clocks-only-on.patch b/target/linux/brcm2708/patches-4.19/950-0187-rpi-wm8804-soundcard-configure-wm8804-clocks-only-on.patch new file mode 100644 index 0000000000..7edd25f9eb --- /dev/null +++ b/target/linux/brcm2708/patches-4.19/950-0187-rpi-wm8804-soundcard-configure-wm8804-clocks-only-on.patch @@ -0,0 +1,46 @@ +From f6b133a056e8fde7f4707e2874e204c7d5d671a2 Mon Sep 17 00:00:00 2001 +From: Matthias Reichl <hias@horus.com> +Date: Sun, 18 Nov 2018 15:32:28 +0100 +Subject: [PATCH] rpi-wm8804-soundcard: configure wm8804 clocks only on + rate change + +This should avoid clicks when stopping and immediately afterwards +starting a stream with the same samplerate as before. + +Signed-off-by: Matthias Reichl <hias@horus.com> +--- + sound/soc/bcm/rpi-wm8804-soundcard.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +--- a/sound/soc/bcm/rpi-wm8804-soundcard.c ++++ b/sound/soc/bcm/rpi-wm8804-soundcard.c +@@ -64,6 +64,7 @@ struct snd_rpi_wm8804_drvdata { + + static struct gpio_desc *snd_clk44gpio; + static struct gpio_desc *snd_clk48gpio; ++static int wm8804_samplerate = 0; + + #define CLK_44EN_RATE 22579200UL + #define CLK_48EN_RATE 24576000UL +@@ -117,6 +118,12 @@ static int snd_rpi_wm8804_hw_params(stru + struct wm8804_clk_cfg clk_cfg; + int samplerate = params_rate(params); + ++ if (samplerate == wm8804_samplerate) ++ return 0; ++ ++ /* clear until all clocks are setup properly */ ++ wm8804_samplerate = 0; ++ + snd_rpi_wm8804_clk_cfg(samplerate, &clk_cfg); + + pr_debug("%s samplerate: %d mclk_freq: %u mclk_div: %u sysclk: %u\n", +@@ -163,6 +170,8 @@ static int snd_rpi_wm8804_hw_params(stru + return ret; + } + ++ wm8804_samplerate = samplerate; ++ + /* set sampling frequency status bits */ + snd_soc_component_update_bits(component, WM8804_SPDTX4, 0x0f, + sampling_freq); |