return host->caps &
                (MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25 |
                 MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR104 |
-                MMC_CAP_UHS_DDR50);
+                MMC_CAP_UHS_DDR50) &&
+              host->caps & MMC_CAP_4_BIT_DATA;
 }
 
 static inline bool mmc_card_hs200(struct mmc_card *card)
 
        int err;
        u8 *status;
 
-       if (!card->scr.sda_spec3)
-               return 0;
-
        if (!(card->csd.cmdclass & CCC_SWITCH))
                return 0;
 
                return -ENOMEM;
 
        /* Set 4-bit bus width */
-       if ((card->host->caps & MMC_CAP_4_BIT_DATA) &&
-           (card->scr.bus_widths & SD_SCR_BUS_WIDTH_4)) {
-               err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_4);
-               if (err)
-                       goto out;
+       err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_4);
+       if (err)
+               goto out;
 
-               mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4);
-       }
+       mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4);
 
        /*
         * Select the bus speed mode depending on host
        }
 
        /* Initialization sequence for UHS-I cards */
-       if (rocr & SD_ROCR_S18A) {
+       if (rocr & SD_ROCR_S18A && mmc_host_uhs(host)) {
                err = mmc_sd_init_uhs_card(card);
                if (err)
                        goto free_card;