From: Henrik Rydberg Date: Wed, 22 Sep 2010 09:29:07 +0000 (+0200) Subject: HID: 3m: Adjust major / minor axes to scale X-Git-Tag: v2.6.37-rc1~144^2~3^2 X-Git-Url: https://bbs.cooldavid.org/git/?a=commitdiff_plain;h=48216fbdad6cc462b056ce1e876edcc664d32a8d;p=net-next-2.6.git 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 Signed-off-by: Jiri Kosina --- diff --git a/drivers/hid/hid-3m-pct.c b/drivers/hid/hid-3m-pct.c index 39628e02a42..02d8cd3b1b1 100644 --- a/drivers/hid/hid-3m-pct.c +++ b/drivers/hid/hid-3m-pct.c @@ -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;