USB: input: yealink.c: update key mappings
Subsystems (3)
cover USB: input: yealink.c: update key mappings
Hello,
I have an Yealink USB phone which is handled by the yealink.c driver but the '#' key returns an unexpected value and keys labeled "RING" and "MUTE" do not return any value to userspace.
In the first patch of this series I replace the combination KEY_LEFTSHIFT and KEY_3 with KEY_NUMERIC_POUND and I also replace other keys for internal consistency and with the cm109.c driver, which according to the comment in the code is derived from this one, is this the right approach?
In the second patch I add two additional keys which could be handled by userspace:
"RING" whose purpose according to the user manual is to cycle all available ringtones "MUTE" whose purpose is to mute the USB microphone
which KEY_* values should be used for them?
I have two more questions:DRIVER_VERSION should be updated?
are both patches suitable for stable?
Daniele Forsi (2):
USB: input: yealink.c: use KEY_NUMERIC_* for numeric keys, star and
pound
USB: input: yealink.c: add mapping for "RING" and "MUTE" keys
drivers/input/misc/yealink.c | 43 +++++++++++++++++++------------------------ 1 file changed, 19 insertions(+), 24 deletions(-)
Signature · 1 line
2.1.3
RFC PATCH 1/2 USB: input: yealink.c: use KEY_NUMERIC_* for numeric keys, star and pound
Fix the "pound" key that being mapped to Shift+3 was returning '£' instead of '#' when using an Italian keyboard mapping and use the same values as the cm109.c driver (which was based on this yealink.c driver) also for '0' to '9' and for '*'.
--- drivers/input/misc/yealink.c | 39 +++++++++++++++------------------------ 1 file changed, 15 insertions(+), 24 deletions(-)
drivers/input/misc/yealink.c +15 -24
@@ -212,27 +212,24 @@ static int map_p1k_to_key(int scancode)case 0x03 :return KEY_ENTER ;/* pickup */ case 0x14 :return KEY_BACKSPACE ;/* C */ case 0x13 :return KEY_ESC ;/* hangup */ -case 0x00 :return KEY_1 ;/* 1 */ -case 0x01 :return KEY_2 ;/* 2 */ -case 0x02 :return KEY_3 ;/* 3 */ -case 0x10 :return KEY_4 ;/* 4 */ -case 0x11 :return KEY_5 ;/* 5 */ -case 0x12 :return KEY_6 ;/* 6 */ -case 0x20 :return KEY_7 ;/* 7 */ -case 0x21 :return KEY_8 ;/* 8 */ -case 0x22 :return KEY_9 ;/* 9 */ -case 0x30 :return KEY_KPASTERISK ;/* * */ -case 0x31 :return KEY_0 ;/* 0 */ -case 0x32 :return KEY_LEFTSHIFT | -KEY_3 <<8 ;/* # */ +case 0x00 :return KEY_NUMERIC_1 ;/* 1 */ +case 0x01 :return KEY_NUMERIC_2 ;/* 2 */ +case 0x02 :return KEY_NUMERIC_3 ;/* 3 */ +case 0x10 :return KEY_NUMERIC_4 ;/* 4 */ +case 0x11 :return KEY_NUMERIC_5 ;/* 5 */ +case 0x12 :return KEY_NUMERIC_6 ;/* 6 */ +case 0x20 :return KEY_NUMERIC_7 ;/* 7 */ +case 0x21 :return KEY_NUMERIC_8 ;/* 8 */ +case 0x22 :return KEY_NUMERIC_9 ;/* 9 */ +case 0x30 :return KEY_NUMERIC_STAR ;/* * */ +case 0x31 :return KEY_NUMERIC_0 ;/* 0 */ +case 0x32 :return KEY_NUMERIC_POUND ;/* # */ }return -EINVAL ; }/* Completes a request by converting the data into events for the * input subsystem. -* -* The key parameter can be cascaded: key2 << 8 | key1 */ static void report_key (struct yealink_dev *yld,int key) {
@@ -240,17 +237,13 @@ static void report_key(struct yealink_dev *yld, int key)if (yld->key_code >=0 ) {/* old key up */ -input_report_key (idev, yld->key_code &0xff ,0 ); -if (yld->key_code >>8 ) -input_report_key (idev, yld->key_code >>8 ,0 ); +input_report_key (idev, yld->key_code,0 ); } yld->key_code = key;if (key >=0 ) {/* new valid key */ -input_report_key (idev, key &0xff ,1 ); -if (key >>8 ) -input_report_key (idev, key >>8 ,1 ); +input_report_key (idev, key,1 ); }input_sync (idev); }
@@ -966,9 +959,7 @@ static int usb_probe(struct usb_interface *intf, const struct usb_device_id *id)for (i =0 ; i <256 ; i++) {int k =map_p1k_to_key (i);if (k >=0 ) { -set_bit (k &0xff , input_dev->keybit); -if (k >>8 ) -set_bit (k >>8 , input_dev->keybit); +set_bit (k, input_dev->keybit); } }
Signature · 1 line
2.1.3
A message that is not in the archive (sent off-list or not yet received): CAMFK4TMJTb5dJ1kXLBgsu8WE8Ygyh+jW_d_TqmDO5OqB5yr3nw@mail.gmail.com
Henk
maintainerRFC PATCH 1/2 USB: input: yealink.c: use KEY_NUMERIC_* for numeric keys, star and pound
Thanks!
Quoted 87 lines · Daniele Forsi
Fix the "pound" key that being mapped to Shift+3 was returning '£' instead of '#' when using an Italian keyboard mapping and use the same values as the
cm109.cdriver (which was based on thisyealink.cdriver) also for '0' to '9' and for '*'.Signed-off-by Daniele Forsi <[email protected]>--- drivers/input/misc/yealink.c | 39 +++++++++++++++------------------------ 1 file changed, 15 insertions(+), 24 deletions(-)drivers/input/misc/yealink.c +15
-25@@ -212,27 +212,24 @@ static int map_p1k_to_key(int scancode)case 0x03 :return KEY_ENTER ;/* pickup */ case 0x14 :return KEY_BACKSPACE ;/* C */ case 0x13 :return KEY_ESC ;/* hangup */ -case 0x00 :return KEY_1 ;/* 1 */ -case 0x01 :return KEY_2 ;/* 2 */ -case 0x02 :return KEY_3 ;/* 3 */ -case 0x10 :return KEY_4 ;/* 4 */ -case 0x11 :return KEY_5 ;/* 5 */ -case 0x12 :return KEY_6 ;/* 6 */ -case 0x20 :return KEY_7 ;/* 7 */ -case 0x21 :return KEY_8 ;/* 8 */ -case 0x22 :return KEY_9 ;/* 9 */ -case 0x30 :return KEY_KPASTERISK ;/* * */ -case 0x31 :return KEY_0 ;/* 0 */ -case 0x32 :return KEY_LEFTSHIFT | -KEY_3 <<8 ;/* # */ +case 0x00 :return KEY_NUMERIC_1 ;/* 1 */ +case 0x01 :return KEY_NUMERIC_2 ;/* 2 */ +case 0x02 :return KEY_NUMERIC_3 ;/* 3 */ +case 0x10 :return KEY_NUMERIC_4 ;/* 4 */ +case 0x11 :return KEY_NUMERIC_5 ;/* 5 */ +case 0x12 :return KEY_NUMERIC_6 ;/* 6 */ +case 0x20 :return KEY_NUMERIC_7 ;/* 7 */ +case 0x21 :return KEY_NUMERIC_8 ;/* 8 */ +case 0x22 :return KEY_NUMERIC_9 ;/* 9 */ +case 0x30 :return KEY_NUMERIC_STAR ;/* * */ +case 0x31 :return KEY_NUMERIC_0 ;/* 0 */ +case 0x32 :return KEY_NUMERIC_POUND ;/* # */ }return -EINVAL ; }/* Completes a request by converting the data into events for the * input subsystem. -* -* The key parameter can be cascaded: key2 << 8 | key1 */ static void report_key (struct yealink_dev *yld,int key) {@@ -240,17 +237,13 @@ static void report_key(struct yealink_dev *yld, int key)if (yld->key_code >=0 ) {/* old key up */ -input_report_key (idev, yld->key_code &0xff ,0 ); -if (yld->key_code >>8 ) -input_report_key (idev, yld->key_code >>8 ,0 ); +input_report_key (idev, yld->key_code,0 ); } yld->key_code = key;if (key >=0 ) {/* new valid key */ -input_report_key (idev, key &0xff ,1 ); -if (key >>8 ) -input_report_key (idev, key >>8 ,1 ); +input_report_key (idev, key,1 ); }input_sync (idev); }@@ -966,9 +959,7 @@ static int usb_probe(struct usb_interface *intf, const struct usb_device_id *id)for (i =0 ; i <256 ; i++) {int k =map_p1k_to_key (i);if (k >=0 ) { -set_bit (k &0xff , input_dev->keybit); -if (k >>8 ) -set_bit (k >>8 , input_dev->keybit); +set_bit (k, input_dev->keybit); } } --
Quoted 2 lines
2.1.3
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
RFC PATCH 2/2 USB: input: yealink.c: add mapping for "RING" and "MUTE" keys
In reply to Daniele ForsiAccording to the user manual of the "VOIP-3 SKY" USB phone, the RING key is used to select different ring tones and the MUTE key is used to mute the microphone.
--- drivers/input/misc/yealink.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/input/misc/yealink.c +4 -0
@@ -189,7 +189,9 @@ static int setChar(struct yealink_dev *yld, int el, int chr)* USB-P1K button layout: * * up +* ring * IN OUT +* mute * down * * pickup C hangup
@@ -207,7 +209,9 @@ static int map_p1k_to_key(int scancode)switch (scancode) {/* phone key: */ case 0x23 :return KEY_LEFT ;/* IN */ case 0x33 :return KEY_UP ;/* up */ +case 0x44 :return KEY_SOUND ;/* ring */ case 0x04 :return KEY_RIGHT ;/* OUT */ +case 0x41 :return KEY_MICMUTE ;/* mute */ case 0x24 :return KEY_DOWN ;/* down */ case 0x03 :return KEY_ENTER ;/* pickup */ case 0x14 :return KEY_BACKSPACE ;/* C */
Signature · 1 line
2.1.3
A message that is not in the archive (sent off-list or not yet received): CAMFK4TM4zVNWBt14vS3T=eQMtwM2OMLW4Wf5dfHS1vKVoPrQiw@mail.gmail.com
Henk
maintainerRFC PATCH 2/2 USB: input: yealink.c: add mapping for "RING" and "MUTE" keys
Quoted 37 lines · Daniele Forsi
According to the user manual of the "VOIP-3 SKY" USB phone, the RING key is used to select different ring tones and the MUTE key is used to mute the microphone.
Signed-off-by Daniele Forsi <[email protected]>--- drivers/input/misc/yealink.c | 4 ++++ 1 file changed, 4 insertions(+)drivers/input/misc/yealink.c +4
-1@@ -189,7 +189,9 @@ static int setChar(struct yealink_dev *yld, int el, int chr)* USB-P1K button layout: * * up +* ring * IN OUT +* mute * down * * pickup C hangup @@ -207,7 +209,9 @@ static int map_p1k_to_key(int scancode)switch (scancode) {/* phone key: */ case 0x23 :return KEY_LEFT ;/* IN */ case 0x33 :return KEY_UP ;/* up */ +case 0x44 :return KEY_SOUND ;/* ring */ case 0x04 :return KEY_RIGHT ;/* OUT */ +case 0x41 :return KEY_MICMUTE ;/* mute */ case 0x24 :return KEY_DOWN ;/* down */ case 0x03 :return KEY_ENTER ;/* pickup */ case 0x14 :return KEY_BACKSPACE ;/* C */ --2.1.3
A message that is not in the archive (sent off-list or not yet received): CAMFK4TMNuQEao5n3XPjn4ZSkX0eTtfkWO+h=bPbyHthyJYebPw@mail.gmail.com
Henk
maintainercover USB: input: yealink.c: update key mappings
Hi Danielle,
Thanks for the '#' fix!
Quoted 1 line
DRIVER_VERSIONshould be updated?
Yes seems logical, considering that the API has changed slightly by using NUMERIC scan commands. I would suggest:
#define DRIVER_VERSION "yld-20141222"
So users something is new and can track changes to your patches more easily.
Quoted 1 line
are both patches suitable for stable?
I would have no objection to that :)
Regards,
Henk Vergonet
Quoted 32 lines · Daniele Forsi
Hello,
I have an Yealink USB phone which is handled by the
yealink.cdriver but the '#' key returns an unexpected value and keys labeled "RING" and "MUTE" do not return any value to userspace.In the first patch of this series I replace the combination
KEY_LEFTSHIFTandKEY_3withKEY_NUMERIC_POUNDand I also replace other keys for internal consistency and with thecm109.cdriver, which according to the comment in the code is derived from this one, is this the right approach?In the second patch I add two additional keys which could be handled by userspace:
"RING" whose purpose according to the user manual is to cycle all available ringtones "MUTE" whose purpose is to mute the USB microphone
which KEY_* values should be used for them?I have two more questions:
DRIVER_VERSIONshould be updated?
are both patches suitable for stable?Daniele Forsi (2):
USB: input:yealink.c: use KEY_NUMERIC_* for numeric keys, star and
pound
USB: input:yealink.c: add mapping for "RING" and "MUTE" keysdrivers/input/misc/yealink.c | 43 +++++++++++++++++++------------------------ 1 file changed, 19 insertions(+), 24 deletions(-)--
2.1.3