Make dwmci_send_cmd() easier to read by moving the DMA transfer handling
code into a dedicated function.

No functional change.

Signed-off-by: Sam Protsenko <semen.protse...@linaro.org>
Reviewed-by: Quentin Schulz <quentin.sch...@cherry.de>
---
Changes in v4:
  - (none)

Changes in v3:
  - (none)

Changes in v2:
  - Added R-b tag from Quentin

 drivers/mmc/dw_mmc.c | 51 ++++++++++++++++++++++++++------------------
 1 file changed, 30 insertions(+), 21 deletions(-)

diff --git a/drivers/mmc/dw_mmc.c b/drivers/mmc/dw_mmc.c
index b99f63a6f8bd..8fc26399034b 100644
--- a/drivers/mmc/dw_mmc.c
+++ b/drivers/mmc/dw_mmc.c
@@ -232,6 +232,33 @@ static int dwmci_data_transfer(struct dwmci_host *host, 
struct mmc_data *data)
        return ret;
 }
 
+static int dwmci_dma_transfer(struct dwmci_host *host, uint flags,
+                             struct bounce_buffer *bbstate)
+{
+       int ret;
+       u32 mask, ctrl;
+
+       if (flags == MMC_DATA_READ)
+               mask = DWMCI_IDINTEN_RI;
+       else
+               mask = DWMCI_IDINTEN_TI;
+
+       ret = wait_for_bit_le32(host->ioaddr + DWMCI_IDSTS,
+                               mask, true, 1000, false);
+       if (ret)
+               debug("%s: DWMCI_IDINTEN mask 0x%x timeout\n", __func__, mask);
+
+       /* Clear interrupts */
+       dwmci_writel(host, DWMCI_IDSTS, DWMCI_IDINTEN_MASK);
+
+       ctrl = dwmci_readl(host, DWMCI_CTRL);
+       ctrl &= ~DWMCI_DMA_EN;
+       dwmci_writel(host, DWMCI_CTRL, ctrl);
+
+       bounce_buffer_stop(bbstate);
+       return ret;
+}
+
 static int dwmci_set_transfer_mode(struct dwmci_host *host,
                struct mmc_data *data)
 {
@@ -274,7 +301,7 @@ static int dwmci_send_cmd(struct mmc *mmc, struct mmc_cmd 
*cmd,
                                 data ? DIV_ROUND_UP(data->blocks, 8) : 0);
        int ret = 0, flags = 0, i;
        u32 retry = 100000;
-       u32 mask, ctrl;
+       u32 mask;
        struct bounce_buffer bbstate;
 
        dwmci_wait_while_busy(host, cmd);
@@ -382,26 +409,8 @@ static int dwmci_send_cmd(struct mmc *mmc, struct mmc_cmd 
*cmd,
 
        if (data) {
                ret = dwmci_data_transfer(host, data);
-
-               /* only dma mode need it */
-               if (!host->fifo_mode) {
-                       if (data->flags == MMC_DATA_READ)
-                               mask = DWMCI_IDINTEN_RI;
-                       else
-                               mask = DWMCI_IDINTEN_TI;
-                       ret = wait_for_bit_le32(host->ioaddr + DWMCI_IDSTS,
-                                               mask, true, 1000, false);
-                       if (ret)
-                               debug("%s: DWMCI_IDINTEN mask 0x%x timeout.\n",
-                                     __func__, mask);
-                       /* clear interrupts */
-                       dwmci_writel(host, DWMCI_IDSTS, DWMCI_IDINTEN_MASK);
-
-                       ctrl = dwmci_readl(host, DWMCI_CTRL);
-                       ctrl &= ~(DWMCI_DMA_EN);
-                       dwmci_writel(host, DWMCI_CTRL, ctrl);
-                       bounce_buffer_stop(&bbstate);
-               }
+               if (!host->fifo_mode)
+                       ret = dwmci_dma_transfer(host, data->flags, &bbstate);
        }
 
        udelay(100);
-- 
2.39.2

Reply via email to