]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
HID: 3m: Adjust major / minor axes to scale
authorHenrik Rydberg <rydberg@euromail.se>
Wed, 22 Sep 2010 09:29:07 +0000 (11:29 +0200)
committerJiri Kosina <jkosina@suse.cz>
Wed, 22 Sep 2010 09:29:07 +0000 (11:29 +0200)
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>
drivers/hid/hid-3m-pct.c

index 39628e02a4288f290211ab8de753f8af0a67210e..02d8cd3b1b1b8aed47644f48b3830da657e4fbd7 100644 (file)
@@ -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;