public inbox for linux-i2c@vger.kernel.org
 help / color / mirror / Atom feed
From: David Brownell <david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
To: Jean Delvare <khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org>
Cc: i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
Subject: Re: [patch 2.6.25-git] i2c_adapters:  return -Errno not -1
Date: Sat, 17 May 2008 17:54:15 -0700	[thread overview]
Message-ID: <200805171754.15976.david-b@pacbell.net> (raw)
In-Reply-To: <20080515191631.7791346c-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>

On Thursday 15 May 2008, Jean Delvare wrote:
> Hi David,
> 
> On Mon, 12 May 2008 09:43:04 -0700, David Brownell wrote:
> > --- g26.orig/drivers/i2c/busses/i2c-ali1563.c	2008-05-11 17:55:01.000000000 -0700
> > +++ g26/drivers/i2c/busses/i2c-ali1563.c	2008-05-11 17:55:08.000000000 -0700
> > 	...
> 
> This one doesn't look right. You should return -ENXIO in all cases (but
> only print the error message on size != HST_CNTL2_QUICK.) The right way
> to do this, I think, would be to move this specific check at the end of
> the function, so that the other error checks are still done in all
> cases.

OK, done ...


> > @@ -164,13 +168,17 @@ static int ali1563_block_start(struct i2
> >  
> >  	if (timeout && !(data & HST_STS_BAD))
> >  		return 0;
> > +
> > +	if (timeout == 0 && !(data & HST_STS_DONE))
> > +		status = -ETIMEDOUT;
> 
> That's pretty strange to check for both timeout == 0 and !(data &
> HST_STS_DONE), given that the former implies the latter if I read the
> code correctly. The same strangeness is present in the code below, if
> we print "Timeout" then we will also print "Transaction Never Finished".

Without chip docs, and knowing that it overloads lots of fault
cases into not enough bits, I wouldn't rely on such conclusions.
Instead, I just tried to make sure the ETIMEDOUT means exactly
what is promised in the faultcode writeup.


> > +
> >  	dev_err(&a->dev, "SMBus Error: %s%s%s%s%s\n",
> >  		timeout ? "Timeout " : "",
> 
> BTW, isn't there a bug here? I think the test should be timeout == 0.

Right, fixed.

> >  		data & HST_STS_FAIL ? "Transaction Failed " : "",
> >  		data & HST_STS_BUSERR ? "No response or Bus Collision " : "",
> >  		data & HST_STS_DEVERR ? "Device Error " : "",
> >  		!(data & HST_STS_DONE) ? "Transaction Never Finished " : "");
> > -	return -1;
> > +	return status;
> >  }
> 
> I thought we had agreed that we would return -ENXIO for HST_STS_DEVERR,
> as we already do in ali1563_transaction()?

I thought we'd agreed to not play guessing games about the behavior
of chips we don't have docs for ... ;)

 
> > --- g26.orig/drivers/i2c/busses/i2c-viapro.c	2008-05-11 17:55:01.000000000 -0700
> > +++ g26/drivers/i2c/busses/i2c-viapro.c	2008-05-11 17:55:08.000000000 -0700
> > @@ -152,7 +152,7 @@ static int vt596_transaction(u8 size)
> > (...)
> >  	if (temp & 0x04) {
> >  		int read = inb_p(SMBHSTADD) & 0x01;
> > -		result = -1;
> > +		result = -EIO;
> >  		/* The quick and receive byte commands are used to probe
> >  		   for chips, so errors are expected, and we don't want
> >  		   to frighten the user. */
> >  		if (!((size == VT596_QUICK && !read) ||
> >  		      (size == VT596_BYTE && read)))
> >  			dev_err(&vt596_adapter.dev, "Transaction error!\n");
> > +		else
> > +			result = -ENXIO;
> >  	}
> 
> This is not correct, the result is always -ENXIO, whether you display
> an error message or not.

Fixed.


> All the rest looks fine now. BTW, I can test i2c-piix4, i2c-i801,
> i2c-viapro and i2c-nforce2 here, and will do soon.

Appended is a small fixup patch addressing the issues above ...

- Dave


--- g26.orig/drivers/i2c/busses/i2c-ali1563.c	2008-05-17 17:53:24.000000000 -0700
+++ g26/drivers/i2c/busses/i2c-ali1563.c	2008-05-17 17:48:01.000000000 -0700
@@ -105,14 +105,6 @@ static int ali1563_transaction(struct i2
 		data = inb_p(SMB_HST_STS);
  	}
 
