From: ben-linux@fluff.org (Ben Dooks)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 05/10] S3C I2S: lrsync function made to work with IRQs disabled.
Date: Wed, 16 Sep 2009 01:14:39 +0100 [thread overview]
Message-ID: <20090916001439.GD24720@trinity.fluff.org> (raw)
In-Reply-To: <1253008957-10569-1-git-send-email-jassi.brar@samsung.com>
On Tue, Sep 15, 2009 at 07:02:37PM +0900, Jassi wrote:
> s3c2412_snd_lrsync() maybe reached with IRQs disabled and if LRCLK
> is dead due to improper initialization of CPU or CODEC, the system
> gets stuck in the loop because jiffies may never get updated.
> Implemented counter based wait mechanism for atleast the same
> timeout period.
>
> Signed-Off-by: Jassi <jassi.brar@samsung.com>
> ---
> sound/soc/s3c24xx/s3c-i2s-v2.c | 16 ++++++++++------
> 1 files changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/sound/soc/s3c24xx/s3c-i2s-v2.c b/sound/soc/s3c24xx/s3c-i2s-v2.c
> index aa7af0b..8865bc7 100644
> --- a/sound/soc/s3c24xx/s3c-i2s-v2.c
> +++ b/sound/soc/s3c24xx/s3c-i2s-v2.c
> @@ -230,6 +230,8 @@ static void s3c2412_snd_rxctrl(struct s3c_i2sv2_info *i2s, int on)
> pr_debug("%s: IIS: CON=%x MOD=%x FIC=%x\n", __func__, con, mod, fic);
> }
>
> +#define msecs_to_loops(t) (loops_per_jiffy / 1000 * HZ * t)
> +
> /*
> * Wait for the LR signal to allow synchronisation to the L/R clock
> * from the codec. May only be needed for slave mode.
> @@ -237,19 +239,21 @@ static void s3c2412_snd_rxctrl(struct s3c_i2sv2_info *i2s, int on)
> static int s3c2412_snd_lrsync(struct s3c_i2sv2_info *i2s)
> {
> u32 iiscon;
> - unsigned long timeout = jiffies + msecs_to_jiffies(5);
> + unsigned long loops = msecs_to_loops(5);
>
> pr_debug("Entered %s\n", __func__);
>
> - while (1) {
> + while (--loops) {
> iiscon = readl(i2s->regs + S3C2412_IISCON);
> if (iiscon & S3C2412_IISCON_LRINDEX)
> break;
>
> - if (timeout < jiffies) {
> - printk(KERN_ERR "%s: timeout\n", __func__);
> - return -ETIMEDOUT;
> - }
> + cpu_relax();
I don't think cpu_relax() gives a defined 'timeout' length, thus this
loop is of a very indeterminate length of timeout.
--
Ben
Q: What's a light-year?
A: One-third less calories than a regular year.
next prev parent reply other threads:[~2009-09-16 0:14 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-15 10:02 [PATCH 05/10] S3C I2S: lrsync function made to work with IRQs disabled Jassi
2009-09-15 12:21 ` Mark Brown
2009-09-16 0:14 ` Ben Dooks [this message]
2009-09-16 1:03 ` jassi brar
2009-09-16 10:26 ` Mark Brown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090916001439.GD24720@trinity.fluff.org \
--to=ben-linux@fluff.org \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.