* [PATCH] tsc2007: ignore IRQ:s provoked when reading values
@ 2009-09-22 13:45 Richard Röjfors
0 siblings, 0 replies; only message in thread
From: Richard Röjfors @ 2009-09-22 13:45 UTC (permalink / raw)
To: linux-input; +Cc: Dmitry Torokhov, kwangwoo.lee, Thierry Reding, Trilok Soni
This patch ignores IRQ:s provoked when reading values from the controller,
when the get_pendown_state callback is not implement. If this interrupt
is not ignored the driver ends up polling the device, since
the driver provokes new interrupts while reading values.
Signed-off-by: Richard Röjfors <richard.rojfors@mocean-labs.com>
---
diff --git a/drivers/input/touchscreen/tsc2007.c b/drivers/input/touchscreen/tsc2007.c
index 4c51cb4..e594479 100644
--- a/drivers/input/touchscreen/tsc2007.c
+++ b/drivers/input/touchscreen/tsc2007.c
@@ -77,6 +77,7 @@ struct tsc2007 {
u16 x_plate_ohms;
bool pendown;
+ bool ignore_next_irq;
int irq;
int (*get_pendown_state)(void);
@@ -228,14 +229,35 @@ static void tsc2007_work(struct work_struct *work)
if (ts->pendown)
schedule_delayed_work(&ts->work,
msecs_to_jiffies(TS_POLL_PERIOD));
- else
+ else {
+ /* if we don't have the get pen down state callback we
+ * ignore the next IRQ because it is provoked when we checked
+ * the touch pressure.
+ * If the user really touches the screen we will get a new
+ * interrupt anyway so it is safe to ignore it
+ *
+ * This is basically implementing this part of the manual:
+ * "In both cases previously listed, it is recommended that
+ * whenever the host writes to the TSC2007, the master
+ * processor masks the interrupt associated to PENIRQ.
+ * This masking prevents false triggering of interrupts when
+ * the PENIRQ line is disabled in the cases previously listed."
+ */
+ if (!ts->get_pendown_state)
+ ts->ignore_next_irq = true;
enable_irq(ts->irq);
+ }
}
static irqreturn_t tsc2007_irq(int irq, void *handle)
{
struct tsc2007 *ts = handle;
+ if (ts->ignore_next_irq) {
+ ts->ignore_next_irq = false;
+ return IRQ_HANDLED;
+ }
+
if (!ts->get_pendown_state || likely(ts->get_pendown_state())) {
disable_irq_nosync(ts->irq);
schedule_delayed_work(&ts->work,
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2009-09-22 14:12 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-09-22 13:45 [PATCH] tsc2007: ignore IRQ:s provoked when reading values Richard Röjfors
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).