Skip to content

Commit b8e5fdf

Browse files
daphJiri Kosina
authored andcommitted
HID: elecom: Add support for ELECOM HUGE Plus M-HT1MRBK
New model in the ELECOM HUGE trackball line that has 8 buttons but the report descriptor specifies only 5. The HUGE Plus supports connecting via Bluetooth, 2.4GHz wireless USB dongle, and directly via a USB-C cable. Each connection type reports a different device id, 01AA for cable, 01AB for USB dongle, and 01AC for Bluetooth. This patch adds these device IDs and applies the fixups similar to the other ELECOM devices to get all 8 buttons working for all 3 connection types. For reference, the usbhid-dump output: 001:013:001:DESCRIPTOR 1769085639.598405 05 01 09 02 A1 01 85 01 09 01 A1 00 05 09 19 01 29 05 15 00 25 01 75 01 95 05 81 02 75 03 95 01 81 01 05 01 09 30 09 31 16 01 80 26 FF 7F 75 10 95 02 81 06 09 38 15 81 25 7F 75 08 95 01 81 06 05 0C 0A 38 02 15 81 25 7F 75 08 95 01 81 06 C0 C0 05 0C 09 01 A1 01 85 02 15 01 26 8C 02 19 01 2A 8C 02 75 10 95 01 81 00 C0 05 01 09 80 A1 01 85 03 09 82 09 81 09 83 15 00 25 01 19 01 29 03 75 01 95 03 81 02 95 05 81 01 C0 06 01 FF 09 00 A1 01 85 08 09 00 15 00 26 FF 00 75 08 95 07 81 02 C0 06 02 FF 09 02 A1 01 85 06 09 02 15 00 26 FF 00 75 08 95 07 B1 02 C0 Signed-off-by: David Phillips <david@profile.sh> Signed-off-by: Jiri Kosina <jkosina@suse.com>
1 parent 79b95d7 commit b8e5fdf

4 files changed

Lines changed: 23 additions & 0 deletions

File tree

drivers/hid/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,7 @@ config HID_ELECOM
369369
- EX-G Trackballs (M-XT3DRBK, M-XT3URBK)
370370
- DEFT Trackballs (M-DT1DRBK, M-DT1URBK, M-DT2DRBK, M-DT2URBK)
371371
- HUGE Trackballs (M-HT1DRBK, M-HT1URBK)
372+
- HUGE Plus Trackball (M-HT1MRBK)
372373

373374
config HID_ELO
374375
tristate "ELO USB 4000/4500 touchscreen"

drivers/hid/hid-elecom.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
* - EX-G Trackballs (M-XT3DRBK, M-XT3URBK, M-XT4DRBK)
66
* - DEFT Trackballs (M-DT1DRBK, M-DT1URBK, M-DT2DRBK, M-DT2URBK)
77
* - HUGE Trackballs (M-HT1DRBK, M-HT1URBK)
8+
* - HUGE Plus Trackball (M-HT1MRBK)
89
*
910
* Copyright (c) 2010 Richard Nauber <Richard.Nauber@gmail.com>
1011
* Copyright (c) 2016 Yuxuan Shui <yshuiv7@gmail.com>
@@ -123,12 +124,25 @@ static const __u8 *elecom_report_fixup(struct hid_device *hdev, __u8 *rdesc,
123124
*/
124125
mouse_button_fixup(hdev, rdesc, *rsize, 22, 30, 24, 16, 8);
125126
break;
127+
case USB_DEVICE_ID_ELECOM_M_HT1MRBK:
128+
case USB_DEVICE_ID_ELECOM_M_HT1MRBK_01AB:
129+
case USB_DEVICE_ID_ELECOM_M_HT1MRBK_01AC:
130+
/*
131+
* Report descriptor format:
132+
* 24: button bit count
133+
* 28: padding bit count
134+
* 22: button report size
135+
* 16: button usage maximum
136+
*/
137+
mouse_button_fixup(hdev, rdesc, *rsize, 24, 28, 22, 16, 8);
138+
break;
126139
}
127140
return rdesc;
128141
}
129142

130143
static const struct hid_device_id elecom_devices[] = {
131144
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) },
145+
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1MRBK_01AC) },
132146
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XGL20DLBK) },
133147
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XT3URBK_00FB) },
134148
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XT3URBK_018F) },
@@ -142,6 +156,8 @@ static const struct hid_device_id elecom_devices[] = {
142156
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1URBK_019B) },
143157
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1DRBK_010D) },
144158
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1DRBK_011C) },
159+
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1MRBK) },
160+
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1MRBK_01AB) },
145161
{ }
146162
};
147163
MODULE_DEVICE_TABLE(hid, elecom_devices);

drivers/hid/hid-ids.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,9 @@
465465
#define USB_DEVICE_ID_ELECOM_M_HT1URBK_019B 0x019b
466466
#define USB_DEVICE_ID_ELECOM_M_HT1DRBK_010D 0x010d
467467
#define USB_DEVICE_ID_ELECOM_M_HT1DRBK_011C 0x011c
468+
#define USB_DEVICE_ID_ELECOM_M_HT1MRBK 0x01aa
469+
#define USB_DEVICE_ID_ELECOM_M_HT1MRBK_01AB 0x01ab
470+
#define USB_DEVICE_ID_ELECOM_M_HT1MRBK_01AC 0x01ac
468471

469472
#define USB_VENDOR_ID_DREAM_CHEEKY 0x1d34
470473
#define USB_DEVICE_ID_DREAM_CHEEKY_WN 0x0004

drivers/hid/hid-quirks.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
420420
#if IS_ENABLED(CONFIG_HID_ELECOM)
421421
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) },
422422
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XGL20DLBK) },
423+
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1MRBK_01AC) },
423424
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XT3URBK_00FB) },
424425
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XT3URBK_018F) },
425426
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XT3DRBK_00FC) },
@@ -432,6 +433,8 @@ static const struct hid_device_id hid_have_special_driver[] = {
432433
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1URBK_019B) },
433434
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1DRBK_010D) },
434435
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1DRBK_011C) },
436+
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1MRBK) },
437+
{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1MRBK_01AB) },
435438
#endif
436439
#if IS_ENABLED(CONFIG_HID_ELO)
437440
{ HID_USB_DEVICE(USB_VENDOR_ID_ELO, 0x0009) },

0 commit comments

Comments
 (0)