Dear kernel developers, We are reaching out to you to discuss and hopefully resolve an important issue we’ve encountered in the recent versions of the Android kernel (for example 5.10.177-Android13, as reported on a Pixel 7 device), which affects millions of automotive multimedia devices already in production. The issue we’ve detected is related to the handling of the HID descriptor by the kernel. According to our investigation the issue is caused by a conflicting interpretation of the “Usage Page (Button)” and the “Usage (Touch Screen)” feature items in the used HID descriptor. The issue is noticed when a registered HID descriptor contains the “Usage Page (Button)” feature item, which when parsed later on in the kernel, leads to interpreting the device as a mouse-like or trackpad device, ignoring the value of the “Usage (Touch Screen)” field, and manifesting a mouse cursor. Previous versions of the kernel correctly handle the value of the “Usage (Touch Screen)” field and identify properly the attached touch screen device, hence our request for fixing the issue in the future versions of the kernel and for the affected devices already in the field. This issue does not reproduce with а Samsung device with Android 14, which reports kernel version 5.10.177-Android12. HID Descriptor overview: static const uint8_t c_descriptorArray[] = { 0x06, 0x0D, 0x00, // Usage Page (Digitizer) 0x0A, 0x04, 0x00, // Usage (Touch Screen) 0xA1, 0x01, // Collection (Application) 0x06, 0x0D, 0x00, // Usage Page (Digitizer) 0x0A, 0x22, 0x00, // Usage (Finger) 0xA1, 0x02, // Collection (Logical) 0x06, 0x01, 0x00, // Usage Page (Generic Desktop Ctrls) 0x0A, 0x01, 0x00, // Usage (Pointer) 0xA1, 0x00, // Collection (Physical) 0x06, 0x0D, 0x00, // Usage Page (Digitizer) 0x0A, 0x51, 0x00, // Usage (Contact ID) 0x16, 0x00, 0x00, // Logical Minimum (0) 0x26, 0x00, 0x09, // Logical Maximum (9) 0x95, 0x01, // Report Count (1) 0x75, 0x08, // Report Size (8) 0x82, 0x02, 0x00, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Bit Field) 0x06, 0x0D, 0x00, // Usage Page (Digitizer) 0x0A, 0x42, 0x00, // Usage (Tip Switch) 0x0A, 0x32, 0x00, // Usage (In Range) 0x16, 0x00, 0x00, // Logical Minimum (0) 0x26, 0x01, 0x00, // Logical Maximum (1) 0x95, 0x02, // Report Count (2) 0x75, 0x01, // Report Size (1) 0x82, 0x02, 0x00, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Bit Field) 0x95, 0x01, // Report Count (1) 0x75, 0x06, // Report Size (6) 0x82, 0x01, 0x00, // Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position,Bit Field) 0x06, 0x0D, 0x00, // Usage Page (Digitizer) 0x0A, 0x30, 0x00, // Usage (Tip Pressure) 0x16, 0x00, 0x00, // Logical Minimum (0) 0x26, 0xFF, 0x00, // Logical Maximum (255) 0x95, 0x01, // Report Count (1) 0x75, 0x08, // Report Size (8) 0x82, 0x02, 0x00, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Bit Field) 0x06, 0x01, 0x00, // Usage Page (Generic Desktop Ctrls) 0x0A, 0x30, 0x00, // Usage (X) 0x0A, 0x31, 0x00, // Usage (Y) 0x16, 0x00, 0x00, // Logical Minimum (0) 0x26, 0x00, 0x40, // Logical Maximum (16384) 0x95, 0x02, // Report Count (2) 0x75, 0x10, // Report Size (16) 0x82, 0x02, 0x00, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Bit Field) 0x06, 0x09, 0x00, // Usage Page (Button) 0x1A, 0x01, 0x00, // Usage Minimum (0x01) 0x2A, 0x08, 0x00, // Usage Maximum (0x08) 0x16, 0x00, 0x00, // Logical Minimum (0) 0x26, 0x01, 0x00, // Logical Maximum (1) 0x95, 0x08, // Report Count (8) 0x75, 0x01, // Report Size (1) 0x82, 0x02, 0x00, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Bit Field) 0xC0, // End Collection 0xC0, // End Collection 0xC0, // End Collection }; struct SHIDReport_MT { uint8_t m_touchPointId; uint8_t m_tipSwitch; uint8_t m_pressure; uint16_t m_posX; uint16_t m_posY; uint8_t m_button; } SHIDReport_MT_PACKED; Thank you for your time! Best regards, Lyuboslav Angelov Software developer Abalta Technologies, Inc. langelov@xxxxxxxxxxxxxx