#include "lpass.h"
 
 struct lpass_pcm_data {
-       int rdma_ch;
-       int wrdma_ch;
+       int dma_ch;
        int i2s_port;
 };
 
                        return ret;
        }
 
-       if (dir == SNDRV_PCM_STREAM_PLAYBACK)
-               data->rdma_ch = dma_ch;
-       else
-               data->wrdma_ch = dma_ch;
+       data->dma_ch = dma_ch;
 
        snd_soc_set_runtime_hwparams(substream, &lpass_platform_pcm_hardware);
 
                snd_soc_platform_get_drvdata(soc_runtime->platform);
        struct lpass_variant *v = drvdata->variant;
        struct lpass_pcm_data *data;
-       int dma_ch, dir = substream->stream;
 
        data = runtime->private_data;
        v = drvdata->variant;
-
-       if (dir == SNDRV_PCM_STREAM_PLAYBACK)
-               dma_ch = data->rdma_ch;
-       else
-               dma_ch = data->wrdma_ch;
-
-       drvdata->substream[dma_ch] = NULL;
-
+       drvdata->substream[data->dma_ch] = NULL;
        if (v->free_dma_channel)
-               v->free_dma_channel(drvdata, dma_ch);
+               v->free_dma_channel(drvdata, data->dma_ch);
 
        return 0;
 }
        int bitwidth;
        int ret, dma_port = pcm_data->i2s_port + v->dmactl_audif_start;
 
-       if (dir ==  SNDRV_PCM_STREAM_PLAYBACK)
-               ch = pcm_data->rdma_ch;
-       else
-               ch = pcm_data->wrdma_ch;
+       ch = pcm_data->dma_ch;
 
        bitwidth = snd_pcm_format_width(format);
        if (bitwidth < 0) {
        unsigned int reg;
        int ret;
 
-       if (substream->stream ==  SNDRV_PCM_STREAM_PLAYBACK)
-               reg = LPAIF_RDMACTL_REG(v, pcm_data->rdma_ch);
-       else
-               reg = LPAIF_WRDMACTL_REG(v, pcm_data->wrdma_ch);
-
+       reg = LPAIF_DMACTL_REG(v, pcm_data->dma_ch, substream->stream);
        ret = regmap_write(drvdata->lpaif_map, reg, 0);
        if (ret)
                dev_err(soc_runtime->dev, "%s() error writing to rdmactl reg: %d\n",
        struct lpass_variant *v = drvdata->variant;
        int ret, ch, dir = substream->stream;
 
-       if (dir ==  SNDRV_PCM_STREAM_PLAYBACK)
-               ch = pcm_data->rdma_ch;
-       else
-               ch = pcm_data->wrdma_ch;
+       ch = pcm_data->dma_ch;
 
        ret = regmap_write(drvdata->lpaif_map,
                        LPAIF_DMABASE_REG(v, ch, dir),
        struct lpass_variant *v = drvdata->variant;
        int ret, ch, dir = substream->stream;
 
-       if (dir == SNDRV_PCM_STREAM_PLAYBACK)
-               ch = pcm_data->rdma_ch;
-       else
-               ch = pcm_data->wrdma_ch;
+       ch = pcm_data->dma_ch;
 
        switch (cmd) {
        case SNDRV_PCM_TRIGGER_START:
        unsigned int base_addr, curr_addr;
        int ret, ch, dir = substream->stream;
 
-       if (dir == SNDRV_PCM_STREAM_PLAYBACK)
-               ch = pcm_data->rdma_ch;
-       else
-               ch = pcm_data->wrdma_ch;
+       ch = pcm_data->dma_ch;
 
        ret = regmap_read(drvdata->lpaif_map,
                        LPAIF_DMABASE_REG(v, ch, dir), &base_addr);