summaryrefslogtreecommitdiffstats
path: root/drivers/input/mouse/focaltech.c
diff options
context:
space:
mode:
authorMathias Gottschlag <mgottschlag@gmail.com>2015-03-07 13:27:08 -0800
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2015-03-07 13:40:20 -0800
commit679d83ea9390636ded518f533af0cefbade317c7 (patch)
tree2d0a85cfb4a397773f63f4b24d5052984c9c7b84 /drivers/input/mouse/focaltech.c
parent3e9845251926723319fb60c9e546fe42d3d11687 (diff)
downloadop-kernel-dev-679d83ea9390636ded518f533af0cefbade317c7.zip
op-kernel-dev-679d83ea9390636ded518f533af0cefbade317c7.tar.gz
Input: psmouse - ensure that focaltech reports consistent coordinates
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>
Diffstat (limited to 'drivers/input/mouse/focaltech.c')
-rw-r--r--drivers/input/mouse/focaltech.c12
1 files 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);
OpenPOWER on IntegriCloud