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