} else if (!of_property_read_u32_array(np, "data_width", arr, nr_masters)) {
#include <linux/module.h>
#include <linux/device.h>
#include <linux/pm_runtime.h>
#include <linux/platform_device.h>
#include <linux/dmaengine.h>
#include <linux/dma-mapping.h>
#include <linux/of_dma.h>
#include <linux/acpi_dma.h>
#define DRV_NAME "dw_dmac"
static struct dma_chan *dw_dma_of_xlate(struct of_phandle_args *dma_spec,
struct dw_dma *dw = ofdma->of_dma_data;
struct dw_dma_slave slave = {
if (dma_spec->args_count != 3)
slave.src_id = dma_spec->args[0];
slave.dst_id = dma_spec->args[0];
slave.m_master = dma_spec->args[1];
slave.p_master = dma_spec->args[2];
if (WARN_ON(slave.src_id >= DW_DMA_MAX_NR_REQUESTS ||
slave.dst_id >= DW_DMA_MAX_NR_REQUESTS ||
slave.m_master >= dw->pdata->nr_masters ||
slave.p_master >= dw->pdata->nr_masters))
dma_cap_set(DMA_SLAVE, cap);
return dma_request_channel(cap, dw_dma_filter, &slave);
static bool dw_dma_acpi_filter(struct dma_chan *chan, void *param)
struct acpi_dma_spec *dma_spec = param;
struct dw_dma_slave slave = {
.dma_dev = dma_spec->dev,