On Tue, Oct 01, 2013 at 04:03:40PM +0530, Yuvaraj Kumar C D wrote:

> +static bool is_ack(struct s3c24xx_i2c *i2c)
> +{
> +     u32 time_out = i2c->tx_setup;
> +
> +     while (--time_out) {
> +             if (readl(i2c->regs + S3C2410_IICCON)
> +                     & S3C2410_IICCON_IRQPEND) {
> +                     if (!(readl(i2c->regs + S3C2410_IICSTAT)
> +                             & S3C2410_IICSTAT_LASTBIT))
> +                             return true;
> +             }
> +             udelay(time_out);
> +     }
> +
> +     return false;

This is a bit weird - the amount of time the driver waits between polls
shrinks as the timeout approaches.  It'd be more normal to see either an
even period between polls or (ideally if the delay is non-trivial) a
dead reckoning sleep based on the expected time to complete followed by
polling at even intervals.

Also consider usleep_range() for the delay, it's a bit nicer to the rest
of the system than udelay().

Attachment: signature.asc
Description: Digital signature

Reply via email to