From 3d50c1d1d2560a91a0a491ac6ac0b68d783ff6eb Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 31 Jul 2013 06:34:11 -0700 Subject: [PATCH] 3.4-stable patches added patches: asoc-max98088-fix-element-type-of-the-register-cache.patch asoc-wm8962-remove-remaining-direct-register-cache-accesses.patch --- ...x-element-type-of-the-register-cache.patch | 33 ++++++++ ...ining-direct-register-cache-accesses.patch | 76 +++++++++++++++++++ queue-3.4/series | 2 + 3 files changed, 111 insertions(+) create mode 100644 queue-3.4/asoc-max98088-fix-element-type-of-the-register-cache.patch create mode 100644 queue-3.4/asoc-wm8962-remove-remaining-direct-register-cache-accesses.patch 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 index 00000000000..315c38958c3 --- /dev/null +++ b/queue-3.4/asoc-max98088-fix-element-type-of-the-register-cache.patch @@ -0,0 +1,33 @@ +From cb6f66a2d278e57a6c9d8fb59bd9ebd8ab3965c2 Mon Sep 17 00:00:00 2001 +From: Chih-Chung Chang +Date: Mon, 15 Jul 2013 09:38:46 -0700 +Subject: ASoC: max98088 - fix element type of the register cache. + +From: Chih-Chung Chang + +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 +Signed-off-by: Dylan Reid +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..b5c2ccff6da --- /dev/null +++ b/queue-3.4/asoc-wm8962-remove-remaining-direct-register-cache-accesses.patch @@ -0,0 +1,76 @@ +From 2e7ee15ced914e109a1a5b6dfcd463d846a13bd5 Mon Sep 17 00:00:00 2001 +From: Nicolin Chen +Date: Fri, 14 Jun 2013 12:34:50 +0800 +Subject: ASoC: wm8962: Remove remaining direct register cache accesses + +From: Nicolin Chen + +commit 2e7ee15ced914e109a1a5b6dfcd463d846a13bd5 upstream. + +Also fix return values for headphone switch updates. + +Signed-off-by: Nicolin Chen +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman + +--- + 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. */ diff --git a/queue-3.4/series b/queue-3.4/series index 2e14cfaa108..d691012271e 100644 --- a/queue-3.4/series +++ b/queue-3.4/series @@ -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 -- 2.47.3