Commit 73a85069 authored by Stefan Wahren's avatar Stefan Wahren Committed by Ulf Hansson

mmc: mxs-mmc: Implement CMD23 support

This patch implements support for multiblock transfers bounded
by SET_BLOCK_COUNT (CMD23) on the MXS MMC host driver.
Signed-off-by: default avatarStefan Wahren <stefan.wahren@i2se.com>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent e81c022a
...@@ -153,7 +153,11 @@ static void mxs_mmc_request_done(struct mxs_mmc_host *host) ...@@ -153,7 +153,11 @@ static void mxs_mmc_request_done(struct mxs_mmc_host *host)
} }
} }
if (data) { if (cmd == mrq->sbc) {
/* Finished CMD23, now send actual command. */
mxs_mmc_start_cmd(host, mrq->cmd);
return;
} else if (data) {
dma_unmap_sg(mmc_dev(host->mmc), data->sg, dma_unmap_sg(mmc_dev(host->mmc), data->sg,
data->sg_len, ssp->dma_dir); data->sg_len, ssp->dma_dir);
/* /*
...@@ -166,7 +170,7 @@ static void mxs_mmc_request_done(struct mxs_mmc_host *host) ...@@ -166,7 +170,7 @@ static void mxs_mmc_request_done(struct mxs_mmc_host *host)
data->bytes_xfered = 0; data->bytes_xfered = 0;
host->data = NULL; host->data = NULL;
if (mrq->stop) { if (data->stop && (data->error || !mrq->sbc)) {
mxs_mmc_start_cmd(host, mrq->stop); mxs_mmc_start_cmd(host, mrq->stop);
return; return;
} }
...@@ -495,7 +499,11 @@ static void mxs_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq) ...@@ -495,7 +499,11 @@ static void mxs_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
WARN_ON(host->mrq != NULL); WARN_ON(host->mrq != NULL);
host->mrq = mrq; host->mrq = mrq;
mxs_mmc_start_cmd(host, mrq->cmd);
if (mrq->sbc)
mxs_mmc_start_cmd(host, mrq->sbc);
else
mxs_mmc_start_cmd(host, mrq->cmd);
} }
static void mxs_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) static void mxs_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
...@@ -642,7 +650,7 @@ static int mxs_mmc_probe(struct platform_device *pdev) ...@@ -642,7 +650,7 @@ static int mxs_mmc_probe(struct platform_device *pdev)
/* set mmc core parameters */ /* set mmc core parameters */
mmc->ops = &mxs_mmc_ops; mmc->ops = &mxs_mmc_ops;
mmc->caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED | mmc->caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED |
MMC_CAP_SDIO_IRQ | MMC_CAP_NEEDS_POLL; MMC_CAP_SDIO_IRQ | MMC_CAP_NEEDS_POLL | MMC_CAP_CMD23;
host->broken_cd = of_property_read_bool(np, "broken-cd"); host->broken_cd = of_property_read_bool(np, "broken-cd");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment