瀏覽代碼

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: Wan ZongShun <mcuos.com@gmail.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Wan ZongShun 15 年之前
父節點
當前提交
8dfb0c7815
共有 1 個文件被更改,包括 4 次插入6 次删除
  1. 4 6
      sound/soc/nuc900/nuc900-ac97.c

+ 4 - 6
sound/soc/nuc900/nuc900-ac97.c

@@ -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)