diff options
author | Olof Johansson <olof@lixom.net> | 2007-11-15 19:24:02 +0100 |
---|---|---|
committer | Jean Delvare <khali@hyperion.delvare> | 2007-11-15 19:24:02 +0100 |
commit | be8a1f7cd4501c3b4b32543577a33aee6d2193ac (patch) | |
tree | 8864cd2b79f5be9f6aad72288755983cde80bc56 | |
parent | ff23f3eabbaa4fc398e0ce109a8688db29d95d78 (diff) | |
download | op-kernel-dev-be8a1f7cd4501c3b4b32543577a33aee6d2193ac.zip op-kernel-dev-be8a1f7cd4501c3b4b32543577a33aee6d2193ac.tar.gz |
i2c-pasemi: Fix NACK detection
Turns out we don't actually check the status to see if there was a
device out there to talk to, just if we had a timeout when doing so.
Add the proper check, so we don't falsly think there are devices
on the bus that are not there, etc.
Signed-off-by: Olof Johansson <olof@lixom.net>
Signed-off-by: Jean Delvare <khali@linux-fr.org>
-rw-r--r-- | drivers/i2c/busses/i2c-pasemi.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/i2c/busses/i2c-pasemi.c b/drivers/i2c/busses/i2c-pasemi.c index 79c72dfa..ca18e0b 100644 --- a/drivers/i2c/busses/i2c-pasemi.c +++ b/drivers/i2c/busses/i2c-pasemi.c @@ -51,6 +51,7 @@ struct pasemi_smbus { #define MRXFIFO_DATA_M 0x000000ff #define SMSTA_XEN 0x08000000 +#define SMSTA_MTN 0x00200000 #define CTL_MRR 0x00000400 #define CTL_MTR 0x00000200 @@ -98,6 +99,10 @@ static unsigned int pasemi_smb_waitready(struct pasemi_smbus *smbus) status = reg_read(smbus, REG_SMSTA); } + /* Got NACK? */ + if (status & SMSTA_MTN) + return -ENXIO; + if (timeout < 0) { dev_warn(&smbus->dev->dev, "Timeout, status 0x%08x\n", status); reg_write(smbus, REG_SMSTA, status); |