A number of ACPI/WMI drivers use sparse-keymap for hotkeys. Some of the
most common hotkey problems are new keys with perviously unused scan
codes and keys that reuse scan codes for different functions than in
previous models. Diagnosis of these key problems can be done easily
from userspace as long as the drivers emit MSC_SCAN events for all keys
and KEY_UNKNOWN key events for unknown scan codes. sparse-keymap does
neither.
The following patches modify sparse-keymap to emit these events,
facilitating easier debugging of malfunctioning keys from userspace.
Thanks,
Seth
Seth Forshee (2):
Input: sparse-keymap - report scancodes with key events
Input: sparse-keymap - report KEY_UNKNOWN for unknown scan codes
drivers/input/sparse-keymap.c | 14 ++++++++++++++
1 files changed, 14 insertions(+), 0 deletions(-)
@@ -209,6 +209,7 @@ int sparse_keymap_setup(struct input_dev *dev,}if(test_bit(EV_KEY,dev->evbit)){+__set_bit(KEY_UNKNOWN,dev->keybit);__set_bit(EV_MSC,dev->evbit);__set_bit(MSC_SCAN,dev->mscbit);}
@@ -311,12 +312,19 @@ bool sparse_keymap_report_event(struct input_dev *dev, unsigned int code,{conststructkey_entry*ke=sparse_keymap_entry_from_scancode(dev,code);+structkey_entryunknown_ke;if(ke){sparse_keymap_report_entry(dev,ke,value,autorelease);returntrue;}+/* Report an unknown key event as a debugging aid */+unknown_ke.type=KE_KEY;+unknown_ke.code=code;+unknown_ke.keycode=KEY_UNKNOWN;+sparse_keymap_report_entry(dev,&unknown_ke,value,autorelease);+returnfalse;}EXPORT_SYMBOL(sparse_keymap_report_event);
Scancodes are useful debugging aids when incorrect keycodes
are being sent, as is common with laptop hotkeys.
Signed-off-by: Seth Forshee <redacted>
---
drivers/input/sparse-keymap.c | 6 ++++++
1 files changed, 6 insertions(+), 0 deletions(-)
@@ -209,6 +209,7 @@ int sparse_keymap_setup(struct input_dev *dev,}if(test_bit(EV_KEY,dev->evbit)){+__set_bit(KEY_UNKNOWN,dev->keybit);__set_bit(EV_MSC,dev->evbit);__set_bit(MSC_SCAN,dev->mscbit);}
@@ -311,12 +312,19 @@ bool sparse_keymap_report_event(struct input_dev *dev, unsigned int code,{conststructkey_entry*ke=sparse_keymap_entry_from_scancode(dev,code);+structkey_entryunknown_ke;if(ke){sparse_keymap_report_entry(dev,ke,value,autorelease);returntrue;}+/* Report an unknown key event as a debugging aid */+unknown_ke.type=KE_KEY;+unknown_ke.code=code;+unknown_ke.keycode=KEY_UNKNOWN;+sparse_keymap_report_entry(dev,&unknown_ke,value,true);+returnfalse;}EXPORT_SYMBOL(sparse_keymap_report_event);
Scancodes are useful debugging aids when incorrect keycodes
are being sent, as is common with laptop hotkeys.
Signed-off-by: Seth Forshee <redacted>
---
drivers/input/sparse-keymap.c | 6 ++++++
1 files changed, 6 insertions(+), 0 deletions(-)