There are lots of lengthy if() statements located sporadically up and
down the driver. This simple macro should make many of them a little
simpler to decipher. The remainder have to stay in place, as they
detail slightly more specific settings.

Cc: Vinod Koul <vinod.k...@intel.com>
Cc: Dan Williams <d...@fb.com>
Cc: Per Forlin <per.for...@stericsson.com>
Cc: Rabin Vincent <ra...@rab.in>
Signed-off-by: Lee Jones <lee.jo...@linaro.org>
---
 drivers/dma/ste_dma40.c |   38 ++++++++++++++++++++------------------
 1 file changed, 20 insertions(+), 18 deletions(-)

diff --git a/drivers/dma/ste_dma40.c b/drivers/dma/ste_dma40.c
index e50354d..b21a8a3 100644
--- a/drivers/dma/ste_dma40.c
+++ b/drivers/dma/ste_dma40.c
@@ -55,6 +55,10 @@
 
 #define MAX(a, b) (((a) < (b)) ? (b) : (a))
 
+#define D40_IS_SRC(dir)  ((dir == STEDMA40_PERIPH_TO_MEM) ? true : false)
+#define D40_IS_DST(dir) (((dir == STEDMA40_MEM_TO_PERIPH) || \
+                         (dir == STEDMA40_MEM_TO_MEM)) ? true : false)
+
 /* Reserved event lines for memcpy only. */
 static int dma40_memcpy_channels[] = { 56, 57, 58, 59, 60 };
 
@@ -823,7 +827,7 @@ static void d40_log_lli_to_lcxa(struct d40_chan *chan, 
struct d40_desc *desc)
                 * that uses linked lists.
                 */
                if (!(chan->phy_chan->use_soft_lli &&
-                       chan->dma_cfg.dir == STEDMA40_PERIPH_TO_MEM))
+                     D40_IS_SRC(chan->dma_cfg.dir)))
                        curr_lcla = d40_lcla_alloc_one(chan, desc);
 
                first_lcla = curr_lcla;
@@ -1291,12 +1295,12 @@ static void d40_config_set_event(struct d40_chan *d40c,
        u32 event = D40_TYPE_TO_EVENT(d40c->dma_cfg.dev_type);
 
        /* Enable event line connected to device (or memcpy) */
-       if ((d40c->dma_cfg.dir ==  STEDMA40_PERIPH_TO_MEM) ||
+       if (D40_IS_SRC(d40c->dma_cfg.dir) ||
            (d40c->dma_cfg.dir == STEDMA40_PERIPH_TO_PERIPH))
                __d40_config_set_event(d40c, event_type, event,
                                       D40_CHAN_REG_SSLNK);
 
-       if (d40c->dma_cfg.dir !=  STEDMA40_PERIPH_TO_MEM)
+       if (!D40_IS_SRC(d40c->dma_cfg.dir))
                __d40_config_set_event(d40c, event_type, event,
                                       D40_CHAN_REG_SDLNK);
 }
@@ -1762,7 +1766,7 @@ static int d40_validate_conf(struct d40_chan *d40c,
                res = -EINVAL;
        }
 
-       if (conf->dir == STEDMA40_PERIPH_TO_MEM &&
+       if (D40_IS_SRC(conf->dir) &&
            d40c->base->plat_data->dev_rx[conf->dev_type] == 0 &&
            d40c->runtime_addr == 0) {
                chan_err(d40c, "Invalid RX channel address (%d)\n",
@@ -1895,17 +1899,17 @@ static int d40_allocate_channel(struct d40_chan *d40c, 
bool *first_phy_user)
        int j;
        int log_num;
        int num_phy_chans;
+       int dir = d40c->dma_cfg.dir;
        bool is_src;
        bool is_log = d40c->dma_cfg.mode == STEDMA40_MODE_LOGICAL;
 
        phys = d40c->base->phy_res;
        num_phy_chans = d40c->base->num_phy_chans;
 
-       if (d40c->dma_cfg.dir == STEDMA40_PERIPH_TO_MEM) {
+       if (D40_IS_SRC(dir)) {
                log_num = 2 * dev_type;
                is_src = true;
-       } else if (d40c->dma_cfg.dir == STEDMA40_MEM_TO_PERIPH ||
-                  d40c->dma_cfg.dir == STEDMA40_MEM_TO_MEM) {
+       } else if (D40_IS_DST(dir)) {
                /* dst event lines are used for logical memcpy */
                log_num = 2 * dev_type + 1;
                is_src = false;
@@ -1916,7 +1920,7 @@ static int d40_allocate_channel(struct d40_chan *d40c, 
bool *first_phy_user)
        event_line = D40_TYPE_TO_EVENT(dev_type);
 
        if (!is_log) {
-               if (d40c->dma_cfg.dir == STEDMA40_MEM_TO_MEM) {
+               if (dir == STEDMA40_MEM_TO_MEM) {
                        /* Find physical half channel */
                        if (d40c->dma_cfg.use_fixed_channel) {
                                i = d40c->dma_cfg.phy_channel;
@@ -2053,11 +2057,10 @@ static int d40_free_dma(struct d40_chan *d40c)
                return -EINVAL;
        }
 
-       if (d40c->dma_cfg.dir == STEDMA40_MEM_TO_PERIPH ||
-           d40c->dma_cfg.dir == STEDMA40_MEM_TO_MEM)
-               is_src = false;
-       else if (d40c->dma_cfg.dir == STEDMA40_PERIPH_TO_MEM)
+       if (D40_IS_SRC(d40c->dma_cfg.dir))
                is_src = true;
+       else if (D40_IS_DST(d40c->dma_cfg.dir))
+               is_src = false;
        else {
                chan_err(d40c, "Unknown direction\n");
                return -EINVAL;
@@ -2118,12 +2121,11 @@ static bool d40_is_paused(struct d40_chan *d40c)
                goto _exit;
        }
 
-       if (d40c->dma_cfg.dir == STEDMA40_MEM_TO_PERIPH ||
-           d40c->dma_cfg.dir == STEDMA40_MEM_TO_MEM) {
-               status = readl(chanbase + D40_CHAN_REG_SDLNK);
-       } else if (d40c->dma_cfg.dir == STEDMA40_PERIPH_TO_MEM) {
+       if (D40_IS_SRC(d40c->dma_cfg.dir))
                status = readl(chanbase + D40_CHAN_REG_SSLNK);
-       } else {
+       else if (D40_IS_DST(d40c->dma_cfg.dir))
+               status = readl(chanbase + D40_CHAN_REG_SDLNK);
+       else {
                chan_err(d40c, "Unknown direction\n");
                goto _exit;
        }
@@ -2394,7 +2396,7 @@ static void d40_set_prio_realtime(struct d40_chan *d40c)
        if (d40c->base->rev < 3)
                return;
 
-       if ((d40c->dma_cfg.dir ==  STEDMA40_PERIPH_TO_MEM) ||
+       if (D40_IS_SRC(d40c->dma_cfg.dir) ||
            (d40c->dma_cfg.dir == STEDMA40_PERIPH_TO_PERIPH))
                __d40_set_prio_rt(d40c, d40c->dma_cfg.dev_type, true);
 
-- 
1.7.10.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to