linux/drivers/input/keyboard
Benjamin LaHaise 8c5188b6d3 Input: atkbd - add 'terminal' parameter for IBM Terminal keyboards
Many of the IBM Terminal keyboards from the 1980s and early 1990s communicate
using a protocol similar, but not identical to the AT keyboard protocol.
(Models known to be like this include 6110344, 6110668, 1390876, 1386887, and
possibly others.)

When the connector is rewired or adapter to an AT-DIN or PS/2 connector, they
can be connected to a standard PC, with three caveats:

a) They can only use scancode set 3; requests to use anything else are
quietly ignored.
b) The AT Command to request Make, Break and Repeat codes is not properly
interpreted.
c) The top function keys on a 122 key keyboard, and the arrow/edit keys in
the middle of the board send non-standard scancodes.

C) is easily taken care of in userspace, by use of setkeycodes
B) can be taken care of by a userspace hack (that makes the kernel complain
in dmesg)
A) is fixable in theory, but on the keyboard i tested on (6110668), it seems
to be detected unoverridably as Set 2, causing userspace oddities that make
it harder to fix C).

Enclosed is a small patch to the kernel that fixes A) and B) in the kernel,
making it much easier to fix C) in userspace. It adds a single kernel
command line parameter that overrides the detection that sets these boards
as set 2, and instead of sending the Make-break-repeat command to the
keyboard, it sends the make-break command, which is properly recognized by
these keyboards. Software level key repeating seems to make up for the lack
of hardware repeat codes perfectly.

Without manually setting the command line parameter (tentatively named
atkbd.terminal), this code has no effect, and the driver works exactly as
before.

See also:

http://www.seasip.info/VintagePC/ibm_1390876.html
http://www.seasip.info/VintagePC/ibm_6110344.html
http://geekhack.org/showwiki.php?title=Island:7306

Signed-off-by: Erika Quinn <erikas.aubade@gmail.com>
Signed-off-by: Benjamin LaHaise <bcrl@kvack.org>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2010-11-04 10:30:48 -07:00
..
aaed2000_kbd.c [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
adp5520-keys.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
adp5588-keys.c Input: adp5588-keys - unify common header defines 2010-11-03 10:44:20 -07:00
amikbd.c m68k: amiga - Keyboard platform device conversion 2010-05-26 19:51:09 +02:00
atakbd.c m68k: Return -ENODEV if no device is found 2008-07-20 17:24:38 -07:00
atkbd.c Input: atkbd - add 'terminal' parameter for IBM Terminal keyboards 2010-11-04 10:30:48 -07:00
bf54x-keys.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
davinci_keyscan.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
ep93xx_keypad.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
gpio_keys.c Input: gpio_keys - add hooks to enable/disable device 2010-08-03 19:45:31 -07:00
hil_kbd.c Input: hil_kbd - add missing MODULE_DEVICE_TABLE() 2010-10-13 07:49:05 -07:00
hilkbd.c headers: remove sched.h from interrupt.h 2009-10-11 11:20:58 -07:00
hpps2atkbd.h
imx_keypad.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
jornada680_kbd.c input: jornada680_kbd: ctrl_in/outX to __raw_read/writeX conversion. 2010-10-27 15:24:49 +09:00
jornada720_kbd.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
Kconfig Merge branch 'davinci-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-davinci 2010-10-25 10:59:31 -07:00
lkkbd.c Input: lkkbd - change formatting style to match the rest of the kernel 2009-10-13 23:58:20 -07:00
lm8323.c Merge commit 'v2.6.35-rc3' into next 2010-06-30 15:07:09 -07:00
locomokbd.c [ARM] locomo: avoid unnecessary cascaded keyboard IRQ 2010-03-02 07:40:49 +08:00
Makefile Merge branch 'davinci-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-davinci 2010-10-25 10:59:31 -07:00
maple_keyb.c sh: maple: Support block reads and writes. 2009-02-27 16:07:32 +09:00
matrix_keypad.c Input: matrix_keypad - add support for clustered irq 2010-06-10 12:33:59 -07:00
max7359_keypad.c i2c: Remove all i2c_set_clientdata(client, NULL) in drivers 2010-06-03 11:33:58 +02:00
mcs_touchkey.c Input: mcs - Add MCS touchkey driver 2010-07-04 01:23:26 -07:00
newtonkbd.c get rid of input BIT* duplicate defines 2007-10-19 11:53:42 -07:00
nomadik-ske-keypad.c Input: add support for Nomadik SKE keypad controller 2010-10-13 07:49:24 -07:00
omap4-keypad.c Input: omap4-keypad - wake-up on events & long presses 2010-10-13 07:49:26 -07:00
omap-keypad.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
opencores-kbd.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
pxa27x_keypad.c ARM: pxa27x_keypad: added wakeup event handler for keypad interrupts 2010-10-09 17:07:19 +08:00
pxa930_rotary.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
qt2160.c i2c: Remove all i2c_set_clientdata(client, NULL) in drivers 2010-06-03 11:33:58 +02:00
samsung-keypad.c Input: samsung-keypad - Add samsung keypad driver 2010-07-21 00:49:06 -07:00
sh_keysc.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
stmpe-keypad.c input: Add STMPE keypad driver 2010-08-12 11:27:56 +02:00
stowaway.c get rid of input BIT* duplicate defines 2007-10-19 11:53:42 -07:00
sunkbd.c headers: remove sched.h from interrupt.h 2009-10-11 11:20:58 -07:00
tca6416-keypad.c i2c: Remove all i2c_set_clientdata(client, NULL) in drivers 2010-06-03 11:33:58 +02:00
tnetv107x-keypad.c input: add driver for tnetv107x on-chip keypad controller 2010-09-24 07:40:31 -07:00
twl4030_keypad.c Input: twl4030_keypad - fix error handling path 2010-10-13 07:49:24 -07:00
w90p910_keypad.c Input: w90p910_keypad - change platfrom driver name to 'nuc900-kpi' 2010-07-19 21:42:56 -07:00
xtkbd.c Input: remove CVS keywords 2008-05-20 12:17:39 -04:00