The patch below does not apply to the .39-stable tree.
If someone wants it applied there, or to any other stable or longterm
tree, then please email the backport, including the original git commit
id to <[email protected]>.

thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

>From d7fdae7c6533b9a409158c736781cdd352b76793 Mon Sep 17 00:00:00 2001
From: Mark Brown <[email protected]>
Date: Sun, 15 May 2011 18:02:53 -0700
Subject: [PATCH] ASoC: Skip noop reconfiguration of WM8958 DSP2 algorithms

If we're setting the currently applied value for one of the DSP algorithm
configurations we can just skip all the handling as the control set is a
noop. This ensures we do not disrupt a running DSP.

Signed-off-by: Mark Brown <[email protected]>
Acked-by: Liam Girdwood <[email protected]>
Cc: [email protected]

diff --git a/sound/soc/codecs/wm8958-dsp2.c b/sound/soc/codecs/wm8958-dsp2.c
index 5d4bc7a..ca26779 100644
--- a/sound/soc/codecs/wm8958-dsp2.c
+++ b/sound/soc/codecs/wm8958-dsp2.c
@@ -508,6 +508,9 @@ static int wm8958_mbc_put(struct snd_kcontrol *kcontrol,
        struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
        struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
 
+       if (wm8994->mbc_ena[mbc] == ucontrol->value.integer.value[0])
+               return 0;
+
        if (ucontrol->value.integer.value[0] > 1)
                return -EINVAL;
 
@@ -628,6 +631,9 @@ static int wm8958_vss_put(struct snd_kcontrol *kcontrol,
        struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
        struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
 
+       if (wm8994->vss_ena[vss] == ucontrol->value.integer.value[0])
+               return 0;
+
        if (ucontrol->value.integer.value[0] > 1)
                return -EINVAL;
 
@@ -689,6 +695,16 @@ static int wm8958_hpf_put(struct snd_kcontrol *kcontrol,
        struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
        struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
 
+       if (hpf < 3) {
+               if (wm8994->hpf1_ena[hpf % 3] ==
+                   ucontrol->value.integer.value[0])
+                       return 0;
+       } else {
+               if (wm8994->hpf2_ena[hpf % 3] ==
+                   ucontrol->value.integer.value[0])
+                       return 0;
+       }
+
        if (ucontrol->value.integer.value[0] > 1)
                return -EINVAL;
 
@@ -782,6 +798,9 @@ static int wm8958_enh_eq_put(struct snd_kcontrol *kcontrol,
        struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
        struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
 
+       if (wm8994->enh_eq_ena[eq] == ucontrol->value.integer.value[0])
+               return 0;
+
        if (ucontrol->value.integer.value[0] > 1)
                return -EINVAL;
 

_______________________________________________
stable mailing list
[email protected]
http://linux.kernel.org/mailman/listinfo/stable

Reply via email to