* sdhci_disable_irq_wakeups() since it will be set by
  * sdhci_enable_card_detection() or sdhci_init().
  */
-static void sdhci_enable_irq_wakeups(struct sdhci_host *host)
+static bool sdhci_enable_irq_wakeups(struct sdhci_host *host)
 {
        u8 val;
        u8 mask = SDHCI_WAKE_ON_INSERT | SDHCI_WAKE_ON_REMOVE
        }
        sdhci_writeb(host, val, SDHCI_WAKE_UP_CONTROL);
        sdhci_writel(host, irq_val, SDHCI_INT_ENABLE);
+
+       host->irq_wake_enabled = !enable_irq_wake(host->irq);
+
+       return host->irq_wake_enabled;
 }
 
 static void sdhci_disable_irq_wakeups(struct sdhci_host *host)
        val = sdhci_readb(host, SDHCI_WAKE_UP_CONTROL);
        val &= ~mask;
        sdhci_writeb(host, val, SDHCI_WAKE_UP_CONTROL);
+
+       disable_irq_wake(host->irq);
+
+       host->irq_wake_enabled = false;
 }
 
 int sdhci_suspend_host(struct sdhci_host *host)
 
        mmc_retune_timer_stop(host->mmc);
 
-       if (!device_may_wakeup(mmc_dev(host->mmc))) {
+       if (!device_may_wakeup(mmc_dev(host->mmc)) ||
+           !sdhci_enable_irq_wakeups(host)) {
                host->ier = 0;
                sdhci_writel(host, 0, SDHCI_INT_ENABLE);
                sdhci_writel(host, 0, SDHCI_SIGNAL_ENABLE);
                free_irq(host->irq, host);
-       } else {
-               sdhci_enable_irq_wakeups(host);
-               enable_irq_wake(host->irq);
        }
+
        return 0;
 }
 
                mmiowb();
        }
 
-       if (!device_may_wakeup(mmc_dev(host->mmc))) {
+       if (host->irq_wake_enabled) {
+               sdhci_disable_irq_wakeups(host);
+       } else {
                ret = request_threaded_irq(host->irq, sdhci_irq,
                                           sdhci_thread_irq, IRQF_SHARED,
                                           mmc_hostname(host->mmc), host);
                if (ret)
                        return ret;
-       } else {
-               sdhci_disable_irq_wakeups(host);
-               disable_irq_wake(host->irq);
        }
 
        sdhci_enable_card_detection(host);