Skip to content

Commit a31980d

Browse files
committed
Merge tag 'hid-for-linus-2026020901' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid
Pull HID updates from Jiri Kosina: - global switch of HID drivers to use pm_*ptr instead of #ifdef CONFIG_PM* (Bastien Nocera) - support for new firmware handling in intel-ish-hid (Vishnu Sankar) - support for HID output reports in the Quicki2c in intel-thc (Even Xu) - solidify register configuration updates in intel-thc (Even Xu) - Support for Rock band 4 PS4 and PS5 guitars (Rosalie Wanders) - fn lock and WMI fan control handling improvements in certain Asus models (ROG, ProArt P16) (Ionut Nechita, Connor Belli) - fix for potential NULL pointer dereference during warm reset in intel-ish-hid (Ryan Lin) - fix for potential NULL pointer derefence in probe error paths in hid-pl (Oliver Neukum) - various other small assorted fixes and new device ID additions / device-specific quirks * tag 'hid-for-linus-2026020901' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid: (41 commits) HID: sony: add dongle device IDs for CRKD Gibson SG HID: Intel-thc-hid: Intel-thc: Fix wrong register fields updating HID: intel-ish-hid: fix NULL-ptr-deref in ishtp_bus_remove_all_clients HID: logitech-hidpp: Add support for Logitech K980 HID: logitech-dj: Differentiate "invalid device index" error HID: sony: Use pm_ptr instead of #ifdef CONFIG_PM HID: wacom: Use pm_ptr instead of #ifdef CONFIG_PM HID: uclogic: Use pm_ptr instead of #ifdef CONFIG_PM HID: hid-sensor-hub: Use pm_ptr instead of #ifdef CONFIG_PM HID: picolcd_core: Use pm_ptr instead of #ifdef CONFIG_PM HID: nintendo: Use pm_ptr instead of #ifdef CONFIG_PM HID: logitech-dj: Use pm_ptr instead of #ifdef CONFIG_PM HID: lenovo: Use pm_ptr instead of #ifdef CONFIG_PM HID: asus: Use pm_ptr instead of #ifdef CONFIG_PM HID: appletb-kbd: Use pm_ptr instead of #ifdef CONFIG_PM HID: hid-alps: Use pm_ptr instead of #ifdef CONFIG_PM HID: multitouch: add eGalaxTouch EXC3188 support HID: elecom: Add support for ELECOM HUGE Plus M-HT1MRBK HID: sony: add support for bluetooth Rock Band 4 PS4 guitars HID: logitech-hidpp: Check maxfield in hidpp_get_report_length() ...
2 parents 532355a + 33312c4 commit a31980d

35 files changed

Lines changed: 676 additions & 132 deletions

Documentation/hid/intel-ish-hid.rst

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -413,23 +413,32 @@ Vendors who wish to upstream their custom firmware should follow these guideline
413413

414414
- The firmware filename should use one of the following patterns:
415415

416+
- ``ish_${intel_plat_gen}_${SYS_VENDOR_CRC32}_${PRODUCT_FAMILY_CRC32}_${PRODUCT_NAME_CRC32}_${PRODUCT_SKU_CRC32}.bin``
417+
- ``ish_${intel_plat_gen}_${SYS_VENDOR_CRC32}_${PRODUCT_FAMILY_CRC32}_${PRODUCT_SKU_CRC32}.bin``
418+
- ``ish_${intel_plat_gen}_${SYS_VENDOR_CRC32}_${PRODUCT_FAMILY_CRC32}_${PRODUCT_NAME_CRC32}.bin``
419+
- ``ish_${intel_plat_gen}_${SYS_VENDOR_CRC32}_${PRODUCT_FAMILY_CRC32}.bin``
416420
- ``ish_${intel_plat_gen}_${SYS_VENDOR_CRC32}_${PRODUCT_NAME_CRC32}_${PRODUCT_SKU_CRC32}.bin``
417421
- ``ish_${intel_plat_gen}_${SYS_VENDOR_CRC32}_${PRODUCT_SKU_CRC32}.bin``
418422
- ``ish_${intel_plat_gen}_${SYS_VENDOR_CRC32}_${PRODUCT_NAME_CRC32}.bin``
419423
- ``ish_${intel_plat_gen}_${SYS_VENDOR_CRC32}.bin``
420424

421425
- ``${intel_plat_gen}`` indicates the Intel platform generation (e.g., ``lnlm`` for Lunar Lake) and must not exceed 8 characters in length.
422426
- ``${SYS_VENDOR_CRC32}`` is the CRC32 checksum of the ``sys_vendor`` value from the DMI field ``DMI_SYS_VENDOR``.
427+
- ``${PRODUCT_FAMILY_CRC32}`` is the CRC32 checksum of the ``product_family`` value from the DMI field ``DMI_PRODUCT_FAMILY``.
423428
- ``${PRODUCT_NAME_CRC32}`` is the CRC32 checksum of the ``product_name`` value from the DMI field ``DMI_PRODUCT_NAME``.
424429
- ``${PRODUCT_SKU_CRC32}`` is the CRC32 checksum of the ``product_sku`` value from the DMI field ``DMI_PRODUCT_SKU``.
425430

426431
During system boot, the ISH Linux driver will attempt to load the firmware in the following order, prioritizing custom firmware with more precise matching patterns:
427432

428-
1. ``intel/ish/ish_${intel_plat_gen}_${SYS_VENDOR_CRC32}_${PRODUCT_NAME_CRC32}_${PRODUCT_SKU_CRC32}.bin``
429-
2. ``intel/ish/ish_${intel_plat_gen}_${SYS_VENDOR_CRC32}_${PRODUCT_SKU_CRC32}.bin``
430-
3. ``intel/ish/ish_${intel_plat_gen}_${SYS_VENDOR_CRC32}_${PRODUCT_NAME_CRC32}.bin``
431-
4. ``intel/ish/ish_${intel_plat_gen}_${SYS_VENDOR_CRC32}.bin``
432-
5. ``intel/ish/ish_${intel_plat_gen}.bin``
433+
1. ``intel/ish/ish_${intel_plat_gen}_${SYS_VENDOR_CRC32}_${PRODUCT_FAMILY_CRC32}_${PRODUCT_NAME_CRC32}_${PRODUCT_SKU_CRC32}.bin``
434+
2. ``intel/ish/ish_${intel_plat_gen}_${SYS_VENDOR_CRC32}_${PRODUCT_FAMILY_CRC32}_${PRODUCT_SKU_CRC32}.bin``
435+
3. ``intel/ish/ish_${intel_plat_gen}_${SYS_VENDOR_CRC32}_${PRODUCT_FAMILY_CRC32}_${PRODUCT_NAME_CRC32}.bin``
436+
4. ``intel/ish/ish_${intel_plat_gen}_${SYS_VENDOR_CRC32}_${PRODUCT_FAMILY_CRC32}.bin``
437+
5. ``intel/ish/ish_${intel_plat_gen}_${SYS_VENDOR_CRC32}_${PRODUCT_NAME_CRC32}_${PRODUCT_SKU_CRC32}.bin``
438+
6. ``intel/ish/ish_${intel_plat_gen}_${SYS_VENDOR_CRC32}_${PRODUCT_SKU_CRC32}.bin``
439+
7. ``intel/ish/ish_${intel_plat_gen}_${SYS_VENDOR_CRC32}_${PRODUCT_NAME_CRC32}.bin``
440+
8. ``intel/ish/ish_${intel_plat_gen}_${SYS_VENDOR_CRC32}.bin``
441+
9. ``intel/ish/ish_${intel_plat_gen}.bin``
433442

434443
The driver will load the first matching firmware and skip the rest. If no matching firmware is found, it will proceed to the next pattern in the specified order. If all searches fail, the default Intel firmware, listed last in the order above, will be loaded.
435444

drivers/hid/Kconfig

Lines changed: 9 additions & 2 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"
@@ -1015,6 +1016,12 @@ config HID_PXRC
10151016
To compile this driver as a module, choose M here: the
10161017
module will be called hid-pxrc.
10171018

1019+
config HID_RAPOO
1020+
tristate "Rapoo non-fully HID-compliant devices"
1021+
help
1022+
Support for Rapoo devices that are not fully compliant with the
1023+
HID standard.
1024+
10181025
config HID_RAZER
10191026
tristate "Razer non-fully HID-compliant devices"
10201027
help
@@ -1084,7 +1091,7 @@ config HID_SIGMAMICRO
10841091
- Rapoo V500
10851092

10861093
config HID_SONY
1087-
tristate "Sony PS2/3/4 accessories"
1094+
tristate "Sony PS2/3/4/5 accessories"
10881095
depends on USB_HID
10891096
depends on NEW_LEDS
10901097
depends on LEDS_CLASS
@@ -1094,12 +1101,12 @@ config HID_SONY
10941101
Support for
10951102

