Message ID | 1431049991-30129-2-git-send-email-marex@denx.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 8 May 2015 at 07:23, Marek Vasut <marex@denx.de> wrote: > Wait a little bit longer, 50mS instead of 20mS, until the driver > starts polling for pen-up. The problematic behavior before this > patch is applied is as follows. The behavior was observed on the > STMPE610QTR controller. > > Upon a physical pen-down event, the touchscreen reports one set > of x-y-p coordinates and a pen-down event. After that, the pen-up > polling is triggered and since the controller is not ready yet, > the polling mistakenly detects a pen-up event while the physical > state is still such that the pen is down on the touch surface. > > The pen-up handling flushes the controller FIFO, so after that, > all the samples in the controller are discarded. The controller > becomes ready shortly after this bogus pen-up handling and does > generate again a pen-down interrupt. This time, the controller > contains x-y-p samples which all read as zero. Since pressure > value is zero, this set of samples is effectively ignored by > userland. > > In the end, the driver just bounces between pen-down and bogus > pen-up handling, generating no useful results. Fix this by giving > the controller a bit more time before polling it for pen-up. > > Signed-off-by: Marek Vasut <marex@denx.de> > Cc: Vipul Kumar Samar <vipulkumar.samar@st.com> > Cc: Viresh Kumar <viresh.kumar@linaro.org> > Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com> > --- > drivers/input/touchscreen/stmpe-ts.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org> -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/input/touchscreen/stmpe-ts.c b/drivers/input/touchscreen/stmpe-ts.c index 9e5c880..a8f5ea7 100644 --- a/drivers/input/touchscreen/stmpe-ts.c +++ b/drivers/input/touchscreen/stmpe-ts.c @@ -164,7 +164,7 @@ static irqreturn_t stmpe_ts_handler(int irq, void *data) STMPE_TSC_CTRL_TSC_EN, STMPE_TSC_CTRL_TSC_EN); /* start polling for touch_det to detect release */ - schedule_delayed_work(&ts->work, msecs_to_jiffies(20)); + schedule_delayed_work(&ts->work, msecs_to_jiffies(50)); return IRQ_HANDLED; }
Wait a little bit longer, 50mS instead of 20mS, until the driver starts polling for pen-up. The problematic behavior before this patch is applied is as follows. The behavior was observed on the STMPE610QTR controller. Upon a physical pen-down event, the touchscreen reports one set of x-y-p coordinates and a pen-down event. After that, the pen-up polling is triggered and since the controller is not ready yet, the polling mistakenly detects a pen-up event while the physical state is still such that the pen is down on the touch surface. The pen-up handling flushes the controller FIFO, so after that, all the samples in the controller are discarded. The controller becomes ready shortly after this bogus pen-up handling and does generate again a pen-down interrupt. This time, the controller contains x-y-p samples which all read as zero. Since pressure value is zero, this set of samples is effectively ignored by userland. In the end, the driver just bounces between pen-down and bogus pen-up handling, generating no useful results. Fix this by giving the controller a bit more time before polling it for pen-up. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Vipul Kumar Samar <vipulkumar.samar@st.com> Cc: Viresh Kumar <viresh.kumar@linaro.org> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com> --- drivers/input/touchscreen/stmpe-ts.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)