summaryrefslogtreecommitdiffstats
path: root/ALSA-hda-Really-restrict-i915-notifier-to-HSW.patch
diff options
context:
space:
mode:
authorJosh Boyer <jwboyer@fedoraproject.org>2016-03-19 16:14:02 -0400
committerJosh Boyer <jwboyer@fedoraproject.org>2016-03-19 16:14:02 -0400
commit8e2d7107d3d6fd51c3077a959bd3a10f62f2a1b0 (patch)
treed5be6708648b7a4206167a30b9788971503c0758 /ALSA-hda-Really-restrict-i915-notifier-to-HSW.patch
parent3f7b06675b02c8deeb4eec2a54bb359a541147a4 (diff)
downloadkernel-8e2d7107d3d6fd51c3077a959bd3a10f62f2a1b0.tar.gz
kernel-8e2d7107d3d6fd51c3077a959bd3a10f62f2a1b0.tar.xz
kernel-8e2d7107d3d6fd51c3077a959bd3a10f62f2a1b0.zip
Linux v4.5-6486-g6b5f04b6cf8e
- cgroup, libata, workqueue, block, akpm, usb merges
Diffstat (limited to 'ALSA-hda-Really-restrict-i915-notifier-to-HSW.patch')
-rw-r--r--ALSA-hda-Really-restrict-i915-notifier-to-HSW.patch80
1 files changed, 80 insertions, 0 deletions
diff --git a/ALSA-hda-Really-restrict-i915-notifier-to-HSW.patch b/ALSA-hda-Really-restrict-i915-notifier-to-HSW.patch
new file mode 100644
index 000000000..2224e7fd0
--- /dev/null
+++ b/ALSA-hda-Really-restrict-i915-notifier-to-HSW.patch
@@ -0,0 +1,80 @@
+From 3fb329b2c3b6c2f009aa1255d2436ec49e49877f Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Fri, 18 Mar 2016 15:10:08 +0100
+Subject: [PATCH 1/3] ALSA: hda - Really restrict i915 notifier to HSW+
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The commit [b62232d429fa: ALSA: hda - Limit i915 HDMI binding only for
+HSW and later] tried to limit the usage of i915 audio notifier to the
+recent Intel models and switch to the old method on pre-Haswell
+models. However, it assumed that the i915 component binding hasn't
+been done on such models, and the assumption was wrong: namely,
+Baytrail had already the i915 component binding due to powerwell
+control. Thus, the workaround wasn't applied to Baytrail.
+
+For fixing this properly, this patch introduces a new flag indicating
+the usage of audio notifier and codec_has_acomp() refers to this flag
+instead of checking the existence of audio component.
+
+Reported-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
+Cc: <stable@vger.kernel.org> # v4.5
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+---
+ sound/pci/hda/patch_hdmi.c | 24 +++++++++++++++++-------
+ 1 file changed, 17 insertions(+), 7 deletions(-)
+
+diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
+index 49ee4e55dd16..8cdb804aa9cf 100644
+--- a/sound/pci/hda/patch_hdmi.c
++++ b/sound/pci/hda/patch_hdmi.c
+@@ -152,6 +152,7 @@ struct hdmi_spec {
+ struct hda_pcm_stream pcm_playback;
+
+ /* i915/powerwell (Haswell+/Valleyview+) specific */
++ bool use_acomp_notifier; /* use i915 eld_notify callback for hotplug */
+ struct i915_audio_component_audio_ops i915_audio_ops;
+ bool i915_bound; /* was i915 bound in this driver? */
+
+@@ -159,8 +160,11 @@ struct hdmi_spec {
+ };
+
+ #ifdef CONFIG_SND_HDA_I915
+-#define codec_has_acomp(codec) \
+- ((codec)->bus->core.audio_component != NULL)
++static inline bool codec_has_acomp(struct hda_codec *codec)
++{
++ struct hdmi_spec *spec = codec->spec;
++ return spec->use_acomp_notifier;
++}
+ #else
+ #define codec_has_acomp(codec) false
+ #endif
+@@ -2248,12 +2252,18 @@ static int patch_generic_hdmi(struct hda_codec *codec)
+ codec->spec = spec;
+ hdmi_array_init(spec, 4);
+
++#ifdef CONFIG_SND_HDA_I915
+ /* Try to bind with i915 for Intel HSW+ codecs (if not done yet) */
+- if (!codec_has_acomp(codec) &&
+- (codec->core.vendor_id >> 16) == 0x8086 &&
+- is_haswell_plus(codec))
+- if (!snd_hdac_i915_init(&codec->bus->core))
+- spec->i915_bound = true;
++ if ((codec->core.vendor_id >> 16) == 0x8086 &&
++ is_haswell_plus(codec)) {
++ if (!codec->bus->core.audio_component)
++ if (!snd_hdac_i915_init(&codec->bus->core))
++ spec->i915_bound = true;
++ /* use i915 audio component notifier for hotplug */
++ if (codec->bus->core.audio_component)
++ spec->use_acomp_notifier = true;
++ }
++#endif
+
+ if (is_haswell_plus(codec)) {
+ intel_haswell_enable_all_pins(codec, true);
+--
+2.5.0
+