From nobody Fri Sep 25 16:03:01 2026 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011012.outbound.protection.outlook.com [52.101.62.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 176014119E0; Thu, 10 Sep 2026 17:03:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.12 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789059817; cv=fail; b=n+pvT3JxAdFhv3krXBBRUg9zIAXZ9E4P/1Bl35VhhwhPhRi3o4I35ea4j5IStj0NI5mhc0GY32oBnT7oKfg8udBCgf5bFRXuHT1FfZk2IPi7GRy2xtOGcRukNtKBseepp7p89z8+nBRQvfIgrZbYn4pjIOPwfNwkM/dS81VeY30= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789059817; c=relaxed/simple; bh=fuvlNg0k567Y2eVkXvsyYPXBZFLXb84lwFdi6y8VqHU=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=FlsSwnseSvnzha09yya/BNH2eZTg9wlbEYT3/+nTRVbV1+Usc6xOPx3E62f91zvhXNu5WlcSDqUBl+ICGI+9SYAQ36d44BjUVZa+duEKGa0FK0xjdelIJvQMnsp2wJDYIfsWSJkUuXQ0BxLCengMX6bW8ci6s6Xe+1XGLrYfcB0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=DY4+g8C6; arc=fail smtp.client-ip=52.101.62.12 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="DY4+g8C6" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZBsc9j16l6n86Kpvou5gn68coIAP/SPnNN+Vnf8Rk2hAfqRJtm3AhipI5L4cEyL4KUY9dbHropqlcwkCMiIBCN3EnMrUcadjCf7wOy9yrknTE48nIjAGQNQ6XtGYUsYAPwMgFiIOrWa7FvAFL3ynOy0P3ESJrdtnjTxe6jHupvmOzu1UYUzgqPPrAuHSHOvWwftqNO+ivsUAp220qK30//itpAirXDXhgwpju0qVPhmp6XLOb8+EYThrT+MeZDCBTZlpM2jQC6HvUMXXbM2NlFX1p3oKkJ8PgbdfscGZi2EIL263PYzUvq3beaQm8drDDV7h1GlxDjDJePpr7h0Q9Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=hFERsSrC7mfEgThZ9HdVhZ37+kaRD4Kn2dCqBkD/FwM=; b=OZaPoMhXzWMWt7+Ae9tBzGIUBz0ezYEOj0BqwJKCF9gsCOdgRPhp+lverY5OiOc02+xIqmadPpZC+WzdoUiq+wvg5P4yrC24n0VTvCPVOvx7lKk+59VenL+lahmAIY5RztkkL1mSnA00BVa09gAMcw44OTFKk1GHMwSh+YyN0PUdtLkV8542iyHABbt2zc/S0wTQNhjl+Z16LLoCmvQf2hMzrSKY7Un6WBQu/9crdizNbRa3JxhJ9KolCVSAkVzvvTmN0pgpXKq4qaYpjZooT5r+ZkrDAqplx54oFbgP1tM3/yl4xMnRmN04rxLoTgfBph/z1nFz1CNVzS/unXcAWA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hFERsSrC7mfEgThZ9HdVhZ37+kaRD4Kn2dCqBkD/FwM=; b=DY4+g8C6ZJ5qZcjwsIcQOsrCFsAS+intQH8xwPY8zppS1jn0sQyYySv0jIpaqnZ6qRWrXA7b7s9ZWWh0OvoT5TWvMVZV3Mb8Nr8sz02+y5OFhty8uQxHR3gwDH7nisW8dN8UDToCfIojagX/GuNdJqkLRXtb8QcraeDvedGzDLk= Received: from SJ0PR13CA0188.namprd13.prod.outlook.com (2603:10b6:a03:2c3::13) by PH7PR12MB6417.namprd12.prod.outlook.com (2603:10b6:510:1ff::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.9; Thu, 10 Sep 2026 17:03:18 +0000 Received: from CY4PEPF0000EE3F.namprd03.prod.outlook.com (2603:10b6:a03:2c3:cafe::1a) by SJ0PR13CA0188.outlook.office365.com (2603:10b6:a03:2c3::13) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.428.6 via Frontend Transport; Thu, 10 Sep 2026 17:03:18 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by CY4PEPF0000EE3F.mail.protection.outlook.com (10.167.242.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.5 via Frontend Transport; Thu, 10 Sep 2026 17:03:17 +0000 Received: from aus0006770c4n-lx01.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.46; Thu, 10 Sep 2026 12:03:11 -0500 From: Mario Limonciello To: Jiri Kosina , Benjamin Tissoires , Greg Kroah-Hartman CC: Pierre-Loup Griffais , open list , "open list:HID CORE LAYER" , "open list:USB SUBSYSTEM" , Curtis Vogt , "Mario Limonciello" Subject: [PATCH 1/3] HID: Add shutdown callback for device drivers Date: Thu, 10 Sep 2026 12:02:52 -0500 Message-ID: <20260910170254.833871-2-mario.limonciello@amd.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260910170254.833871-1-mario.limonciello@amd.com> References: <20260910170254.833871-1-mario.limonciello@amd.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 X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000EE3F:EE_|PH7PR12MB6417:EE_ X-MS-Office365-Filtering-Correlation-Id: 463bd5b4-253b-4959-e2f9-08df0f5d68c4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|23010399003|1800799024|36860700016|376014|10067099003|6133799003|22082099003|18002099003|5023799004|56012099006|11063799006; X-Microsoft-Antispam-Message-Info: wWPmoKsF05gdklSIozdrg4drO+CLfgHkR1BNvl22IJ9mmn6U+tlF/fWYoACmo8ud6UUI7GF3eyWLNMn4wbCjBN2rAd117G9ae3YfD+ZhMHJw9dMjDWX0MAYdtel9P6JZNgjIWj+pSC+0IMC6x9N8+GJ3s5l4IhcXZzBcKjCGZN8p59Z6Jjr7Do6uQ+gx1QIojnt66/wWxFW78RoRsRz8Mhs2fVVlo9N3xYK+PNr68lA+JK735zRYsml9o4TULWj+yi3idf+qWmefBZ3Io8VoZ3lvXnUa9iJzkRNByh0G+aEKzSVtX3JHmBKKi0wkzf/ryclZwuKyZezTUJOnJ9v24mEyBV9q0uNklT9L2LwSB4GSSlNJ2tHCXkbtgjp4JBI40GvmbsizJqwsxsAOUoKmOtZGD3aYuaInuxWVoRyv4pb88hgiWXWagznyXcUzWHnnMXT4NZBrnTq+TTiXBUTZTPD8B4q/3nVZjwxxR2lfA2A7REKYxefnqIct0YYZl9rJBehQUfXVnIiSN5h9zWv/rGNxtUZRFkH6DuaZ73t5OVbB5sL3Nipw1SD/xn+QnxzZKBDdh0QwCHn63f5Kp41g8p7qhG7WduGeVFMxMWMpidVwmZvEaNcCVI6jeiN8vu/CAhwD3v8Wt57zBiW+jx47L+2GDUGg9kuUsxJ/qMPIBwed6py5c8mv5VfdUfLbXZ8r/ly8UmDpSLnIShvmc3TznQ== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(23010399003)(1800799024)(36860700016)(376014)(10067099003)(6133799003)(22082099003)(18002099003)(5023799004)(56012099006)(11063799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: h/qJnCRkgRglxdBOsz4ZQ+dd6rlxW6yZ9ldHlhYfNzAjaGr5yjAFyC3ZDWomvR0N8tPYg0341aohwybShDDF8pTwbTbBS8ES2EzU/sS0bCjSOGG1hRQm377SFE6OrqFDHrauWwAFOD0QQwrCb6KeVzym2PpdADDIlZcRUOICvZ/J7FSn7yU8Tz73gZooMrFxmIEQP8WX/l6vuUacSdkt8yNH+l/hHDgu2QwyqdsOc3ww6e/h13NT60oGCbt8V38wIKAsq/jVJDYyATb4rcuXiVyzBDYeCmeNXUjk9iltsKFoMw3m9CGi1mgdZOn8eMjHdtnkmsZ3TEBKJpKjsbn3XQPlG7CijLjSs11uBO7quh1B5+/bW8kktd9cV8Ivb2a1mRxzqM/g3ky9i6yoLBnxJsQeBeUaNiZkqz+1vsSil2AYI98SRVQFk6a1nshCoarC X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Sep 2026 17:03:17.3123 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 463bd5b4-253b-4959-e2f9-08df0f5d68c4 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000EE3F.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB6417 Content-Type: text/plain; charset="utf-8" HID device drivers can receive suspend and resume notifications through callbacks forwarded by their transport driver. There is no corresponding way to perform device-specific work during an orderly system shutdown. Add a shutdown callback to struct hid_driver and dispatch it from the HID bus shutdown operation. This allows a HID device driver to communicate with hardware before its transport is shut down. Assisted-by: LLM Signed-off-by: Mario Limonciello --- drivers/hid/hid-core.c | 13 +++++++++++++ include/linux/hid.h | 2 ++ 2 files changed, 15 insertions(+) diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index a3ff0514f9cdf..7c8c1aa1f09c3 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c @@ -2738,6 +2738,18 @@ static int hid_bus_match(struct device *dev, const s= truct device_driver *drv) return hid_match_device(hdev, hdrv) !=3D NULL; } =20 +static void hid_bus_shutdown(struct device *dev) +{ + struct hid_driver *hdrv; + + if (!dev->driver) + return; + + hdrv =3D to_hid_driver(dev->driver); + if (hdrv->shutdown) + hdrv->shutdown(to_hid_device(dev)); +} + /** * hid_compare_device_paths - check if both devices share the same path * @hdev_a: hid device @@ -3012,6 +3024,7 @@ const struct bus_type hid_bus_type =3D { .match =3D hid_bus_match, .probe =3D hid_device_probe, .remove =3D hid_device_remove, + .shutdown =3D hid_bus_shutdown, .uevent =3D hid_uevent, }; EXPORT_SYMBOL(hid_bus_type); diff --git a/include/linux/hid.h b/include/linux/hid.h index 8d17b741638c9..ddf57779bb3ef 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h @@ -861,6 +861,7 @@ struct hid_usage_id { * @suspend: invoked on suspend (NULL means nop) * @resume: invoked on resume if device was not reset (NULL means nop) * @reset_resume: invoked on resume if device was reset (NULL means nop) + * @shutdown: invoked on system shutdown (NULL means nop) * @on_hid_hw_open: invoked when hid core opens first instance (NULL means= nop) * @on_hid_hw_close: invoked when hid core closes last instance (NULL mean= s nop) * @@ -924,6 +925,7 @@ struct hid_driver { int (*suspend)(struct hid_device *hdev, pm_message_t message); int (*resume)(struct hid_device *hdev); int (*reset_resume)(struct hid_device *hdev); + void (*shutdown)(struct hid_device *hdev); void (*on_hid_hw_open)(struct hid_device *hdev); void (*on_hid_hw_close)(struct hid_device *hdev); =20 --=20 2.43.0 From nobody Fri Sep 25 16:03:01 2026 Received: from CH1PR05CU001.outbound.protection.outlook.com (mail-northcentralusazon11010013.outbound.protection.outlook.com [52.101.193.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3B3535335B4; Thu, 10 Sep 2026 17:03:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.193.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789059820; cv=fail; b=cJo7OrLtqkJp8mX8UHYLBjn66+tZw+TUQyjA/SCMST+5RcVa0MGhlCucVL2rMf2TRZZj54e+b5KfAPDSPYUak4Aqc2/8ViJhRyECS3PBF6U8kWYDkrLLEFAVCcwSCPlXzIH51sdpKysdGkhnxoV2n5y6H6SsQcYa/P7bxUl3WcM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789059820; c=relaxed/simple; bh=P/kZhoaW4B+Vb4tYSXyPVjh9QCdtESqdc5agU73dpOc=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Q7rJJoJKxvtjQp8XZbDomoUzXbWux25MFZtDAtFST9yczVGtLT6mdWEdHz1rtFIrMSs8HjtS/d3mPBBpHBDGVqt3iiCW1n6+8Yr+7oHh/fISfvd9jk6PhMxxi/d3Q9VgxtNy68DRM8k/5TTsAI1oDncDq8Why86MDZdHgfRvNzE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=op3YoTBQ; arc=fail smtp.client-ip=52.101.193.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="op3YoTBQ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xaHREHSmXidG4dG3EGDFO9nsVT9lS/M12BcqVuKlmNUIsZJzKLLLcH/q5rI8G99KwQy2V+2z3ow/PJiQLceeDQ7Yk3aVJicVkymDMV2BAjut9/nVbsMH4MRGFn3L7vlSEQr3LPXnS0SALzP01ndSMzoZcUXs8GlwdCebKrX03p+aPqu58VzF8Id5HBlX1ZadhI0PXZ/v4L4Qv3MNo2Cx+EYlb60/R6I1wmUYHt0+uAFQ2Ifs1iM6zS9FAu5GU0/Ihx1OAbsjj5TAobUmTWBa+QLjGZFs/V29Q5JQ4/289foSY8hQgqiSOw+rgZdMPSqj15zNrgJJ8oi0JERMVqQ0Jw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=CXGnD71+ZmzvAQrL5HcEtwuhWbweiN6C2slVimsvaIY=; b=stTaDNeUi6M+2QmoTzidGpAUZXRzenHT71dDi4k5et1wrnV9L7xURrktdcLCpGyzUalfufsY8FBA93dVa+PQoPN1uaBr6umHxPNFXLWIONJuPrfSxWyPC97+tDfVa622R5tFsIdTuxYyeWcmyfAlRhBM7yo8Ab1zR4+X7GiHAIy+iIkFC6DG1NrNmS7rGKP0g1gON8b6/WasvEq/0c8Epeg5I2fpxKRp2x3AVtLSMiSKiwi1+QOsqMHDH2I27kZ0hFe/J+rf/64jXD0RJvL4zMtRqKci72GD5yYfF81gT7BITlHmBLnjmlwMF7hYBelw5IaqzkHM144lpjdUgwUUsA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CXGnD71+ZmzvAQrL5HcEtwuhWbweiN6C2slVimsvaIY=; b=op3YoTBQiNCq6lmj0TCfgjSCRQZIJTrPw4OXVtG5i5tqpT5vDmBZScZnAwlfxtqIuXfA8iMJdu2DMNb4BB3y41kcJ34hd5eENibIYYi+K8Ko0SynpaPcivTbPJy1Yw5mKsYET7PpWf+cAYmrLN7hudLqTTg+uGudVYEnneBfP8U= Received: from PH7P220CA0006.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:326::12) by CY8PR12MB9036.namprd12.prod.outlook.com (2603:10b6:930:78::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.9; Thu, 10 Sep 2026 17:03:16 +0000 Received: from CY4PEPF0000EE3B.namprd03.prod.outlook.com (2603:10b6:510:326:cafe::97) by PH7P220CA0006.outlook.office365.com (2603:10b6:510:326::12) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.406.7 via Frontend Transport; Thu, 10 Sep 2026 17:03:16 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by CY4PEPF0000EE3B.mail.protection.outlook.com (10.167.242.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.5 via Frontend Transport; Thu, 10 Sep 2026 17:03:15 +0000 Received: from aus0006770c4n-lx01.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.46; Thu, 10 Sep 2026 12:03:11 -0500 From: Mario Limonciello To: Jiri Kosina , Benjamin Tissoires , Greg Kroah-Hartman CC: Pierre-Loup Griffais , open list , "open list:HID CORE LAYER" , "open list:USB SUBSYSTEM" , Curtis Vogt , "Mario Limonciello" Subject: [PATCH 2/3] HID: valve-index: Reboot headset on system power transitions Date: Thu, 10 Sep 2026 12:02:53 -0500 Message-ID: <20260910170254.833871-3-mario.limonciello@amd.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260910170254.833871-1-mario.limonciello@amd.com> References: <20260910170254.833871-1-mario.limonciello@amd.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 X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000EE3B:EE_|CY8PR12MB9036:EE_ X-MS-Office365-Filtering-Correlation-Id: 0479bb6c-a90b-4a71-3733-08df0f5d6807 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|36860700016|1800799024|23010399003|376014|10067099003|3023799007|6133799003|18002099003|22082099003|56012099006|5023799004|11063799006; X-Microsoft-Antispam-Message-Info: q39GxoTHv2IkRMr/UbtePC8BvPdjmiS51fTwS4Cz5hf1BPK+65/ERR14MClBQCrturKZZicoGDs/zvZH3aL+7ZkN3ZB4B7lkfS014Bq/wiiN/we3hJ2DGhkGeJSxc4Tswudw6O85i4GZXgNN8ZmzzSy9xcF6DJzappsZcEyN8AfxrgztPlj0TtRgt6ppJF3nz8QSQau4D+/aOEx+HL6xthLDbkx65/EHwiejqFtHRjPbLf2dOzbBCkvCIHrKSEPP/hKB1xyHF2v8mNutfeq7ZrTiDXjGnjhV9xWwE80eMPOcUTbNGJuV9Q8DqMSVuc8Kz082rsni2u4FNm1LFmlEctIFMatq6GXpuHZZYXsuBhWEqstSpPjA+jB4iE75bVmX3OW9i3YHp7sVABQSD73/YO5c5EcgnGjhNrCRGW1qcYNrI7nVRSAOmUXoqv2qZkf86IcT8Ycp3OYfdBp+cZphYC6CdNdcJopMaOisLhnrrCnSah/HJue7vKKcRROqcsj7HTxlb0gVYvyiFeVml6WH+BXWhmAXdNrhEhN0JHrLbZR7TZhijZmuPiRV82nl/6NZ9nDqr8mRC3rCpBCUptYrwQ0mIWvaJQgeavmq7c0inwVZBL+F2wI4hkFts6WzVH0fXgT5NoMwoASvydd6OPlzhg== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(36860700016)(1800799024)(23010399003)(376014)(10067099003)(3023799007)(6133799003)(18002099003)(22082099003)(56012099006)(5023799004)(11063799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: BWrlUaofT/+UKjVdROge4S4Bn3yGrlibTWAyY/t5eWmLpV6ipJHSDuBVJL0+FwPydhfSaqcLc18oJxn4zh24L0TR83QLiQwFux3dNPy51uiHtZj4qfxm9l5q1i5CGqa/wIrK/bazSDvAHwHJWM55HDUBooobuyaXKHvbhKefwefCL7+PvrTAKHOwZ4hTnswSIdelMf2YyC2O2KtMRlG0h4t20T30KUNuuYhAUSYTRZL2B5rL3Y/Gm7JAODp4FzjuKF+2576HoXnwp+9WvXNLX3IKE3t58HytZM/AvjfXxIGIZ28CKOvOs8MW4CFflSJEueN2d2mG9dpGZl+geGaxgqJMgi42WA7homNLW4OHbfY1vgg707UH+sLtrbnk3xj3WwKvyp8pTh4cBbRmBhn0KKiSJFGnfklNS3JqzVXU2R3ZVKXwj3j6TyNvYZ2UNV7m X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Sep 2026 17:03:15.9541 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0479bb6c-a90b-4a71-3733-08df0f5d6807 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000EE3B.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR12MB9036 Content-Type: text/plain; charset="utf-8" The Valve Index HMD stops serving its EDID after the host disables the DisplayPort PHY. The headset remains powered by its breakout box across suspend and shutdown, so the bad state survives and the next connector detection reports "No EDID read". The HMD then appears as a synthesized 640x480 display until it is power-cycled. The 64-byte HID output report 0x16 with command 0x01 reboots the headset and restores its EDID service. Add a device-specific driver which sends this report for system sleep transitions and orderly shutdown while leaving runtime autosuspend alone. Resume a runtime-suspended interface for a shutdown request and restrict the command to the composite interface which declares report 0x16. Closes: https://gitlab.freedesktop.org/drm/amd/-/work_items/4333 Link: https://github.com/ValveSoftware/SteamVR-for-Linux/issues/939 Assisted-by: LLM Co-developed-by: Curtis Vogt Signed-off-by: Curtis Vogt Signed-off-by: Mario Limonciello --- .../ABI/testing/sysfs-driver-hid-valve-index | 12 ++ drivers/hid/Kconfig | 11 ++ drivers/hid/Makefile | 1 + drivers/hid/hid-ids.h | 1 + drivers/hid/hid-valve-index.c | 142 ++++++++++++++++++ 5 files changed, 167 insertions(+) create mode 100644 Documentation/ABI/testing/sysfs-driver-hid-valve-index create mode 100644 drivers/hid/hid-valve-index.c diff --git a/Documentation/ABI/testing/sysfs-driver-hid-valve-index b/Docum= entation/ABI/testing/sysfs-driver-hid-valve-index new file mode 100644 index 0000000000000..47d8c26b1eace --- /dev/null +++ b/Documentation/ABI/testing/sysfs-driver-hid-valve-index @@ -0,0 +1,12 @@ +What: /sys/bus/hid/devices/::./reboot +Date: October 2026 +Contact: linux-input@vger.kernel.org +Description: + Writing a boolean true value reboots the Valve Index headset to + recover its EDID service. Writing a boolean false value has no + effect. This file is write-only. + + The Valve Index is a composite HID device. The reboot command is + only supported by the interface that provides the headset's 64-byte + output report. Writing true to this file on another interface fails + with -ENODEV. diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig index a81bf51cbcf10..8ea2dd570058f 100644 --- a/drivers/hid/Kconfig +++ b/drivers/hid/Kconfig @@ -547,6 +547,17 @@ config HID_WALTOP help Support for Waltop tablets. =20 +config HID_VALVE_INDEX + tristate "Valve Index headset" + depends on USB_HID + help + Support for the Valve Index headset. This driver works around the + headset failing to provide its EDID after a DisplayPort link shutdown + by rebooting the headset on resume from system suspend and at shutdown. + + To compile this driver as a module, choose M here: the module will be + called hid-valve-index. + config HID_VIEWSONIC tristate "ViewSonic/Signotec" help diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile index 48a863b245eed..21f512cab6250 100644 --- a/drivers/hid/Makefile +++ b/drivers/hid/Makefile @@ -156,6 +156,7 @@ obj-$(CONFIG_HID_XIAOMI) +=3D hid-xiaomi.o obj-$(CONFIG_HID_XINMO) +=3D hid-xinmo.o obj-$(CONFIG_HID_ZEROPLUS) +=3D hid-zpff.o obj-$(CONFIG_HID_ZYDACRON) +=3D hid-zydacron.o +obj-$(CONFIG_HID_VALVE_INDEX) +=3D hid-valve-index.o obj-$(CONFIG_HID_VIEWSONIC) +=3D hid-viewsonic.o obj-$(CONFIG_HID_VRC2) +=3D hid-vrc2.o obj-$(CONFIG_HID_HUAWEI) +=3D hid-huawei.o diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h index b3aca5aa91767..15cd29a338a8d 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h @@ -1391,6 +1391,7 @@ #define USB_DEVICE_ID_STEAM_CONTROLLER_IBEX_BLE 0x1303 #define USB_DEVICE_ID_STEAM_CONTROLLER_PROTEUS 0x1304 #define USB_DEVICE_ID_STEAM_CONTROLLER_NEREID 0x1305 +#define USB_DEVICE_ID_VALVE_INDEX_HEADSET 0x2300 =20 #define USB_VENDOR_ID_STEELSERIES 0x1038 #define USB_DEVICE_ID_STEELSERIES_SRWS1 0x1410 diff --git a/drivers/hid/hid-valve-index.c b/drivers/hid/hid-valve-index.c new file mode 100644 index 0000000000000..43c1142b7215b --- /dev/null +++ b/drivers/hid/hid-valve-index.c @@ -0,0 +1,142 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * HID driver for the Valve Index headset + */ + +#include +#include + +#include "hid-ids.h" + +#define VALVE_INDEX_REBOOT_REPORT_ID 0x16 +#define VALVE_INDEX_REBOOT_CMD 0x01 +#define VALVE_INDEX_REPORT_SIZE 64 + +static bool valve_index_has_reboot_report(struct hid_device *hdev) +{ + struct hid_report *report; + + /* + * The reboot command is a vendor protocol carried in the unnumbered + * 64-byte output report of the headset's third interface; the first + * data byte is the command id. Report 0x16 is only declared as a + * feature report and is not what the command is sent as. + */ + report =3D hdev->report_enum[HID_OUTPUT_REPORT].report_id_hash[0]; + + return report && hid_report_len(report) =3D=3D VALVE_INDEX_REPORT_SIZE; +} + +static void valve_index_reboot(struct hid_device *hdev, bool wake) +{ + u8 *report; + int ret; + + if (!valve_index_has_reboot_report(hdev)) + return; + + /* USB transfer buffers must be DMA-able, so not on the stack. */ + report =3D kzalloc(VALVE_INDEX_REPORT_SIZE, GFP_KERNEL); + if (!report) + return; + report[0] =3D VALVE_INDEX_REBOOT_REPORT_ID; + report[1] =3D VALVE_INDEX_REBOOT_CMD; + + if (wake) { + ret =3D hid_hw_power(hdev, PM_HINT_FULLON); + if (ret < 0) { + hid_warn(hdev, "failed to resume headset for reboot: %d\n", + ret); + goto out; + } + } + + /* Use the same interrupt-out then SET_REPORT fallback as hidraw. */ + ret =3D hid_hw_output_report(hdev, report, VALVE_INDEX_REPORT_SIZE); + if (ret =3D=3D -ENOSYS) + ret =3D hid_hw_raw_request(hdev, report[0], report, + VALVE_INDEX_REPORT_SIZE, + HID_OUTPUT_REPORT, HID_REQ_SET_REPORT); + if (ret < 0) + hid_warn(hdev, "failed to reboot headset: %d\n", ret); + else if (ret !=3D VALVE_INDEX_REPORT_SIZE) + hid_warn(hdev, "short headset reboot report: %d\n", ret); + + if (wake) + hid_hw_power(hdev, PM_HINT_NORMAL); +out: + kfree(report); +} + +/* + * The suspend and shutdown hooks only cover orderly power transitions. A= fter + * a crash, a hard reset or a power cut the headset is left in the state w= here + * its EDID no longer reads, and nothing recovers it until the next orderly + * transition. Expose the reboot command as a write-only "reboot" attribu= te + * on the HID device so userspace can recover it, for instance from a udev + * rule that fires only when the connector reports no EDID. Writing to an + * interface that does not carry the reboot report returns -ENODEV. + */ +static ssize_t reboot_store(struct device *dev, struct device_attribute *a= ttr, + const char *buf, size_t count) +{ + struct hid_device *hdev =3D to_hid_device(dev); + bool val; + + if (kstrtobool(buf, &val)) + return -EINVAL; + if (!val) + return count; + if (!valve_index_has_reboot_report(hdev)) + return -ENODEV; + + valve_index_reboot(hdev, true); + + return count; +} +static DEVICE_ATTR_WO(reboot); + +static struct attribute *valve_index_attrs[] =3D { + &dev_attr_reboot.attr, + NULL +}; +ATTRIBUTE_GROUPS(valve_index); + +/* + * The headset's EDID service is lost when the host disables the DisplayPo= rt + * PHY during system suspend, so it needs the reboot on the way out of + * suspend. Doing it on the way in does not work: the headset dropping off + * USB is a remote-wakeup event from its hub and aborts the suspend. + */ +static int valve_index_resume(struct hid_device *hdev) +{ + valve_index_reboot(hdev, false); + + return 0; +} + +static void valve_index_shutdown(struct hid_device *hdev) +{ + valve_index_reboot(hdev, true); +} + +static const struct hid_device_id valve_index_devices[] =3D { + { HID_USB_DEVICE(USB_VENDOR_ID_VALVE, + USB_DEVICE_ID_VALVE_INDEX_HEADSET) }, + { } +}; +MODULE_DEVICE_TABLE(hid, valve_index_devices); + +static struct hid_driver valve_index_driver =3D { + .name =3D "valve-index", + .id_table =3D valve_index_devices, + .resume =3D valve_index_resume, + .reset_resume =3D valve_index_resume, + .shutdown =3D valve_index_shutdown, + .driver.dev_groups =3D valve_index_groups, +}; +module_hid_driver(valve_index_driver); + +MODULE_AUTHOR("Mario Limonciello "); +MODULE_DESCRIPTION("HID driver for Valve Index headset"); +MODULE_LICENSE("GPL"); --=20 2.43.0 From nobody Fri Sep 25 16:03:01 2026 Received: from SJ2PR03CU001.outbound.protection.outlook.com (mail-westusazon11012008.outbound.protection.outlook.com [52.101.43.8]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B0DC84A840E; Thu, 10 Sep 2026 17:03:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.43.8 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789059817; cv=fail; b=CiWYYj5AdW0Pgryq6urJWXGUX7hDRjmfhpJ5pd6lFjkDziJllUWktVjFQv2DiKvcmpUZuKV7siOTwj1AQzMB0zlRIev+GfvXHjlMDll8b9KdualiJqRDrKYjbns7pscNtC0T0utA7St5Anxhs8q6AAmSXP1O33Ehe0eXK9mavNM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789059817; c=relaxed/simple; bh=0RlSg8yfCdRzTQeisZFRWmaZWBIcpw+6/nBt3bBE6U8=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=HJjaevh6rxLAexAnfyOjAhfZz8f8eEdMjLTEpup/2oBHkRhszBiSQa7+cSLmlA/dtE3XOXnjku3Tb53hPV1Z+e0e52/0Rq4gvdbbqj4Z4/ishqF7q32MUeDnZ64DtbYJL9szsXm6vCGy2HrYHIzBwX1ZOvGmn2F6QO5VJy173NE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=2WNezCoQ; arc=fail smtp.client-ip=52.101.43.8 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="2WNezCoQ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TGtjTMwnHcpbPYjbUrHCuPNO8Sjx6YvhumMPgq6IKGhTl6P62UBgZdvwJwXXtyK5A842xucWlEm9PFDqrmwCgQAlvqcGIKwOkllH5keJ4HhzYUPlZUifF5iew2cuIa0OovFn1VHIe8u4q2/QC5P81pakaBxhRxkOiB5Nt+doR4SeQ4uWQ1iHgwyK6XDI7OVD2sPeF86vaVNFOtiMGhS+5ka6v125P8bRGdoGjY1eoVA2+XJ8j131Jea2VIyzwRDx4WrrSNlNwmo5Qh7oJkVqT9wzCE5XY4Wc2HpMpq9WwvcAK0fP72n+ye7TF4wFHRaA9y7CDgl3MXW4CPdO524+wQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=cjpEJ5eRzkywdCpDNKMJvWL1yyNb2FkrTx2UMJ2Fkt0=; b=rEmRFOnAORKyBK7aNtAdpcuMgr+Tucw3FkHOb+qB09Y3BGrc3m+caClKtaE9sjLgKIwyOfPuCM1mV1sIxKLdZMAJBXuKA/c3TcHi5E4061Euk0b0UXTRz+RnRXMgnAmh/8wjXxNYGN+rD9bZ0wxR0umGy6u1aQvcbgUNw2caqtgNGicCJSqK1TjLD03ZvTAGmk0xM433y20Dd6HoHWQmrpIZM3CPfAF79LZW+Ps7tbaRQT/QpWOafKxSdiI1BkuX+sObH50gAYk2uEupbPf57PHxhPzgcyqmZrwOwOzAz1k7xgXb/wjeeOkht98h+HfjggSsL441EfYbGIkaOpR0dw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=cjpEJ5eRzkywdCpDNKMJvWL1yyNb2FkrTx2UMJ2Fkt0=; b=2WNezCoQ5ITHnWYrNNrH6uIosIAmJcCP0YWtpTQeVFobxZ4Nf+K1mJD76ZvjzBz0MqjE/TO9scrpFgtmRZ2JxuSRWsh09My4iqHcVDvI7eH3ydcuOyJlLXMX9Lm8NRlqE7aoTaqMAdkCUB7OiTmkUGD1XWeAs5l10yZZR//yxMM= Received: from SJ0PR13CA0187.namprd13.prod.outlook.com (2603:10b6:a03:2c3::12) by DSWPR12MB999128.namprd12.prod.outlook.com (2603:10b6:8:36c::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.7; Thu, 10 Sep 2026 17:03:19 +0000 Received: from CY4PEPF0000EE3F.namprd03.prod.outlook.com (2603:10b6:a03:2c3:cafe::68) by SJ0PR13CA0187.outlook.office365.com (2603:10b6:a03:2c3::12) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.428.5 via Frontend Transport; Thu, 10 Sep 2026 17:03:18 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by CY4PEPF0000EE3F.mail.protection.outlook.com (10.167.242.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.5 via Frontend Transport; Thu, 10 Sep 2026 17:03:18 +0000 Received: from aus0006770c4n-lx01.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.46; Thu, 10 Sep 2026 12:03:12 -0500 From: Mario Limonciello To: Jiri Kosina , Benjamin Tissoires , Greg Kroah-Hartman CC: Pierre-Loup Griffais , open list , "open list:HID CORE LAYER" , "open list:USB SUBSYSTEM" , Curtis Vogt , "Mario Limonciello" Subject: [PATCH 3/3] USB: quirks: Ignore remote wakeup from the Valve Index breakout box hub Date: Thu, 10 Sep 2026 12:02:54 -0500 Message-ID: <20260910170254.833871-4-mario.limonciello@amd.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260910170254.833871-1-mario.limonciello@amd.com> References: <20260910170254.833871-1-mario.limonciello@amd.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 X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000EE3F:EE_|DSWPR12MB999128:EE_ X-MS-Office365-Filtering-Correlation-Id: 245678cd-43ae-4d61-0635-08df0f5d6979 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700016|376014|23010399003|82310400026|1800799024|11063799006|5023799004|10067099003|18002099003|22082099003|56012099006; X-Microsoft-Antispam-Message-Info: 7mufps9HsnBkckpiTIJgaQDqir/pI0VD/+66MNQmgG+yDcnXU58BlK5aHrAGiDS4CBjcB1BNAjXRps72pYF7z834RTjlR2qMwO2Oiw8cc9BBVi73pX/uY2qUcmgAnzf/sZ6ViKi4EJkZgIj/jYs4K0gbJYy3m/RYuggC7ExIwfShPp4oE7hibwXdOEhF4UFydsoLxTQa6TSma7GtlSiOimLG1tMbXy1DVhNDt65UPvHmHjCcF/thjT0CSOZ1PKbWr0+GqPabTvXrjhKG/vQiAMPbnkiMZpV6Pqk3es85RSuB+MW8HfReOhKf/eQE2EBzs2BeWJJ/RpIamluVYevWcUv0VCCdZSGazwyXMmVSmUZd8XomcdRLpF9hA5fGNQff9ifpK7WT9rq65CNN4RWK46IERvd1ZTINkL52RVzoaN5e8B49jqKeR5AgU/H/IPej+XnctCMkRtjpup985tyxFGaAWZniWfLiPHhxLyKsBF9hSrj9703SZU/T42JtuwzkivxqhEtLhWkNg55Tuykaf80qNX35tXjDpM1Tu2Z4Vw3OcMByjN6PPFaFCt4R28eTJDJbFL6krX1nVCACHTRnJO4MGCixfygCIQClQ8qwx6OF46EV2r8l1MSUhSTFEUzagNnXOYSm4RSL6v3ePahZ7PW0Lv979QTw60O32I9eY2Wa3rll4/tzM7Kx9P5s0rbk22BpGU2eUgXR6mRTuj9GgA== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700016)(376014)(23010399003)(82310400026)(1800799024)(11063799006)(5023799004)(10067099003)(18002099003)(22082099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Elan6YOu3i5aeIzcVEizhoPulKL9NkAUQrFqj4BFoss1zYjtHYvhgWFf0fHWgR7+3yAz2QGu8pEZIlJdmvJguqEM/vIZN/mfY72PYtTTeZaRpGh5BApsvVWX8wRvJ2IYqeyZh3tQ+nH+/bA93kyzFtaL2oFzkaGfsf1d79SJu75v84PXqJj+vkz2shSZrSgovwijV/Fv+EhGQkhjuAMpY9RV/+0JMIPESmVTpGG1PQs7s9he3TOSzbDN7CZ7yFlcHw1chAHLnEzvsT2N45/WVbX5jPWFLoK3LQtjwJb7HhTjosTEqlCaft7ScqPS10n/ZlUbksdax+7AlkAslxO7q0ciTBgQkyXrIhslHWXm8h82b847/8amL9+/niazYeqNJqolkgU6bYysA46Q3DV8UIXDRmAHMtTdv08ACu2QOycdD6Uj1Zh1+O2UDLTSBwz8 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Sep 2026 17:03:18.4911 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 245678cd-43ae-4d61-0635-08df0f5d6979 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000EE3F.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DSWPR12MB999128 Content-Type: text/plain; charset="utf-8" From: Curtis Vogt The hub in the Valve Index breakout box (28de:2613, bcdDevice 1.82) asserts remote wakeup a few seconds after the host enters S3, so a system with the headset attached does not stay suspended. Observed on 7.3-rc2 with an amdgpu host: every suspend attempt returned after 4-8 seconds with wakeup events recorded on the hub and its xHCI controller, with no HID driver bound to the headset. Disabling wakeup on the hub through sysfs lets the same system stay asleep until woken from the front panel. The headset most likely reacts to the DisplayPort link being taken down as the host suspends. Nothing behind this hub is a device that should be able to wake the host (the headset, its radio and microphone, and a further hub), so ignore its remote wakeup capability, as is already done for the ASUS T100 base station's hub. Signed-off-by: Curtis Vogt Signed-off-by: Mario Limonciello --- drivers/usb/core/quirks.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c index b5b577f0b931c..219e1cf5ebf00 100644 --- a/drivers/usb/core/quirks.c +++ b/drivers/usb/core/quirks.c @@ -596,6 +596,10 @@ static const struct usb_device_id usb_quirk_list[] =3D= { /* ShanWan Wireless Gamepad */ { USB_DEVICE(0x2563, 0x0575), .driver_info =3D USB_QUIRK_WINDOWS_CONFIG_R= EQ_SIZE }, =20 + /* Valve Index breakout box hub */ + { USB_DEVICE(0x28de, 0x2613), .driver_info =3D + USB_QUIRK_IGNORE_REMOTE_WAKEUP }, + /* UGREEN 35871 - BOS descriptor fetch hangs at SuperSpeed Plus */ { USB_DEVICE(0x2b89, 0x5871), .driver_info =3D USB_QUIRK_NO_BOS }, =20 --=20 2.43.0