aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2015-06-12 01:53:58 -0400
committerTakashi Iwai <tiwai@suse.de>2015-06-12 02:05:02 -0400
commit535115b5ff51c702a9a22feb918707c2fe1fbd17 (patch)
treeb77e658e7c8b00e49eb7113313f6b0deb905dc24 /sound
parenta686ec4c5f28eb1b384e4b87b08543155c970072 (diff)
ALSA: hda - Abort the probe without i915 binding for HSW/BDW
The previous patch tried to continue the probe if i915 binding fails. For for simplicity reason, we haven't implemented abort even for controller chips that are dedicated for HDMI/DP on HSW and BDW. However, Mengdong suggested that this can be dangerous; BIOS may disable gfx power well although the PCI entry for HD-audio is left, and this may result in the unexpected behavior, kernel errors, etc. For avoiding this situation, abort the probe at i915 binding failure only for HSW/BDW chips selectively. For other chips, it still continues. Fixes: bf06848bdbe5 ('ALSA: hda - Continue probing even if i915 binding fails') Reported-by: Mengdong Lin <mengdong.lin@intel.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound')
-rw-r--r--sound/pci/hda/hda_intel.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 8a0af6770e1d..a244ba706317 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -340,6 +340,11 @@ enum {
340#define use_vga_switcheroo(chip) 0 340#define use_vga_switcheroo(chip) 0
341#endif 341#endif
342 342
343#define CONTROLLER_IN_GPU(pci) (((pci)->device == 0x0a0c) || \
344 ((pci)->device == 0x0c0c) || \
345 ((pci)->device == 0x0d0c) || \
346 ((pci)->device == 0x160c))
347
343static char *driver_short_names[] = { 348static char *driver_short_names[] = {
344 [AZX_DRIVER_ICH] = "HDA Intel", 349 [AZX_DRIVER_ICH] = "HDA Intel",
345 [AZX_DRIVER_PCH] = "HDA Intel PCH", 350 [AZX_DRIVER_PCH] = "HDA Intel PCH",
@@ -1854,8 +1859,17 @@ static int azx_probe_continue(struct azx *chip)
1854 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL) { 1859 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL) {
1855#ifdef CONFIG_SND_HDA_I915 1860#ifdef CONFIG_SND_HDA_I915
1856 err = hda_i915_init(hda); 1861 err = hda_i915_init(hda);
1857 if (err < 0) 1862 if (err < 0) {
1858 goto skip_i915; 1863 /* if the controller is bound only with HDMI/DP
1864 * (for HSW and BDW), we need to abort the probe;
1865 * for other chips, still continue probing as other
1866 * codecs can be on the same link.
1867 */
1868 if (CONTROLLER_IN_GPU(pci))
1869 goto out_free;
1870 else
1871 goto skip_i915;
1872 }
1859 err = hda_display_power(hda, true); 1873 err = hda_display_power(hda, true);
1860 if (err < 0) { 1874 if (err < 0) {
1861 dev_err(chip->card->dev, 1875 dev_err(chip->card->dev,