mirror of
https://github.com/torvalds/linux.git
synced 2024-12-22 10:56:40 +00:00
mmc: tmio, renesas-sdhi: add dataend to DMA ops
Add dataend to DMA ops to allow DMAC implementation dependent handling of DMA data end. Also implement the operation for SDHI. Signed-off-by: Simon Horman <horms+renesas@verge.net.au> Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
parent
603aa14d3d
commit
92d0f925e6
@ -126,6 +126,11 @@ static void renesas_sdhi_sys_dmac_abort_dma(struct tmio_mmc_host *host)
|
||||
renesas_sdhi_sys_dmac_enable_dma(host, true);
|
||||
}
|
||||
|
||||
static void renesas_sdhi_sys_dmac_dataend_dma(struct tmio_mmc_host *host)
|
||||
{
|
||||
complete(&host->dma_dataend);
|
||||
}
|
||||
|
||||
static void renesas_sdhi_sys_dmac_dma_callback(void *arg)
|
||||
{
|
||||
struct tmio_mmc_host *host = arg;
|
||||
@ -451,6 +456,7 @@ static const struct tmio_mmc_dma_ops renesas_sdhi_sys_dmac_dma_ops = {
|
||||
.request = renesas_sdhi_sys_dmac_request_dma,
|
||||
.release = renesas_sdhi_sys_dmac_release_dma,
|
||||
.abort = renesas_sdhi_sys_dmac_abort_dma,
|
||||
.dataend = renesas_sdhi_sys_dmac_dataend_dma,
|
||||
};
|
||||
|
||||
static int renesas_sdhi_sys_dmac_probe(struct platform_device *pdev)
|
||||
|
@ -122,6 +122,7 @@ struct tmio_mmc_dma_ops {
|
||||
struct tmio_mmc_data *pdata);
|
||||
void (*release)(struct tmio_mmc_host *host);
|
||||
void (*abort)(struct tmio_mmc_host *host);
|
||||
void (*dataend)(struct tmio_mmc_host *host);
|
||||
};
|
||||
|
||||
struct tmio_mmc_host {
|
||||
|
@ -87,6 +87,12 @@ static inline void tmio_mmc_abort_dma(struct tmio_mmc_host *host)
|
||||
host->dma_ops->abort(host);
|
||||
}
|
||||
|
||||
static inline void tmio_mmc_dataend_dma(struct tmio_mmc_host *host)
|
||||
{
|
||||
if (host->dma_ops)
|
||||
host->dma_ops->dataend(host);
|
||||
}
|
||||
|
||||
void tmio_mmc_enable_mmc_irqs(struct tmio_mmc_host *host, u32 i)
|
||||
{
|
||||
host->sdcard_irq_mask &= ~(i & TMIO_MASK_IRQ);
|
||||
@ -605,11 +611,11 @@ static void tmio_mmc_data_irq(struct tmio_mmc_host *host, unsigned int stat)
|
||||
|
||||
if (done) {
|
||||
tmio_mmc_disable_mmc_irqs(host, TMIO_STAT_DATAEND);
|
||||
complete(&host->dma_dataend);
|
||||
tmio_mmc_dataend_dma(host);
|
||||
}
|
||||
} else if (host->chan_rx && (data->flags & MMC_DATA_READ) && !host->force_pio) {
|
||||
tmio_mmc_disable_mmc_irqs(host, TMIO_STAT_DATAEND);
|
||||
complete(&host->dma_dataend);
|
||||
tmio_mmc_dataend_dma(host);
|
||||
} else {
|
||||
tmio_mmc_do_data_irq(host);
|
||||
tmio_mmc_disable_mmc_irqs(host, TMIO_MASK_READOP | TMIO_MASK_WRITEOP);
|
||||
|
Loading…
Reference in New Issue
Block a user