Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8de7a7d9 authored by Hongbo Zhang's avatar Hongbo Zhang Committed by Vinod Koul
Browse files

DMA: Freescale: update driver to support 8-channel DMA engine



This patch adds support to 8-channel DMA engine, thus the driver works for both
the new 8-channel and the legacy 4-channel DMA engines.

Signed-off-by: default avatarHongbo Zhang <hongbo.zhang@freescale.com>
Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
parent 03aa254f
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -89,14 +89,15 @@ config AT_HDMAC
	  Support the Atmel AHB DMA controller.

config FSL_DMA
	tristate "Freescale Elo and Elo Plus DMA support"
	tristate "Freescale Elo series DMA support"
	depends on FSL_SOC
	select DMA_ENGINE
	select ASYNC_TX_ENABLE_CHANNEL_SWITCH
	---help---
	  Enable support for the Freescale Elo and Elo Plus DMA controllers.
	  The Elo is the DMA controller on some 82xx and 83xx parts, and the
	  Elo Plus is the DMA controller on 85xx and 86xx parts.
	  Enable support for the Freescale Elo series DMA controllers.
	  The Elo is the DMA controller on some mpc82xx and mpc83xx parts, the
	  EloPlus is on mpc85xx and mpc86xx and Pxxx parts, and the Elo3 is on
	  some Txxx and Bxxx parts.

config MPC512X_DMA
	tristate "Freescale MPC512x built-in DMA engine support"
+6 −3
Original line number Diff line number Diff line
@@ -1253,7 +1253,9 @@ static int fsl_dma_chan_probe(struct fsldma_device *fdev,
	WARN_ON(fdev->feature != chan->feature);

	chan->dev = fdev->dev;
	chan->id = ((res.start - 0x100) & 0xfff) >> 7;
	chan->id = (res.start & 0xfff) < 0x300 ?
		   ((res.start - 0x100) & 0xfff) >> 7 :
		   ((res.start - 0x200) & 0xfff) >> 7;
	if (chan->id >= FSL_DMA_MAX_CHANS_PER_DEVICE) {
		dev_err(fdev->dev, "too many channels for device\n");
		err = -EINVAL;
@@ -1426,6 +1428,7 @@ static int fsldma_of_remove(struct platform_device *op)
}

static const struct of_device_id fsldma_of_ids[] = {
	{ .compatible = "fsl,elo3-dma", },
	{ .compatible = "fsl,eloplus-dma", },
	{ .compatible = "fsl,elo-dma", },
	{}
@@ -1447,7 +1450,7 @@ static struct platform_driver fsldma_of_driver = {

static __init int fsldma_init(void)
{
	pr_info("Freescale Elo / Elo Plus DMA driver\n");
	pr_info("Freescale Elo series DMA driver\n");
	return platform_driver_register(&fsldma_of_driver);
}

@@ -1459,5 +1462,5 @@ static void __exit fsldma_exit(void)
subsys_initcall(fsldma_init);
module_exit(fsldma_exit);

MODULE_DESCRIPTION("Freescale Elo / Elo Plus DMA driver");
MODULE_DESCRIPTION("Freescale Elo series DMA driver");
MODULE_LICENSE("GPL");
+1 −1
Original line number Diff line number Diff line
@@ -112,7 +112,7 @@ struct fsldma_chan_regs {
};

struct fsldma_chan;
#define FSL_DMA_MAX_CHANS_PER_DEVICE 4
#define FSL_DMA_MAX_CHANS_PER_DEVICE 8

struct fsldma_device {
	void __iomem *regs;	/* DGSR register base */