It's interesting that I found another USB device with the same ID, but it's a USB headphone, device descriptors in headphone.txt
Microphone.txt is the device descriptor for SMARTLINKTechnology.
I was originally planning to differentiate according to bcdHID, but there is hdev ->version=0x100, therefore, I created the v3 patch.
The microphone device is normal, but I'm not sure if your touchscreen function is working properly.
[ 67.417805] usb 1-3.4.2: new full-speed USB device number 11
using xhci_hcd
[ 67.566700] usb 1-3.4.2: New USB device found, idVendor=4c4a,
idProduct=4155, bcdDevice= 1.00
[ 67.566707] usb 1-3.4.2: New USB device strings: Mfr=1,
Product=2, SerialNumber=3
[ 67.566712] usb 1-3.4.2: Product: USB Composite Device
[ 67.566717] usb 1-3.4.2: Manufacturer: SmartlinkTechnology
[ 67.566721] usb 1-3.4.2: SerialNumber: 20201111000001
[ 67.568816] DEBUG: drivers/hid/hid-quirks.c 1227
hid_gets_squirk hdev->version = 0x100
[ 67.568827] DEBUG: drivers/hid/hid-quirks.c 1025 hid_ignore
hdev->version = 0x100
[ 67.568832] DEBUG: drivers/hid/hid-quirks.c 1227
hid_gets_squirk hdev->version = 0x100
[ 67.569256] DEBUG: drivers/hid/hid-quirks.c 1227
hid_gets_squirk hdev->version = 0x201
[ 39.692821] DEBUG: drivers/hid/usbhid/hid-core.c 985
usbhid_parse dev->serial = 20201111000001
Later, I thought of using a serial number, Later, I thought of using a serial number, but the headphone serial number was NULL,
and printing it directly would trigger OOPs, at present, I can only consider distinguishing between manufacturers, this is v4 patch.
If there are better ideas or patches, they can also be provided. The microphone device will arrive in a few days, and I will verify it then.
On 9/15/25 1:37 AM, zhangheng wrote:Apply this new patch and test the kernel again. I don't have the original mic device in my hands, which means I have to wait for a response for testing now. You can test it first, and the other mic device also needs to be retestedYour patch will not work as you expect for two reasons. if (hid_match_id(hdev, hid_ignore_list) || (hid_match_id(hdev, hid_ignore_mic) && (hdev->version > 1.1))) quirks |= HID_QUIRK_IGNORE; hdev->version is U32 not float. Version (bcdDevice) 1.00 would be 0x0100. The value 1.1 is probably cast to 0x0001. Second, both devices have identical VID, PID, bcdDevice, and Product names. [ 563.104908] usb 1-1.4.1.2: New USB device found, idVendor=4c4a, idProduct=4155, bcdDevice= 1.00 [ 563.104910] usb 1-1.4.1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 563.104911] usb 1-1.4.1.2: Product: USB Composite Device [ 563.104912] usb 1-1.4.1.2: Manufacturer: SmartlinkTechnology [ 563.104913] usb 1-1.4.1.2: SerialNumber: 20201111000001 [ 10.451534] usb 3-3: New USB device found, idVendor=4c4a, idProduct=4155, bcdDevice= 1.00 [ 10.451540] usb 3-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 10.451543] usb 3-3: Product: USB Composite Device [ 10.451545] usb 3-3: Manufacturer: Jieli Technology [ 10.451546] usb 3-3: SerialNumber: FFFFFFFFFFFFFFFF If you could get the descriptors for the microphone device, it would be helpful. Thanks, Terry在 2025/9/13 21:11, Staffan Melin 写道:Ah, thanks, I get it now :) So I got 6.16.7, and the patch applied without problems. But no luck, the same results as before: touchscreen not working, xinput --list not showing the Jieli touchscreen. dmesg shows the same as before, too. Best regards, Staffan On 2025-09-13 10:55, Salvatore Bonaccorso wrote:Hi Staffan, chiming in hopefully it is of help. Now really with the patch ... On Fri, Sep 12, 2025 at 09:57:04PM +0200, Staffan Melin wrote:Thank you, I tried to apply this patch to 6.12.39, the first problematic kernel, as well as 6.12.41, the first bad I tried, and on both I got an error message: Applying: HID: quirks: Add device descriptor for 4c4a:4155 error: patch failed: drivers/hid/hid-quirks.c:1068 error: drivers/hid/hid-quirks.c: patch does not apply Patch failed at 0001 HID: quirks: Add device descriptor for 4c4a:4155 To which kernel version should I apply the patch?As the deveopment goes from mainline then down to stable series, the fix needs to be developed first for mainline. So the patch is targeted there. But please find attached an updated patch which hopefully should work which resolved the context changes on top of 6.12.47. But ideally you can provide a Tested-by on zhangheng's mainline patch to get things rolling as needed. Regards, Salvatore
From 5e4a9245de142a0bc0877a3d50fbe01359a65022 Mon Sep 17 00:00:00 2001 From: Zhang Heng <zhangheng@kylinos.cn> Date: Fri, 12 Sep 2025 20:38:18 +0800 Subject: [PATCH v3] HID: quirks: Add device descriptor for 4c4a:4155 Multiple USB devices use the same ID. To avoid affecting functionality, device descriptors are added to distinguish between them Signed-off-by: Zhang Heng <zhangheng@kylinos.cn> --- drivers/hid/hid-quirks.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c index ffd034566e2e..e1a6ba0e069a 100644 --- a/drivers/hid/hid-quirks.c +++ b/drivers/hid/hid-quirks.c @@ -913,6 +913,17 @@ 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_ignore_mic - Microphone devices do not require HID core processing + * + * Now there are two USB devices using the same ID, one is the microphone and the other + * is the touch screen. The touch screen requires hid core processing, but the + * microphone does not. The two have different bcdIDs, which will be used to + * distinguish them in the future + */ +static const struct hid_device_id hid_ignore_mic[] = { { HID_USB_DEVICE(USB_VENDOR_ID_SMARTLINKTECHNOLOGY, USB_DEVICE_ID_SMARTLINKTECHNOLOGY_4155) }, { } }; @@ -1068,6 +1079,13 @@ bool hid_ignore(struct hid_device *hdev) hdev->quirks & HID_QUIRK_IGNORE_MOUSE) return true; + if (hid_match_id(hdev, hid_ignore_mic) && (hdev->version == 0x201)) + return true; + if (hid_match_id(hdev, hid_ignore_mic) && (hdev->version == 0x201)) + return true; + + pr_err("DEBUG: %s %d %s hdev->version = 0x%x\n", __FILE__, __LINE__, __func__, hdev->version); + return !!hid_match_id(hdev, hid_ignore_list); } EXPORT_SYMBOL_GPL(hid_ignore); @@ -1268,6 +1286,12 @@ static unsigned long hid_gets_squirk(const struct hid_device *hdev) if (hid_match_id(hdev, hid_ignore_list)) quirks |= HID_QUIRK_IGNORE; + if (hid_match_id(hdev, hid_ignore_mic) && (hdev->version == 0x201)) + quirks |= HID_QUIRK_IGNORE; + if (hid_match_id(hdev, hid_ignore_mic) && (hdev->version == 0x100)) + quirks |= HID_QUIRK_IGNORE; + + pr_err("DEBUG: %s %d %s hdev->version = 0x%x\n", __FILE__, __LINE__, __func__, hdev->version); if (hid_match_id(hdev, hid_mouse_ignore_list)) quirks |= HID_QUIRK_IGNORE_MOUSE; -- 2.47.1
From 55d2ccdaba36c6cf9a3639d083c1089f3320a347 Mon Sep 17 00:00:00 2001 From: Zhang Heng <zhangheng@kylinos.cn> Date: Thu, 18 Sep 2025 21:37:07 +0800 Subject: [PATCH v4] HID: quirks: Add device descriptor for 4c4a:4155 Multiple USB devices use the same ID. To avoid affecting functionality, device descriptors are added to distinguish between them Signed-off-by: Zhang Heng <zhangheng@kylinos.cn> --- drivers/hid/usbhid/hid-core.c | 11 +++++++++++ drivers/hid/usbhid/usbhid.h | 2 ++ 2 files changed, 13 insertions(+) diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c index aac0051a2cf6..d0b994f97fcc 100644 --- a/drivers/hid/usbhid/hid-core.c +++ b/drivers/hid/usbhid/hid-core.c @@ -992,6 +992,12 @@ static int usbhid_parse(struct hid_device *hid) quirks = hid_lookup_quirk(hid); + if ((hid->vendor == USB_VENDOR_ID_SMARTLINKTECHNOLOGY) && (hid->product == USB_DEVICE_ID_SMARTLINKTECHNOLOGY_4155)) { + if(strcmp(dev->manufacturer, "SmartlinkTechnology") == 0) { + quirks |= HID_QUIRK_IGNORE; + } + } + if (quirks & HID_QUIRK_IGNORE) return -ENODEV; @@ -1432,6 +1438,11 @@ static int usbhid_probe(struct usb_interface *intf, const struct usb_device_id * spin_lock_init(&usbhid->lock); mutex_init(&usbhid->mutex); + if ((hid->vendor == USB_VENDOR_ID_SMARTLINKTECHNOLOGY) && (hid->product == USB_DEVICE_ID_SMARTLINKTECHNOLOGY_4155)) { + if(strcmp(dev->manufacturer, "SmartlinkTechnology") == 0) + return 0; + + } ret = hid_add_device(hid); if (ret) { if (ret != -ENODEV) diff --git a/drivers/hid/usbhid/usbhid.h b/drivers/hid/usbhid/usbhid.h index 75fe85d3d27a..3760c73c3455 100644 --- a/drivers/hid/usbhid/usbhid.h +++ b/drivers/hid/usbhid/usbhid.h @@ -48,6 +48,8 @@ struct usb_interface *usbhid_find_interface(int minor); */ #define HID_IN_POLLING 14 +#define USB_VENDOR_ID_SMARTLINKTECHNOLOGY 0x4c4a +#define USB_DEVICE_ID_SMARTLINKTECHNOLOGY_4155 0x4155 /* * USB-specific HID struct, to be pointed to * from struct hid_device->driver_data -- 2.47.1
Bus 001 Device 006: ID 4c4a:4155 Jieli Technology UACDemoV1.0 Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.10 bDeviceClass 0 bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64 idVendor 0x4c4a idProduct 0x4155 bcdDevice 1.00 iManufacturer 1 Jieli Technology iProduct 2 UACDemoV1.0 iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 0x00e1 bNumInterfaces 4 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 100mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 1 Audio bInterfaceSubClass 1 Control Device bInterfaceProtocol 0 iInterface 8 AudioControl Interface Descriptor: bLength 10 bDescriptorType 36 bDescriptorSubtype 1 (HEADER) bcdADC 1.00 wTotalLength 0x0047 bInCollection 2 baInterfaceNr(0) 1 baInterfaceNr(1) 2 AudioControl Interface Descriptor: bLength 12 bDescriptorType 36 bDescriptorSubtype 2 (INPUT_TERMINAL) bTerminalID 1 wTerminalType 0x0101 USB Streaming bAssocTerminal 0 bNrChannels 2 wChannelConfig 0x0003 Left Front (L) Right Front (R) iChannelNames 0 iTerminal 0 AudioControl Interface Descriptor: bLength 12 bDescriptorType 36 bDescriptorSubtype 2 (INPUT_TERMINAL) bTerminalID 4 wTerminalType 0x0201 Microphone bAssocTerminal 0 bNrChannels 1 wChannelConfig 0x0000 iChannelNames 0 iTerminal 0 AudioControl Interface Descriptor: bLength 9 bDescriptorType 36 bDescriptorSubtype 3 (OUTPUT_TERMINAL) bTerminalID 3 wTerminalType 0x0301 Speaker bAssocTerminal 0 bSourceID 2 iTerminal 0 AudioControl Interface Descriptor: bLength 9 bDescriptorType 36 bDescriptorSubtype 3 (OUTPUT_TERMINAL) bTerminalID 6 wTerminalType 0x0101 USB Streaming bAssocTerminal 2 bSourceID 7 iTerminal 0 AudioControl Interface Descriptor: bLength 7 bDescriptorType 36 bDescriptorSubtype 5 (SELECTOR_UNIT) bUnitID 7 bNrInPins 1 baSourceID(0) 5 iSelector 0 AudioControl Interface Descriptor: bLength 10 bDescriptorType 36 bDescriptorSubtype 6 (FEATURE_UNIT) bUnitID 2 bSourceID 1 bControlSize 1 bmaControls(0) 0x01 Mute Control bmaControls(1) 0x02 Volume Control bmaControls(2) 0x02 Volume Control iFeature 0 AudioControl Interface Descriptor: bLength 9 bDescriptorType 36 bDescriptorSubtype 6 (FEATURE_UNIT) bUnitID 5 bSourceID 4 bControlSize 1 bmaControls(0) 0x43 Mute Control Volume Control Automatic Gain Control bmaControls(1) 0x00 iFeature 0 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 1 Audio bInterfaceSubClass 2 Streaming bInterfaceProtocol 0 iInterface 0 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 1 bNumEndpoints 1 bInterfaceClass 1 Audio bInterfaceSubClass 2 Streaming bInterfaceProtocol 0 iInterface 0 AudioStreaming Interface Descriptor: bLength 7 bDescriptorType 36 bDescriptorSubtype 1 (AS_GENERAL) bTerminalLink 1 bDelay 1 frames wFormatTag 0x0001 PCM AudioStreaming Interface Descriptor: bLength 11 bDescriptorType 36 bDescriptorSubtype 2 (FORMAT_TYPE) bFormatType 1 (FORMAT_TYPE_I) bNrChannels 2 bSubframeSize 2 bBitResolution 16 bSamFreqType 1 Discrete tSamFreq[ 0] 48000 Endpoint Descriptor: bLength 9 bDescriptorType 5 bEndpointAddress 0x03 EP 3 OUT bmAttributes 9 Transfer Type Isochronous Synch Type Adaptive Usage Type Data wMaxPacketSize 0x00c4 1x 196 bytes bInterval 1 bRefresh 0 bSynchAddress 0 AudioStreaming Endpoint Descriptor: bLength 7 bDescriptorType 37 bDescriptorSubtype 1 (EP_GENERAL) bmAttributes 0x00 bLockDelayUnits 0 Undefined wLockDelay 0x0000 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 2 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 1 Audio bInterfaceSubClass 2 Streaming bInterfaceProtocol 0 iInterface 0 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 2 bAlternateSetting 1 bNumEndpoints 1 bInterfaceClass 1 Audio bInterfaceSubClass 2 Streaming bInterfaceProtocol 0 iInterface 0 AudioStreaming Interface Descriptor: bLength 7 bDescriptorType 36 bDescriptorSubtype 1 (AS_GENERAL) bTerminalLink 6 bDelay 1 frames wFormatTag 0x0001 PCM AudioStreaming Interface Descriptor: bLength 11 bDescriptorType 36 bDescriptorSubtype 2 (FORMAT_TYPE) bFormatType 1 (FORMAT_TYPE_I) bNrChannels 1 bSubframeSize 2 bBitResolution 16 bSamFreqType 1 Discrete tSamFreq[ 0] 48000 Endpoint Descriptor: bLength 9 bDescriptorType 5 bEndpointAddress 0x83 EP 3 IN bmAttributes 5 Transfer Type Isochronous Synch Type Asynchronous Usage Type Data wMaxPacketSize 0x0060 1x 96 bytes bInterval 1 bRefresh 0 bSynchAddress 0 AudioStreaming Endpoint Descriptor: bLength 7 bDescriptorType 37 bDescriptorSubtype 1 (EP_GENERAL) bmAttributes 0x00 bLockDelayUnits 0 Undefined wLockDelay 0x0000 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 3 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 0 HID Device Descriptor: bLength 9 bDescriptorType 33 bcdHID 1.00 bCountryCode 0 Not supported bNumDescriptors 1 bDescriptorType 34 Report wDescriptorLength 51 Report Descriptors: ** UNAVAILABLE ** Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 10
Bus 001 Device 013: ID 4c4a:4155 SmartlinkTechnology USB Composite Device Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.10 bDeviceClass 0 bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64 idVendor 0x4c4a idProduct 0x4155 bcdDevice 1.00 iManufacturer 1 SmartlinkTechnology iProduct 2 USB Composite Device iSerial 3 20201111000001 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 0x00a0 bNumInterfaces 4 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 100mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 1 Audio bInterfaceSubClass 1 Control Device bInterfaceProtocol 0 iInterface 0 AudioControl Interface Descriptor: bLength 9 bDescriptorType 36 bDescriptorSubtype 1 (HEADER) bcdADC 1.00 wTotalLength 0x002f bInCollection 1 baInterfaceNr(0) 1 AudioControl Interface Descriptor: bLength 12 bDescriptorType 36 bDescriptorSubtype 2 (INPUT_TERMINAL) bTerminalID 4 wTerminalType 0x0201 Microphone bAssocTerminal 0 bNrChannels 2 wChannelConfig 0x0003 Left Front (L) Right Front (R) iChannelNames 0 iTerminal 0 AudioControl Interface Descriptor: bLength 10 bDescriptorType 36 bDescriptorSubtype 6 (FEATURE_UNIT) bUnitID 5 bSourceID 4 bControlSize 2 bmaControls(0) 0x0001 Mute Control iFeature 0 Warning: Junk at end of descriptor (1 bytes): 00 AudioControl Interface Descriptor: bLength 7 bDescriptorType 36 bDescriptorSubtype 5 (SELECTOR_UNIT) bUnitID 6 bNrInPins 1 baSourceID(0) 5 iSelector 0 AudioControl Interface Descriptor: bLength 9 bDescriptorType 36 bDescriptorSubtype 3 (OUTPUT_TERMINAL) bTerminalID 6 wTerminalType 0x0101 USB Streaming bAssocTerminal 0 bSourceID 5 iTerminal 0 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 1 Audio bInterfaceSubClass 2 Streaming bInterfaceProtocol 0 iInterface 0 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 1 bNumEndpoints 1 bInterfaceClass 1 Audio bInterfaceSubClass 2 Streaming bInterfaceProtocol 0 iInterface 0 AudioStreaming Interface Descriptor: bLength 7 bDescriptorType 36 bDescriptorSubtype 1 (AS_GENERAL) bTerminalLink 6 bDelay 1 frames wFormatTag 0x0001 PCM AudioStreaming Interface Descriptor: bLength 11 bDescriptorType 36 bDescriptorSubtype 2 (FORMAT_TYPE) bFormatType 1 (FORMAT_TYPE_I) bNrChannels 2 bSubframeSize 2 bBitResolution 16 bSamFreqType 1 Discrete tSamFreq[ 0] 48000 Endpoint Descriptor: bLength 9 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 13 Transfer Type Isochronous Synch Type Synchronous Usage Type Data wMaxPacketSize 0x00c0 1x 192 bytes bInterval 1 bRefresh 0 bSynchAddress 0 AudioStreaming Endpoint Descriptor: bLength 7 bDescriptorType 37 bDescriptorSubtype 1 (EP_GENERAL) bmAttributes 0x00 bLockDelayUnits 0 Undefined wLockDelay 0x0000 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 2 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 0 HID Device Descriptor: bLength 9 bDescriptorType 33 bcdHID 2.01 bCountryCode 0 Not supported bNumDescriptors 1 bDescriptorType 34 Report wDescriptorLength 65 Report Descriptors: ** UNAVAILABLE ** Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x83 EP 3 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 1 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 3 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 0 HID Device Descriptor: bLength 9 bDescriptorType 33 bcdHID 2.01 bCountryCode 0 Not supported bNumDescriptors 1 bDescriptorType 34 Report wDescriptorLength 36 Report Descriptors: ** UNAVAILABLE **