diff options
author | Jean Delvare <khali@linux-fr.org> | 2009-03-28 16:34:43 -0400 |
---|---|---|
committer | Jean Delvare <khali@linux-fr.org> | 2009-03-28 16:34:43 -0400 |
commit | 98a679cad56c0ba4677821836179abbe0aff8769 (patch) | |
tree | 49fc4c32e0bf62687ec6906552041523c2b70c46 | |
parent | 8a52c6b4d55b2960d93a90a7cf6afd252357fa54 (diff) |
i2c-davinci: Fix timeout handling
Properly set the adapter timeout value in jiffies, and then use that
value in the driver, rather than a hard-coded constant.
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Tested-by: Troy Kisky <troy.kisky@boundarydevices.com>
Cc: Kevin Hilman <khilman@mvista.com>
-rw-r--r-- | drivers/i2c/busses/i2c-davinci.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/drivers/i2c/busses/i2c-davinci.c b/drivers/i2c/busses/i2c-davinci.c index 5d7789834b95..3fae3a91ce5b 100644 --- a/drivers/i2c/busses/i2c-davinci.c +++ b/drivers/i2c/busses/i2c-davinci.c | |||
@@ -216,7 +216,7 @@ static int i2c_davinci_wait_bus_not_busy(struct davinci_i2c_dev *dev, | |||
216 | { | 216 | { |
217 | unsigned long timeout; | 217 | unsigned long timeout; |
218 | 218 | ||
219 | timeout = jiffies + DAVINCI_I2C_TIMEOUT; | 219 | timeout = jiffies + dev->adapter.timeout; |
220 | while (davinci_i2c_read_reg(dev, DAVINCI_I2C_STR_REG) | 220 | while (davinci_i2c_read_reg(dev, DAVINCI_I2C_STR_REG) |
221 | & DAVINCI_I2C_STR_BB) { | 221 | & DAVINCI_I2C_STR_BB) { |
222 | if (time_after(jiffies, timeout)) { | 222 | if (time_after(jiffies, timeout)) { |
@@ -289,7 +289,7 @@ i2c_davinci_xfer_msg(struct i2c_adapter *adap, struct i2c_msg *msg, int stop) | |||
289 | davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, flag); | 289 | davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, flag); |
290 | 290 | ||
291 | r = wait_for_completion_interruptible_timeout(&dev->cmd_complete, | 291 | r = wait_for_completion_interruptible_timeout(&dev->cmd_complete, |
292 | DAVINCI_I2C_TIMEOUT); | 292 | dev->adapter.timeout); |
293 | if (r == 0) { | 293 | if (r == 0) { |
294 | dev_err(dev->dev, "controller timed out\n"); | 294 | dev_err(dev->dev, "controller timed out\n"); |
295 | i2c_davinci_init(dev); | 295 | i2c_davinci_init(dev); |
@@ -546,9 +546,7 @@ static int davinci_i2c_probe(struct platform_device *pdev) | |||
546 | strlcpy(adap->name, "DaVinci I2C adapter", sizeof(adap->name)); | 546 | strlcpy(adap->name, "DaVinci I2C adapter", sizeof(adap->name)); |
547 | adap->algo = &i2c_davinci_algo; | 547 | adap->algo = &i2c_davinci_algo; |
548 | adap->dev.parent = &pdev->dev; | 548 | adap->dev.parent = &pdev->dev; |
549 | 549 | adap->timeout = DAVINCI_I2C_TIMEOUT; | |
550 | /* FIXME */ | ||
551 | adap->timeout = 1; | ||
552 | 550 | ||
553 | adap->nr = pdev->id; | 551 | adap->nr = pdev->id; |
554 | r = i2c_add_numbered_adapter(adap); | 552 | r = i2c_add_numbered_adapter(adap); |