switch (ios->signal_voltage) {
        case MMC_SIGNAL_VOLTAGE_330:
+               if (!(host->flags & SDHCI_SIGNALING_330))
+                       return -EINVAL;
                /* Set 1.8V Signal Enable in the Host Control2 register to 0 */
                ctrl &= ~SDHCI_CTRL_VDD_180;
                sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2);
 
                return -EAGAIN;
        case MMC_SIGNAL_VOLTAGE_180:
+               if (!(host->flags & SDHCI_SIGNALING_180))
+                       return -EINVAL;
                if (!IS_ERR(mmc->supply.vqmmc)) {
                        ret = regulator_set_voltage(mmc->supply.vqmmc,
                                        1700000, 1950000);
 
                return -EAGAIN;
        case MMC_SIGNAL_VOLTAGE_120:
+               if (!(host->flags & SDHCI_SIGNALING_120))
+                       return -EINVAL;
                if (!IS_ERR(mmc->supply.vqmmc)) {
                        ret = regulator_set_voltage(mmc->supply.vqmmc, 1100000,
                                                    1300000);
        host->mmc_host_ops = sdhci_ops;
        mmc->ops = &host->mmc_host_ops;
 
+       host->flags = SDHCI_SIGNALING_330;
+
        return host;
 }
 
                goto unreg;
        }
 
+       if ((mmc->caps & (MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25 |
+                         MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR104 |
+                         MMC_CAP_UHS_DDR50 | MMC_CAP_1_8V_DDR)) ||
+           (mmc->caps2 & (MMC_CAP2_HS200_1_8V_SDR | MMC_CAP2_HS400_1_8V)))
+               host->flags |= SDHCI_SIGNALING_180;
+
+       if (mmc->caps2 & MMC_CAP2_HSX00_1_2V)
+               host->flags |= SDHCI_SIGNALING_120;
+
        spin_lock_init(&host->lock);
 
        /*
 
 #define SDHCI_SDIO_IRQ_ENABLED (1<<9)  /* SDIO irq enabled */
 #define SDHCI_USE_64_BIT_DMA   (1<<12) /* Use 64-bit DMA */
 #define SDHCI_HS400_TUNING     (1<<13) /* Tuning for HS400 */
+#define SDHCI_SIGNALING_330    (1<<14) /* Host is capable of 3.3V signaling */
+#define SDHCI_SIGNALING_180    (1<<15) /* Host is capable of 1.8V signaling */
+#define SDHCI_SIGNALING_120    (1<<16) /* Host is capable of 1.2V signaling */
 
        unsigned int version;   /* SDHCI spec. version */