Re: Suppressing softrepeat

From: Vojtech Pavlik
Date: Tue Feb 21 2006 - 16:05:37 EST


On Tue, Feb 21, 2006 at 12:43:08PM -0800, Pete Zaitcev wrote:

> Add the "nosoftrepeat" parameter. This is useful if a "dumb" keyboard
> has (unswitcheable) hardware repeat, like in Dell DRAC3.

The softrepeat code should properly ignore all autorepeated keys from a
'dumb' keyboard. It's rather common that a keyboard we can't communicate
with is in autorepeat mode, because that's the mode AT keyboards wake up
in after power on.

A much simpler workaround for the DRAC3 is to set the softrepeat delay
to at least 750ms, using kbdrate(8), which will call the proper console
ioctl, resulting in updating the softrepeat parameters.

I prefer workarounds for problematic hardware done outside the kernel,
if possible.

> Signed-off-by: Pete Zaitcev <zaitcev@xxxxxxxxxx>
>
> ---
>
> Hi, Dmitry,
>
> Dell people passed on a request to add a new parameter, "nosoftrepeat",
> to i8042 (in atkbd.c). So, if I understand right, things should work so:
>
> - None set in grub.conf: Softrepeat is set by the driver as detected
> or derived. This is the default.
> - "softrepeat" set: Softrepeat is on, regardless
> - "nosoftrepeat" set: Softrepeat is off, regardless
> - Both "softrepeat" and "nosoftrepeat" are set: Do not do that.
>
> The code looked confusing, but there is an good explanation in this bug:
> https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=181457
>
> In short words, DRAC3 "plugs into" the keyboard connector, but does not
> emulate output, so we detect this as "dumb" keyboard and enable softrepeat.
> But softrepeat causes double keypresses.
>
> I suppose we could revamp the old softrepeat parameter to be more than
> a boolean, but I see no point.
>
> If you agree, please include the attached.
>
> -- Pete
>
> --- linux-2.6.16-rc2/drivers/input/keyboard/atkbd.c 2006-02-11 00:31:41.000000000 -0800
> +++ linux-2.6.16-rc2-lem/drivers/input/keyboard/atkbd.c 2006-02-21 11:53:53.000000000 -0800
> @@ -50,6 +50,10 @@ static int atkbd_softrepeat;
> module_param_named(softrepeat, atkbd_softrepeat, bool, 0);
> MODULE_PARM_DESC(softrepeat, "Use software keyboard repeat");
>
> +static int atkbd_nosoftrepeat;
> +module_param_named(nosoftrepeat, atkbd_nosoftrepeat, bool, 0);
> +MODULE_PARM_DESC(nosoftrepeat, "Do not use software keyboard repeat");
> +
> static int atkbd_softraw = 1;
> module_param_named(softraw, atkbd_softraw, bool, 0);
> MODULE_PARM_DESC(softraw, "Use software generated rawmode");
> @@ -862,7 +866,7 @@ static int atkbd_connect(struct serio *s
> atkbd->softrepeat = atkbd_softrepeat;
> atkbd->scroll = atkbd_scroll;
>
> - if (!atkbd->write)
> + if (!atkbd->write && !atkbd_nosoftrepeat)
> atkbd->softrepeat = 1;
>
> if (atkbd->softrepeat)
>
>

--
Vojtech Pavlik
Director SuSE Labs
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/