aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2015-03-04 17:10:26 -0500
committerJiri Kosina <jkosina@suse.cz>2015-03-04 17:31:36 -0500
commitf3dddf2432e3123ef34b470129295641f7513d26 (patch)
tree566ea08d262f831f2eb66b651416ada0816f82db
parent68c18c61b23c28d4741fda0df81bc6ec40bfd14b (diff)
HID: map telephony usage page
Currently HID code maps usages from telephony page into BTN_0, BTN_1, etc keys which get interpreted by mousedev and userspace as left/right/middle button clicks, which is not really helpful. This change adds mappings for usages that have corresponding input event definitions, and leaves the rest unmapped. This can be changed when there are userspace consumers for more telephony usages. Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
-rw-r--r--drivers/hid/hid-input.c23
-rw-r--r--include/linux/hid.h1
-rw-r--r--include/uapi/linux/input.h4
3 files changed, 28 insertions, 0 deletions
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
index 052869d0ab78..19603efc8fa2 100644
--- a/drivers/hid/hid-input.c
+++ b/drivers/hid/hid-input.c
@@ -711,6 +711,29 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
711 } 711 }
712 break; 712 break;
713 713
714 case HID_UP_TELEPHONY:
715 switch (usage->hid & HID_USAGE) {
716 case 0x2f: map_key_clear(KEY_MICMUTE); break;
717 case 0xb0: map_key_clear(KEY_NUMERIC_0); break;
718 case 0xb1: map_key_clear(KEY_NUMERIC_1); break;
719 case 0xb2: map_key_clear(KEY_NUMERIC_2); break;
720 case 0xb3: map_key_clear(KEY_NUMERIC_3); break;
721 case 0xb4: map_key_clear(KEY_NUMERIC_4); break;
722 case 0xb5: map_key_clear(KEY_NUMERIC_5); break;
723 case 0xb6: map_key_clear(KEY_NUMERIC_6); break;
724 case 0xb7: map_key_clear(KEY_NUMERIC_7); break;
725 case 0xb8: map_key_clear(KEY_NUMERIC_8); break;
726 case 0xb9: map_key_clear(KEY_NUMERIC_9); break;
727 case 0xba: map_key_clear(KEY_NUMERIC_STAR); break;
728 case 0xbb: map_key_clear(KEY_NUMERIC_POUND); break;
729 case 0xbc: map_key_clear(KEY_NUMERIC_A); break;
730 case 0xbd: map_key_clear(KEY_NUMERIC_B); break;
731 case 0xbe: map_key_clear(KEY_NUMERIC_C); break;
732 case 0xbf: map_key_clear(KEY_NUMERIC_D); break;
733 default: goto ignore;
734 }
735 break;
736
714 case HID_UP_CONSUMER: /* USB HUT v1.12, pages 75-84 */ 737 case HID_UP_CONSUMER: /* USB HUT v1.12, pages 75-84 */
715 switch (usage->hid & HID_USAGE) { 738 switch (usage->hid & HID_USAGE) {
716 case 0x000: goto ignore; 739 case 0x000: goto ignore;
diff --git a/include/linux/hid.h b/include/linux/hid.h
index efc7787a41a8..69f9cf7f078d 100644
--- a/include/linux/hid.h
+++ b/include/linux/hid.h
@@ -159,6 +159,7 @@ struct hid_item {
159#define HID_UP_LED 0x00080000 159#define HID_UP_LED 0x00080000
160#define HID_UP_BUTTON 0x00090000 160#define HID_UP_BUTTON 0x00090000
161#define HID_UP_ORDINAL 0x000a0000 161#define HID_UP_ORDINAL 0x000a0000
162#define HID_UP_TELEPHONY 0x000b0000
162#define HID_UP_CONSUMER 0x000c0000 163#define HID_UP_CONSUMER 0x000c0000
163#define HID_UP_DIGITIZER 0x000d0000 164#define HID_UP_DIGITIZER 0x000d0000
164#define HID_UP_PID 0x000f0000 165#define HID_UP_PID 0x000f0000
diff --git a/include/uapi/linux/input.h b/include/uapi/linux/input.h
index b0a813079852..2b628c316882 100644
--- a/include/uapi/linux/input.h
+++ b/include/uapi/linux/input.h
@@ -702,6 +702,10 @@ struct input_keymap_entry {
702#define KEY_NUMERIC_9 0x209 702#define KEY_NUMERIC_9 0x209
703#define KEY_NUMERIC_STAR 0x20a 703#define KEY_NUMERIC_STAR 0x20a
704#define KEY_NUMERIC_POUND 0x20b 704#define KEY_NUMERIC_POUND 0x20b
705#define KEY_NUMERIC_A 0x20c /* Phone key A - HUT Telephony 0xb9 */
706#define KEY_NUMERIC_B 0x20d
707#define KEY_NUMERIC_C 0x20e
708#define KEY_NUMERIC_D 0x20f
705 709
706#define KEY_CAMERA_FOCUS 0x210 710#define KEY_CAMERA_FOCUS 0x210
707#define KEY_WPS_BUTTON 0x211 /* WiFi Protected Setup key */ 711#define KEY_WPS_BUTTON 0x211 /* WiFi Protected Setup key */