i2c-dev: Clarify the unit of ioctl I2C_TIMEOUT
authorJean Delvare <khali@linux-fr.org>
Tue, 24 Feb 2009 18:19:49 +0000 (19:19 +0100)
committerJean Delvare <khali@linux-fr.org>
Tue, 24 Feb 2009 18:19:49 +0000 (19:19 +0100)
The unit in which user-space can set the bus timeout value is jiffies
for historical reasons (back when HZ was always 100.) This is however
not good because user-space doesn't know how long a jiffy lasts. The
timeout value should instead be set in a fixed time unit. Given the
original value of HZ, this unit should be 10 ms, for compatibility.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
Acked-by: Wolfram Sang <w.sang@pengutronix.de>
drivers/i2c/i2c-dev.c
include/linux/i2c-dev.h
include/linux/i2c.h

index c171988a9f517d7009319674265c47a10859a8c3..7e13d2df9af384f0b048faa36c427171dab30fa0 100644 (file)
@@ -35,6 +35,7 @@
 #include <linux/i2c.h>
 #include <linux/i2c-dev.h>
 #include <linux/smp_lock.h>
+#include <linux/jiffies.h>
 #include <asm/uaccess.h>
 
 static struct i2c_driver i2cdev_driver;
@@ -422,7 +423,10 @@ static long i2cdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                client->adapter->retries = arg;
                break;
        case I2C_TIMEOUT:
-               client->adapter->timeout = arg;
+               /* For historical reasons, user-space sets the timeout
+                * value in units of 10 ms.
+                */
+               client->adapter->timeout = msecs_to_jiffies(arg * 10);
                break;
        default:
                /* NOTE:  returning a fault code here could cause trouble
index 311315b56b611a7b2b9d44a2b930eb8c3b9b8def..fd53bfd2647044be7d48d26adc4de31b6c5d238e 100644 (file)
@@ -33,7 +33,7 @@
  */
 #define I2C_RETRIES    0x0701  /* number of times a device address should
                                   be polled when not acknowledging */
-#define I2C_TIMEOUT    0x0702  /* set timeout in jiffies - call with int */
+#define I2C_TIMEOUT    0x0702  /* set timeout in units of 10 ms */
 
 /* NOTE: Slave address is 7 or 10 bits, but 10-bit addresses
  * are NOT supported! (due to code brokenness)
index fcfbfea3af72d670d7100ca221014c7dece36363..c86c3b07604c2cf46cd492ef948e826f2d9c58d0 100644 (file)
@@ -361,7 +361,7 @@ struct i2c_adapter {
        struct mutex bus_lock;
        struct mutex clist_lock;
 
-       int timeout;
+       int timeout;                    /* in jiffies */
        int retries;
        struct device dev;              /* the adapter device */