mmc: atmel-mci: conform to DMA-API
Fixes the following: - It is perfectly legal for the dma_map_sg() to return fewer entries than were passed in. - Supply the returned numer of (possibly coalesced) entries to the device_pre_slave_sg() function. - Use the proper original sg_len when unmapping the sglist in the error path. Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com> Signed-off-by: Chris Ball <cjb@laptop.org>
This commit is contained in:
parent
266ac3f297
commit
88ce4db313
|
@ -687,10 +687,9 @@ atmci_prepare_data_dma(struct atmel_mci *host, struct mmc_data *data)
|
||||||
|
|
||||||
sglen = dma_map_sg(chan->device->dev, data->sg,
|
sglen = dma_map_sg(chan->device->dev, data->sg,
|
||||||
data->sg_len, direction);
|
data->sg_len, direction);
|
||||||
if (sglen != data->sg_len)
|
|
||||||
goto unmap_exit;
|
|
||||||
desc = chan->device->device_prep_slave_sg(chan,
|
desc = chan->device->device_prep_slave_sg(chan,
|
||||||
data->sg, data->sg_len, direction,
|
data->sg, sglen, direction,
|
||||||
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
|
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
|
||||||
if (!desc)
|
if (!desc)
|
||||||
goto unmap_exit;
|
goto unmap_exit;
|
||||||
|
@ -701,7 +700,7 @@ atmci_prepare_data_dma(struct atmel_mci *host, struct mmc_data *data)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
unmap_exit:
|
unmap_exit:
|
||||||
dma_unmap_sg(chan->device->dev, data->sg, sglen, direction);
|
dma_unmap_sg(chan->device->dev, data->sg, data->sg_len, direction);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue