Commit 48216fbdad6cc462b056ce1e876edcc664d32a8d

Authored by Henrik Rydberg
Committed by Jiri Kosina
1 parent 1d958c83c8

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: Henrik Rydberg <rydberg@euromail.se>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>

Showing 1 changed file with 6 additions and 4 deletions Side-by-side Diff

drivers/hid/hid-3m-pct.c
... ... @@ -166,16 +166,18 @@
166 166 if (f->touch) {
167 167 /* this finger is on the screen */
168 168 int wide = (f->w > f->h);
  169 + /* divided by two to match visual scale of touch */
  170 + int major = max(f->w, f->h) >> 1;
  171 + int minor = min(f->w, f->h) >> 1;
  172 +
169 173 if (!f->prev_touch)
170 174 f->id = md->id++;
171 175 input_event(input, EV_ABS, ABS_MT_TRACKING_ID, f->id);
172 176 input_event(input, EV_ABS, ABS_MT_POSITION_X, f->x);
173 177 input_event(input, EV_ABS, ABS_MT_POSITION_Y, f->y);
174 178 input_event(input, EV_ABS, ABS_MT_ORIENTATION, wide);
175   - input_event(input, EV_ABS, ABS_MT_TOUCH_MAJOR,
176   - wide ? f->w : f->h);
177   - input_event(input, EV_ABS, ABS_MT_TOUCH_MINOR,
178   - wide ? f->h : f->w);
  179 + input_event(input, EV_ABS, ABS_MT_TOUCH_MAJOR, major);
  180 + input_event(input, EV_ABS, ABS_MT_TOUCH_MINOR, minor);
179 181 /* touchscreen emulation: pick the oldest contact */
180 182 if (!oldest || ((f->id - oldest->id) & (SHRT_MAX + 1)))
181 183 oldest = f;