On 29/4/2019 9:30 AM, Dmitry Torokhov wrote: > On Mon, Apr 29, 2019 at 08:30:37AM +0200, Daniel Mack wrote: >> Move the ISR handling code to its own function and change the logic to bail >> immediately in case of .running is false or if the attn_gpio is available >> but unasserted. >> >> This allows us to call the function at any time to check for the state of >> attn_gpio. >> >> Signed-off-by: Daniel Mack <daniel@xxxxxxxxxx> >> --- >> v3: break out at the end of the loop for setups with !eeti->attn_gpio >> >> drivers/input/touchscreen/eeti_ts.c | 33 ++++++++++++++++++++--------- >> 1 file changed, 23 insertions(+), 10 deletions(-) >> >> diff --git a/drivers/input/touchscreen/eeti_ts.c b/drivers/input/touchscreen/eeti_ts.c >> index 7fe41965c5d1..67c54413ad2b 100644 >> --- a/drivers/input/touchscreen/eeti_ts.c >> +++ b/drivers/input/touchscreen/eeti_ts.c >> @@ -75,14 +75,19 @@ static void eeti_ts_report_event(struct eeti_ts *eeti, u8 *buf) >> input_sync(eeti->input); >> } >> >> -static irqreturn_t eeti_ts_isr(int irq, void *dev_id) >> +static void eeti_ts_read(struct eeti_ts *eeti) >> { >> - struct eeti_ts *eeti = dev_id; >> - int len; >> - int error; >> + int len, error; >> char buf[6]; >> >> - do { >> + for (;;) { >> + if (!eeti->running) >> + break; >> + >> + if (eeti->attn_gpio && >> + gpiod_get_value_cansleep(eeti->attn_gpio) == 0) >> + break; >> + > > This became a bit messy IMO. Maybe we should define eeti_ts_read as only > the code below (up to while) and from resume do: You're right, that's cleaner. v4 coming up. Thanks again! Daniel