mirror of https://github.com/hak5/openwrt-owl.git
58 lines
1.7 KiB
Diff
58 lines
1.7 KiB
Diff
|
From 5d6f04132cb5bd8fa8f1c9c9c3dc337aeae18f4c Mon Sep 17 00:00:00 2001
|
||
|
From: Werner Almesberger <werner@openmoko.org>
|
||
|
Date: Sun, 13 Apr 2008 07:25:55 +0100
|
||
|
Subject: [PATCH] audio-tickless-timeout.patch
|
||
|
|
||
|
When we resume, we can end up in
|
||
|
sound/soc/s3c24xx/s3c24xx-i2s.c:s3c24xx_snd_lrsync
|
||
|
with the timer tick still disabled, and the LR signal never happening.
|
||
|
Thus, we loop forever.
|
||
|
|
||
|
The patch below changes the timeout mechanism to use udelay, which
|
||
|
doesn't need timer ticks.
|
||
|
|
||
|
Note that this code is in a module, so to get the fix, you have to
|
||
|
build the modules, and update them.
|
||
|
|
||
|
The kernel now resumes but does the ugly GSM modem ticking. I'll have
|
||
|
to find a good place to turn that one off ...
|
||
|
|
||
|
- Werner
|
||
|
|
||
|
---------------------------------- cut here -----------------------------------
|
||
|
|
||
|
- sound/soc/s3c24xx/s3c24xx-i2s.c (s3c24xx_snd_lrsync): in resume, we may
|
||
|
call s3c24xx_snd_lrsync with timer ticks disabled, thus jiffies never
|
||
|
change. Use udelay to avoid this problem.
|
||
|
---
|
||
|
sound/soc/s3c24xx/s3c24xx-i2s.c | 5 +++--
|
||
|
1 files changed, 3 insertions(+), 2 deletions(-)
|
||
|
|
||
|
diff --git a/sound/soc/s3c24xx/s3c24xx-i2s.c b/sound/soc/s3c24xx/s3c24xx-i2s.c
|
||
|
index 4d74cc0..43fd25a 100644
|
||
|
--- a/sound/soc/s3c24xx/s3c24xx-i2s.c
|
||
|
+++ b/sound/soc/s3c24xx/s3c24xx-i2s.c
|
||
|
@@ -180,7 +180,7 @@ static void s3c24xx_snd_rxctrl(int on)
|
||
|
static int s3c24xx_snd_lrsync(void)
|
||
|
{
|
||
|
u32 iiscon;
|
||
|
- unsigned long timeout = jiffies + msecs_to_jiffies(5);
|
||
|
+ int timeout = 50; /* 5ms */
|
||
|
|
||
|
DBG("Entered %s\n", __FUNCTION__);
|
||
|
|
||
|
@@ -189,8 +189,9 @@ static int s3c24xx_snd_lrsync(void)
|
||
|
if (iiscon & S3C2410_IISCON_LRINDEX)
|
||
|
break;
|
||
|
|
||
|
- if (timeout < jiffies)
|
||
|
+ if (!--timeout)
|
||
|
return -ETIMEDOUT;
|
||
|
+ udelay(100);
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
--
|
||
|
1.5.6.5
|
||
|
|