@@ -152,9 +152,12 @@ static void s3c24xx_ts_schedule_read(void)
*/
static irqreturn_t s3c24xx_ts_stylus_irq(int irq, void *dev_id)
{
- if (s3c24xx_ts_check_pen_down())
+ if (s3c24xx_ts_check_pen_down()) {
+ /* Reset WAIT4INT state */
+ writel(0, ts.io + S3C2410_ADCTSC);
+
s3c24xx_ts_schedule_read();
- else
+ } else
dev_info(ts.dev, "%s: count=%d\n", __func__, ts.count);
return IRQ_HANDLED;
@@ -211,14 +214,25 @@ static void s3c24xx_ts_select(struct s3c_adc_client *client, unsigned select)
/*
* Conversion is complete, we have desired number of samples.
*/
+
+ /*
+ * We need to be in WAIT4INT mode to successfully check for
+ * pen state.
+ */
+ writel(WAIT4INT | INT_UP, ts.io + S3C2410_ADCTSC);
+
pen_is_down = s3c24xx_ts_check_pen_down();
s3c24xx_ts_report_state(pen_is_down);
- if (pen_is_down)
+ if (pen_is_down) {
+ /* Reset WAIT4INT state */
+ writel(0, ts.io + S3C2410_ADCTSC);
+
s3c24xx_ts_schedule_read();
- else
+ } else {
writel(WAIT4INT | INT_DOWN, ts.io + S3C2410_ADCTSC);
+ }
}
}