[ALSA] Various fixes for suspend/resume of ALSA PCI drivers

- Check the return value of pci_enable_device() and request_irq()
  in the suspend.  If any error occurs there, disable the device
  using snd_card_disconnect().
- Call pci_set_power_state() properly with pci_choose_state().
- Fix the order to call pci_set_power_state().
- Removed obsolete house-made PM codes in some drivers.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
This commit is contained in:
Takashi Iwai
2006-10-11 18:52:53 +02:00
committed by Jaroslav Kysela
parent c06134d73c
commit 30b35399ce
26 changed files with 276 additions and 145 deletions

View File

@@ -3966,15 +3966,9 @@ int snd_trident_suspend(struct pci_dev *pci, pm_message_t state)
snd_ac97_suspend(trident->ac97);
snd_ac97_suspend(trident->ac97_sec);
switch (trident->device) {
case TRIDENT_DEVICE_ID_DX:
case TRIDENT_DEVICE_ID_NX:
break; /* TODO */
case TRIDENT_DEVICE_ID_SI7018:
break;
}
pci_disable_device(pci);
pci_save_state(pci);
pci_set_power_state(pci, pci_choose_state(pci, state));
return 0;
}
@@ -3983,9 +3977,15 @@ int snd_trident_resume(struct pci_dev *pci)
struct snd_card *card = pci_get_drvdata(pci);
struct snd_trident *trident = card->private_data;
pci_set_power_state(pci, PCI_D0);
pci_restore_state(pci);
pci_enable_device(pci);
pci_set_master(pci); /* to be sure */
if (pci_enable_device(pci) < 0) {
printk(KERN_ERR "trident: pci_enable_device failed, "
"disabling device\n");
snd_card_disconnect(card);
return -EIO;
}
pci_set_master(pci);
switch (trident->device) {
case TRIDENT_DEVICE_ID_DX: