[PATCH] Input: tca8418 - Add support for shared interrupt

Subsystems: input (keyboard, mouse, joystick, touchscreen) drivers, the rest

STALE5030d

4 messages, 2 authors, 2012-11-08 · open the first message on its own page

[PATCH] Input: tca8418 - Add support for shared interrupt

From: Alban Bedel <hidden>
Date: 2012-11-05 16:14:14

Signed-off-by: Alban Bedel <redacted>
---
 drivers/input/keyboard/tca8418_keypad.c |   10 +++++++---
 1 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/drivers/input/keyboard/tca8418_keypad.c b/drivers/input/keyboard/tca8418_keypad.c
index fc9cc94..5adc655 100644
--- a/drivers/input/keyboard/tca8418_keypad.c
+++ b/drivers/input/keyboard/tca8418_keypad.c
@@ -225,16 +225,18 @@ static irqreturn_t tca8418_irq_handler(int irq, void *dev_id)
 	if (error) {
 		dev_err(&keypad_data->client->dev,
 			"unable to read REG_INT_STAT\n");
-		goto exit;
+		return IRQ_NONE;
 	}
 
+	if (!reg)
+		return IRQ_NONE;
+
 	if (reg & INT_STAT_OVR_FLOW_INT)
 		dev_warn(&keypad_data->client->dev, "overflow occurred\n");
 
 	if (reg & INT_STAT_K_INT)
 		tca8418_read_keypad(keypad_data);
 
-exit:
 	/* Clear all interrupts, even IRQs we didn't check (GPI, CAD, LCK) */
 	reg = 0xff;
 	error = tca8418_write_byte(keypad_data, REG_INT_STAT, reg);
@@ -377,7 +379,9 @@ static int __devinit tca8418_keypad_probe(struct i2c_client *client,
 		client->irq = gpio_to_irq(client->irq);
 
 	error = request_threaded_irq(client->irq, NULL, tca8418_irq_handler,
-				     IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
+				     IRQF_TRIGGER_FALLING |
+				     IRQF_SHARED |
+				     IRQF_ONESHOT,
 				     client->name, keypad_data);
 	if (error) {
 		dev_dbg(&client->dev,
-- 
1.7.0.4

Re: [PATCH] Input: tca8418 - Add support for shared interrupt

From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date: 2012-11-05 18:58:11

Hi Alban,

On Mon, Nov 05, 2012 at 05:14:12PM +0100, Alban Bedel wrote:
quoted hunk
Signed-off-by: Alban Bedel <redacted>
---
 drivers/input/keyboard/tca8418_keypad.c |   10 +++++++---
 1 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/drivers/input/keyboard/tca8418_keypad.c b/drivers/input/keyboard/tca8418_keypad.c
index fc9cc94..5adc655 100644
--- a/drivers/input/keyboard/tca8418_keypad.c
+++ b/drivers/input/keyboard/tca8418_keypad.c
@@ -225,16 +225,18 @@ static irqreturn_t tca8418_irq_handler(int irq, void *dev_id)
 	if (error) {
 		dev_err(&keypad_data->client->dev,
 			"unable to read REG_INT_STAT\n");
-		goto exit;
+		return IRQ_NONE;
 	}
 
+	if (!reg)
+		return IRQ_NONE;
+
 	if (reg & INT_STAT_OVR_FLOW_INT)
 		dev_warn(&keypad_data->client->dev, "overflow occurred\n");
 
 	if (reg & INT_STAT_K_INT)
 		tca8418_read_keypad(keypad_data);
 
-exit:
 	/* Clear all interrupts, even IRQs we didn't check (GPI, CAD, LCK) */
 	reg = 0xff;
 	error = tca8418_write_byte(keypad_data, REG_INT_STAT, reg);
@@ -377,7 +379,9 @@ static int __devinit tca8418_keypad_probe(struct i2c_client *client,
 		client->irq = gpio_to_irq(client->irq);
 
 	error = request_threaded_irq(client->irq, NULL, tca8418_irq_handler,
-				     IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
+				     IRQF_TRIGGER_FALLING |
+				     IRQF_SHARED |
+				     IRQF_ONESHOT,
 				     client->name, keypad_data);
I do not think that using ONESHOT IRQ handlers in shared interrupt
configuration is a good idea as that interrupt will stay masked until
the keypad is done processing it, which may take some time.

Thanks.

-- 
Dmitry

Re: [PATCH] Input: tca8418 - Add support for shared interrupt

From: Alban Bedel <hidden>
Date: 2012-11-06 16:34:34

On Mon, 5 Nov 2012 10:58:06 -0800
Dmitry Torokhov [off-list ref] wrote:
I do not think that using ONESHOT IRQ handlers in shared interrupt
configuration is a good idea as that interrupt will stay masked until
the keypad is done processing it, which may take some time.
I don't really see what the problem is, shared ONESHOT handlers are
supported by the IRQ framework. The IRQ line of this device is an open
drain and so can be shared, and is shared on the hardware I'm using!

I agree that the interrupt masking time might rise a little if many
devices share the same line, but that's the normal drawback of shared
interrupts.

Alban

Re: [PATCH] Input: tca8418 - Add support for shared interrupt

From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date: 2012-11-08 16:45:59

On Tue, Nov 06, 2012 at 05:34:30PM +0100, Alban Bedel wrote:
On Mon, 5 Nov 2012 10:58:06 -0800
Dmitry Torokhov [off-list ref] wrote:
quoted
I do not think that using ONESHOT IRQ handlers in shared interrupt
configuration is a good idea as that interrupt will stay masked until
the keypad is done processing it, which may take some time.
I don't really see what the problem is, shared ONESHOT handlers are
supported by the IRQ framework. The IRQ line of this device is an open
drain and so can be shared, and is shared on the hardware I'm using!

I agree that the interrupt masking time might rise a little if many
devices share the same line, but that's the normal drawback of shared
interrupts.
OK, fair enough.

-- 
Dmitry
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help