From: Domen Puncer <domen@coderock.org>

Not sure why any driver needs to sleep for *two* ticks, so let's fix it.

Use msleep() instead of schedule_timeout() to guarantee the task delays as
expected.  Signals are never checked for by the callers or in the function
itself, so use TASK_UNINTERRUPTIBLE instead of TASK_INTERRUPTIBLE.  The
delay is presumed to have been written when HZ==100, and thus has been
multiplied by 10 to pass to msleep().

Signed-off-by: Nishanth Aravamudan <nacc@us.ibm.com>
Signed-off-by: Domen Puncer <domen@coderock.org>
Acked-by: Russell King <rmk@arm.linux.org.uk>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/drivers/char/ds1620.c |    3 +--
 1 files changed, 1 insertion(+), 2 deletions(-)

diff -puN drivers/char/ds1620.c~char-ds1620-use-msleep-instead-of-schedule_timeout drivers/char/ds1620.c
--- 25/drivers/char/ds1620.c~char-ds1620-use-msleep-instead-of-schedule_timeout	2005-03-19 13:48:22.000000000 -0800
+++ 25-akpm/drivers/char/ds1620.c	2005-03-19 13:48:22.000000000 -0800
@@ -163,8 +163,7 @@ static void ds1620_out(int cmd, int bits
 	netwinder_ds1620_reset();
 	netwinder_unlock(&flags);
 
-	set_current_state(TASK_INTERRUPTIBLE);
-	schedule_timeout(2);
+	msleep(20);
 }
 
 static unsigned int ds1620_in(int cmd, int bits)
_