Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a4da16d3838669d7fb096ea5d1e4917e5ca4dc16
Commit:     a4da16d3838669d7fb096ea5d1e4917e5ca4dc16
Parent:     5035522d1a6b55f95e7e01c209b57f5d89f88b16
Author:     Eric Piel <[EMAIL PROTECTED]>
AuthorDate: Mon May 21 00:46:22 2007 -0400
Committer:  Dmitry Torokhov <[EMAIL PROTECTED]>
CommitDate: Tue Jul 10 00:35:17 2007 -0400

    Input: wriston - reduce polling frequency
    
    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]>
---
 drivers/input/misc/wistron_btns.c |   18 ++++++++++++++----
 1 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/drivers/input/misc/wistron_btns.c 
b/drivers/input/misc/wistron_btns.c
index 961aad7..320262a 100644
--- a/drivers/input/misc/wistron_btns.c
+++ b/drivers/input/misc/wistron_btns.c
@@ -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>
@@ -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
 
@@ -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;
 
@@ -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)
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to