msleep(1~20) may not do what the caller intends, and will often sleep longer.
(~20 ms actual sleep for any value given in the 1~20ms range)
This is not the desired behaviour for many cases like device resume time,
device suspend time, device enable time, data reading time, etc.
Thus, change msleep to usleep_range for precise wakeups.

Signed-off-by: Aniroop Mathur <[email protected]>
---
 joystick/adi.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/joystick/adi.c b/joystick/adi.c
index d09cefa..6799bd9 100644
--- a/joystick/adi.c
+++ b/joystick/adi.c
@@ -47,8 +47,8 @@ MODULE_LICENSE("GPL");
 
 #define ADI_MAX_START          200     /* Trigger to packet timeout [200us] */
 #define ADI_MAX_STROBE         40      /* Single bit timeout [40us] */
-#define ADI_INIT_DELAY         10      /* Delay after init packet [10ms] */
-#define ADI_DATA_DELAY         4       /* Delay after data packet [4ms] */
+#define ADI_INIT_DELAY         10000   /* Delay after init packet [10ms] */
+#define ADI_DATA_DELAY         4000    /* Delay after data packet [4000us] */
 
 #define ADI_MAX_LENGTH         256
 #define ADI_MIN_LENGTH         8
@@ -319,7 +319,7 @@ static void adi_init_digital(struct gameport *gameport)
        for (i = 0; seq[i]; i++) {
                gameport_trigger(gameport);
                if (seq[i] > 0)
-                       msleep(seq[i]);
+                       usleep_range(seq[i] * 1000, (seq[i] * 1000) + 100);
                if (seq[i] < 0) {
                        mdelay(-seq[i]);
                        udelay(-seq[i]*14);     /* It looks like mdelay() is 
off by approx 1.4% */
@@ -512,9 +512,9 @@ static int adi_connect(struct gameport *gameport, struct 
gameport_driver *drv)
        gameport_set_poll_handler(gameport, adi_poll);
        gameport_set_poll_interval(gameport, 20);
 
-       msleep(ADI_INIT_DELAY);
+       usleep_range(ADI_INIT_DELAY, ADI_INIT_DELAY + 100);
        if (adi_read(port)) {
-               msleep(ADI_DATA_DELAY);
+               usleep_range(ADI_DATA_DELAY, ADI_DATA_DELAY + 100);
                adi_read(port);
        }
 
-- 
2.6.4.windows.1

Reply via email to