From nobody Sun Jun 14 06:07:10 2026 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (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 77D7A36E473 for ; Sun, 3 May 2026 07:26:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777793219; cv=none; b=KQc4xQPfq7h5tKXGDJ3KODccSlmfufRTcfmYkgO2ornfCjcS0TWiDBny2odq7p837JqTMSFEegqLxkbt3szthNSLTxkt+Syg8SlitwvqmtAzYXBAFMXMQDQqpkeA69TJ5MMVUKNYkJsf/GAf7opBWNAsAJLOVt9c73fcHjomUwU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777793219; c=relaxed/simple; bh=MAnhnGSHDh4DLEx17HlkmYqXOA6wnOEn0B10wMuS0ok=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DL0S+0cicjxKRDN4YQcH0rZwATbCx5xunLpjcLM5VQtn12+3a8HqBsoTcXlPisVFu384lZ8Sa3FZXbb1Kh0oibnlU0ZyXrEQAVM4QfHmPfL9ChU7zToCAio84TE1garzgF+v4RVLXqfUgOQrIjwQWhheP4ZznOw59Zw5Ypzm/Mk= 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=MViRjv7S; arc=none smtp.client-ip=209.85.214.182 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="MViRjv7S" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-2ad9a9be502so17452345ad.0 for ; Sun, 03 May 2026 00:26:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777793218; x=1778398018; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SOg4qBHTe+7jqP3ABxr8VsEBH6RAq2wSVE0e7j4wKpE=; b=MViRjv7SDWq3aY+LO6csNEAFE/EMgX3BjBmRvQs2aumUWOAwoAWTwyRzHVTlSccXJV BLeItDqqWMkgWml9P2ij0j8A8jgtORErzUMjCEm/KPayo4aGaOcogBFJRHOh56YKPBtj tQGQXrwNvVP5t8OItb0ow3GxyyCMFdS6xvjFl+v9mfnOE6Vt5JgP9FJtK02ZtwFvO4tL dRRxY4KxiMGgq1LeMCCdRoskjHKWGCZ42nE6F1q+ABefbgWsDW72U7Karz9WB4P4aXRO 5XbBLkOtwN7vSmHusbQkTvVTSrN1pP23GEfxYyrumdesNqk5/CoSnJcJR2wifoZw98qx fj9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777793218; x=1778398018; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=SOg4qBHTe+7jqP3ABxr8VsEBH6RAq2wSVE0e7j4wKpE=; b=L/8eELmzFJ+pqbtcwNLCDE0f0TxrIiPt4QVVxmVan1Cmi2o+mjTRY/EHDLOAg9J2AO 72R0x21fi5rXF1zp3q+mGqwmpwrGo6a3fQTrkaNCxHtO74eyh46liBDmv9MDBrBbiNiw vSyT1y+Npu+Wuvff3Y6DSKLoewOmTBXmlm+a7ob1sCHwajF1ZeIrAweshArKE/WsPiPu wg70mvrwJn6qMCOICzfbRGjGT6vwk60SoG37Je60dD8rZsaNXSSZhWQjM9JdFBIM8+SQ qnDSIiVc6m78KOLy7jrHQ70Z2BFOFD0U1O/99PYEqzGSXkYSpkv7Q9hx65L2edH1WvGz Zrmw== X-Forwarded-Encrypted: i=1; AFNElJ9oo61EhBwk4hKih0eTmiTXBtvPWsmcxgy6N4DlcVIwz/drj/fTwJT0fA86eiFFSh+EnQa2zC+fZvmOKJM=@vger.kernel.org X-Gm-Message-State: AOJu0YzZCsXwCQuzqsdseFaZ1wycYiyiC5f9ck6jwDBcRFVxVyfU2qy3 TMYAAmrLdSbzkyUFlQaFBadVHjxZPSSi/E8SypC0AMGYqLFVGwk6CV5L X-Gm-Gg: AeBDieuLKhg34vXhfDKmvTAeWbtPIVDEieo0ItxQHN4yki31WHUxol0nuihAu5eG+ro 72fEL9ln4jaT4lCiTOwFRPmS2v0xRmuH96T26x+R/VvkVCV/Co6nOWk+6FaBbsc3JsJ3IwoZnVs pdBf1HUtwIMiSuhDN61AZQ03h8wjmGM5icGs6mlIIr6U+htmAD6zp9muy8aTAW5vr3/RYl1egC+ GMzzcVILpBjIPqXCKOO/Dybe89wGDKLlsAc28jM+9kBKI9xyy7+LH/olO5v5pbmPCX8091+Rov+ c/HzfnysCrl3vAPdbTxwtx7NCIuaza+GnkZVDeOF2KmmzdQugKbx7FVl13/dWhqA5sb3YS+JNLt TBZkmdSPTxAkUgm+SA+RSHGTXM79q+8yvsvSEGArJ04LX53WOLwk8HhJ9VgW+vx7jjr4cA/jHbd rMSedDv354BFaLbcuZt26grNPttW3l5Vp1h1ndP+uYUCKu67zFVk1EMd5UG9CG33iRFQXrng== X-Received: by 2002:a17:902:e548:b0:2b0:6e60:9586 with SMTP id d9443c01a7336-2b9f2579a38mr55557645ad.17.1777793217743; Sun, 03 May 2026 00:26:57 -0700 (PDT) Received: from tranquility.wa.lan (60-241-74-71.static.tpgi.com.au. [60.241.74.71]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b9cae16a9esm64942945ad.50.2026.05.03.00.26.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 May 2026 00:26:57 -0700 (PDT) From: James Ye To: jikos@kernel.org, bentiss@kernel.org, lee@kernel.org, pavel@kernel.org Cc: linux-input@vger.kernel.org, linux-leds@vger.kernel.org, linux-kernel@vger.kernel.org, denis.benato@linux.dev, James Ye Subject: [PATCH 1/6] HID: input: delete hid_battery on disconnect Date: Sun, 3 May 2026 17:26:38 +1000 Message-ID: <20260503072643.2774762-2-jye836@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260503072643.2774762-1-jye836@gmail.com> References: <20260503072643.2774762-1-jye836@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This fixes a use-after-free when an HID device containing a battery is disconnected then reconnected, such as due to binding to a different driver. BUG: KASAN: slab-use-after-free in hidinput_setup_battery.isra.0+0x15a/= 0x9db [hid] Signed-off-by: James Ye --- drivers/hid/hid-input.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c index d73cfa2e73d3..ae0e11c61eb8 100644 --- a/drivers/hid/hid-input.c +++ b/drivers/hid/hid-input.c @@ -2408,6 +2408,7 @@ EXPORT_SYMBOL_GPL(hidinput_connect); void hidinput_disconnect(struct hid_device *hid) { struct hid_input *hidinput, *next; + struct hid_battery *bat, *bat_next; =20 list_for_each_entry_safe(hidinput, next, &hid->inputs, list) { list_del(&hidinput->list); @@ -2419,6 +2420,10 @@ void hidinput_disconnect(struct hid_device *hid) kfree(hidinput); } =20 + list_for_each_entry_safe(bat, bat_next, &hid->batteries, list) { + list_del(&bat->list); + } + /* led_work is spawned by input_dev callbacks, but doesn't access the * parent input_dev at all. Once all input devices are removed, we * know that led_work will never get restarted, so we can cancel it --=20 2.54.0 From nobody Sun Jun 14 06:07:10 2026 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) (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 7979B3822A9 for ; Sun, 3 May 2026 07:27:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777793224; cv=none; b=FkF+kDSvXPxes/071X/4Wovj38Nrc9DrJ30lhbKNqGqpJKoMkh1NeV7T2ujWZPYkjeAW7HMQOqepuSxjlT3DWrERT0OzJ/aNkqnpieTaoU0OkY5XdWj7N1jH4zKXcUg7t8+LbQBbbjJ0PB/rJMSz/0bD/pNWKCd8F56qEF57W9Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777793224; c=relaxed/simple; bh=vfVmkzd8A0z6HncLF1fH136j0IdduRSTxvmyw33nVC0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=h7AmJBTAAfIKmsycj7oDcMY7Y9KX/bBcEjVk9eD03n1yU7kIePuLdFw6zyjLhFwz/N3l5F4uTn6Xs1z/osalW25ZyE3RzNaJeJOhxlvJ4MkjbfxlA3DEZGm2OMrQj9uGh/K8glkHfBTWs3/ycpkmYkVRCjjNih/HvSGw3OJt4PA= 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=KdC82Uc4; arc=none smtp.client-ip=209.85.214.181 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="KdC82Uc4" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-2b9705613ddso18091885ad.1 for ; Sun, 03 May 2026 00:27:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777793223; x=1778398023; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=jIb+W7y+bKsv9LM1iUZJZSIdILe100/J90mWVD85NJc=; b=KdC82Uc4RxV63zouQlJBoAiLSlIbk+EHp9xVB6Y9Lmr+4Wew9bv3DToJo2Vfg7J1A7 gecK7yQP6B1CqUb4VPIQsj82S+YtQ+W8859htiC0oTo76vl3+v9rE94MuFFWH9WEOkhe az3KiZZspxvT2IKn4Bkp4nYdoqorePoR80gzVtnqDthqB1Urg7ipUxY5fbSd9SH+gXDj Oo9e7C/ixr6wUNuwY2AaszwnvT0/fVBoeXSGIVxB+/PdlVQR3INhuuys+IFighvgt0fu sBr8xVDASg3bhoNVoV4b2ytLdvv5zi7Od5eYtHVvg3VCU6wLS8q2c8a2+krC1ku5TycP Vp9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777793223; x=1778398023; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=jIb+W7y+bKsv9LM1iUZJZSIdILe100/J90mWVD85NJc=; b=VFnYFhlEZB3cxZcDuAj5fElVfdqnWPj9pSImLSHqqAh5ifpzZbMZsYoqVzUewhUGsc OPOXlXZ9yZyxae27DSB5VEO20HSYlYaXRupWQrqzCFrB6a9pFtwCfhuUIVnguicbHiad tSdC+vdhm0Zzin9r2TyamyPdwDqo/hm2IFf/O/TjPWunI5xs6XQEeN0nA9CMbM4lSZb/ 5msEUFdP+wy5HgykXSexl2oikIjy6M4tOF54Al4E8F9hGWmcJEekHOec0CcRWuQlbSjl iTHLZL+nvLJXtA2rJzdWMRVn560j/zV+1Ep2+KeArq5RnxvBu9T1aaMjAJLWUTxp9ael dHNg== X-Forwarded-Encrypted: i=1; AFNElJ8wsUL3IDdBEUHLjTY405+BDzAwxdf+ohmyES9aZYzAYBw3U6dNFHn+iwgamSt+KYiFJCorQmvubejoI9E=@vger.kernel.org X-Gm-Message-State: AOJu0YxgJzM7u/9P5xsKi8x+8sMnwADnZ8Limc5hz1eM/eSynvyvrdcU JvEKba6LF+W5HgMo5LsmiRjG4hVUs+DYCDZUmw3o/MlDfwwr/ca92uxW X-Gm-Gg: AeBDieu7sP8osBz8VmALWkNZkmkMI81/1BayqbwLZp21j6wmSD3Pt9SLrvyT/vnBV7u IScM2OYJU1n2vSoOUkbtsEMiWeIY/2TL0oLzi2mir5JyN/ckI6tmgOVEDz6PAl+W1MUPkGgQB6k H/l1GEPM62oxl5dIQRRtwG7AWZqtVWNRH1D6qSsScCWES6tfij+Vrnf9yxLTIlkCQkbtVOA7Gv7 dhg5BWPdniHR+zfFPEYXFZyE6BE4DC5Jx+DS/aB8IlwWzB57rAoJfPbsSkSST1WrLGQEKdmxo8h RiQvxW7DCxAffB+NKxS799OO5LqruxLmS92zpXSUCW0HgO0SqMY2Of2liWpelnw2TBdmX/E6EzE cfQJuR4rGUKlqHe9Kz0AvGvQAab3uULa6q9fVysU2UrBMVkAOCVvWlz+/qccENQpkPvgIfGISyS Q2//4I95+13a+Oc4ME7fPVW04RQCDhZ+nw6Gurn+vGvIBg/r7LKrUcnmJPmMfe3NpTv8Jqzw== X-Received: by 2002:a17:903:3c43:b0:2b0:41bf:ca83 with SMTP id d9443c01a7336-2b9f260d7b2mr55819115ad.23.1777793222705; Sun, 03 May 2026 00:27:02 -0700 (PDT) Received: from tranquility.wa.lan (60-241-74-71.static.tpgi.com.au. [60.241.74.71]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b9cae16a9esm64942945ad.50.2026.05.03.00.26.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 May 2026 00:27:02 -0700 (PDT) From: James Ye To: jikos@kernel.org, bentiss@kernel.org, lee@kernel.org, pavel@kernel.org Cc: linux-input@vger.kernel.org, linux-leds@vger.kernel.org, linux-kernel@vger.kernel.org, denis.benato@linux.dev, James Ye Subject: [PATCH 2/6] HID: asus: check feature reports when determining is_vendor Date: Sun, 3 May 2026 17:26:39 +1000 Message-ID: <20260503072643.2774762-3-jye836@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260503072643.2774762-1-jye836@gmail.com> References: <20260503072643.2774762-1-jye836@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" ASUS T3304 Soft Keyboard has these reports on its touchpad interface, which will be bound to hid_multitouch. To support a quirk allowing hid_asus to configure the keyboard interface, feature reports should be checked in addition to input reports, as is already the case in asus_has_report_id. Signed-off-by: James Ye --- drivers/hid/hid-asus.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c index 3f5e96900b67..ef9d5eba4dc9 100644 --- a/drivers/hid/hid-asus.c +++ b/drivers/hid/hid-asus.c @@ -1282,10 +1282,12 @@ static int asus_probe(struct hid_device *hdev, cons= t struct hid_device_id *id) } =20 /* Check for vendor for RGB init and handle generic devices properly. */ - rep_enum =3D &hdev->report_enum[HID_INPUT_REPORT]; - list_for_each_entry(rep, &rep_enum->report_list, list) { - if ((rep->application & HID_USAGE_PAGE) =3D=3D HID_UP_ASUSVENDOR) - is_vendor =3D true; + for (int t =3D HID_INPUT_REPORT; t <=3D HID_FEATURE_REPORT; t++) { + rep_enum =3D &hdev->report_enum[t]; + list_for_each_entry(rep, &rep_enum->report_list, list) { + if ((rep->application & HID_USAGE_PAGE) =3D=3D HID_UP_ASUSVENDOR) + is_vendor =3D true; + } } =20 ret =3D hid_hw_start(hdev, HID_CONNECT_DEFAULT); --=20 2.54.0 From nobody Sun Jun 14 06:07:10 2026 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) (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 1E4EC3822A9 for ; Sun, 3 May 2026 07:27:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777793230; cv=none; b=sppkwf6Rcnxi5PgfQx2VrLYUL3umraLO2cp3y+yXBs/OuPHULVnSMbv9zI2CewPy/TRCT9RVckwCUP4E2yiLy0/gZkwPw1q380UILn+ce/dHY0WoNFlzJmTVD4D96a/fhyTV6SIccnTYfiuzQC8vexMVFnzq/SK9TO+geBCD8f8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777793230; c=relaxed/simple; bh=kFUC4AFFFacUelY7IpdtKgONXXfUybiHuxyG9k2k2Pw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NVONRhhGAqBkVMrS8pWhFKRliE43dg8NhRI2gdsK23pDzZrnjh5FYbLyTrzCbsV31f9tafffJkmbC5BQF4zhh+5BuDLGZXvLAvCPUYyr36mbxAk4U4l/wMGGUmBSP50oAFvVk7uy9zJ8nCU4OnGVEJZE/c8oRvYyziz1juNlpVk= 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=X6vwT6jm; arc=none smtp.client-ip=209.85.214.170 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="X6vwT6jm" Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-2b2589c26e3so27823335ad.1 for ; Sun, 03 May 2026 00:27:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777793227; x=1778398027; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Gu0kLs5sc7Y9WY+aPYAuq9avhRq7tFLy/KnTa79pO+k=; b=X6vwT6jm89OT5DlNqvLy2zgzrUDoDG9mjRd81ccN4M7bG7bFD/QAP61blRxYyOhECX g+iZzTjgz8CSFFk/coQG9kUZoZdhayBA5RRq/vg9kxXeFXvt8VOYevJNaagPkiKEgblp +BErdohT7HoD7BtBtLkkVRchLIzWc/bL7nGBI7GtVhi8LHJXbvALbExnLhQHAbgaodKy 7MLUo5zc3+jIj7z4D0EO/+wnFdD4IuPyfadvPAFYmNu6s9nFDlal1GwoBtRwVGuEt37z oQvpY8+Mc9Cs8ECnj13PB8ecDmMoIj3kHCBzKfwRPpNNMDi7TPBuyCpp9saDf+IM1L6I fZVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777793227; x=1778398027; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Gu0kLs5sc7Y9WY+aPYAuq9avhRq7tFLy/KnTa79pO+k=; b=JXKg5iVJup3Tbpu/9YgclEMCnHkAMR1fEboWS7TOzXdcSYqRH8aEfiPkFLUT4wXRxk ApJpwct79nFIeHnguvO4StKcRbi62NLU4x/QUPn7tAhVZQeItsRe7W2BVaVRvUqSr/aB Bd/P5DXZvt5oW/ubQ/QlKJDmo+iDz1WaNb4AeD9Soy2OxeYB2Y1wzwxhMWbUa56DKdjS 1VHZhHFFQDAb0bXsuu8PmZRx8ISNbYWgbiyMhx99pc8q3THlnOaKrpbfOOoY3bwDw/ya sxCkoJlKy2+4eKy6qQ8wOBl0itKif+6KjSbANjTMigZw2MNQKH/ot/gvbmY+NJhq/IeM 009g== X-Forwarded-Encrypted: i=1; AFNElJ90NDY8IJp3hkpXlJFUR2PWQjNPu74qdhM6ryaBPoAoOVPrRwVVTGEodEArQINhCRhdJZWFFbko0eDTwmk=@vger.kernel.org X-Gm-Message-State: AOJu0YwfYxebCX5T/3D8jQqA+I7807mX6fm868UjAUt8N8KXF9iki3tK VeXbDZC/YcaMzjBe/dy8Lg2M1o/iS23MNoWHD4jV5wra6kiVBTxQp2XV/aJrlQ6B X-Gm-Gg: AeBDietFqHk3BjWOEoucqdDNmyjpVipCJ+SFtWn1jdUug2lDhy5AR0P5GZ6wpjm5YXN DToSrbfFoI89+tMoKJcJlRPSFBYxeI/UiJQEAcVdQigQ9Gpj9eP6LItc+dm/25pNj63Ngksg5zn scjD0u+f/jDYWhqELU0igCu/VAmJ9vDjLGDvGxmaXuMJlRO/7sJp0VeHEduEiXffVoMkqalfv7M v/1Wjr/OR7Adfp/fSlONJLbH0GYUkws7QL+1ukTWvkqSbnhHBmMsP6PHbyIiPBT2mqqZoMw80DE qFfSWG5u+R95z3LWFB8q7pG3f2qm+tgYrHnGgY8RbwjZCtvWsV/XTuV8kBz98zdCCmzrgP4kJFG 2yMa6I7ps+6wI8Pw8WFKoRmd3jwWedYmcq5Cf2zJCYtSuWVlhZIhi/QAu4MNpjjHY7f6iBBfQdJ gvS2XzqFx5GKZRjksHbjf08j4wlZD2Wn4Hq8qJQdb905tGtBC1Nmqi/iBFEqbGE2haLSS2nw== X-Received: by 2002:a17:902:f541:b0:2ba:1a2e:5045 with SMTP id d9443c01a7336-2ba1a2e51cemr4512875ad.31.1777793227409; Sun, 03 May 2026 00:27:07 -0700 (PDT) Received: from tranquility.wa.lan (60-241-74-71.static.tpgi.com.au. [60.241.74.71]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b9cae16a9esm64942945ad.50.2026.05.03.00.27.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 May 2026 00:27:07 -0700 (PDT) From: James Ye To: jikos@kernel.org, bentiss@kernel.org, lee@kernel.org, pavel@kernel.org Cc: linux-input@vger.kernel.org, linux-leds@vger.kernel.org, linux-kernel@vger.kernel.org, denis.benato@linux.dev, James Ye Subject: [PATCH 3/6] HID: asus: add support for T3304 detachable keyboard Date: Sun, 3 May 2026 17:26:40 +1000 Message-ID: <20260503072643.2774762-4-jye836@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260503072643.2774762-1-jye836@gmail.com> References: <20260503072643.2774762-1-jye836@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" ASUSTek Computer, Inc. T3304 Soft Keyboard [0b05:1aad] is the detachable keyboard of the ASUS Vivobook 13 Slate OLED (T3304). It presents as a USB device with two interfaces: a keyboard and a pointing device (touchpad). Basic keyboard and full touchpad functionality work out-of-the-box with hid-generic and hid-multitouch, but function key combos e.g. volume, brightness control, home/end/pgup/pgdown require initialization. Bind the keyboard interface to hid-asus for initialization. The OEM-specific report descriptors required for this are present only on the touchpad interface, not the keyboard, so a quirk is used to add the required feature descriptor. Signed-off-by: James Ye Reviewed-By: Denis Benato --- drivers/hid/hid-asus.c | 58 +++++++++++++++++++++++++++++++++++++++--- drivers/hid/hid-ids.h | 1 + 2 files changed, 56 insertions(+), 3 deletions(-) diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c index ef9d5eba4dc9..e4c97fddfaf1 100644 --- a/drivers/hid/hid-asus.c +++ b/drivers/hid/hid-asus.c @@ -99,6 +99,7 @@ MODULE_DESCRIPTION("Asus HID Keyboard and TouchPad"); #define QUIRK_ROG_CLAYMORE_II_KEYBOARD BIT(12) #define QUIRK_ROG_ALLY_XPAD BIT(13) #define QUIRK_HID_FN_LOCK BIT(14) +#define QUIRK_T3304_KEYBOARD BIT(15) #define I2C_KEYBOARD_QUIRKS (QUIRK_FIX_NOTEBOOK_REPORT | \ QUIRK_NO_INIT_REPORTS | \ @@ -494,6 +495,14 @@ static int asus_kbd_init(struct hid_device *hdev, u8 r= eport_id) return ret; } + struct asus_drvdata *drvdata =3D hid_get_drvdata(hdev); + + /* T3304 keyboard always replies with 16 0xff bytes. Don't check for + * acknowledgment. + */ + if (drvdata->quirks & QUIRK_T3304_KEYBOARD) + return 0; + u8 *readbuf __free(kfree) =3D kzalloc(FEATURE_KBD_REPORT_SIZE, GFP_KERNEL= ); if (!readbuf) return -ENOMEM; @@ -1312,10 +1321,12 @@ static int asus_probe(struct hid_device *hdev, cons= t struct hid_device_id *id) hid_warn(hdev, "Failed to initialize backlight.\n"); /* - * For ROG keyboards, skip rename for consistency and ->input check as - * some devices do not have inputs. + * For ROG and T3304 keyboards, skip rename for consistency. + * For ROG keyboards, skip ->input check as some devices do not have + * inputs. */ - if (drvdata->quirks & QUIRK_ROG_NKEY_KEYBOARD) + if (drvdata->quirks & QUIRK_ROG_NKEY_KEYBOARD || + drvdata->quirks & QUIRK_T3304_KEYBOARD) return 0; /* @@ -1369,6 +1380,22 @@ static const __u8 asus_g752_fixed_rdesc[] =3D { 0x2A, 0xFF, 0x00, /* Usage Maximum (0xFF) */ }; +static const __u8 asus_t3304_fixed_rdesc[] =3D { + 0x06, 0x31, 0xff, // Usage Page (Vendor Usage Page 0xff31) + 0x09, 0x76, // Usage (Vendor Usage 0x76) + 0xa1, 0x01, // Collection (Application) + 0x05, 0xff, // Usage Page (Vendor Usage Page 0xff) + 0x85, 0x5a, // Report ID (90) + 0x19, 0x00, // Usage Minimum (0) + 0x2a, 0xff, 0x00, // Usage Maximum (255) + 0x15, 0x00, // Logical Minimum (0) + 0x26, 0xff, 0x00, // Logical Maximum (255) + 0x75, 0x08, // Report Size (8) + 0x95, 0x0f, // Report Count (15) + 0xb1, 0x02, // Feature (Data,Var,Abs) + 0xc0, // End Collection +}; + static const __u8 *asus_report_fixup(struct hid_device *hdev, __u8 *rdesc, unsigned int *rsize) { @@ -1473,6 +1500,28 @@ static const __u8 *asus_report_fixup(struct hid_devi= ce *hdev, __u8 *rdesc, } } + /* T3304 keyboard's vendor descriptors are on the touchpad interface, + * not the keyboard. But we need hid-multitouch to handle the touchpad, + * Add a descriptor with only the config report so that this driver can + * perform initialization. + */ + if (drvdata->quirks & QUIRK_T3304_KEYBOARD) { + __u8 *new_rdesc; + size_t new_size =3D *rsize + sizeof(asus_t3304_fixed_rdesc); + + new_rdesc =3D devm_kzalloc(&hdev->dev, new_size, GFP_KERNEL); + if (new_rdesc =3D=3D NULL) + return rdesc; + + hid_info(hdev, "Fixing up Asus T3304 keyboard report descriptor\n"); + memcpy(new_rdesc, rdesc, *rsize); + memcpy(new_rdesc + *rsize, asus_t3304_fixed_rdesc, + sizeof(asus_t3304_fixed_rdesc)); + + *rsize =3D new_size; + rdesc =3D new_rdesc; + } + return rdesc; } @@ -1536,6 +1585,9 @@ static const struct hid_device_id asus_devices[] =3D { QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD }, { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_T101HA_KEYBOARD) }, + { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, + USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_T3304_KEYBOARD), + QUIRK_T3304_KEYBOARD }, { } }; MODULE_DEVICE_TABLE(hid, asus_devices); diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h index 0cf63742315b..ecf30e36a99d 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h @@ -219,6 +219,7 @@ #define USB_DEVICE_ID_ASUSTEK_T100CHI_KEYBOARD 0x8502 #define USB_DEVICE_ID_ASUSTEK_T101HA_KEYBOARD 0x183d #define USB_DEVICE_ID_ASUSTEK_T304_KEYBOARD 0x184a +#define USB_DEVICE_ID_ASUSTEK_T3304_KEYBOARD 0x1aad #define USB_DEVICE_ID_ASUSTEK_I2C_KEYBOARD 0x8585 #define USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD 0x0101 #define USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1 0x1854 -- 2.54.0 From nobody Sun Jun 14 06:07:10 2026 Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.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 AAEB83A875E for ; Sun, 3 May 2026 07:27:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777793233; cv=none; b=UVfIcuq5m2dr2EMJYI41M+103ViGSPPzaaaSCF0qHrHqbquyA3bxxDvsmkkrkHwaAJfXD3dHDDA1nZXJ/BOz1Wt44W1VRaysDyvOEmFUp9wyc6q28w//xOZtJYMVJ9DhOlS4n0oLZhGUUoQsthSEUt0qYcjSCeV0y95NzkTGFOQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777793233; c=relaxed/simple; bh=Mz+1pplQ0JIsxE7949cAUpL6y+IvtSik4EpUdewqA24=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=creixAsDPZZwFq2KoS0UFfm5gRtx+avJbCtknc4b4cJgcb5F9GlpdWhGze0Jk4XoMvDHUmBFGZb4Qo3c2lp0Jwlx/goybkND3zYvAit7RtZldJjXesNLH77BrpNQ9xaQsljOXXbaH+nFEYORMRdbZq5Jdy0USCbG6yMw6gm/oOM= 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=csb2zVQ1; arc=none smtp.client-ip=209.85.214.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="csb2zVQ1" Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-2b788a98557so26766865ad.2 for ; Sun, 03 May 2026 00:27:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777793232; x=1778398032; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=vTEfk4Xq7IA6AAhVE3/F26Caaw0jUui+q3LfKcseDq8=; b=csb2zVQ1IFT9pQ2effwko2T+Nl9BWkjXsPRwe43B96+jWS6/z/zT2xlLZasrrhu5nQ SyYPMaBEuenaxsLlLv6QaHegZ2y9S7QWNOiDChbnSgSsAnxRZ/uJC0YmtVEIjpXQQ+eQ 3kbizxK584+t7La8mDd2LYMOCZ5FI5Oimzn1UIlN/xQSRXLCXImeIagVHe2c3Jps+aLN c9mD1OsLhnA7dVYfWWep62Q13/BM+9531qy5ef8OiuacU4ytg3ha9M9uf58u4s74qfPA qYISvWwg7/kI1+4CW0odawvE61wMbko1rTRarBqrULjP1F1aKL9OpoXk7bpqtPSBrDib 9ddQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777793232; x=1778398032; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=vTEfk4Xq7IA6AAhVE3/F26Caaw0jUui+q3LfKcseDq8=; b=aO4EGeQTtAY16fQvBrBLseerKuv2IV4V4GBOi66rw9V2oxsTxT4vOP4VPCXdkfR0gg eGSbolzrdA5nSCmZn8yK0641T+562UneixeJKFKE0RQ6+BbReUksKIVXIvwjgji81I5k sf29FJhEGjqBnfThDk+e5yr22GmYCfHrOsY/08BuUJbssbAjDbYrhVj7i++mVybznOlZ o60OC8BNyFrSid5BHzO4JBfWPQRkm2JWaz0vWBFFNvTExvfze7bw9DAuAyK17Q8pYpuZ Qjo3LRJvOzSwZg7GldaD/QAMsJIcT7PEzSNwUtu0wBVS4iZ3fEgzs3cD3DsG0V5akpBl cutA== X-Forwarded-Encrypted: i=1; AFNElJ+tWgfPSIDlO5hsqtNK376sLMhBzmWaK2KX+lUZxP1l/ysYH2sqYEMkcZWBrc7OR32i4G5kUvJEBvrjgew=@vger.kernel.org X-Gm-Message-State: AOJu0Yw4cnD5a3AnseYQgthijVrKe7EvtkkLDmgV5QZeL8+I2fNp0uck YhELyS4e9AyIAdJzSduKw5wsXwnoupAg5/iD2G+BUDodVzJoys7e4mRy X-Gm-Gg: AeBDievewM9Lueta/uBg6vmnUKXqqjNYZaBn8gO+upEsLzIXBb+4kpZGcert3yzlGVQ th07e6V0OVK8lLrZvpjyya1g9aQNzYiVB0iJGijT1xXsj4CwzvcTzRwOdpO/gFMDZl9s2FCxpXw Qbk3o90NmCDM19wTm6IikuKtg1OP8RNl5+6CFLBSKv40+Z397mEm6WlKqtO2BJs5DcjFXCkm0JX iFgCBueY+Wd4p0IUBQJD5am4gt24K5Fr8lnn+1BzS7v6eCXuVE2ckszjW+RCXdTlMuZqlaM/VcY dTjVPhzVZbtXjznrCQpfQpLfL+1W4d89tz808+yObATaLpkWyK58KEEo+3w342ktn3nHuWHaIFx tROJxc+uBJgvPNfClIUfHswggjWO//BZm7ZytRZCVP2NoZ74O6Mw+giqdWaqy+hsWpjx1zUQvt3 hJusyRzWhe+3/3k+JA78zHmugka5OZx+aBtGEEHnTnJPyy8Vq3/9l9VDnzT2hoU1cNZkelOw== X-Received: by 2002:a17:903:1ab0:b0:2ba:1202:4fa8 with SMTP id d9443c01a7336-2ba1202518emr12938835ad.20.1777793232110; Sun, 03 May 2026 00:27:12 -0700 (PDT) Received: from tranquility.wa.lan (60-241-74-71.static.tpgi.com.au. [60.241.74.71]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b9cae16a9esm64942945ad.50.2026.05.03.00.27.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 May 2026 00:27:11 -0700 (PDT) From: James Ye To: jikos@kernel.org, bentiss@kernel.org, lee@kernel.org, pavel@kernel.org Cc: linux-input@vger.kernel.org, linux-leds@vger.kernel.org, linux-kernel@vger.kernel.org, denis.benato@linux.dev, James Ye Subject: [PATCH 4/6] HID: multitouch: add support for ASUS T3304 media keys Date: Sun, 3 May 2026 17:26:41 +1000 Message-ID: <20260503072643.2774762-5-jye836@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260503072643.2774762-1-jye836@gmail.com> References: <20260503072643.2774762-1-jye836@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Touchpad functionality already works with hid-multitouch, but media key events are emitted from the touchpad interface. Add MT_CLS_ASUS to handle these, and also add missing key mappings. Signed-off-by: James Ye --- drivers/hid/hid-multitouch.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c index e82a3c4e5b44..a49930496c5b 100644 --- a/drivers/hid/hid-multitouch.c +++ b/drivers/hid/hid-multitouch.c @@ -1510,6 +1510,10 @@ static int mt_input_mapping(struct hid_device *hdev,= struct hid_input *hi, case 0x35: mt_map_key_clear(KEY_DISPLAY_OFF); break; case 0x6b: mt_map_key_clear(KEY_F21); break; case 0x6c: mt_map_key_clear(KEY_SLEEP); break; + case 0x7c: mt_map_key_clear(KEY_MICMUTE); break; + case 0x4e: mt_map_key_clear(KEY_FN_ESC); break; + + case 0x86: mt_map_key_clear(KEY_PROG1); break; /* MyASUS key */ default: return -1; } @@ -2145,6 +2149,12 @@ static const struct hid_device_id mt_devices[] =3D { USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_T304_KEYBOARD) }, =20 + /* Asus T3304 */ + { .driver_data =3D MT_CLS_ASUS, + HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH_WIN_8, + USB_VENDOR_ID_ASUSTEK, + USB_DEVICE_ID_ASUSTEK_T3304_KEYBOARD) }, + /* Atmel panels */ { .driver_data =3D MT_CLS_SERIAL, MT_USB_DEVICE(USB_VENDOR_ID_ATMEL, --=20 2.54.0 From nobody Sun Jun 14 06:07:10 2026 Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) (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 9644F36E473 for ; Sun, 3 May 2026 07:27:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777793238; cv=none; b=GrcpOrDFHADMOsKYddEAoKhYFRXca0q/JozHX3Czz5wB/u/sQclsXl5lWkEMauyDiwG7jW2zxi8iK/nL/9tPgfShkTZ2Mv/vDDUQ1Bb0mAvwzXqrXe8fnfkRROgE7YF6FQWYPnn/y+FT7Rz3mJFLULcI/fWxV+O7TnaQkJ0YQ84= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777793238; c=relaxed/simple; bh=PPnVKyrsYxJJ4G4eNrO7KUeOUT6cgnm07ShuwgkFNEA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kpcYNSXIZlzPdDhlMnUs6MONjqu4PZO1RqSH7fXXma9h9FRLfaWDlxhlsKUlG0kIZYrIcUVCqvSKrwwTw5ZkgFwEAYGMQV6hStbzTeFcZScCh3SeWENExa1Gczkyrl2T9eIM/vJ9Rf7j3HoDuddZmWEBJUbGZlCss/n+ODOULkA= 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=hJLAB3Ck; arc=none smtp.client-ip=209.85.214.174 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="hJLAB3Ck" Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-2b4583f0a1aso18348745ad.3 for ; Sun, 03 May 2026 00:27:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777793237; x=1778398037; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BL+RRTxL9n7ZrU6H/241x49MhcKuis8NrbKzz4pOx+c=; b=hJLAB3Ck9p/j7XOJ98KdP2al/u1W6V0ZK0YsHk9hmvw1eEmvl2aB/juDXqHx9yx53v ufnLL6/wyLSOVnohYSKafmy/I1D31/Oc2TS+ILws76bTFOo/69lTf8yKbL9KgIr9nrHS G+D6kI0J/+vVJy15uRaNX3DdC+V5MPMEPa7v33lnMMwxj9WFH/mJOwrXRx5UuVAmmTtA Z1RjhrZv7noQ1Dj4DcccFfoVss/ZsXnkKnN6UUcd/X2ll5uCohV157KHU8FDfreK/OMu bRSqYDbi4PrhRlbzL5ruB1I2E7Nahr8ItoTyQchvLG60rMvR2Gj4haTMtdHGyrmkQWJY 6tNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777793237; x=1778398037; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=BL+RRTxL9n7ZrU6H/241x49MhcKuis8NrbKzz4pOx+c=; b=GUu5nUcJtkntu3PkafKsE9VjA/+4hXNRrSJbXnZ1ytZnzl/1jZAAYRJj9KTSSPIlMN tMjnq38E3jw39iMYq59eNUd+YGvQsHNW5VsyyfRoC0dObM/dWiXY7Kr+Y8bn7gKqeOmR yLLP8ZdCCSUpKRUMBbg82OXkbwgX+i9yFqV286NokbIQMKzpLVT6oBPhASXW9SWkCBSd 8A49oFbDb1TttOdHJsIOjDSFD+X4i0rLHAzzUAmIl/tqpDDmE2vdCLGay0paA0gRyWp0 gd+15TpNUrQxVCCgRVwH69CExmav6PnWjKckx4BwTPRCjvV5N+DG3xycebiHKgSgxJa7 TUlA== X-Forwarded-Encrypted: i=1; AFNElJ/WRbhdpArZh88e+g/HMofix5bx/BIABcBXGctH2fiOTzLowLJdJSWBAWEPiLPbeopilN0i3yC2gtuuL5o=@vger.kernel.org X-Gm-Message-State: AOJu0YxHEGqcJ+EmyDf3Bu3g1gOeWchZaczrDEjLHVh+GlPxxKB4SGkA BDkafWRYVntwNr2NAT0EMHfXry/ExTxKRjfNqrTTGOvPWkh1IEfHL3Ys X-Gm-Gg: AeBDieu/zrlQ12soeGfPOzaYRb4rprWLb60SVZ2cVVSTVGdRX4X7JmgIp23KbuhBkvn IdtTffkFdo/2m1xSwFPL3eYbXqjO70I4g3GkFn+xlqxtSOYL+rkjCjtqEhTLgPww82OFn+oA7Ji U+ifvRPXwRpQ+rspCpMu5kxtcsLBlIw7VNXJBDIAzLhuekEDU6hsuzlLWfD535V3DBXrKOWJfam 9z2ylXQTFfmGUx2oO7VlYojjICYiR20K/U2Hk03/Vdchwb/dRJ00Fra5fPZ9cjvS0sXnXrn6wDt aO8Ox3utTydiih5TzG1x1F+7bizx7IVyg5pC2tPtrOqQaaIflELeTtIwLfDtMo7/7tmjJM7wDdb C4A0PpXyNdi/1AQkSD12A39AKGxdnWb4WoVnEoJS20gkGGbSgXtmd+aX3+TxXfJ+3myk8vkSoe0 wJ5vxZ0cNcNn4tBCd1u176IPxEljnGVUkcoG/+HLUuHfflfoMDROo3zBC6QXo/EWmi268dzg== X-Received: by 2002:a17:903:4b24:b0:2ae:6192:8d78 with SMTP id d9443c01a7336-2b9f257b634mr53308175ad.1.1777793236884; Sun, 03 May 2026 00:27:16 -0700 (PDT) Received: from tranquility.wa.lan (60-241-74-71.static.tpgi.com.au. [60.241.74.71]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b9cae16a9esm64942945ad.50.2026.05.03.00.27.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 May 2026 00:27:16 -0700 (PDT) From: James Ye To: jikos@kernel.org, bentiss@kernel.org, lee@kernel.org, pavel@kernel.org Cc: linux-input@vger.kernel.org, linux-leds@vger.kernel.org, linux-kernel@vger.kernel.org, denis.benato@linux.dev, James Ye Subject: [PATCH 5/6] HID: asus: add microphone mute LED support for T3304 Date: Sun, 3 May 2026 17:26:42 +1000 Message-ID: <20260503072643.2774762-6-jye836@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260503072643.2774762-1-jye836@gmail.com> References: <20260503072643.2774762-1-jye836@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" T3304 keyboard has a microphone mute LED indicator on the same key (Fn+F9). Look this up with a led_classdev. It does not have backlight LEDs, so return without failure from asus_kbd_register_leds if backlight support is not present. Signed-off-by: James Ye --- drivers/hid/hid-asus.c | 51 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c index e4c97fddfaf1..4f68bc40b8bf 100644 --- a/drivers/hid/hid-asus.c +++ b/drivers/hid/hid-asus.c @@ -100,6 +100,7 @@ MODULE_DESCRIPTION("Asus HID Keyboard and TouchPad"); #define QUIRK_ROG_ALLY_XPAD BIT(13) #define QUIRK_HID_FN_LOCK BIT(14) #define QUIRK_T3304_KEYBOARD BIT(15) +#define QUIRK_HID_MICMUTE BIT(16) =20 #define I2C_KEYBOARD_QUIRKS (QUIRK_FIX_NOTEBOOK_REPORT | \ QUIRK_NO_INIT_REPORTS | \ @@ -144,6 +145,7 @@ struct asus_drvdata { unsigned long battery_next_query; struct work_struct fn_lock_sync_work; bool fn_lock; + struct led_classdev led_micmute; }; =20 static int asus_report_battery(struct asus_drvdata *, u8 *, int); @@ -578,6 +580,26 @@ static int asus_kbd_disable_oobe(struct hid_device *hd= ev) return 0; } =20 +static int asus_kbd_set_micmute_led(struct hid_device *hdev, bool enabled) +{ + u8 buf[] =3D { FEATURE_KBD_REPORT_ID, 0xd0, 0x7c, enabled }; + + return asus_kbd_set_report(hdev, buf, sizeof(buf)); +} + +static int asus_led_brightness_set(struct led_classdev *led_cdev, + enum led_brightness value) +{ + struct device *dev =3D led_cdev->dev->parent; + struct hid_device *hdev =3D to_hid_device(dev); + struct asus_drvdata *drvdata =3D hid_get_drvdata(hdev); + + if (led_cdev =3D=3D &drvdata->led_micmute) + return asus_kbd_set_micmute_led(hdev, !!value); + + return -ENODEV; +} + static int asus_kbd_set_fn_lock(struct hid_device *hdev, bool enabled) { u8 buf[] =3D { FEATURE_KBD_REPORT_ID, 0xd0, 0x4e, !!enabled }; @@ -752,9 +774,31 @@ static int asus_kbd_register_leds(struct hid_device *h= dev) if (ret < 0) return ret; =20 + if (drvdata->quirks & QUIRK_HID_MICMUTE) { + char *name_micmute; + size_t name_sz =3D strlen(dev_name(&hdev->dev)) + 16; + + name_micmute =3D devm_kzalloc(&hdev->dev, name_sz, GFP_KERNEL); + if (name_micmute =3D=3D NULL) + return -ENOMEM; + + snprintf(name_micmute, name_sz, "%s::micmute", dev_name(&hdev->dev)); + drvdata->led_micmute.name =3D name_micmute; + drvdata->led_micmute.default_trigger =3D "audio-micmute"; + drvdata->led_micmute.brightness_set_blocking =3D asus_led_brightness_set; + drvdata->led_micmute.max_brightness =3D 1; + drvdata->led_micmute.flags =3D LED_CORE_SUSPENDRESUME | LED_HW_PLUGGABLE; + drvdata->led_micmute.dev =3D &hdev->dev; + ret =3D devm_led_classdev_register(&hdev->dev, &drvdata->led_micmute); + if (ret < 0) { + hid_err(hdev, "Failed to register LED: %d.\n", ret); + return ret; + } + } + /* Check for backlight support */ if (!(kbd_func & SUPPORT_KBD_BACKLIGHT)) - return -ENODEV; + return 0; =20 if (dmi_match(DMI_PRODUCT_FAMILY, "ProArt P16")) { ret =3D asus_kbd_disable_oobe(hdev); @@ -1315,7 +1359,8 @@ static int asus_probe(struct hid_device *hdev, const = struct hid_device_id *id) } =20 /* Laptops keyboard backlight is always at 0x5a */ - if (is_vendor && (drvdata->quirks & QUIRK_USE_KBD_BACKLIGHT) && + if (is_vendor && + (drvdata->quirks & (QUIRK_USE_KBD_BACKLIGHT | QUIRK_HID_MICMUTE)) && (asus_has_report_id(hdev, FEATURE_KBD_REPORT_ID)) && (asus_kbd_register_leds(hdev))) hid_warn(hdev, "Failed to initialize backlight.\n"); @@ -1587,7 +1632,7 @@ static const struct hid_device_id asus_devices[] =3D { USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_T101HA_KEYBOARD) }, { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_T3304_KEYBOARD), - QUIRK_T3304_KEYBOARD }, + QUIRK_T3304_KEYBOARD | QUIRK_HID_MICMUTE }, { } }; MODULE_DEVICE_TABLE(hid, asus_devices); --=20 2.54.0 From nobody Sun Jun 14 06:07:10 2026 Received: from mail-pg1-f182.google.com (mail-pg1-f182.google.com [209.85.215.182]) (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 45E4E3822A9 for ; Sun, 3 May 2026 07:27:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777793243; cv=none; b=YTsC4FbxFPpTcC1fK56hs5Hgc2LOYj6UpNmO9Cwe4PnXd4pSY1n4OQJrVvIKEx8KR8lB/twUcZwx5nEu2Ge78l0WkyIdJq5QH5fgHrg/OOqw5Q04+6oC3FocKecN6lEKJOv94DQXF2cGUU5DFf5ANNzVEaeOp8NitiN2hSZQuhQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777793243; c=relaxed/simple; bh=BmEGzsHJ8K+3+vN7Jro/PlahKcA+d5OK7rUba+0zggo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lIkGDzQwp3NE5iE7zqQhPP2IhTceZNIhPABThGgHG6Th4S3OD8R1ukGPULUOlM9XUTJDzoeoB7I9CthDBY9RRnnNZ2n+calBCGQOabhUO9eGfzBk9N/utprOiCNsV5/cCA2kl0KRv51Eyb1QzmUa109gx7nB2O4wnu2rrZMspc4= 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=CRDzQElm; arc=none smtp.client-ip=209.85.215.182 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="CRDzQElm" Received: by mail-pg1-f182.google.com with SMTP id 41be03b00d2f7-c801912c903so162030a12.0 for ; Sun, 03 May 2026 00:27:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777793241; x=1778398041; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=OHEBdikQ6bf/NgnoLrg9r5ETcVwJT7U135E6QfMQij0=; b=CRDzQElmSnOLZ20jG9/rdGe/kRwaBZPJGYouCXNUEkPI9SE0Uka0IIivsKi92U6QmK J9AOgM169KZ/U3Qk2vFOpmQZ3OjKqZIKz6pKkFwvbK1MPI3ivdLd6H6mZT45rsIuVKn5 FimPOKoY8fv+9RMN9JVFYWV1whFX1KWdmuJjJgQFkl1VatdePS9psMRHHIDDlubujLUl oUTl78/ww1ktq5r2/y+gI+V6gL9xqaGATYL9nIDLf4URlrurQ2PNVmNZVjK9Dv7Z9Gdi BkxtynNIjP3CQv/t0VLauSd4Fm/ZprEloVzd+iQFR8eUDI1jbxCpeikLK+Z4+60G+kgM mN0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777793241; x=1778398041; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=OHEBdikQ6bf/NgnoLrg9r5ETcVwJT7U135E6QfMQij0=; b=d7Bnf+YKE+Jwlgz7Do4xVPofNgJiNNI1E2WGe9W+BlaE2cSXNDQLjuotrgZobJJD2x ConBXa11xLLKjESVX1tPtZCNk/DJqNbPpLAmjOJk5t7CpiOz+Gstz8Q0NWeK7GaLW9sj eAkoVkdTiyXZw9KKdpKVpGAEm3tYP9wUwWVXIRwecdaz3CEq7O+CWL7/sUZUtseCazAO FJNpudnNB4vMlw7t+jT9Lzvw7GvkEwboyXXUcYr6R0J4iECML4nxGrENMh8XlVAZhB28 rhMgrMQqY/cwt+USeTkp1Rcs+HNxURqG2DuBZJrKvOg0CFBO1nCenQpitHXlPfAa+bzM ffIQ== X-Forwarded-Encrypted: i=1; AFNElJ8q3t/HcMN+wz3HRlJDbPg9nf+azcLZKdTeLhnX2o6UyLLEqi71kGFFJOajHIFm2v92lQOJmZ06Uikpmkw=@vger.kernel.org X-Gm-Message-State: AOJu0YzSaQck+wCwQyhWXICPtYoA7obRcxdvx1mGGsbcV5/f/ndB1Cmx bK79R+qb7AYXWOatxrQqlf1hb2y0qbeVQttIQSqsY+tE36UvpYN8u47H X-Gm-Gg: AeBDieuOD2qbisWJxON+PUWdHBe4+2ZL2AEsR/UI8GPhFycEMC1tmgepv9msOr4X7Dx CQCL/jbzdmZA0QGfLTI4pjHPzhsrcP4t5xYisN9SmW73PSgmpjkrPkIn9MHAZDi+D7u6wLteYtf waod/dPCvEoINCArgeEQIiHvk07dsbmjAXPVh3BIjq07TAykWN63ontIitGYBlRyfhdhqLnBFZA C6KxlFqe0uyh4cbk3Ra17nle8m2gqCjQ29QWCs6WL4OWW9hxQqKMPWo/8j4KOFw8vYRDaEPiznQ r2YeaBTgRKkxD8XRckpYOvyRqbsZv3P2ArLFyjl6oz+NdTZuAUWqxDlSM8KfqJLyVCdm85YWTTW IAflTQDdqJIX6e/FtSYqM+E/wdj39jyYbKBMyIXBdmMgve3hq1cvUiNb1zLnf+id7huaAlsTlr8 W8pPCgLPrLdQ9OewNZ3lOpSynPfez8O9ey8wb1pgn5Ru5T1+0I1kPcbg2UVOTK/577hlRhaA== X-Received: by 2002:a17:902:cecd:b0:2b0:ba14:fc55 with SMTP id d9443c01a7336-2b9f2837cdfmr53882545ad.29.1777793241487; Sun, 03 May 2026 00:27:21 -0700 (PDT) Received: from tranquility.wa.lan (60-241-74-71.static.tpgi.com.au. [60.241.74.71]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b9cae16a9esm64942945ad.50.2026.05.03.00.27.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 May 2026 00:27:21 -0700 (PDT) From: James Ye To: jikos@kernel.org, bentiss@kernel.org, lee@kernel.org, pavel@kernel.org Cc: linux-input@vger.kernel.org, linux-leds@vger.kernel.org, linux-kernel@vger.kernel.org, denis.benato@linux.dev, James Ye Subject: [PATCH 6/6] leds: led-class: mark classdev as unregistering early Date: Sun, 3 May 2026 17:26:43 +1000 Message-ID: <20260503072643.2774762-7-jye836@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260503072643.2774762-1-jye836@gmail.com> References: <20260503072643.2774762-1-jye836@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The classdev was marked as unregistering after disabling the trigger. Disabling the trigger attempts to turn the LED off, and the device may already be inaccessible. This generates a "Setting an LED's brightness failed" log, which is avoided by changing this order. Signed-off-by: James Ye --- drivers/leds/led-class.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c index 9e14ae588f78..a00986ffd9f6 100644 --- a/drivers/leds/led-class.c +++ b/drivers/leds/led-class.c @@ -601,6 +601,8 @@ void led_classdev_unregister(struct led_classdev *led_c= dev) if (IS_ERR_OR_NULL(led_cdev->dev)) return; =20 + led_cdev->flags |=3D LED_UNREGISTERING; + #ifdef CONFIG_LEDS_TRIGGERS down_write(&led_cdev->trigger_lock); if (led_cdev->trigger) @@ -608,8 +610,6 @@ void led_classdev_unregister(struct led_classdev *led_c= dev) up_write(&led_cdev->trigger_lock); #endif =20 - led_cdev->flags |=3D LED_UNREGISTERING; - /* Stop blinking */ led_stop_software_blink(led_cdev); =20 --=20 2.54.0