diff options
-rw-r--r-- | drivers/sbus/char/vfc_i2c.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/sbus/char/vfc_i2c.c b/drivers/sbus/char/vfc_i2c.c index 95e3cebf792c..1faf1e75f71f 100644 --- a/drivers/sbus/char/vfc_i2c.c +++ b/drivers/sbus/char/vfc_i2c.c | |||
@@ -88,14 +88,16 @@ void vfc_i2c_delay_wakeup(struct vfc_dev *dev) | |||
88 | 88 | ||
89 | void vfc_i2c_delay_no_busy(struct vfc_dev *dev, unsigned long usecs) | 89 | void vfc_i2c_delay_no_busy(struct vfc_dev *dev, unsigned long usecs) |
90 | { | 90 | { |
91 | DEFINE_WAIT(wait); | ||
91 | init_timer(&dev->poll_timer); | 92 | init_timer(&dev->poll_timer); |
92 | dev->poll_timer.expires = jiffies + | 93 | dev->poll_timer.expires = jiffies + usecs_to_jiffies(usecs); |
93 | ((unsigned long)usecs*(HZ))/1000000; | ||
94 | dev->poll_timer.data=(unsigned long)dev; | 94 | dev->poll_timer.data=(unsigned long)dev; |
95 | dev->poll_timer.function=(void *)(unsigned long)vfc_i2c_delay_wakeup; | 95 | dev->poll_timer.function=(void *)(unsigned long)vfc_i2c_delay_wakeup; |
96 | add_timer(&dev->poll_timer); | 96 | add_timer(&dev->poll_timer); |
97 | sleep_on(&dev->poll_wait); | 97 | prepare_to_wait(&dev->poll_wait, &wait, TASK_UNINTERRUPTIBLE); |
98 | schedule(); | ||
98 | del_timer(&dev->poll_timer); | 99 | del_timer(&dev->poll_timer); |
100 | finish_wait(&dev->poll_wait, &wait); | ||
99 | } | 101 | } |
100 | 102 | ||
101 | void inline vfc_i2c_delay(struct vfc_dev *dev) | 103 | void inline vfc_i2c_delay(struct vfc_dev *dev) |