summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/dev/sdhci/sdhci.c
diff options
context:
space:
mode:
Diffstat (limited to 'freebsd/sys/dev/sdhci/sdhci.c')
-rw-r--r--freebsd/sys/dev/sdhci/sdhci.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/freebsd/sys/dev/sdhci/sdhci.c b/freebsd/sys/dev/sdhci/sdhci.c
index 5d9cf26c..ed6010e8 100644
--- a/freebsd/sys/dev/sdhci/sdhci.c
+++ b/freebsd/sys/dev/sdhci/sdhci.c
@@ -904,8 +904,13 @@ sdhci_init_slot(device_t dev, struct sdhci_slot *slot, int num)
slot->host.host_ocr |= MMC_OCR_320_330 | MMC_OCR_330_340;
if (caps & SDHCI_CAN_VDD_300)
slot->host.host_ocr |= MMC_OCR_290_300 | MMC_OCR_300_310;
- /* 1.8V VDD is not supposed to be used for removable cards. */
- if ((caps & SDHCI_CAN_VDD_180) && (slot->opt & SDHCI_SLOT_EMBEDDED))
+ /*
+ * 1.8V VDD is not supposed to be used for removable cards. Hardware
+ * prior to v3.0 had no way to indicate embedded slots, but did
+ * sometimes support 1.8v for non-removable devices.
+ */
+ if ((caps & SDHCI_CAN_VDD_180) && (slot->version < SDHCI_SPEC_300 ||
+ (slot->opt & SDHCI_SLOT_EMBEDDED)))
slot->host.host_ocr |= MMC_OCR_LOW_VOLTAGE;
if (slot->host.host_ocr == 0) {
slot_printf(slot, "Hardware doesn't report any "