Commit 8dfb0c78 authored by Wan ZongShun's avatar Wan ZongShun Committed by Mark Brown

ASoC: nuc900: fix a wait loop bug

The current implement meant ACTL_ACCON was only accessed once when read or write
proceeding, which is not right, if so,we have to wait the 'timeout=0x10000' to end
every times.

We need to polling the bit AC_R_FINISH and AC_W_FINISH of ACTL_ACCON
register to identify whether read or write is finished or not,so I make
the patch to fix the issue.
Signed-off-by: default avatarWan ZongShun <mcuos.com@gmail.com>
Acked-by: default avatarLiam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent 018334c0
......@@ -66,9 +66,8 @@ static unsigned short nuc900_ac97_read(struct snd_ac97 *ac97,
udelay(100);
/* polling the AC_R_FINISH */
val = AUDIO_READ(nuc900_audio->mmio + ACTL_ACCON);
val &= AC_R_FINISH;
while (!val && timeout--)
while (!(AUDIO_READ(nuc900_audio->mmio + ACTL_ACCON) & AC_R_FINISH)
&& timeout--)
mdelay(1);
if (!timeout) {
......@@ -121,9 +120,8 @@ static void nuc900_ac97_write(struct snd_ac97 *ac97, unsigned short reg,
udelay(100);
/* polling the AC_W_FINISH */
tmp = AUDIO_READ(nuc900_audio->mmio + ACTL_ACCON);
tmp &= AC_W_FINISH;
while (tmp && timeout--)
while ((AUDIO_READ(nuc900_audio->mmio + ACTL_ACCON) & AC_W_FINISH)
&& timeout--)
mdelay(1);
if (!timeout)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment