Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/perex/alsa
* 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/perex/alsa: [ALSA] hda-intel - Add check of MSI availabity [ALSA] version 1.0.13 [ALSA] Fix addition of user-defined boolean controls [ALSA] Fix AC97 power-saving mode [ALSA] Fix re-use of va_list [ALSA] hda_intel: add ATI RS690 HDMI audio support [ALSA] hda-codec - Add model entry for ASUS U5F laptop [ALSA] Fix dependency of snd-adlib driver in Kconfig [ALSA] Various fixes for suspend/resume of ALSA PCI drivers [ALSA] hda-codec - Fix assignment of PCM devices for Realtek codecs [ALSA] sound/isa/opti9xx/opti92x-ad1848.c: check kmalloc() return value [ALSA] sound/isa/ad1816a/ad1816a.c: check kmalloc() return value [ALSA] sound/isa/cmi8330.c: check kmalloc() return value [ALSA] sound/isa/gus/interwave.c: check kmalloc() return value
This commit is contained in:
commit
dee6515b6d
38 changed files with 330 additions and 168 deletions
|
@ -1,3 +1,3 @@
|
|||
/* include/version.h. Generated by alsa/ksync script. */
|
||||
#define CONFIG_SND_VERSION "1.0.13"
|
||||
#define CONFIG_SND_DATE " (Fri Oct 06 18:28:19 2006 UTC)"
|
||||
#define CONFIG_SND_DATE " (Sun Oct 22 08:56:16 2006 UTC)"
|
||||
|
|
|
@ -1018,10 +1018,6 @@ static int snd_ctl_elem_add(struct snd_ctl_file *file,
|
|||
}
|
||||
switch (info->type) {
|
||||
case SNDRV_CTL_ELEM_TYPE_BOOLEAN:
|
||||
private_size = sizeof(char);
|
||||
if (info->count > 128)
|
||||
return -EINVAL;
|
||||
break;
|
||||
case SNDRV_CTL_ELEM_TYPE_INTEGER:
|
||||
private_size = sizeof(long);
|
||||
if (info->count > 128)
|
||||
|
|
|
@ -120,7 +120,10 @@ int snd_iprintf(struct snd_info_buffer *buffer, char *fmt,...)
|
|||
len = buffer->len - buffer->size;
|
||||
va_start(args, fmt);
|
||||
for (;;) {
|
||||
res = vsnprintf(buffer->buffer + buffer->curr, len, fmt, args);
|
||||
va_list ap;
|
||||
va_copy(ap, args);
|
||||
res = vsnprintf(buffer->buffer + buffer->curr, len, fmt, ap);
|
||||
va_end(ap);
|
||||
if (res < len)
|
||||
break;
|
||||
err = resize_info_buffer(buffer, buffer->len + PAGE_SIZE);
|
||||
|
|
|
@ -13,6 +13,7 @@ config SND_CS4231_LIB
|
|||
|
||||
config SND_ADLIB
|
||||
tristate "AdLib FM card"
|
||||
depends on SND
|
||||
select SND_OPL3_LIB
|
||||
help
|
||||
Say Y here to include support for AdLib FM cards.
|
||||
|
|
|
@ -120,6 +120,8 @@ static int __devinit snd_card_ad1816a_pnp(int dev, struct snd_card_ad1816a *acar
|
|||
struct pnp_resource_table *cfg = kmalloc(sizeof(*cfg), GFP_KERNEL);
|
||||
int err;
|
||||
|
||||
if (!cfg)
|
||||
return -ENOMEM;
|
||||
acard->dev = pnp_request_card_device(card, id->devs[0].id, NULL);
|
||||
if (acard->dev == NULL) {
|
||||
kfree(cfg);
|
||||
|
|
|
@ -289,6 +289,8 @@ static int __devinit snd_cmi8330_pnp(int dev, struct snd_cmi8330 *acard,
|
|||
struct pnp_resource_table * cfg = kmalloc(sizeof(struct pnp_resource_table), GFP_KERNEL);
|
||||
int err;
|
||||
|
||||
if (!cfg)
|
||||
return -ENOMEM;
|
||||
acard->cap = pnp_request_card_device(card, id->devs[0].id, NULL);
|
||||
if (acard->cap == NULL) {
|
||||
kfree(cfg);
|
||||
|
|
|
@ -564,6 +564,8 @@ static int __devinit snd_interwave_pnp(int dev, struct snd_interwave *iwcard,
|
|||
struct pnp_resource_table * cfg = kmalloc(sizeof(struct pnp_resource_table), GFP_KERNEL);
|
||||
int err;
|
||||
|
||||
if (!cfg)
|
||||
return -ENOMEM;
|
||||
iwcard->dev = pnp_request_card_device(card, id->devs[0].id, NULL);
|
||||
if (iwcard->dev == NULL) {
|
||||
kfree(cfg);
|
||||
|
|
|
@ -1683,6 +1683,8 @@ static int __init snd_card_opti9xx_pnp(struct snd_opti9xx *chip, struct pnp_card
|
|||
struct pnp_resource_table *cfg = kmalloc(sizeof(*cfg), GFP_KERNEL);
|
||||
int err;
|
||||
|
||||
if (!cfg)
|
||||
return -ENOMEM;
|
||||
chip->dev = pnp_request_card_device(card, pid->devs[0].id, NULL);
|
||||
if (chip->dev == NULL) {
|
||||
kfree(cfg);
|
||||
|
|
|
@ -570,8 +570,7 @@ int snd_ac97_put_volsw(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value
|
|||
ac97->power_up &= ~(1 << (reg>>1));
|
||||
else
|
||||
ac97->power_up |= 1 << (reg>>1);
|
||||
if (power_save)
|
||||
update_power_regs(ac97);
|
||||
update_power_regs(ac97);
|
||||
}
|
||||
#endif
|
||||
return err;
|
||||
|
@ -2337,10 +2336,7 @@ int snd_ac97_update_power(struct snd_ac97 *ac97, int reg, int powerup)
|
|||
}
|
||||
}
|
||||
|
||||
if (! power_save)
|
||||
return 0;
|
||||
|
||||
if (! powerup && ac97->power_workq)
|
||||
if (power_save && !powerup && ac97->power_workq)
|
||||
/* adjust power-down bits after two seconds delay
|
||||
* (for avoiding loud click noises for many (OSS) apps
|
||||
* that open/close frequently)
|
||||
|
|
|
@ -2032,8 +2032,10 @@ static int ali_suspend(struct pci_dev *pci, pm_message_t state)
|
|||
outl(0xffffffff, ALI_REG(chip, ALI_STOP));
|
||||
|
||||
spin_unlock_irq(&chip->reg_lock);
|
||||
|
||||
pci_disable_device(pci);
|
||||
pci_save_state(pci);
|
||||
pci_set_power_state(pci, pci_choose_state(pci, state));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2048,8 +2050,15 @@ static int ali_resume(struct pci_dev *pci)
|
|||
if (! im)
|
||||
return 0;
|
||||
|
||||
pci_set_power_state(pci, PCI_D0);
|
||||
pci_restore_state(pci);
|
||||
pci_enable_device(pci);
|
||||
if (pci_enable_device(pci) < 0) {
|
||||
printk(KERN_ERR "ali5451: pci_enable_device failed, "
|
||||
"disabling device\n");
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
pci_set_master(pci);
|
||||
|
||||
spin_lock_irq(&chip->reg_lock);
|
||||
|
||||
|
|
|
@ -768,9 +768,9 @@ static int snd_als300_suspend(struct pci_dev *pci, pm_message_t state)
|
|||
snd_pcm_suspend_all(chip->pcm);
|
||||
snd_ac97_suspend(chip->ac97);
|
||||
|
||||
pci_set_power_state(pci, PCI_D3hot);
|
||||
pci_disable_device(pci);
|
||||
pci_save_state(pci);
|
||||
pci_set_power_state(pci, pci_choose_state(pci, state));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -779,9 +779,14 @@ static int snd_als300_resume(struct pci_dev *pci)
|
|||
struct snd_card *card = pci_get_drvdata(pci);
|
||||
struct snd_als300 *chip = card->private_data;
|
||||
|
||||
pci_restore_state(pci);
|
||||
pci_enable_device(pci);
|
||||
pci_set_power_state(pci, PCI_D0);
|
||||
pci_restore_state(pci);
|
||||
if (pci_enable_device(pci) < 0) {
|
||||
printk(KERN_ERR "als300: pci_enable_device failed, "
|
||||
"disabling device\n");
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
pci_set_master(pci);
|
||||
|
||||
snd_als300_init(chip);
|
||||
|
|
|
@ -804,9 +804,9 @@ static int snd_als4000_suspend(struct pci_dev *pci, pm_message_t state)
|
|||
snd_pcm_suspend_all(chip->pcm);
|
||||
snd_sbmixer_suspend(chip);
|
||||
|
||||
pci_set_power_state(pci, PCI_D3hot);
|
||||
pci_disable_device(pci);
|
||||
pci_save_state(pci);
|
||||
pci_set_power_state(pci, pci_choose_state(pci, state));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -816,9 +816,14 @@ static int snd_als4000_resume(struct pci_dev *pci)
|
|||
struct snd_card_als4000 *acard = card->private_data;
|
||||
struct snd_sb *chip = acard->chip;
|
||||
|
||||
pci_restore_state(pci);
|
||||
pci_enable_device(pci);
|
||||
pci_set_power_state(pci, PCI_D0);
|
||||
pci_restore_state(pci);
|
||||
if (pci_enable_device(pci) < 0) {
|
||||
printk(KERN_ERR "als4000: pci_enable_device failed, "
|
||||
"disabling device\n");
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
pci_set_master(pci);
|
||||
|
||||
snd_als4000_configure(chip);
|
||||
|
|
|
@ -1442,9 +1442,9 @@ static int snd_atiixp_suspend(struct pci_dev *pci, pm_message_t state)
|
|||
snd_atiixp_aclink_down(chip);
|
||||
snd_atiixp_chip_stop(chip);
|
||||
|
||||
pci_set_power_state(pci, PCI_D3hot);
|
||||
pci_disable_device(pci);
|
||||
pci_save_state(pci);
|
||||
pci_set_power_state(pci, pci_choose_state(pci, state));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1454,9 +1454,14 @@ static int snd_atiixp_resume(struct pci_dev *pci)
|
|||
struct atiixp *chip = card->private_data;
|
||||
int i;
|
||||
|
||||
pci_restore_state(pci);
|
||||
pci_enable_device(pci);
|
||||
pci_set_power_state(pci, PCI_D0);
|
||||
pci_restore_state(pci);
|
||||
if (pci_enable_device(pci) < 0) {
|
||||
printk(KERN_ERR "atiixp: pci_enable_device failed, "
|
||||
"disabling device\n");
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
pci_set_master(pci);
|
||||
|
||||
snd_atiixp_aclink_reset(chip);
|
||||
|
|
|
@ -1128,9 +1128,9 @@ static int snd_atiixp_suspend(struct pci_dev *pci, pm_message_t state)
|
|||
snd_atiixp_aclink_down(chip);
|
||||
snd_atiixp_chip_stop(chip);
|
||||
|
||||
pci_set_power_state(pci, PCI_D3hot);
|
||||
pci_disable_device(pci);
|
||||
pci_save_state(pci);
|
||||
pci_set_power_state(pci, pci_choose_state(pci, state));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1140,9 +1140,14 @@ static int snd_atiixp_resume(struct pci_dev *pci)
|
|||
struct atiixp_modem *chip = card->private_data;
|
||||
int i;
|
||||
|
||||
pci_restore_state(pci);
|
||||
pci_enable_device(pci);
|
||||
pci_set_power_state(pci, PCI_D0);
|
||||
pci_restore_state(pci);
|
||||
if (pci_enable_device(pci) < 0) {
|
||||
printk(KERN_ERR "atiixp-modem: pci_enable_device failed, "
|
||||
"disabling device\n");
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
pci_set_master(pci);
|
||||
|
||||
snd_atiixp_aclink_reset(chip);
|
||||
|
|
|
@ -1903,9 +1903,9 @@ snd_azf3328_suspend(struct pci_dev *pci, pm_message_t state)
|
|||
for (reg = 0; reg < AZF_IO_SIZE_SYNTH_PM / 2; reg++)
|
||||
chip->saved_regs_synth[reg] = inw(chip->synth_port + reg * 2);
|
||||
|
||||
pci_set_power_state(pci, PCI_D3hot);
|
||||
pci_disable_device(pci);
|
||||
pci_save_state(pci);
|
||||
pci_set_power_state(pci, pci_choose_state(pci, state));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1916,9 +1916,14 @@ snd_azf3328_resume(struct pci_dev *pci)
|
|||
struct snd_azf3328 *chip = card->private_data;
|
||||
int reg;
|
||||
|
||||
pci_restore_state(pci);
|
||||
pci_enable_device(pci);
|
||||
pci_set_power_state(pci, PCI_D0);
|
||||
pci_restore_state(pci);
|
||||
if (pci_enable_device(pci) < 0) {
|
||||
printk(KERN_ERR "azt3328: pci_enable_device failed, "
|
||||
"disabling device\n");
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
pci_set_master(pci);
|
||||
|
||||
for (reg = 0; reg < AZF_IO_SIZE_IO2_PM / 2; reg++)
|
||||
|
|
|
@ -3122,9 +3122,9 @@ static int snd_cmipci_suspend(struct pci_dev *pci, pm_message_t state)
|
|||
/* disable ints */
|
||||
snd_cmipci_write(cm, CM_REG_INT_HLDCLR, 0);
|
||||
|
||||
pci_set_power_state(pci, PCI_D3hot);
|
||||
pci_disable_device(pci);
|
||||
pci_save_state(pci);
|
||||
pci_set_power_state(pci, pci_choose_state(pci, state));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -3134,9 +3134,14 @@ static int snd_cmipci_resume(struct pci_dev *pci)
|
|||
struct cmipci *cm = card->private_data;
|
||||
int i;
|
||||
|
||||
pci_restore_state(pci);
|
||||
pci_enable_device(pci);
|
||||
pci_set_power_state(pci, PCI_D0);
|
||||
pci_restore_state(pci);
|
||||
if (pci_enable_device(pci) < 0) {
|
||||
printk(KERN_ERR "cmipci: pci_enable_device failed, "
|
||||
"disabling device\n");
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
pci_set_master(pci);
|
||||
|
||||
/* reset / initialize to a sane state */
|
||||
|
|
|
@ -2050,6 +2050,7 @@ static int cs4281_suspend(struct pci_dev *pci, pm_message_t state)
|
|||
|
||||
pci_disable_device(pci);
|
||||
pci_save_state(pci);
|
||||
pci_set_power_state(pci, pci_choose_state(pci, state));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2060,8 +2061,14 @@ static int cs4281_resume(struct pci_dev *pci)
|
|||
unsigned int i;
|
||||
u32 ulCLK;
|
||||
|
||||
pci_set_power_state(pci, PCI_D0);
|
||||
pci_restore_state(pci);
|
||||
pci_enable_device(pci);
|
||||
if (pci_enable_device(pci) < 0) {
|
||||
printk(KERN_ERR "cs4281: pci_enable_device failed, "
|
||||
"disabling device\n");
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
pci_set_master(pci);
|
||||
|
||||
ulCLK = snd_cs4281_peekBA0(chip, BA0_CLKCR1);
|
||||
|
|
|
@ -3687,8 +3687,10 @@ int snd_cs46xx_suspend(struct pci_dev *pci, pm_message_t state)
|
|||
/* disable CLKRUN */
|
||||
chip->active_ctrl(chip, -chip->amplifier);
|
||||
chip->amplifier = amp_saved; /* restore the status */
|
||||
|
||||
pci_disable_device(pci);
|
||||
pci_save_state(pci);
|
||||
pci_set_power_state(pci, pci_choose_state(pci, state));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -3698,9 +3700,16 @@ int snd_cs46xx_resume(struct pci_dev *pci)
|
|||
struct snd_cs46xx *chip = card->private_data;
|
||||
int amp_saved;
|
||||
|
||||
pci_set_power_state(pci, PCI_D0);
|
||||
pci_restore_state(pci);
|
||||
pci_enable_device(pci);
|
||||
if (pci_enable_device(pci) < 0) {
|
||||
printk(KERN_ERR "cs46xx: pci_enable_device failed, "
|
||||
"disabling device\n");
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
pci_set_master(pci);
|
||||
|
||||
amp_saved = chip->amplifier;
|
||||
chip->amplifier = 0;
|
||||
chip->active_ctrl(chip, 1); /* force to on */
|
||||
|
|
|
@ -73,9 +73,10 @@ int snd_cs5535audio_suspend(struct pci_dev *pci, pm_message_t state)
|
|||
snd_ac97_suspend(cs5535au->ac97);
|
||||
/* save important regs, then disable aclink in hw */
|
||||
snd_cs5535audio_stop_hardware(cs5535au);
|
||||
|
||||
pci_disable_device(pci);
|
||||
pci_save_state(pci);
|
||||
|
||||
pci_set_power_state(pci, pci_choose_state(pci, state));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -87,8 +88,14 @@ int snd_cs5535audio_resume(struct pci_dev *pci)
|
|||
int timeout;
|
||||
int i;
|
||||
|
||||
pci_set_power_state(pci, PCI_D0);
|
||||
pci_restore_state(pci);
|
||||
pci_enable_device(pci);
|
||||
if (pci_enable_device(pci) < 0) {
|
||||
printk(KERN_ERR "cs5535audio: pci_enable_device failed, "
|
||||
"disabling device\n");
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
pci_set_master(pci);
|
||||
|
||||
/* set LNK_WRM_RST to reset AC link */
|
||||
|
|
|
@ -226,9 +226,9 @@ static int snd_emu10k1_suspend(struct pci_dev *pci, pm_message_t state)
|
|||
|
||||
snd_emu10k1_done(emu);
|
||||
|
||||
pci_set_power_state(pci, PCI_D3hot);
|
||||
pci_disable_device(pci);
|
||||
pci_save_state(pci);
|
||||
pci_set_power_state(pci, pci_choose_state(pci, state));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -237,11 +237,16 @@ static int snd_emu10k1_resume(struct pci_dev *pci)
|
|||
struct snd_card *card = pci_get_drvdata(pci);
|
||||
struct snd_emu10k1 *emu = card->private_data;
|
||||
|
||||
pci_restore_state(pci);
|
||||
pci_enable_device(pci);
|
||||
pci_set_power_state(pci, PCI_D0);
|
||||
pci_restore_state(pci);
|
||||
if (pci_enable_device(pci) < 0) {
|
||||
printk(KERN_ERR "emu10k1: pci_enable_device failed, "
|
||||
"disabling device\n");
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
pci_set_master(pci);
|
||||
|
||||
|
||||
snd_emu10k1_resume_init(emu);
|
||||
snd_emu10k1_efx_resume(emu);
|
||||
snd_ac97_resume(emu->ac97);
|
||||
|
|
|
@ -2072,9 +2072,10 @@ static int snd_ensoniq_suspend(struct pci_dev *pci, pm_message_t state)
|
|||
udelay(100);
|
||||
snd_ak4531_suspend(ensoniq->u.es1370.ak4531);
|
||||
#endif
|
||||
pci_set_power_state(pci, PCI_D3hot);
|
||||
|
||||
pci_disable_device(pci);
|
||||
pci_save_state(pci);
|
||||
pci_set_power_state(pci, pci_choose_state(pci, state));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2083,9 +2084,14 @@ static int snd_ensoniq_resume(struct pci_dev *pci)
|
|||
struct snd_card *card = pci_get_drvdata(pci);
|
||||
struct ensoniq *ensoniq = card->private_data;
|
||||
|
||||
pci_restore_state(pci);
|
||||
pci_enable_device(pci);
|
||||
pci_set_power_state(pci, PCI_D0);
|
||||
pci_restore_state(pci);
|
||||
if (pci_enable_device(pci) < 0) {
|
||||
printk(KERN_ERR DRIVER_NAME ": pci_enable_device failed, "
|
||||
"disabling device\n");
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
pci_set_master(pci);
|
||||
|
||||
snd_ensoniq_chip_init(ensoniq);
|
||||
|
|
|
@ -1481,10 +1481,14 @@ static int es1938_suspend(struct pci_dev *pci, pm_message_t state)
|
|||
*d = snd_es1938_reg_read(chip, *s);
|
||||
|
||||
outb(0x00, SLIO_REG(chip, IRQCONTROL)); /* disable irqs */
|
||||
if (chip->irq >= 0)
|
||||
if (chip->irq >= 0) {
|
||||
synchronize_irq(chip->irq);
|
||||
free_irq(chip->irq, chip);
|
||||
chip->irq = -1;
|
||||
}
|
||||
pci_disable_device(pci);
|
||||
pci_save_state(pci);
|
||||
pci_set_power_state(pci, pci_choose_state(pci, state));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1494,10 +1498,22 @@ static int es1938_resume(struct pci_dev *pci)
|
|||
struct es1938 *chip = card->private_data;
|
||||
unsigned char *s, *d;
|
||||
|
||||
pci_set_power_state(pci, PCI_D0);
|
||||
pci_restore_state(pci);
|
||||
pci_enable_device(pci);
|
||||
request_irq(pci->irq, snd_es1938_interrupt,
|
||||
IRQF_DISABLED|IRQF_SHARED, "ES1938", chip);
|
||||
if (pci_enable_device(pci) < 0) {
|
||||
printk(KERN_ERR "es1938: pci_enable_device failed, "
|
||||
"disabling device\n");
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (request_irq(pci->irq, snd_es1938_interrupt,
|
||||
IRQF_DISABLED|IRQF_SHARED, "ES1938", chip)) {
|
||||
printk(KERN_ERR "es1938: unable to grab IRQ %d, "
|
||||
"disabling device\n", pci->irq);
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
chip->irq = pci->irq;
|
||||
snd_es1938_chip_init(chip);
|
||||
|
||||
|
@ -1556,8 +1572,10 @@ static int snd_es1938_free(struct es1938 *chip)
|
|||
|
||||
snd_es1938_free_gameport(chip);
|
||||
|
||||
if (chip->irq >= 0)
|
||||
if (chip->irq >= 0) {
|
||||
synchronize_irq(chip->irq);
|
||||
free_irq(chip->irq, chip);
|
||||
}
|
||||
pci_release_regions(chip->pci);
|
||||
pci_disable_device(chip->pci);
|
||||
kfree(chip);
|
||||
|
@ -1602,6 +1620,7 @@ static int __devinit snd_es1938_create(struct snd_card *card,
|
|||
spin_lock_init(&chip->mixer_lock);
|
||||
chip->card = card;
|
||||
chip->pci = pci;
|
||||
chip->irq = -1;
|
||||
if ((err = pci_request_regions(pci, "ESS Solo-1")) < 0) {
|
||||
kfree(chip);
|
||||
pci_disable_device(pci);
|
||||
|
|
|
@ -432,46 +432,6 @@ MODULE_PARM_DESC(joystick, "Enable joystick.");
|
|||
#define ESM_MODE_PLAY 0
|
||||
#define ESM_MODE_CAPTURE 1
|
||||
|
||||
/* acpi states */
|
||||
enum {
|
||||
ACPI_D0=0,
|
||||
ACPI_D1,
|
||||
ACPI_D2,
|
||||
ACPI_D3
|
||||
};
|
||||
|
||||
/* bits in the acpi masks */
|
||||
#define ACPI_12MHZ ( 1 << 15)
|
||||
#define ACPI_24MHZ ( 1 << 14)
|
||||
#define ACPI_978 ( 1 << 13)
|
||||
#define ACPI_SPDIF ( 1 << 12)
|
||||
#define ACPI_GLUE ( 1 << 11)
|
||||
#define ACPI__10 ( 1 << 10) /* reserved */
|
||||
#define ACPI_PCIINT ( 1 << 9)
|
||||
#define ACPI_HV ( 1 << 8) /* hardware volume */
|
||||
#define ACPI_GPIO ( 1 << 7)
|
||||
#define ACPI_ASSP ( 1 << 6)
|
||||
#define ACPI_SB ( 1 << 5) /* sb emul */
|
||||
#define ACPI_FM ( 1 << 4) /* fm emul */
|
||||
#define ACPI_RB ( 1 << 3) /* ringbus / aclink */
|
||||
#define ACPI_MIDI ( 1 << 2)
|
||||
#define ACPI_GP ( 1 << 1) /* game port */
|
||||
#define ACPI_WP ( 1 << 0) /* wave processor */
|
||||
|
||||
#define ACPI_ALL (0xffff)
|
||||
#define ACPI_SLEEP (~(ACPI_SPDIF|ACPI_ASSP|ACPI_SB|ACPI_FM| \
|
||||
ACPI_MIDI|ACPI_GP|ACPI_WP))
|
||||
#define ACPI_NONE (ACPI__10)
|
||||
|
||||
/* these masks indicate which units we care about at
|
||||
which states */
|
||||
static u16 acpi_state_mask[] = {
|
||||
[ACPI_D0] = ACPI_ALL,
|
||||
[ACPI_D1] = ACPI_SLEEP,
|
||||
[ACPI_D2] = ACPI_SLEEP,
|
||||
[ACPI_D3] = ACPI_NONE
|
||||
};
|
||||
|
||||
|
||||
/* APU use in the driver */
|
||||
enum snd_enum_apu_type {
|
||||
|
@ -2159,21 +2119,6 @@ static void snd_es1968_reset(struct es1968 *chip)
|
|||
udelay(10);
|
||||
}
|
||||
|
||||
/*
|
||||
* power management
|
||||
*/
|
||||
static void snd_es1968_set_acpi(struct es1968 *chip, int state)
|
||||
{
|
||||
u16 active_mask = acpi_state_mask[state];
|
||||
|
||||
pci_set_power_state(chip->pci, state);
|
||||
/* make sure the units we care about are on
|
||||
XXX we might want to do this before state flipping? */
|
||||
pci_write_config_word(chip->pci, 0x54, ~ active_mask);
|
||||
pci_write_config_word(chip->pci, 0x56, ~ active_mask);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* initialize maestro chip
|
||||
*/
|
||||
|
@ -2196,9 +2141,6 @@ static void snd_es1968_chip_init(struct es1968 *chip)
|
|||
* IRQs.
|
||||
*/
|
||||
|
||||
/* do config work at full power */
|
||||
snd_es1968_set_acpi(chip, ACPI_D0);
|
||||
|
||||
/* Config Reg A */
|
||||
pci_read_config_word(pci, ESM_CONFIG_A, &w);
|
||||
|
||||
|
@ -2397,9 +2339,10 @@ static int es1968_suspend(struct pci_dev *pci, pm_message_t state)
|
|||
snd_pcm_suspend_all(chip->pcm);
|
||||
snd_ac97_suspend(chip->ac97);
|
||||
snd_es1968_bob_stop(chip);
|
||||
snd_es1968_set_acpi(chip, ACPI_D3);
|
||||
|
||||
pci_disable_device(pci);
|
||||
pci_save_state(pci);
|
||||
pci_set_power_state(pci, pci_choose_state(pci, state));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2413,9 +2356,16 @@ static int es1968_resume(struct pci_dev *pci)
|
|||
return 0;
|
||||
|
||||
/* restore all our config */
|
||||
pci_set_power_state(pci, PCI_D0);
|
||||
pci_restore_state(pci);
|
||||
pci_enable_device(pci);
|
||||
if (pci_enable_device(pci) < 0) {
|
||||
printk(KERN_ERR "es1968: pci_enable_device failed, "
|
||||
"disabling device\n");
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
pci_set_master(pci);
|
||||
|
||||
snd_es1968_chip_init(chip);
|
||||
|
||||
/* need to restore the base pointers.. */
|
||||
|
@ -2514,7 +2464,6 @@ static int snd_es1968_free(struct es1968 *chip)
|
|||
if (chip->irq >= 0)
|
||||
free_irq(chip->irq, (void *)chip);
|
||||
snd_es1968_free_gameport(chip);
|
||||
snd_es1968_set_acpi(chip, ACPI_D3);
|
||||
chip->master_switch = NULL;
|
||||
chip->master_volume = NULL;
|
||||
pci_release_regions(chip->pci);
|
||||
|
|
|
@ -1531,9 +1531,9 @@ static int snd_fm801_suspend(struct pci_dev *pci, pm_message_t state)
|
|||
chip->saved_regs[i] = inw(chip->port + saved_regs[i]);
|
||||
/* FIXME: tea575x suspend */
|
||||
|
||||
pci_set_power_state(pci, PCI_D3hot);
|
||||
pci_disable_device(pci);
|
||||
pci_save_state(pci);
|
||||
pci_set_power_state(pci, pci_choose_state(pci, state));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1543,9 +1543,14 @@ static int snd_fm801_resume(struct pci_dev *pci)
|
|||
struct fm801 *chip = card->private_data;
|
||||
int i;
|
||||
|
||||
pci_restore_state(pci);
|
||||
pci_enable_device(pci);
|
||||
pci_set_power_state(pci, PCI_D0);
|
||||
pci_restore_state(pci);
|
||||
if (pci_enable_device(pci) < 0) {
|
||||
printk(KERN_ERR "fm801: pci_enable_device failed, "
|
||||
"disabling device\n");
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
pci_set_master(pci);
|
||||
|
||||
snd_fm801_chip_init(chip, 1);
|
||||
|
|
|
@ -86,6 +86,7 @@ MODULE_SUPPORTED_DEVICE("{{Intel, ICH6},"
|
|||
"{ATI, SB450},"
|
||||
"{ATI, SB600},"
|
||||
"{ATI, RS600},"
|
||||
"{ATI, RS690},"
|
||||
"{VIA, VT8251},"
|
||||
"{VIA, VT8237A},"
|
||||
"{SiS, SIS966},"
|
||||
|
@ -336,6 +337,7 @@ struct azx {
|
|||
unsigned int initialized :1;
|
||||
unsigned int single_cmd :1;
|
||||
unsigned int polling_mode :1;
|
||||
unsigned int msi :1;
|
||||
};
|
||||
|
||||
/* driver types */
|
||||
|
@ -396,6 +398,7 @@ static char *driver_short_names[] __devinitdata = {
|
|||
*/
|
||||
#define upper_32bit(addr) (sizeof(addr) > 4 ? (u32)((addr) >> 32) : (u32)0)
|
||||
|
||||
static int azx_acquire_irq(struct azx *chip, int do_disconnect);
|
||||
|
||||
/*
|
||||
* Interface for HD codec
|
||||
|
@ -535,6 +538,18 @@ static unsigned int azx_rirb_get_response(struct hda_codec *codec)
|
|||
schedule_timeout_interruptible(1);
|
||||
} while (time_after_eq(timeout, jiffies));
|
||||
|
||||
if (chip->msi) {
|
||||
snd_printk(KERN_WARNING "hda_intel: No response from codec, "
|
||||
"disabling MSI...\n");
|
||||
free_irq(chip->irq, chip);
|
||||
chip->irq = -1;
|
||||
pci_disable_msi(chip->pci);
|
||||
chip->msi = 0;
|
||||
if (azx_acquire_irq(chip, 1) < 0)
|
||||
return -1;
|
||||
goto again;
|
||||
}
|
||||
|
||||
if (!chip->polling_mode) {
|
||||
snd_printk(KERN_WARNING "hda_intel: azx_get_response timeout, "
|
||||
"switching to polling mode...\n");
|
||||
|
@ -1363,6 +1378,20 @@ static int __devinit azx_init_stream(struct azx *chip)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int azx_acquire_irq(struct azx *chip, int do_disconnect)
|
||||
{
|
||||
if (request_irq(chip->pci->irq, azx_interrupt, IRQF_DISABLED|IRQF_SHARED,
|
||||
"HDA Intel", chip)) {
|
||||
printk(KERN_ERR "hda-intel: unable to grab IRQ %d, "
|
||||
"disabling device\n", chip->pci->irq);
|
||||
if (do_disconnect)
|
||||
snd_card_disconnect(chip->card);
|
||||
return -1;
|
||||
}
|
||||
chip->irq = chip->pci->irq;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
/*
|
||||
|
@ -1379,12 +1408,16 @@ static int azx_suspend(struct pci_dev *pci, pm_message_t state)
|
|||
snd_pcm_suspend_all(chip->pcm[i]);
|
||||
snd_hda_suspend(chip->bus, state);
|
||||
azx_free_cmd_io(chip);
|
||||
if (chip->irq >= 0)
|
||||
if (chip->irq >= 0) {
|
||||
synchronize_irq(chip->irq);
|
||||
free_irq(chip->irq, chip);
|
||||
if (!disable_msi)
|
||||
chip->irq = -1;
|
||||
}
|
||||
if (chip->msi)
|
||||
pci_disable_msi(chip->pci);
|
||||
pci_disable_device(pci);
|
||||
pci_save_state(pci);
|
||||
pci_set_power_state(pci, pci_choose_state(pci, state));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1393,15 +1426,20 @@ static int azx_resume(struct pci_dev *pci)
|
|||
struct snd_card *card = pci_get_drvdata(pci);
|
||||
struct azx *chip = card->private_data;
|
||||
|
||||
pci_set_power_state(pci, PCI_D0);
|
||||
pci_restore_state(pci);
|
||||
pci_enable_device(pci);
|
||||
if (!disable_msi)
|
||||
pci_enable_msi(pci);
|
||||
/* FIXME: need proper error handling */
|
||||
request_irq(pci->irq, azx_interrupt, IRQF_DISABLED|IRQF_SHARED,
|
||||
"HDA Intel", chip);
|
||||
chip->irq = pci->irq;
|
||||
if (pci_enable_device(pci) < 0) {
|
||||
printk(KERN_ERR "hda-intel: pci_enable_device failed, "
|
||||
"disabling device\n");
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
pci_set_master(pci);
|
||||
if (chip->msi)
|
||||
if (pci_enable_msi(pci) < 0)
|
||||
chip->msi = 0;
|
||||
if (azx_acquire_irq(chip, 1) < 0)
|
||||
return -EIO;
|
||||
azx_init_chip(chip);
|
||||
snd_hda_resume(chip->bus);
|
||||
snd_power_change_state(card, SNDRV_CTL_POWER_D0);
|
||||
|
@ -1431,15 +1469,14 @@ static int azx_free(struct azx *chip)
|
|||
/* disable position buffer */
|
||||
azx_writel(chip, DPLBASE, 0);
|
||||
azx_writel(chip, DPUBASE, 0);
|
||||
|
||||
synchronize_irq(chip->irq);
|
||||
}
|
||||
|
||||
if (chip->irq >= 0) {
|
||||
synchronize_irq(chip->irq);
|
||||
free_irq(chip->irq, (void*)chip);
|
||||
if (!disable_msi)
|
||||
pci_disable_msi(chip->pci);
|
||||
}
|
||||
if (chip->msi)
|
||||
pci_disable_msi(chip->pci);
|
||||
if (chip->remap_addr)
|
||||
iounmap(chip->remap_addr);
|
||||
|
||||
|
@ -1494,6 +1531,7 @@ static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci,
|
|||
chip->pci = pci;
|
||||
chip->irq = -1;
|
||||
chip->driver_type = driver_type;
|
||||
chip->msi = !disable_msi;
|
||||
|
||||
chip->position_fix = position_fix;
|
||||
chip->single_cmd = single_cmd;
|
||||
|
@ -1523,16 +1561,14 @@ static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci,
|
|||
goto errout;
|
||||
}
|
||||
|
||||
if (!disable_msi)
|
||||
pci_enable_msi(pci);
|
||||
if (chip->msi)
|
||||
if (pci_enable_msi(pci) < 0)
|
||||
chip->msi = 0;
|
||||
|
||||
if (request_irq(pci->irq, azx_interrupt, IRQF_DISABLED|IRQF_SHARED,
|
||||
"HDA Intel", (void*)chip)) {
|
||||
snd_printk(KERN_ERR SFX "unable to grab IRQ %d\n", pci->irq);
|
||||
if (azx_acquire_irq(chip, 0) < 0) {
|
||||
err = -EBUSY;
|
||||
goto errout;
|
||||
}
|
||||
chip->irq = pci->irq;
|
||||
|
||||
pci_set_master(pci);
|
||||
synchronize_irq(chip->irq);
|
||||
|
@ -1677,6 +1713,7 @@ static struct pci_device_id azx_ids[] = {
|
|||
{ 0x1002, 0x437b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATI }, /* ATI SB450 */
|
||||
{ 0x1002, 0x4383, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATI }, /* ATI SB600 */
|
||||
{ 0x1002, 0x793b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATIHDMI }, /* ATI RS600 HDMI */
|
||||
{ 0x1002, 0x7919, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATIHDMI }, /* ATI RS690 HDMI */
|
||||
{ 0x1106, 0x3288, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_VIA }, /* VIA VT8251/VT8237A */
|
||||
{ 0x1039, 0x7502, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_SIS }, /* SIS966 */
|
||||
{ 0x10b9, 0x5461, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ULI }, /* ULI M5461 */
|
||||
|
|
|
@ -818,6 +818,8 @@ static struct hda_board_config ad1986a_cfg_tbl[] = {
|
|||
.config = AD1986A_LAPTOP_EAPD }, /* ASUS A6J */
|
||||
{ .pci_subvendor = 0x1043, .pci_subdevice = 0x11f7,
|
||||
.config = AD1986A_LAPTOP_EAPD }, /* ASUS U5A */
|
||||
{ .pci_subvendor = 0x1043, .pci_subdevice = 0x1263,
|
||||
.config = AD1986A_LAPTOP_EAPD }, /* ASUS U5F */
|
||||
{ .pci_subvendor = 0x1043, .pci_subdevice = 0x1297,
|
||||
.config = AD1986A_LAPTOP_EAPD }, /* ASUS Z62F */
|
||||
{ .pci_subvendor = 0x103c, .pci_subdevice = 0x30af,
|
||||
|
|
|
@ -161,5 +161,6 @@ static int patch_atihdmi(struct hda_codec *codec)
|
|||
*/
|
||||
struct hda_codec_preset snd_hda_preset_atihdmi[] = {
|
||||
{ .id = 0x1002793c, .name = "ATI RS600 HDMI", .patch = patch_atihdmi },
|
||||
{ .id = 0x1002791a, .name = "ATI RS690 HDMI", .patch = patch_atihdmi },
|
||||
{} /* terminator */
|
||||
};
|
||||
|
|
|
@ -1799,7 +1799,7 @@ static int alc_build_pcms(struct hda_codec *codec)
|
|||
/* SPDIF for stream index #1 */
|
||||
if (spec->multiout.dig_out_nid || spec->dig_in_nid) {
|
||||
codec->num_pcms = 2;
|
||||
info++;
|
||||
info = spec->pcm_rec + 1;
|
||||
info->name = spec->stream_name_digital;
|
||||
if (spec->multiout.dig_out_nid &&
|
||||
spec->stream_digital_playback) {
|
||||
|
@ -1820,7 +1820,7 @@ static int alc_build_pcms(struct hda_codec *codec)
|
|||
if (spec->num_adc_nids > 1 && spec->stream_analog_capture &&
|
||||
spec->adc_nids) {
|
||||
codec->num_pcms = 3;
|
||||
info++;
|
||||
info = spec->pcm_rec + 2;
|
||||
info->name = spec->stream_name_analog;
|
||||
/* No playback stream for second PCM */
|
||||
info->stream[SNDRV_PCM_STREAM_PLAYBACK] = alc_pcm_null_playback;
|
||||
|
|
|
@ -2476,10 +2476,14 @@ static int intel8x0_suspend(struct pci_dev *pci, pm_message_t state)
|
|||
if (chip->device_type == DEVICE_INTEL_ICH4)
|
||||
chip->sdm_saved = igetbyte(chip, ICHREG(SDM));
|
||||
|
||||
if (chip->irq >= 0)
|
||||
if (chip->irq >= 0) {
|
||||
synchronize_irq(chip->irq);
|
||||
free_irq(chip->irq, chip);
|
||||
chip->irq = -1;
|
||||
}
|
||||
pci_disable_device(pci);
|
||||
pci_save_state(pci);
|
||||
pci_set_power_state(pci, pci_choose_state(pci, state));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2489,11 +2493,22 @@ static int intel8x0_resume(struct pci_dev *pci)
|
|||
struct intel8x0 *chip = card->private_data;
|
||||
int i;
|
||||
|
||||
pci_set_power_state(pci, PCI_D0);
|
||||
pci_restore_state(pci);
|
||||
pci_enable_device(pci);
|
||||
if (pci_enable_device(pci) < 0) {
|
||||
printk(KERN_ERR "intel8x0: pci_enable_device failed, "
|
||||
"disabling device\n");
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
pci_set_master(pci);
|
||||
request_irq(pci->irq, snd_intel8x0_interrupt, IRQF_DISABLED|IRQF_SHARED,
|
||||
card->shortname, chip);
|
||||
if (request_irq(pci->irq, snd_intel8x0_interrupt,
|
||||
IRQF_DISABLED|IRQF_SHARED, card->shortname, chip)) {
|
||||
printk(KERN_ERR "intel8x0: unable to grab IRQ %d, "
|
||||
"disabling device\n", pci->irq);
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
chip->irq = pci->irq;
|
||||
synchronize_irq(chip->irq);
|
||||
snd_intel8x0_chip_init(chip, 0);
|
||||
|
|
|
@ -1045,10 +1045,14 @@ static int intel8x0m_suspend(struct pci_dev *pci, pm_message_t state)
|
|||
for (i = 0; i < chip->pcm_devs; i++)
|
||||
snd_pcm_suspend_all(chip->pcm[i]);
|
||||
snd_ac97_suspend(chip->ac97);
|
||||
if (chip->irq >= 0)
|
||||
if (chip->irq >= 0) {
|
||||
synchronize_irq(chip->irq);
|
||||
free_irq(chip->irq, chip);
|
||||
chip->irq = -1;
|
||||
}
|
||||
pci_disable_device(pci);
|
||||
pci_save_state(pci);
|
||||
pci_set_power_state(pci, pci_choose_state(pci, state));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1057,11 +1061,22 @@ static int intel8x0m_resume(struct pci_dev *pci)
|
|||
struct snd_card *card = pci_get_drvdata(pci);
|
||||
struct intel8x0m *chip = card->private_data;
|
||||
|
||||
pci_set_power_state(pci, PCI_D0);
|
||||
pci_restore_state(pci);
|
||||
pci_enable_device(pci);
|
||||
if (pci_enable_device(pci) < 0) {
|
||||
printk(KERN_ERR "intel8x0m: pci_enable_device failed, "
|
||||
"disabling device\n");
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
pci_set_master(pci);
|
||||
request_irq(pci->irq, snd_intel8x0_interrupt, IRQF_DISABLED|IRQF_SHARED,
|
||||
card->shortname, chip);
|
||||
if (request_irq(pci->irq, snd_intel8x0_interrupt,
|
||||
IRQF_DISABLED|IRQF_SHARED, card->shortname, chip)) {
|
||||
printk(KERN_ERR "intel8x0m: unable to grab IRQ %d, "
|
||||
"disabling device\n", pci->irq);
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
chip->irq = pci->irq;
|
||||
snd_intel8x0_chip_init(chip, 0);
|
||||
snd_ac97_resume(chip->ac97);
|
||||
|
|
|
@ -2589,12 +2589,9 @@ static int m3_suspend(struct pci_dev *pci, pm_message_t state)
|
|||
chip->suspend_mem[index++] =
|
||||
snd_m3_assp_read(chip, MEMTYPE_INTERNAL_DATA, i);
|
||||
|
||||
/* power down apci registers */
|
||||
snd_m3_outw(chip, 0xffff, 0x54);
|
||||
snd_m3_outw(chip, 0xffff, 0x56);
|
||||
|
||||
pci_disable_device(pci);
|
||||
pci_save_state(pci);
|
||||
pci_set_power_state(pci, pci_choose_state(pci, state));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2607,8 +2604,14 @@ static int m3_resume(struct pci_dev *pci)
|
|||
if (chip->suspend_mem == NULL)
|
||||
return 0;
|
||||
|
||||
pci_set_power_state(pci, PCI_D0);
|
||||
pci_restore_state(pci);
|
||||
pci_enable_device(pci);
|
||||
if (pci_enable_device(pci) < 0) {
|
||||
printk(KERN_ERR "maestor3: pci_enable_device failed, "
|
||||
"disabling device\n");
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
pci_set_master(pci);
|
||||
|
||||
/* first lets just bring everything back. .*/
|
||||
|
|
|
@ -1390,6 +1390,7 @@ static int nm256_suspend(struct pci_dev *pci, pm_message_t state)
|
|||
chip->coeffs_current = 0;
|
||||
pci_disable_device(pci);
|
||||
pci_save_state(pci);
|
||||
pci_set_power_state(pci, pci_choose_state(pci, state));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1401,8 +1402,17 @@ static int nm256_resume(struct pci_dev *pci)
|
|||
|
||||
/* Perform a full reset on the hardware */
|
||||
chip->in_resume = 1;
|
||||
|
||||
pci_set_power_state(pci, PCI_D0);
|
||||
pci_restore_state(pci);
|
||||
pci_enable_device(pci);
|
||||
if (pci_enable_device(pci) < 0) {
|
||||
printk(KERN_ERR "nm256: pci_enable_device failed, "
|
||||
"disabling device\n");
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
pci_set_master(pci);
|
||||
|
||||
snd_nm256_init_chip(chip);
|
||||
|
||||
/* restore ac97 */
|
||||
|
|
|
@ -1178,9 +1178,9 @@ static int riptide_suspend(struct pci_dev *pci, pm_message_t state)
|
|||
snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
|
||||
snd_pcm_suspend_all(chip->pcm);
|
||||
snd_ac97_suspend(chip->ac97);
|
||||
pci_set_power_state(pci, PCI_D3hot);
|
||||
pci_disable_device(pci);
|
||||
pci_save_state(pci);
|
||||
pci_set_power_state(pci, pci_choose_state(pci, state));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1189,9 +1189,14 @@ static int riptide_resume(struct pci_dev *pci)
|
|||
struct snd_card *card = pci_get_drvdata(pci);
|
||||
struct snd_riptide *chip = card->private_data;
|
||||
|
||||
pci_restore_state(pci);
|
||||
pci_enable_device(pci);
|
||||
pci_set_power_state(pci, PCI_D0);
|
||||
pci_restore_state(pci);
|
||||
if (pci_enable_device(pci) < 0) {
|
||||
printk(KERN_ERR "riptide: pci_enable_device failed, "
|
||||
"disabling device\n");
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
pci_set_master(pci);
|
||||
snd_riptide_initialize(chip);
|
||||
snd_ac97_resume(chip->ac97);
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -2185,9 +2185,9 @@ static int snd_via82xx_suspend(struct pci_dev *pci, pm_message_t state)
|
|||
chip->capture_src_saved[1] = inb(chip->port + VIA_REG_CAPTURE_CHANNEL + 0x10);
|
||||
}
|
||||
|
||||
pci_set_power_state(pci, PCI_D3hot);
|
||||
pci_disable_device(pci);
|
||||
pci_save_state(pci);
|
||||
pci_set_power_state(pci, pci_choose_state(pci, state));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2197,9 +2197,15 @@ static int snd_via82xx_resume(struct pci_dev *pci)
|
|||
struct via82xx *chip = card->private_data;
|
||||
int i;
|
||||
|
||||
pci_restore_state(pci);
|
||||
pci_enable_device(pci);
|
||||
pci_set_power_state(pci, PCI_D0);
|
||||
pci_restore_state(pci);
|
||||
if (pci_enable_device(pci) < 0) {
|
||||
printk(KERN_ERR "via82xx: pci_enable_device failed, "
|
||||
"disabling device\n");
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
pci_set_master(pci);
|
||||
|
||||
snd_via82xx_chip_init(chip);
|
||||
|
||||
|
|
|
@ -1032,9 +1032,10 @@ static int snd_via82xx_suspend(struct pci_dev *pci, pm_message_t state)
|
|||
snd_via82xx_channel_reset(chip, &chip->devs[i]);
|
||||
synchronize_irq(chip->irq);
|
||||
snd_ac97_suspend(chip->ac97);
|
||||
pci_set_power_state(pci, PCI_D3hot);
|
||||
|
||||
pci_disable_device(pci);
|
||||
pci_save_state(pci);
|
||||
pci_set_power_state(pci, pci_choose_state(pci, state));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1044,9 +1045,14 @@ static int snd_via82xx_resume(struct pci_dev *pci)
|
|||
struct via82xx_modem *chip = card->private_data;
|
||||
int i;
|
||||
|
||||
pci_restore_state(pci);
|
||||
pci_enable_device(pci);
|
||||
pci_set_power_state(pci, PCI_D0);
|
||||
pci_restore_state(pci);
|
||||
if (pci_enable_device(pci) < 0) {
|
||||
printk(KERN_ERR "via82xx-modem: pci_enable_device failed, "
|
||||
"disabling device\n");
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
pci_set_master(pci);
|
||||
|
||||
snd_via82xx_chip_init(chip);
|
||||
|
|
|
@ -266,9 +266,9 @@ static int snd_vx222_suspend(struct pci_dev *pci, pm_message_t state)
|
|||
int err;
|
||||
|
||||
err = snd_vx_suspend(&vx->core, state);
|
||||
pci_set_power_state(pci, PCI_D3hot);
|
||||
pci_disable_device(pci);
|
||||
pci_save_state(pci);
|
||||
pci_set_power_state(pci, pci_choose_state(pci, state));
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -277,9 +277,14 @@ static int snd_vx222_resume(struct pci_dev *pci)
|
|||
struct snd_card *card = pci_get_drvdata(pci);
|
||||
struct snd_vx222 *vx = card->private_data;
|
||||
|
||||
pci_restore_state(pci);
|
||||
pci_enable_device(pci);
|
||||
pci_set_power_state(pci, PCI_D0);
|
||||
pci_restore_state(pci);
|
||||
if (pci_enable_device(pci) < 0) {
|
||||
printk(KERN_ERR "vx222: pci_enable_device failed, "
|
||||
"disabling device\n");
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
pci_set_master(pci);
|
||||
return snd_vx_resume(&vx->core);
|
||||
}
|
||||
|
|
|
@ -2218,6 +2218,7 @@ int snd_ymfpci_suspend(struct pci_dev *pci, pm_message_t state)
|
|||
snd_ymfpci_disable_dsp(chip);
|
||||
pci_disable_device(pci);
|
||||
pci_save_state(pci);
|
||||
pci_set_power_state(pci, pci_choose_state(pci, state));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2227,8 +2228,14 @@ int snd_ymfpci_resume(struct pci_dev *pci)
|
|||
struct snd_ymfpci *chip = card->private_data;
|
||||
unsigned int i;
|
||||
|
||||
pci_set_power_state(pci, PCI_D0);
|
||||
pci_restore_state(pci);
|
||||
pci_enable_device(pci);
|
||||
if (pci_enable_device(pci) < 0) {
|
||||
printk(KERN_ERR "ymfpci: pci_enable_device failed, "
|
||||
"disabling device\n");
|
||||
snd_card_disconnect(card);
|
||||
return -EIO;
|
||||
}
|
||||
pci_set_master(pci);
|
||||
snd_ymfpci_aclink_reset(pci);
|
||||
snd_ymfpci_codec_ready(chip, 0);
|
||||
|
|
Loading…
Reference in a new issue