aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@armlinux.org.uk>2016-11-18 14:40:04 -0500
committerWolfram Sang <wsa@the-dreams.de>2016-11-24 10:17:34 -0500
commit2bf413d56b7de72ab800a6edb009177e5669b929 (patch)
tree2089398e2fbb900a7b9c3eae37c3901118f0ce9a
parent9c763584b7c8911106bb77af7e648bef09af9d80 (diff)
i2c: designware: report short transfers
Rather than reporting success for a short transfer due to interrupt latency, report an error both to the caller, as well as to the kernel log. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com> Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
-rw-r--r--drivers/i2c/busses/i2c-designware-core.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/i2c/busses/i2c-designware-core.c b/drivers/i2c/busses/i2c-designware-core.c
index 11e866d05368..066a2ba6aeda 100644
--- a/drivers/i2c/busses/i2c-designware-core.c
+++ b/drivers/i2c/busses/i2c-designware-core.c
@@ -758,7 +758,7 @@ i2c_dw_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
758 } 758 }
759 759
760 /* no error */ 760 /* no error */
761 if (likely(!dev->cmd_err)) { 761 if (likely(!dev->cmd_err && !dev->status)) {
762 ret = num; 762 ret = num;
763 goto done; 763 goto done;
764 } 764 }
@@ -768,6 +768,11 @@ i2c_dw_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
768 ret = i2c_dw_handle_tx_abort(dev); 768 ret = i2c_dw_handle_tx_abort(dev);
769 goto done; 769 goto done;
770 } 770 }
771
772 if (dev->status)
773 dev_err(dev->dev,
774 "transfer terminated early - interrupt latency too high?\n");
775
771 ret = -EIO; 776 ret = -EIO;
772 777
773done: 778done: