aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc/host/sdhci-pci.c
diff options
context:
space:
mode:
authorDaniel Drake <dsd@laptop.org>2010-11-04 18:20:39 -0400
committerChris Ball <cjb@laptop.org>2010-11-07 16:45:11 -0500
commit5f619704d18b93869d045abc49e09cdba109b04b (patch)
tree50d523926d50bac76448fea6ab25c1e118537e06 /drivers/mmc/host/sdhci-pci.c
parent14d4031d21d8a63ad84e5ab9198d0503efabc780 (diff)
mmc: sdhci: Properly enable SDIO IRQ wakeups
A little more work was needed for SDIO IRQ wakeups to be functional. Wake-on-WLAN on the SD WiFi adapter in the XO-1.5 laptop is now working. Signed-off-by: Daniel Drake <dsd@laptop.org> Signed-off-by: Chris Ball <cjb@laptop.org>
Diffstat (limited to 'drivers/mmc/host/sdhci-pci.c')
-rw-r--r--drivers/mmc/host/sdhci-pci.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/mmc/host/sdhci-pci.c b/drivers/mmc/host/sdhci-pci.c
index 55746bac2f44..d196e77a93dc 100644
--- a/drivers/mmc/host/sdhci-pci.c
+++ b/drivers/mmc/host/sdhci-pci.c
@@ -637,6 +637,7 @@ static int sdhci_pci_suspend (struct pci_dev *pdev, pm_message_t state)
637{ 637{
638 struct sdhci_pci_chip *chip; 638 struct sdhci_pci_chip *chip;
639 struct sdhci_pci_slot *slot; 639 struct sdhci_pci_slot *slot;
640 mmc_pm_flag_t slot_pm_flags;
640 mmc_pm_flag_t pm_flags = 0; 641 mmc_pm_flag_t pm_flags = 0;
641 int i, ret; 642 int i, ret;
642 643
@@ -657,7 +658,11 @@ static int sdhci_pci_suspend (struct pci_dev *pdev, pm_message_t state)
657 return ret; 658 return ret;
658 } 659 }
659 660
660 pm_flags |= slot->host->mmc->pm_flags; 661 slot_pm_flags = slot->host->mmc->pm_flags;
662 if (slot_pm_flags & MMC_PM_WAKE_SDIO_IRQ)
663 sdhci_enable_irq_wakeups(slot->host);
664
665 pm_flags |= slot_pm_flags;
661 } 666 }
662 667
663 if (chip->fixes && chip->fixes->suspend) { 668 if (chip->fixes && chip->fixes->suspend) {
@@ -671,8 +676,10 @@ static int sdhci_pci_suspend (struct pci_dev *pdev, pm_message_t state)
671 676
672 pci_save_state(pdev); 677 pci_save_state(pdev);
673 if (pm_flags & MMC_PM_KEEP_POWER) { 678 if (pm_flags & MMC_PM_KEEP_POWER) {
674 if (pm_flags & MMC_PM_WAKE_SDIO_IRQ) 679 if (pm_flags & MMC_PM_WAKE_SDIO_IRQ) {
680 pci_pme_active(pdev, true);
675 pci_enable_wake(pdev, PCI_D3hot, 1); 681 pci_enable_wake(pdev, PCI_D3hot, 1);
682 }
676 pci_set_power_state(pdev, PCI_D3hot); 683 pci_set_power_state(pdev, PCI_D3hot);
677 } else { 684 } else {
678 pci_enable_wake(pdev, pci_choose_state(pdev, state), 0); 685 pci_enable_wake(pdev, pci_choose_state(pdev, state), 0);