if (!inf->irq_disabled)
disable_irq_nosync(inf->i2c->irq);
inf->irq_disabled = true;
+ inf->stop_workqueue = true;
spin_unlock_irqrestore(&inf->time_stamp_lock, flags);
synchronize_irq(inf->i2c->irq);
if (inf->irq_disabled)
enable_irq(inf->i2c->irq);
inf->irq_disabled = false;
+ inf->stop_workqueue = false;
spin_unlock_irqrestore(&inf->time_stamp_lock, flags);
mutex_lock(&inf->mutex);
if (!inf->irq_disabled)
disable_irq_nosync(client->irq);
inf->irq_disabled = true;
+ inf->stop_workqueue = true;
spin_unlock_irqrestore(&inf->time_stamp_lock, flags);
synchronize_irq(inf->i2c->irq);
}
spin_lock_irqsave(&inf->time_stamp_lock, flags);
- if (inf->irq_disabled && !(inf->suspend || inf->shutdown)) {
+ if (inf->irq_disabled && !inf->stop_workqueue
+ && !(inf->suspend || inf->shutdown)) {
enable_irq(inf->i2c->irq);
inf->irq_disabled = false;
}