Re: BUG? Duplicate key code 0xe045 in dell-wmi.c

From: Pali RohÃr
Date: Tue Jul 07 2015 - 17:19:31 EST


On Tuesday 07 July 2015 13:38:41 Mario Limonciello wrote:
>
>
> On 07/04/2015 11:34 AM, Pali RohÃr wrote:
> > Hello,
> >
> > I'm looking at dell-wmi.c driver and its history in git and I found
> > problem with handling WMI key code 0xe045. In current dell-wmi.c code is
> >
> > {KE_KEY, 0xe045, KEY_PROG1},
> > {KE_IGNORE, 0xe045, KEY_NUMLOCK},
> >
> > I bet this is some copy-paste error as one code can be translated only
> > to one input key event.
> >
> > In git history I found that above change was added by commit:
> >
> > http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=5cab0098171712a9fd51399b06181c8dfdebe9c9
> >
> > ===============================================
> > commit 5cab0098171712a9fd51399b06181c8dfdebe9c9
> > Author: Mario Limonciello <mario_limonciello@xxxxxxxx>
> > Date: Wed Jun 10 19:40:47 2009 +0000
> >
> > dell-wmi: add additional keyboard events
> >
> > Upcoming Dell hardware will send more keyboard events via WMI. Add
> > support for them.
> >
> > Signed-off-by: Mario Limonciello <mario_limonciello@xxxxxxxx>
> > Signed-off-by: Matthew Garrett <mjg@xxxxxxxxxx>
> > Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> > Signed-off-by: Len Brown <len.brown@xxxxxxxxx>
> > ===============================================
> >
> > Sending email to all signers of this commit. Problematic code is still
> > in upstream kernel, so it needs to be fixed.
> >
> > Mario Limonciello: Do you know if code 0xe045 is some PROG1 or NUMLOCK?
> >
> Hi Pali,
>
> Yes this looks like a mistake and that the KEY_PROG1 item should have
> been removed in that patch. It should be a notification (KEY_IGNORE)
> for numlock.
>
> Thanks,

Hi, I looked into git history of dell-wmi more deeply... into first
commit of dell-wmi.c source code. It is this one from year 2009:

https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=0b3f6109f0c9ff926b5ffc80dc1cebb24f192b35

Here Matthew Garrett says:

... send a generic input event when a button with a picture of a battery
on it is pressed ...

and adds code:

+static struct key_entry dell_wmi_keymap[] = {
+ {KE_KEY, 0xe045, KEY_PROG1},
+ {KE_END, 0}
+};

So basically when "picture of a battery" is pressed WMI send event
0xe045 which is translated to KEY_PROG1.

Matthew Garrett is original author of that code and I believe that on
some his machine 0xe045 code from DELL WMI really could be sent when
battery button is pressed.

Mario, if you as Dell authority says that 0xe045 is sent when numlock is
pressed, it means either code 0xe045 is ambiguous :-( and has different
meaning for different machines or there is error in (your) documentation
or bios... or Matthew cannot differ between picture of battery and
picture of numlock on his dell machine :-)

Matthew: If you still reading this email thread, do you know for which
Dell machine did you write this dell-wmi.c driver originally?

Mario: Do you know more about this problem?


>From function sparse_keymap_setup() called by dell-wmi.c this structure:

{KE_KEY, 0xe045, KEY_PROG1},
{KE_IGNORE, 0xe045, KEY_NUMLOCK},

is decoded that 0xe045 event is *not* ignored and reports KEY_PROG1 key.

--
Pali RohÃr
pali.rohar@xxxxxxxxx
--
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/