diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/i2c/busses/i2c-viapro.c | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/drivers/i2c/busses/i2c-viapro.c b/drivers/i2c/busses/i2c-viapro.c index c9366b504833..a2237d4b2cf2 100644 --- a/drivers/i2c/busses/i2c-viapro.c +++ b/drivers/i2c/busses/i2c-viapro.c | |||
@@ -142,19 +142,18 @@ static int vt596_transaction(u8 size) | |||
142 | /* Make sure the SMBus host is ready to start transmitting */ | 142 | /* Make sure the SMBus host is ready to start transmitting */ |
143 | if ((temp = inb_p(SMBHSTSTS)) & 0x1F) { | 143 | if ((temp = inb_p(SMBHSTSTS)) & 0x1F) { |
144 | dev_dbg(&vt596_adapter.dev, "SMBus busy (0x%02x). " | 144 | dev_dbg(&vt596_adapter.dev, "SMBus busy (0x%02x). " |
145 | "Resetting... ", temp); | 145 | "Resetting...\n", temp); |
146 | 146 | ||
147 | outb_p(temp, SMBHSTSTS); | 147 | outb_p(temp, SMBHSTSTS); |
148 | if ((temp = inb_p(SMBHSTSTS)) & 0x1F) { | 148 | if ((temp = inb_p(SMBHSTSTS)) & 0x1F) { |
149 | printk("Failed! (0x%02x)\n", temp); | 149 | dev_err(&vt596_adapter.dev, "SMBus reset failed! " |
150 | "(0x%02x)\n", temp); | ||
150 | return -1; | 151 | return -1; |
151 | } else { | ||
152 | printk("Successful!\n"); | ||
153 | } | 152 | } |
154 | } | 153 | } |
155 | 154 | ||
156 | /* Start the transaction by setting bit 6 */ | 155 | /* Start the transaction by setting bit 6 */ |
157 | outb_p(0x40 | (size & 0x3C), SMBHSTCNT); | 156 | outb_p(0x40 | size, SMBHSTCNT); |
158 | 157 | ||
159 | /* We will always wait for a fraction of a second */ | 158 | /* We will always wait for a fraction of a second */ |
160 | do { | 159 | do { |
@@ -171,7 +170,7 @@ static int vt596_transaction(u8 size) | |||
171 | if (temp & 0x10) { | 170 | if (temp & 0x10) { |
172 | result = -1; | 171 | result = -1; |
173 | dev_err(&vt596_adapter.dev, "Transaction failed (0x%02x)\n", | 172 | dev_err(&vt596_adapter.dev, "Transaction failed (0x%02x)\n", |
174 | inb_p(SMBHSTCNT) & 0x3C); | 173 | size); |
175 | } | 174 | } |
176 | 175 | ||
177 | if (temp & 0x08) { | 176 | if (temp & 0x08) { |
@@ -180,11 +179,13 @@ static int vt596_transaction(u8 size) | |||
180 | } | 179 | } |
181 | 180 | ||
182 | if (temp & 0x04) { | 181 | if (temp & 0x04) { |
182 | int read = inb_p(SMBHSTADD) & 0x01; | ||
183 | result = -1; | 183 | result = -1; |
184 | /* Quick commands are used to probe for chips, so | 184 | /* The quick and receive byte commands are used to probe |
185 | errors are expected, and we don't want to frighten the | 185 | for chips, so errors are expected, and we don't want |
186 | user. */ | 186 | to frighten the user. */ |
187 | if ((inb_p(SMBHSTCNT) & 0x3C) != VT596_QUICK) | 187 | if (!((size == VT596_QUICK && !read) || |
188 | (size == VT596_BYTE && read))) | ||
188 | dev_err(&vt596_adapter.dev, "Transaction error!\n"); | 189 | dev_err(&vt596_adapter.dev, "Transaction error!\n"); |
189 | } | 190 | } |
190 | 191 | ||
@@ -462,9 +463,9 @@ static void __exit i2c_vt596_exit(void) | |||
462 | } | 463 | } |
463 | } | 464 | } |
464 | 465 | ||
465 | MODULE_AUTHOR( | 466 | MODULE_AUTHOR("Kyosti Malkki <kmalkki@cc.hut.fi>, " |
466 | "Frodo Looijaard <frodol@dds.nl> and " | 467 | "Mark D. Studebaker <mdsxyz123@yahoo.com> and " |
467 | "Philip Edelbrock <phil@netroedge.com>"); | 468 | "Jean Delvare <khali@linux-fr.org>"); |
468 | MODULE_DESCRIPTION("vt82c596 SMBus driver"); | 469 | MODULE_DESCRIPTION("vt82c596 SMBus driver"); |
469 | MODULE_LICENSE("GPL"); | 470 | MODULE_LICENSE("GPL"); |
470 | 471 | ||