diff options
Diffstat (limited to 'drivers/input/input-polldev.c')
-rw-r--r-- | drivers/input/input-polldev.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/drivers/input/input-polldev.c b/drivers/input/input-polldev.c index 92b359894e81..490918a5d192 100644 --- a/drivers/input/input-polldev.c +++ b/drivers/input/input-polldev.c | |||
@@ -60,17 +60,21 @@ static void input_polled_device_work(struct work_struct *work) | |||
60 | { | 60 | { |
61 | struct input_polled_dev *dev = | 61 | struct input_polled_dev *dev = |
62 | container_of(work, struct input_polled_dev, work.work); | 62 | container_of(work, struct input_polled_dev, work.work); |
63 | unsigned long delay; | ||
63 | 64 | ||
64 | dev->poll(dev); | 65 | dev->poll(dev); |
65 | queue_delayed_work(polldev_wq, &dev->work, | 66 | |
66 | msecs_to_jiffies(dev->poll_interval)); | 67 | delay = msecs_to_jiffies(dev->poll_interval); |
68 | if (delay >= HZ) | ||
69 | delay = round_jiffies_relative(delay); | ||
70 | |||
71 | queue_delayed_work(polldev_wq, &dev->work, delay); | ||
67 | } | 72 | } |
68 | 73 | ||
69 | static int input_open_polled_device(struct input_dev *input) | 74 | static int input_open_polled_device(struct input_dev *input) |
70 | { | 75 | { |
71 | struct input_polled_dev *dev = input->private; | 76 | struct input_polled_dev *dev = input->private; |
72 | int error; | 77 | int error; |
73 | unsigned long ticks; | ||
74 | 78 | ||
75 | error = input_polldev_start_workqueue(); | 79 | error = input_polldev_start_workqueue(); |
76 | if (error) | 80 | if (error) |
@@ -79,10 +83,8 @@ static int input_open_polled_device(struct input_dev *input) | |||
79 | if (dev->flush) | 83 | if (dev->flush) |
80 | dev->flush(dev); | 84 | dev->flush(dev); |
81 | 85 | ||
82 | ticks = msecs_to_jiffies(dev->poll_interval); | 86 | queue_delayed_work(polldev_wq, &dev->work, |
83 | if (ticks >= HZ) | 87 | msecs_to_jiffies(dev->poll_interval)); |
84 | ticks = round_jiffies(ticks); | ||
85 | queue_delayed_work(polldev_wq, &dev->work, ticks); | ||
86 | 88 | ||
87 | return 0; | 89 | return 0; |
88 | } | 90 | } |
@@ -91,7 +93,7 @@ static void input_close_polled_device(struct input_dev *input) | |||
91 | { | 93 | { |
92 | struct input_polled_dev *dev = input->private; | 94 | struct input_polled_dev *dev = input->private; |
93 | 95 | ||
94 | cancel_rearming_delayed_workqueue(polldev_wq, &dev->work); | 96 | cancel_delayed_work_sync(&dev->work); |
95 | input_polldev_stop_workqueue(); | 97 | input_polldev_stop_workqueue(); |
96 | } | 98 | } |
97 | 99 | ||