| From 939fd1e8d9deff206f12bd9d4e54aa7a4bd0ffd6 Mon Sep 17 00:00:00 2001 |
| From: Charles Keepax <ckeepax@opensource.wolfsonmicro.com> |
| Date: Wed, 18 Dec 2013 09:25:49 +0000 |
| Subject: ASoC: wm_adsp: Add small delay while polling DSP RAM start |
| |
| From: Charles Keepax <ckeepax@opensource.wolfsonmicro.com> |
| |
| commit 939fd1e8d9deff206f12bd9d4e54aa7a4bd0ffd6 upstream. |
| |
| Some devices are getting very close to the limit whilst polling the RAM |
| start, this patch adds a small delay to this loop to give a longer |
| startup timeout. |
| |
| Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com> |
| Signed-off-by: Mark Brown <broonie@linaro.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| sound/soc/codecs/wm_adsp.c | 10 +++++++--- |
| 1 file changed, 7 insertions(+), 3 deletions(-) |
| |
| --- a/sound/soc/codecs/wm_adsp.c |
| +++ b/sound/soc/codecs/wm_adsp.c |
| @@ -1466,13 +1466,17 @@ static int wm_adsp2_ena(struct wm_adsp * |
| return ret; |
| |
| /* Wait for the RAM to start, should be near instantaneous */ |
| - count = 0; |
| - do { |
| + for (count = 0; count < 10; ++count) { |
| ret = regmap_read(dsp->regmap, dsp->base + ADSP2_STATUS1, |
| &val); |
| if (ret != 0) |
| return ret; |
| - } while (!(val & ADSP2_RAM_RDY) && ++count < 10); |
| + |
| + if (val & ADSP2_RAM_RDY) |
| + break; |
| + |
| + msleep(1); |
| + } |
| |
| if (!(val & ADSP2_RAM_RDY)) { |
| adsp_err(dsp, "Failed to start DSP RAM\n"); |