On Wed, Dec 18, 2013 at 02:51:14PM +0530, Roger Quadros wrote: > + > +static int pixcir_stop(struct pixcir_i2c_ts_data *ts) > +{ > + struct device *dev = &ts->client->dev; > + int ret; > + > + /* disable interrupt generation */ > + ret = pixcir_int_enable(ts, 0); > + if (ret) { > + dev_err(dev, "Failed to disable interrupt generation\n"); > + return ret; > + } > + > + disable_irq(ts->client->irq); Why do you need to disable IRQ? If you disable interrupt generation in the chip I think you only need to call synchronize_irq() to make sure it's completed if it happens to be running. Also you need to move the code: tsdata->exiting = true; mb(); here from pixcir_i2c_ts_remove() to make sure handler exits promptly. You will also need to reset tsdata->exiting in your start method. Thanks. -- Dmitry -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html