linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/3] iProc I2C driver enhancement
@ 2016-02-12 21:10 Ray Jui
  2016-02-12 21:10 ` [PATCH v2 1/3] i2c: iproc: Add recovery mechanism in error case Ray Jui
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Ray Jui @ 2016-02-12 21:10 UTC (permalink / raw)
  To: Wolfram Sang
  Cc: linux-i2c, linux-kernel, bcm-kernel-feedback-list, Icarus Chau,
	Ray Jui, Ray Jui

This patch series 1) adds recovery support to the I2C host controller; 2) fix
a typo in the driver; and 3) adds support for large TX payload size

This patch series is based on Linux v4.5-rc1 and is available at:

repo: https://github.com/Broadcom/cygnus-linux.git
branch: iproc-i2c-large-tx-v2

Changes from v1:
 - Get rid of redundant function prototypes by placing functions in the right
order
 - Get rid of redundant setting of member 'max_write_len' from
'struct i2c_adapter_quirks'

Ray Jui (3):
  i2c: iproc: Add recovery mechanism in error case
  i2c: iproc: Fix typo in the driver
  i2c: iproc: Support larger TX transfer

 drivers/i2c/busses/i2c-bcm-iproc.c | 177 ++++++++++++++++++++++++++-----------
 1 file changed, 124 insertions(+), 53 deletions(-)

-- 
1.9.1

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH v2 1/3] i2c: iproc: Add recovery mechanism in error case
  2016-02-12 21:10 [PATCH v2 0/3] iProc I2C driver enhancement Ray Jui
@ 2016-02-12 21:10 ` Ray Jui
  2016-02-12 21:41   ` Wolfram Sang
  2016-02-12 21:10 ` [PATCH v2 2/3] i2c: iproc: Fix typo in the driver Ray Jui
  2016-02-12 21:10 ` [PATCH v2 3/3] i2c: iproc: Support larger TX transfer Ray Jui
  2 siblings, 1 reply; 8+ messages in thread
From: Ray Jui @ 2016-02-12 21:10 UTC (permalink / raw)
  To: Wolfram Sang
  Cc: linux-i2c, linux-kernel, bcm-kernel-feedback-list, Icarus Chau, Ray Jui

From: Ray Jui <rjui@broadcom.com>

Add proper recovery mechanism to the iProc I2C driver in error cases

Signed-off-by: Icarus Chau <ichau@broadcom.com>
Signed-off-by: Ray Jui <rjui@broadcom.com>
Tested-by: Icarus Chau <ichau@broadcom.com>
Reviewed-by: Scott Branden <sbranden@broadcom.com>
---
 drivers/i2c/busses/i2c-bcm-iproc.c | 91 ++++++++++++++++++++------------------
 1 file changed, 48 insertions(+), 43 deletions(-)

diff --git a/drivers/i2c/busses/i2c-bcm-iproc.c b/drivers/i2c/busses/i2c-bcm-iproc.c
index 0419f52..ce062d3 100644
--- a/drivers/i2c/busses/i2c-bcm-iproc.c
+++ b/drivers/i2c/busses/i2c-bcm-iproc.c
@@ -119,6 +119,48 @@ static irqreturn_t bcm_iproc_i2c_isr(int irq, void *data)
 	return IRQ_HANDLED;
 }
 
+static int bcm_iproc_i2c_init(struct bcm_iproc_i2c_dev *iproc_i2c)
+{
+	u32 val;
+
+	/* put controller in reset */
+	val = readl(iproc_i2c->base + CFG_OFFSET);
+	val |= 1 << CFG_RESET_SHIFT;
+	val &= ~(1 << CFG_EN_SHIFT);
+	writel(val, iproc_i2c->base + CFG_OFFSET);
+
+	/* wait 100 usec per spec */
+	udelay(100);
+
+	/* bring controller out of reset */
+	val &= ~(1 << CFG_RESET_SHIFT);
+	writel(val, iproc_i2c->base + CFG_OFFSET);
+
+	/* flush TX/RX FIFOs and set RX FIFO threshold to zero */
+	val = (1 << M_FIFO_RX_FLUSH_SHIFT) | (1 << M_FIFO_TX_FLUSH_SHIFT);
+	writel(val, iproc_i2c->base + M_FIFO_CTRL_OFFSET);
+	/* disable all interrupts */
+	writel(0, iproc_i2c->base + IE_OFFSET);
+
+	/* clear all pending interrupts */
+	writel(0xffffffff, iproc_i2c->base + IS_OFFSET);
+
+	return 0;
+}
+
+static void bcm_iproc_i2c_enable_disable(struct bcm_iproc_i2c_dev *iproc_i2c,
+                                         bool enable)
+{
+	u32 val;
+
+	val = readl(iproc_i2c->base + CFG_OFFSET);
+	if (enable)
+		val |= BIT(CFG_EN_SHIFT);
+	else
+		val &= ~BIT(CFG_EN_SHIFT);
+	writel(val, iproc_i2c->base + CFG_OFFSET);
+}
+
 static int bcm_iproc_i2c_check_status(struct bcm_iproc_i2c_dev *iproc_i2c,
 				      struct i2c_msg *msg)
 {
@@ -149,6 +191,12 @@ static int bcm_iproc_i2c_check_status(struct bcm_iproc_i2c_dev *iproc_i2c,
 
 	default:
 		dev_dbg(iproc_i2c->device, "unknown error code=%d\n", val);
+
+		/* re-initialize i2c for recovery */
+		bcm_iproc_i2c_enable_disable(iproc_i2c, false);
+		bcm_iproc_i2c_init(iproc_i2c);
+		bcm_iproc_i2c_enable_disable(iproc_i2c, true);
+
 		return -EIO;
 	}
 }
@@ -321,49 +369,6 @@ static int bcm_iproc_i2c_cfg_speed(struct bcm_iproc_i2c_dev *iproc_i2c)
 	return 0;
 }
 
-static int bcm_iproc_i2c_init(struct bcm_iproc_i2c_dev *iproc_i2c)
-{
-	u32 val;
-
-	/* put controller in reset */
-	val = readl(iproc_i2c->base + CFG_OFFSET);
-	val |= 1 << CFG_RESET_SHIFT;
-	val &= ~(1 << CFG_EN_SHIFT);
-	writel(val, iproc_i2c->base + CFG_OFFSET);
-
-	/* wait 100 usec per spec */
-	udelay(100);
-
-	/* bring controller out of reset */
-	val &= ~(1 << CFG_RESET_SHIFT);
-	writel(val, iproc_i2c->base + CFG_OFFSET);
-
-	/* flush TX/RX FIFOs and set RX FIFO threshold to zero */
-	val = (1 << M_FIFO_RX_FLUSH_SHIFT) | (1 << M_FIFO_TX_FLUSH_SHIFT);
-	writel(val, iproc_i2c->base + M_FIFO_CTRL_OFFSET);
-
-	/* disable all interrupts */
-	writel(0, iproc_i2c->base + IE_OFFSET);
-
-	/* clear all pending interrupts */
-	writel(0xffffffff, iproc_i2c->base + IS_OFFSET);
-
-	return 0;
-}
-
-static void bcm_iproc_i2c_enable_disable(struct bcm_iproc_i2c_dev *iproc_i2c,
-					 bool enable)
-{
-	u32 val;
-
-	val = readl(iproc_i2c->base + CFG_OFFSET);
-	if (enable)
-		val |= BIT(CFG_EN_SHIFT);
-	else
-		val &= ~BIT(CFG_EN_SHIFT);
-	writel(val, iproc_i2c->base + CFG_OFFSET);
-}
-
 static int bcm_iproc_i2c_probe(struct platform_device *pdev)
 {
 	int irq, ret = 0;
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v2 2/3] i2c: iproc: Fix typo in the driver
  2016-02-12 21:10 [PATCH v2 0/3] iProc I2C driver enhancement Ray Jui
  2016-02-12 21:10 ` [PATCH v2 1/3] i2c: iproc: Add recovery mechanism in error case Ray Jui
