aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManuel Lauss <manuel.lauss@googlemail.com>2012-03-29 13:05:04 -0400
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)
561 561
562static const struct sdhci_pci_fixes sdhci_o2 = { 562static const struct sdhci_pci_fixes sdhci_o2 = {
563 .probe = o2_probe, 563 .probe = o2_probe,
564 .quirks2 = SDHCI_QUIRK2_BROKEN_MSI,
564}; 565};
565 566
566static const struct sdhci_pci_fixes sdhci_jmicron = { 567static const struct sdhci_pci_fixes sdhci_jmicron = {
@@ -1418,7 +1419,8 @@ static int __devinit sdhci_pci_probe(struct pci_dev *pdev,
1418 1419
1419 slots = chip->num_slots; /* Quirk may have changed this */ 1420 slots = chip->num_slots; /* Quirk may have changed this */
1420 1421
1421 pci_enable_msi(pdev); 1422 if (!(chip->quirks2 & SDHCI_QUIRK2_BROKEN_MSI))
1423 pci_enable_msi(pdev);
1422 1424
1423 for (i = 0; i < slots; i++) { 1425 for (i = 0; i < slots; i++) {
1424 slot = sdhci_pci_probe_slot(pdev, chip, first_bar, i); 1426 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 {
91 unsigned int quirks2; /* More deviations from spec. */ 91 unsigned int quirks2; /* More deviations from spec. */
92 92
93#define SDHCI_QUIRK2_HOST_OFF_CARD_ON (1<<0) 93#define SDHCI_QUIRK2_HOST_OFF_CARD_ON (1<<0)
94/* broken MSI Interrupts */
95#define SDHCI_QUIRK2_BROKEN_MSI (1<<1)
94 96
95 int irq; /* Device IRQ */ 97 int irq; /* Device IRQ */
96 void __iomem *ioaddr; /* Mapped address */ 98 void __iomem *ioaddr; /* Mapped address */