aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc/host
diff options
context:
space:
mode:
authorAlan Cox <alan@linux.intel.com>2010-10-04 10:25:11 -0400
committerChris Ball <cjb@laptop.org>2010-10-23 09:11:19 -0400
commitf9ee3eab528d2d21c33584bfb86ed1ebf317cb09 (patch)
tree5129fa9ae78ef266af6f5dfcabd4a7fc7e522613 /drivers/mmc/host
parent292290524e54724cab78e7e79a27a3b9a8b11483 (diff)
mmc: sdhci: Add Moorestown device support
This adds the basic identifiers. Due to the various chip quirks it's not enough to make MRST support very useful for earlier steppings but that can follow. (I'm currently trying to verify which steps actually matter outside Intel so I can avoid unneeded stuff going upstream) [Extracted from original development] Signed-off-by: JiebingLi <jiebing.li@intel.com> [Folds in fixes] Signed-off-by: Chuanxiao Dong <chuanxiao.dong@intel.com> Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Chris Ball <cjb@laptop.org>
Diffstat (limited to 'drivers/mmc/host')
-rw-r--r--drivers/mmc/host/sdhci-pci.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/drivers/mmc/host/sdhci-pci.c b/drivers/mmc/host/sdhci-pci.c
index ec4b81dd493f..55746bac2f44 100644
--- a/drivers/mmc/host/sdhci-pci.c
+++ b/drivers/mmc/host/sdhci-pci.c
@@ -145,6 +145,29 @@ static const struct sdhci_pci_fixes sdhci_cafe = {
145 SDHCI_QUIRK_BROKEN_TIMEOUT_VAL, 145 SDHCI_QUIRK_BROKEN_TIMEOUT_VAL,
146}; 146};
147 147
148/*
149 * ADMA operation is disabled for Moorestown platform due to
150 * hardware bugs.
151 */
152static int mrst_hc1_probe(struct sdhci_pci_chip *chip)
153{
154 /*
155 * slots number is fixed here for MRST as SDIO3 is never used and has
156 * hardware bugs.
157 */
158 chip->num_slots = 1;
159 return 0;
160}
161
162static const struct sdhci_pci_fixes sdhci_intel_mrst_hc0 = {
163 .quirks = SDHCI_QUIRK_BROKEN_ADMA | SDHCI_QUIRK_NO_HISPD_BIT,
164};
165
166static const struct sdhci_pci_fixes sdhci_intel_mrst_hc1 = {
167 .quirks = SDHCI_QUIRK_BROKEN_ADMA | SDHCI_QUIRK_NO_HISPD_BIT,
168 .probe = mrst_hc1_probe,
169};
170
148static const struct sdhci_pci_fixes sdhci_intel_mfd_sd = { 171static const struct sdhci_pci_fixes sdhci_intel_mfd_sd = {
149 .quirks = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC, 172 .quirks = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
150}; 173};
@@ -504,6 +527,22 @@ static const struct pci_device_id pci_ids[] __devinitdata = {
504 527
505 { 528 {
506 .vendor = PCI_VENDOR_ID_INTEL, 529 .vendor = PCI_VENDOR_ID_INTEL,
530 .device = PCI_DEVICE_ID_INTEL_MRST_SD0,
531 .subvendor = PCI_ANY_ID,
532 .subdevice = PCI_ANY_ID,
533 .driver_data = (kernel_ulong_t)&sdhci_intel_mrst_hc0,
534 },
535
536 {
537 .vendor = PCI_VENDOR_ID_INTEL,
538 .device = PCI_DEVICE_ID_INTEL_MRST_SD1,
539 .subvendor = PCI_ANY_ID,
540 .subdevice = PCI_ANY_ID,
541 .driver_data = (kernel_ulong_t)&sdhci_intel_mrst_hc1,
542 },
543
544 {
545 .vendor = PCI_VENDOR_ID_INTEL,
507 .device = PCI_DEVICE_ID_INTEL_MFD_SD, 546 .device = PCI_DEVICE_ID_INTEL_MFD_SD,
508 .subvendor = PCI_ANY_ID, 547 .subvendor = PCI_ANY_ID,
509 .subdevice = PCI_ANY_ID, 548 .subdevice = PCI_ANY_ID,