@ 2016-02-12 21:10 ` Ray Jui
  2016-02-12 21:42   ` Wolfram Sang
  2016-02-12 21:10 ` [PATCH v2 3/3] i2c: iproc: Support larger TX transfer Ray Jui
  2 siblings, 1 reply; 8+ messages in thread
From: Ray Jui @ 2016-02-12 21:10 UTC (permalink / raw)
  To: Wolfram Sang
  Cc: linux-i2c, linux-kernel, bcm-kernel-feedback-list, Icarus Chau, Ray Jui

From: Ray Jui <rjui@broadcom.com>

Fix typo in the driver from 'I2C_TIMEOUT_MESC' to 'I2C_TIMEOUT_MSEC'

Signed-off-by: Ray Jui <rjui@broadcom.com>
Reviewed-by: Scott Branden <sbranden@broadcom.com>
---
 drivers/i2c/busses/i2c-bcm-iproc.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/i2c/busses/i2c-bcm-iproc.c b/drivers/i2c/busses/i2c-bcm-iproc.c
index ce062d3..c368159 100644
--- a/drivers/i2c/busses/i2c-bcm-iproc.c
+++ b/drivers/i2c/busses/i2c-bcm-iproc.c
@@ -76,7 +76,7 @@
 #define M_RX_DATA_SHIFT              0
 #define M_RX_DATA_MASK               0xff
 
-#define I2C_TIMEOUT_MESC             100
+#define I2C_TIMEOUT_MSEC             100
 #define M_TX_RX_FIFO_SIZE            64
 
 enum bus_speed_index {
@@ -207,7 +207,7 @@ static int bcm_iproc_i2c_xfer_single_msg(struct bcm_iproc_i2c_dev *iproc_i2c,
 	int ret, i;
 	u8 addr;
 	u32 val;
-	unsigned long time_left = msecs_to_jiffies(I2C_TIMEOUT_MESC);
+	unsigned long time_left = msecs_to_jiffies(I2C_TIMEOUT_MSEC);
 
 	/* check if bus is busy */
 	if (!!(readl(iproc_i2c->base + M_CMD_OFFSET) &
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v2 3/3] i2c: iproc: Support larger TX transfer
  2016-02-12 21:10 [PATCH v2 0/3] iProc I2C driver enhancement Ray Jui
  2016-02-12 21:10 ` [PATCH v2 1/3] i2c: iproc: Add recovery mechanism in error case Ray Jui
  2016-02-12 21:10 ` [PATCH v2 2/3] i2c: iproc: Fix typo in the driver Ray Jui
@ 2016-02-12 21:10 ` Ray Jui
  2016-02-12 21:44   ` Wolfram Sang
  2 siblings, 1 reply; 8+ messages in thread
From: Ray Jui @ 2016-02-12 21:10 UTC (permalink / raw)
  To: Wolfram Sang
  Cc: linux-i2c, linux-kernel, bcm-kernel-feedback-list, Icarus Chau, Ray Jui

From: Ray Jui <rjui@broadcom.com>

The current iProc I2C driver only allows each TX transfer up to 63
bytes (the TX FIFO has a size of 64 bytes, and one byte is reserved
for slave address). This patch enhances the driver to support TX
transfer in each I2C message for up to 65535 bytes (a practical
maximum, since member 'max_write_len' of 'struct i2c_adapter_quirks is
of type 'u16')

This works by loading up the I2C TX FIFO and enabling the TX underrun
interrupt for each burst. After each burst of TX data is finished,
i.e., when the TX FIFO becomes empty, the TX underrun interrupt will be
triggered and another burst of TX data can be loaded into the TX FIFO.
This repeats until all TX data are finished

Signed-off-by: Ray Jui <rjui@broadcom.com>
Tested-by: Icarus Chau <ichau@broadcom.com>
Reviewed-by: Scott Branden <sbranden@broadcom.com>
---
 drivers/i2c/busses/i2c-bcm-iproc.c | 84 ++++++++++++++++++++++++++++++++++----
 1 file changed, 75 insertions(+), 9 deletions(-)

diff --git a/drivers/i2c/busses/i2c-bcm-iproc.c b/drivers/i2c/busses/i2c-bcm-iproc.c
index c368159..c115676 100644
--- a/drivers/i2c/busses/i2c-bcm-iproc.c
+++ b/drivers/i2c/busses/i2c-bcm-iproc.c
@@ -58,11 +58,13 @@
 #define IE_M_RX_FIFO_FULL_SHIFT      31
 #define IE_M_RX_THLD_SHIFT           30
 #define IE_M_START_BUSY_SHIFT        28
+#define IE_M_TX_UNDERRUN_SHIFT       27
 
 #define IS_OFFSET                    0x3c
 #define IS_M_RX_FIFO_FULL_SHIFT      31
 #define IS_M_RX_THLD_SHIFT           30
 #define IS_M_START_BUSY_SHIFT        28
+#define IS_M_TX_UNDERRUN_SHIFT       27
 
 #define M_TX_OFFSET                  0x40
 #define M_TX_WR_STATUS_SHIFT         31
@@ -76,7 +78,7 @@
 #define M_RX_DATA_SHIFT              0
 #define M_RX_DATA_MASK               0xff
 
-#define I2C_TIMEOUT_MSEC             100
+#define I2C_TIMEOUT_MSEC             50000
 #define M_TX_RX_FIFO_SIZE            64
 
 enum bus_speed_index {
@@ -95,12 +97,17 @@ struct bcm_iproc_i2c_dev {
 
 	struct completion done;
 	int xfer_is_done;
+
+	struct i2c_msg *msg;
+
+	/* bytes that have been transferred */
+	unsigned int tx_bytes;
 };
 
 /*
  * Can be expanded in the future if more interrupt status bits are utilized
  */
-#define ISR_MASK (1 << IS_M_START_BUSY_SHIFT)
+#define ISR_MASK (BIT(IS_M_START_BUSY_SHIFT) | BIT(IS_M_TX_UNDERRUN_SHIFT))
 
 static irqreturn_t bcm_iproc_i2c_isr(int irq, void *data)
 {
@@ -112,9 +119,49 @@ static irqreturn_t bcm_iproc_i2c_isr(int irq, void *data)
 	if (!status)
 		return IRQ_NONE;
 
+	/* TX FIFO is empty and we have more data to send */
+	if (status & BIT(IS_M_TX_UNDERRUN_SHIFT)) {
+		struct i2c_msg *msg = iproc_i2c->msg;
+		unsigned int tx_bytes = msg->len - iproc_i2c->tx_bytes;
+		unsigned int i;
+		u32 val;
+
+		/* can only fill up to the FIFO size */
+		tx_bytes = min_t(unsigned int, tx_bytes, M_TX_RX_FIFO_SIZE);
+		for (i = 0; i < tx_bytes; i++) {
+			/* start from where we left over */
+			unsigned int idx = iproc_i2c->tx_bytes + i;
+
+			val = msg->buf[idx];
+
+			/* mark the last byte */
+			if (idx == msg->len - 1) {
+				u32 tmp;
+
+				val |= BIT(M_TX_WR_STATUS_SHIFT);
+
+				/*
+				 * Since this is the last byte, we should
+				 * now disable TX FIFO underrun interrupt
+				 */
+				tmp = readl(iproc_i2c->base + IE_OFFSET);
+				tmp &= ~BIT(IE_M_TX_UNDERRUN_SHIFT);
+				writel(tmp, iproc_i2c->base + IE_OFFSET);
+			}
+
+			/* load data into TX FIFO */
+			writel(val, iproc_i2c->base + M_TX_OFFSET);
+		}
+		/* update number of transferred bytes */
+		iproc_i2c->tx_bytes += tx_bytes;
+	}
+
+	if (status & BIT(IS_M_START_BUSY_SHIFT)) {
+		iproc_i2c->xfer_is_done = 1;
+		complete_all(&iproc_i2c->done);
+	}
+
 	writel(status, iproc_i2c->base + IS_OFFSET);
-	iproc_i2c->xfer_is_done = 1;
-	complete_all(&iproc_i2c->done);
 
 	return IRQ_HANDLED;
 }
@@ -207,6 +254,7 @@ static int bcm_iproc_i2c_xfer_single_msg(struct bcm_iproc_i2c_dev *iproc_i2c,
 	int ret, i;
 	u8 addr;
 	u32 val;
+	unsigned int tx_bytes;
 	unsigned long time_left = msecs_to_jiffies(I2C_TIMEOUT_MSEC);
 
 	/* check if bus is busy */
@@ -216,13 +264,20 @@ static int bcm_iproc_i2c_xfer_single_msg(struct bcm_iproc_i2c_dev *iproc_i2c,
 		return -EBUSY;
 	}
 
+	iproc_i2c->msg = msg;
+
 	/* format and load slave address into the TX FIFO */
 	addr = msg->addr << 1 | (msg->flags & I2C_M_RD ? 1 : 0);
 	writel(addr, iproc_i2c->base + M_TX_OFFSET);
 
-	/* for a write transaction, load data into the TX FIFO */
+	/*
+	 * For a write transaction, load data into the TX FIFO. Only allow
+	 * loading up to TX FIFO size - 1 bytes of data since the first byte
+	 * has been used up by the slave address
+	 */
+	tx_bytes = min_t(unsigned int, msg->len, M_TX_RX_FIFO_SIZE - 1);
 	if (!(msg->flags & I2C_M_RD)) {
-		for (i = 0; i < msg->len; i++) {
+		for (i = 0; i < tx_bytes; i++) {
 			val = msg->buf[i];
 
 			/* mark the last byte */
@@ -231,6 +286,7 @@ static int bcm_iproc_i2c_xfer_single_msg(struct bcm_iproc_i2c_dev *iproc_i2c,
 
 			writel(val, iproc_i2c->base + M_TX_OFFSET);
 		}
+		iproc_i2c->tx_bytes = tx_bytes;
 	}
 
 	/* mark as incomplete before starting the transaction */
@@ -242,13 +298,24 @@ static int bcm_iproc_i2c_xfer_single_msg(struct bcm_iproc_i2c_dev *iproc_i2c,
 	 * transaction is done, i.e., the internal start_busy bit, transitions
 	 * from 1 to 0.
 	 */
-	writel(1 << IE_M_START_BUSY_SHIFT, iproc_i2c->base + IE_OFFSET);
+	val = BIT(IE_M_START_BUSY_SHIFT);
+
+	/*
+	 * If TX data size is larger than the TX FIFO, need to enable TX
+	 * underrun interrupt, which will be triggerred when the TX FIFO is
+	 * empty. When that happens we can then pump more data into the FIFO
+	 */
+	if (!(msg->flags & I2C_M_RD) &&
+	    msg->len > iproc_i2c->tx_bytes)
+		val |= BIT(IE_M_TX_UNDERRUN_SHIFT);
+
+	writel(val, iproc_i2c->base + IE_OFFSET);
 
 	/*
 	 * Now we can activate the transfer. For a read operation, specify the
 	 * number of bytes to read
 	 */
-	val = 1 << M_CMD_START_BUSY_SHIFT;
+	val = BIT(M_CMD_START_BUSY_SHIFT);
 	if (msg->flags & I2C_M_RD) {
 		val |= (M_CMD_PROTOCOL_BLK_RD << M_CMD_PROTOCOL_SHIFT) |
 		       (msg->len << M_CMD_RD_CNT_SHIFT);
@@ -331,7 +398,6 @@ static const struct i2c_algorithm bcm_iproc_algo = {
 static struct i2c_adapter_quirks bcm_iproc_i2c_quirks = {
 	/* need to reserve one byte in the FIFO for the slave address */
 	.max_read_len = M_TX_RX_FIFO_SIZE - 1,
-	.max_write_len = M_TX_RX_FIFO_SIZE - 1,
 };
 
 static int bcm_iproc_i2c_cfg_speed(struct bcm_iproc_i2c_dev *iproc_i2c)
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 1/3] i2c: iproc: Add recovery mechanism in error case
  2016-02-12 21:10 ` [PATCH v2 1/3] i2c: iproc: Add recovery mechanism in error case Ray Jui
