mod i2c
author柯飞雄 <kfx@rock-chips.com>
Wed, 12 May 2010 02:19:45 +0000 (02:19 +0000)
committer黄涛 <huangtao@rock-chips.com>
Mon, 21 Jun 2010 05:34:51 +0000 (13:34 +0800)
drivers/i2c/busses/i2c-rk2818.c

index 32f28c449bf22833a605b4465368b6ad5a1ad4ec..6abc52fce7c7e2f614a5b02e3de7efb8f0471856 100755 (executable)
@@ -246,13 +246,15 @@ static int rk2818_wait_while_busy(struct rk2818_i2c_data *i2c)
 {
        unsigned long timeout = jiffies + RK2818_I2C_TIMEOUT;
        unsigned long lsr;
+       unsigned int time = 10;
        dev_dbg(i2c->dev,"wait_while_busy");
        while(!time_after(jiffies, timeout))
        {
                lsr = readl(i2c->regs + I2C_LSR);
                if(!(lsr & I2C_LSR_BUSY))
                        return 0;
-               udelay(100);
+               udelay(time);
+               time *= 2;
        }
        return -ETIMEDOUT;
 }