2005-01-27 16:47:42

by Michael Gernoth

[permalink] [raw]
Subject: AT-Keyboard probing too strict in current bk?

Hi,

since the introduction of libps2 in the mainline 2.6 kernel I had the
issue that my keyboard[1] was no longer recognized.
The cause of this is that my "keyboard" responds to all commands with
an acknowledgement (0xFA), even if the command is not implemented. One
of those not implemented commands is 0xF2 (ATKBD_GETID_CMD).

In drivers/input/keyboard/atkbd.c ATKBD_GETID_CMD is used to probe
for the keyboard, and if this fails, another method of detecting
the keyboard is used. It seems that in 2.6.10 atkbd_command
indicated that my keyboard did not successfully execute the command,
but in the current bk-version ps2_command is used, which indicates
a successfull execution, leaving behind invalid keyboard-ids.
This leads to the kernel ignoring my keyboard.

I fixed the problem in my keyboard-converter, but I don't know if
the checking in keyboard-probing shouldn't be changed to catch that
case, too. I have included a patch which does that.

Regards,
Michael

[1] SUN Type 5 keyboard connected to a self-built sun->ps2 adapter


--- 1.73/drivers/input/keyboard/atkbd.c 2005-01-06 17:42:09 +01:00
+++ edited/drivers/input/keyboard/atkbd.c 2005-01-27 17:27:03 +01:00
@@ -512,7 +512,8 @@
*/

param[0] = param[1] = 0xa5; /* initialize with invalid values */
- if (ps2_command(ps2dev, param, ATKBD_CMD_GETID)) {
+ if (ps2_command(ps2dev, param, ATKBD_CMD_GETID) ||
+ (param[0] == 0xa5 && param[1] == 0xa5)) {

/*
* If the get ID command failed, we check if we can at least set the LEDs on


2005-01-28 03:59:27

by Dmitry Torokhov

[permalink] [raw]
Subject: Re: AT-Keyboard probing too strict in current bk?

On Thursday 27 January 2005 11:47, Michael Gernoth wrote:
> Hi,
>
> since the introduction of libps2 in the mainline 2.6 kernel I had the
> issue that my keyboard[1] was no longer recognized.
> The cause of this is that my "keyboard" responds to all commands with
> an acknowledgement (0xFA), even if the command is not implemented. One
> of those not implemented commands is 0xF2 (ATKBD_GETID_CMD).
>
> In drivers/input/keyboard/atkbd.c ATKBD_GETID_CMD is used to probe
> for the keyboard, and if this fails, another method of detecting
> the keyboard is used. It seems that in 2.6.10 atkbd_command
> indicated that my keyboard did not successfully execute the command,
> but in the current bk-version ps2_command is used, which indicates
> a successfull execution, leaving behind invalid keyboard-ids.
> This leads to the kernel ignoring my keyboard.
>

Hi,

Thanks for noticing this. The following patch should fix timeout
handling in libps2 and restore previous behavior:


===== drivers/input/serio/libps2.c 1.4 vs edited =====
--- 1.4/drivers/input/serio/libps2.c 2005-01-27 02:13:43 -05:00
+++ edited/drivers/input/serio/libps2.c 2005-01-27 22:52:36 -05:00
@@ -115,8 +115,8 @@
*/
timeout = msecs_to_jiffies(command == PS2_CMD_RESET_BAT ? 4000 : 500);

- wait_event_interruptible_timeout(ps2dev->wait,
- !(ps2dev->flags & PS2_FLAG_CMD1), timeout);
+ timeout = wait_event_interruptible_timeout(ps2dev->wait,
+ !(ps2dev->flags & PS2_FLAG_CMD1), timeout);

if (ps2dev->cmdcnt && timeout > 0) {



--
Dmitry

2005-01-28 11:16:04

by Michael Gernoth

[permalink] [raw]
Subject: Re: AT-Keyboard probing too strict in current bk?

On Thu, Jan 27, 2005 at 10:59:20PM -0500, Dmitry Torokhov wrote:
> Thanks for noticing this. The following patch should fix timeout
> handling in libps2 and restore previous behavior:

This fixes it for me. I tested it with an unmodified atkbd.c and
the old firmware for my keyboard converter.

Thanks,
Michael

2005-01-28 14:40:35

by Vojtech Pavlik

[permalink] [raw]
Subject: Re: AT-Keyboard probing too strict in current bk?

On Thu, Jan 27, 2005 at 05:47:34PM +0100, Michael Gernoth wrote:
> Hi,
>
> since the introduction of libps2 in the mainline 2.6 kernel I had the
> issue that my keyboard[1] was no longer recognized.
> The cause of this is that my "keyboard" responds to all commands with
> an acknowledgement (0xFA), even if the command is not implemented. One
> of those not implemented commands is 0xF2 (ATKBD_GETID_CMD).
>
> In drivers/input/keyboard/atkbd.c ATKBD_GETID_CMD is used to probe
> for the keyboard, and if this fails, another method of detecting
> the keyboard is used. It seems that in 2.6.10 atkbd_command
> indicated that my keyboard did not successfully execute the command,
> but in the current bk-version ps2_command is used, which indicates
> a successfull execution, leaving behind invalid keyboard-ids.
> This leads to the kernel ignoring my keyboard.

This is a bug in libps2, that's been fixed and submitted for 2.6.11.
Your keyboard should work again with 2.6.11, if the fix makes it there.
If a keyboard doesn't report the ID on a GETID command, ps2_command
should fail.

Old AT keyboards don't know the GETID command but at least they know
the SETLEDS command, which is how they're identified.

As a temporary workaround you can use atkbd.dumbkbd=1, which will cause
your LEDs not to work as a side effect, though.

> I fixed the problem in my keyboard-converter, but I don't know if
> the checking in keyboard-probing shouldn't be changed to catch that
> case, too. I have included a patch which does that.

We don't need to check the values, since the ps2_command will return an
error when the bug in libps2 is fixed.

> [1] SUN Type 5 keyboard connected to a self-built sun->ps2 adapter
>
> --- 1.73/drivers/input/keyboard/atkbd.c 2005-01-06 17:42:09 +01:00
> +++ edited/drivers/input/keyboard/atkbd.c 2005-01-27 17:27:03 +01:00
> @@ -512,7 +512,8 @@
> */
>
> param[0] = param[1] = 0xa5; /* initialize with invalid values */
> - if (ps2_command(ps2dev, param, ATKBD_CMD_GETID)) {
> + if (ps2_command(ps2dev, param, ATKBD_CMD_GETID) ||
> + (param[0] == 0xa5 && param[1] == 0xa5)) {
>
> /*
> * If the get ID command failed, we check if we can at least set the LEDs on

--
Vojtech Pavlik
SuSE Labs, SuSE CR