Problem with Genius Ergomedia 700
Hello.
I have Genius Ergomedia 700 USB keyboard but not all "multimedia" keys are working.
In manual it's written that "My document/My picture/My music/Scrolling buttons/Left and right scrolling functions/Zoom in/Zoom out/Messenger/Messenger status/Webcam/Audio 1-3/Word/Excel/Powerpoint do not function unless driver has been installed". And exactly those keys do not working while other multimedia keys are working fine.
What can be done to enable those additional multimedia keys?
When plugging it in it appears as 2 input devices:
input: KYE 4D device Ergomedia as /class/input/input1
input: USB HID v1.10 Keyboard [KYE 4D device Ergomedia] on usb-0000:00:1d.1-1
input: KYE 4D device Ergomedia as /class/input/input2
input: USB HID v1.10 Device [KYE 4D device Ergomedia] on usb-0000:00:1d.1-1
lsusb -v output in attachment.
Alex.
Bus 003 Device 002: ID 05d5:8001 Super Gate Technology Co., Ltd Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x05d5 Super Gate Technology Co., Ltd
idProduct 0x8001
bcdDevice 1.00
iManufacturer 1 KYE 4D device
iProduct 2 Ergomedia
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 59
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 2 Ergomedia
bmAttributes 0xa0
Remote Wakeup
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Devices
bInterfaceSubClass 1 Boot Interface Subclass
bInterfaceProtocol 1 Keyboard
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.10
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 65
Report Descriptor: (length is 65)
Item(Global): Usage Page, data= [ 0x01 ] 1
Generic Desktop Controls
Item(Local ): Usage, data= [ 0x06 ] 6
Keyboard
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Usage Page, data= [ 0x07 ] 7
Keyboard
Item(Local ): Usage Minimum, data= [ 0xe0 ] 224
Control Left
Item(Local ): Usage Maximum, data= [ 0xe7 ] 231
GUI Right
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0x01 ] 1
Item(Global): Report Count, data= [ 0x08 ] 8
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Report Count, data= [ 0x08 ] 8
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Main ): Input, data= [ 0x01 ] 1
Constant Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Usage Page, data= [ 0x08 ] 8
LEDs
Item(Local ): Usage Minimum, data= [ 0x01 ] 1
NumLock
Item(Local ): Usage Maximum, data= [ 0x03 ] 3
Scroll Lock
Item(Global): Report Count, data= [ 0x03 ] 3
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Main ): Output, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Global): Report Size, data= [ 0x05 ] 5
Item(Main ): Output, data= [ 0x01 ] 1
Constant Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Usage Page, data= [ 0x07 ] 7
Keyboard
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
No Event
Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Count, data= [ 0x06 ] 6
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Main ): Input, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 10
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Devices
bInterfaceSubClass 1 Boot Interface Subclass
bInterfaceProtocol 2 Mouse
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.10
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 50
Report Descriptor: (length is 50)
Item(Global): Usage Page, data= [ 0x0c ] 12
Consumer
Item(Local ): Usage, data= [ 0x01 ] 1
Consumer Control
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x01 ] 1
Item(Local ): Usage Minimum, data= [ 0x00 ] 0
Unassigned
Item(Local ): Usage Maximum, data= [ 0xf0 0x02 ] 752
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xf0 0x02 ] 752
Item(Global): Report Count, data= [ 0x01 ] 1
Item(Global): Report Size, data= [ 0x10 ] 16
Item(Main ): Input, data= [ 0x00 ] 0
Data Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Item(Global): Usage Page, data= [ 0x01 ] 1
Generic Desktop Controls
Item(Local ): Usage, data= [ 0x80 ] 128
System Control
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Global): Report ID, data= [ 0x02 ] 2
Item(Local ): Usage Minimum, data= [ 0x81 ] 129
System Power Down
Item(Local ): Usage Maximum, data= [ 0x83 ] 131
System Wake Up
Item(Global): Logical Maximum, data= [ 0x01 ] 1
Item(Global): Report Size, data= [ 0x01 ] 1
Item(Global): Report Count, data= [ 0x03 ] 3
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Report Count, data= [ 0x05 ] 5
Item(Main ): Input, data= [ 0x01 ] 1
Constant Array Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Main ): End Collection, data=none
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 10Quoted 7 lines · Alex Torkhov
I have Genius Ergomedia 700 USB keyboard but not all "multimedia" keys are working. In manual it's written that "My document/My picture/My music/Scrolling buttons/Left and right scrolling functions/Zoom in/Zoom out/Messenger/Messenger status/Webcam/Audio 1-3/Word/Excel/Powerpoint do not function unless driver has been installed". And exactly those keys do not working while other multimedia keys are working fine. What can be done to enable those additional multimedia keys?
Hi Alex,
please compile your kernel with CONFIG_HID_DEBUG, modprobe the hid module with 'debug=1' parameter, and send me the dmesg output that appears when you connect the keyboard, and also when you press the individual buttons. Please annotate the output (i.e. "this happened when I pressed the XYZ key").
Thanks,
Signature · 1 line
Jiri Kosina
Quoted 5 lines · Jiri Kosina
Quoted 2 lines · Alex Torkhov
I have Genius Ergomedia 700 USB keyboard but not all "multimedia" keys are working. In manual it's written that "My document/My picture/My music/Scrolling buttons/Left and right scrolling functions/Zoom in/Zoom out/Messenger/Messenger status/Webcam/Audio 1-3/Word/Excel/Powerpoint do not function unless driver has been installed". And exactly those keys do not working while other multimedia keys are working fine. What can be done to enable those additional multimedia keys?
please compile your kernel with
CONFIG_HID_DEBUG, modprobe the hid module with 'debug=1' parameter, and send me the dmesg output that appears when you connect the keyboard, and also when you press the individual buttons. Please annotate the output (i.e. "this happened when I pressed the XYZ key").
Here is debug output with my comments in attachment. I was gathering it with hid.debug=1 kernel param and also with setting /sys/module/hid/parameters/debug because my hid module is compiled into kernel but it's the same as you suggested, I think.
Alex.
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): [email protected]
Hi.
Sorry, I forgot about this as I don't have access to that keyboard anymore. What's the status of this patch? If it's still not applied then, I think, it will work and could be merged.
Alex.
Quoted 91 lines · Jiri Kosina
Quoted 5 lines · Alexey Torkhov
Quoted 2 lines
as a key to
input.hright now, sorry; if you have any idea for alternatives that it would make sense to map them, please let me knowIt could be mapped to AL Logon/Logoff (19D) - if I remember, it doesn't written what it should logon or logoff - user session or any other thing like IM client.
Could you please try the patch below and report back whether it makes all the buttons behave correctly? If so, I'd ask Dmitry for ACK with respect to adding new
KEY_definitions.drivers/hid/hid-input-quirks.c +24
-1@@ -276,6 +276,24 @@ static int quirk_btc_8193(struct hid_usage *usage, struct input_dev *input,return 1 ; } +static int quirk_genius_ergomedia_700 (struct hid_usage *usage,struct input_dev *input, +unsigned long **bit,int *max) +{ +if ((usage->hid &HID_USAGE_PAGE ) !=HID_UP_CONSUMER ) +return 0 ; + +switch (usage->hid &HID_USAGE ) { +case 0x029d :map_key_clear (KEY_PROG1 );break ; +case 0x029e :map_key_clear (KEY_PROG2 );break ; +case 0x029f :map_key_clear (KEY_PROG3 );break ; +case 0x02a1 :map_key_clear (KEY_LOGON_LOGOFF );break ; +case 0x02a2 :map_key_clear (KEY_CAMERA );break ; +case 0x02a3 :map_key_clear (KEY_DOCUMENTS );break ; +case 0x02a4 :map_key_clear (KEY_AUDIO );break ; +case 0x02a5 :map_key_clear (KEY_PRESENTATION );break ; + +} +#define VENDOR_ID_BELKIN 0x1020#define DEVICE_ID_BELKIN_WIRELESS_KEYBOARD 0x0006@@ -306,6 +324,9 @@ static int quirk_btc_8193(struct hid_usage *usage, struct input_dev *input,#define VENDOR_ID_PETALYNX 0x18b1#define DEVICE_ID_PETALYNX_MAXTER_REMOTE 0x0037 +#define VENDOR_ID_SUPERGATE 0x05d5 +#define DEVICE_ID_GENIUS_ERGOMEDIA_700 0x8001 + static const struct hid_input_blacklist { __u16 idVendor; __u16 idProduct;@@ -332,7 +353,9 @@ static const struct hid_input_blacklist { { VENDOR_ID_MONTEREY, DEVICE_ID_GENIUS_KB29E, quirk_cherry_genius_29e }, { VENDOR_ID_PETALYNX, DEVICE_ID_PETALYNX_MAXTER_REMOTE, quirk_petalynx_remote }, - + + { VENDOR_ID_SUPERGATE, DEVICE_ID_GENIUS_ERGOMEDIA_700, quirk_genius_ergomedia_700 }, + { 0, 0, 0 } };drivers/hid/hid-input.c +3
-0@@ -635,8 +635,11 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fielcase 0x192 :map_key_clear (KEY_CALC );break ;case 0x194 :map_key_clear (KEY_FILE );break ;case 0x196 :map_key_clear (KEY_WWW );break ; +case 0x19b :map_key_clear (KEY_LOGON );break ;case 0x19c :map_key_clear (KEY_LOGOFF );break ; +case 0x19d :map_key_clear (KEY_LOGON_LOGOFF );break ;case 0x19e :map_key_clear (KEY_COFFEE );break ; +case 0x1a2 :map_key_clear (KEY_TASKSELECT );break ;case 0x1a6 :map_key_clear (KEY_HELP );break ;case 0x1a7 :map_key_clear (KEY_DOCUMENTS );break ;case 0x1ab :map_key_clear (KEY_SPELLCHECK );break ;include/linux/input.h +3
-0@@ -536,6 +536,9 @@ struct input_absinfo {#define KEY_FRAMEFORWARD 0x1b5#define KEY_CONTEXT_MENU 0x1b6/* GenDesc - system context menu */ +#define KEY_TASKSELECT 0x1b7/* Consumer - AL select task */ +#define KEY_LOGON_LOGOFF 0x1b8/* Consumer - AL Logon/Logoff */ +#define KEY_LOGON 0x1b9/* Consumer - AL Logon */ #define KEY_DEL_EOL 0x1c0#define KEY_DEL_EOS 0x1c1
Quoted 1 line · Alexey Torkhov
Sorry, I forgot about this as I don't have access to that keyboard anymore. What's the status of this patch? If it's still not applied then, I think, it will work and could be merged.
Hi Alex,
it is not applied, I always prefer to have the code tested by someone who actually owns the hardware, before just "blindly" merging it.
Signature · 2 lines
Jiri Kosina SUSE Labs