summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManuel Lauss <manuel.lauss@googlemail.com>2012-03-29 19:05:04 +0200
committerChris Ball <cjb@laptop.org>2012-04-05 20:32:25 -0400
commit210b7d28598e402548b0164ca2f543e15aab8c6e (patch)
treeacb826d909410f8a8946bf7cdd8ed5cfadf14497
parenteb91b9118db8c05a5a1257b594b021d32b491254 (diff)
mmc: sdhci-pci: add quirks for broken MSI on O2Micro controllers
MSI on my O2Micro OZ600 SD card reader is broken. This patch adds a quirk to disable MSI on these controllers. Signed-off-by: Manuel Lauss <manuel.lauss@googlemail.com> Signed-off-by: Chris Ball <cjb@laptop.org>
-rw-r--r--drivers/mmc/host/sdhci-pci.c4
-rw-r--r--include/linux/mmc/sdhci.h2
2 files changed, 5 insertions, 1 deletions
diff --git a/drivers/mmc/host/sdhci-pci.c b/drivers/mmc/host/sdhci-pci.c
index fbbebe251e01..9303f7fc1e68 100644
--- a/drivers/mmc/host/sdhci-pci.c
+++ b/drivers/mmc/host/sdhci-pci.c
@@ -561,6 +561,7 @@ static int jmicron_resume(struct sdhci_pci_chip *chip)
static const struct sdhci_pci_fixes sdhci_o2 = {
.probe = o2_probe,
+ .quirks2 = SDHCI_QUIRK2_BROKEN_MSI,
};
static const struct sdhci_pci_fixes sdhci_jmicron = {
@@ -1418,7 +1419,8 @@ static int __devinit sdhci_pci_probe(struct pci_dev *pdev,
slots = chip->num_slots; /* Quirk may have changed this */
- pci_enable_msi(pdev);
+ if (!(chip->quirks2 & SDHCI_QUIRK2_BROKEN_MSI))
+ pci_enable_msi(pdev);
for (i = 0; i < slots; i++) {
slot = sdhci_pci_probe_slot(pdev, chip, first_bar, i);
diff --git a/include/linux/mmc/sdhci.h b/include/linux/mmc/sdhci.h
index e9051e1cb1ce..9752fe434ae9 100644
--- a/include/linux/mmc/sdhci.h
+++ b/include/linux/mmc/sdhci.h
@@ -91,6 +91,8 @@ struct sdhci_host {
unsigned int quirks2; /* More deviations from spec. */
#define SDHCI_QUIRK2_HOST_OFF_CARD_ON (1<<0)
+/* broken MSI Interrupts */
+#define SDHCI_QUIRK2_BROKEN_MSI (1<<1)
int irq; /* Device IRQ */
void __iomem *ioaddr; /* Mapped address */