brintos

brintos / linux-shallow public Read only

0
0
Text · 1.2 KiB · c510c10 Raw
56 lines · c
1// SPDX-License-Identifier: GPL-2.02// Copyright (C) 2013,2019 Intel Corporation3 4#include <linux/acpi.h>5#include <linux/acpi_dma.h>6 7#include "internal.h"8 9static bool dw_dma_acpi_filter(struct dma_chan *chan, void *param)10{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,16		.m_master = 0,17		.p_master = 1,18	};19 20	return dw_dma_filter(chan, &slave);21}22 23void dw_dma_acpi_controller_register(struct dw_dma *dw)24{25	struct device *dev = dw->dma.dev;26	struct acpi_dma_filter_info *info;27	int ret;28 29	if (!has_acpi_companion(dev))30		return;31 32	info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL);33	if (!info)34		return;35 36	dma_cap_zero(info->dma_cap);37	dma_cap_set(DMA_SLAVE, info->dma_cap);38	info->filter_fn = dw_dma_acpi_filter;39 40	ret = acpi_dma_controller_register(dev, acpi_dma_simple_xlate, info);41	if (ret)42		dev_err(dev, "could not register acpi_dma_controller\n");43}44EXPORT_SYMBOL_GPL(dw_dma_acpi_controller_register);45 46void dw_dma_acpi_controller_free(struct dw_dma *dw)47{48	struct device *dev = dw->dma.dev;49 50	if (!has_acpi_companion(dev))51		return;52 53	acpi_dma_controller_free(dev);54}55EXPORT_SYMBOL_GPL(dw_dma_acpi_controller_free);56