| To: | baruch@tkos.co.il, linux-i2c@vger.kernel.org |
|---|---|
| Subject: | [PATCH 09/16] i2c-designware: i2c_dw_xfer_msg: Fix an i2c_msg search bug |
| From: | Shinya Kuribayashi <shinya.kuribayashi@necel.com> |
| Date: | Tue, 13 Oct 2009 11:51:37 +0900 |
| Cc: | ben-linux@fluff.org, linux-mips@linux-mips.org, linux-arm-kernel@lists.infradead.org |
| In-reply-to: | <4AD3E974.8080200@necel.com> |
| Original-recipient: | rfc822;linux-mips@linux-mips.org |
| References: | <4AD3E974.8080200@necel.com> |
| Sender: | linux-mips-bounce@linux-mips.org |
| User-agent: | Thunderbird 2.0.0.23 (Windows/20090812) |
In case an i2c_msg, which is currently work-in-progress, has more bytes
to be written, we need to set STATUS_WRITE_IN_PROGRESS _and_ exit from
the msg_write_idx-search loop. Otherwise, we'll overtake the current
index without waiting for transmission completed.
Signed-off-by: Shinya Kuribayashi <shinya.kuribayashi@necel.com>
---
drivers/i2c/busses/i2c-designware.c | 17 +++++++++++------
1 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/drivers/i2c/busses/i2c-designware.c
b/drivers/i2c/busses/i2c-designware.c
index 26efd3a..6bfdc5f 100644
--- a/drivers/i2c/busses/i2c-designware.c
+++ b/drivers/i2c/busses/i2c-designware.c
@@ -386,17 +386,22 @@ i2c_dw_xfer_msg(struct dw_i2c_dev *dev)
dev->base + DW_IC_DATA_CMD);
tx_limit--; buf_len--;
}
+
+ dev->tx_buf_len = buf_len;
+
+ /* more bytes to be written? */
+ if (buf_len > 0) {
+ dev->status |= STATUS_WRITE_IN_PROGRESS;
+ break;
+ } else {
+ dev->status &= ~STATUS_WRITE_IN_PROGRESS;
+ }
}
intr_mask = DW_IC_INTR_STOP_DET | DW_IC_INTR_TX_ABRT;
- if (buf_len > 0) { /* more bytes to be written */
+ if (buf_len > 0)
intr_mask |= DW_IC_INTR_TX_EMPTY;
- dev->status |= STATUS_WRITE_IN_PROGRESS;
- } else
- dev->status &= ~STATUS_WRITE_IN_PROGRESS;
writel(intr_mask, dev->base + DW_IC_INTR_MASK);
-
- dev->tx_buf_len = buf_len;
}
static void
--
1.6.5
|
| Previous by Date: | [PATCH 08/16] i2c-designware: Improve _HCNT/_LCNT calculation, Shinya Kuribayashi |
|---|---|
| Next by Date: | [PATCH 10/16] i2c-designware: Do dw_i2c_pump_msg's jobs in the interrutp handler, Shinya Kuribayashi |
| Previous by Thread: | [PATCH 08/16] i2c-designware: Improve _HCNT/_LCNT calculation, Shinya Kuribayashi |
| Next by Thread: | [PATCH 10/16] i2c-designware: Do dw_i2c_pump_msg's jobs in the interrutp handler, Shinya Kuribayashi |
| Indexes: | [Date] [Thread] [Top] [All Lists] |