]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 31 Jul 2013 13:34:11 +0000 (06:34 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 31 Jul 2013 13:34:11 +0000 (06:34 -0700)
added patches:
asoc-max98088-fix-element-type-of-the-register-cache.patch
asoc-wm8962-remove-remaining-direct-register-cache-accesses.patch

queue-3.4/asoc-max98088-fix-element-type-of-the-register-cache.patch [new file with mode: 0644]
queue-3.4/asoc-wm8962-remove-remaining-direct-register-cache-accesses.patch [new file with mode: 0644]
queue-3.4/series

diff --git a/queue-3.4/asoc-max98088-fix-element-type-of-the-register-cache.patch b/queue-3.4/asoc-max98088-fix-element-type-of-the-register-cache.patch
new file mode 100644 (file)
index 0000000..315c389
--- /dev/null
@@ -0,0 +1,33 @@
+From cb6f66a2d278e57a6c9d8fb59bd9ebd8ab3965c2 Mon Sep 17 00:00:00 2001
+From: Chih-Chung Chang <chihchung@chromium.org>
+Date: Mon, 15 Jul 2013 09:38:46 -0700
+Subject: ASoC: max98088 - fix element type of the register cache.
+
+From: Chih-Chung Chang <chihchung@chromium.org>
+
+commit cb6f66a2d278e57a6c9d8fb59bd9ebd8ab3965c2 upstream.
+
+The registers of max98088 are 8 bits, not 16 bits. This bug causes the
+contents of registers to be overwritten with bad values when the codec
+is suspended and then resumed.
+
+Signed-off-by: Chih-Chung Chang <chihchung@chromium.org>
+Signed-off-by: Dylan Reid <dgreid@chromium.org>
+Signed-off-by: Mark Brown <broonie@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/soc/codecs/max98088.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/sound/soc/codecs/max98088.c
++++ b/sound/soc/codecs/max98088.c
+@@ -1594,7 +1594,7 @@ static int max98088_dai2_digital_mute(st
+ static void max98088_sync_cache(struct snd_soc_codec *codec)
+ {
+-       u16 *reg_cache = codec->reg_cache;
++       u8 *reg_cache = codec->reg_cache;
+        int i;
+        if (!codec->cache_sync)
diff --git a/queue-3.4/asoc-wm8962-remove-remaining-direct-register-cache-accesses.patch b/queue-3.4/asoc-wm8962-remove-remaining-direct-register-cache-accesses.patch
new file mode 100644 (file)
index 0000000..b5c2ccf
--- /dev/null
@@ -0,0 +1,76 @@
+From 2e7ee15ced914e109a1a5b6dfcd463d846a13bd5 Mon Sep 17 00:00:00 2001
+From: Nicolin Chen <b42378@freescale.com>
+Date: Fri, 14 Jun 2013 12:34:50 +0800
+Subject: ASoC: wm8962: Remove remaining direct register cache accesses
+
+From: Nicolin Chen <b42378@freescale.com>
+
+commit 2e7ee15ced914e109a1a5b6dfcd463d846a13bd5 upstream.
+
+Also fix return values for headphone switch updates.
+
+Signed-off-by: Nicolin Chen <b42378@freescale.com>
+Signed-off-by: Mark Brown <broonie@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/soc/codecs/wm8962.c |   24 +++++++++++++-----------
+ 1 file changed, 13 insertions(+), 11 deletions(-)
+
+--- a/sound/soc/codecs/wm8962.c
++++ b/sound/soc/codecs/wm8962.c
+@@ -1599,7 +1599,6 @@ static int wm8962_put_hp_sw(struct snd_k
+                           struct snd_ctl_elem_value *ucontrol)
+ {
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+-      u16 *reg_cache = codec->reg_cache;
+       int ret;
+       /* Apply the update (if any) */
+@@ -1608,16 +1607,19 @@ static int wm8962_put_hp_sw(struct snd_k
+               return 0;
+       /* If the left PGA is enabled hit that VU bit... */
+-      if (snd_soc_read(codec, WM8962_PWR_MGMT_2) & WM8962_HPOUTL_PGA_ENA)
+-              return snd_soc_write(codec, WM8962_HPOUTL_VOLUME,
+-                                   reg_cache[WM8962_HPOUTL_VOLUME]);
++      ret = snd_soc_read(codec, WM8962_PWR_MGMT_2);
++      if (ret & WM8962_HPOUTL_PGA_ENA) {
++              snd_soc_write(codec, WM8962_HPOUTL_VOLUME,
++                            snd_soc_read(codec, WM8962_HPOUTL_VOLUME));
++              return 1;
++      }
+       /* ...otherwise the right.  The VU is stereo. */
+-      if (snd_soc_read(codec, WM8962_PWR_MGMT_2) & WM8962_HPOUTR_PGA_ENA)
+-              return snd_soc_write(codec, WM8962_HPOUTR_VOLUME,
+-                                   reg_cache[WM8962_HPOUTR_VOLUME]);
++      if (ret & WM8962_HPOUTR_PGA_ENA)
++              snd_soc_write(codec, WM8962_HPOUTR_VOLUME,
++                            snd_soc_read(codec, WM8962_HPOUTR_VOLUME));
+-      return 0;
++      return 1;
+ }
+ /* The VU bits for the speakers are in a different register to the mute
+@@ -3363,7 +3365,6 @@ static int wm8962_probe(struct snd_soc_c
+       int ret;
+       struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
+       struct wm8962_pdata *pdata = dev_get_platdata(codec->dev);
+-      u16 *reg_cache = codec->reg_cache;
+       int i, trigger, irq_pol;
+       bool dmicclk, dmicdat;
+@@ -3421,8 +3422,9 @@ static int wm8962_probe(struct snd_soc_c
+               /* Put the speakers into mono mode? */
+               if (pdata->spk_mono)
+-                      reg_cache[WM8962_CLASS_D_CONTROL_2]
+-                              |= WM8962_SPK_MONO;
++                      snd_soc_update_bits(codec, WM8962_CLASS_D_CONTROL_2,
++                              WM8962_SPK_MONO_MASK, WM8962_SPK_MONO);
++
+               /* Micbias setup, detection enable and detection
+                * threasholds. */
index 2e14cfaa108c7a03787e570d1df10584a3d1d544..d691012271eabf1c5cdc2b5ed146bb69204b5aab 100644 (file)
@@ -1,2 +1,4 @@
 iscsi-target-fix-tfc_tpg_nacl_auth_cit-configfs-length-overflow.patch
 usb-storage-add-microvault-flash-drive-to-unusual_devs.patch
+asoc-max98088-fix-element-type-of-the-register-cache.patch
+asoc-wm8962-remove-remaining-direct-register-cache-accesses.patch