Hi Tony, I think your runtime_resume is missing runtime_pm_get/put_sync, see below: On Fri, Jan 20, 2017 at 02:04:39PM -0800, Tony Lindgren wrote: > [...] > +static irqreturn_t bq24190_irq_handler_thread(int irq, void *data) > +{ > + struct bq24190_dev_info *bdi = data; > + > + bdi->irq_event = true; > + pm_runtime_get_sync(bdi->dev); > + bq24190_check_status(bdi); > + pm_runtime_put_sync(bdi->dev); bq24190_check_status is called with runtime_pm enabled. > + bdi->irq_event = false; > > return IRQ_HANDLED; > } > > [...] > > +static int bq24190_runtime_resume(struct device *dev) > +{ > + struct i2c_client *client = to_i2c_client(dev); > + struct bq24190_dev_info *bdi = i2c_get_clientdata(client); > + > + if (!bdi->initialized) > + return 0; > + > + if (!bdi->irq_event) { > + dev_dbg(bdi->dev, "checking events on possible wakeirq\n"); > + bq24190_check_status(bdi); bq24190_check_status is called without runtime_pm enabled. > + } > + > + return 0; > +} > > [...] -- Sebastian