spin_lock(&host->lock);
  
 -      stat = readl(host->base + HW_SSP_CTRL1(host));
 +      stat = readl(ssp->base + HW_SSP_CTRL1(ssp));
        writel(stat & MXS_MMC_IRQ_BITS,
 -             host->base + HW_SSP_CTRL1(host) + STMP_OFFSET_REG_CLR);
 +             ssp->base + HW_SSP_CTRL1(ssp) + STMP_OFFSET_REG_CLR);
  
+       spin_unlock(&host->lock);
+ 
        if ((stat & BM_SSP_CTRL1_SDIO_IRQ) && (stat & BM_SSP_CTRL1_SDIO_IRQ_EN))
                mmc_signal_sdio_irq(host->mmc);
  
  
        if (enable) {
                writel(BM_SSP_CTRL0_SDIO_IRQ_CHECK,
 -                     host->base + HW_SSP_CTRL0 + STMP_OFFSET_REG_SET);
 +                     ssp->base + HW_SSP_CTRL0 + STMP_OFFSET_REG_SET);
                writel(BM_SSP_CTRL1_SDIO_IRQ_EN,
-                      ssp->base + HW_SSP_CTRL1(ssp) + STMP_OFFSET_REG_SET);
- 
-               if (readl(ssp->base + HW_SSP_STATUS(ssp)) &
-                               BM_SSP_STATUS_SDIO_IRQ)
-                       mmc_signal_sdio_irq(host->mmc);
- 
+                      host->base + HW_SSP_CTRL1(host) + STMP_OFFSET_REG_SET);
        } else {
                writel(BM_SSP_CTRL0_SDIO_IRQ_CHECK,
 -                     host->base + HW_SSP_CTRL0 + STMP_OFFSET_REG_CLR);
 +                     ssp->base + HW_SSP_CTRL0 + STMP_OFFSET_REG_CLR);
                writel(BM_SSP_CTRL1_SDIO_IRQ_EN,
 -                     host->base + HW_SSP_CTRL1(host) + STMP_OFFSET_REG_CLR);
 +                     ssp->base + HW_SSP_CTRL1(ssp) + STMP_OFFSET_REG_CLR);
        }
  
        spin_unlock_irqrestore(&host->lock, flags);
 -      if (enable && readl(host->base + HW_SSP_STATUS(host)) &
+ 
++      if (enable && readl(ssp->base + HW_SSP_STATUS(ssp)) &
+                       BM_SSP_STATUS_SDIO_IRQ)
+               mmc_signal_sdio_irq(host->mmc);
+ 
  }
  
  static const struct mmc_host_ops mxs_mmc_ops = {