Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

HID: quirks: work around VID/PID conflict for 0x4c4a/0x4155

Based on available evidence, the USB ID 4c4a:4155 used by multiple
devices has been attributed to Jieli. The commit 1a8953f4f774
("HID: Add IGNORE quirk for SMARTLINKTECHNOLOGY") affected touchscreen
functionality. Added checks for manufacturer and serial number to
maintain microphone compatibility, enabling both devices to function
properly.

[jkosina@suse.com: edit shortlog]
Fixes: 1a8953f4f774 ("HID: Add IGNORE quirk for SMARTLINKTECHNOLOGY")
Cc: stable@vger.kernel.org
Tested-by: staffan.melin@oscillator.se
Reviewed-by: Terry Junge <linuxhid@cosmicgizmosystems.com>
Signed-off-by: Zhang Heng <zhangheng@kylinos.cn>
Signed-off-by: Jiri Kosina <jkosina@suse.com>

authored by

Zhang Heng and committed by
Jiri Kosina
beab067d ed80cc46

+14 -3
+2 -2
drivers/hid/hid-ids.h
··· 1543 1543 #define USB_VENDOR_ID_SIGNOTEC 0x2133 1544 1544 #define USB_DEVICE_ID_SIGNOTEC_VIEWSONIC_PD1011 0x0018 1545 1545 1546 - #define USB_VENDOR_ID_SMARTLINKTECHNOLOGY 0x4c4a 1547 - #define USB_DEVICE_ID_SMARTLINKTECHNOLOGY_4155 0x4155 1546 + #define USB_VENDOR_ID_JIELI_SDK_DEFAULT 0x4c4a 1547 + #define USB_DEVICE_ID_JIELI_SDK_4155 0x4155 1548 1548 1549 1549 #endif
+12 -1
drivers/hid/hid-quirks.c
··· 915 915 #endif 916 916 { HID_USB_DEVICE(USB_VENDOR_ID_YEALINK, USB_DEVICE_ID_YEALINK_P1K_P4K_B2K) }, 917 917 { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_HP_5MP_CAMERA_5473) }, 918 - { HID_USB_DEVICE(USB_VENDOR_ID_SMARTLINKTECHNOLOGY, USB_DEVICE_ID_SMARTLINKTECHNOLOGY_4155) }, 919 918 { } 920 919 }; 921 920 ··· 1062 1063 if (!strncmp(hdev->name, elan_acpi_id[i].id, 1063 1064 strlen(elan_acpi_id[i].id))) 1064 1065 return true; 1066 + break; 1067 + case USB_VENDOR_ID_JIELI_SDK_DEFAULT: 1068 + /* 1069 + * Multiple USB devices with identical IDs (mic & touchscreen). 1070 + * The touch screen requires hid core processing, but the 1071 + * microphone does not. They can be distinguished by manufacturer 1072 + * and serial number. 1073 + */ 1074 + if (hdev->product == USB_DEVICE_ID_JIELI_SDK_4155 && 1075 + strncmp(hdev->name, "SmartlinkTechnology", 19) == 0 && 1076 + strncmp(hdev->uniq, "20201111000001", 14) == 0) 1077 + return true; 1065 1078 break; 1066 1079 } 1067 1080