Commit 48216fbdad6cc462b056ce1e876edcc664d32a8d
Committed by
Jiri Kosina
1 parent
1d958c83c8
Exists in
master
and in
7 other branches
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; |