diff options
author | Paul Fox <pgf@laptop.org> | 2008-12-20 03:58:11 -0500 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2008-12-20 04:58:03 -0500 |
commit | 8bbf2703c4f676e6e5414672dd460f7d2f979ed5 (patch) | |
tree | faa158808de89534f8f368aebb852ce6f6e75695 /drivers/input/mouse/hgpk.c | |
parent | a6f66ddf7a8b34bb28e4d1c47531b61c671eac9b (diff) |
Input: psmouse - add module parameters to control OLPC touchpad delays
The HPGK touchpad that is found on the XO driver has historically
exhibitted eratic behaviour in various environments (very dry,
very humid, etc) that can be worked around via some delays. This
patch turns those delays into module parameters to make testing
simpler.
Signed-off-by: Paul Fox <pgf@laptop.org>
Signed-off-by: Deepak Saxena <dsaxena@laptop.org>
Acked-By: Andres Salomon <dilinger@debian.org>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Diffstat (limited to 'drivers/input/mouse/hgpk.c')
-rw-r--r-- | drivers/input/mouse/hgpk.c | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/drivers/input/mouse/hgpk.c b/drivers/input/mouse/hgpk.c index 88f04bf2ad6c..81e6ebf323e9 100644 --- a/drivers/input/mouse/hgpk.c +++ b/drivers/input/mouse/hgpk.c | |||
@@ -48,6 +48,30 @@ module_param(recalib_delta, int, 0644); | |||
48 | MODULE_PARM_DESC(recalib_delta, | 48 | MODULE_PARM_DESC(recalib_delta, |
49 | "packets containing a delta this large will cause a recalibration."); | 49 | "packets containing a delta this large will cause a recalibration."); |
50 | 50 | ||
51 | static int jumpy_delay = 1000; | ||
52 | module_param(jumpy_delay, int, 0644); | ||
53 | MODULE_PARM_DESC(jumpy_delay, | ||
54 | "delay (ms) before recal after jumpiness detected"); | ||
55 | |||
56 | static int spew_delay = 1000; | ||
57 | module_param(spew_delay, int, 0644); | ||
58 | MODULE_PARM_DESC(spew_delay, | ||
59 | "delay (ms) before recal after packet spew detected"); | ||
60 | |||
61 | static int recal_guard_time = 2000; | ||
62 | module_param(recal_guard_time, int, 0644); | ||
63 | MODULE_PARM_DESC(recal_guard_time, | ||
64 | "interval (ms) during which recal will be restarted if packet received"); | ||
65 | |||
66 | static int post_interrupt_delay = 1000; | ||
67 | module_param(post_interrupt_delay, int, 0644); | ||
68 | MODULE_PARM_DESC(post_interrupt_delay, | ||
69 | "delay (ms) before recal after recal interrupt detected"); | ||
70 | |||
71 | static int autorecal = 1; | ||
72 | module_param(autorecal, int, 0644); | ||
73 | MODULE_PARM_DESC(autorecal, "enable recalibration in the driver"); | ||
74 | |||
51 | /* | 75 | /* |
52 | * When the touchpad gets ultra-sensitive, one can keep their finger 1/2" | 76 | * When the touchpad gets ultra-sensitive, one can keep their finger 1/2" |
53 | * above the pad and still have it send packets. This causes a jump cursor | 77 | * above the pad and still have it send packets. This causes a jump cursor |
@@ -66,7 +90,7 @@ static void hgpk_jumpy_hack(struct psmouse *psmouse, int x, int y) | |||
66 | /* My car gets forty rods to the hogshead and that's the | 90 | /* My car gets forty rods to the hogshead and that's the |
67 | * way I likes it! */ | 91 | * way I likes it! */ |
68 | psmouse_queue_work(psmouse, &priv->recalib_wq, | 92 | psmouse_queue_work(psmouse, &priv->recalib_wq, |
69 | msecs_to_jiffies(1000)); | 93 | msecs_to_jiffies(jumpy_delay)); |
70 | } | 94 | } |
71 | } | 95 | } |
72 | 96 | ||
@@ -103,7 +127,7 @@ static void hgpk_spewing_hack(struct psmouse *psmouse, | |||
103 | hgpk_dbg(psmouse, "packet spew detected (%d,%d)\n", | 127 | hgpk_dbg(psmouse, "packet spew detected (%d,%d)\n", |
104 | priv->x_tally, priv->y_tally); | 128 | priv->x_tally, priv->y_tally); |
105 | psmouse_queue_work(psmouse, &priv->recalib_wq, | 129 | psmouse_queue_work(psmouse, &priv->recalib_wq, |
106 | msecs_to_jiffies(1000)); | 130 | msecs_to_jiffies(spew_delay)); |
107 | } | 131 | } |
108 | /* reset every 100 packets */ | 132 | /* reset every 100 packets */ |
109 | priv->count = 0; | 133 | priv->count = 0; |
@@ -181,7 +205,7 @@ static psmouse_ret_t hgpk_process_byte(struct psmouse *psmouse) | |||
181 | "packet inside calibration window, " | 205 | "packet inside calibration window, " |
182 | "queueing another recalibration\n"); | 206 | "queueing another recalibration\n"); |
183 | psmouse_queue_work(psmouse, &priv->recalib_wq, | 207 | psmouse_queue_work(psmouse, &priv->recalib_wq, |
184 | msecs_to_jiffies(1000)); | 208 | msecs_to_jiffies(post_interrupt_delay)); |
185 | } | 209 | } |
186 | priv->recalib_window = 0; | 210 | priv->recalib_window = 0; |
187 | } | 211 | } |
@@ -231,7 +255,7 @@ static int hgpk_force_recalibrate(struct psmouse *psmouse) | |||
231 | * If someone's finger *was* on the touchpad, it's probably | 255 | * If someone's finger *was* on the touchpad, it's probably |
232 | * miscalibrated. So, we should schedule another recalibration | 256 | * miscalibrated. So, we should schedule another recalibration |
233 | */ | 257 | */ |
234 | priv->recalib_window = jiffies + msecs_to_jiffies(2000); | 258 | priv->recalib_window = jiffies + msecs_to_jiffies(recal_guard_time); |
235 | 259 | ||
236 | return 0; | 260 | return 0; |
237 | } | 261 | } |