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 **