aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/mouse/focaltech.c
diff options
context:
space:
mode:
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 e8fafe8785a7..c66e0e04bb7e 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)
126 input_mt_slot(dev, i); 126 input_mt_slot(dev, i);
127 input_mt_report_slot_state(dev, MT_TOOL_FINGER, active); 127 input_mt_report_slot_state(dev, MT_TOOL_FINGER, active);
128 if (active) { 128 if (active) {
129 input_report_abs(dev, ABS_MT_POSITION_X, finger->x); 129 unsigned int clamped_x, clamped_y;
130 /*
131 * The touchpad might report invalid data, so we clamp
132 * the resulting values so that we do not confuse
133 * userspace.
134 */
135 clamped_x = clamp(finger->x, 0U, priv->x_max);
136 clamped_y = clamp(finger->y, 0U, priv->y_max);
137 input_report_abs(dev, ABS_MT_POSITION_X, clamped_x);
130 input_report_abs(dev, ABS_MT_POSITION_Y, 138 input_report_abs(dev, ABS_MT_POSITION_Y,
131 priv->y_max - finger->y); 139 priv->y_max - clamped_y);
132 } 140 }
133 } 141 }
134 input_mt_report_pointer_emulation(dev, true); 142 input_mt_report_pointer_emulation(dev, true);