]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/mmc/host/sdhci.c
Merge remote-tracking branch 'mmc/mmc-next'
[karo-tx-linux.git] / drivers / mmc / host / sdhci.c
index bd8a0982aec33ec99b95b97fbcbdd65dee642770..ec3eb30845c76fb5295a5c2027319d289ce9dd1d 100644 (file)
@@ -898,8 +898,13 @@ static void sdhci_set_transfer_mode(struct sdhci_host *host,
        u16 mode;
        struct mmc_data *data = cmd->data;
 
-       if (data == NULL)
+       if (data == NULL) {
+               /* clear Auto CMD settings for no data CMDs */
+               mode = sdhci_readw(host, SDHCI_TRANSFER_MODE);
+               sdhci_writew(host, mode & ~(SDHCI_TRNS_AUTO_CMD12 |
+                               SDHCI_TRNS_AUTO_CMD23), SDHCI_TRANSFER_MODE);
                return;
+       }
 
        WARN_ON(!host->data);
 
@@ -1391,6 +1396,13 @@ static void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq)
                                        mmc->card->type == MMC_TYPE_MMC ?
                                        MMC_SEND_TUNING_BLOCK_HS200 :
                                        MMC_SEND_TUNING_BLOCK;
+
+                               /* Here we need to set the host->mrq to NULL,
+                                * in case the pending finish_tasklet
+                                * finishes it incorrectly.
+                                */
+                               host->mrq = NULL;
+
                                spin_unlock_irqrestore(&host->lock, flags);
                                sdhci_execute_tuning(mmc, tuning_opcode);
                                spin_lock_irqsave(&host->lock, flags);
@@ -3004,7 +3016,8 @@ int sdhci_add_host(struct sdhci_host *host)
                /* SD3.0: SDR104 is supported so (for eMMC) the caps2
                 * field can be promoted to support HS200.
                 */
-               mmc->caps2 |= MMC_CAP2_HS200;
+               if (!(host->quirks2 & SDHCI_QUIRK2_BROKEN_HS200))
+                       mmc->caps2 |= MMC_CAP2_HS200;
        } else if (caps[1] & SDHCI_SUPPORT_SDR50)
                mmc->caps |= MMC_CAP_UHS_SDR50;