diff --git a/sound/isa/es1688/es1688_lib.c b/sound/isa/es1688/es1688_lib.c index 5c26d49..eb35267 100644 --- a/sound/isa/es1688/es1688_lib.c +++ b/sound/isa/es1688/es1688_lib.c @@ -368,9 +368,11 @@ static int snd_es1688_playback_prepare(struct snd_pcm_substream *substream) struct snd_pcm_runtime *runtime = substream->runtime; unsigned int size = snd_pcm_lib_buffer_bytes(substream); unsigned int count = snd_pcm_lib_period_bytes(substream); + int tmp; chip->dma_size = size; spin_lock_irqsave(&chip->reg_lock, flags); + tmp = snd_es1688_read(chip, 0xb4); snd_es1688_reset(chip); snd_es1688_set_rate(chip, substream); snd_es1688_write(chip, 0xb8, 4); /* auto init DMA mode */ @@ -403,6 +405,7 @@ static int snd_es1688_playback_prepare(struct snd_pcm_substream *substream) } snd_es1688_write(chip, 0xb1, (snd_es1688_read(chip, 0xb1) & 0x0f) | 0x50); snd_es1688_write(chip, 0xb2, (snd_es1688_read(chip, 0xb2) & 0x0f) | 0x50); + snd_es1688_write(chip, 0xb4, tmp); snd_es1688_dsp_command(chip, ES1688_DSP_CMD_SPKON); spin_unlock_irqrestore(&chip->reg_lock, flags); /* --- */ @@ -429,9 +432,11 @@ static int snd_es1688_capture_prepare(struct snd_pcm_substream *substream) struct snd_pcm_runtime *runtime = substream->runtime; unsigned int size = snd_pcm_lib_buffer_bytes(substream); unsigned int count = snd_pcm_lib_period_bytes(substream); + int tmp; chip->dma_size = size; spin_lock_irqsave(&chip->reg_lock, flags); + tmp = snd_es1688_read(chip, 0xb4); snd_es1688_reset(chip); snd_es1688_set_rate(chip, substream); snd_es1688_dsp_command(chip, ES1688_DSP_CMD_SPKOFF); @@ -461,6 +466,7 @@ static int snd_es1688_capture_prepare(struct snd_pcm_substream *substream) } snd_es1688_write(chip, 0xb1, (snd_es1688_read(chip, 0xb1) & 0x0f) | 0x50); snd_es1688_write(chip, 0xb2, (snd_es1688_read(chip, 0xb2) & 0x0f) | 0x50); + snd_es1688_write(chip, 0xb4, tmp); spin_unlock_irqrestore(&chip->reg_lock, flags); /* --- */ count = -count;