[ALSA] ac97 - Suppress the reset of audio-codec from modem-codec at resume
authorTakashi Iwai <tiwai@suse.de>
Wed, 29 Aug 2007 13:12:46 +0000 (15:12 +0200)
committerJaroslav Kysela <perex@perex.cz>
Tue, 16 Oct 2007 13:59:34 +0000 (15:59 +0200)
On codec chips with both audio and modem functions (e.g. Conexant one),
performing AC97_RESET resets the whole registers.  When both audio and
modem drivers are resumed at the same time, the modem one often is
resumed after the audio, and it results in the reset of audio registers
(ALSA bug#3333).
This patch fixes such a problem.  Since the modem codec basically
doesn't need AC97_RESET, skip this initialization unless specified
as audio.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
sound/pci/ac97/ac97_codec.c

index df1333332a5e218ae1a6021079b81d0fa2078c4c..3e5ff29fc4991e1eacf05d82f57ea047fb229a70 100644 (file)
@@ -2496,7 +2496,10 @@ void snd_ac97_resume(struct snd_ac97 *ac97)
 
        snd_ac97_write(ac97, AC97_POWERDOWN, 0);
        if (! (ac97->flags & AC97_DEFAULT_POWER_OFF)) {
-               snd_ac97_write(ac97, AC97_RESET, 0);
+               if (!(ac97->scaps & AC97_SCAP_SKIP_AUDIO))
+                       snd_ac97_write(ac97, AC97_RESET, 0);
+               else if (!(ac97->scaps & AC97_SCAP_SKIP_MODEM))
+                       snd_ac97_write(ac97, AC97_EXTENDED_MID, 0);
                udelay(100);
                snd_ac97_write(ac97, AC97_POWERDOWN, 0);
        }