dell-wmi: Generate one sparse keymap for all machines
authorPali Rohár <pali.rohar@gmail.com>
Wed, 15 Jun 2016 19:49:13 +0000 (21:49 +0200)
committerDarren Hart <dvhart@linux.intel.com>
Fri, 17 Jun 2016 18:13:35 +0000 (11:13 -0700)
commite075b3c898e4055ec62a1f0ed7f3b8e62814bfb6
tree96cd7c9ac1ccf88bea4bf4cc69e30f9ac48e3b51
parent3237a861049bb3a8f335392c37505d4d3692d79e
dell-wmi: Generate one sparse keymap for all machines

This patch reworks code for generating sparse keymap and processing WMI
events. It unifies procedure for generating sparse keymap and also unifies
big switch code for processing WMI events of different types. After this
patch dell-wmi driver does not differ between "old" and "new" hotkey type.

It constructs sparse keymap table with all WMI codes. It is because on some
laptops (e.g. Dell Latitude E6440) ACPI/firmware send both event types (old
and new).

Each WMI code in sparse keymap table is prefixed by 16bit event type, so it
does not change functionality on laptops with "old" hotkey support (those
without scancodes in DMI).

This allow us to distinguish between same WMI codes with different types in
sparse keymap. Thanks to this WMI events of type 0x0011 were moved from big
switch into sparse keymap table too.

This patch also fixes possible bug in parsing WMI event buffer introduced
in commit 5ea2559726b7 ("dell-wmi: Add support for new Dell systems"). That
commit changed buffer type from int* to u16* without fixing code. More at:
http://lkml.iu.edu/hypermail/linux/kernel/1507.0/01950.html

Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
Tested-by: Michał Kępień <kernel@kempniu.pl>
Reviewed-by: Michał Kępień <kernel@kempniu.pl>
Tested-by: Gabriele Mazzotta <gabriele.mzt@gmail.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
drivers/platform/x86/dell-wmi.c