[3/6] i2c: rcar: do not print error if device nacks transfer
diff mbox

Message ID 1390752337-22386-4-git-send-email-ben.dooks@codethink.co.uk
State Accepted
Headers show

Commit Message

Ben Dooks Jan. 26, 2014, 4:05 p.m. UTC
The i2c-rcar driver currently prints an error message if the master_xfer
callback fails. However if the bus is being probed then lots of NAKs
will be generated, causing the output of a number of errors printed.

To solve this, disable the print if the error is not -EREMOTEIO.

An example of running i2cdetect:

10: i2c-rcar e6530000.i2c: error -121 : 15
-- i2c-rcar e6530000.i2c: error -121 : 15
-- 12 i2c-rcar e6530000.i2c: error -121 : 15
-- i2c-rcar e6530000.i2c: error -121 : 15
-- i2c-rcar e6530000.i2c: error -121 : 15
-- i2c-rcar e6530000.i2c: error -121 : 15
-- i2c-rcar e6530000.i2c: error -121 : 15
-- i2c-rcar e6530000.i2c: error -121 : 15

Cc: Simon Horman <horms+renesas@verge.net.au>
Cc: Wolfram Sang <wsa@the-dreams.de>
Cc: linux-i2c@vger.kernel.org
Cc: linux-sh@vger.kernel.org
Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
---
 drivers/i2c/busses/i2c-rcar.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Wolfram Sang Jan. 26, 2014, 9:50 p.m. UTC | #1
On Sun, Jan 26, 2014 at 04:05:34PM +0000, Ben Dooks wrote:
> The i2c-rcar driver currently prints an error message if the master_xfer
> callback fails. However if the bus is being probed then lots of NAKs
> will be generated, causing the output of a number of errors printed.
> 
> To solve this, disable the print if the error is not -EREMOTEIO.
> 
> An example of running i2cdetect:
> 
> 10: i2c-rcar e6530000.i2c: error -121 : 15
> -- i2c-rcar e6530000.i2c: error -121 : 15
> -- 12 i2c-rcar e6530000.i2c: error -121 : 15
> -- i2c-rcar e6530000.i2c: error -121 : 15
> -- i2c-rcar e6530000.i2c: error -121 : 15
> -- i2c-rcar e6530000.i2c: error -121 : 15
> -- i2c-rcar e6530000.i2c: error -121 : 15
> -- i2c-rcar e6530000.i2c: error -121 : 15
> 
> Cc: Simon Horman <horms+renesas@verge.net.au>
> Cc: Wolfram Sang <wsa@the-dreams.de>
> Cc: linux-i2c@vger.kernel.org
> Cc: linux-sh@vger.kernel.org
> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>

All applied to for-current, thanks, especially for doing the extra
kernel-doc update!
Wolfram Sang Feb. 16, 2014, 9:46 a.m. UTC | #2
On Sun, Jan 26, 2014 at 04:05:34PM +0000, Ben Dooks wrote:
> The i2c-rcar driver currently prints an error message if the master_xfer
> callback fails. However if the bus is being probed then lots of NAKs
> will be generated, causing the output of a number of errors printed.
> 
> To solve this, disable the print if the error is not -EREMOTEIO.
> 
> An example of running i2cdetect:

So, after this patch i2cdetect runs fine for you? I assume you are
working with the lager/r8a7790 board? With koelsch/r8a7791, it stalls
the bus :(
Geert Uytterhoeven Feb. 16, 2014, 10:25 a.m. UTC | #3
On Sun, Feb 16, 2014 at 10:46 AM, Wolfram Sang <wsa@the-dreams.de> wrote:
> On Sun, Jan 26, 2014 at 04:05:34PM +0000, Ben Dooks wrote:
>> The i2c-rcar driver currently prints an error message if the master_xfer
>> callback fails. However if the bus is being probed then lots of NAKs
>> will be generated, causing the output of a number of errors printed.
>>
>> To solve this, disable the print if the error is not -EREMOTEIO.
>>
>> An example of running i2cdetect:
>
> So, after this patch i2cdetect runs fine for you? I assume you are
> working with the lager/r8a7790 board? With koelsch/r8a7791, it stalls
> the bus :(

Do you know at which i2c client device it stalls?

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
--
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
Wolfram Sang Feb. 16, 2014, 11:46 a.m. UTC | #4
On Sun, Feb 16, 2014 at 11:25:37AM +0100, Geert Uytterhoeven wrote:
> On Sun, Feb 16, 2014 at 10:46 AM, Wolfram Sang <wsa@the-dreams.de> wrote:
> > On Sun, Jan 26, 2014 at 04:05:34PM +0000, Ben Dooks wrote:
> >> The i2c-rcar driver currently prints an error message if the master_xfer
> >> callback fails. However if the bus is being probed then lots of NAKs
> >> will be generated, causing the output of a number of errors printed.
> >>
> >> To solve this, disable the print if the error is not -EREMOTEIO.
> >>
> >> An example of running i2cdetect:
> >
> > So, after this patch i2cdetect runs fine for you? I assume you are
> > working with the lager/r8a7790 board? With koelsch/r8a7791, it stalls
> > the bus :(
> 
> Do you know at which i2c client device it stalls?

It gives errors when it scans for the first device. The errors are
different depending on if I use SMBUS_QUICK or BYTE_READ, but the bus is
unusable afterwards. I can read/write the eeprom on that bus before I
use i2cdetect, but not afterwards.
Ben Dooks Feb. 17, 2014, 8:04 a.m. UTC | #5
On 16/02/14 09:46, Wolfram Sang wrote:
> On Sun, Jan 26, 2014 at 04:05:34PM +0000, Ben Dooks wrote:
>> The i2c-rcar driver currently prints an error message if the master_xfer
>> callback fails. However if the bus is being probed then lots of NAKs
>> will be generated, causing the output of a number of errors printed.
>>
>> To solve this, disable the print if the error is not -EREMOTEIO.
>>
>> An example of running i2cdetect:
>
> So, after this patch i2cdetect runs fine for you? I assume you are
> working with the lager/r8a7790 board? With koelsch/r8a7791, it stalls
> the bus :(

It runs fine most of the time, however I've seen some issues with the
bus locking up. However it seems to be random and affects either of
bus 2 or bus 3 randomly. Once the bus does lock up then there is no
possibility of further transfers.

I am trying to put together a breakout board to get at the signals
involved as they are all pretty much only available on high-density
connectors.

I hope to have a look at this before the end of the week and see if
there is a fix for this.
Sergei Shtylyov May 8, 2014, 10:03 p.m. UTC | #6
Hello.

On 01/26/2014 07:05 PM, Ben Dooks wrote:

> The i2c-rcar driver currently prints an error message if the master_xfer
> callback fails. However if the bus is being probed then lots of NAKs
> will be generated, causing the output of a number of errors printed.

> To solve this, disable the print if the error is not -EREMOTEIO.

> An example of running i2cdetect:

> 10: i2c-rcar e6530000.i2c: error -121 : 15
> -- i2c-rcar e6530000.i2c: error -121 : 15
> -- 12 i2c-rcar e6530000.i2c: error -121 : 15
> -- i2c-rcar e6530000.i2c: error -121 : 15
> -- i2c-rcar e6530000.i2c: error -121 : 15
> -- i2c-rcar e6530000.i2c: error -121 : 15
> -- i2c-rcar e6530000.i2c: error -121 : 15
> -- i2c-rcar e6530000.i2c: error -121 : 15

> Cc: Simon Horman <horms+renesas@verge.net.au>
> Cc: Wolfram Sang <wsa@the-dreams.de>
> Cc: linux-i2c@vger.kernel.org
> Cc: linux-sh@vger.kernel.org
> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
> ---
>   drivers/i2c/busses/i2c-rcar.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)

> diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c
> index 2c2fd7c..0d25104 100644
> --- a/drivers/i2c/busses/i2c-rcar.c
> +++ b/drivers/i2c/busses/i2c-rcar.c
> @@ -623,7 +623,7 @@ static int rcar_i2c_master_xfer(struct i2c_adapter *adap,
>
>   	pm_runtime_put(dev);
>
> -	if (ret < 0)
> +	if (ret < 0 && ret != -EREMOTEIO)
>   		dev_err(dev, "error %d : %x\n", ret, priv->flags);

    Hm, I'm now getting -EBUSY and -EAGAIN running i2cdetect on R8A7791 base 
Henninger board. Only when I comment out the above 2 lines, I can get the bus 
scanned, otherwise I don't see any devices at all.

WBR, Sergei

--
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
Wolfram Sang May 9, 2014, 5:04 a.m. UTC | #7
> >-	if (ret < 0)
> >+	if (ret < 0 && ret != -EREMOTEIO)
> >  		dev_err(dev, "error %d : %x\n", ret, priv->flags);
> 
>    Hm, I'm now getting -EBUSY and -EAGAIN running i2cdetect on
> R8A7791 base Henninger board. Only when I comment out the above 2
> lines, I can get the bus scanned, otherwise I don't see any devices
> at all.

Huh, this is only a printout? Do you get those errors as well if you
remove the printout and add a delay at that place?

And -EAGAIN? This is arbitration lost. Do you have another I2C master on
the bus?
Ben Dooks May 9, 2014, 9:32 a.m. UTC | #8
On 08/05/14 23:03, Sergei Shtylyov wrote:
> Hello.
>
> On 01/26/2014 07:05 PM, Ben Dooks wrote:
>
>> The i2c-rcar driver currently prints an error message if the master_xfer
>> callback fails. However if the bus is being probed then lots of NAKs
>> will be generated, causing the output of a number of errors printed.
>
>> To solve this, disable the print if the error is not -EREMOTEIO.
>
>> An example of running i2cdetect:
>
>> 10: i2c-rcar e6530000.i2c: error -121 : 15
>> -- i2c-rcar e6530000.i2c: error -121 : 15
>> -- 12 i2c-rcar e6530000.i2c: error -121 : 15
>> -- i2c-rcar e6530000.i2c: error -121 : 15
>> -- i2c-rcar e6530000.i2c: error -121 : 15
>> -- i2c-rcar e6530000.i2c: error -121 : 15
>> -- i2c-rcar e6530000.i2c: error -121 : 15
>> -- i2c-rcar e6530000.i2c: error -121 : 15
>
>> Cc: Simon Horman <horms+renesas@verge.net.au>
>> Cc: Wolfram Sang <wsa@the-dreams.de>
>> Cc: linux-i2c@vger.kernel.org
>> Cc: linux-sh@vger.kernel.org
>> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
>> ---
>>   drivers/i2c/busses/i2c-rcar.c | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>
>> diff --git a/drivers/i2c/busses/i2c-rcar.c
>> b/drivers/i2c/busses/i2c-rcar.c
>> index 2c2fd7c..0d25104 100644
>> --- a/drivers/i2c/busses/i2c-rcar.c
>> +++ b/drivers/i2c/busses/i2c-rcar.c
>> @@ -623,7 +623,7 @@ static int rcar_i2c_master_xfer(struct i2c_adapter
>> *adap,
>>
>>       pm_runtime_put(dev);
>>
>> -    if (ret < 0)
>> +    if (ret < 0 && ret != -EREMOTEIO)
>>           dev_err(dev, "error %d : %x\n", ret, priv->flags);
>
>     Hm, I'm now getting -EBUSY and -EAGAIN running i2cdetect on R8A7791
> base Henninger board. Only when I comment out the above 2 lines, I can
> get the bus scanned, otherwise I don't see any devices at all.

i2c-detect does not work well on the i2c-rcar due to it insisting
on sending or receiving at-least one byte of data. I think it
is possible that it confuses some of the bus devices.
Sergei Shtylyov May 9, 2014, 10:55 p.m. UTC | #9
Hello.

On 05/09/2014 01:32 PM, Ben Dooks wrote:

>>> The i2c-rcar driver currently prints an error message if the master_xfer
>>> callback fails. However if the bus is being probed then lots of NAKs
>>> will be generated, causing the output of a number of errors printed.

>>> To solve this, disable the print if the error is not -EREMOTEIO.

>>> An example of running i2cdetect:

>>> 10: i2c-rcar e6530000.i2c: error -121 : 15
>>> -- i2c-rcar e6530000.i2c: error -121 : 15
>>> -- 12 i2c-rcar e6530000.i2c: error -121 : 15
>>> -- i2c-rcar e6530000.i2c: error -121 : 15
>>> -- i2c-rcar e6530000.i2c: error -121 : 15
>>> -- i2c-rcar e6530000.i2c: error -121 : 15
>>> -- i2c-rcar e6530000.i2c: error -121 : 15
>>> -- i2c-rcar e6530000.i2c: error -121 : 15

>>> Cc: Simon Horman <horms+renesas@verge.net.au>
>>> Cc: Wolfram Sang <wsa@the-dreams.de>
>>> Cc: linux-i2c@vger.kernel.org
>>> Cc: linux-sh@vger.kernel.org
>>> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
>>> ---
>>>   drivers/i2c/busses/i2c-rcar.c | 2 +-
>>>   1 file changed, 1 insertion(+), 1 deletion(-)

>>> diff --git a/drivers/i2c/busses/i2c-rcar.c
>>> b/drivers/i2c/busses/i2c-rcar.c
>>> index 2c2fd7c..0d25104 100644
>>> --- a/drivers/i2c/busses/i2c-rcar.c
>>> +++ b/drivers/i2c/busses/i2c-rcar.c
>>> @@ -623,7 +623,7 @@ static int rcar_i2c_master_xfer(struct i2c_adapter
>>> *adap,
>>>
>>>       pm_runtime_put(dev);
>>>
>>> -    if (ret < 0)
>>> +    if (ret < 0 && ret != -EREMOTEIO)
>>>           dev_err(dev, "error %d : %x\n", ret, priv->flags);

>>     Hm, I'm now getting -EBUSY and -EAGAIN running i2cdetect on R8A7791
>> base Henninger board. Only when I comment out the above 2 lines, I can
>> get the bus scanned, otherwise I don't see any devices at all.

> i2c-detect does not work well on the i2c-rcar due to it insisting
> on sending or receiving at-least one byte of data.

   I've noticed that it works more or less reliable only the first time I run 
it, on subsequent runs it only sees devices for which a driver is bound, IIRC.

> I think it
> is possible that it confuses some of the bus devices.

    Yes, it seems to be the case. However, with these lines commented out, it 
still works the first time...

WBR, Sergei

--
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

Patch
diff mbox

diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c
index 2c2fd7c..0d25104 100644
--- a/drivers/i2c/busses/i2c-rcar.c
+++ b/drivers/i2c/busses/i2c-rcar.c
@@ -623,7 +623,7 @@  static int rcar_i2c_master_xfer(struct i2c_adapter *adap,
 
 	pm_runtime_put(dev);
 
-	if (ret < 0)
+	if (ret < 0 && ret != -EREMOTEIO)
 		dev_err(dev, "error %d : %x\n", ret, priv->flags);
 
 	return ret;