-	/* device error - no response, ignore the autodetection case */
-	if (data & HST_STS_DEVERR) {
-		if (size != HST_CNTL2_QUICK)
-			dev_err(&a->dev, "Device error!\n");
-		else
-			return -ENXIO;
-	}
-
 	/* bus collision */
 	if (data & HST_STS_BUSERR) {
 		dev_err(&a->dev, "Bus collision!\n");
@@ -125,6 +117,13 @@ static int ali1563_transaction(struct i2
 		outb_p(0x0,SMB_HST_CNTL2);
 	}
 
+	/* device error - no response, ignore the autodetection case */
+	if (data & HST_STS_DEVERR) {
+		if (size != HST_CNTL2_QUICK)
+			dev_err(&a->dev, "Device error!\n");
+		return -ENXIO;
+	}
+
 	return -EIO;
 }
 
@@ -173,7 +172,7 @@ static int ali1563_block_start(struct i2
 		status = -ETIMEDOUT;
 
 	dev_err(&a->dev, "SMBus Error: %s%s%s%s%s\n",
-		timeout ? "Timeout " : "",
+		timeout ? "" : "Timeout ",
 		data & HST_STS_FAIL ? "Transaction Failed " : "",
 		data & HST_STS_BUSERR ? "No response or Bus Collision " : "",
 		data & HST_STS_DEVERR ? "Device Error " : "",
--- g26.orig/drivers/i2c/busses/i2c-viapro.c	2008-05-17 17:53:24.000000000 -0700
+++ g26/drivers/i2c/busses/i2c-viapro.c	2008-05-17 17:45:52.000000000 -0700
@@ -184,15 +184,14 @@ static int vt596_transaction(u8 size)
 
 	if (temp & 0x04) {
 		int read = inb_p(SMBHSTADD) & 0x01;
-		result = -EIO;
+
 		/* The quick and receive byte commands are used to probe
 		   for chips, so errors are expected, and we don't want
 		   to frighten the user. */
 		if (!((size == VT596_QUICK && !read) ||
 		      (size == VT596_BYTE && read)))
 			dev_err(&vt596_adapter.dev, "Transaction error!\n");
-		else
-			result = -ENXIO;
+		result = -ENXIO;
 	}
 
 	/* Resetting status register */

_______________________________________________
i2c mailing list
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
http://lists.lm-sensors.org/mailman/listinfo/i2c

  parent reply	other threads:[~2008-05-18  0:54 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-05-02  3:46 [patch 2.6.25-git] i2c_adapters: return -Errno not -1 David Brownell
     [not found] ` <200805012046.07885.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-10 18:18   ` Jean Delvare
     [not found]     ` <20080510201825.489198d2-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-05-11  7:32       ` David Brownell
2008-05-12 16:48       ` David Brownell
     [not found]         ` <200805120948.23842.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-14 12:17           ` Jean Delvare
     [not found]             ` <20080514141738.327be680-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-05-14 14:48               ` David Brownell
2008-05-14 14:50               ` David Brownell
     [not found]                 ` <200805140750.49365.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-15 18:33                   ` Jean Delvare
2008-05-10 20:55   ` Jean Delvare
     [not found]     ` <20080510225548.36297637-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-05-11  8:17       ` David Brownell
     [not found]         ` <200805110117.23023.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-11 10:26           ` Jean Delvare
     [not found]             ` <20080511122647.1e04c9c0-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-05-11 16:23               ` David Brownell
     [not found]                 ` <200805110923.44693.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-12 14:05                   ` Jean Delvare
     [not found]                     ` <20080512160537.13e7739a-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-05-12 16:44                       ` David Brownell
2008-05-11 17:13       ` David Brownell
     [not found]         ` <200805111013.25440.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-12 13:05           ` Jean Delvare
     [not found]             ` <20080512150512.1837e3e7-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-05-12 16:25               ` David Brownell
     [not found]                 ` <200805120925.33533.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-12 16:54                   ` Jean Delvare
     [not found]                     ` <20080512185439.1a9cf3c1-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-05-12 17:08                       ` David Brownell
2008-05-11 17:16       ` David Brownell
2008-05-12 16:43       ` David Brownell
     [not found]         ` <200805120943.04899.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-15 17:16           ` Jean Delvare
     [not found]             ` <20080515191631.7791346c-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-05-18  0:54               ` David Brownell [this message]
     [not found]                 ` <200805171754.15976.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-18  7:06                   ` Jean Delvare

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200805171754.15976.david-b@pacbell.net \
    --to=david-b-ybekhbn/0ldr7s880joybq@public.gmane.org \
    --cc=i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org \
    --cc=khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox