The holtek_mouse_probe() function is missing the necessary code to start the hardware. When an Etekcity Scroll X1 (M555) USB mouse is plugged in, the mouse receives power and the kernel recognizes it as a USB device, but the system does not respond to any movement, clicking, or scrolling of the mouse. Presumably, this bug also affects all other mice supported by the hid-holtek-mouse driver, although this has not been tested. On the stable linux-5.15.y branch, testing confirms that the bug was introduced in commit a579510a64ed ("HID: check for valid USB device for many HID drivers"), which was first included in v5.15.8. Based on the source code, this bug appears to be present in all currently-supported kernels (mainline, stable, and all LTS kernels). Testing on hardware confirms that this proposed patch fixes the bug for kernel v5.15.10. Fix holtek_mouse_probe() to call the necessary functions to start the hardware. Fixes: 93020953d0fa ("HID: check for valid USB device for many HID drivers") Cc: Jiri Kosina <jikos@xxxxxxxxxx> Cc: Benjamin Tissoires <benjamin.tissoires@xxxxxxxxxx> Cc: linux-input@xxxxxxxxxxxxxxx Cc: stable@xxxxxxxxxxxxxxx Signed-off-by: James D. Turner <linuxkernel.foss@xxxxxxxxxxxxxxxxxxxxxx> --- This is my first time submitting a kernel patch. I think I've followed all the directions, but please let me know if I should do something differently. In addition to testing this patch for the stable v5.15.10 kernel on real hardware, I also tested it for the latest master of the hid repository (commit 03090cc76ee3 ("Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid")) using a VM with USB passthrough. drivers/hid/hid-holtek-mouse.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/hid/hid-holtek-mouse.c b/drivers/hid/hid-holtek-mouse.c index b7172c48ef..29e41c97ec 100644 --- a/drivers/hid/hid-holtek-mouse.c +++ b/drivers/hid/hid-holtek-mouse.c @@ -65,9 +65,16 @@ static __u8 *holtek_mouse_report_fixup(struct hid_device *hdev, __u8 *rdesc, static int holtek_mouse_probe(struct hid_device *hdev, const struct hid_device_id *id) { + int ret; + if (!hid_is_usb(hdev)) return -EINVAL; - return 0; + + ret = hid_parse(hdev); + if (!ret) + ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT); + + return ret; } static const struct hid_device_id holtek_mouse_devices[] = { base-commit: 03090cc76ee3298cc70bce26bbe93a0cb50e42a2 -- 2.34.1