|
@@ -38,10 +38,29 @@
|
|
|
static void sdhci_pci_hw_reset(struct sdhci_host *host);
|
|
|
|
|
|
#ifdef CONFIG_PM_SLEEP
|
|
|
-static int __sdhci_pci_suspend_host(struct sdhci_pci_chip *chip)
|
|
|
+static int sdhci_pci_init_wakeup(struct sdhci_pci_chip *chip)
|
|
|
+{
|
|
|
+ mmc_pm_flag_t pm_flags = 0;
|
|
|
+ int i;
|
|
|
+
|
|
|
+ for (i = 0; i < chip->num_slots; i++) {
|
|
|
+ struct sdhci_pci_slot *slot = chip->slots[i];
|
|
|
+
|
|
|
+ if (slot)
|
|
|
+ pm_flags |= slot->host->mmc->pm_flags;
|
|
|
+ }
|
|
|
+
|
|
|
+ return device_init_wakeup(&chip->pdev->dev,
|
|
|
+ (pm_flags & MMC_PM_KEEP_POWER) &&
|
|
|
+ (pm_flags & MMC_PM_WAKE_SDIO_IRQ));
|
|
|
+}
|
|
|
+
|
|
|
+static int sdhci_pci_suspend_host(struct sdhci_pci_chip *chip)
|
|
|
{
|
|
|
int i, ret;
|
|
|
|
|
|
+ sdhci_pci_init_wakeup(chip);
|
|
|
+
|
|
|
for (i = 0; i < chip->num_slots; i++) {
|
|
|
struct sdhci_pci_slot *slot = chip->slots[i];
|
|
|
struct sdhci_host *host;
|
|
@@ -57,9 +76,6 @@ static int __sdhci_pci_suspend_host(struct sdhci_pci_chip *chip)
|
|
|
ret = sdhci_suspend_host(host);
|
|
|
if (ret)
|
|
|
goto err_pci_suspend;
|
|
|
-
|
|
|
- if (host->mmc->pm_flags & MMC_PM_WAKE_SDIO_IRQ)
|
|
|
- sdhci_enable_irq_wakeups(host);
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
@@ -70,36 +86,6 @@ err_pci_suspend:
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-static int sdhci_pci_init_wakeup(struct sdhci_pci_chip *chip)
|
|
|
-{
|
|
|
- mmc_pm_flag_t pm_flags = 0;
|
|
|
- int i;
|
|
|
-
|
|
|
- for (i = 0; i < chip->num_slots; i++) {
|
|
|
- struct sdhci_pci_slot *slot = chip->slots[i];
|
|
|
-
|
|
|
- if (slot)
|
|
|
- pm_flags |= slot->host->mmc->pm_flags;
|
|
|
- }
|
|
|
-
|
|
|
- return device_init_wakeup(&chip->pdev->dev,
|
|
|
- (pm_flags & MMC_PM_KEEP_POWER) &&
|
|
|
- (pm_flags & MMC_PM_WAKE_SDIO_IRQ));
|
|
|
-}
|
|
|
-
|
|
|
-static int sdhci_pci_suspend_host(struct sdhci_pci_chip *chip)
|
|
|
-{
|
|
|
- int ret;
|
|
|
-
|
|
|
- ret = __sdhci_pci_suspend_host(chip);
|
|
|
- if (ret)
|
|
|
- return ret;
|
|
|
-
|
|
|
- sdhci_pci_init_wakeup(chip);
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
int sdhci_pci_resume_host(struct sdhci_pci_chip *chip)
|
|
|
{
|
|
|
struct sdhci_pci_slot *slot;
|
|
@@ -1109,7 +1095,7 @@ static int jmicron_suspend(struct sdhci_pci_chip *chip)
|
|
|
{
|
|
|
int i, ret;
|
|
|
|
|
|
- ret = __sdhci_pci_suspend_host(chip);
|
|
|
+ ret = sdhci_pci_suspend_host(chip);
|
|
|
if (ret)
|
|
|
return ret;
|
|
|
|
|
@@ -1119,8 +1105,6 @@ static int jmicron_suspend(struct sdhci_pci_chip *chip)
|
|
|
jmicron_enable_mmc(chip->slots[i]->host, 0);
|
|
|
}
|
|
|
|
|
|
- sdhci_pci_init_wakeup(chip);
|
|
|
-
|
|
|
return 0;
|
|
|
}
|
|
|
|