struct sdhci_pci_fixes {
        unsigned int            quirks;
+       bool                    allow_runtime_pm;
 
        int                     (*probe) (struct sdhci_pci_chip *);
 
        struct pci_dev          *pdev;
 
        unsigned int            quirks;
+       bool                    allow_runtime_pm;
        const struct sdhci_pci_fixes *fixes;
 
        int                     num_slots;      /* Slots on controller */
 
 static const struct sdhci_pci_fixes sdhci_intel_mfd_sd = {
        .quirks         = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
+       .allow_runtime_pm = true,
        .probe_slot     = mfd_sd_probe_slot,
        .remove_slot    = mfd_sd_remove_slot,
 };
 
 static const struct sdhci_pci_fixes sdhci_intel_mfd_sdio = {
        .quirks         = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
+       .allow_runtime_pm = true,
 };
 
 static const struct sdhci_pci_fixes sdhci_intel_mfd_emmc = {
        .quirks         = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
+       .allow_runtime_pm = true,
        .probe_slot     = mfd_emmc_probe_slot,
        .remove_slot    = mfd_emmc_remove_slot,
 };
 
        chip->pdev = pdev;
        chip->fixes = (const struct sdhci_pci_fixes *)ent->driver_data;
-       if (chip->fixes)
+       if (chip->fixes) {
                chip->quirks = chip->fixes->quirks;
+               chip->allow_runtime_pm = chip->fixes->allow_runtime_pm;
+       }
        chip->num_slots = slots;
 
        pci_set_drvdata(pdev, chip);
                chip->slots[i] = slot;
        }
 
-       sdhci_pci_runtime_pm_allow(&pdev->dev);
+       if (chip->allow_runtime_pm)
+               sdhci_pci_runtime_pm_allow(&pdev->dev);
 
        return 0;
 
        int i;
        struct sdhci_pci_chip *chip;
 
-       sdhci_pci_runtime_pm_forbid(&pdev->dev);
-
        chip = pci_get_drvdata(pdev);
 
        if (chip) {
+               if (chip->allow_runtime_pm)
+                       sdhci_pci_runtime_pm_forbid(&pdev->dev);
+
                for (i = 0; i < chip->num_slots; i++)
                        sdhci_pci_remove_slot(chip->slots[i]);