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:
>> +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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to