* [PATCH 0/4] i2c: sh_mobile: fix STOP condition generation
@ 2013-01-17 9:45 Guennadi Liakhovetski
[not found] ` <1358415957-8371-1-git-send-email-g.liakhovetski-Mmb7MZpHnFY@public.gmane.org>
` (4 more replies)
0 siblings, 5 replies; 8+ messages in thread
From: Guennadi Liakhovetski @ 2013-01-17 9:45 UTC (permalink / raw)
To: linux-i2c; +Cc: linux-sh, Magnus Damm, Simon Horman
Currently the i2c-sh_mobile.c driver generates STOP conditions after each
message. This makes any multi-message transfers, e.g. reading, impossible
with the AS3711 PMIC on kzm9g. This patch series fixes this by only
generating the STOP condition after the last message or if the I2C_M_STOP
flag is set.
Guennadi Liakhovetski (4):
i2c: i2c-sh_mobile.c: cosmetic: trivially simplify 2 functions
i2c: sh_mobile: fix timeout error handling
i2c: sh_mobile: eliminate an open-coded "goto" loop
i2c: sh_mobile: don't send a stop condition by default inside
transfers
drivers/i2c/busses/i2c-sh_mobile.c | 152 +++++++++++++++++++++++-------------
1 files changed, 98 insertions(+), 54 deletions(-)
--
1.7.2.5
Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/4] i2c: i2c-sh_mobile.c: cosmetic: trivially simplify 2 functions
[not found] ` <1358415957-8371-1-git-send-email-g.liakhovetski-Mmb7MZpHnFY@public.gmane.org>
@ 2013-01-17 9:45 ` Guennadi Liakhovetski
0 siblings, 0 replies; 8+ messages in thread
From: Guennadi Liakhovetski @ 2013-01-17 9:45 UTC (permalink / raw)
To: linux-i2c-u79uwXL29TY76Z2rM5mHXA
Cc: linux-sh-u79uwXL29TY76Z2rM5mHXA, Magnus Damm, Simon Horman
Reduce 2 boolean functions from "if (condition) return 1; return 0;" to
"return condition;"
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski-Mmb7MZpHnFY@public.gmane.org>
---
drivers/i2c/busses/i2c-sh_mobile.c | 14 ++++----------
1 files changed, 4 insertions(+), 10 deletions(-)
diff --git a/drivers/i2c/busses/i2c-sh_mobile.c b/drivers/i2c/busses/i2c-sh_mobile.c
index 9411c1b..3b08b4e 100644
--- a/drivers/i2c/busses/i2c-sh_mobile.c
+++ b/drivers/i2c/busses/i2c-sh_mobile.c
@@ -349,20 +349,14 @@ static unsigned char i2c_op(struct sh_mobile_i2c_data *pd,
return ret;
}
-static int sh_mobile_i2c_is_first_byte(struct sh_mobile_i2c_data *pd)
+static bool sh_mobile_i2c_is_first_byte(struct sh_mobile_i2c_data *pd)
{
- if (pd->pos == -1)
- return 1;
-
- return 0;
+ return pd->pos == -1;
}
-static int sh_mobile_i2c_is_last_byte(struct sh_mobile_i2c_data *pd)
+static bool sh_mobile_i2c_is_last_byte(struct sh_mobile_i2c_data *pd)
{
- if (pd->pos == (pd->msg->len - 1))
- return 1;
-
- return 0;
+ return pd->pos == pd->msg->len - 1;
}
static void sh_mobile_i2c_get_data(struct sh_mobile_i2c_data *pd,
--
1.7.2.5
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/4] i2c: sh_mobile: fix timeout error handling
2013-01-17 9:45 [PATCH 0/4] i2c: sh_mobile: fix STOP condition generation Guennadi Liakhovetski
[not found] ` <1358415957-8371-1-git-send-email-g.liakhovetski-Mmb7MZpHnFY@public.gmane.org>
@ 2013-01-17 9:45 ` Guennadi Liakhovetski
2013-01-17 9:45 ` [PATCH 3/4] i2c: sh_mobile: eliminate an open-coded "goto" loop Guennadi Liakhovetski
` (2 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Guennadi Liakhovetski @ 2013-01-17 9:45 UTC (permalink / raw)
To: linux-i2c; +Cc: linux-sh, Magnus Damm, Simon Horman
In a timeout case return an error immediately from the driver's
.master_xfer() method, instead of continuing and letting higher layers
fail.
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
---
drivers/i2c/busses/i2c-sh_mobile.c | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/drivers/i2c/busses/i2c-sh_mobile.c b/drivers/i2c/busses/i2c-sh_mobile.c
index 3b08b4e..69a1fbe 100644
--- a/drivers/i2c/busses/i2c-sh_mobile.c
+++ b/drivers/i2c/busses/i2c-sh_mobile.c
@@ -521,8 +521,11 @@ static int sh_mobile_i2c_xfer(struct i2c_adapter *adapter,
k = wait_event_timeout(pd->wait,
pd->sr & (ICSR_TACK | SW_DONE),
5 * HZ);
- if (!k)
+ if (!k) {
dev_err(pd->dev, "Transfer request timed out\n");
+ err = -ETIMEDOUT;
+ break;
+ }
retry_count = 1000;
again:
--
1.7.2.5
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/4] i2c: sh_mobile: eliminate an open-coded "goto" loop
2013-01-17 9:45 [PATCH 0/4] i2c: sh_mobile: fix STOP condition generation Guennadi Liakhovetski
[not found] ` <1358415957-8371-1-git-send-email-g.liakhovetski-Mmb7MZpHnFY@public.gmane.org>
2013-01-17 9:45 ` [PATCH 2/4] i2c: sh_mobile: fix timeout error handling Guennadi Liakhovetski
@ 2013-01-17 9:45 ` Guennadi Liakhovetski
2013-01-17 9:45 ` [PATCH 4/4] i2c: sh_mobile: don't send a stop condition by default inside transfers Guennadi Liakhovetski
2013-01-24 7:27 ` [PATCH 0/4] i2c: sh_mobile: fix STOP condition generation Wolfram Sang
4 siblings, 0 replies; 8+ messages in thread
From: Guennadi Liakhovetski @ 2013-01-17 9:45 UTC (permalink / raw)
To: linux-i2c; +Cc: linux-sh, Magnus Damm, Simon Horman
Eliminate an open-coded "goto" loop by introducing a function.
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
---
drivers/i2c/busses/i2c-sh_mobile.c | 60 ++++++++++++++++++++---------------
1 files changed, 34 insertions(+), 26 deletions(-)
diff --git a/drivers/i2c/busses/i2c-sh_mobile.c b/drivers/i2c/busses/i2c-sh_mobile.c
index 69a1fbe..5cf2367 100644
--- a/drivers/i2c/busses/i2c-sh_mobile.c
+++ b/drivers/i2c/busses/i2c-sh_mobile.c
@@ -495,6 +495,37 @@ static int start_ch(struct sh_mobile_i2c_data *pd, struct i2c_msg *usr_msg)
return 0;
}
+static int poll_busy(struct sh_mobile_i2c_data *pd)
+{
+ int i;
+
+ for (i = 1000; i; i--) {
+ u_int8_t val = iic_rd(pd, ICSR);
+
+ dev_dbg(pd->dev, "val 0x%02x pd->sr 0x%02x\n", val, pd->sr);
+
+ /* the interrupt handler may wake us up before the
+ * transfer is finished, so poll the hardware
+ * until we're done.
+ */
+ if (!(val & ICSR_BUSY)) {
+ /* handle missing acknowledge and arbitration lost */
+ if ((val | pd->sr) & (ICSR_TACK | ICSR_AL))
+ return -EIO;
+ break;
+ }
+
+ udelay(10);
+ }
+
+ if (!i) {
+ dev_err(pd->dev, "Polling timed out\n");
+ return -ETIMEDOUT;
+ }
+
+ return 0;
+}
+
static int sh_mobile_i2c_xfer(struct i2c_adapter *adapter,
struct i2c_msg *msgs,
int num)
@@ -502,8 +533,7 @@ static int sh_mobile_i2c_xfer(struct i2c_adapter *adapter,
struct sh_mobile_i2c_data *pd = i2c_get_adapdata(adapter);
struct i2c_msg *msg;
int err = 0;
- u_int8_t val;
- int i, k, retry_count;
+ int i, k;
activate_ch(pd);
@@ -527,31 +557,9 @@ static int sh_mobile_i2c_xfer(struct i2c_adapter *adapter,
break;
}
- retry_count = 1000;
-again:
- val = iic_rd(pd, ICSR);
-
- dev_dbg(pd->dev, "val 0x%02x pd->sr 0x%02x\n", val, pd->sr);
-
- /* the interrupt handler may wake us up before the
- * transfer is finished, so poll the hardware
- * until we're done.
- */
- if (val & ICSR_BUSY) {
- udelay(10);
- if (retry_count--)
- goto again;
-
- err = -EIO;
- dev_err(pd->dev, "Polling timed out\n");
+ err = poll_busy(pd);
+ if (err < 0)
break;
- }
-
- /* handle missing acknowledge and arbitration lost */
- if ((val | pd->sr) & (ICSR_TACK | ICSR_AL)) {
- err = -EIO;
- break;
- }
}
deactivate_ch(pd);
--
1.7.2.5
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 4/4] i2c: sh_mobile: don't send a stop condition by default inside transfers
2013-01-17 9:45 [PATCH 0/4] i2c: sh_mobile: fix STOP condition generation Guennadi Liakhovetski
` (2 preceding siblings ...)
2013-01-17 9:45 ` [PATCH 3/4] i2c: sh_mobile: eliminate an open-coded "goto" loop Guennadi Liakhovetski
@ 2013-01-17 9:45 ` Guennadi Liakhovetski
2013-01-24 7:27 ` [PATCH 0/4] i2c: sh_mobile: fix STOP condition generation Wolfram Sang
4 siblings, 0 replies; 8+ messages in thread
From: Guennadi Liakhovetski @ 2013-01-17 9:45 UTC (permalink / raw)
To: linux-i2c; +Cc: linux-sh, Magnus Damm, Simon Horman
By default there should be no stop bit on I2C between single messages
within transfers. Fix the driver to comply and only send a stop bit at
the end of transfers or if I2C_M_STOP is set.
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
---
drivers/i2c/busses/i2c-sh_mobile.c | 79 +++++++++++++++++++++++++++---------
1 files changed, 59 insertions(+), 20 deletions(-)
diff --git a/drivers/i2c/busses/i2c-sh_mobile.c b/drivers/i2c/busses/i2c-sh_mobile.c
index 5cf2367..1c7be2f 100644
--- a/drivers/i2c/busses/i2c-sh_mobile.c
+++ b/drivers/i2c/busses/i2c-sh_mobile.c
@@ -38,21 +38,21 @@
/* Transmit operation: */
/* */
/* 0 byte transmit */
-/* BUS: S A8 ACK P */
+/* BUS: S A8 ACK P(*) */
/* IRQ: DTE WAIT */
/* ICIC: */
/* ICCR: 0x94 0x90 */
/* ICDR: A8 */
/* */
/* 1 byte transmit */
-/* BUS: S A8 ACK D8(1) ACK P */
+/* BUS: S A8 ACK D8(1) ACK P(*) */
/* IRQ: DTE WAIT WAIT */
/* ICIC: -DTE */
/* ICCR: 0x94 0x90 */
/* ICDR: A8 D8(1) */
/* */
/* 2 byte transmit */
-/* BUS: S A8 ACK D8(1) ACK D8(2) ACK P */
+/* BUS: S A8 ACK D8(1) ACK D8(2) ACK P(*) */
/* IRQ: DTE WAIT WAIT WAIT */
/* ICIC: -DTE */
/* ICCR: 0x94 0x90 */
@@ -66,20 +66,20 @@
/* 0 byte receive - not supported since slave may hold SDA low */
/* */
/* 1 byte receive [TX] | [RX] */
-/* BUS: S A8 ACK | D8(1) ACK P */
+/* BUS: S A8 ACK | D8(1) ACK P(*) */
/* IRQ: DTE WAIT | WAIT DTE */
/* ICIC: -DTE | +DTE */
/* ICCR: 0x94 0x81 | 0xc0 */
/* ICDR: A8 | D8(1) */
/* */
/* 2 byte receive [TX]| [RX] */
-/* BUS: S A8 ACK | D8(1) ACK D8(2) ACK P */
+/* BUS: S A8 ACK | D8(1) ACK D8(2) ACK P(*) */
/* IRQ: DTE WAIT | WAIT WAIT DTE */
/* ICIC: -DTE | +DTE */
/* ICCR: 0x94 0x81 | 0xc0 */
/* ICDR: A8 | D8(1) D8(2) */
/* */
-/* 3 byte receive [TX] | [RX] */
+/* 3 byte receive [TX] | [RX] (*) */
/* BUS: S A8 ACK | D8(1) ACK D8(2) ACK D8(3) ACK P */
/* IRQ: DTE WAIT | WAIT WAIT WAIT DTE */
/* ICIC: -DTE | +DTE */
@@ -94,7 +94,7 @@
/* SDA ___\___XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXAAAAAAAAA___/ */
/* SCL \_/1\_/2\_/3\_/4\_/5\_/6\_/7\_/8\___/9\_____/ */
/* */
-/* S D7 D6 D5 D4 D3 D2 D1 D0 P */
+/* S D7 D6 D5 D4 D3 D2 D1 D0 P(*) */
/* ___ */
/* WAIT IRQ ________________________________/ \___________ */
/* TACK IRQ ____________________________________/ \_______ */
@@ -103,6 +103,11 @@
/* _______________________________________________ */
/* BUSY __/ \_ */
/* */
+/* (*) The STOP condition is only sent by the master at the end of the last */
+/* I2C message or if the I2C_M_STOP flag is set. Similarly, the BUSY bit is */
+/* only cleared after the STOP condition, so, between messages we have to */
+/* poll for the DTE bit. */
+/* */
enum sh_mobile_i2c_op {
OP_START = 0,
@@ -132,6 +137,7 @@ struct sh_mobile_i2c_data {
struct i2c_msg *msg;
int pos;
int sr;
+ bool send_stop;
};
#define IIC_FLAG_HAS_ICIC67 (1 << 0)
@@ -322,7 +328,7 @@ static unsigned char i2c_op(struct sh_mobile_i2c_data *pd,
break;
case OP_TX_STOP: /* write data and issue a stop afterwards */
iic_wr(pd, ICDR, data);
- iic_wr(pd, ICCR, 0x90);
+ iic_wr(pd, ICCR, pd->send_stop ? 0x90 : 0x94);
break;
case OP_TX_TO_RX: /* select read mode */
iic_wr(pd, ICCR, 0x81);
@@ -469,22 +475,25 @@ static irqreturn_t sh_mobile_i2c_isr(int irq, void *dev_id)
return IRQ_HANDLED;
}
-static int start_ch(struct sh_mobile_i2c_data *pd, struct i2c_msg *usr_msg)
+static int start_ch(struct sh_mobile_i2c_data *pd, struct i2c_msg *usr_msg,
+ bool do_init)
{
if (usr_msg->len == 0 && (usr_msg->flags & I2C_M_RD)) {
dev_err(pd->dev, "Unsupported zero length i2c read\n");
return -EIO;
}
- /* Initialize channel registers */
- iic_set_clr(pd, ICCR, 0, ICCR_ICE);
+ if (do_init) {
+ /* Initialize channel registers */
+ iic_set_clr(pd, ICCR, 0, ICCR_ICE);
- /* Enable channel and configure rx ack */
- iic_set_clr(pd, ICCR, ICCR_ICE, 0);
+ /* Enable channel and configure rx ack */
+ iic_set_clr(pd, ICCR, ICCR_ICE, 0);
- /* Set the clock */
- iic_wr(pd, ICCL, pd->iccl & 0xff);
- iic_wr(pd, ICCH, pd->icch & 0xff);
+ /* Set the clock */
+ iic_wr(pd, ICCL, pd->iccl & 0xff);
+ iic_wr(pd, ICCH, pd->icch & 0xff);
+ }
pd->msg = usr_msg;
pd->pos = -1;
@@ -495,6 +504,30 @@ static int start_ch(struct sh_mobile_i2c_data *pd, struct i2c_msg *usr_msg)
return 0;
}
+static int poll_dte(struct sh_mobile_i2c_data *pd)
+{
+ int i;
+
+ for (i = 1000; i; i--) {
+ u_int8_t val = iic_rd(pd, ICSR);
+
+ if (val & ICSR_DTE)
+ break;
+
+ if (val & ICSR_TACK)
+ return -EIO;
+
+ udelay(10);
+ }
+
+ if (!i) {
+ dev_warn(pd->dev, "Timeout polling for DTE!\n");
+ return -ETIMEDOUT;
+ }
+
+ return 0;
+}
+
static int poll_busy(struct sh_mobile_i2c_data *pd)
{
int i;
@@ -539,13 +572,16 @@ static int sh_mobile_i2c_xfer(struct i2c_adapter *adapter,
/* Process all messages */
for (i = 0; i < num; i++) {
+ bool do_start = pd->send_stop || !i;
msg = &msgs[i];
+ pd->send_stop = i == num - 1 || msg->flags & I2C_M_STOP;
- err = start_ch(pd, msg);
+ err = start_ch(pd, msg, do_start);
if (err)
break;
- i2c_op(pd, OP_START, 0);
+ if (do_start)
+ i2c_op(pd, OP_START, 0);
/* The interrupt handler takes care of the rest... */
k = wait_event_timeout(pd->wait,
@@ -557,7 +593,10 @@ static int sh_mobile_i2c_xfer(struct i2c_adapter *adapter,
break;
}
- err = poll_busy(pd);
+ if (pd->send_stop)
+ err = poll_busy(pd);
+ else
+ err = poll_dte(pd);
if (err < 0)
break;
}
@@ -571,7 +610,7 @@ static int sh_mobile_i2c_xfer(struct i2c_adapter *adapter,
static u32 sh_mobile_i2c_func(struct i2c_adapter *adapter)
{
- return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
+ return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL | I2C_FUNC_PROTOCOL_MANGLING;
}
static struct i2c_algorithm sh_mobile_i2c_algorithm = {
--
1.7.2.5
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 0/4] i2c: sh_mobile: fix STOP condition generation
2013-01-17 9:45 [PATCH 0/4] i2c: sh_mobile: fix STOP condition generation Guennadi Liakhovetski
` (3 preceding siblings ...)
2013-01-17 9:45 ` [PATCH 4/4] i2c: sh_mobile: don't send a stop condition by default inside transfers Guennadi Liakhovetski
@ 2013-01-24 7:27 ` Wolfram Sang
[not found] ` <20130124072748.GK8364-8EAEigeeuNG034pCzgS/Qg7AFbiQbgqx@public.gmane.org>
4 siblings, 1 reply; 8+ messages in thread
From: Wolfram Sang @ 2013-01-24 7:27 UTC (permalink / raw)
To: Guennadi Liakhovetski; +Cc: linux-i2c, linux-sh, Magnus Damm, Simon Horman
On Thu, Jan 17, 2013 at 10:45:53AM +0100, Guennadi Liakhovetski wrote:
> Currently the i2c-sh_mobile.c driver generates STOP conditions after each
> message. This makes any multi-message transfers, e.g. reading, impossible
> with the AS3711 PMIC on kzm9g. This patch series fixes this by only
> generating the STOP condition after the last message or if the I2C_M_STOP
> flag is set.
>
> Guennadi Liakhovetski (4):
> i2c: i2c-sh_mobile.c: cosmetic: trivially simplify 2 functions
> i2c: sh_mobile: fix timeout error handling
> i2c: sh_mobile: eliminate an open-coded "goto" loop
> i2c: sh_mobile: don't send a stop condition by default inside
> transfers
Looks good to me. I have to mention usleep_range, though. I leave it to
you if you want to fix it or not. Other than that, I would apply the
series.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 0/4] i2c: sh_mobile: fix STOP condition generation
[not found] ` <20130124072748.GK8364-8EAEigeeuNG034pCzgS/Qg7AFbiQbgqx@public.gmane.org>
@ 2013-02-05 8:45 ` Guennadi Liakhovetski
[not found] ` <Pine.LNX.4.64.1302050942140.1275-0199iw4Nj15frtckUFj5Ag@public.gmane.org>
0 siblings, 1 reply; 8+ messages in thread
From: Guennadi Liakhovetski @ 2013-02-05 8:45 UTC (permalink / raw)
To: Wolfram Sang
Cc: linux-i2c-u79uwXL29TY76Z2rM5mHXA, linux-sh-u79uwXL29TY76Z2rM5mHXA,
Magnus Damm, Simon Horman
Hi Wolfram
On Thu, 24 Jan 2013, Wolfram Sang wrote:
> On Thu, Jan 17, 2013 at 10:45:53AM +0100, Guennadi Liakhovetski wrote:
> > Currently the i2c-sh_mobile.c driver generates STOP conditions after each
> > message. This makes any multi-message transfers, e.g. reading, impossible
> > with the AS3711 PMIC on kzm9g. This patch series fixes this by only
> > generating the STOP condition after the last message or if the I2C_M_STOP
> > flag is set.
> >
> > Guennadi Liakhovetski (4):
> > i2c: i2c-sh_mobile.c: cosmetic: trivially simplify 2 functions
> > i2c: sh_mobile: fix timeout error handling
> > i2c: sh_mobile: eliminate an open-coded "goto" loop
> > i2c: sh_mobile: don't send a stop condition by default inside
> > transfers
>
> Looks good to me. I have to mention usleep_range, though. I leave it to
> you if you want to fix it or not. Other than that, I would apply the
> series.
Thanks, yes, we could try usleep_range(), but these delays could be a bit
sensitive, so, such a change would require a new round of testing. Maybe
we could commit these patches in this form and then I could try
usleep_range() as a separate patch to also make any regression tracking
easier?
Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 0/4] i2c: sh_mobile: fix STOP condition generation
[not found] ` <Pine.LNX.4.64.1302050942140.1275-0199iw4Nj15frtckUFj5Ag@public.gmane.org>
@ 2013-02-10 14:53 ` Wolfram Sang
0 siblings, 0 replies; 8+ messages in thread
From: Wolfram Sang @ 2013-02-10 14:53 UTC (permalink / raw)
To: Guennadi Liakhovetski
Cc: linux-i2c-u79uwXL29TY76Z2rM5mHXA, linux-sh-u79uwXL29TY76Z2rM5mHXA,
Magnus Damm, Simon Horman
> Thanks, yes, we could try usleep_range(), but these delays could be a bit
> sensitive, so, such a change would require a new round of testing. Maybe
> we could commit these patches in this form and then I could try
> usleep_range() as a separate patch to also make any regression tracking
> easier?
Sure. So, series applied to for-next, thanks!
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2013-02-10 14:53 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-01-17 9:45 [PATCH 0/4] i2c: sh_mobile: fix STOP condition generation Guennadi Liakhovetski
[not found] ` <1358415957-8371-1-git-send-email-g.liakhovetski-Mmb7MZpHnFY@public.gmane.org>
2013-01-17 9:45 ` [PATCH 1/4] i2c: i2c-sh_mobile.c: cosmetic: trivially simplify 2 functions Guennadi Liakhovetski
2013-01-17 9:45 ` [PATCH 2/4] i2c: sh_mobile: fix timeout error handling Guennadi Liakhovetski
2013-01-17 9:45 ` [PATCH 3/4] i2c: sh_mobile: eliminate an open-coded "goto" loop Guennadi Liakhovetski
2013-01-17 9:45 ` [PATCH 4/4] i2c: sh_mobile: don't send a stop condition by default inside transfers Guennadi Liakhovetski
2013-01-24 7:27 ` [PATCH 0/4] i2c: sh_mobile: fix STOP condition generation Wolfram Sang
[not found] ` <20130124072748.GK8364-8EAEigeeuNG034pCzgS/Qg7AFbiQbgqx@public.gmane.org>
2013-02-05 8:45 ` Guennadi Liakhovetski
[not found] ` <Pine.LNX.4.64.1302050942140.1275-0199iw4Nj15frtckUFj5Ag@public.gmane.org>
2013-02-10 14:53 ` 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).