Commit 679d83ea authored by Mathias Gottschlag's avatar Mathias Gottschlag Committed by Dmitry Torokhov

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: default avatarMathias Gottschlag <mgottschlag@gmail.com>
Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent 3e984525
...@@ -126,9 +126,17 @@ static void focaltech_report_state(struct psmouse *psmouse) ...@@ -126,9 +126,17 @@ static void focaltech_report_state(struct psmouse *psmouse)
input_mt_slot(dev, i); input_mt_slot(dev, i);
input_mt_report_slot_state(dev, MT_TOOL_FINGER, active); input_mt_report_slot_state(dev, MT_TOOL_FINGER, active);
if (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, 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); input_mt_report_pointer_emulation(dev, true);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment