|
@@ -145,6 +145,29 @@ static const struct sdhci_pci_fixes sdhci_cafe = {
|
|
|
SDHCI_QUIRK_BROKEN_TIMEOUT_VAL,
|
|
|
};
|
|
|
|
|
|
+/*
|
|
|
+ * ADMA operation is disabled for Moorestown platform due to
|
|
|
+ * hardware bugs.
|
|
|
+ */
|
|
|
+static int mrst_hc1_probe(struct sdhci_pci_chip *chip)
|
|
|
+{
|
|
|
+ /*
|
|
|
+ * slots number is fixed here for MRST as SDIO3 is never used and has
|
|
|
+ * hardware bugs.
|
|
|
+ */
|
|
|
+ chip->num_slots = 1;
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static const struct sdhci_pci_fixes sdhci_intel_mrst_hc0 = {
|
|
|
+ .quirks = SDHCI_QUIRK_BROKEN_ADMA | SDHCI_QUIRK_NO_HISPD_BIT,
|
|
|
+};
|
|
|
+
|
|
|
+static const struct sdhci_pci_fixes sdhci_intel_mrst_hc1 = {
|
|
|
+ .quirks = SDHCI_QUIRK_BROKEN_ADMA | SDHCI_QUIRK_NO_HISPD_BIT,
|
|
|
+ .probe = mrst_hc1_probe,
|
|
|
+};
|
|
|
+
|
|
|
static const struct sdhci_pci_fixes sdhci_intel_mfd_sd = {
|
|
|
.quirks = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
|
|
|
};
|
|
@@ -502,6 +525,22 @@ static const struct pci_device_id pci_ids[] __devinitdata = {
|
|
|
.driver_data = (kernel_ulong_t)&sdhci_via,
|
|
|
},
|
|
|
|
|
|
+ {
|
|
|
+ .vendor = PCI_VENDOR_ID_INTEL,
|
|
|
+ .device = PCI_DEVICE_ID_INTEL_MRST_SD0,
|
|
|
+ .subvendor = PCI_ANY_ID,
|
|
|
+ .subdevice = PCI_ANY_ID,
|
|
|
+ .driver_data = (kernel_ulong_t)&sdhci_intel_mrst_hc0,
|
|
|
+ },
|
|
|
+
|
|
|
+ {
|
|
|
+ .vendor = PCI_VENDOR_ID_INTEL,
|
|
|
+ .device = PCI_DEVICE_ID_INTEL_MRST_SD1,
|
|
|
+ .subvendor = PCI_ANY_ID,
|
|
|
+ .subdevice = PCI_ANY_ID,
|
|
|
+ .driver_data = (kernel_ulong_t)&sdhci_intel_mrst_hc1,
|
|
|
+ },
|
|
|
+
|
|
|
{
|
|
|
.vendor = PCI_VENDOR_ID_INTEL,
|
|
|
.device = PCI_DEVICE_ID_INTEL_MFD_SD,
|