diff options
Diffstat (limited to 'drivers/mmc/host/tmio_mmc_dma.c')
| -rw-r--r-- | drivers/mmc/host/tmio_mmc_dma.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/drivers/mmc/host/tmio_mmc_dma.c b/drivers/mmc/host/tmio_mmc_dma.c index d3de74ab633..25f1ad6cbe0 100644 --- a/drivers/mmc/host/tmio_mmc_dma.c +++ b/drivers/mmc/host/tmio_mmc_dma.c | |||
| @@ -256,7 +256,10 @@ static bool tmio_mmc_filter(struct dma_chan *chan, void *arg) | |||
| 256 | void tmio_mmc_request_dma(struct tmio_mmc_host *host, struct tmio_mmc_data *pdata) | 256 | void tmio_mmc_request_dma(struct tmio_mmc_host *host, struct tmio_mmc_data *pdata) |
| 257 | { | 257 | { |
| 258 | /* We can only either use DMA for both Tx and Rx or not use it at all */ | 258 | /* We can only either use DMA for both Tx and Rx or not use it at all */ |
| 259 | if (pdata->dma) { | 259 | if (!pdata->dma) |
| 260 | return; | ||
| 261 | |||
| 262 | if (!host->chan_tx && !host->chan_rx) { | ||
| 260 | dma_cap_mask_t mask; | 263 | dma_cap_mask_t mask; |
| 261 | 264 | ||
| 262 | dma_cap_zero(mask); | 265 | dma_cap_zero(mask); |
| @@ -284,18 +287,18 @@ void tmio_mmc_request_dma(struct tmio_mmc_host *host, struct tmio_mmc_data *pdat | |||
| 284 | 287 | ||
| 285 | tasklet_init(&host->dma_complete, tmio_mmc_tasklet_fn, (unsigned long)host); | 288 | tasklet_init(&host->dma_complete, tmio_mmc_tasklet_fn, (unsigned long)host); |
| 286 | tasklet_init(&host->dma_issue, tmio_mmc_issue_tasklet_fn, (unsigned long)host); | 289 | tasklet_init(&host->dma_issue, tmio_mmc_issue_tasklet_fn, (unsigned long)host); |
| 290 | } | ||
| 287 | 291 | ||
| 288 | tmio_mmc_enable_dma(host, true); | 292 | tmio_mmc_enable_dma(host, true); |
| 293 | |||
| 294 | return; | ||
| 289 | 295 | ||
| 290 | return; | ||
| 291 | ebouncebuf: | 296 | ebouncebuf: |
| 292 | dma_release_channel(host->chan_rx); | 297 | dma_release_channel(host->chan_rx); |
| 293 | host->chan_rx = NULL; | 298 | host->chan_rx = NULL; |
| 294 | ereqrx: | 299 | ereqrx: |
| 295 | dma_release_channel(host->chan_tx); | 300 | dma_release_channel(host->chan_tx); |
| 296 | host->chan_tx = NULL; | 301 | host->chan_tx = NULL; |
| 297 | return; | ||
| 298 | } | ||
| 299 | } | 302 | } |
| 300 | 303 | ||
| 301 | void tmio_mmc_release_dma(struct tmio_mmc_host *host) | 304 | void tmio_mmc_release_dma(struct tmio_mmc_host *host) |
