From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pg1-f171.google.com (mail-pg1-f171.google.com [209.85.215.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 195CD3ED3B3 for ; Tue, 4 Aug 2026 20:20:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.171 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785874843; cv=none; b=TGLVUszrEnMEeOAkfVhWYILFw6YYMzVOFq8WSWb8lGP+Q1g1E4FRpTs1RpMf7qzbEf1zUXSy2ck0171EyDvUuiJkSnwHFfShKLQDn01el63iH4gGMLyTyt3zElYe3VH5bNhwILr2kSzYykpQ4XItiha7m/Zohbnh0WNeGW5bWvM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785874843; c=relaxed/simple; bh=kkf8TW5MJxNTJ7+CR2sDFidCT2RHsRoOHSnmf6X5CZk=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=B+K2kDqKLrUP+dwRhnXvJqa1dkl9IajP0MpzxwwP8td+O7Ezbln/53j7LXbzgr4b+dftIuq9kT3ZZrBj+jaHiQLUDogjUkEJsnfepqnE9wRS6CITw58mpZbfTY1bhvymJUqBSCQSFrhcQZNZUWgBpRuxaEjbeA8zFCyen8XB9RY= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=VWO3l01D; arc=none smtp.client-ip=209.85.215.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VWO3l01D" Received: by mail-pg1-f171.google.com with SMTP id 41be03b00d2f7-cbb8b54fcf8so172823a12.0 for ; Tue, 04 Aug 2026 13:20:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785874841; x=1786479641; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=r6d+vbD9wuzkkuB/nbI31f2jI9KftyE/vm8BKPz6LeI=; b=VWO3l01DnS2Z94Nt55fZw8HMns19yjMgdUVOln/rdsS59XLgwu0BnSZB6CtehF5KeH +FhCfZCDu4osEkxulq5ZPIArCYp+77BwT2Av6Auu0O95mJ1EV8WU9fHXQYF9/qQQkBZF TTUZQTP1WTKthwLQ3P0hP/d4nFD0xM5Mn167rD+YTxTPxQeejBmQchjlaluBDMU0cojS nbTUJWisIhlTlhrYr/K56vHMgBkYKLH9AbOcKukja7Sjkr+BUI68dsPJKBDjDwXGqYsu J28/augTJFAgBepEhBDAsbnqbvmUAGHnhC3KvkgHI34PP4M+1yMtl2ywnWBw35DhQ2bu im4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785874841; x=1786479641; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=r6d+vbD9wuzkkuB/nbI31f2jI9KftyE/vm8BKPz6LeI=; b=URghbPB8+wbjMWFJ3sCcM+UTevhuWOH6FNiPiS9RMNPoTOh8XjOFU7UgI/+LWihfqR 3m15LLWvTdrVf2AnVryW/3jxEy6EZEvNbKVVlJ4wqZkmbCei/PKSZ8JaAQ/2F/6o69cC j37RbdJxAgcZVUBYAR87o8a6GPTMOHw6VGvYiZ9fZzI/zTdCndCYGNKwtDQIYOBkdFd9 yCEE3y1M2tT8NL+Ne3XzZW3DCAa+gqdkadppHm4/uo4u28T2BsjONtIym8/E5zLTWR2A Htmqos10Z51mX9py+CEYeOMOuf4PiqSIXxwY7WiSTaRaECnI4jhyvG6Ex4cUIxUgmruw O2lA== X-Forwarded-Encrypted: i=1; AHgh+Rq8vnt1omLLFatLyc2yCLlTIXiFFf+zCT05SmvQBpTE4/e3pjWxYONPaBK/EiNcuo6746pfCjsmHdckKio=@vger.kernel.org X-Gm-Message-State: AOJu0YxwYacL3lsQyPqzibEkTxsJHHTR4szY+bCtt+0eEsf+op2EGM2e fMFUQI8lWfqtXqeL1mHUvbFkl/cidjLWQAHYJx6CUjUvAYrslYS1nNJ7 X-Gm-Gg: AR+sD12l0gBT1Hsib6iNVBqNELooriF95MiKgFaf5L2kT+xadQOPJVQLFhmRfj/UODo l9LiViJO7p8xcH0CU45fGo3A7KJitdOZbWglIN2gZkWZppk1HNN94evGuGQBVfzsjmkq3h+17/T CnXRMHV5q+9dUa7RtpaJsAWu8dDNkdxk+FTS0/Lhhqm0umvPs/VbtClLEB1TyhoZg/F0PQjaN3I bm1WFsIQa8RlwvXOdraXkjyz/lVoYMj5tlM4F3hwtVaK7paX2OxQgzVCkG4bC2VAiYJlQ4KQEi1 ad8GV8QblA31zW7iD39vD3Yj5990s9tkZMOrkn1jcvP3xsFDf8KpZiDfgvQrbspA9h0TzGNI2T/ qC1cHYDgyLWUlfMIxDTBOmCwBJG8drNK2R/yYq3Q+GCidg2mXlqILuB16XQVcR+LfgVuQeCLdsp qHNj37EsRlUKfxja37al3dl8HJGwXI9z3FMDOY1hpJw22Ic2X9vKUUFgyyKwJi+2V0YBjTX5iSI HtsZM8GCHqWyEbYuHbiN175svgh9Hk= X-Received: by 2002:a05:6a20:cfa2:b0:3c4:397a:69b8 with SMTP id adf61e73a8af0-3cb85e6c93amr1631362637.21.1785874841253; Tue, 04 Aug 2026 13:20:41 -0700 (PDT) Received: from localhost ([2409:40c4:2007:21a9:9627:a686:aad0:561f]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3158673a9e4sm9012952eec.18.2026.08.04.13.20.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Aug 2026 13:20:40 -0700 (PDT) From: Lovekesh Solanki To: jikos@kernel.org, bentiss@kernel.org, rydberg@bitmath.org Cc: linux-input@vger.kernel.org, linux-kernel@vger.kernel.org, Lovekesh Solanki , mayhemandcoffee Subject: [PATCH] HID: multitouch: Add report ID mismatch quirk for ASUS ROG Z13 Folio Date: Wed, 5 Aug 2026 01:50:31 +0530 Message-ID: <20260804202031.75738-1-lovekeshsolanki00@gmail.com> X-Mailer: git-send-email 2.55.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Commit e716edafedad ("HID: multitouch: Check to ensure report responses match the request") introduced validating GET_FEATURE responses return the requested report ID. ASUS ROG Z13 Flow (2025) GZ302EA touchpad (USB 0b05:1a30) returns a different report ID for Win8 feature request. Before this check, the response was still processed and allowed device to switch into its full Touchpad Precision mode. After the validation, the response is discarded before hid_report_raw_event() processes it and device remains in fallback mode and no longer exposes ABS_MT_SLOT, ABS_MT_TOOL_TYPE or the multi-finger BTN_TOOL_* capabilities for palm rejection. Add a device quirk to allow the known firmware behavior for this device while preserving report ID validation for all other devices. The device previously matched the generic MT_CLS_WIN_8 entry, so base the new class on MT_CLS_WIN_8 to keep it on the same quirk set as before the regression. MT_QUIRK_CONFIDENCE must be set explicitly: it is normally enabled by the class name check in mt_touch_input_mapping(), which only matches the MT_CLS_WIN_8* names, and it is what makes ABS_MT_TOOL_TYPE available for touchpads. Fixes: e716edafedad ("HID: multitouch: Check to ensure report responses match the request") Signed-off-by: Lovekesh Solanki Reported-by: mayhemandcoffee Closes: https://bugzilla.kernel.org/show_bug.cgi?id=221774 Tested-by: mayhemandcoffee --- drivers/hid/hid-multitouch.c | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c index edb37b4c867e..de421ae47848 100644 --- a/drivers/hid/hid-multitouch.c +++ b/drivers/hid/hid-multitouch.c @@ -79,6 +79,7 @@ MODULE_LICENSE("GPL"); #define MT_QUIRK_APPLE_TOUCHBAR BIT(23) #define MT_QUIRK_YOGABOOK9I BIT(24) #define MT_QUIRK_KEEP_LATENCY_ON_CLOSE BIT(25) +#define MT_QUIRK_IGNORE_FEATURE_ID_MISMATCH BIT(26) #define MT_INPUTMODE_TOUCHSCREEN 0x02 #define MT_INPUTMODE_TOUCHPAD 0x03 @@ -235,6 +236,7 @@ static void mt_post_parse(struct mt_device *td, struct mt_application *app); #define MT_CLS_APPLE_TOUCHBAR 0x0114 #define MT_CLS_YOGABOOK9I 0x0115 #define MT_CLS_EGALAX_P80H84 0x0116 +#define MT_CLS_ASUS_ROG_Z13_FOLIO 0x0117 #define MT_CLS_SIS 0x0457 #define MT_DEFAULT_MAXCONTACT 10 @@ -405,6 +407,16 @@ static const struct mt_class mt_classes[] = { .quirks = MT_QUIRK_ALWAYS_VALID | MT_QUIRK_CONTACT_CNT_ACCURATE | MT_QUIRK_ASUS_CUSTOM_UP }, + { .name = MT_CLS_ASUS_ROG_Z13_FOLIO, + .quirks = MT_QUIRK_ALWAYS_VALID | + MT_QUIRK_IGNORE_DUPLICATES | + MT_QUIRK_HOVERING | + MT_QUIRK_CONTACT_CNT_ACCURATE | + MT_QUIRK_STICKY_FINGERS | + MT_QUIRK_WIN8_PTP_BUTTONS | + MT_QUIRK_CONFIDENCE | + MT_QUIRK_IGNORE_FEATURE_ID_MISMATCH, + .export_all_inputs = true }, { .name = MT_CLS_VTL, .quirks = MT_QUIRK_ALWAYS_VALID | MT_QUIRK_CONTACT_CNT_ACCURATE | @@ -507,6 +519,7 @@ static const struct attribute_group mt_attribute_group = { static void mt_get_feature(struct hid_device *hdev, struct hid_report *report) { + struct mt_device *td = hid_get_drvdata(hdev); int ret; u32 size = hid_report_len(report); u8 *buf; @@ -528,8 +541,14 @@ static void mt_get_feature(struct hid_device *hdev, struct hid_report *report) dev_warn(&hdev->dev, "failed to fetch feature %d\n", report->id); } else { - /* The report ID in the request and the response should match */ - if (report->id != buf[0]) { + /* + * The report ID in the request and the response should match. + * Some firmware (e.g. the ASUS ROG Z13 Folio + * touchpad) returns a mismatched ID on this specific fetch; + * tolerate it only for devices explicitly flagged as such. + */ + if (report->id != buf[0] && + !(td->mtclass.quirks & MT_QUIRK_IGNORE_FEATURE_ID_MISMATCH)) { hid_err(hdev, "Returned feature report did not match the request\n"); goto free; } @@ -2726,6 +2745,12 @@ static const struct hid_device_id mt_devices[] = { HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8, I2C_VENDOR_ID_HANTICK, I2C_PRODUCT_ID_HANTICK_5288) }, + /* Asus ROG Flow Z13 (2025) GZ302EA keyboard-cover touchpad */ + { .driver_data = MT_CLS_ASUS_ROG_Z13_FOLIO, + HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH_WIN_8, + USB_VENDOR_ID_ASUSTEK, + USB_DEVICE_ID_ASUSTEK_ROG_Z13_FOLIO) }, + /* Generic MT device */ { HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH, HID_ANY_ID, HID_ANY_ID) }, -- 2.55.0