diff options
author | Seungwon Jeon <tgih.jun@samsung.com> | 2012-02-20 11:01:43 +0900 |
---|---|---|
committer | Chris Ball <cjb@laptop.org> | 2012-03-27 12:19:57 -0400 |
commit | 885c3e800cf99db3391247776bfa2d262b21a72b (patch) | |
tree | 665c1e316becaf5eadffec256b22e1908597a842 /drivers/mmc/host/dw_mmc.c | |
parent | 9beee912a3c6e017f03ccefd826b57a6a46c0e31 (diff) | |
download | linux-885c3e800cf99db3391247776bfa2d262b21a72b.tar.gz linux-885c3e800cf99db3391247776bfa2d262b21a72b.tar.bz2 linux-885c3e800cf99db3391247776bfa2d262b21a72b.zip |
mmc: dw_mmc: Regression fix for non-IDMAC DMA
3ec7699d3bb1b0ee7 ("mmc: dw_mmc: Add support for pre_req and post_req")
broke non-IDMAC DMA, because dw_mci_pre_dma_transfer() is valid only if
using internal DMA. In case of using other DMA it returns -ENOSYS. It
prevents the DMA operations. This patch makes dw_mci_pre_dma_transfer()
effective in all DMA cases again.
Reported-by: James Hogan <james@albanarts.com>
Signed-off-by: Seungwon Jeon <tgih.jun@samsung.com>
Reviewed-by: Namjae Jeon <linkinjeon@gmail.com>
Acked-by: James Hogan <james.hogan@imgtec.com>
Signed-off-by: Chris Ball <cjb@laptop.org>
Diffstat (limited to 'drivers/mmc/host/dw_mmc.c')
-rw-r--r-- | drivers/mmc/host/dw_mmc.c | 25 |
1 files changed, 9 insertions, 16 deletions
diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c index 692c3ba30335..bf3c9b456aaf 100644 --- a/drivers/mmc/host/dw_mmc.c +++ b/drivers/mmc/host/dw_mmc.c @@ -429,6 +429,15 @@ static int dw_mci_idmac_init(struct dw_mci *host) return 0; } +static struct dw_mci_dma_ops dw_mci_idmac_ops = { + .init = dw_mci_idmac_init, + .start = dw_mci_idmac_start_dma, + .stop = dw_mci_idmac_stop_dma, + .complete = dw_mci_idmac_complete_dma, + .cleanup = dw_mci_dma_cleanup, +}; +#endif /* CONFIG_MMC_DW_IDMAC */ + static int dw_mci_pre_dma_transfer(struct dw_mci *host, struct mmc_data *data, bool next) @@ -468,22 +477,6 @@ static int dw_mci_pre_dma_transfer(struct dw_mci *host, return sg_len; } -static struct dw_mci_dma_ops dw_mci_idmac_ops = { - .init = dw_mci_idmac_init, - .start = dw_mci_idmac_start_dma, - .stop = dw_mci_idmac_stop_dma, - .complete = dw_mci_idmac_complete_dma, - .cleanup = dw_mci_dma_cleanup, -}; -#else -static int dw_mci_pre_dma_transfer(struct dw_mci *host, - struct mmc_data *data, - bool next) -{ - return -ENOSYS; -} -#endif /* CONFIG_MMC_DW_IDMAC */ - static void dw_mci_pre_req(struct mmc_host *mmc, struct mmc_request *mrq, bool is_first_req) |