unsigned int active;
        int reg, ret;
 
+       ret = pm_runtime_get_sync(dev);
+       if (ret < 0) {
+               dev_err(dev, "Failed to resume: %d\n", ret);
+               return IRQ_NONE;
+       }
+
        ret = regmap_read(wm8962->regmap, WM8962_INTERRUPT_STATUS_2_MASK,
                          &mask);
        if (ret != 0) {
+               pm_runtime_put(dev);
                dev_err(dev, "Failed to read interrupt mask: %d\n",
                        ret);
                return IRQ_NONE;
 
        ret = regmap_read(wm8962->regmap, WM8962_INTERRUPT_STATUS_2, &active);
        if (ret != 0) {
+               pm_runtime_put(dev);
                dev_err(dev, "Failed to read interrupt: %d\n", ret);
                return IRQ_NONE;
        }
 
        active &= ~mask;
 
-       if (!active)
+       if (!active) {
+               pm_runtime_put(dev);
                return IRQ_NONE;
+       }
 
        /* Acknowledge the interrupts */
        ret = regmap_write(wm8962->regmap, WM8962_INTERRUPT_STATUS_2, active);
                                   msecs_to_jiffies(250));
        }
 
+       pm_runtime_put(dev);
+
        return IRQ_HANDLED;
 }