i2c-isch: Decrease delay in command completion check loop

Generally it is not needed to wait for 1 msec, the SMBus get often ready
in less than 200 usecs.

msleep(1) can wait up to 20 msecs... It has a significant impact when
there is a burst of transactions on the bus.

Signed-off-by: Olivier Sobrie <olivier@sobrie.be>
Signed-off-by: Jean Delvare <khali@linux-fr.org>
This commit is contained in:
Olivier Sobrie 2012-03-26 21:47:18 +02:00 committed by Jean Delvare
parent c54c35572a
commit b3240e68c0

View File

@ -47,7 +47,7 @@
#define SMBBLKDAT (0x20 + sch_smba) #define SMBBLKDAT (0x20 + sch_smba)
/* Other settings */ /* Other settings */
#define MAX_TIMEOUT 500 #define MAX_RETRIES 5000
/* I2C constants */ /* I2C constants */
#define SCH_QUICK 0x00 #define SCH_QUICK 0x00
@ -68,7 +68,7 @@ static int sch_transaction(void)
{ {
int temp; int temp;
int result = 0; int result = 0;
int timeout = 0; int retries = 0;
dev_dbg(&sch_adapter.dev, "Transaction (pre): CNT=%02x, CMD=%02x, " dev_dbg(&sch_adapter.dev, "Transaction (pre): CNT=%02x, CMD=%02x, "
"ADD=%02x, DAT0=%02x, DAT1=%02x\n", inb(SMBHSTCNT), "ADD=%02x, DAT0=%02x, DAT1=%02x\n", inb(SMBHSTCNT),
@ -100,12 +100,12 @@ static int sch_transaction(void)
outb(inb(SMBHSTCNT) | 0x10, SMBHSTCNT); outb(inb(SMBHSTCNT) | 0x10, SMBHSTCNT);
do { do {
msleep(1); usleep_range(100, 200);
temp = inb(SMBHSTSTS) & 0x0f; temp = inb(SMBHSTSTS) & 0x0f;
} while ((temp & 0x08) && (timeout++ < MAX_TIMEOUT)); } while ((temp & 0x08) && (retries++ < MAX_RETRIES));
/* If the SMBus is still busy, we give up */ /* If the SMBus is still busy, we give up */
if (timeout > MAX_TIMEOUT) { if (retries > MAX_RETRIES) {
dev_err(&sch_adapter.dev, "SMBus Timeout!\n"); dev_err(&sch_adapter.dev, "SMBus Timeout!\n");
result = -ETIMEDOUT; result = -ETIMEDOUT;
} }