diff options
| author | Philby John <pjohn@mvista.com> | 2010-03-26 12:07:51 -0400 |
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2010-04-13 03:46:55 -0400 |
| commit | b68b58fd6a341c2115ff5fb466fe9fc0b581980e (patch) | |
| tree | eaeaa1a7babed5ee4df999d99468eff79e68f2d1 | |
| parent | 29aac005ff4dc8a5f50b80f4e5c4f59b21c0fb50 (diff) | |
ALSA: aaci - Fix alignment faults on ARM Cortex introduced by commit 29a4f2d3
The commit 29a4f2d3 used writel() at offset 0x26 which is
half-word aligned causing unaligned exceptions on a
Cortex-A8. The original patch solved the "aaci-pl041 fpga:04:
ac97 read back fail" issue on a soft reset. Reading from any
arbitrary aaci register seems to solve this issue.
Signed-off-by: Philby John <pjohn@mvista.com>
Acked-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
| -rw-r--r-- | sound/arm/aaci.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/sound/arm/aaci.c b/sound/arm/aaci.c index 656e474dca47..91acc9a243ec 100644 --- a/sound/arm/aaci.c +++ b/sound/arm/aaci.c | |||
| @@ -863,7 +863,6 @@ static int __devinit aaci_probe_ac97(struct aaci *aaci) | |||
| 863 | struct snd_ac97 *ac97; | 863 | struct snd_ac97 *ac97; |
| 864 | int ret; | 864 | int ret; |
| 865 | 865 | ||
| 866 | writel(0, aaci->base + AC97_POWERDOWN); | ||
| 867 | /* | 866 | /* |
| 868 | * Assert AACIRESET for 2us | 867 | * Assert AACIRESET for 2us |
| 869 | */ | 868 | */ |
| @@ -1047,7 +1046,11 @@ static int __devinit aaci_probe(struct amba_device *dev, struct amba_id *id) | |||
| 1047 | 1046 | ||
| 1048 | writel(0x1fff, aaci->base + AACI_INTCLR); | 1047 | writel(0x1fff, aaci->base + AACI_INTCLR); |
| 1049 | writel(aaci->maincr, aaci->base + AACI_MAINCR); | 1048 | writel(aaci->maincr, aaci->base + AACI_MAINCR); |
| 1050 | 1049 | /* | |
| 1050 | * Fix: ac97 read back fail errors by reading | ||
| 1051 | * from any arbitrary aaci register. | ||
| 1052 | */ | ||
| 1053 | readl(aaci->base + AACI_CSCH1); | ||
| 1051 | ret = aaci_probe_ac97(aaci); | 1054 | ret = aaci_probe_ac97(aaci); |
| 1052 | if (ret) | 1055 | if (ret) |
| 1053 | goto out; | 1056 | goto out; |
