162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Driver for the Synopsys DesignWare DMA Controller
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2007 Atmel Corporation
662306a36Sopenharmony_ci * Copyright (C) 2010-2011 ST Microelectronics
762306a36Sopenharmony_ci * Copyright (C) 2014 Intel Corporation
862306a36Sopenharmony_ci */
962306a36Sopenharmony_ci#ifndef _DMA_DW_H
1062306a36Sopenharmony_ci#define _DMA_DW_H
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#include <linux/clk.h>
1362306a36Sopenharmony_ci#include <linux/device.h>
1462306a36Sopenharmony_ci#include <linux/dmaengine.h>
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci#include <linux/platform_data/dma-dw.h>
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_cistruct dw_dma;
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci/**
2162306a36Sopenharmony_ci * struct dw_dma_chip - representation of DesignWare DMA controller hardware
2262306a36Sopenharmony_ci * @dev:		struct device of the DMA controller
2362306a36Sopenharmony_ci * @id:			instance ID
2462306a36Sopenharmony_ci * @irq:		irq line
2562306a36Sopenharmony_ci * @regs:		memory mapped I/O space
2662306a36Sopenharmony_ci * @clk:		hclk clock
2762306a36Sopenharmony_ci * @dw:			struct dw_dma that is filed by dw_dma_probe()
2862306a36Sopenharmony_ci * @pdata:		pointer to platform data
2962306a36Sopenharmony_ci */
3062306a36Sopenharmony_cistruct dw_dma_chip {
3162306a36Sopenharmony_ci	struct device	*dev;
3262306a36Sopenharmony_ci	int		id;
3362306a36Sopenharmony_ci	int		irq;
3462306a36Sopenharmony_ci	void __iomem	*regs;
3562306a36Sopenharmony_ci	struct clk	*clk;
3662306a36Sopenharmony_ci	struct dw_dma	*dw;
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci	const struct dw_dma_platform_data	*pdata;
3962306a36Sopenharmony_ci};
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci/* Export to the platform drivers */
4262306a36Sopenharmony_ci#if IS_ENABLED(CONFIG_DW_DMAC_CORE)
4362306a36Sopenharmony_ciint dw_dma_probe(struct dw_dma_chip *chip);
4462306a36Sopenharmony_ciint dw_dma_remove(struct dw_dma_chip *chip);
4562306a36Sopenharmony_ciint idma32_dma_probe(struct dw_dma_chip *chip);
4662306a36Sopenharmony_ciint idma32_dma_remove(struct dw_dma_chip *chip);
4762306a36Sopenharmony_ci#else
4862306a36Sopenharmony_cistatic inline int dw_dma_probe(struct dw_dma_chip *chip) { return -ENODEV; }
4962306a36Sopenharmony_cistatic inline int dw_dma_remove(struct dw_dma_chip *chip) { return 0; }
5062306a36Sopenharmony_cistatic inline int idma32_dma_probe(struct dw_dma_chip *chip) { return -ENODEV; }
5162306a36Sopenharmony_cistatic inline int idma32_dma_remove(struct dw_dma_chip *chip) { return 0; }
5262306a36Sopenharmony_ci#endif /* CONFIG_DW_DMAC_CORE */
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci#endif /* _DMA_DW_H */
55