From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-yx1-f51.google.com (mail-yx1-f51.google.com [74.125.224.51]) (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 DE7BD36654B for ; Wed, 4 Mar 2026 03:33:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.51 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772595207; cv=none; b=bdH9IQ8jXrY/HhbsdZ9SCi1fDB5paosLSlNyF8FUON4Ztvw31B+OGVKuoauLe7+P63WmbW/Axl6aV/BZn8+ztdSD6L1If+WffoYxZfHkMsJEeu7MTc7wdpU4rQKWHAe667BpIGoDOpC1phVARALPm8eeLsXiMvjBLsriZ9M42PQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772595207; c=relaxed/simple; bh=USlOh/kID5IW9rS+Av5xW9X6muP5kzYO3dLWbFbs5o0=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=DUF/6yIdtx05GObRTHBIy0ASW7+yPkl1LNe24lnc7ONMERWLt0AE8cb8odWbdyPwPowFnEZQmUcbNkkYc46eXkJxn0qPt/DEeamW1L28U00rcSid3Ljla6Gul3BxtzOn+rqSpSMYzR8cVmk/BEhtY62YtAQumqxZrGtDgTkL/f8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=60228.dev; spf=pass smtp.mailfrom=60228.dev; dkim=pass (2048-bit key) header.d=60228.dev header.i=@60228.dev header.b=BeXGXzNs; arc=none smtp.client-ip=74.125.224.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=60228.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=60228.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=60228.dev header.i=@60228.dev header.b="BeXGXzNs" Received: by mail-yx1-f51.google.com with SMTP id 956f58d0204a3-64ad79dfb6eso5987598d50.0 for ; Tue, 03 Mar 2026 19:33:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=60228.dev; s=google; t=1772595205; x=1773200005; 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; bh=mfCf1mm36XK9Ege88JokoogsfKzYFc+JW2IeO4o7W8U=; b=BeXGXzNs23x28Kbfz9XInQH/jvEJ3Zo3aTHi4wvMcn1kRJLwoLKbV8+nUIQk6FYJhj fb1TbrQagZedRPygRDr7+vDZMTH+4AXSaxpxv79SnYY63rvs+Uv4WM/zkMnS+xBSDVIZ SHxfUXegvWQPYrF+RgJ3nMBkezJSLvJSch+LcSoBrwh0xQ8ChRmAX71Di5ckDHVaiM5U g/7fdOZNhc5F1do2Ep10FJbrVuCqwUosP1RdZIOkiteanchBtMsQUHAhcC0zbAJ0Qebq Z3qa6y5oUvny5N3PHWVpUp0PvI880aquC2BtFcK+uzOX9IYoQdRg0+3WBzxsTT2eK5FS SCNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772595205; x=1773200005; 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; bh=mfCf1mm36XK9Ege88JokoogsfKzYFc+JW2IeO4o7W8U=; b=DcdfNSttQQgSd/g6awjfKQM249lBaPiJ37JvEbuV/vQ+SW0cmd433Q6v7bAdjFUyM2 3xaBGdKRpCjt+8Ac7ekJ0Aiu2cBKkff5yrk5wCJiP3/vx+gJP3Q+gu8jL9XEs0iVVMwn +ZtTu2THKCb9agLrI5OAQYihEaqEUkc5qN4bca+x1rirYiS7R2BpHZch369nD6vD9Mnc 5yBl1pD7P01rR354pr2OSMdp2/nB7CxURaCbwGuaPq/TGOREyeOFXpiIuaFiyEf9QJCB BNyaVXRK2BDhu/u5X33WwDGjMi5DJjpb8jAMm7LMa6CWXfsmNReTsQi+Vr98xyccnsu/ jJRA== X-Forwarded-Encrypted: i=1; AJvYcCVyzI0QbEO8l9jxQ8zHNRHUjombPjyU1YS3NfK8mfgyxYelQq4ofOU8yJXTpNqfsWqecROkDGCodoqvu7k=@vger.kernel.org X-Gm-Message-State: AOJu0YwQ16zQ+X26ZPzUVmyGpX8PzrWg4nywQgDYXUhH7BNqmzz9VHVe yQ429w9uqZE7alFt2342VmSCXsXpeLNzY6zn9Qj424KNHNMKhRznJw/SRVi+rnA1EFs= X-Gm-Gg: ATEYQzwfE2keUVkMNB0sXv9u5cQD3f2R2eJ23zf6Ha8EO3Q/qOBio373wsuM2TCa0PS qlbdypb2q59ofkWObk39ych6kyOKtzUOpi7vz/LTvN5k2k+OcEdc7qSPYIR4QlrppNSfqb1V4/2 szYX5fk4Q0ZjjKUtC9ZxemF9G10vz48vkAK/OT2DJo8szpTG6NuD0/iX7gyQcSk4og/9/LI/Lz+ C8zQOzHluevEuGq2hNs4j48Xth0fZFESW/v/pnlQ/TF7SvwVhu2zm7KJn9yIESIuDdd8R4AUTng IRj3C7q89Gl7oyTSpJ8Wspx4ha0w3KIenvBo08goWr/8m6N94w1n9IHOfXxw/MRsfxrnFtXxF5X KGA2EZ2nAKg7y1g+sxUgj1YKNPbBvMCJY7aEX6mfEDViyvyR8qgteR8OC1jVJyOL2tx0MC2evry khEd5ts5tVnVocarPe X-Received: by 2002:a05:690e:bc6:b0:649:ba41:dd6a with SMTP id 956f58d0204a3-64cfa00f3f2mr616324d50.73.1772595204891; Tue, 03 Mar 2026 19:33:24 -0800 (PST) Received: from localhost ([2600:1700:2760:3c1f:566d:338c:4cb1:510e]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-64cb74b985asm7440855d50.0.2026.03.03.19.33.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Mar 2026 19:33:23 -0800 (PST) From: leo vriska To: linux-input@vger.kernel.org Cc: leo vriska , Jiri Kosina , Benjamin Tissoires , linux-kernel@vger.kernel.org Subject: [PATCH 1/2] HID: quirks: add quirk to always keep device open Date: Tue, 3 Mar 2026 22:32:38 -0500 Message-ID: <20260304033245.445671-1-leo@60228.dev> X-Mailer: git-send-email 2.53.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 Some devices expect the host to open the device shortly after it is connected. If this does not occur, they may freeze or disconnect. A quirk allows these devices to function properly without userspace hacks. The existing hid-axff driver solves this problem for some generic controllers. This implementation is modelled after that driver, which still needs to exist for force feedback on the controllers that use it. Signed-off-by: leo vriska --- drivers/hid/hid-generic.c | 23 ++++++++++++++++++++++- include/linux/hid.h | 2 ++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/drivers/hid/hid-generic.c b/drivers/hid/hid-generic.c index c2de916747de..0595e653b7e7 100644 --- a/drivers/hid/hid-generic.c +++ b/drivers/hid/hid-generic.c @@ -67,7 +67,27 @@ static int hid_generic_probe(struct hid_device *hdev, if (ret) return ret; - return hid_hw_start(hdev, HID_CONNECT_DEFAULT); + ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT); + if (ret) + return ret; + + if (hdev->quirks & HID_QUIRK_KEEP_OPEN) { + ret = hid_hw_open(hdev); + if (ret) { + hid_hw_stop(hdev); + return ret; + } + } + + return 0; +} + +static void hid_generic_remove(struct hid_device *hdev) +{ + if (hdev->quirks & HID_QUIRK_KEEP_OPEN) + hid_hw_close(hdev); + + hid_hw_stop(hdev); } static int hid_generic_reset_resume(struct hid_device *hdev) @@ -89,6 +109,7 @@ static struct hid_driver hid_generic = { .id_table = hid_table, .match = hid_generic_match, .probe = hid_generic_probe, + .remove = hid_generic_remove, .reset_resume = hid_generic_reset_resume, }; module_hid_driver(hid_generic); diff --git a/include/linux/hid.h b/include/linux/hid.h index 2990b9f94cb5..9d0ab7c217f3 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h @@ -388,6 +388,7 @@ struct hid_item { * | @HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE: * | @HID_QUIRK_IGNORE_SPECIAL_DRIVER * | @HID_QUIRK_POWER_ON_AFTER_BACKLIGHT + * | @HID_QUIRK_KEEP_OPEN: * | @HID_QUIRK_FULLSPEED_INTERVAL: * | @HID_QUIRK_NO_INIT_REPORTS: * | @HID_QUIRK_NO_IGNORE: @@ -416,6 +417,7 @@ struct hid_item { #define HID_QUIRK_NOINVERT BIT(21) #define HID_QUIRK_IGNORE_SPECIAL_DRIVER BIT(22) #define HID_QUIRK_POWER_ON_AFTER_BACKLIGHT BIT(23) +#define HID_QUIRK_KEEP_OPEN BIT(24) #define HID_QUIRK_FULLSPEED_INTERVAL BIT(28) #define HID_QUIRK_NO_INIT_REPORTS BIT(29) #define HID_QUIRK_NO_IGNORE BIT(30) -- 2.53.0