this should reduce unnecessary input events.
Signed-off-by: H. Nikolaus Schaller hns@goldelico.com --- drivers/input/touchscreen/tsc2007.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/drivers/input/touchscreen/tsc2007.c b/drivers/input/touchscreen/tsc2007.c index c1d9593..e9d5086 100644 --- a/drivers/input/touchscreen/tsc2007.c +++ b/drivers/input/touchscreen/tsc2007.c @@ -94,6 +94,7 @@ struct tsc2007 {
wait_queue_head_t wait; bool stopped; + bool pendown;
int (*get_pendown_state)(struct device *); void (*clear_penirq)(void); @@ -227,7 +228,11 @@ static irqreturn_t tsc2007_soft_irq(int irq, void *handle) sx, sy, rt);
/* report event */ - input_report_key(input, BTN_TOUCH, 1); + if (!ts->pendown) { + input_report_key(input, BTN_TOUCH, 1); + ts->pendown = true; + } + touchscreen_report_pos(ts->input, &ts->prop, (unsigned int) sx, (unsigned int) sy, @@ -250,9 +255,13 @@ static irqreturn_t tsc2007_soft_irq(int irq, void *handle)
dev_dbg(&ts->client->dev, "UP\n");
- input_report_key(input, BTN_TOUCH, 0); - input_report_abs(input, ABS_PRESSURE, 0); - input_sync(input); + if (ts->pendown) { + input_report_key(input, BTN_TOUCH, 0); + input_report_abs(input, ABS_PRESSURE, 0); + input_sync(input); + + ts->pendown = false; + }
if (ts->clear_penirq) ts->clear_penirq();