aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/i2c/busses/i2c-mxs.c
diff options
context:
space:
mode:
authorWolfram Sang <w.sang@pengutronix.de>2012-04-25 07:39:38 -0400
committerWolfram Sang <w.sang@pengutronix.de>2012-04-27 10:13:29 -0400
commit1e4f0b82577e59f23484c99056c96465e202fdd5 (patch)
tree07ce440ab54137db4ce391cb88ca34fc3d391ed5 /drivers/i2c/busses/i2c-mxs.c
parentc95eeae9e39314273bcda057f27100603d333518 (diff)
i2c: mxs: disable QUEUE when sending is done
Since the last fixes to this driver ensure now the queue termination is done correctly, we can finally disable the queue after a transfer without problems. The gain is that it will only be reenabled after the next transfer is fully set up. Before, the queue was running all the time and if the setup of the next message was interrupted by another thread, an incomplete buffer could have been sent, padded with zeroes. Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
Diffstat (limited to 'drivers/i2c/busses/i2c-mxs.c')
-rw-r--r--drivers/i2c/busses/i2c-mxs.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/i2c/busses/i2c-mxs.c b/drivers/i2c/busses/i2c-mxs.c
index 4c37347973e..76b8af44f63 100644
--- a/drivers/i2c/busses/i2c-mxs.c
+++ b/drivers/i2c/busses/i2c-mxs.c
@@ -253,6 +253,9 @@ static int mxs_i2c_xfer_msg(struct i2c_adapter *adap, struct i2c_msg *msg,
253 253
254 if (i2c->cmd_err == -ENXIO) 254 if (i2c->cmd_err == -ENXIO)
255 mxs_i2c_reset(i2c); 255 mxs_i2c_reset(i2c);
256 else
257 writel(MXS_I2C_QUEUECTRL_QUEUE_RUN,
258 i2c->regs + MXS_I2C_QUEUECTRL_CLR);
256 259
257 dev_dbg(i2c->dev, "Done with err=%d\n", i2c->cmd_err); 260 dev_dbg(i2c->dev, "Done with err=%d\n", i2c->cmd_err);
258 261
@@ -383,8 +386,6 @@ static int __devexit mxs_i2c_remove(struct platform_device *pdev)
383 if (ret) 386 if (ret)
384 return -EBUSY; 387 return -EBUSY;
385 388
386 writel(MXS_I2C_QUEUECTRL_QUEUE_RUN,
387 i2c->regs + MXS_I2C_QUEUECTRL_CLR);
388 writel(MXS_I2C_CTRL0_SFTRST, i2c->regs + MXS_I2C_CTRL0_SET); 389 writel(MXS_I2C_CTRL0_SFTRST, i2c->regs + MXS_I2C_CTRL0_SET);
389 390
390 platform_set_drvdata(pdev, NULL); 391 platform_set_drvdata(pdev, NULL);