linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
To: Jiri Kosina <jikos@kernel.org>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: Mario.Limonciello@dell.com,
	Peter Hutterer <peter.hutterer@who-t.net>,
	linux-input@vger.kernel.org, linux-kernel@vger.kernel.org,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>
Subject: [PATCH v2 11/13] HID: multitouch: report MT_TOOL_PALM for non-confident touches
Date: Thu,  7 Jun 2018 09:54:46 +0200	[thread overview]
Message-ID: <20180607075448.5706-12-benjamin.tissoires@redhat.com> (raw)
In-Reply-To: <20180607075448.5706-1-benjamin.tissoires@redhat.com>

From: Dmitry Torokhov <dmitry.torokhov@gmail.com>

According to Microsoft specification [1] for Precision Touchpads (and
Touchscreens) the devices use "confidence" reports to signal accidental
touches, or contacts that are "too large to be a finger". Instead of
simply marking contact inactive in this case (which causes issues if
contact was originally proper and we lost confidence in it later, as
this results in accidental clicks, drags, etc), let's report such
contacts as MT_TOOL_PALM and let userspace decide what to do.
Additionally, let's report contact size for such touches as maximum
allowed for major/minor, which should help userspace that is not yet
aware of MT_TOOL_PALM to still perform palm rejection.

[1] https://docs.microsoft.com/en-us/windows-hardware/design/component-guidelines/touchpad-windows-precision-touchpad-collection

Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
[splitted and rebased]
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>

---

changes in v2:
- dropped the delayed release in case of palm detection. This is
  a FW bug for PTP devices, and should only happen with touchscreens
- move input_set_abs_params(hi->input, ABS_MT_TOOL_TYPE,...) into
  its own test so other devices can add MT_QUIRK_CONFIDENCE to their
  quirks.
---
 drivers/hid/hid-multitouch.c | 30 ++++++++++++++++++++++++------
 1 file changed, 24 insertions(+), 6 deletions(-)

diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
index a4a274ebfbef..36c8b67bb032 100644
--- a/drivers/hid/hid-multitouch.c
+++ b/drivers/hid/hid-multitouch.c
@@ -736,6 +736,13 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
 				cls->name == MT_CLS_WIN_8_DUAL) &&
 				field->application == HID_DG_TOUCHPAD)
 				app->quirks |= MT_QUIRK_CONFIDENCE;
+
+			if (app->quirks & MT_QUIRK_CONFIDENCE)
+				input_set_abs_params(hi->input,
+						     ABS_MT_TOOL_TYPE,
+						     MT_TOOL_FINGER,
+						     MT_TOOL_PALM, 0, 0);
+
 			MT_STORE_FIELD(confidence_state);
 			return 1;
 		case HID_DG_TIPSWITCH:
@@ -958,10 +965,12 @@ static int mt_process_slot(struct mt_device *td, struct input_dev *input,
 	if (quirks & MT_QUIRK_HOVERING)
 		inrange_state = *slot->inrange_state;
 
-	active = (*slot->tip_state || inrange_state) && confidence_state;
+	active = *slot->tip_state || inrange_state;
 
 	if (app->application == HID_GD_SYSTEM_MULTIAXIS)
 		tool = MT_TOOL_DIAL;
+	else if (unlikely(!confidence_state))
+		tool = MT_TOOL_PALM;
 
 	input_mt_slot(input, slotnum);
 	input_mt_report_slot_state(input, tool, active);
@@ -993,11 +1002,20 @@ static int mt_process_slot(struct mt_device *td, struct input_dev *input,
 			orientation = -azimuth;
 		}
 
-		/*
-		 * divided by two to match visual scale of touch
-		 * for devices with this quirk
-		 */
-		if (quirks & MT_QUIRK_TOUCH_SIZE_SCALING) {
+		if (unlikely(!confidence_state)) {
+			/*
+			 * When reporting palm, set contact to maximum
+			 * size to help userspace that does not
+			 * recognize MT_TOOL_PALM to reject contacts
+			 * that are too large.
+			 */
+			major = input_abs_get_max(input, ABS_MT_TOUCH_MAJOR);
+			minor = input_abs_get_max(input, ABS_MT_TOUCH_MINOR);
+		} else if (quirks & MT_QUIRK_TOUCH_SIZE_SCALING) {
+			/*
+			 * divided by two to match visual scale of touch
+			 * for devices with this quirk
+			 */
 			major = major >> 1;
 			minor = minor >> 1;
 		}
-- 
2.14.3

  parent reply	other threads:[~2018-06-07  7:55 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-07  7:54 [PATCH v2 00/13] Hid multitouch rewrite, support os system multi-axis devices, take 2 Benjamin Tissoires
2018-06-07  7:54 ` [PATCH v2 01/13] input: move MT_TOOL_* to input-event-codes.h Benjamin Tissoires
2018-06-11 17:16   ` Dmitry Torokhov
2018-06-07  7:54 ` [PATCH v2 02/13] input: add MT_TOOL_DIAL Benjamin Tissoires
2018-06-11 17:18   ` Dmitry Torokhov
2018-06-07  7:54 ` [PATCH v2 03/13] HID: multitouch: make sure the static list of class is not changed Benjamin Tissoires
2018-06-07  7:54 ` [PATCH v2 04/13] HID: multitouch: Store per collection multitouch data Benjamin Tissoires
2018-06-07  7:54 ` [PATCH v2 05/13] HID: multitouch: store a per application quirks value Benjamin Tissoires
2018-06-07  7:54 ` [PATCH v2 06/13] HID: multitouch: ditch mt_report_id Benjamin Tissoires
2018-06-07  7:54 ` [PATCH v2 07/13] HID: multitouch: remove one copy of values Benjamin Tissoires
2018-06-07  7:54 ` [PATCH v2 08/13] HID: input: enable Totem on the Dell Canvas 27 Benjamin Tissoires
2018-06-07  7:54 ` [PATCH v2 09/13] HID: core: do not upper bound the collection stack Benjamin Tissoires
2018-06-07  7:54 ` [PATCH v2 10/13] HID: microsoft: support the Surface Dial Benjamin Tissoires
2018-06-07  7:54 ` Benjamin Tissoires [this message]
2018-06-07  7:54 ` [PATCH v2 12/13] HID: multitouch: touchscreens also use confidence reports Benjamin Tissoires
2018-06-07  7:54 ` [PATCH v2 13/13] HID: multitouch: handle palm for touchscreens Benjamin Tissoires

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180607075448.5706-12-benjamin.tissoires@redhat.com \
    --to=benjamin.tissoires@redhat.com \
    --cc=Mario.Limonciello@dell.com \
    --cc=dmitry.torokhov@gmail.com \
    --cc=jikos@kernel.org \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peter.hutterer@who-t.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).