summaryrefslogtreecommitdiffstats
path: root/drivers/mmc/host/dw_mmc.c
diff options
context:
space:
mode:
authorSeungwon Jeon <tgih.jun@samsung.com>2012-02-20 11:01:43 +0900
committerChris Ball <cjb@laptop.org>2012-03-27 12:19:57 -0400
commit885c3e800cf99db3391247776bfa2d262b21a72b (patch)
tree665c1e316becaf5eadffec256b22e1908597a842 /drivers/mmc/host/dw_mmc.c
parent9beee912a3c6e017f03ccefd826b57a6a46c0e31 (diff)
downloadlinux-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.c25
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)