ASoC: Fix mpc5200-psc-ac97 to ensure the data ready bit is cleared
authorGrant Likely <grant.likely@secretlab.ca>
Thu, 2 Jul 2009 17:57:19 +0000 (11:57 -0600)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Fri, 3 Jul 2009 09:41:46 +0000 (10:41 +0100)
When doing register reads, it is possible for there to be a stale
data ready bit set which will cause subsequent reads to return
prematurely with incorrect data.  This patch fixes the issues by
ensuring stale data is cleared before starting another transaction.

Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Acked-by: Jon Smirl <jonsmirl@gmail.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/fsl/mpc5200_psc_ac97.c

index 794a247b3eb55ec758a55a9b21e43533cc25e891..9b8503f2d68cef2289cca82565b93e80d6330b28 100644 (file)
@@ -41,6 +41,10 @@ static unsigned short psc_ac97_read(struct snd_ac97 *ac97, unsigned short reg)
                pr_err("timeout on ac97 bus (rdy)\n");
                return -ENODEV;
        }
+
+       /* Force clear the data valid bit */
+       in_be32(&psc_dma->psc_regs->ac97_data);
+
        /* Send the read */
        out_be32(&psc_dma->psc_regs->ac97_cmd, (1<<31) | ((reg & 0x7f) << 24));