diff options
author | Adrian Hunter <adrian.hunter@intel.com> | 2018-01-09 02:52:22 -0500 |
---|---|---|
committer | Ulf Hansson <ulf.hansson@linaro.org> | 2018-01-17 06:30:43 -0500 |
commit | 81b14543ac81d529d6c07ce3be0cdfc9fe417389 (patch) | |
tree | 3457a9c680b6efb139ad13f9054c1a435537518b | |
parent | 58e79b60751d1ea6d13e09c6095f5e4cd5e040ee (diff) |
mmc: sdhci: Rework sdhci_enable_irq_wakeups()
In preparation for adding more conditions for whether IRQ wakeup is
enabled, rework sdhci_enable_irq_wakeups() so that needed bits are added
instead of adding them all and then removing the unneeded bits.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
-rw-r--r-- | drivers/mmc/host/sdhci.c | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index cc9776d9e8f4..070aff9c108f 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c | |||
@@ -2830,20 +2830,25 @@ static irqreturn_t sdhci_thread_irq(int irq, void *dev_id) | |||
2830 | */ | 2830 | */ |
2831 | static bool sdhci_enable_irq_wakeups(struct sdhci_host *host) | 2831 | static bool sdhci_enable_irq_wakeups(struct sdhci_host *host) |
2832 | { | 2832 | { |
2833 | u8 mask = SDHCI_WAKE_ON_INSERT | SDHCI_WAKE_ON_REMOVE | | ||
2834 | SDHCI_WAKE_ON_INT; | ||
2835 | u32 irq_val = 0; | ||
2836 | u8 wake_val = 0; | ||
2833 | u8 val; | 2837 | u8 val; |
2834 | u8 mask = SDHCI_WAKE_ON_INSERT | SDHCI_WAKE_ON_REMOVE | ||
2835 | | SDHCI_WAKE_ON_INT; | ||
2836 | u32 irq_val = SDHCI_INT_CARD_INSERT | SDHCI_INT_CARD_REMOVE | | ||
2837 | SDHCI_INT_CARD_INT; | ||
2838 | 2838 | ||
2839 | val = sdhci_readb(host, SDHCI_WAKE_UP_CONTROL); | 2839 | if (!(host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION)) { |
2840 | val |= mask ; | 2840 | wake_val |= SDHCI_WAKE_ON_INSERT | SDHCI_WAKE_ON_REMOVE; |
2841 | /* Avoid fake wake up */ | 2841 | irq_val |= SDHCI_INT_CARD_INSERT | SDHCI_INT_CARD_REMOVE; |
2842 | if (host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION) { | ||
2843 | val &= ~(SDHCI_WAKE_ON_INSERT | SDHCI_WAKE_ON_REMOVE); | ||
2844 | irq_val &= ~(SDHCI_INT_CARD_INSERT | SDHCI_INT_CARD_REMOVE); | ||
2845 | } | 2842 | } |
2843 | |||
2844 | wake_val |= SDHCI_WAKE_ON_INT; | ||
2845 | irq_val |= SDHCI_INT_CARD_INT; | ||
2846 | |||
2847 | val = sdhci_readb(host, SDHCI_WAKE_UP_CONTROL); | ||
2848 | val &= ~mask; | ||
2849 | val |= wake_val; | ||
2846 | sdhci_writeb(host, val, SDHCI_WAKE_UP_CONTROL); | 2850 | sdhci_writeb(host, val, SDHCI_WAKE_UP_CONTROL); |
2851 | |||
2847 | sdhci_writel(host, irq_val, SDHCI_INT_ENABLE); | 2852 | sdhci_writel(host, irq_val, SDHCI_INT_ENABLE); |
2848 | 2853 | ||
2849 | host->irq_wake_enabled = !enable_irq_wake(host->irq); | 2854 | host->irq_wake_enabled = !enable_irq_wake(host->irq); |