diff options
author | Olof Johansson <olof@lixom.net> | 2007-11-15 13:24:02 -0500 |
---|---|---|
committer | Jean Delvare <khali@hyperion.delvare> | 2007-11-15 13:24:02 -0500 |
commit | be8a1f7cd4501c3b4b32543577a33aee6d2193ac (patch) | |
tree | 8864cd2b79f5be9f6aad72288755983cde80bc56 /drivers/i2c/busses/i2c-pasemi.c | |
parent | ff23f3eabbaa4fc398e0ce109a8688db29d95d78 (diff) |
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>
Diffstat (limited to 'drivers/i2c/busses/i2c-pasemi.c')
-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 79c72dfa63b7..ca18e0be4901 100644 --- a/drivers/i2c/busses/i2c-pasemi.c +++ b/drivers/i2c/busses/i2c-pasemi.c | |||
@@ -51,6 +51,7 @@ struct pasemi_smbus { | |||
51 | #define MRXFIFO_DATA_M 0x000000ff | 51 | #define MRXFIFO_DATA_M 0x000000ff |
52 | 52 | ||
53 | #define SMSTA_XEN 0x08000000 | 53 | #define SMSTA_XEN 0x08000000 |
54 | #define SMSTA_MTN 0x00200000 | ||
54 | 55 | ||
55 | #define CTL_MRR 0x00000400 | 56 | #define CTL_MRR 0x00000400 |
56 | #define CTL_MTR 0x00000200 | 57 | #define CTL_MTR 0x00000200 |
@@ -98,6 +99,10 @@ static unsigned int pasemi_smb_waitready(struct pasemi_smbus *smbus) | |||
98 | status = reg_read(smbus, REG_SMSTA); | 99 | status = reg_read(smbus, REG_SMSTA); |
99 | } | 100 | } |
100 | 101 | ||
102 | /* Got NACK? */ | ||
103 | if (status & SMSTA_MTN) | ||
104 | return -ENXIO; | ||
105 | |||
101 | if (timeout < 0) { | 106 | if (timeout < 0) { |
102 | dev_warn(&smbus->dev->dev, "Timeout, status 0x%08x\n", status); | 107 | dev_warn(&smbus->dev->dev, "Timeout, status 0x%08x\n", status); |
103 | reg_write(smbus, REG_SMSTA, status); | 108 | reg_write(smbus, REG_SMSTA, status); |