ALSA: wss_lib: Fix resume on Yamaha OPL3-SAx
authorOndrej Zary <linux@rainbow-software.org>
Mon, 16 Jul 2012 06:30:18 +0000 (08:30 +0200)
committerTakashi Iwai <tiwai@suse.de>
Mon, 16 Jul 2012 09:24:05 +0000 (11:24 +0200)
Yamaha OPL3-SAx chips don't resume properly when playback is running -
garbage is played after resume. Restoring the CS4231_PLAYBK_FORMAT register
last fixes the problem.

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

index 00ca9fc4de0a1fe6ad065b5de6ae876c42dccf5c..360b08b03e1d4a2080203b274d56a0701fbe6aaf 100644 (file)
@@ -1656,6 +1656,10 @@ static void snd_wss_resume(struct snd_wss *chip)
                        break;
                }
        }
+       /* Yamaha needs this to resume properly */
+       if (chip->hardware == WSS_HW_OPL3SA2)
+               snd_wss_out(chip, CS4231_PLAYBK_FORMAT,
+                           chip->image[CS4231_PLAYBK_FORMAT]);
        spin_unlock_irqrestore(&chip->reg_lock, flags);
 #if 1
        snd_wss_mce_down(chip);