Skip to content

Commit

Permalink
i2c-eg20t: Fix bus-idle waiting issue
Browse files Browse the repository at this point in the history
Currently, when checking whether bus is idle or not,
if timeout occurs,
this function always returns success(zero).
This patch fixes the issue.

Signed-off-by: Tomoya MORINAGA <tomoya-linux@dsn.lapis-semi.com>
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
  • Loading branch information
Tomoya MORINAGA authored and Ben Dooks committed Oct 29, 2011
1 parent 1fdb24e commit 93e4ad7
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions drivers/i2c/busses/i2c-eg20t.c
Original file line number Diff line number Diff line change
Expand Up @@ -273,23 +273,23 @@ static s32 pch_i2c_wait_for_bus_idle(struct i2c_algo_pch_data *adap,
s32 timeout)
{
void __iomem *p = adap->pch_base_address;
ktime_t ns_val;

if ((ioread32(p + PCH_I2CSR) & I2CMBB_BIT) == 0)
return 0;

/* MAX timeout value is timeout*1000*1000nsec */
ktime_t ns_val = ktime_add_ns(ktime_get(), timeout*1000*1000);
ns_val = ktime_add_ns(ktime_get(), timeout*1000*1000);
do {
if ((ioread32(p + PCH_I2CSR) & I2CMBB_BIT) == 0)
break;
msleep(20);
if ((ioread32(p + PCH_I2CSR) & I2CMBB_BIT) == 0)
return 0;
} while (ktime_lt(ktime_get(), ns_val));

pch_dbg(adap, "I2CSR = %x\n", ioread32(p + PCH_I2CSR));
pch_err(adap, "%s: Timeout Error.return%d\n", __func__, -ETIME);

if (timeout == 0) {
pch_err(adap, "%s: Timeout Error.return%d\n", __func__, -ETIME);
return -ETIME;
}

return 0;
return -ETIME;
}

/**
Expand Down

0 comments on commit 93e4ad7

Please sign in to comment.