From nobody Tue Feb 10 06:04:26 2026 Received: from mail-pg1-f174.google.com (mail-pg1-f174.google.com [209.85.215.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 EA1082DB794 for ; Mon, 9 Feb 2026 06:34:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770618885; cv=none; b=SclfwU1zgAfNeRr34U6/7zYg6j++9yQ24hIucRUKrMeu82fohGeqQBiQVarFw50kKqoKg74ARkDrvcrgYW03WKzoQWWKiX+wX3VCIjlLF/tERsgZJjJasQwx8+Y/2WbjYAQZMXR4K+eehBZKvNhGc47WwP8E61fodpidLsihr8A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770618885; c=relaxed/simple; bh=6cWXYQnSOpTkqGyqYB4HcUXTzLmY/x0Rpt1y2l2tVp8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jUDG3AhcmeqL32rFs4XydaqRjVQLBU5h3IQCG7hcBUEBlugHzXzmGD8rsRD1BxIhfrVmc64/waWa53WMprNS6BhFhx8kyh0gDBTeQ+G82/zLOG8NZnvy1r74s9ccIMG0ISK5KauqfY/7Wtynkv/8pem/CzPxKlsshzQsZImYN5I= 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=mPQu0iI2; arc=none smtp.client-ip=209.85.215.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="mPQu0iI2" Received: by mail-pg1-f174.google.com with SMTP id 41be03b00d2f7-c636487ccaeso1394103a12.1 for ; Sun, 08 Feb 2026 22:34:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770618884; x=1771223684; 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=q2HCkzlSd9VJd8jvOdY2m/zS2AjvWLxS2zuWfs+MEEQ=; b=mPQu0iI2fjQbnBKLT6+57wpAVWSTIuecZ0r5I67ui6owswjPAFq05te5g5W7av07UD vP6YCcQ+GesUSFOa42Sx+3EFJTtNrPb+lN0xjM5Fj17IZ05CbX7Ex72leStzjDxSYizU mFACt588bisAO4v9svjUcw6tAn88BxFospIEGh5V/z953tfH0O2uUeVVeVTjBD1+O3BR gvvgpNHDIOgmW/A/wKAPkbrbMoRLmkPrVai7Sxyq7OyQ2oZyLs//76QzYeVKlznoVCNg bTPzeuft8rQikMP1r/3AMDzsjTTFbMsbxDhahniqPRBzGUedUbfsoCRmy0LdPoySVFNt EvcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770618884; x=1771223684; 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=q2HCkzlSd9VJd8jvOdY2m/zS2AjvWLxS2zuWfs+MEEQ=; b=Y1+G724qEL3G/B2fPBQ3FDALxzzsg6vd3vNXRHPgctsFcaSKjfjcV+jGBvazx6voqm p2WJBAERHUJ70bGfBvTTEPkgI6kr/k+KGXIIHhTJW+BhlvB/zHfq7TE3Qsko0YrTRi8T hUCYrFkDSBheEm4/IFEzqDuw7w/Agve0vE5zsOstumOigZMCGl3iy77KVnxtvfMzqmt3 Wki/SCQczls+LwxeI+4l+zW5eyot8/In9zsCApe6qJ7dI8ZkAchOrTmnILwp9sCyRKx4 uRRzyD0jzX8A2r09rGPoXBdK5g4mZmcLHOYFlZsQMAyY69ODbvEPjQxSdxQL1KdEsVsF eY1A== X-Forwarded-Encrypted: i=1; AJvYcCW5F6H/M2aksjC+q3YsGcbacKg02VGuEXYGUE/U9DIRmn/nSwC/dmY9YaT2q9WYX+oW0yMs8zDBpjIC5pQ=@vger.kernel.org X-Gm-Message-State: AOJu0YwqEtRF/BU0ol2BhaW9V3YZ/xFt6RjN667dRaPxf1d8TMtKcwNN MmhzQKAW4/dTYWGkA++9CqQAAzjgW0k6D2jRiSYzveRmpBsmtfLzb2ERqoF4g9fi X-Gm-Gg: AZuq6aIKm67hfvLO++ORgYa+2IdtuGgz+K8n7Euo9cQ70XRnyyuSQfRhAoA8+dusrY2 6MOuO+nGtWJKIMgzsLbBNyFb4QDXxDjdKSehSAKroUDVUEML0ns2Hb8Xynh061XlIxC//3Zszaz MHxvRIB4dlMwi9oMgnjWiUGS6IZAGyQRzIB7fcPoUFEt7cgS/moS26u8D/A6LpEJB8fxdconVbT k2lqHrzC9ORAW+gn8nmGalaLu0tqem7AtMWAzYuL0Mdc1iMcx0x+QeoZmweHO07utk/jDDavfJP kSj9ioWW8C3sAc9bJX7c+5puA0fzvY3skZlOaxRg5W8+Zvpr6Q7xJF4EYc+hDO8bJQ3Q9canULM HNpFZlG3k7OEpiywApmARg0+s+pmd1YT38E59+i6ypTPfQpZQ3S8bSLcLgsC8Sb6Z1XNJrVKJTf WbeDm9t8OEMfBH+aFvL6mtfVzdzAP40q79EsPTxuXO5BNfHZvy X-Received: by 2002:a17:903:198b:b0:2a0:ba6d:d101 with SMTP id d9443c01a7336-2a95204fe49mr87231105ad.21.1770618884126; Sun, 08 Feb 2026 22:34:44 -0800 (PST) Received: from c12-ThinkPad-X1-Carbon-Gen-12 ([2400:2410:5f2b:700:e705:6ccd:6241:6a0a]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2aa3ec42e2asm83440455ad.53.2026.02.08.22.34.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 08 Feb 2026 22:34:43 -0800 (PST) From: Vishnu Sankar To: mpearson-lenovo@squebb.ca, dmitry.torokhov@gmail.com, hmh@hmh.eng.br, hansg@kernel.org, corbet@lwn.net, derekjohn.clark@gmail.com, ilpo.jarvinen@linux.intel.com Cc: linux-input@vger.kernel.org, linux-kernel@vger.kernel.org, ibm-acpi-devel@lists.sourceforge.net, linux-doc@vger.kernel.org, platform-driver-x86@vger.kernel.org, vsankar@lenovo.com, Vishnu Sankar Subject: [PATCH v7 1/3] input: trackpoint - Enable doubletap by default on capable devices Date: Mon, 9 Feb 2026 15:33:53 +0900 Message-ID: <20260209063355.491189-2-vishnuocv@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260209063355.491189-1-vishnuocv@gmail.com> References: <20260209063355.491189-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 Acked-by: Dmitry Torokhov --- Changes in v7: - Removed unwanted comments - Removed psmouse_info () Changes in v6: - No Changes Changes in v5: - Renamed function to trackpoint_is_dt_capable() - Simplified string comparison without sscanf() - Removed wrapper function as suggested - Fixed missing period in comment 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 | 45 ++++++++++++++++++++++++++++++++ drivers/input/mouse/trackpoint.h | 5 ++++ 2 files changed, 50 insertions(+) diff --git a/drivers/input/mouse/trackpoint.c b/drivers/input/mouse/trackpo= int.c index 5f6643b69a2c..e12d76350252 100644 --- a/drivers/input/mouse/trackpoint.c +++ b/drivers/input/mouse/trackpoint.c @@ -393,6 +393,45 @@ 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 trackpoint_is_dt_capable(const char *pnp_id) +{ + size_t i; + + if (!pnp_id) + return false; + + /* Must start with "PNP: LEN03" */ + if (!strstarts(pnp_id, "PNP: LEN03")) + return false; + + /* Ensure enough length before comparing */ + if (strlen(pnp_id) < 12) + return false; + + /* Check deny-list */ + for (i =3D 0; i < ARRAY_SIZE(dt_incompatible_devices); i++) { + if (!strncmp(pnp_id + 5, + dt_incompatible_devices[i], 7)) + return false; + } + return true; +} + int trackpoint_detect(struct psmouse *psmouse, bool set_properties) { struct ps2dev *ps2dev =3D &psmouse->ps2dev; @@ -470,6 +509,12 @@ int trackpoint_detect(struct psmouse *psmouse, bool se= t_properties) psmouse->vendor, firmware_id, (button_info & 0xf0) >> 4, button_info & 0x0f); =20 + if (trackpoint_is_dt_capable(ps2dev->serio->firmware_id)) { + error =3D trackpoint_write(ps2dev, TP_DOUBLETAP, TP_DOUBLETAP_ENABLE); + if (error) + 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 Tue Feb 10 06:04:26 2026 Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) (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 AA16528F50F for ; Mon, 9 Feb 2026 06:34:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770618889; cv=none; b=c7Co139fxOdunbK+Uj+PiYD0xsZL+ic4+qc8Bx2/Lx8/ovmNZhYnawWW2jVC+Asoby8MSOdTUTrPfsJv8rGPvmlIQYi8XfBxVgIVMZr8NR4DOZw6k6jAHn6ngM1bq9tuoOZOB6Fh/XkK7AIdey72xL3lHIVbsNgc/IGeVYBoOk0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770618889; c=relaxed/simple; bh=EHO8zs+g1Ko8UHjpjUG4wCs7CJMj3UxzMt+d6rQqm7c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=d5GyVvOKi58kzi5ZKzIHPz/7hHbx4Bk+t9xNqkCd9NsIlsYS19enY4yJG9qfYj2tRw5HfQFb5inWcV5avtCFtDqZkkMrYnyMZ6KiYGCvPzjMIWn5ShR5S90lONpUU2HevV9jlHQGwrrl02jrgIpYrjx714qgkuPg5VHJt0cp0AM= 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=aC0dG2GG; arc=none smtp.client-ip=209.85.214.172 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="aC0dG2GG" Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-2aaed195901so2418255ad.0 for ; Sun, 08 Feb 2026 22:34:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770618889; x=1771223689; 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=w5DU1y+/2ttdbcr+v/9sCW2fX8t95H3Z19WR35X2oK4=; b=aC0dG2GGIN/Hl/iAH/bRCMPLqywkMnujvR2LwH1vpeQEe8cw2ShUTP0yb0HkjRJnjV diIGLi4IFQsi7C2KQF4f2y/Gd0ZY9iOgpo0evcPgpqVapRFs97+IW7Xaxwe/yZleksZw ILKk8X8v03n/R4UYLIDXDc/lu2SYuWuy3TEYT7B+Ikab860f02+KZONKqE/J1qOKhmh6 xUV+Bm5NTzN4Llw9UFe9mk25AuBTdJgfucU0TxPhY6bHFszTez7fMCRTjy5TfCAsaXmU Qq+6MhzazTqK5VOJ//Orj/r+Dws7TOsVUl9YX3J8sbxs46D4QRidmDbxhFtAoyBx6Fvg 5QkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770618889; x=1771223689; 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=w5DU1y+/2ttdbcr+v/9sCW2fX8t95H3Z19WR35X2oK4=; b=nVPki4C5Gl1bQJLwCK0zsQxlm9FV7Dcg4G4Dxek1Q+4bcq9AXXyP1r/IAy5/7WAFqA XivXQzv1MqUuL4bVMZ+8qZL3konpa1sXVjXSe8miVMW7wBNu1EA4rYe3BJh0sGhAeCTK 30Y4LYNBusV9xSE09/zGTe3U1+xSY9mVbx2mAEM230YRtfOwzXlB3JlXL7Nk0+xP+/Gp EZo3cyW2Ofidptsgt2ngwEEgLuzZRC+h4rvEANYeS4gOJYz0brVtchTMhTy9VmE9Z0G5 7rGGusM2r70DFZITj+R49GH+kuto1h3yphW4qztjrKFRPgkFNXPox1f3G8epTdDRJ5jq bKGQ== X-Forwarded-Encrypted: i=1; AJvYcCVvXmqZIgNcEmIW9U2kGSM37Wi1cxL1NN2v37+d/NhbAJFgZEqUmgmzFVoSo9Rp+uRMlm6i7XQCs+OD1CM=@vger.kernel.org X-Gm-Message-State: AOJu0YylpAa0M1QRLSi81zX8TxBmVqJ0UD+nYlxcVqO3rqNh74kFJxjm kKzoK+A3kkx6cJoe/7Bm1fls6KBDzYw4Bsik8wJpwj5r4ZHK5dY4XXcm X-Gm-Gg: AZuq6aLh4wjF5xGkk0E6+QgPcY00z5VGUoaAcwQpJRlvrq0GcUKDgocmIMjNgUJ9e+c NUuZh2nH13RLSY+SZdvBpH/f4GJv/CnWecyV3rZeu9ln4/qFTK4OkQRwJx8zU9ojv5YjLjPhHuz K5uFLE8DJrSUwX3EuzJB2Gz2XBtUlLrBIt7w4j9j1aLWPzXKeksfdwog1Rtut21h5LByXrailWr pf2fdyH8oJ1O+2hLb5iqIebyp5ccYi15ay5rWaL4slfgIRhw/zv83aVA5+2d4HCKavu0yOXpypU zkly8sIfZ/EwqM0iJ8DVdU7IGkgSlggXzLqsC+OpIMleGI+DgP/F3QEG9Qd1J/oZCNDQ33hAU6W og0qkFS/HFsVlNLNl/ovnJmF0o5z1widKCfHCskY5azRCQemAIGrruY8pnlfJv/F+9MuLjd7DKz Asd2sKpudPRkyIw2TxluJbZpKWXXB4pfoZl8b0neFAtdynOjcA X-Received: by 2002:a17:903:298b:b0:2aa:e0d3:cae2 with SMTP id d9443c01a7336-2aae0d40c49mr32306765ad.14.1770618888863; Sun, 08 Feb 2026 22:34:48 -0800 (PST) Received: from c12-ThinkPad-X1-Carbon-Gen-12 ([2400:2410:5f2b:700:e705:6ccd:6241:6a0a]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2aa3ec42e2asm83440455ad.53.2026.02.08.22.34.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 08 Feb 2026 22:34:48 -0800 (PST) From: Vishnu Sankar To: mpearson-lenovo@squebb.ca, dmitry.torokhov@gmail.com, hmh@hmh.eng.br, hansg@kernel.org, corbet@lwn.net, derekjohn.clark@gmail.com, ilpo.jarvinen@linux.intel.com Cc: linux-input@vger.kernel.org, linux-kernel@vger.kernel.org, ibm-acpi-devel@lists.sourceforge.net, linux-doc@vger.kernel.org, platform-driver-x86@vger.kernel.org, vsankar@lenovo.com, Vishnu Sankar Subject: [PATCH v7 2/3] platform/x86: thinkpad_acpi: Add sysfs control for TrackPoint double-tap Date: Mon, 9 Feb 2026 15:33:54 +0900 Message-ID: <20260209063355.491189-3-vishnuocv@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260209063355.491189-1-vishnuocv@gmail.com> References: <20260209063355.491189-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 a sysfs attribute to enable or disable TrackPoint double-tap hotkey events at the kernel level. The TrackPoint firmware enables double-tap support automatically. This interface allows userspace to control whether double-tap events are forwarded to userspace. The attribute is available at: /sys/devices/platform/thinkpad_acpi/doubletap_enable 0 - Disable double-tap hotkey events 1 - Enable double-tap hotkey events (default) Filtering is implemented by suppressing ACPI hotkey delivery without injecting synthetic input events. 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 Changes in v5: - Rename doubletap_filter to doubletap_enable to match actual behavior - Fix inverted logic so events are emitted only when doubletap is enabled - Register sysfs attribute via hotkey_attributes[] (no device_create_file) --- --- drivers/platform/x86/lenovo/thinkpad_acpi.c | 42 +++++++++++++++++---- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/drivers/platform/x86/lenovo/thinkpad_acpi.c b/drivers/platform= /x86/lenovo/thinkpad_acpi.c index cc19fe520ea9..ca01323c990a 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_enable:1; struct quirk_entry *quirks; } tp_features; =20 @@ -3018,6 +3018,31 @@ static const struct attribute_group adaptive_kbd_att= r_group =3D { .attrs =3D adaptive_kbd_attributes, }; =20 +/* sysfs doubletap enable --------------------------------------------- */ +static ssize_t doubletap_enable_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + return sysfs_emit(buf, "%d\n", tp_features.trackpoint_doubletap_enable); +} + +static ssize_t doubletap_enable_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + bool enable; + int err; + + err =3D kstrtobool(buf, &enable); + if (err) + return err; + + tp_features.trackpoint_doubletap_enable =3D enable; + return count; +} + +static DEVICE_ATTR_RW(doubletap_enable); + /* --------------------------------------------------------------------- */ =20 static struct attribute *hotkey_attributes[] =3D { @@ -3032,6 +3057,7 @@ static struct attribute *hotkey_attributes[] =3D { &dev_attr_hotkey_recommended_mask.attr, &dev_attr_hotkey_tablet_mode.attr, &dev_attr_hotkey_radio_sw.attr, + &dev_attr_doubletap_enable.attr, #ifdef CONFIG_THINKPAD_ACPI_HOTKEY_POLL &dev_attr_hotkey_source_mask.attr, &dev_attr_hotkey_poll_freq.attr, @@ -3557,8 +3583,8 @@ 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 TrackPoint doubletap event reporting by default. */ + tp_features.trackpoint_doubletap_enable =3D 1; =20 return 0; } @@ -3863,9 +3889,9 @@ 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) - tpacpi_input_send_key(hkey, send_acpi_ev); - + /* Only send event if doubletap is enabled */ + if (!tp_features.trackpoint_doubletap_enable) + *send_acpi_ev =3D false; return true; default: return false; @@ -11285,7 +11311,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_enable =3D + !tp_features.trackpoint_doubletap_enable; return true; case TP_HKEY_EV_PROFILE_TOGGLE: case TP_HKEY_EV_PROFILE_TOGGLE2: --=20 2.51.0 From nobody Tue Feb 10 06:04:26 2026 Received: from mail-pf1-f196.google.com (mail-pf1-f196.google.com [209.85.210.196]) (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 816662D3ED1 for ; Mon, 9 Feb 2026 06:34:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.196 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770618894; cv=none; b=lbdj+Rem90C1vHkm8Aw1MhVqqXPsgBFi+nW118dlONAaDB1BEDJCFdtbxwmyK+jyfsjqF/MC1GSpRFD5tIX1M24LbsqWseZVOBh/P8JxLjyI0bzcoAGZVkq33Pi3LMOlf68NsitrP6nN3I2V+42VYNHyHETKUs+p0MxEUEmM0j8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770618894; c=relaxed/simple; bh=xPVSlWvaet9868GsCY1jJthXsfYn5a7/fBimRT/J9Pg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PDDpqM60/xbDDVXzLBI54z1oD+LIaqEu4FZCyHVNvBvgmLyuu8uW18F9OfMtP2CTd6nbskOjMfWhyKlftD9Kjl3OTRNGdyzOLfpmN4AbxIb3CIOkg6z6CRssjFm/2Jn9x2+6k+Xiq5wpZ3KWAB4c3qs1oEv+RXPTa72PVx2REo4= 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=kIrtZYCt; arc=none smtp.client-ip=209.85.210.196 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="kIrtZYCt" Received: by mail-pf1-f196.google.com with SMTP id d2e1a72fcca58-823f9f81da5so2111968b3a.1 for ; Sun, 08 Feb 2026 22:34:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770618894; x=1771223694; 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=mxx+6jRrhPvMg9VlbKNlTg2M9XXacffYRgMnxqmD5m4=; b=kIrtZYCt+ntZFLk8+m/5/ZGUGU0smEuVFkc7WEKr7raz3CxztMaozeDtXPo6Xskg44 NUjUwU5Pe6zC2MW4xtNwri58qJPj+io8AU5a0k25VYBeD4uYLakDBF5CCesl9y4ZEBet T7K0vRAobHdBS++Z8gfYjUnBXhu+lKsRxXMr5V2iVfRovFoHm6GcI+o/XCgMqo83Ac2H BjPcC98698KZX1dOuKMdzVJJYWsUfYw+kKjFAOJhNNl0UWbuFGM4TkU6HEnxcLI7C/0v cCkdsEBF5RUZbZ/pldzFu+9CFqc2sk1owb+fHv14YuYOdpMeVUxtbyg931RuvPH45WuX wWmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770618894; x=1771223694; 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=mxx+6jRrhPvMg9VlbKNlTg2M9XXacffYRgMnxqmD5m4=; b=w6XFAco7AP4MZ6/C5+jjjQhgdXfFmOsNfdQgP6dfEu7b4DjqW8zwEFS1ckgBLsxBLL RWE0ldzbPRPGXGBHEIYSXCPi/WFNhb9k6yK1Yqr95QEL4rrYEMBvRZ6IZu+3dBGg+VBY dpNQlZpIGZAwMycxmiJlH+9gua6OxgtWg/voPFfOhG7OCErvCbAHPXUz/WMPz2yo707X kPD1u0RiwshVWeCyU7xQ3VUXMDG0OMlWsvN+WNRu73GSmx81K72+oPfUuy/Ts1FD/NPN Km2cuY+agZPW2DZrVVnl1F+yxFcnSZbRmwJzlgjalckwyzr/tQsXCeipfSzQSKIGWBW6 6+EA== X-Forwarded-Encrypted: i=1; AJvYcCVrv93lcKCksOLu3xH7b4OD1vnKgO8w3IaltMmRx2QGh38PR8SMaXWRVdHDS6lIrwCMqIUvfnqPcIbgXlI=@vger.kernel.org X-Gm-Message-State: AOJu0YxYM/KcNsrW/9oWhTM0ukF1RRfCUEep0YtYgDBsqVKVmtiO0p3g sNdimKN5t4w9FIUjEFXBQA5mpJ4CXWxVVdGLndl2KjIo4XCeDHxp2tHU X-Gm-Gg: AZuq6aIpEd4iBwk6xSUL036/BA3MWD0X1R/C1S4q0Mg6fuuovwkEjCnrBpdCIRcncgj rv5U8Q5GlpsRwkd4LCd4Nm4DzIVUBfsa8IURZU0ESMYVa66pCojd3zmZiJZ9Op3bxRqHcMKC+p3 LTptwf8SsK/dogDK1BMht8Awq/Hg6yZmzScizNpkRgExRV8T1BXRNV5IfiPAJJiP0phhd1r3U+R oTOG18u5SXVOsncMTkUoKAsUIHJdSxVKQT/WN3OxjLsR+6LbvlOVOjjv9ta0/pwXMXauSGVNYdn WcjjUeErY8Le3ycxTj8JAgZMK9Er+BE67ZlnVksfsHSZHarjhC2p1wBIaRuf5SkbTazuc060rMm eVay3qW/sJi+DcxtNtUWBpVkHv3yLhZl9F5PKakF+C5RPQsTpIn8YBh0PHda4nNgJYoU5m8tYF5 nbnGwf3yCDdPAZMbOYKdSktzp1feKSWdR9f2ONQQ== X-Received: by 2002:a05:6a20:d703:b0:361:4ca3:e17d with SMTP id adf61e73a8af0-393acf882e8mr9701322637.13.1770618893792; Sun, 08 Feb 2026 22:34:53 -0800 (PST) Received: from c12-ThinkPad-X1-Carbon-Gen-12 ([2400:2410:5f2b:700:e705:6ccd:6241:6a0a]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2aa3ec42e2asm83440455ad.53.2026.02.08.22.34.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 08 Feb 2026 22:34:53 -0800 (PST) From: Vishnu Sankar To: mpearson-lenovo@squebb.ca, dmitry.torokhov@gmail.com, hmh@hmh.eng.br, hansg@kernel.org, corbet@lwn.net, derekjohn.clark@gmail.com, ilpo.jarvinen@linux.intel.com Cc: linux-input@vger.kernel.org, linux-kernel@vger.kernel.org, ibm-acpi-devel@lists.sourceforge.net, linux-doc@vger.kernel.org, platform-driver-x86@vger.kernel.org, vsankar@lenovo.com, Vishnu Sankar Subject: [PATCH v7 3/3] Documentation: thinkpad-acpi - Document doubletap_enable attribute Date: Mon, 9 Feb 2026 15:33:55 +0900 Message-ID: <20260209063355.491189-4-vishnuocv@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260209063355.491189-1-vishnuocv@gmail.com> References: <20260209063355.491189-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_enable sysfs attribute for ThinkPad ACPI driver. Signed-off-by: Vishnu Sankar --- Changes in v6: - Fix formatting of doubletap_enable sysfs documentation (separate Values l= ist) --- .../admin-guide/laptops/thinkpad-acpi.rst | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Documentation/admin-guide/laptops/thinkpad-acpi.rst b/Document= ation/admin-guide/laptops/thinkpad-acpi.rst index 4ab0fef7d440..9a660724648b 100644 --- a/Documentation/admin-guide/laptops/thinkpad-acpi.rst +++ b/Documentation/admin-guide/laptops/thinkpad-acpi.rst @@ -1521,6 +1521,27 @@ 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_enable +---------------- + +sysfs: doubletap_enable + +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_enable + echo 1 | sudo tee /sys/devices/platform/thinkpad_acpi/doub= letap_enable + echo 0 | sudo tee /sys/devices/platform/thinkpad_acpi/doub= letap_enable + +Values: + + * 1 - doubletap events are processed (default) + * 0 - doubletap events are filtered out (ignored) + + This setting can also be toggled via the Fn+doubletap hotkey. + Auxmac ------ =20 --=20 2.51.0