dma_cap_zero(mask);
        dma_cap_set(info->cap, mask);
  
 -      chan = dma_request_channel(mask, pl330_filter, (void *)dma_ch);
 +      /*
 +       * If a dma channel property of a device node from device tree is
 +       * specified, use that as the fliter parameter.
 +       */
 +      filter_param = (dma_ch == DMACH_DT_PROP) ? (void *)info->dt_dmach_prop :
 +                              (void *)dma_ch;
 +      chan = dma_request_channel(mask, pl330_filter, filter_param);
  
-       if (info->direction == DMA_FROM_DEVICE) {
+       if (info->direction == DMA_DEV_TO_MEM) {
                memset(&slave_config, 0, sizeof(struct dma_slave_config));
                slave_config.direction = info->direction;
                slave_config.src_addr = info->fifo;
 
  {
        int ret;
  
 -      ret = clk_enable(mxs_dma->clk);
 +      ret = clk_prepare_enable(mxs_dma->clk);
        if (ret)
-               goto err_out;
+               return ret;
  
        ret = mxs_reset_block(mxs_dma->base);
        if (ret)
        writel(MXS_DMA_CHANNELS_MASK << MXS_DMA_CHANNELS,
                mxs_dma->base + HW_APBHX_CTRL1 + MXS_SET_ADDR);
  
-       clk_disable_unprepare(mxs_dma->clk);
- 
-       return 0;
- 
  err_out:
 -      clk_disable(mxs_dma->clk);
++      clk_disable_unprepare(mxs_dma->clk);
        return ret;
  }
  
 
        }
  
        switch (direction) {
-       case DMA_TO_DEVICE:
+       case DMA_MEM_TO_DEV:
                desc->rqcfg.src_inc = 1;
                desc->rqcfg.dst_inc = 0;
 +              desc->req.rqtype = MEMTODEV;
                src = dma_addr;
                dst = pch->fifo_addr;
                break;
-       case DMA_FROM_DEVICE:
+       case DMA_DEV_TO_MEM:
                desc->rqcfg.src_inc = 0;
                desc->rqcfg.dst_inc = 1;
 +              desc->req.rqtype = DEVTOMEM;
                src = pch->fifo_addr;
                dst = dma_addr;
                break;
                else
                        list_add_tail(&desc->node, &first->node);
  
-               if (direction == DMA_TO_DEVICE) {
+               if (direction == DMA_MEM_TO_DEV) {
                        desc->rqcfg.src_inc = 1;
                        desc->rqcfg.dst_inc = 0;
 +                      desc->req.rqtype = MEMTODEV;
                        fill_px(&desc->px,
                                addr, sg_dma_address(sg), sg_dma_len(sg));
                } else {