pm8xxx_config_irq(struct pm_irq_chip *chip, unsigned int bp, unsigned int cp)
 {
        int     rc;
+       unsigned long flags;
 
-       spin_lock(&chip->pm_irq_lock);
+       spin_lock_irqsave(&chip->pm_irq_lock, flags);
        rc = regmap_write(chip->regmap, SSBI_REG_ADDR_IRQ_BLK_SEL, bp);
        if (rc) {
                pr_err("Failed Selecting Block %d rc=%d\n", bp, rc);
        if (rc)
                pr_err("Failed Configuring IRQ rc=%d\n", rc);
 bail:
-       spin_unlock(&chip->pm_irq_lock);
+       spin_unlock_irqrestore(&chip->pm_irq_lock, flags);
        return rc;
 }
 
        struct pm_irq_chip *chip = irq_data_get_irq_chip_data(d);
        unsigned int pmirq = irqd_to_hwirq(d);
        unsigned int bits;
+       unsigned long flags;
        int irq_bit;
        u8 block;
        int rc;
        block = pmirq / 8;
        irq_bit = pmirq % 8;
 
-       spin_lock(&chip->pm_irq_lock);
+       spin_lock_irqsave(&chip->pm_irq_lock, flags);
        rc = regmap_write(chip->regmap, SSBI_REG_ADDR_IRQ_BLK_SEL, block);
        if (rc) {
                pr_err("Failed Selecting Block %d rc=%d\n", block, rc);
 
        *state = !!(bits & BIT(irq_bit));
 bail:
-       spin_unlock(&chip->pm_irq_lock);
+       spin_unlock_irqrestore(&chip->pm_irq_lock, flags);
 
        return rc;
 }