Input: da9034-ts - make pen {down,up} events more reliable
PEN_{UP/DOWN} events are expected to be available soon after stopping TSI auto measurement, but this is found not always be true. Work around this by adding delay and simulating such an event (according to pen down status bit). Signed-off-by: Bin Yang <bin.yang@marvell.com> Signed-off-by: Eric Miao <eric.miao@marvell.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
This commit is contained in:
parent
93ff27c66d
commit
7f6d5ff22b
@ -176,6 +176,16 @@ static void da9034_event_handler(struct da9034_touch *touch, int event)
|
||||
goto err_reset;
|
||||
|
||||
touch->state = STATE_STOP;
|
||||
|
||||
/* FIXME: PEN_{UP/DOWN} events are expected to be
|
||||
* available by stopping TSI, but this is found not
|
||||
* always true, delay and simulate such an event
|
||||
* here is more reliable
|
||||
*/
|
||||
mdelay(1);
|
||||
da9034_event_handler(touch,
|
||||
is_pen_down(touch) ? EVENT_PEN_DOWN :
|
||||
EVENT_PEN_UP);
|
||||
break;
|
||||
|
||||
case STATE_STOP:
|
||||
@ -190,8 +200,6 @@ static void da9034_event_handler(struct da9034_touch *touch, int event)
|
||||
report_pen_up(touch);
|
||||
touch->state = STATE_IDLE;
|
||||
}
|
||||
|
||||
input_sync(touch->input_dev);
|
||||
break;
|
||||
|
||||
case STATE_WAIT:
|
||||
@ -201,8 +209,10 @@ static void da9034_event_handler(struct da9034_touch *touch, int event)
|
||||
if (is_pen_down(touch)) {
|
||||
start_tsi(touch);
|
||||
touch->state = STATE_BUSY;
|
||||
} else
|
||||
} else {
|
||||
report_pen_up(touch);
|
||||
touch->state = STATE_IDLE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return;
|
||||
@ -227,16 +237,12 @@ static int da9034_touch_notifier(struct notifier_block *nb,
|
||||
struct da9034_touch *touch =
|
||||
container_of(nb, struct da9034_touch, notifier);
|
||||
|
||||
if (event & DA9034_EVENT_PEN_DOWN) {
|
||||
if (is_pen_down(touch))
|
||||
da9034_event_handler(touch, EVENT_PEN_DOWN);
|
||||
else
|
||||
da9034_event_handler(touch, EVENT_PEN_UP);
|
||||
}
|
||||
|
||||
if (event & DA9034_EVENT_TSI_READY)
|
||||
da9034_event_handler(touch, EVENT_TSI_READY);
|
||||
|
||||
if ((event & DA9034_EVENT_PEN_DOWN) && touch->state == STATE_IDLE)
|
||||
da9034_event_handler(touch, EVENT_PEN_DOWN);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user