@ 2016-02-12 21:41   ` Wolfram Sang
  2016-02-12 21:45     ` Ray Jui
  0 siblings, 1 reply; 8+ messages in thread
From: Wolfram Sang @ 2016-02-12 21:41 UTC (permalink / raw)
  To: Ray Jui
  Cc: linux-i2c, linux-kernel, bcm-kernel-feedback-list, Icarus Chau, Ray Jui

[-- Attachment #1: Type: text/plain, Size: 480 bytes --]

On Fri, Feb 12, 2016 at 01:10:41PM -0800, Ray Jui wrote:
> From: Ray Jui <rjui@broadcom.com>
> 
> Add proper recovery mechanism to the iProc I2C driver in error cases
> 
> Signed-off-by: Icarus Chau <ichau@broadcom.com>
> Signed-off-by: Ray Jui <rjui@broadcom.com>
> Tested-by: Icarus Chau <ichau@broadcom.com>
> Reviewed-by: Scott Branden <sbranden@broadcom.com>

Please run checkpatch on your patches. Fixed some whitespace issues and
applied to for-next, thanks!


[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 2/3] i2c: iproc: Fix typo in the driver
  2016-02-12 21:10 ` [PATCH v2 2/3] i2c: iproc: Fix typo in the driver Ray Jui
@ 2016-02-12 21:42   ` Wolfram Sang
  0 siblings, 0 replies; 8+ messages in thread
From: Wolfram Sang @ 2016-02-12 21:42 UTC (permalink / raw)
  To: Ray Jui
  Cc: linux-i2c, linux-kernel, bcm-kernel-feedback-list, Icarus Chau, Ray Jui

[-- Attachment #1: Type: text/plain, Size: 309 bytes --]

On Fri, Feb 12, 2016 at 01:10:42PM -0800, Ray Jui wrote:
> From: Ray Jui <rjui@broadcom.com>
> 
> Fix typo in the driver from 'I2C_TIMEOUT_MESC' to 'I2C_TIMEOUT_MSEC'
> 
> Signed-off-by: Ray Jui <rjui@broadcom.com>
> Reviewed-by: Scott Branden <sbranden@broadcom.com>

Applied to for-next, thanks!


[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 3/3] i2c: iproc: Support larger TX transfer
  2016-02-12 21:10 ` [PATCH v2 3/3] i2c: iproc: Support larger TX transfer Ray Jui
@ 2016-02-12 21:44   ` Wolfram Sang
  0 siblings, 0 replies; 8+ messages in thread
From: Wolfram Sang @ 2016-02-12 21:44 UTC (permalink / raw)
  To: Ray Jui
  Cc: linux-i2c, linux-kernel, bcm-kernel-feedback-list, Icarus Chau, Ray Jui

[-- Attachment #1: Type: text/plain, Size: 995 bytes --]

On Fri, Feb 12, 2016 at 01:10:43PM -0800, Ray Jui wrote:
> From: Ray Jui <rjui@broadcom.com>
> 
> The current iProc I2C driver only allows each TX transfer up to 63
> bytes (the TX FIFO has a size of 64 bytes, and one byte is reserved
> for slave address). This patch enhances the driver to support TX
> transfer in each I2C message for up to 65535 bytes (a practical
> maximum, since member 'max_write_len' of 'struct i2c_adapter_quirks is
> of type 'u16')
> 
> This works by loading up the I2C TX FIFO and enabling the TX underrun
> interrupt for each burst. After each burst of TX data is finished,
> i.e., when the TX FIFO becomes empty, the TX underrun interrupt will be
> triggered and another burst of TX data can be loaded into the TX FIFO.
> This repeats until all TX data are finished
> 
> Signed-off-by: Ray Jui <rjui@broadcom.com>
> Tested-by: Icarus Chau <ichau@broadcom.com>
> Reviewed-by: Scott Branden <sbranden@broadcom.com>

Applied to for-next, thanks!


[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 1/3] i2c: iproc: Add recovery mechanism in error case
  2016-02-12 21:41   ` Wolfram Sang
@ 2016-02-12 21:45     ` Ray Jui
  0 siblings, 0 replies; 8+ messages in thread
From: Ray Jui @ 2016-02-12 21:45 UTC (permalink / raw)
  To: Wolfram Sang
  Cc: linux-i2c, linux-kernel, bcm-kernel-feedback-list, Icarus Chau, Ray Jui



On 2/12/2016 1:41 PM, Wolfram Sang wrote:
> On Fri, Feb 12, 2016 at 01:10:41PM -0800, Ray Jui wrote:
>> From: Ray Jui <rjui@broadcom.com>
>>
>> Add proper recovery mechanism to the iProc I2C driver in error cases
>>
>> Signed-off-by: Icarus Chau <ichau@broadcom.com>
>> Signed-off-by: Ray Jui <rjui@broadcom.com>
>> Tested-by: Icarus Chau <ichau@broadcom.com>
>> Reviewed-by: Scott Branden <sbranden@broadcom.com>
>
> Please run checkpatch on your patches. Fixed some whitespace issues and
> applied to for-next, thanks!
>

My bad, I usually do but forgot to run it this time!

Thanks!

Ray

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2016-02-12 21:45 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-02-12 21:10 [PATCH v2 0/3] iProc I2C driver enhancement Ray Jui
2016-02-12 21:10 ` [PATCH v2 1/3] i2c: iproc: Add recovery mechanism in error case Ray Jui
2016-02-12 21:41   ` Wolfram Sang
2016-02-12 21:45     ` Ray Jui
2016-02-12 21:10 ` [PATCH v2 2/3] i2c: iproc: Fix typo in the driver Ray Jui
2016-02-12 21:42   ` Wolfram Sang
2016-02-12 21:10 ` [PATCH v2 3/3] i2c: iproc: Support larger TX transfer Ray Jui
2016-02-12 21:44   ` Wolfram Sang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).