Skip to content

Commit

Permalink
Input: wriston - reduce polling frequency
Browse files Browse the repository at this point in the history
Reduces the polling frequency from 10 Hz to 2 Hz, which should be less a burden
for laptops wrt energy saving. As it is multimedia keys, 500ms (maximum) of
latency should be still fine for the user. In order to keep fluent the feeling
when the user is pressing several keys in a raw (such as changing the volume),
the frequency is increased for a short duration after a key is pressed.

Signed-off-by: Eric Piel <[email protected]>
Signed-off-by: Dmitry Torokhov <[email protected]>
  • Loading branch information
pieleric authored and Dmitry Torokhov committed Jul 10, 2007
1 parent 5035522 commit a4da16d
Showing 1 changed file with 14 additions and 4 deletions.
18 changes: 14 additions & 4 deletions drivers/input/misc/wistron_btns.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include <linux/init.h>
#include <linux/input.h>
#include <linux/interrupt.h>
#include <linux/jiffies.h>
#include <linux/kernel.h>
#include <linux/mc146818rtc.h>
#include <linux/module.h>
Expand All @@ -37,9 +38,10 @@
*/
#define MAX_POLL_ITERATIONS 64

#define POLL_FREQUENCY 10 /* Number of polls per second */
#define POLL_FREQUENCY 2 /* Number of polls per second when idle */
#define POLL_FREQUENCY_BURST 10 /* Polls per second when a key was recently pressed */

#if POLL_FREQUENCY > HZ
#if POLL_FREQUENCY_BURST > HZ
#error "POLL_FREQUENCY too high"
#endif

Expand Down Expand Up @@ -1079,6 +1081,8 @@ static void handle_key(u8 code)

static void poll_bios(unsigned long discard)
{
static unsigned long jiffies_last_press;
unsigned long jiffies_now = jiffies;
u8 qlen;
u16 val;

Expand All @@ -1087,11 +1091,17 @@ static void poll_bios(unsigned long discard)
if (qlen == 0)
break;
val = bios_pop_queue();
if (val != 0 && !discard)
if (val != 0 && !discard) {
handle_key((u8)val);
jiffies_last_press = jiffies_now;
}
}

mod_timer(&poll_timer, jiffies + HZ / POLL_FREQUENCY);
/* Increase precision if user is currently pressing keys (< 2s ago) */
if (time_after(jiffies_last_press, jiffies_now - (HZ * 2)))
mod_timer(&poll_timer, jiffies_now + HZ / POLL_FREQUENCY_BURST);
else
mod_timer(&poll_timer, jiffies_now + HZ / POLL_FREQUENCY);
}

static int __devinit wistron_probe(struct platform_device *dev)
Expand Down

0 comments on commit a4da16d

Please sign in to comment.