mmc: sdhci: Do not unnecessarily enable wakeup for card detect interrupt
authorAdrian Hunter <adrian.hunter@intel.com>
Tue, 27 Feb 2018 12:51:23 +0000 (14:51 +0200)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 5 Mar 2018 12:04:31 +0000 (13:04 +0100)
Do not unnecessarily enable card detect wakeup in the cases that the card
is not removable or a GPIO is used for card detect.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/sdhci.c

index 2020e57..996845c 100644 (file)
@@ -2899,6 +2899,14 @@ static irqreturn_t sdhci_thread_irq(int irq, void *dev_id)
 \*****************************************************************************/
 
 #ifdef CONFIG_PM
+
+static bool sdhci_cd_irq_can_wakeup(struct sdhci_host *host)
+{
+       return mmc_card_is_removable(host->mmc) &&
+              !(host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION) &&
+              !mmc_can_gpio_cd(host->mmc);
+}
+
 /*
  * To enable wakeup events, the corresponding events have to be enabled in
  * the Interrupt Status Enable register too. See 'Table 1-6: Wakeup Signal
@@ -2915,7 +2923,7 @@ static bool sdhci_enable_irq_wakeups(struct sdhci_host *host)
        u8 wake_val = 0;
        u8 val;
 
-       if (!(host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION)) {
+       if (sdhci_cd_irq_can_wakeup(host)) {
                wake_val |= SDHCI_WAKE_ON_INSERT | SDHCI_WAKE_ON_REMOVE;
                irq_val |= SDHCI_INT_CARD_INSERT | SDHCI_INT_CARD_REMOVE;
        }