From: Greg Kroah-Hartman Date: Wed, 1 Aug 2012 15:34:49 +0000 (-0700) Subject: 3.5-stable patches X-Git-Tag: v3.0.39~10 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b6fbc0b9147fe50f613da0ff16772962e179f02b;p=thirdparty%2Fkernel%2Fstable-queue.git 3.5-stable patches added patches: alsa-hda-add-support-for-realtek-alc282.patch alsa-hda-don-t-power-up-when-not-powered-down.patch alsa-hda-turn-on-pin_out-from-hdmi-playback-prepare.patch asoc-dapm-fix-locking-during-codec-shutdown.patch asoc-dapm-fix-_pre-and-_post-events-for-dapm-performance-improvements.patch asoc-wm8962-redo-early-init-of-the-part-on-resume.patch --- diff --git a/queue-3.5/alsa-hda-add-support-for-realtek-alc282.patch b/queue-3.5/alsa-hda-add-support-for-realtek-alc282.patch new file mode 100644 index 00000000000..5ea5680fa51 --- /dev/null +++ b/queue-3.5/alsa-hda-add-support-for-realtek-alc282.patch @@ -0,0 +1,32 @@ +From 4e01ec636e64707d202a1ca21a47bbc6d53085b7 Mon Sep 17 00:00:00 2001 +From: David Henningsson +Date: Wed, 18 Jul 2012 07:38:46 +0200 +Subject: ALSA: hda - Add support for Realtek ALC282 + +From: David Henningsson + +commit 4e01ec636e64707d202a1ca21a47bbc6d53085b7 upstream. + +This codec has a separate dmic path (separate dmic only ADC), +and thus it looks mostly like ALC275. + +BugLink: https://bugs.launchpad.net/bugs/1025377 +Tested-by: Ray Chen +Signed-off-by: David Henningsson +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/patch_realtek.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/sound/pci/hda/patch_realtek.c ++++ b/sound/pci/hda/patch_realtek.c +@@ -6831,6 +6831,7 @@ static const struct hda_codec_preset snd + { .id = 0x10ec0275, .name = "ALC275", .patch = patch_alc269 }, + { .id = 0x10ec0276, .name = "ALC276", .patch = patch_alc269 }, + { .id = 0x10ec0280, .name = "ALC280", .patch = patch_alc269 }, ++ { .id = 0x10ec0282, .name = "ALC282", .patch = patch_alc269 }, + { .id = 0x10ec0861, .rev = 0x100340, .name = "ALC660", + .patch = patch_alc861 }, + { .id = 0x10ec0660, .name = "ALC660-VD", .patch = patch_alc861vd }, diff --git a/queue-3.5/alsa-hda-don-t-power-up-when-not-powered-down.patch b/queue-3.5/alsa-hda-don-t-power-up-when-not-powered-down.patch new file mode 100644 index 00000000000..69eb7b55878 --- /dev/null +++ b/queue-3.5/alsa-hda-don-t-power-up-when-not-powered-down.patch @@ -0,0 +1,37 @@ +From b43d224767e426cf1a8b6622d1d172f2b2b0e857 Mon Sep 17 00:00:00 2001 +From: Dylan Reid +Date: Thu, 21 Jun 2012 21:51:22 -0700 +Subject: ALSA: hda - Don't power up when not powered down. + +From: Dylan Reid + +commit b43d224767e426cf1a8b6622d1d172f2b2b0e857 upstream. + +After cancel_delayed_work_sync returns, the power down work either never +started (power_on == 1) or finished (power_on == 0). In the former case +there is no need to power up again. + +Signed-off-by: Dylan Reid +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/hda_codec.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +--- a/sound/pci/hda/hda_codec.c ++++ b/sound/pci/hda/hda_codec.c +@@ -4418,6 +4418,13 @@ static void __snd_hda_power_up(struct hd + cancel_delayed_work_sync(&codec->power_work); + + spin_lock(&codec->power_lock); ++ /* If the power down delayed work was cancelled above before starting, ++ * then there is no need to go through power up here. ++ */ ++ if (codec->power_on) { ++ spin_unlock(&codec->power_lock); ++ return; ++ } + trace_hda_power_up(codec); + snd_hda_update_power_acct(codec); + codec->power_on = 1; diff --git a/queue-3.5/alsa-hda-turn-on-pin_out-from-hdmi-playback-prepare.patch b/queue-3.5/alsa-hda-turn-on-pin_out-from-hdmi-playback-prepare.patch new file mode 100644 index 00000000000..1396ea89ae4 --- /dev/null +++ b/queue-3.5/alsa-hda-turn-on-pin_out-from-hdmi-playback-prepare.patch @@ -0,0 +1,63 @@ +From 9e76e6d031482194a5b24d8e9ab88063fbd6b4b5 Mon Sep 17 00:00:00 2001 +From: Dylan Reid +Date: Thu, 19 Jul 2012 17:52:58 -0700 +Subject: ALSA: hda - Turn on PIN_OUT from hdmi playback prepare. + +From: Dylan Reid + +commit 9e76e6d031482194a5b24d8e9ab88063fbd6b4b5 upstream. + +Turn on the pin widget's PIN_OUT bit from playback prepare. The pin is +enabled in open, but is disabled in hdmi_init_pin which is called during +system resume. This causes a system suspend/resume during playback to +mute HDMI/DP. Enabling the pin in prepare instead of open allows calling +snd_pcm_prepare after a system resume to restore audio. + +Signed-off-by: Dylan Reid +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/patch_hdmi.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +--- a/sound/pci/hda/patch_hdmi.c ++++ b/sound/pci/hda/patch_hdmi.c +@@ -876,7 +876,6 @@ static int hdmi_pcm_open(struct hda_pcm_ + struct hdmi_spec_per_pin *per_pin; + struct hdmi_eld *eld; + struct hdmi_spec_per_cvt *per_cvt = NULL; +- int pinctl; + + /* Validate hinfo */ + pin_idx = hinfo_to_pin_index(spec, hinfo); +@@ -912,11 +911,6 @@ static int hdmi_pcm_open(struct hda_pcm_ + snd_hda_codec_write(codec, per_pin->pin_nid, 0, + AC_VERB_SET_CONNECT_SEL, + mux_idx); +- pinctl = snd_hda_codec_read(codec, per_pin->pin_nid, 0, +- AC_VERB_GET_PIN_WIDGET_CONTROL, 0); +- snd_hda_codec_write(codec, per_pin->pin_nid, 0, +- AC_VERB_SET_PIN_WIDGET_CONTROL, +- pinctl | PIN_OUT); + snd_hda_spdif_ctls_assign(codec, pin_idx, per_cvt->cvt_nid); + + /* Initially set the converter's capabilities */ +@@ -1153,11 +1147,17 @@ static int generic_hdmi_playback_pcm_pre + struct hdmi_spec *spec = codec->spec; + int pin_idx = hinfo_to_pin_index(spec, hinfo); + hda_nid_t pin_nid = spec->pins[pin_idx].pin_nid; ++ int pinctl; + + hdmi_set_channel_count(codec, cvt_nid, substream->runtime->channels); + + hdmi_setup_audio_infoframe(codec, pin_idx, substream); + ++ pinctl = snd_hda_codec_read(codec, pin_nid, 0, ++ AC_VERB_GET_PIN_WIDGET_CONTROL, 0); ++ snd_hda_codec_write(codec, pin_nid, 0, ++ AC_VERB_SET_PIN_WIDGET_CONTROL, pinctl | PIN_OUT); ++ + return hdmi_setup_stream(codec, cvt_nid, pin_nid, stream_tag, format); + } + diff --git a/queue-3.5/asoc-dapm-fix-_pre-and-_post-events-for-dapm-performance-improvements.patch b/queue-3.5/asoc-dapm-fix-_pre-and-_post-events-for-dapm-performance-improvements.patch new file mode 100644 index 00000000000..ba03e3b0757 --- /dev/null +++ b/queue-3.5/asoc-dapm-fix-_pre-and-_post-events-for-dapm-performance-improvements.patch @@ -0,0 +1,43 @@ +From 0ff97ebf0804d2e519d578fcb4db03f104d2ca8c Mon Sep 17 00:00:00 2001 +From: Mark Brown +Date: Fri, 20 Jul 2012 17:29:34 +0100 +Subject: ASoC: dapm: Fix _PRE and _POST events for DAPM performance improvements + +From: Mark Brown + +commit 0ff97ebf0804d2e519d578fcb4db03f104d2ca8c upstream. + +Ever since the DAPM performance improvements we've been marking all widgets +as not dirty after each DAPM run. Since _PRE and _POST events aren't part +of the DAPM graph this has rendered them non-functional, they will never be +marked dirty again and thus will never be run again. + +Fix this by skipping them when marking widgets as not dirty. + +Signed-off-by: Mark Brown +Acked-by: Liam Girdwood +Signed-off-by: Greg Kroah-Hartman + +--- + sound/soc/soc-dapm.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +--- a/sound/soc/soc-dapm.c ++++ b/sound/soc/soc-dapm.c +@@ -1570,7 +1570,15 @@ static int dapm_power_widgets(struct snd + } + + list_for_each_entry(w, &card->widgets, list) { +- list_del_init(&w->dirty); ++ switch (w->id) { ++ case snd_soc_dapm_pre: ++ case snd_soc_dapm_post: ++ /* These widgets always need to be powered */ ++ break; ++ default: ++ list_del_init(&w->dirty); ++ break; ++ } + + if (w->power) { + d = w->dapm; diff --git a/queue-3.5/asoc-dapm-fix-locking-during-codec-shutdown.patch b/queue-3.5/asoc-dapm-fix-locking-during-codec-shutdown.patch new file mode 100644 index 00000000000..b9b0befaa0b --- /dev/null +++ b/queue-3.5/asoc-dapm-fix-locking-during-codec-shutdown.patch @@ -0,0 +1,47 @@ +From 01005a729a17ab419f61a366e22f3419e7a2c3fe Mon Sep 17 00:00:00 2001 +From: Liam Girdwood +Date: Fri, 6 Jul 2012 16:57:05 +0100 +Subject: ASoC: dapm: Fix locking during codec shutdown + +From: Liam Girdwood + +commit 01005a729a17ab419f61a366e22f3419e7a2c3fe upstream. + +Codec shutdown performs a DAPM power sequence that might cause conflicts +and/or race conditions if another stream power event is running simultaneously. +Use card's dapm mutex to protect any potential race condition between them. + +Signed-off-by: Misael Lopez Cruz +Signed-off-by: Liam Girdwood +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman + +--- + sound/soc/soc-dapm.c | 5 +++++ + 1 file changed, 5 insertions(+) + +--- a/sound/soc/soc-dapm.c ++++ b/sound/soc/soc-dapm.c +@@ -3538,10 +3538,13 @@ EXPORT_SYMBOL_GPL(snd_soc_dapm_free); + + static void soc_dapm_shutdown_codec(struct snd_soc_dapm_context *dapm) + { ++ struct snd_soc_card *card = dapm->card; + struct snd_soc_dapm_widget *w; + LIST_HEAD(down_list); + int powerdown = 0; + ++ mutex_lock(&card->dapm_mutex); ++ + list_for_each_entry(w, &dapm->card->widgets, list) { + if (w->dapm != dapm) + continue; +@@ -3564,6 +3567,8 @@ static void soc_dapm_shutdown_codec(stru + snd_soc_dapm_set_bias_level(dapm, + SND_SOC_BIAS_STANDBY); + } ++ ++ mutex_unlock(&card->dapm_mutex); + } + + /* diff --git a/queue-3.5/asoc-wm8962-redo-early-init-of-the-part-on-resume.patch b/queue-3.5/asoc-wm8962-redo-early-init-of-the-part-on-resume.patch new file mode 100644 index 00000000000..45fe29cfb2a --- /dev/null +++ b/queue-3.5/asoc-wm8962-redo-early-init-of-the-part-on-resume.patch @@ -0,0 +1,32 @@ +From e4dd76788c7e5b27165890d712c8c4f6f0abd645 Mon Sep 17 00:00:00 2001 +From: Mark Brown +Date: Wed, 11 Jul 2012 19:03:48 +0100 +Subject: ASoC: wm8962: Redo early init of the part on resume + +From: Mark Brown + +commit e4dd76788c7e5b27165890d712c8c4f6f0abd645 upstream. + +Ensure robust startup of the part by going through the reset procedure +prior to resyncing the full register cache, avoiding potential intermittent +faults in some designs. + +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman + +--- + sound/soc/codecs/wm8962.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/sound/soc/codecs/wm8962.c ++++ b/sound/soc/codecs/wm8962.c +@@ -3722,6 +3722,9 @@ static int wm8962_runtime_resume(struct + } + + regcache_cache_only(wm8962->regmap, false); ++ ++ wm8962_reset(wm8962); ++ + regcache_sync(wm8962->regmap); + + regmap_update_bits(wm8962->regmap, WM8962_ANTI_POP, diff --git a/queue-3.5/series b/queue-3.5/series index dcaba3852f5..798706560c9 100644 --- a/queue-3.5/series +++ b/queue-3.5/series @@ -18,3 +18,9 @@ rt2800usb-2001-3c17-is-an-rt3370-device.patch arm-dt-tegra-trimslice-enable-usb2-port.patch arm-omap2-opp-fix-to-ensure-check-of-right-oppdef-after-bad-one.patch arm-dt-tegra-trimslice-add-vbus-gpio-property.patch +asoc-dapm-fix-locking-during-codec-shutdown.patch +asoc-dapm-fix-_pre-and-_post-events-for-dapm-performance-improvements.patch +asoc-wm8962-redo-early-init-of-the-part-on-resume.patch +alsa-hda-add-support-for-realtek-alc282.patch +alsa-hda-turn-on-pin_out-from-hdmi-playback-prepare.patch +alsa-hda-don-t-power-up-when-not-powered-down.patch