Patchwork i2c-cpm: Detect and report NAK right away instead of timing out.

login
register
mail settings
Submitter Mike Ditto
Date Nov. 1, 2008, 12:29 a.m.
Message ID <490BA2E5.8010309@consentry.com>
Download mbox | patch
Permalink /patch/6763/
State Accepted
Commit a804644a1a31a0b85e4c7d3c49f30419513cb6c1
Headers show

Comments

Mike Ditto - Nov. 1, 2008, 12:29 a.m.
Make the driver report an ENXIO error immediately upon NAK instead of
waiting for another interrupt and getting a timeout.

Signed-off-by: Mike Ditto <mditto@consentry.com>
---
When reading from a device that is not present or declines to respond
to, e.g., a non-existent register address, CPM immediately reports a
NAK condition in the TxBD, but the driver kept waiting until a timeout,
which takes 1 second and causes an ugly console error message.
Ben Dooks - Nov. 3, 2008, 12:23 a.m.
On Fri, Oct 31, 2008 at 05:29:25PM -0700, Mike Ditto wrote:
> Make the driver report an ENXIO error immediately upon NAK instead of
> waiting for another interrupt and getting a timeout.
> 
> Signed-off-by: Mike Ditto <mditto@consentry.com>
> ---
> When reading from a device that is not present or declines to respond
> to, e.g., a non-existent register address, CPM immediately reports a
> NAK condition in the TxBD, but the driver kept waiting until a timeout,
> which takes 1 second and causes an ugly console error message.

hmm, that block of text could probably go into the patch description.

It looks ok, I'll merge and push out to linus with the s3c fixes.
 
> Index: linux/drivers/i2c/busses/i2c-cpm.c
> ===================================================================
> retrieving revision 1.3
> diff -u -p -r1.3 i2c-cpm.c
> --- linux/drivers/i2c/busses/i2c-cpm.c	31 Oct 2008 06:36:08 -0000	1.3
> +++ linux/drivers/i2c/busses/i2c-cpm.c	1 Nov 2008 00:12:45 -0000
> @@ -369,6 +369,7 @@ static int cpm_i2c_xfer(struct i2c_adapt
>  		pmsg = &msgs[tptr];
>  		if (pmsg->flags & I2C_M_RD)
>  			ret = wait_event_interruptible_timeout(cpm->i2c_wait,
> +				(in_be16(&tbdf[tptr].cbd_sc) & BD_SC_NAK) ||
>  				!(in_be16(&rbdf[rptr].cbd_sc) & BD_SC_EMPTY),
>  				1 * HZ);
>  		else
> --
> To unsubscribe from this list: send the line "unsubscribe linux-i2c" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
Mike Ditto - Nov. 3, 2008, 3:50 a.m.
Ben Dooks wrote:
>> When reading from a device that is not present or declines to respond
>> to, e.g., a non-existent register address, CPM immediately reports a
>> NAK condition in the TxBD, but the driver kept waiting until a timeout,
>> which takes 1 second and causes an ugly console error message.
> 
> hmm, that block of text could probably go into the patch description.

It's certainly fine with me if you want to include it.  I was just
trying, perhaps inappropriately, to separate the "bug report" from the
"description of the change".

					-=] Mike [=-
Jochen Friedrich - Nov. 3, 2008, 11:44 a.m.
Hi Ben,

> On Fri, Oct 31, 2008 at 05:29:25PM -0700, Mike Ditto wrote:
>> Make the driver report an ENXIO error immediately upon NAK instead of
>> waiting for another interrupt and getting a timeout.
>>
>> Signed-off-by: Mike Ditto <mditto@consentry.com>

Acked-by: Jochen Friedrich <jochen@scram.de>

> It looks ok, I'll merge and push out to linus with the s3c fixes.

Thanks!

Jochen

Patch

Index: linux/drivers/i2c/busses/i2c-cpm.c
===================================================================
retrieving revision 1.3
diff -u -p -r1.3 i2c-cpm.c
--- linux/drivers/i2c/busses/i2c-cpm.c	31 Oct 2008 06:36:08 -0000	1.3
+++ linux/drivers/i2c/busses/i2c-cpm.c	1 Nov 2008 00:12:45 -0000
@@ -369,6 +369,7 @@  static int cpm_i2c_xfer(struct i2c_adapt
 		pmsg = &msgs[tptr];
 		if (pmsg->flags & I2C_M_RD)
 			ret = wait_event_interruptible_timeout(cpm->i2c_wait,
+				(in_be16(&tbdf[tptr].cbd_sc) & BD_SC_NAK) ||
 				!(in_be16(&rbdf[rptr].cbd_sc) & BD_SC_EMPTY),
 				1 * HZ);
 		else