dmaengine: dw: platform: Split ACPI helpers to separate module
For better maintenance split ACPI helpers to the separate module. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Link: https://lore.kernel.org/r/20190820131546.75744-10-andriy.shevchenko@linux.intel.com Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
		
							parent
							
								
									84da042e70
								
							
						
					
					
						commit
						b685fe26e9
					
				| @ -3,7 +3,8 @@ obj-$(CONFIG_DW_DMAC_CORE)	+= dw_dmac_core.o | ||||
| dw_dmac_core-objs	:= core.o dw.o idma32.o | ||||
| 
 | ||||
| obj-$(CONFIG_DW_DMAC)		+= dw_dmac.o | ||||
| dw_dmac-objs		:= platform.o | ||||
| dw_dmac-y			:= platform.o | ||||
| dw_dmac-$(CONFIG_ACPI)		+= acpi.o | ||||
| 
 | ||||
| obj-$(CONFIG_DW_DMAC_PCI)	+= dw_dmac_pci.o | ||||
| dw_dmac_pci-objs	:= pci.o | ||||
|  | ||||
							
								
								
									
										53
									
								
								drivers/dma/dw/acpi.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								drivers/dma/dw/acpi.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,53 @@ | ||||
| // SPDX-License-Identifier: GPL-2.0
 | ||||
| // Copyright (C) 2013,2019 Intel Corporation
 | ||||
| 
 | ||||
| #include <linux/acpi.h> | ||||
| #include <linux/acpi_dma.h> | ||||
| 
 | ||||
| #include "internal.h" | ||||
| 
 | ||||
| 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, | ||||
| 		.src_id = dma_spec->slave_id, | ||||
| 		.dst_id = dma_spec->slave_id, | ||||
| 		.m_master = 0, | ||||
| 		.p_master = 1, | ||||
| 	}; | ||||
| 
 | ||||
| 	return dw_dma_filter(chan, &slave); | ||||
| } | ||||
| 
 | ||||
| void dw_dma_acpi_controller_register(struct dw_dma *dw) | ||||
| { | ||||
| 	struct device *dev = dw->dma.dev; | ||||
| 	struct acpi_dma_filter_info *info; | ||||
| 	int ret; | ||||
| 
 | ||||
| 	if (!has_acpi_companion(dev)) | ||||
| 		return; | ||||
| 
 | ||||
| 	info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL); | ||||
| 	if (!info) | ||||
| 		return; | ||||
| 
 | ||||
| 	dma_cap_zero(info->dma_cap); | ||||
| 	dma_cap_set(DMA_SLAVE, info->dma_cap); | ||||
| 	info->filter_fn = dw_dma_acpi_filter; | ||||
| 
 | ||||
| 	ret = acpi_dma_controller_register(dev, acpi_dma_simple_xlate, info); | ||||
| 	if (ret) | ||||
| 		dev_err(dev, "could not register acpi_dma_controller\n"); | ||||
| } | ||||
| 
 | ||||
| void dw_dma_acpi_controller_free(struct dw_dma *dw) | ||||
| { | ||||
| 	struct device *dev = dw->dma.dev; | ||||
| 
 | ||||
| 	if (!has_acpi_companion(dev)) | ||||
| 		return; | ||||
| 
 | ||||
| 	acpi_dma_controller_free(dev); | ||||
| } | ||||
| @ -23,6 +23,14 @@ int do_dw_dma_enable(struct dw_dma_chip *chip); | ||||
| 
 | ||||
| extern bool dw_dma_filter(struct dma_chan *chan, void *param); | ||||
| 
 | ||||
| #ifdef CONFIG_ACPI | ||||
| void dw_dma_acpi_controller_register(struct dw_dma *dw); | ||||
| void dw_dma_acpi_controller_free(struct dw_dma *dw); | ||||
| #else /* !CONFIG_ACPI */ | ||||
| static inline void dw_dma_acpi_controller_register(struct dw_dma *dw) {} | ||||
| static inline void dw_dma_acpi_controller_free(struct dw_dma *dw) {} | ||||
| #endif /* !CONFIG_ACPI */ | ||||
| 
 | ||||
| struct dw_dma_chip_pdata { | ||||
| 	const struct dw_dma_platform_data *pdata; | ||||
| 	int (*probe)(struct dw_dma_chip *chip); | ||||
|  | ||||
| @ -19,7 +19,6 @@ | ||||
| #include <linux/of.h> | ||||
| #include <linux/of_dma.h> | ||||
| #include <linux/acpi.h> | ||||
| #include <linux/acpi_dma.h> | ||||
| 
 | ||||
| #include "internal.h" | ||||
| 
 | ||||
| @ -55,57 +54,6 @@ static struct dma_chan *dw_dma_of_xlate(struct of_phandle_args *dma_spec, | ||||
| 	return dma_request_channel(cap, dw_dma_filter, &slave); | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_ACPI | ||||
| 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, | ||||
| 		.src_id = dma_spec->slave_id, | ||||
| 		.dst_id = dma_spec->slave_id, | ||||
| 		.m_master = 0, | ||||
| 		.p_master = 1, | ||||
| 	}; | ||||
| 
 | ||||
| 	return dw_dma_filter(chan, &slave); | ||||
| } | ||||
| 
 | ||||
| static void dw_dma_acpi_controller_register(struct dw_dma *dw) | ||||
| { | ||||
| 	struct device *dev = dw->dma.dev; | ||||
| 	struct acpi_dma_filter_info *info; | ||||
| 	int ret; | ||||
| 
 | ||||
| 	if (!has_acpi_companion(dev)) | ||||
| 		return; | ||||
| 
 | ||||
| 	info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL); | ||||
| 	if (!info) | ||||
| 		return; | ||||
| 
 | ||||
| 	dma_cap_zero(info->dma_cap); | ||||
| 	dma_cap_set(DMA_SLAVE, info->dma_cap); | ||||
| 	info->filter_fn = dw_dma_acpi_filter; | ||||
| 
 | ||||
| 	ret = acpi_dma_controller_register(dev, acpi_dma_simple_xlate, info); | ||||
| 	if (ret) | ||||
| 		dev_err(dev, "could not register acpi_dma_controller\n"); | ||||
| } | ||||
| 
 | ||||
| static void dw_dma_acpi_controller_free(struct dw_dma *dw) | ||||
| { | ||||
| 	struct device *dev = dw->dma.dev; | ||||
| 
 | ||||
| 	if (!has_acpi_companion(dev)) | ||||
| 		return; | ||||
| 
 | ||||
| 	acpi_dma_controller_free(dev); | ||||
| } | ||||
| #else /* !CONFIG_ACPI */ | ||||
| static inline void dw_dma_acpi_controller_register(struct dw_dma *dw) {} | ||||
| static inline void dw_dma_acpi_controller_free(struct dw_dma *dw) {} | ||||
| #endif /* !CONFIG_ACPI */ | ||||
| 
 | ||||
| #ifdef CONFIG_OF | ||||
| static struct dw_dma_platform_data * | ||||
| dw_dma_parse_dt(struct platform_device *pdev) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user