Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -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);