i2c: piix4: Use usleep_range()
authorGuenter Roeck <linux@roeck-us.net>
Mon, 26 Feb 2018 20:46:52 +0000 (12:46 -0800)
committerWolfram Sang <wsa@the-dreams.de>
Fri, 2 Mar 2018 10:16:52 +0000 (11:16 +0100)
The piix4 i2c driver is extremely slow. Replacing msleep()
with usleep_range() increases its speed substantially.
Use sleep ranges similar to those used in the i2c-801 driver
to keep things simple.

Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Reviewed-by: Jean Delvare <jdelvare@suse.de>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
drivers/i2c/busses/i2c-piix4.c

index 462948e2c5354e64a09fa769eb1519f9d421d629..4c1f6aaec0fc885fc65bdb063e593f46f7b7a53f 100644 (file)
@@ -462,13 +462,13 @@ static int piix4_transaction(struct i2c_adapter *piix4_adapter)
 
        /* We will always wait for a fraction of a second! (See PIIX4 docs errata) */
        if (srvrworks_csb5_delay) /* Extra delay for SERVERWORKS_CSB5 */
-               msleep(2);
+               usleep_range(2000, 2100);
        else
-               msleep(1);
+               usleep_range(250, 500);
 
        while ((++timeout < MAX_TIMEOUT) &&
               ((temp = inb_p(SMBHSTSTS)) & 0x01))
-               msleep(1);
+               usleep_range(250, 500);
 
        /* If the SMBus is still busy, we give up */
        if (timeout == MAX_TIMEOUT) {