diff mbox series

Input: ili210x: Allow IRQ to share GPIO

Message ID 20240228114142.43803-1-aford173@gmail.com (mailing list archive)
State New
Headers show
Series Input: ili210x: Allow IRQ to share GPIO | expand

Commit Message

Adam Ford Feb. 28, 2024, 11:41 a.m. UTC
The IRQ registration currently assumes that the GPIO is
dedicated to it, but that may not necessarily be the case.
If the board has another device sharing the IRQ, it won't be
registered and the touch detect fails.

Signed-off-by: Adam Ford <aford173@gmail.com>

Comments

Dmitry Torokhov March 5, 2024, 5:28 p.m. UTC | #1
Hi Adam,

On Wed, Feb 28, 2024 at 05:41:42AM -0600, Adam Ford wrote:
> The IRQ registration currently assumes that the GPIO is
> dedicated to it, but that may not necessarily be the case.
> If the board has another device sharing the IRQ, it won't be
> registered and the touch detect fails.

I do not believe the driver is prepared to handle shared interrupts.
First of all, it disables interrupts in the firmware update path, which
will interfere with operation of other device using the same line.

You also need to make sure the driver properly recognizes condition when
interrupt is raised by another device and Ilitek controller does not
have any data to transfer/return. In this case we need to make sure we
do not log any errors, not release any active contacts, etc.

Thanks.
diff mbox series

Patch

diff --git a/drivers/input/touchscreen/ili210x.c b/drivers/input/touchscreen/ili210x.c
index 31ffdc2a93f3..ebad20f451bd 100644
--- a/drivers/input/touchscreen/ili210x.c
+++ b/drivers/input/touchscreen/ili210x.c
@@ -1003,7 +1003,7 @@  static int ili210x_i2c_probe(struct i2c_client *client)
 	}
 
 	error = devm_request_threaded_irq(dev, client->irq, NULL, ili210x_irq,
-					  IRQF_ONESHOT, client->name, priv);
+					  IRQF_ONESHOT | IRQF_SHARED, client->name, priv);
 	if (error) {
 		dev_err(dev, "Unable to request touchscreen IRQ, err: %d\n",
 			error);