Skip to contentSkip to conversation

input / keyboard / Scancode Set 3 support broken

PATCH New Knut Petersen 1 participant 1 message Oct 24, 2003 Input drivers

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 input / keyboard / Scancode Set 3 support broken

Hi everybody!

If somebody uses keyboard scancode set 3 it is necessary to explicitly program the keyboard to send make/break codes for all keys and to set autorepeat for all keys. I reported this bug and the suggested fix to Vojtech Pavlik almost a month ago and he published the enclosed patch.

This patch never made it to the main kernel tree, but it is really critical
for some people. One example is the LK461/46W series of keyboards from Digital Equipment Corporations. These are VMS keyboards that are also usable on a normal PC.

These keyboards support Scancode Set 2, but for some keys this support is
screwed up -- some function keys (e.g. F18/F20) report the same scancode sequence combined with both alt and shift keys.

Scancode Set 3 works perfectly if all keys are programmed to give make/break codes.

A lot of keyboards manufactured by Cherry only make/break for some (not all!) modifyer keys in scancode set 3 without this fix.

I believe that this patch is nothing but a very obvious bug fix, please include it in the linux kernel.

cu,
Knut Petersen

Below find the patch from Vojtech as published on 29-sep-2003:

===================================================================

[email protected], 2003-09-29 12:59:49+02:00, [email protected]
input: Explicitly set All-Repeat mode in Set3 on AT keyboards.

atkbd.c | 3 +++

1 files changed, 3 insertions(+)

===================================================================

drivers/input/keyboard/atkbd.c Mon Sep 29 19:36:59 2003 +0 -0
diff -Nru a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
@@ -111,6 +111,7 @@

#define ATKBD_CMD_SETREP 0x10f3
#define ATKBD_CMD_ENABLE 0x00f4
#define ATKBD_CMD_RESET_DIS 0x00f5
+#define ATKBD_CMD_SETALL_MBR 0x00fa
#define ATKBD_CMD_RESET_BAT 0x02ff
#define ATKBD_CMD_RESEND 0x00fe
#define ATKBD_CMD_EX_ENABLE 0x10ea
@@ -519,6 +520,8 @@
if (atkbd_command(atkbd, param, ATKBD_CMD_SSCANSET)) return 2;
}
+
+ atkbd_command(atkbd, param, ATKBD_CMD_SETALL_MBR);

return 3;
}