|
@@ -818,8 +818,12 @@ static void sdhci_set_transfer_mode(struct sdhci_host *host,
|
|
|
WARN_ON(!host->data);
|
|
|
|
|
|
mode = SDHCI_TRNS_BLK_CNT_EN;
|
|
|
- if (data->blocks > 1)
|
|
|
- mode |= SDHCI_TRNS_MULTI;
|
|
|
+ if (data->blocks > 1) {
|
|
|
+ if (host->quirks & SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12)
|
|
|
+ mode |= SDHCI_TRNS_MULTI | SDHCI_TRNS_ACMD12;
|
|
|
+ else
|
|
|
+ mode |= SDHCI_TRNS_MULTI;
|
|
|
+ }
|
|
|
if (data->flags & MMC_DATA_READ)
|
|
|
mode |= SDHCI_TRNS_READ;
|
|
|
if (host->flags & SDHCI_REQ_USE_DMA)
|
|
@@ -1109,6 +1113,12 @@ static void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq)
|
|
|
#ifndef SDHCI_USE_LEDS_CLASS
|
|
|
sdhci_activate_led(host);
|
|
|
#endif
|
|
|
+ if (host->quirks & SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12) {
|
|
|
+ if (mrq->stop) {
|
|
|
+ mrq->data->stop = NULL;
|
|
|
+ mrq->stop = NULL;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
host->mrq = mrq;
|
|
|
|