All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jean Delvare <khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org>
To: David Brownell <david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
Cc: i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
Subject: Re: [patch 2.6.25-git] i2c_adapters:  return -Errno not -1
Date: Thu, 15 May 2008 19:16:31 +0200	[thread overview]
Message-ID: <20080515191631.7791346c@hyperion.delvare> (raw)
In-Reply-To: <200805120943.04899.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>

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
> @@ -106,8 +106,11 @@ static int ali1563_transaction(struct i2
>   	}
>  
>  	/* device error - no response, ignore the autodetection case */
> -	if ((data & HST_STS_DEVERR) && (size != HST_CNTL2_QUICK)) {
> -		dev_err(&a->dev, "Device error!\n");
> +	if (data & HST_STS_DEVERR) {
> +		if (size != HST_CNTL2_QUICK)
> +			dev_err(&a->dev, "Device error!\n");
> +		else
> +			return -ENXIO;
>  	}

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.

>  
>  	/* bus collision */
> @@ -122,13 +125,14 @@ static int ali1563_transaction(struct i2
>  		outb_p(0x0,SMB_HST_CNTL2);
>  	}
>  
> -	return -1;
> +	return -EIO;
>  }
>  
>  static int ali1563_block_start(struct i2c_adapter * a)
>  {
>  	u32 data;
>  	int timeout;
> +	int status = -EIO;
>  
>  	dev_dbg(&a->dev, "Block (pre): STS=%02x, CNTL1=%02x, "
>  		"CNTL2=%02x, CMD=%02x, ADD=%02x, DAT0=%02x, DAT1=%02x\n",
> @@ -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".

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

>  		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()?

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

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

-- 
Jean Delvare

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

  parent reply	other threads:[~2008-05-15 17:16 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 [this message]
     [not found]             ` <20080515191631.7791346c-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-05-18  0:54               ` David Brownell
     [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=20080515191631.7791346c@hyperion.delvare \
    --to=khali-puyad+kwke1g9huczpvpmw@public.gmane.org \
    --cc=david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org \
    --cc=i2c-GZX6beZjE8VD60Wz+7aTrA@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.