ALSA: maestro3: Fix Allegro mute until master volume/mute is touched
authorOndrej Zary <linux@rainbow-software.org>
Sun, 1 Nov 2015 19:53:14 +0000 (20:53 +0100)
committerTakashi Iwai <tiwai@suse.de>
Mon, 2 Nov 2015 07:46:30 +0000 (08:46 +0100)
ESS Allegro (marked ES1989S), [125d:1988] (rev 10) is mute after
loading snd-maestro3 and running alsactl restore. Touching master
volume or mute makes it work.

Looks like a bug in the AC'97 codec integrated into the chip.

Write AC97_MASTER register twice to work-around the problem.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/maestro3.c

index 965d5c6f2fa0be615f494d713f04e3baeb7fcb31..17ae92613de4bc7502f33ff64d4dc076177ef992 100644 (file)
@@ -1929,6 +1929,16 @@ snd_m3_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short val)
                return;
        snd_m3_outw(chip, val, CODEC_DATA);
        snd_m3_outb(chip, reg & 0x7f, CODEC_COMMAND);
+       /*
+        * Workaround for buggy ES1988 integrated AC'97 codec. It remains silent
+        * until the MASTER volume or mute is touched (alsactl restore does not
+        * work).
+        */
+       if (ac97->id == 0x45838308 && reg == AC97_MASTER) {
+               snd_m3_ac97_wait(chip);
+               snd_m3_outw(chip, val, CODEC_DATA);
+               snd_m3_outb(chip, reg & 0x7f, CODEC_COMMAND);
+       }
 }