case MMC_TIMING_SD_HS:
str = "sd high-speed";
break;
+ case MMC_TIMING_UHS_DDR50:
+ str = "UHS DDR50";
+ break;
default:
str = "invalid";
break;
gpio = mfd_emmc0_rst_gpio;
name = "eMMC0_reset";
sdhci_alloc_panic_host(slot->host);
+ slot->host->quirks2 |= SDHCI_QUIRK2_V2_0_SUPPORT_DDR50;
+ slot->host->mmc->caps |= MMC_CAP_1_8V_DDR;
break;
- case PCI_DEVICE_ID_INTEL_MFD_EMMC1:
case PCI_DEVICE_ID_INTEL_CLV_EMMC1:
gpio = mfd_emmc1_rst_gpio;
name = "eMMC1_reset";
+ slot->host->quirks2 |= SDHCI_QUIRK2_V2_0_SUPPORT_DDR50;
+ slot->host->mmc->caps |= MMC_CAP_1_8V_DDR;
+ break;
+ case PCI_DEVICE_ID_INTEL_MFD_EMMC1:
+ gpio = mfd_emmc1_rst_gpio;
+ name = "eMMC1_reset";
break;
}
else
ctrl &= ~SDHCI_CTRL_HISPD;
- if (host->version >= SDHCI_SPEC_300) {
+ if ((host->version >= SDHCI_SPEC_300) ||
+ (host->quirks2 & SDHCI_QUIRK2_V2_0_SUPPORT_DDR50)) {
u16 clk, ctrl_2;
unsigned int clock;
else if (caps[1] & SDHCI_SUPPORT_SDR50)
mmc->caps |= MMC_CAP_UHS_SDR50;
- if (caps[1] & SDHCI_SUPPORT_DDR50)
+ if ((caps[1] & SDHCI_SUPPORT_DDR50) ||
+ (host->quirks2 & SDHCI_QUIRK2_V2_0_SUPPORT_DDR50))
mmc->caps |= MMC_CAP_UHS_DDR50;
/* Does the host needs tuning for SDR50? */
#define SDHCI_QUIRK2_OWN_CARD_DETECTION (1<<0)
/* Host controller cannot keep power control value after power off */
#define SDHCI_QUIRK_CANNOT_KEEP_POWERCTL (1<<1)
+/* V2.0 host controller support DDR50 */
+#define SDHCI_QUIRK2_V2_0_SUPPORT_DDR50 (1<<2)
int irq; /* Device IRQ */