10961103
* Sony PS3 6-axis controllers
1097-
* Sony PS4 DualShock 4 controllers
10981104
* Buzz controllers
10991105
* Sony PS3 Blue-ray Disk Remote Control (Bluetooth)
11001106
* Logitech Harmony adapter for Sony Playstation 3 (Bluetooth)
11011107
* Guitar Hero Live PS3, Wii U and PS4 guitar dongles
11021108
* Guitar Hero PS3 and PC guitar dongles
1109+
* Rock Band 4 PS4 and PS5 guitars
11031110

11041111
config SONY_FF
11051112
bool "Sony PS2/3/4 accessories force feedback support"

drivers/hid/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ obj-$(CONFIG_HID_PLANTRONICS) += hid-plantronics.o
113113
obj-$(CONFIG_HID_PLAYSTATION) += hid-playstation.o
114114
obj-$(CONFIG_HID_PRIMAX) += hid-primax.o
115115
obj-$(CONFIG_HID_PXRC) += hid-pxrc.o
116+
obj-$(CONFIG_HID_RAPOO) += hid-rapoo.o
116117
obj-$(CONFIG_HID_RAZER) += hid-razer.o
117118
obj-$(CONFIG_HID_REDRAGON) += hid-redragon.o
118119
obj-$(CONFIG_HID_RETRODE) += hid-retrode.o

drivers/hid/hid-alps.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -840,10 +840,8 @@ static struct hid_driver alps_driver = {
840840
.raw_event = alps_raw_event,
841841
.input_mapping = alps_input_mapping,
842842
.input_configured = alps_input_configured,
843-
#ifdef CONFIG_PM
844-
.resume = alps_post_resume,
845-
.reset_resume = alps_post_reset,
846-
#endif
843+
.resume = pm_ptr(alps_post_resume),
844+
.reset_resume = pm_ptr(alps_post_reset),
847845
};
848846

849847
module_hid_driver(alps_driver);

drivers/hid/hid-apple.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,7 @@ static const struct apple_key_translation swapped_fn_leftctrl_keys[] = {
354354
};
355355

356356
static const struct apple_non_apple_keyboard non_apple_keyboards[] = {
357+
{ "SONiX KN85 Keyboard" },
357358
{ "SONiX USB DEVICE" },
358359
{ "SONiX AK870 PRO" },
359360
{ "Keychron" },

drivers/hid/hid-appletb-kbd.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,6 @@ static void appletb_kbd_remove(struct hid_device *hdev)
466466
hid_hw_stop(hdev);
467467
}
468468

469-
#ifdef CONFIG_PM
470469
static int appletb_kbd_suspend(struct hid_device *hdev, pm_message_t msg)
471470
{
472471
struct appletb_kbd *kbd = hid_get_drvdata(hdev);
@@ -485,7 +484,6 @@ static int appletb_kbd_reset_resume(struct hid_device *hdev)
485484

486485
return 0;
487486
}
488-
#endif
489487

490488
static const struct hid_device_id appletb_kbd_hid_ids[] = {
491489
/* MacBook Pro's 2018, 2019, with T2 chip: iBridge Display */
@@ -501,10 +499,8 @@ static struct hid_driver appletb_kbd_hid_driver = {
501499
.remove = appletb_kbd_remove,
502500
.event = appletb_kbd_hid_event,
503501
.input_configured = appletb_kbd_input_configured,
504-
#ifdef CONFIG_PM
505-
.suspend = appletb_kbd_suspend,
506-
.reset_resume = appletb_kbd_reset_resume,
507-
#endif
502+
.suspend = pm_ptr(appletb_kbd_suspend),
503+
.reset_resume = pm_ptr(appletb_kbd_reset_resume),
508504
.driver.dev_groups = appletb_kbd_groups,
509505
};
510506
module_hid_driver(appletb_kbd_hid_driver);

drivers/hid/hid-asus.c

Lines changed: 110 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
/*
2424
*/
2525

26+
#include <linux/acpi.h>
2627
#include <linux/dmi.h>
2728
#include <linux/hid.h>
2829
#include <linux/module.h>
@@ -57,6 +58,16 @@ MODULE_DESCRIPTION("Asus HID Keyboard and TouchPad");
5758
#define ROG_ALLY_X_MIN_MCU 313
5859
#define ROG_ALLY_MIN_MCU 319
5960

61+
/* Spurious HID codes sent by QUIRK_ROG_NKEY_KEYBOARD devices */
62+
#define ASUS_SPURIOUS_CODE_0XEA 0xea
63+
#define ASUS_SPURIOUS_CODE_0XEC 0xec
64+
#define ASUS_SPURIOUS_CODE_0X02 0x02
65+
#define ASUS_SPURIOUS_CODE_0X8A 0x8a
66+
#define ASUS_SPURIOUS_CODE_0X9E 0x9e
67+
68+
/* Special key codes */
69+
#define ASUS_FAN_CTRL_KEY_CODE 0xae
70+
6071
#define SUPPORT_KBD_BACKLIGHT BIT(0)
6172

6273
#define MAX_TOUCH_MAJOR 8
@@ -90,6 +101,7 @@ MODULE_DESCRIPTION("Asus HID Keyboard and TouchPad");
90101
#define QUIRK_ROG_NKEY_KEYBOARD BIT(11)
91102
#define QUIRK_ROG_CLAYMORE_II_KEYBOARD BIT(12)
92103
#define QUIRK_ROG_ALLY_XPAD BIT(13)
104+
#define QUIRK_HID_FN_LOCK BIT(14)
93105

94106
#define I2C_KEYBOARD_QUIRKS (QUIRK_FIX_NOTEBOOK_REPORT | \
95107
QUIRK_NO_INIT_REPORTS | \
@@ -133,6 +145,8 @@ struct asus_drvdata {
133145
int battery_stat;
134146
bool battery_in_query;
135147
unsigned long battery_next_query;
148+
struct work_struct fn_lock_sync_work;
149+
bool fn_lock;
136150
};
137151

138152
static int asus_report_battery(struct asus_drvdata *, u8 *, int);
@@ -314,16 +328,47 @@ static int asus_e1239t_event(struct asus_drvdata *drvdat, u8 *data, int size)
314328
return 0;
315329
}
316330

331+
/*
332+
* Send events to asus-wmi driver for handling special keys
333+
*/
334+
static int asus_wmi_send_event(struct asus_drvdata *drvdata, u8 code)
335+
{
336+
int err;
337+
u32 retval;
338+
339+
err = asus_wmi_evaluate_method(ASUS_WMI_METHODID_DEVS,
340+
ASUS_WMI_METHODID_NOTIF, code, &retval);
341+
if (err) {
342+
pr_warn("Failed to notify asus-wmi: %d\n", err);
343+
return err;
344+
}
345+
346+
if (retval != 0) {
347+
pr_warn("Failed to notify asus-wmi (retval): 0x%x\n", retval);
348+
return -EIO;
349+
}
350+
351+
return 0;
352+
}
353+
317354
static int asus_event(struct hid_device *hdev, struct hid_field *field,
318355
struct hid_usage *usage, __s32 value)
319356
{
320-
if ((usage->hid & HID_USAGE_PAGE) == 0xff310000 &&
357+
struct asus_drvdata *drvdata = hid_get_drvdata(hdev);
358+
359+
if ((usage->hid & HID_USAGE_PAGE) == HID_UP_ASUSVENDOR &&
321360
(usage->hid & HID_USAGE) != 0x00 &&
322361
(usage->hid & HID_USAGE) != 0xff && !usage->type) {
323362
hid_warn(hdev, "Unmapped Asus vendor usagepage code 0x%02x\n",
324363
usage->hid & HID_USAGE);
325364
}
326365

366+
if (drvdata->quirks & QUIRK_HID_FN_LOCK &&
367+
usage->type == EV_KEY && usage->code == KEY_FN_ESC && value == 1) {
368+
drvdata->fn_lock = !drvdata->fn_lock;
369+
schedule_work(&drvdata->fn_lock_sync_work);
370+
}
371+
327372
return 0;
328373
}
329374

@@ -348,6 +393,43 @@ static int asus_raw_event(struct hid_device *hdev,
348393
if (report->id == FEATURE_KBD_LED_REPORT_ID1 || report->id == FEATURE_KBD_LED_REPORT_ID2)
349394
return -1;
350395
if (drvdata->quirks & QUIRK_ROG_NKEY_KEYBOARD) {
396+
if (report->id == FEATURE_KBD_REPORT_ID) {
397+
/*
398+
* Fn+F5 fan control key - try to send WMI event to toggle fan mode.
399+
* If successful, block the event from reaching userspace.
400+
* If asus-wmi is unavailable or the call fails, let the event
401+
* pass to userspace so it can implement its own fan control.
402+
*/
403+
if (data[1] == ASUS_FAN_CTRL_KEY_CODE) {
404+
int ret = asus_wmi_send_event(drvdata, ASUS_FAN_CTRL_KEY_CODE);
405+
406+
if (ret == 0) {
407+
/* Successfully handled by asus-wmi, block event */
408+
return -1;
409+
}
410+
411+
/*
412+
* Warn if asus-wmi failed (but not if it's unavailable).
413+
* Let the event reach userspace in all failure cases.
414+
*/
415+
if (ret != -ENODEV)
416+
hid_warn(hdev, "Failed to notify asus-wmi: %d\n", ret);
417+
}
418+
419+
/*
420+
* ASUS ROG laptops send these codes during normal operation
421+
* with no discernable reason. Filter them out to avoid
422+
* unmapped warning messages.
423+
*/
424+
if (data[1] == ASUS_SPURIOUS_CODE_0XEA ||
425+
data[1] == ASUS_SPURIOUS_CODE_0XEC ||
426+
data[1] == ASUS_SPURIOUS_CODE_0X02 ||
427+
data[1] == ASUS_SPURIOUS_CODE_0X8A ||
428+
data[1] == ASUS_SPURIOUS_CODE_0X9E) {
429+
return -1;
430+
}
431+
}
432+
351433
/*
352434
* G713 and G733 send these codes on some keypresses, depending on
353435
* the key pressed it can trigger a shutdown event if not caught.
@@ -458,6 +540,21 @@ static int asus_kbd_disable_oobe(struct hid_device *hdev)
458540
return 0;
459541
}
460542

543+
static int asus_kbd_set_fn_lock(struct hid_device *hdev, bool enabled)
544+
{
545+
u8 buf[] = { FEATURE_KBD_REPORT_ID, 0xd0, 0x4e, !!enabled };
546+
547+
return asus_kbd_set_report(hdev, buf, sizeof(buf));
548+
}
549+
550+
static void asus_sync_fn_lock(struct work_struct *work)
551+
{
552+
struct asus_drvdata *drvdata =
553+
container_of(work, struct asus_drvdata, fn_lock_sync_work);
554+
555+
asus_kbd_set_fn_lock(drvdata->hdev, drvdata->fn_lock);
556+
}
557+
461558
static void asus_schedule_work(struct asus_kbd_leds *led)
462559
{
463560
unsigned long flags;
@@ -929,6 +1026,12 @@ static int asus_input_configured(struct hid_device *hdev, struct hid_input *hi)
9291026
asus_kbd_register_leds(hdev))
9301027
hid_warn(hdev, "Failed to initialize backlight.\n");
9311028

1029+
if (drvdata->quirks & QUIRK_HID_FN_LOCK) {
1030+
drvdata->fn_lock = true;
1031+
INIT_WORK(&drvdata->fn_lock_sync_work, asus_sync_fn_lock);
1032+
asus_kbd_set_fn_lock(hdev, true);
1033+
}
1034+
9321035
return 0;
9331036
}
9341037

@@ -1260,6 +1363,9 @@ static void asus_remove(struct hid_device *hdev)
12601363
cancel_work_sync(&drvdata->kbd_backlight->work);
12611364
}
12621365

1366+
if (drvdata->quirks & QUIRK_HID_FN_LOCK)
1367+
cancel_work_sync(&drvdata->fn_lock_sync_work);
1368+
12631369
hid_hw_stop(hdev);
12641370
}
12651371

@@ -1387,7 +1493,7 @@ static const struct hid_device_id asus_devices[] = {
13871493
QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD },
13881494
{ HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK,
13891495
USB_DEVICE_ID_ASUSTEK_ROG_NKEY_KEYBOARD2),
1390-
QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD },
1496+
QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD | QUIRK_HID_FN_LOCK },
13911497
{ HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK,
13921498
USB_DEVICE_ID_ASUSTEK_ROG_Z13_LIGHTBAR),
13931499
QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD },
@@ -1434,10 +1540,8 @@ static struct hid_driver asus_driver = {
14341540
.remove = asus_remove,
14351541
.input_mapping = asus_input_mapping,
14361542
.input_configured = asus_input_configured,
1437-
#ifdef CONFIG_PM
1438-
.reset_resume = asus_reset_resume,
1439-
.resume = asus_resume,
1440-
#endif
1543+
.reset_resume = pm_ptr(asus_reset_resume),
1544+
.resume = pm_ptr(asus_resume),
14411545
.event = asus_event,
14421546
.raw_event = asus_raw_event
14431547
};

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 <[email protected]>
1011
* Copyright (c) 2016 Yuxuan Shui <[email protected]>
@@ -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);

0 commit comments

Comments
 (0)