ALSA: hda - Avoid doubly suspend after vga switcheroo
The HD-audio driver artificially calls the suspend and the resume code path in the VGA switcheroo state changes. When a machine goes to suspend, it tries to suspend the device again, and it stalls at snd_power_wait(). This patch adds checks whether the devices were already in (forced) suspend in PM callbacks for avoiding the doubly suspend. Reported-by: Daniel J Blueman <daniel@quora.org> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
1d31affbef
commit
c5c215232d
|
@ -2630,6 +2630,9 @@ static int azx_suspend(struct device *dev)
|
||||||
struct azx *chip = card->private_data;
|
struct azx *chip = card->private_data;
|
||||||
struct azx_pcm *p;
|
struct azx_pcm *p;
|
||||||
|
|
||||||
|
if (chip->disabled)
|
||||||
|
return 0;
|
||||||
|
|
||||||
snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
|
snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
|
||||||
azx_clear_irq_pending(chip);
|
azx_clear_irq_pending(chip);
|
||||||
list_for_each_entry(p, &chip->pcm_list, list)
|
list_for_each_entry(p, &chip->pcm_list, list)
|
||||||
|
@ -2655,6 +2658,9 @@ static int azx_resume(struct device *dev)
|
||||||
struct snd_card *card = dev_get_drvdata(dev);
|
struct snd_card *card = dev_get_drvdata(dev);
|
||||||
struct azx *chip = card->private_data;
|
struct azx *chip = card->private_data;
|
||||||
|
|
||||||
|
if (chip->disabled)
|
||||||
|
return 0;
|
||||||
|
|
||||||
pci_set_power_state(pci, PCI_D0);
|
pci_set_power_state(pci, PCI_D0);
|
||||||
pci_restore_state(pci);
|
pci_restore_state(pci);
|
||||||
if (pci_enable_device(pci) < 0) {
|
if (pci_enable_device(pci) < 0) {
|
||||||
|
|
Loading…
Reference in New Issue