mirror of
https://github.com/torvalds/linux.git
synced 2024-11-05 03:21:32 +00:00
[ALSA] soc - Fix s3c24xx-i2s LR sync while timer ticks are disabled
When timer ticks are disabled when calling sound/soc/s3c24xx/s3c24xx-i2s.c:s3c24xx_snd_lrsync and the LR signal never happens, we loop forever. This has been observed in the following call chain: snd_pcm_common_ioctl1 -> snd_pcm_action_lock_irq -> snd_pcm_action_single -> snd_pcm_do_resume -> soc_pcm_trigger -> s3c24xx_i2s_trigger The patch below changes the timeout mechanism to use udelay, which doesn't need timer ticks. Signed-off-by: Werner Almesberger <werner@openmoko.org> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
parent
a65f0568f6
commit
33e5b22285
@ -175,7 +175,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", __func__);
|
||||
|
||||
@ -184,8 +184,9 @@ static int s3c24xx_snd_lrsync(void)
|
||||
if (iiscon & S3C2410_IISCON_LRINDEX)
|
||||
break;
|
||||
|
||||
if (time_after(jiffies, timeout))
|
||||
if (!timeout--)
|
||||
return -ETIMEDOUT;
|
||||
udelay(100);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user