aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/i2c
diff options
context:
space:
mode:
authorJanusz Użycki <j.uzycki@elproma.com.pl>2014-09-23 06:48:26 -0400
committerWolfram Sang <wsa@the-dreams.de>2014-10-02 21:35:49 -0400
commit030f940a535433605e6b4ee43f36189e5cace022 (patch)
tree21e7c18dcf261cdd186875fca17571047b060912 /drivers/i2c
parentd8e0a86f9713689e35dc14f7184e85a13a2a9f4e (diff)
i2c: mxs: detect No Slave Ack on SELECT in PIO mode
i2cdetect scanned i2c bus slow because the i2c-mxs driver ignored the NO_SLAVE_ACK bit during busy-waiting loop. Thanks to the patch, the speedup happens. Signed-off-by: Janusz Uzycki <j.uzycki@elproma.com.pl> Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
Diffstat (limited to 'drivers/i2c')
-rw-r--r--drivers/i2c/busses/i2c-mxs.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/i2c/busses/i2c-mxs.c b/drivers/i2c/busses/i2c-mxs.c
index 65a21fed08b5..07e1be6f8992 100644
--- a/drivers/i2c/busses/i2c-mxs.c
+++ b/drivers/i2c/busses/i2c-mxs.c
@@ -307,6 +307,9 @@ static int mxs_i2c_pio_wait_xfer_end(struct mxs_i2c_dev *i2c)
307 unsigned long timeout = jiffies + msecs_to_jiffies(1000); 307 unsigned long timeout = jiffies + msecs_to_jiffies(1000);
308 308
309 while (readl(i2c->regs + MXS_I2C_CTRL0) & MXS_I2C_CTRL0_RUN) { 309 while (readl(i2c->regs + MXS_I2C_CTRL0) & MXS_I2C_CTRL0_RUN) {
310 if (readl(i2c->regs + MXS_I2C_CTRL1) &
311 MXS_I2C_CTRL1_NO_SLAVE_ACK_IRQ)
312 return -ENXIO;
310 if (time_after(jiffies, timeout)) 313 if (time_after(jiffies, timeout))
311 return -ETIMEDOUT; 314 return -ETIMEDOUT;
312 cond_resched(); 315 cond_resched();