Skip to content

Instantly share code, notes, and snippets.

@doraskayo
Last active September 9, 2016 01:26
Show Gist options
  • Save doraskayo/7117c439d3972a48f74b034dec979f89 to your computer and use it in GitHub Desktop.
Save doraskayo/7117c439d3972a48f74b034dec979f89 to your computer and use it in GitHub Desktop.
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
index bcfaf32..cdd2d27 100644
--- a/drivers/hid/hid-input.c
+++ b/drivers/hid/hid-input.c
@@ -582,24 +582,25 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
break;
case HID_UP_GENDESK:
- if ((usage->hid & 0xf0) == 0x80) { /* SystemControl */
- switch (usage->hid & 0xf) {
- case 0x1: map_key_clear(KEY_POWER); break;
- case 0x2: map_key_clear(KEY_SLEEP); break;
- case 0x3: map_key_clear(KEY_WAKEUP); break;
- case 0x4: map_key_clear(KEY_CONTEXT_MENU); break;
- case 0x5: map_key_clear(KEY_MENU); break;
- case 0x6: map_key_clear(KEY_PROG1); break;
- case 0x7: map_key_clear(KEY_HELP); break;
- case 0x8: map_key_clear(KEY_EXIT); break;
- case 0x9: map_key_clear(KEY_SELECT); break;
- case 0xa: map_key_clear(KEY_RIGHT); break;
- case 0xb: map_key_clear(KEY_LEFT); break;
- case 0xc: map_key_clear(KEY_UP); break;
- case 0xd: map_key_clear(KEY_DOWN); break;
- case 0xe: map_key_clear(KEY_POWER2); break;
- case 0xf: map_key_clear(KEY_RESTART); break;
- default: goto unknown;
+ if (field->application == HID_GD_SYSTEM_CONTROL) {
+ /* Only allow System Controls inside a System Controls collection */
+ switch (usage->hid & 0xffff) {
+ case 0x81: map_key_clear(KEY_POWER); break;
+ case 0x82: map_key_clear(KEY_SLEEP); break;
+ case 0x83: map_key_clear(KEY_WAKEUP); break;
+ case 0x84: map_key_clear(KEY_CONTEXT_MENU); break;
+ case 0x85: map_key_clear(KEY_MENU); break;
+ case 0x86: map_key_clear(KEY_PROG1); break;
+ case 0x87: map_key_clear(KEY_HELP); break;
+ case 0x88: map_key_clear(KEY_EXIT); break;
+ case 0x89: map_key_clear(KEY_SELECT); break;
+ case 0x8a: map_key_clear(KEY_RIGHT); break;
+ case 0x8b: map_key_clear(KEY_LEFT); break;
+ case 0x8c: map_key_clear(KEY_UP); break;
+ case 0x8d: map_key_clear(KEY_DOWN); break;
+ case 0x8e: map_key_clear(KEY_POWER2); break;
+ case 0x8f: map_key_clear(KEY_RESTART); break;
+ default: map_key_clear(KEY_UNKNOWN); /* NOTE: can also be: goto ignore */
}
break;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment