From nobody Sat Feb 7 21:23:56 2026 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) (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 6C134191 for ; Sat, 29 Nov 2025 00:32:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764376345; cv=none; b=DyQbFXLL/iBcfMwXFAYk1BzAoxsPuUvDtNrsGIKsNrhAci+AJOCuV0rotcxaPVeVcIiycYpHDpO1jRDbBsRzgFHpQsRzzEqIBBYoXziAD4QFRdbqSJq4cQ1YF8EmGa3CF5DQg6lDdaiuq72Y+4sqnej0s0j4rOAJ368fILSxbRE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764376345; c=relaxed/simple; bh=IuCeBnCA12nf/Fqu5eYQSw4oiYf3AXHYMr3vFYEVRiM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=f+ssgHfJxe51l8IXl+8JSSGGEtxxXNf+vaLKXh1n5oivyjiHj3WcdsOsgvlCHxpgoguLPemkOccDeALKZ1qY2GPpbf2exxZ9CINtcTd6GyM4C36q8Zvwf+Cu1lQrw7IofIhmQi59X9n2ra9PqP5F35I+HEFKbT+GWV9lpIRgpNY= 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=Ay5CPxsL; arc=none smtp.client-ip=209.85.214.179 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="Ay5CPxsL" Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-298144fb9bcso23519095ad.0 for ; Fri, 28 Nov 2025 16:32:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764376344; x=1764981144; 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=CQatbXiS4IDF8tyOs0fGlxPqW6GCHi1/Lga4WQU56dE=; b=Ay5CPxsLDZtDkM7DFTHBsEvCcPU1/D5R/I1Jz1elHU243BDW12dDboEm+veKI8X4+T R5NGs7ceoL7gRqDV1dZojc5nZmSVHtJEJxz2jcGKMwFlxyb2GU9s5SiYnWf5tgpuHLIp UEAqXJgJI2zLz6g2J+s6flxPLJ4ErJyD/ZhKavFSV4y5x/DFeLBX+sp7MHC2SrAWdeyo sRdLG1uCJg8PjHzM6sYIa5HG0NdomvK2SxY4XAsnglVjWVd6wrTvULw3bgfrkKcdRgNW no1JSrsqy99TXvBd84WuGSAAeOZWyQhH9Ahfl3TpLXDaEUGWi+Mc6PglEdckLoJx3xRu Ds2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764376344; x=1764981144; 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=CQatbXiS4IDF8tyOs0fGlxPqW6GCHi1/Lga4WQU56dE=; b=WJgTqP1Pfgn8Mjk/f2vaYIjYlcX2VSq6/s896DZhqOexQ6+rX0zlN2dfv8xZUAuTFL 2inazq6pcbaa40zJoh9Tcn7an5CZm1WKVIWPP7LSnn8YpxjQP0ifEUYs3iSTYdsboQLj ojvrwxMsbZvX3hRJ8ydHVuNJNCEpxIhX79F6FwjZmYNz2j/4hbpmlxhDxCgOj2ptfsXI 9iygMRsKKxx40QHsUcYVqHind1MgkU78Wdm72KHkHfe0xVLcl/62SQ1cX30/UTQoCKhN EMWolUPA+KpQsV7bEacNq65WqdXfQFfqEbXHwpIyzPKTpYKwc2RBawlszDtFT5GN/O3D VUMA== X-Forwarded-Encrypted: i=1; AJvYcCW5XiRpGV0kGChU8PDFKa1+Q1BoaU8Rb9MFZTwhyzODYlKrBSYsEj3fvsnseXqnJyJ35iICA1v9Hv3uo1M=@vger.kernel.org X-Gm-Message-State: AOJu0YzFTotLFRA2l4GuD+/C+LyVhWx975ydwrcu5qD8oui+RU4KJJGt lpJYEXrJoYyJ+7dTwK5xeb3EvFHdhWwD3vZM23w9CSPY99ogvxHNUCKq X-Gm-Gg: ASbGncvVmRdwSNh9hiXv5LKW6NgLJb8Mj2+QkvyPDukm367wbxCEOV//yhcjPnvB9Py q7vFWTFqM/loZcsZuEgaM2YPXBkECnES7pp6Sek4zjgqFby5ULfUoWLu0SwmKM/X4gGdOLux650 VilQTr1HuLgo5Lath0vAzzt8erBGBzGlE9DQauy+L8itZ/rAF7hEq0xHL03WhzAVh6u4O4La0M8 7s3yE7g0aW9GxG44rknavZWbhFnOsVYcYTsA1m7bzdWWWSZnhS+G5n7fZPckTzH8uIVWq5Qn21m jJmj0szepR/wwX1cYppLlGmqF3nEHfZwIWepmt37JNdQglLIf+7Ebjeqw3iwqLNgS8sHsLFLgPH R/1iF0eoic3Rs9E/LaRoW3rqvQw0qZKcuONVng+YFIBvgoOiBvbAPnnzM4qMaywAzdNb4SNWkgI 3fFuksHgH7k3BGfmygCwrhp3HB0kgyD0FIp7Vrrvb6Na+S5z1oTa3yQUnVaj49gTWLJg== X-Google-Smtp-Source: AGHT+IH+tqI7TxrE3Powg5mDCkQtUgWbnSb7QtzYFL6VRXzqfB4juIiEGJZGEy2486ootGZ/7Fn4SQ== X-Received: by 2002:a17:903:1aaf:b0:296:3f23:b910 with SMTP id d9443c01a7336-29baae45c56mr137888385ad.9.1764376343606; Fri, 28 Nov 2025 16:32:23 -0800 (PST) Received: from c12-ThinkPad-X1-Carbon-Gen-12 (softbank221049092147.bbtec.net. [221.49.92.147]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-29bceb40276sm56054805ad.73.2025.11.28.16.32.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Nov 2025 16:32:23 -0800 (PST) From: Vishnu Sankar To: corbet@lwn.net, dmitry.torokhov@gmail.com, hmh@hmh.eng.br, derekjohn.clark@gmail.com, hansg@kernel.org, ilpo.jarvinen@linux.intel.com Cc: mpearson-lenovo@squebb.ca, linux-doc@vger.kernel.org, linux-input@vger.kernel.org, linux-kernel@vger.kernel.org, ibm-acpi-devel@lists.sourceforge.net, platform-driver-x86@vger.kernel.org, vsankar@lenovo.com, Vishnu Sankar Subject: [PATCH v4 1/3] input: trackpoint - Enable doubletap by default on capable devices Date: Sat, 29 Nov 2025 09:25:31 +0900 Message-ID: <20251129002533.9070-2-vishnuocv@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251129002533.9070-1-vishnuocv@gmail.com> References: <20251129002533.9070-1-vishnuocv@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" Enable doubletap functionality by default on TrackPoint devices that support it. The feature is detected using firmware ID pattern matching (PNP: LEN03xxx) with a deny list of incompatible devices. This provides immediate doubletap functionality without requiring userspace configuration. The hardware is enabled during device detection, while event filtering continues to be handled by the thinkpad_acpi driver as before. Signed-off-by: Vishnu Sankar Suggested-by: Mark Pearson --- Changes in v4: - Simplified approach: removed all sysfs attributes and user interface - Enable doubletap by default during device detection - Removed global variables and complex attribute infrastructure - Uses minimal firmware ID detection with deny list - Follows KISS principle as suggested by reviewers Changes in v3: - No changes Changes in v2: - Improve commit messages - Sysfs attributes moved to trackpoint.c - Removed unnecessary comments - Removed unnecessary debug messages - Using strstarts() instead of strcmp() - is_trackpoint_dt_capable() modified - Removed _BIT suffix and used BIT() define - Reverse the trackpoint_doubletap_status() logic to return error first - Removed export functions as a result of the design change - Changed trackpoint_dev->psmouse to parent_psmouse - The path of trackpoint.h is not changed --- drivers/input/mouse/trackpoint.c | 51 ++++++++++++++++++++++++++++++++ drivers/input/mouse/trackpoint.h | 5 ++++ 2 files changed, 56 insertions(+) diff --git a/drivers/input/mouse/trackpoint.c b/drivers/input/mouse/trackpo= int.c index 5f6643b69a2c..67144c27bccd 100644 --- a/drivers/input/mouse/trackpoint.c +++ b/drivers/input/mouse/trackpoint.c @@ -393,6 +393,48 @@ static int trackpoint_reconnect(struct psmouse *psmous= e) return 0; } =20 +/* List of known incapable device PNP IDs */ +static const char * const dt_incompatible_devices[] =3D { + "LEN0304", + "LEN0306", + "LEN0317", + "LEN031A", + "LEN031B", + "LEN031C", + "LEN031D", +}; + +/* + * Checks if it's a doubletap capable device + * The PNP ID format is "PNP: LEN030d PNP0f13". + */ +static bool is_trackpoint_dt_capable(const char *pnp_id) +{ + const char *id_start; + char id[8]; + size_t i; + + if (!strstarts(pnp_id, "PNP: LEN03")) + return false; + + /* Points to "LEN03xxxx" */ + id_start =3D pnp_id + 5; + if (sscanf(id_start, "%7s", id) !=3D 1) + return false; + + /* Check if it's in the deny list */ + for (i =3D 0; i < ARRAY_SIZE(dt_incompatible_devices); i++) { + if (strcmp(id, dt_incompatible_devices[i]) =3D=3D 0) + return false; + } + return true; +} + +static int trackpoint_set_doubletap(struct ps2dev *ps2dev, bool enable) +{ + return trackpoint_write(ps2dev, TP_DOUBLETAP, enable ? TP_DOUBLETAP_ENABL= E : TP_DOUBLETAP_DISABLE); +} + int trackpoint_detect(struct psmouse *psmouse, bool set_properties) { struct ps2dev *ps2dev =3D &psmouse->ps2dev; @@ -470,6 +512,15 @@ int trackpoint_detect(struct psmouse *psmouse, bool se= t_properties) psmouse->vendor, firmware_id, (button_info & 0xf0) >> 4, button_info & 0x0f); =20 + /* Enable doubletap by default on capable devices */ + if (is_trackpoint_dt_capable(ps2dev->serio->firmware_id)) { + int error =3D trackpoint_set_doubletap(ps2dev, true); + if (!error) + psmouse_info(psmouse, "Doubletap enabled by default!\n"); + else + psmouse_warn(psmouse, "Failed to enable doubletap: %d\n", error); + } + return 0; } =20 diff --git a/drivers/input/mouse/trackpoint.h b/drivers/input/mouse/trackpo= int.h index eb5412904fe0..3e03cdb39449 100644 --- a/drivers/input/mouse/trackpoint.h +++ b/drivers/input/mouse/trackpoint.h @@ -69,6 +69,8 @@ /* (how hard it is to drag */ /* with Z-axis pressed) */ =20 +#define TP_DOUBLETAP 0x58 /* TrackPoint doubletap register */ + #define TP_MINDRAG 0x59 /* Minimum amount of force needed */ /* to trigger dragging */ =20 @@ -110,6 +112,9 @@ external device will be forced to 1 */ #define TP_MASK_EXT_TAG 0x04 =20 +/* Doubletap register values */ +#define TP_DOUBLETAP_ENABLE 0xFF /* Enable value */ +#define TP_DOUBLETAP_DISABLE 0xFE /* Disable value */ =20 /* Power on Self Test Results */ #define TP_POR_SUCCESS 0x3B --=20 2.51.0 From nobody Sat Feb 7 21:23:56 2026 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) (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 8050F191 for ; Sat, 29 Nov 2025 00:32:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764376361; cv=none; b=eehSEI0BtirrT4fDmGhxHYshX6tOniDP+OLQ7x298dQQRpxO5qQd5xRH3ymjix2m/1mbgb1nM8tlk+KJEOjBIGXlexuCcP3+yGDxTzF+h+KlHqrHeN0tsreO3DmsId1LsIcG2ofTSiFwW3hdxtsGYfBLxkhrQsPW+3/wm0f9Nn8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764376361; c=relaxed/simple; bh=6zxLAlp/Wljzbjiex8bdLyZK02qoFzsqEdbUkn3WDuI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bSi5CvZSFVl8IMpNDDSq+JZUIyoOY3yJ8nCTqXeOqJIzAwzd9zPKePUUa5ga6NgTFLHtD4qhCbK78ubHU+s/wLCjV9uY9DiRZgJPlUyX+hh9fz8T2Z4bKLTwfPRfbUhJTENWJIvIzJwytjRTrpY41npizFrMl4M32Dlbq5uhMTw= 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=g6xWvYCf; arc=none smtp.client-ip=209.85.214.169 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="g6xWvYCf" Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-29568d93e87so24898595ad.2 for ; Fri, 28 Nov 2025 16:32:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764376359; x=1764981159; 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=aTc+9vRAB3R4MBY+OXbnjje5QcqV2vpqrpHPruJWjvs=; b=g6xWvYCfPdbSEHsmVgoJj/Xd1GfnUR7fYV+et8lPMiOBQouY8ncmcYLElE6LoRF8f+ aWITltjN+U/Xq4+w72Q7w01JZhHmEVHYIqPH8Ifd4eOIu5fInkiUU4rBo3oODvMvF7tY 6CpLOS59LYZiw3KInI7JRI9Y9Q3IqNLAySj6of684GlNZfelm8SeivqmekuWxk5P7zI0 86yRF4sxqkSGqGHrFZ/gQFNWa3vx9LiObHL5eaUPlpo+P7Bp0Eu/6YRBxbjo/N30BtMD b7tBj1gUorl1nG3BimKT7bTpx4dd3/Bzlo/enbaiDruPLvWp5T/OEtL5KEeJwG19K2Lp maRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764376359; x=1764981159; 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=aTc+9vRAB3R4MBY+OXbnjje5QcqV2vpqrpHPruJWjvs=; b=iwTiYVSpqSAVTYyDViMxLV6pkYYMiMk8bFdiGpFgEuKEgdWDlIsOqts42jteNpOIQV il20pV2Q3RqTu9hjqzkROql78tg+E9dk1KsETOxOSdH11acg1SCuZn+xtHBfrDvlFkBk uACyjF6q4ijUDyrZC6k/vAMg4IIYMn9qXfk7YZTjPfs+xGImJDyjmvjFz2iGQ4/Jb/oo HuYo7xn21HWY3xZ0PIvABqps0qgeDzwRKtG1ZQnw1CdgxbbiIZFktUKCXfp9KXEeBJyN o/oL2iH4bpalS+InwVZ9tVKTKxej0TPbMxeDVyF5SBLxVGB+GvLOps90ehGw21TriN/2 IiGw== X-Forwarded-Encrypted: i=1; AJvYcCWJQ86n8xtcGjucj8Z1LE4/cyH2o4ntRAQa+pFzMidfqx9B7dPDMF1uVfl5jBYFs9+5TKfE8VydPqPntFY=@vger.kernel.org X-Gm-Message-State: AOJu0YzAdW8ixPgCNIYDhuvmbVy9JJ2Dis6OROwSONTp037qhEA0ikO9 eXWtGvNrOZ57lnaaiboXHaA90TEnbQq5+LuN+ahTnxZNIr4qpQwejmfi X-Gm-Gg: ASbGnctO0j0XzOyXIIEiUm3ejqdqYeQqv9Ap5Vj4Pw96XWlV+FBqweLgz7aLI/KO5xw JktxZdL2qq1qvcZz8CBQsYbHmvdx5s6H5uLXxrPeDn8kX6MzAGy4B0+u5YdThIpmHj8RKl7UbTS xvjYgXqxP0XcUbsl2KfNpNYZfufFzKJPUhzh4UqVBETZbJp0h6EXCiJtK0LuzIldeXyEKcEalA2 iQZYzz7tBzBoJyiVKCj1yRe79yTPE9NUZ8AeEavwoYtf6p/k8uEMIL0gGZB8hoLicc6VfXuI1IT dUS+d/XOeOSxdr3yn/W53UF1RlEDHyEE6dD/DxWcPrqlmEhpz154iKycLbnhnCIAue2HgTzBV/z +nzJAh8F1RigG7LDDiG1w5uxaYK3aOJEoyMzGeTdgJG3BWxytRdXvBXLLohh5MMtXu99NALTUhh R4cw2sccbZkUracYrb8VYfonmMIb/NLdBsUufp5ifz61UOcvwynJnm/uYq9ylTGb3GRA== X-Google-Smtp-Source: AGHT+IEvcIbegpok2li85P+v1Qef4lNDwGUNPU1TLt/0f+gQF8BvvzPIBH24rX6bK8TheUfD9/vBNg== X-Received: by 2002:a17:902:d4d1:b0:246:e1b6:f9b0 with SMTP id d9443c01a7336-29baaf9abb7mr190627815ad.18.1764376358914; Fri, 28 Nov 2025 16:32:38 -0800 (PST) Received: from c12-ThinkPad-X1-Carbon-Gen-12 (softbank221049092147.bbtec.net. [221.49.92.147]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-29bceb40276sm56054805ad.73.2025.11.28.16.32.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Nov 2025 16:32:38 -0800 (PST) From: Vishnu Sankar To: corbet@lwn.net, dmitry.torokhov@gmail.com, hmh@hmh.eng.br, derekjohn.clark@gmail.com, hansg@kernel.org, ilpo.jarvinen@linux.intel.com Cc: mpearson-lenovo@squebb.ca, linux-doc@vger.kernel.org, linux-input@vger.kernel.org, linux-kernel@vger.kernel.org, ibm-acpi-devel@lists.sourceforge.net, platform-driver-x86@vger.kernel.org, vsankar@lenovo.com, Vishnu Sankar Subject: [PATCH v4 2/3] platform/x86: thinkpad_acpi - Add doubletap_filter sysfs interface Date: Sat, 29 Nov 2025 09:25:32 +0900 Message-ID: <20251129002533.9070-3-vishnuocv@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251129002533.9070-1-vishnuocv@gmail.com> References: <20251129002533.9070-1-vishnuocv@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" Add sysfs interface for controlling TrackPoint doubletap event filtering. This allows userspace to enable/disable doubletap functionality and query the current state. The attribute is available at: /sys/devices/platform/thinkpad_acpi/doubletap_filter When set to 1, doubletap events are filtered out (ignored). When set to 0, doubletap events are processed (default). This complements the automatic hardware enablement in the trackpoint driver by providing user control over event processing at the kernel level. Signed-off-by: Vishnu Sankar Suggested-by: Mark Pearson --- Changes in v2: - Updated commit message to clarify dependency on trackpoint driver - Now handling sysfs read/write of trackpoint driver using file read/write - Removed sysfs attribute creation of trackpoint double tap here - Reversed the logic and return false right away - Dropped unnecessary debug messages - Using dev_dbg() instead of pr_xxxx() Changes in v3: - No changes Changes in v4: - Simplified approach: single sysfs attribute for user control - Clear naming: doubletap_filter instead of doubletap_enabled - Intuitive behavior: 0=3Dprocess events, 1=3Dfilter events - No cross-driver dependencies or complex interactions - Minimal code changes using existing thinkpad_acpi infrastructure --- --- drivers/platform/x86/lenovo/thinkpad_acpi.c | 54 +++++++++++++++++++-- 1 file changed, 49 insertions(+), 5 deletions(-) diff --git a/drivers/platform/x86/lenovo/thinkpad_acpi.c b/drivers/platform= /x86/lenovo/thinkpad_acpi.c index cc19fe520ea9..9b646ecff452 100644 --- a/drivers/platform/x86/lenovo/thinkpad_acpi.c +++ b/drivers/platform/x86/lenovo/thinkpad_acpi.c @@ -373,7 +373,7 @@ static struct { u32 hotkey_poll_active:1; u32 has_adaptive_kbd:1; u32 kbd_lang:1; - u32 trackpoint_doubletap:1; + u32 trackpoint_doubletap_filter:1; struct quirk_entry *quirks; } tp_features; =20 @@ -3104,8 +3104,35 @@ static void tpacpi_send_radiosw_update(void) hotkey_radio_sw_notify_change(); } =20 +static ssize_t doubletap_filter_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + return sysfs_emit(buf, "%d\n", tp_features.trackpoint_doubletap_filter); +} + +static ssize_t doubletap_filter_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + bool filter; + int err; + + err =3D kstrtobool(buf, &filter); + if (err) + return err; + + tp_features.trackpoint_doubletap_filter =3D filter; + return count; +} + +static DEVICE_ATTR_RW(doubletap_filter); + static void hotkey_exit(void) { + if (tpacpi_pdev) + device_remove_file(&tpacpi_pdev->dev, &dev_attr_doubletap_filter); + mutex_lock(&hotkey_mutex); hotkey_poll_stop_sync(); dbg_printk(TPACPI_DBG_EXIT | TPACPI_DBG_HKEY, @@ -3557,8 +3584,22 @@ static int __init hotkey_init(struct ibm_init_struct= *iibm) =20 hotkey_poll_setup_safe(true); =20 - /* Enable doubletap by default */ - tp_features.trackpoint_doubletap =3D 1; + /* + * Enable kernel-level doubletap event filtering by default. + * This allows doubletap events to reach userspace. + */ + tp_features.trackpoint_doubletap_filter =3D 1; + + /* Create doubletap_filter sysfs attribute */ + if (tpacpi_pdev) { + int err =3D device_create_file(&tpacpi_pdev->dev, &dev_attr_doubletap_fi= lter); + if (err) { + pr_warn("Unable to create doubletap_filter sysfs attribute\n"); + /* Continue even if sysfs creation fails */ + } else { + pr_info("ThinkPad ACPI doubletap_filter sysfs attribute created\n"); + } + } =20 return 0; } @@ -3863,7 +3904,8 @@ static bool hotkey_notify_8xxx(const u32 hkey, bool *= send_acpi_ev) { switch (hkey) { case TP_HKEY_EV_TRACK_DOUBLETAP: - if (tp_features.trackpoint_doubletap) + /* Only send the event if kernel-level filtering allows it */ + if (tp_features.trackpoint_doubletap_filter) tpacpi_input_send_key(hkey, send_acpi_ev); =20 return true; @@ -11285,7 +11327,9 @@ static bool tpacpi_driver_event(const unsigned int = hkey_event) mutex_unlock(&tpacpi_inputdev_send_mutex); return true; case TP_HKEY_EV_DOUBLETAP_TOGGLE: - tp_features.trackpoint_doubletap =3D !tp_features.trackpoint_doubletap; + /* Toggle kernel-level doubletap event filtering */ + tp_features.trackpoint_doubletap_filter =3D + !tp_features.trackpoint_doubletap_filter; return true; case TP_HKEY_EV_PROFILE_TOGGLE: case TP_HKEY_EV_PROFILE_TOGGLE2: --=20 2.51.0 From nobody Sat Feb 7 21:23:56 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 C7992194A6C for ; Sat, 29 Nov 2025 00:32:46 +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=1764376369; cv=none; b=qYZ+EC9iuZZE6JQqmyiXW2az57709MiSvhP34m9wxsP9/Tmdn2u5N84GGmyZD0rQ8w14HDUB0tbYbli0Llhmf3i0eCMq7huVZCHh6wHLBYTrCUz4zGIQRKXTWM8RnJjT/z1geN3nvF/WYGq6v3rpFnRcgLUj2+BwOBCkfV3X0Mg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764376369; c=relaxed/simple; bh=Jh/783xqciUdedh9IDWPXZ2+CVD4b9ocBmZqKoH0yfg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Ndg7nCP68u1kfZlKXfmrOAVSM45WFH6/pltVI7UHIye8O4+KYvkpuCocs4li+izEMeAYUVaGKq7G38Lt3Brl3gqBa0NIeqN35gabZ8CbVNp0za9heS5smTIjvKx3SIqrr2wcqw2KwibIvkwJRQ3LGLZMu2+Vn06p82uhhHaJc7Y= 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=m5xWHzJa; 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="m5xWHzJa" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-2958db8ae4fso24016805ad.2 for ; Fri, 28 Nov 2025 16:32:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764376366; x=1764981166; 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=z/sv0PvGQwRqr1vhXxlC6sNnbZ+cS/dp1dWnLHgBvKk=; b=m5xWHzJaC25waKlq8PWRMMsWaBuRYjbdHb4bxvMtihJg6qriRih3ZS1UjNSVBmv2hp jjzJ7Px8EV+BkMtlM4BDvuPDg5pXOKX1V4TW7x61B6tFGZLaQdzQ4nkvnTNBONq3v4j7 i6FwR70xsWvB22LsB4/UBwWR6lZgg+EhPirPTOehl3qeyLkqLHB290vMjPGOQr0Smfu3 2Ukszl2IUwqqhYhlmuArNcetE19nVMjQ8SSYDc0q87f14ibs1mQ1W2QFMl2h4Du8clUD dTStBoYiGDQmUtt8uTHn6VbWq5EJTCJ14NsTD/kDMLnqg3hujMxyYsIde1Fe+KQEFhHT Nh1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764376366; x=1764981166; 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=z/sv0PvGQwRqr1vhXxlC6sNnbZ+cS/dp1dWnLHgBvKk=; b=fMZByvd+oJwhTAEkTNwqweoJW6ebWWUOhbP62OuGLCWu2KwOw2f+lKeSYmU1dJiR/e h5HAw+DNX+BD9nyx7aSoSv+Tiq81/wVOQsdcjVBJ5aWVYsXBDBnYvkYxc5AUcFXd3NBf HsDPuy8GQrXlCRhWP1RGVjiGqNWZwZf+vDXNrQdtqEc1I131y5uELRPD14oWAxA1DB0/ DfOUxcJbRXQ5Wv8MoKmjwHHxLGU3YErgTBtjdxtqSg0JjFDn0VK8D+ZuaunL6iyA22+h +ysVS8RU6HGsbjdV23GhmZhEUuUYRL3g42WqfVUuBY0y9GCVjWi69ticKfaxIS+kfC2T c/+A== X-Forwarded-Encrypted: i=1; AJvYcCVT0nROcx2PCzB6W43tgLar6we29h+HVs9wmBda6J6T2QQohoQfWPjt2KXLmD6BUsL8lox5W+XA17Iv1FE=@vger.kernel.org X-Gm-Message-State: AOJu0Yxc0hVS2Qfj/2xndX9JmM1JQb6JZU/yRgX5Nxv9YmHlu2J+sJ3K A3MkKCCgaRr6FlhkVTozcwP5ByZfJF1MHqKMoXI7/i4r4A6/SjWTeLnb X-Gm-Gg: ASbGncuUTHci+xz40rYly+fVdwPODn3Et+ut2B8kIAUBcODjV5HLGVaKpsupqsMiVEp S59uEJSVkT9j01Hc8i+dtZE3elGEw51OByJkWnfU8+LUgdlR9yMq1YavZ77JaVIjhnDAMBZDWav 6E5p5TMcujC2z5sI+aq38J6ekO1mfp3kBBcQh3u0VP1asJiS4mcKJKGxdMR+NvCyBtFvY1WapdQ haAO5ukfVyYOQ6QbYMdR+R5WwDrqgwdaNiLgjUXOpDerJQcz+KKPgHvJ7WT2mdeX+Fq0C/fXNM0 f0C9byQbYwr6YEMMndmvNHDeXCd0dot94aljZ2I4qRwdEYMwx614BHmHZTMLWpIgU0ApRkwdAbp tVbBghbY0PwOzK65ZgBrTgcZFxsioTWMs71qXtJVlhcmort7XH16IFhFgqu7cXS36w7Ax6V1mVa 7rdFLOqxlzQBnkr6frviHq+TV6UIEH56KM2nqtGo6hq+I0lzwALEfOK1qrT51BTFOyOkXUpeY3q mPe X-Google-Smtp-Source: AGHT+IGaG7HX0TRE9DPtAnNXxioWmI46iVYPjVATZ6u7cdhnEXZz3iP5AEmvXo+W0mfvPpLft8hqUQ== X-Received: by 2002:a17:902:fc43:b0:295:6e0:7b0d with SMTP id d9443c01a7336-29b6c6bb2f3mr323906235ad.56.1764376366189; Fri, 28 Nov 2025 16:32:46 -0800 (PST) Received: from c12-ThinkPad-X1-Carbon-Gen-12 (softbank221049092147.bbtec.net. [221.49.92.147]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-29bceb40276sm56054805ad.73.2025.11.28.16.32.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Nov 2025 16:32:45 -0800 (PST) From: Vishnu Sankar To: corbet@lwn.net, dmitry.torokhov@gmail.com, hmh@hmh.eng.br, derekjohn.clark@gmail.com, hansg@kernel.org, ilpo.jarvinen@linux.intel.com Cc: mpearson-lenovo@squebb.ca, linux-doc@vger.kernel.org, linux-input@vger.kernel.org, linux-kernel@vger.kernel.org, ibm-acpi-devel@lists.sourceforge.net, platform-driver-x86@vger.kernel.org, vsankar@lenovo.com, Vishnu Sankar Subject: [PATCH v4 3/3] Documentation: thinkpad-acpi - Document doubletap_filter attribute Date: Sat, 29 Nov 2025 09:25:33 +0900 Message-ID: <20251129002533.9070-4-vishnuocv@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251129002533.9070-1-vishnuocv@gmail.com> References: <20251129002533.9070-1-vishnuocv@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" Document the doubletap_filter sysfs attribute for ThinkPad ACPI driver. Signed-off-by: Vishnu Sankar --- .../admin-guide/laptops/thinkpad-acpi.rst | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Documentation/admin-guide/laptops/thinkpad-acpi.rst b/Document= ation/admin-guide/laptops/thinkpad-acpi.rst index 4ab0fef7d440..a1e84d25e151 100644 --- a/Documentation/admin-guide/laptops/thinkpad-acpi.rst +++ b/Documentation/admin-guide/laptops/thinkpad-acpi.rst @@ -1521,6 +1521,26 @@ Currently 2 antenna types are supported as mentioned= below: The property is read-only. If the platform doesn't have support the sysfs class is not created. =20 +doubletap_filter +---------------- + +sysfs: doubletap_filter + +Controls whether TrackPoint doubletap events are filtered out. Doubletap i= s a +feature where quickly tapping the TrackPoint twice triggers a special func= tion key event. + +The available commands are:: + + cat /sys/devices/platform/thinkpad_acpi/doubletap_filter + echo 1 | sudo tee /sys/devices/platform/thinkpad_acpi/doub= letap_filter + echo 0 | sudo tee /sys/devices/platform/thinkpad_acpi/doub= letap_filter + +Values: + * 0 - doubletap events are processed (default) + * 1 - doubletap events are filtered out (ignored) + + This setting can also be toggled via the Fn+doubletap hotkey. + Auxmac ------ =20 --=20 2.51.0