42 lines
1.6 KiB
Diff
42 lines
1.6 KiB
Diff
From: Mathias Gottschlag <mgottschlag@gmail.com>
|
|
Date: Sat, 7 Mar 2015 13:27:08 -0800
|
|
Subject: [4/6] Input: psmouse - ensure that focaltech reports consistent
|
|
coordinates
|
|
Origin: https://git.kernel.org/linus/679d83ea9390636ded518f533af0cefbade317c7
|
|
|
|
We don't know whether x_max or y_max really hold the maximum possible
|
|
coordinates, and we don't know for sure whether we correctly interpret the
|
|
coordinates sent by the touchpad, so we clamp the reported values to
|
|
prevent confusion in userspace code.
|
|
|
|
Signed-off-by: Mathias Gottschlag <mgottschlag@gmail.com>
|
|
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
|
---
|
|
drivers/input/mouse/focaltech.c | 12 ++++++++++--
|
|
1 file changed, 10 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/drivers/input/mouse/focaltech.c b/drivers/input/mouse/focaltech.c
|
|
index e8fafe8..c66e0e0 100644
|
|
--- a/drivers/input/mouse/focaltech.c
|
|
+++ b/drivers/input/mouse/focaltech.c
|
|
@@ -126,9 +126,17 @@ static void focaltech_report_state(struct psmouse *psmouse)
|
|
input_mt_slot(dev, i);
|
|
input_mt_report_slot_state(dev, MT_TOOL_FINGER, active);
|
|
if (active) {
|
|
- input_report_abs(dev, ABS_MT_POSITION_X, finger->x);
|
|
+ unsigned int clamped_x, clamped_y;
|
|
+ /*
|
|
+ * The touchpad might report invalid data, so we clamp
|
|
+ * the resulting values so that we do not confuse
|
|
+ * userspace.
|
|
+ */
|
|
+ clamped_x = clamp(finger->x, 0U, priv->x_max);
|
|
+ clamped_y = clamp(finger->y, 0U, priv->y_max);
|
|
+ input_report_abs(dev, ABS_MT_POSITION_X, clamped_x);
|
|
input_report_abs(dev, ABS_MT_POSITION_Y,
|
|
- priv->y_max - finger->y);
|
|
+ priv->y_max - clamped_y);
|
|
}
|
|
}
|
|
input_mt_report_pointer_emulation(dev, true);
|