Input: s3c24xx_ts - report touch only when stylus is down
authorVasily Khoruzhick <anarsoul@gmail.com>
Sat, 20 Feb 2010 09:06:20 +0000 (01:06 -0800)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Sat, 20 Feb 2010 09:22:36 +0000 (01:22 -0800)
Currently driver reports touches when it gets (1 << ts.shift) samples,
even if stylus is up, which is incorrect. We should only report coordinates
and touch condition when stylus is down.

Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
drivers/input/touchscreen/s3c2410_ts.c

index ffc355e696dcad69f816dcad2ab4223998f102df..3755a47d053caea796fd4650c18889e0f7ea4fa4 100644 (file)
@@ -128,27 +128,29 @@ static void touch_timer_fire(unsigned long data)
 
        down = get_down(data0, data1);
 
-       if (ts.count == (1 << ts.shift)) {
-               ts.xp >>= ts.shift;
-               ts.yp >>= ts.shift;
+       if (down) {
+               if (ts.count == (1 << ts.shift)) {
+                       ts.xp >>= ts.shift;
+                       ts.yp >>= ts.shift;
 
-               dev_dbg(ts.dev, "%s: X=%lu, Y=%lu, count=%d\n",
-                       __func__, ts.xp, ts.yp, ts.count);
+                       dev_dbg(ts.dev, "%s: X=%lu, Y=%lu, count=%d\n",
+                               __func__, ts.xp, ts.yp, ts.count);
 
-               input_report_abs(ts.input, ABS_X, ts.xp);
-               input_report_abs(ts.input, ABS_Y, ts.yp);
+                       input_report_abs(ts.input, ABS_X, ts.xp);
+                       input_report_abs(ts.input, ABS_Y, ts.yp);
 
-               input_report_key(ts.input, BTN_TOUCH, 1);
-               input_sync(ts.input);
+                       input_report_key(ts.input, BTN_TOUCH, 1);
+                       input_sync(ts.input);
 
-               ts.xp = 0;
-               ts.yp = 0;
-               ts.count = 0;
-       }
+                       ts.xp = 0;
+                       ts.yp = 0;
+                       ts.count = 0;
+               }
 
-       if (down) {
                s3c_adc_start(ts.client, 0, 1 << ts.shift);
        } else {
+               ts.xp = 0;
+               ts.yp = 0;
                ts.count = 0;
 
                input_report_key(ts.input, BTN_TOUCH, 0);