aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Vojta <vojta@math.berkeley.edu>2007-07-27 06:20:38 -0400
committerJaroslav Kysela <perex@perex.cz>2007-10-16 09:58:08 -0400
commite2340465ec9587362a057524d3e2163377366771 (patch)
tree7ee0a06078c7966365b07202cbbd6607cedb61d6
parent01ade528d424420093973ede20d7394d2cd81190 (diff)
[ALSA] Fix bugs in mode change/recalibration for opl3sa2 driver
The mode change / recalibration doesn't work always with opl3sa2 devices, e.g. the first time it's played back. The patch fixes the problem. Signed-off-by: Paul Vojta <vojta@math.berkeley.edu> Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Jaroslav Kysela <perex@suse.cz>
-rw-r--r--include/sound/cs4231.h2
-rw-r--r--sound/isa/cs423x/cs4231_lib.c2
-rw-r--r--sound/isa/opl3sa2.c1
3 files changed, 4 insertions, 1 deletions
diff --git a/include/sound/cs4231.h b/include/sound/cs4231.h
index ab51ce1ba9a5..b195a73c5685 100644
--- a/include/sound/cs4231.h
+++ b/include/sound/cs4231.h
@@ -210,7 +210,7 @@
210#define CS4231_HW_CS4239 0x0404 /* CS4239 - Crystal Clear (tm) stereo enhancement */ 210#define CS4231_HW_CS4239 0x0404 /* CS4239 - Crystal Clear (tm) stereo enhancement */
211/* compatible, but clones */ 211/* compatible, but clones */
212#define CS4231_HW_INTERWAVE 0x1000 /* InterWave chip */ 212#define CS4231_HW_INTERWAVE 0x1000 /* InterWave chip */
213#define CS4231_HW_OPL3SA2 0x1001 /* OPL3-SA2 chip */ 213#define CS4231_HW_OPL3SA2 0x1101 /* OPL3-SA2 chip, similar to cs4231 */
214 214
215/* defines for codec.hwshare */ 215/* defines for codec.hwshare */
216#define CS4231_HWSHARE_IRQ (1<<0) 216#define CS4231_HWSHARE_IRQ (1<<0)
diff --git a/sound/isa/cs423x/cs4231_lib.c b/sound/isa/cs423x/cs4231_lib.c
index 914d77b61b0c..642bdaa703be 100644
--- a/sound/isa/cs423x/cs4231_lib.c
+++ b/sound/isa/cs423x/cs4231_lib.c
@@ -555,6 +555,8 @@ static void snd_cs4231_playback_format(struct snd_cs4231 *chip,
555 snd_cs4231_out(chip, CS4231_PLAYBK_FORMAT, chip->image[CS4231_PLAYBK_FORMAT] = pdfr); 555 snd_cs4231_out(chip, CS4231_PLAYBK_FORMAT, chip->image[CS4231_PLAYBK_FORMAT] = pdfr);
556 } 556 }
557 spin_unlock_irqrestore(&chip->reg_lock, flags); 557 spin_unlock_irqrestore(&chip->reg_lock, flags);
558 if (chip->hardware == CS4231_HW_OPL3SA2)
559 udelay(100); /* this seems to help */
558 snd_cs4231_mce_down(chip); 560 snd_cs4231_mce_down(chip);
559 } 561 }
560 snd_cs4231_calibrate_mute(chip, 0); 562 snd_cs4231_calibrate_mute(chip, 0);
diff --git a/sound/isa/opl3sa2.c b/sound/isa/opl3sa2.c
index e70db32991d9..244a00296750 100644
--- a/sound/isa/opl3sa2.c
+++ b/sound/isa/opl3sa2.c
@@ -253,6 +253,7 @@ static int __devinit snd_opl3sa2_detect(struct snd_opl3sa2 *chip)
253 /* 0x03 - YM715B */ 253 /* 0x03 - YM715B */
254 /* 0x04 - YM719 - OPL-SA4? */ 254 /* 0x04 - YM719 - OPL-SA4? */
255 /* 0x05 - OPL3-SA3 - Libretto 100 */ 255 /* 0x05 - OPL3-SA3 - Libretto 100 */
256 /* 0x07 - unknown - Neomagic MagicWave 3D */
256 break; 257 break;
257 } 258 }
258 str[0] = chip->version + '0'; 259 str[0] = chip->version + '0';