|
@@ -878,7 +878,7 @@ mmc_omap_start_dma_transfer(struct mmc_omap_host *host, struct mmc_request *req)
|
|
|
struct mmc_data *data = req->data;
|
|
|
|
|
|
/* Sanity check: all the SG entries must be aligned by block size. */
|
|
|
- for (i = 0; i < host->dma_len; i++) {
|
|
|
+ for (i = 0; i < data->sg_len; i++) {
|
|
|
struct scatterlist *sgl;
|
|
|
|
|
|
sgl = data->sg + i;
|
|
@@ -1021,10 +1021,20 @@ static int omap_mmc_disable(struct mmc_host *mmc, int lazy)
|
|
|
static void omap_mmc_request(struct mmc_host *mmc, struct mmc_request *req)
|
|
|
{
|
|
|
struct mmc_omap_host *host = mmc_priv(mmc);
|
|
|
+ int err;
|
|
|
|
|
|
WARN_ON(host->mrq != NULL);
|
|
|
host->mrq = req;
|
|
|
- mmc_omap_prepare_data(host, req);
|
|
|
+ err = mmc_omap_prepare_data(host, req);
|
|
|
+ if (err) {
|
|
|
+ req->cmd->error = err;
|
|
|
+ if (req->data)
|
|
|
+ req->data->error = err;
|
|
|
+ host->mrq = NULL;
|
|
|
+ mmc_request_done(mmc, req);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
mmc_omap_start_command(host, req->cmd, req->data);
|
|
|
}
|
|
|
|