53 lines
1.9 KiB
Diff
53 lines
1.9 KiB
Diff
|
From 8c3b55a299c325830a987de21dab6a89ecb71164 Mon Sep 17 00:00:00 2001
|
||
|
From: Linus Walleij <linus.walleij@linaro.org>
|
||
|
Date: Tue, 1 Dec 2020 09:55:29 -0800
|
||
|
Subject: [PATCH] Input: atmel_mxt_ts - fix lost interrupts
|
||
|
MIME-Version: 1.0
|
||
|
Content-Type: text/plain; charset=UTF-8
|
||
|
Content-Transfer-Encoding: 8bit
|
||
|
|
||
|
After commit 74d905d2d38a devices requiring the workaround for edge
|
||
|
triggered interrupts stopped working.
|
||
|
|
||
|
The hardware needs the quirk to be used before even proceeding to
|
||
|
check if the quirk is needed because mxt_acquire_irq() is called
|
||
|
before mxt_check_retrigen() is called and at this point pending IRQs
|
||
|
need to be checked, and if the workaround is not active, all
|
||
|
interrupts will be lost from this point.
|
||
|
|
||
|
Solve this by switching the calls around.
|
||
|
|
||
|
Reported-by: Andre Müller <andre.muller@web.de>
|
||
|
Tested-by: Andre Müller <andre.muller@web.de>
|
||
|
Suggested-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||
|
Fixes: 74d905d2d38a ("Input: atmel_mxt_ts - only read messages in mxt_acquire_irq() when necessary")
|
||
|
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||
|
Cc: stable@vger.kernel.org
|
||
|
Link: https://lore.kernel.org/r/20201201123026.1416743-1-linus.walleij@linaro.org
|
||
|
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||
|
---
|
||
|
drivers/input/touchscreen/atmel_mxt_ts.c | 4 ++--
|
||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||
|
|
||
|
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
|
||
|
index 6b71b0aff115..99a33cd5e675 100644
|
||
|
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
|
||
|
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
|
||
|
@@ -2183,11 +2183,11 @@ static int mxt_initialize(struct mxt_data *data)
|
||
|
msleep(MXT_FW_RESET_TIME);
|
||
|
}
|
||
|
|
||
|
- error = mxt_acquire_irq(data);
|
||
|
+ error = mxt_check_retrigen(data);
|
||
|
if (error)
|
||
|
return error;
|
||
|
|
||
|
- error = mxt_check_retrigen(data);
|
||
|
+ error = mxt_acquire_irq(data);
|
||
|
if (error)
|
||
|
return error;
|
||
|
|
||
|
--
|
||
|
2.25.1
|
||
|
|