1 // SPDX-License-Identifier: GPL-2.0
2 // Copyright (C) 2013,2019 Intel Corporation
4 #include <linux/acpi.h>
5 #include <linux/acpi_dma.h>
9 static bool dw_dma_acpi_filter(struct dma_chan
*chan
, void *param
)
11 struct acpi_dma_spec
*dma_spec
= param
;
12 struct dw_dma_slave slave
= {
13 .dma_dev
= dma_spec
->dev
,
14 .src_id
= dma_spec
->slave_id
,
15 .dst_id
= dma_spec
->slave_id
,
20 return dw_dma_filter(chan
, &slave
);
23 void dw_dma_acpi_controller_register(struct dw_dma
*dw
)
25 struct device
*dev
= dw
->dma
.dev
;
26 struct acpi_dma_filter_info
*info
;
29 if (!has_acpi_companion(dev
))
32 info
= devm_kzalloc(dev
, sizeof(*info
), GFP_KERNEL
);
36 dma_cap_zero(info
->dma_cap
);
37 dma_cap_set(DMA_SLAVE
, info
->dma_cap
);
38 info
->filter_fn
= dw_dma_acpi_filter
;
40 ret
= acpi_dma_controller_register(dev
, acpi_dma_simple_xlate
, info
);
42 dev_err(dev
, "could not register acpi_dma_controller\n");
44 EXPORT_SYMBOL_GPL(dw_dma_acpi_controller_register
);
46 void dw_dma_acpi_controller_free(struct dw_dma
*dw
)
48 struct device
*dev
= dw
->dma
.dev
;
50 if (!has_acpi_companion(dev
))
53 acpi_dma_controller_free(dev
);
55 EXPORT_SYMBOL_GPL(dw_dma_acpi_controller_free
);