|
@@ -340,6 +340,11 @@ enum {
|
|
|
#define use_vga_switcheroo(chip) 0
|
|
|
#endif
|
|
|
|
|
|
+#define CONTROLLER_IN_GPU(pci) (((pci)->device == 0x0a0c) || \
|
|
|
+ ((pci)->device == 0x0c0c) || \
|
|
|
+ ((pci)->device == 0x0d0c) || \
|
|
|
+ ((pci)->device == 0x160c))
|
|
|
+
|
|
|
static char *driver_short_names[] = {
|
|
|
[AZX_DRIVER_ICH] = "HDA Intel",
|
|
|
[AZX_DRIVER_PCH] = "HDA Intel PCH",
|
|
@@ -1854,8 +1859,17 @@ static int azx_probe_continue(struct azx *chip)
|
|
|
if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL) {
|
|
|
#ifdef CONFIG_SND_HDA_I915
|
|
|
err = hda_i915_init(hda);
|
|
|
- if (err < 0)
|
|
|
- goto skip_i915;
|
|
|
+ if (err < 0) {
|
|
|
+ /* if the controller is bound only with HDMI/DP
|
|
|
+ * (for HSW and BDW), we need to abort the probe;
|
|
|
+ * for other chips, still continue probing as other
|
|
|
+ * codecs can be on the same link.
|
|
|
+ */
|
|
|
+ if (CONTROLLER_IN_GPU(pci))
|
|
|
+ goto out_free;
|
|
|
+ else
|
|
|
+ goto skip_i915;
|
|
|
+ }
|
|
|
err = hda_display_power(hda, true);
|
|
|
if (err < 0) {
|
|
|
dev_err(chip->card->dev,
|