Skip to content

Commit

Permalink
Input: psmouse - ensure that focaltech reports consistent coordinates
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Mathias Gottschlag authored and Dmitry Torokhov committed Mar 7, 2015
1 parent 3e98452 commit 679d83e
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions drivers/input/mouse/focaltech.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 679d83e

Please sign in to comment.