diff options
author | Takashi Iwai <tiwai@suse.de> | 2015-06-10 06:03:49 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2015-06-11 00:51:19 -0400 |
commit | bf06848bdbe549175d25d2327ab9f37d4bd556b7 (patch) | |
tree | 0f415ed593f5168966068ab787b2d9fb9c3701ef /sound/pci | |
parent | 98a226ed21949601b270f7ea20abc9f72f7b0be9 (diff) |
ALSA: hda - Continue probing even if i915 binding fails
Currently snd-hda-intel driver aborts the probing of Intel HD-audio
controller with i915 power well management when binding with i915
driver via hda_i915_init() fails. This is no big problem for Haswell
and Broadwell where the HD-audio controllers are dedicated to
HDMI/DP, thus i915 link is mandatory. However, Skylake, Baytrail and
Braswell have only one controller and both HDMI/DP and analog codecs
share the same bus. Thus, even if HDMI/DP isn't usable, we should
keep the controller working for other codecs.
For fixing this, this patch simply allows continuing the probing even
if hda_i915_init() call fails. This may leave stale sound components
for HDMI/DP devices that are unbound with graphics. We could abort
the probing selectively, but from the code simplicity POV, it's better
to continue in all cases.
Reported-by: Libin Yang <libin.yang@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci')
-rw-r--r-- | sound/pci/hda/hda_intel.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index fea198c58196..8a0af6770e1d 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
@@ -1855,7 +1855,7 @@ static int azx_probe_continue(struct azx *chip) | |||
1855 | #ifdef CONFIG_SND_HDA_I915 | 1855 | #ifdef CONFIG_SND_HDA_I915 |
1856 | err = hda_i915_init(hda); | 1856 | err = hda_i915_init(hda); |
1857 | if (err < 0) | 1857 | if (err < 0) |
1858 | goto out_free; | 1858 | goto skip_i915; |
1859 | err = hda_display_power(hda, true); | 1859 | err = hda_display_power(hda, true); |
1860 | if (err < 0) { | 1860 | if (err < 0) { |
1861 | dev_err(chip->card->dev, | 1861 | dev_err(chip->card->dev, |
@@ -1865,6 +1865,7 @@ static int azx_probe_continue(struct azx *chip) | |||
1865 | #endif | 1865 | #endif |
1866 | } | 1866 | } |
1867 | 1867 | ||
1868 | skip_i915: | ||
1868 | err = azx_first_init(chip); | 1869 | err = azx_first_init(chip); |
1869 | if (err < 0) | 1870 | if (err < 0) |
1870 | goto out_free; | 1871 | goto out_free; |