Commit beab067d authored by Zhang Heng's avatar Zhang Heng Committed by Jiri Kosina
Browse files

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 1a8953f4
("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: 1a8953f4 ("HID: Add IGNORE quirk for SMARTLINKTECHNOLOGY")
Cc: stable@vger.kernel.org
Tested-by: default avatar <staffan.melin@oscillator.se>
Reviewed-by: default avatarTerry Junge <linuxhid@cosmicgizmosystems.com>
Signed-off-by: default avatarZhang Heng <zhangheng@kylinos.cn>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.com>
parent ed80cc46
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1543,7 +1543,7 @@
#define USB_VENDOR_ID_SIGNOTEC			0x2133
#define USB_DEVICE_ID_SIGNOTEC_VIEWSONIC_PD1011	0x0018

#define USB_VENDOR_ID_SMARTLINKTECHNOLOGY              0x4c4a
#define USB_DEVICE_ID_SMARTLINKTECHNOLOGY_4155         0x4155
#define USB_VENDOR_ID_JIELI_SDK_DEFAULT		0x4c4a
#define USB_DEVICE_ID_JIELI_SDK_4155		0x4155

#endif
+12 −1
Original line number Diff line number Diff line
@@ -915,7 +915,6 @@ static const struct hid_device_id hid_ignore_list[] = {
#endif
	{ HID_USB_DEVICE(USB_VENDOR_ID_YEALINK, USB_DEVICE_ID_YEALINK_P1K_P4K_B2K) },
	{ HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_HP_5MP_CAMERA_5473) },
	{ HID_USB_DEVICE(USB_VENDOR_ID_SMARTLINKTECHNOLOGY, USB_DEVICE_ID_SMARTLINKTECHNOLOGY_4155) },
	{ }
};

@@ -1064,6 +1063,18 @@ bool hid_ignore(struct hid_device *hdev)
					     strlen(elan_acpi_id[i].id)))
					return true;
		break;
	case USB_VENDOR_ID_JIELI_SDK_DEFAULT:
		/*
		 * Multiple USB devices with identical IDs (mic & touchscreen).
		 * The touch screen requires hid core processing, but the
		 * microphone does not. They can be distinguished by manufacturer
		 * and serial number.
		 */
		if (hdev->product == USB_DEVICE_ID_JIELI_SDK_4155 &&
		    strncmp(hdev->name, "SmartlinkTechnology", 19) == 0 &&
		    strncmp(hdev->uniq, "20201111000001", 14) == 0)
			return true;
		break;
	}

	if (hdev->type == HID_TYPE_USBMOUSE &&