Thread (12 messages) 12 messages, 2 authors, 2014-05-05

Re: [PATCH v3 2/7] Input: pixcir_i2c_ts: Initialize interrupt mode and power mode

From: Roger Quadros <hidden>
Date: 2014-05-05 08:43:07
Also in: linux-devicetree, lkml

Hi Dmitry,

On 04/30/2014 07:29 PM, Dmitry Torokhov wrote:
Hi Roger,

On Wed, Apr 30, 2014 at 03:36:27PM +0300, Roger Quadros wrote:
quoted
+static int pixcir_stop(struct pixcir_i2c_ts_data *ts)
+{
+	struct device *dev = &ts->client->dev;
+	int ret;
+
+	/* exit ISR if running, no more report parsing */
+	ts->exiting = true;
+	mb();	/* update status before we synchronize irq */
+
+	/* disable ISR from running again */
+	disable_irq(ts->client->irq);
+
+	/* wait till running ISR complete */
+	synchronize_irq(ts->client->irq);
+
+	/* disable interrupt generation */
+	ret = pixcir_int_enable(ts, 0);
+	if (ret)
+		dev_err(dev, "Failed to disable interrupt generation\n");
+
+	/* restore IRQ */
+	enable_irq(ts->client->irq);
+
+	return ret;
Should not this be:

	pixcir_int_enable(ts, 0);
	ts->exiting = true;
	mb();
	synchronize_irq(ts->client->irq);

Why do we also need to disable/enable irq?
Yes, you are right. It seems the problem with v2 was that order of mb() and synchronize_irq() were
reversed and thus causing the suspend/resume problem. I tried with your suggestion and it works.
I'll send a revised series.
By the way, disable_irq() implies synchronize_irq().
OK.

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