mirror of
https://github.com/torvalds/linux.git
synced 2024-09-20 23:13:00 +00:00
ALSA: hda: Intel: Move snd_hdac_i915_init to before probe_work.
Now that we can use -EPROBE_DEFER, it's no longer required to spin off the snd_hdac_i915_init into a workqueue. Use the -EPROBE_DEFER mechanism instead, which must be returned in the probe function. Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Link: https://lore.kernel.org/r/20231009115437.99976-11-maarten.lankhorst@linux.intel.com Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
2dddc514b6
commit
65cbbfa4e2
|
@ -2135,6 +2135,36 @@ static int azx_probe(struct pci_dev *pci,
|
|||
|
||||
pci_set_drvdata(pci, card);
|
||||
|
||||
#ifdef CONFIG_SND_HDA_I915
|
||||
/* bind with i915 if needed */
|
||||
if (chip->driver_caps & AZX_DCAPS_I915_COMPONENT) {
|
||||
err = snd_hdac_i915_init(azx_bus(chip), false);
|
||||
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 (HDA_CONTROLLER_IN_GPU(pci)) {
|
||||
dev_err_probe(card->dev, err,
|
||||
"HSW/BDW HD-audio HDMI/DP requires binding with gfx driver\n");
|
||||
|
||||
goto out_free;
|
||||
} else {
|
||||
/* don't bother any longer */
|
||||
chip->driver_caps &= ~AZX_DCAPS_I915_COMPONENT;
|
||||
}
|
||||
}
|
||||
|
||||
/* HSW/BDW controllers need this power */
|
||||
if (HDA_CONTROLLER_IN_GPU(pci))
|
||||
hda->need_i915_power = true;
|
||||
}
|
||||
#else
|
||||
if (HDA_CONTROLLER_IN_GPU(pci))
|
||||
dev_err(card->dev, "Haswell/Broadwell HDMI/DP must build in CONFIG_SND_HDA_I915\n");
|
||||
#endif
|
||||
|
||||
err = register_vga_switcheroo(chip);
|
||||
if (err < 0) {
|
||||
dev_err(card->dev, "Error registering vga_switcheroo client\n");
|
||||
|
@ -2162,11 +2192,6 @@ static int azx_probe(struct pci_dev *pci,
|
|||
}
|
||||
#endif /* CONFIG_SND_HDA_PATCH_LOADER */
|
||||
|
||||
#ifndef CONFIG_SND_HDA_I915
|
||||
if (HDA_CONTROLLER_IN_GPU(pci))
|
||||
dev_err(card->dev, "Haswell/Broadwell HDMI/DP must build in CONFIG_SND_HDA_I915\n");
|
||||
#endif
|
||||
|
||||
if (schedule_probe)
|
||||
schedule_delayed_work(&hda->probe_work, 0);
|
||||
|
||||
|
@ -2264,30 +2289,6 @@ static int azx_probe_continue(struct azx *chip)
|
|||
to_hda_bus(bus)->bus_probing = 1;
|
||||
hda->probe_continued = 1;
|
||||
|
||||
/* bind with i915 if needed */
|
||||
if (chip->driver_caps & AZX_DCAPS_I915_COMPONENT) {
|
||||
err = snd_hdac_i915_init(bus, true);
|
||||
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 (HDA_CONTROLLER_IN_GPU(pci)) {
|
||||
dev_err(chip->card->dev,
|
||||
"HSW/BDW HD-audio HDMI/DP requires binding with gfx driver\n");
|
||||
goto out_free;
|
||||
} else {
|
||||
/* don't bother any longer */
|
||||
chip->driver_caps &= ~AZX_DCAPS_I915_COMPONENT;
|
||||
}
|
||||
}
|
||||
|
||||
/* HSW/BDW controllers need this power */
|
||||
if (HDA_CONTROLLER_IN_GPU(pci))
|
||||
hda->need_i915_power = true;
|
||||
}
|
||||
|
||||
/* Request display power well for the HDA controller or codec. For
|
||||
* Haswell/Broadwell, both the display HDA controller and codec need
|
||||
* this power. For other platforms, like Baytrail/Braswell, only the
|
||||
|
|
Loading…
Reference in New Issue
Block a user