aboutsummaryrefslogtreecommitdiff
path: root/drivers/char/keyboard.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@g5.osdl.org>2006-05-01 07:48:38 -0700
committerLinus Torvalds <torvalds@g5.osdl.org>2006-05-01 07:48:38 -0700
commit9f29333dae3488542b1344871e8ecb84084ad80e (patch)
tree01314a20b6155cfbb881a7a797ab003b64b5f434 /drivers/char/keyboard.c
parent494b9aea6d451e1eaab5d52b65951d7dc6e81cb8 (diff)
parent8fdc19486f4d3b0fc5f1c7ce69fe5f7b1c653e62 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
* git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: Input: make EVIOCGSND return meaningful data Input: ressurect EVIOCGREP and EVIOCSREP Input: psmouse - fix new device detection logic Input: move input_device_id to mod_devicetable.h Input: allow using several chords for braille Input: allow passing NULL to input_free_device() Input: spitzkbd - fix the reversed Address and Calender keys Input: ads7846 - improve filtering for thumb press accuracy Input: ads7846 - report 0 pressure value along with pen up event Input: ads7846 - handle IRQs that were latched during disabled IRQs Input: ads7846 - miscellaneous fixes Input: ads7846 - use msleep() instead of udelay() in suspend Input: ads7846 - debouncing and rudimentary sample filtering Input: ads7846 - power down ADC a bit later Input: ads7846 - add pen_down sysfs attribute Input: wistron - add support for Fujitsu N3510 Input: wistron - add signature for Amilo M7400
Diffstat (limited to 'drivers/char/keyboard.c')
-rw-r--r--drivers/char/keyboard.c38
1 files changed, 28 insertions, 10 deletions
diff --git a/drivers/char/keyboard.c b/drivers/char/keyboard.c
index 935670a3cd9..5755b7e5f18 100644
--- a/drivers/char/keyboard.c
+++ b/drivers/char/keyboard.c
@@ -860,9 +860,32 @@ static void k_slock(struct vc_data *vc, unsigned char value, char up_flag, struc
}
/* by default, 300ms interval for combination release */
-static long brl_timeout = 300;
-MODULE_PARM_DESC(brl_timeout, "Braille keys release delay in ms (0 for combination on first release, < 0 for dead characters)");
-module_param(brl_timeout, long, 0644);
+static unsigned brl_timeout = 300;
+MODULE_PARM_DESC(brl_timeout, "Braille keys release delay in ms (0 for commit on first key release)");
+module_param(brl_timeout, uint, 0644);
+
+static unsigned brl_nbchords = 1;
+MODULE_PARM_DESC(brl_nbchords, "Number of chords that produce a braille pattern (0 for dead chords)");
+module_param(brl_nbchords, uint, 0644);
+
+static void k_brlcommit(struct vc_data *vc, unsigned int pattern, char up_flag, struct pt_regs *regs)
+{
+ static unsigned long chords;
+ static unsigned committed;
+
+ if (!brl_nbchords)
+ k_deadunicode(vc, BRL_UC_ROW | pattern, up_flag, regs);
+ else {
+ committed |= pattern;
+ chords++;
+ if (chords == brl_nbchords) {
+ k_unicode(vc, BRL_UC_ROW | committed, up_flag, regs);
+ chords = 0;
+ committed = 0;
+ }
+ }
+}
+
static void k_brl(struct vc_data *vc, unsigned char value, char up_flag, struct pt_regs *regs)
{
static unsigned pressed,committing;
@@ -882,11 +905,6 @@ static void k_brl(struct vc_data *vc, unsigned char value, char up_flag, struct
if (value > 8)
return;
- if (brl_timeout < 0) {
- k_deadunicode(vc, BRL_UC_ROW | (1 << (value - 1)), up_flag, regs);
- return;
- }
-
if (up_flag) {
if (brl_timeout) {
if (!committing ||
@@ -897,13 +915,13 @@ static void k_brl(struct vc_data *vc, unsigned char value, char up_flag, struct
pressed &= ~(1 << (value - 1));
if (!pressed) {
if (committing) {
- k_unicode(vc, BRL_UC_ROW | committing, 0, regs);
+ k_brlcommit(vc, committing, 0, regs);
committing = 0;
}
}
} else {
if (committing) {
- k_unicode(vc, BRL_UC_ROW | committing, 0, regs);
+ k_brlcommit(vc, committing, 0, regs);
committing = 0;
}
pressed &= ~(1 << (value - 1));