For slow running polling, it saves power to align wakeups on tick boundary.
Signed-off-by: Stephen Hemminger <[EMAIL PROTECTED]> --- a/drivers/input/input-polldev.c 2007-06-22 03:36:04.000000000 +0200 +++ b/drivers/input/input-polldev.c 2007-09-12 13:18:59.000000000 +0200 @@ -70,6 +70,7 @@ static int input_open_polled_device(stru { 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(stru 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; }