Comment 42 for bug 271706

Within a framebuffer console, no xdm started:

Output from showkey, which parses kernel output from /dev/console , is not based on kernel evdev driver. (So, way before evdev which normally provides events to xf86-input-evdev).

Normally, output from showkey would look like this for regular keys:

keycode 33 press
keycode 33 release
keycode 37 press
keycode 37 release
keycode 36 press
keycode 36 release

Notice that the attached output from "volume down (press x2, then press/hold for 5 seconds), then repeat for volume up" doesn't generate additional "release" events. This seems to be outside of the scope of evdev.

The information is in agreement that our hardware isn't getting the right "release" events to the kernel -- most likely because a release event is not implemented at the hardware level.

In the interest of kernel efficiency, if we were to start running checks in the kernel input driver itself (way out of my league here, but just theoretically), for "if it's a volume key", the additional check would get applied for every key - but that's something we're already doing -- except after a series of calls have made their way to xf86-input-evdev. It almost makes finding a way to generate a "release" event earlier, somewhere in the kernel, justified.

Nonetheless, let me know if you agree with the fix to your patch posted in the above comment -- handling this within input-evdev isn't entirely proper, and may add 1 or two extra non-intensive function calls, but it makes for an easy fix :)