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

Commit 48216fbd authored by Henrik Rydberg's avatar Henrik Rydberg Committed by Jiri Kosina
Browse files

HID: 3m: Adjust major / minor axes to scale



By visual inspection, the reported touch_major and touch_minor axes
are a factor of two too large. Presumably the device actually reports
the width_major and width_minor, which are generally about a factor of
two larger than the touches themselves.

Signed-off-by: default avatarHenrik Rydberg <rydberg@euromail.se>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent 1d958c83
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -166,16 +166,18 @@ static void mmm_filter_event(struct mmm_data *md, struct input_dev *input)
		if (f->touch) {
			/* this finger is on the screen */
			int wide = (f->w > f->h);
			/* divided by two to match visual scale of touch */
			int major = max(f->w, f->h) >> 1;
			int minor = min(f->w, f->h) >> 1;

			if (!f->prev_touch)
				f->id = md->id++;
			input_event(input, EV_ABS, ABS_MT_TRACKING_ID, f->id);
			input_event(input, EV_ABS, ABS_MT_POSITION_X, f->x);
			input_event(input, EV_ABS, ABS_MT_POSITION_Y, f->y);
			input_event(input, EV_ABS, ABS_MT_ORIENTATION, wide);
			input_event(input, EV_ABS, ABS_MT_TOUCH_MAJOR,
						wide ? f->w : f->h);
			input_event(input, EV_ABS, ABS_MT_TOUCH_MINOR,
						wide ? f->h : f->w);
			input_event(input, EV_ABS, ABS_MT_TOUCH_MAJOR, major);
			input_event(input, EV_ABS, ABS_MT_TOUCH_MINOR, minor);
			/* touchscreen emulation: pick the oldest contact */
			if (!oldest || ((f->id - oldest->id) & (SHRT_MAX + 1)))
				oldest = f;