diff options
author | Stephen Hemminger <shemminger@linux-foundation.org> | 2007-09-26 00:01:25 -0400 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2007-09-26 00:01:25 -0400 |
commit | 14134b31ae646220a5a451e38aae1dd023d457cb (patch) | |
tree | 44bf08a1793b372bf27091098167ea0f53c43b43 /drivers/input | |
parent | e15b02138b89d7bc053817e6f7601e92e29d371c (diff) | |
download | op-kernel-dev-14134b31ae646220a5a451e38aae1dd023d457cb.zip op-kernel-dev-14134b31ae646220a5a451e38aae1dd023d457cb.tar.gz |
Input: polled device power saving
For slow running polling, it saves power to align wakeups on tick boundary.
Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Diffstat (limited to 'drivers/input')
-rw-r--r-- | drivers/input/input-polldev.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/input/input-polldev.c b/drivers/input/input-polldev.c index b773d4c..92b3598 100644 --- a/drivers/input/input-polldev.c +++ b/drivers/input/input-polldev.c @@ -70,6 +70,7 @@ static int input_open_polled_device(struct input_dev *input) { struct input_polled_dev *dev = input->private; int error; + unsigned long ticks; error = input_polldev_start_workqueue(); if (error) @@ -78,8 +79,10 @@ static int input_open_polled_device(struct input_dev *input) if (dev->flush) dev->flush(dev); - queue_delayed_work(polldev_wq, &dev->work, - msecs_to_jiffies(dev->poll_interval)); + ticks = msecs_to_jiffies(dev->poll_interval); + if (ticks >= HZ) + ticks = round_jiffies(ticks); + queue_delayed_work(polldev_wq, &dev->work, ticks); return 0; } |