Skip to content

Commit 29f316a

Browse files
kikeiJiri Kosina
authored andcommitted
HID: elecom: add support for TrackBall 056E:011C
Make function buttons on ELECOM M-HT1DRBK trackball mouse work. This model has two devices with different device IDs (010D and 011C). Both of them misreports the number of buttons as 5 in the report descriptor, even though they have 8 buttons. hid-elecom overwrites the report to fix them, but supports only on 010D and does not work on 011C. This patch fixes 011C in the similar way but with specialized position parameters. In fact, it is sufficient to rewrite only 17th byte (05 -> 08). However I followed the existing way. Signed-off-by: Takahiro Fujii <[email protected]> Signed-off-by: Jiri Kosina <[email protected]>
1 parent 3782c0d commit 29f316a

File tree

3 files changed

+18
-4
lines changed

3 files changed

+18
-4
lines changed

drivers/hid/hid-elecom.c

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
* Copyright (c) 2017 Alex Manoussakis <[email protected]>
1313
* Copyright (c) 2017 Tomasz Kramkowski <[email protected]>
1414
* Copyright (c) 2020 YOSHIOKA Takuma <[email protected]>
15+
* Copyright (c) 2022 Takahiro Fujii <[email protected]>
1516
*/
1617

1718
/*
@@ -89,7 +90,7 @@ static __u8 *elecom_report_fixup(struct hid_device *hdev, __u8 *rdesc,
8990
case USB_DEVICE_ID_ELECOM_M_DT1URBK:
9091
case USB_DEVICE_ID_ELECOM_M_DT1DRBK:
9192
case USB_DEVICE_ID_ELECOM_M_HT1URBK:
92-
case USB_DEVICE_ID_ELECOM_M_HT1DRBK:
93+
case USB_DEVICE_ID_ELECOM_M_HT1DRBK_010D:
9394
/*
9495
* Report descriptor format:
9596
* 12: button bit count
@@ -99,6 +100,16 @@ static __u8 *elecom_report_fixup(struct hid_device *hdev, __u8 *rdesc,
99100
*/
100101
mouse_button_fixup(hdev, rdesc, *rsize, 12, 30, 14, 20, 8);
101102
break;
103+
case USB_DEVICE_ID_ELECOM_M_HT1DRBK_011C:
104+
/*
105+
* Report descriptor format:
106+
* 22: button bit count
107+
* 30: padding bit count
108+
* 24: button report size
109+
* 16: button usage maximum
110+
*/
111+
mouse_button_fixup(hdev, rdesc, *rsize, 22, 30, 24, 16, 8);
112+
break;
102113
}
103114
return rdesc;
104115
}
@@ -112,7 +123,8 @@ static const struct hid_device_id elecom_devices[] = {
112123
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_DT1URBK) },
113124
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_DT1DRBK) },
114125
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1URBK) },
115-
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1DRBK) },
126+
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1DRBK_010D) },
127+
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1DRBK_011C) },
116128
{ }
117129
};
118130
MODULE_DEVICE_TABLE(hid, elecom_devices);

drivers/hid/hid-ids.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,8 @@
428428
#define USB_DEVICE_ID_ELECOM_M_DT1URBK 0x00fe
429429
#define USB_DEVICE_ID_ELECOM_M_DT1DRBK 0x00ff
430430
#define USB_DEVICE_ID_ELECOM_M_HT1URBK 0x010c
431-
#define USB_DEVICE_ID_ELECOM_M_HT1DRBK 0x010d
431+
#define USB_DEVICE_ID_ELECOM_M_HT1DRBK_010D 0x010d
432+
#define USB_DEVICE_ID_ELECOM_M_HT1DRBK_011C 0x011c
432433

433434
#define USB_VENDOR_ID_DREAM_CHEEKY 0x1d34
434435
#define USB_DEVICE_ID_DREAM_CHEEKY_WN 0x0004

drivers/hid/hid-quirks.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,8 @@ static const struct hid_device_id hid_have_special_driver[] = {
393393
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_DT1URBK) },
394394
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_DT1DRBK) },
395395
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1URBK) },
396-
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1DRBK) },
396+
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1DRBK_010D) },
397+
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1DRBK_011C) },
397398
#endif
398399
#if IS_ENABLED(CONFIG_HID_ELO)
399400
{ HID_USB_DEVICE(USB_VENDOR_ID_ELO, 0x0009) },

0 commit comments

Comments
 (0)