[ALSA] Fix resume of intel8x0
Intel8x0 driver,AC97 Codec Fix resume of intel8x0 driver. The ac97 codec didn't restore some registers properly, and the restore of ICH4 SPDIF and SDIN settings was missing. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
committed by
Jaroslav Kysela
parent
2eff7ec81e
commit
52b723888c
@ -424,6 +424,7 @@ struct _snd_intel8x0 {
|
||||
unsigned xbox: 1; /* workaround for Xbox AC'97 detection */
|
||||
|
||||
int spdif_idx; /* SPDIF BAR index; *_SPBAR or -1 if use PCMOUT */
|
||||
unsigned int sdm_saved; /* SDM reg value */
|
||||
|
||||
ac97_bus_t *ac97_bus;
|
||||
ac97_t *ac97[3];
|
||||
@ -2373,6 +2374,8 @@ static int intel8x0_suspend(snd_card_t *card, pm_message_t state)
|
||||
for (i = 0; i < 3; i++)
|
||||
if (chip->ac97[i])
|
||||
snd_ac97_suspend(chip->ac97[i]);
|
||||
if (chip->device_type == DEVICE_INTEL_ICH4)
|
||||
chip->sdm_saved = igetbyte(chip, ICHREG(SDM));
|
||||
pci_disable_device(chip->pci);
|
||||
return 0;
|
||||
}
|
||||
@ -2386,6 +2389,16 @@ static int intel8x0_resume(snd_card_t *card)
|
||||
pci_set_master(chip->pci);
|
||||
snd_intel8x0_chip_init(chip, 0);
|
||||
|
||||
/* re-initialize mixer stuff */
|
||||
if (chip->device_type == DEVICE_INTEL_ICH4) {
|
||||
/* enable separate SDINs for ICH4 */
|
||||
iputbyte(chip, ICHREG(SDM), chip->sdm_saved);
|
||||
/* use slot 10/11 for SPDIF */
|
||||
iputdword(chip, ICHREG(GLOB_CNT),
|
||||
(igetdword(chip, ICHREG(GLOB_CNT)) & ~ICH_PCM_SPDIF_MASK) |
|
||||
ICH_PCM_SPDIF_1011);
|
||||
}
|
||||
|
||||
/* refill nocache */
|
||||
if (chip->fix_nocache)
|
||||
fill_nocache(chip->bdbars.area, chip->bdbars.bytes, 1);
|
||||
|
Reference in New Issue
Block a user