diff options
| author | Russell King <rmk+kernel@armlinux.org.uk> | 2016-11-18 14:40:04 -0500 |
|---|---|---|
| committer | Wolfram Sang <wsa@the-dreams.de> | 2016-11-24 10:17:34 -0500 |
| commit | 2bf413d56b7de72ab800a6edb009177e5669b929 (patch) | |
| tree | 2089398e2fbb900a7b9c3eae37c3901118f0ce9a | |
| parent | 9c763584b7c8911106bb77af7e648bef09af9d80 (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.c | 7 |
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 | ||
| 773 | done: | 778 | done: |
