Skip to content

Commit

Permalink
DMA: Freescale: update driver to support 8-channel DMA engine
Browse files Browse the repository at this point in the history
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: Hongbo Zhang <hongbo.zhang@freescale.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
  • Loading branch information
Hongbo Zhang authored and Vinod Koul committed Nov 13, 2013
1 parent 03aa254 commit 8de7a7d
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 8 deletions.
9 changes: 5 additions & 4 deletions drivers/dma/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
9 changes: 6 additions & 3 deletions drivers/dma/fsldma.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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", },
{}
Expand All @@ -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);
}

Expand All @@ -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");
2 changes: 1 addition & 1 deletion drivers/dma/fsldma.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down

0 comments on commit 8de7a7d

Please sign in to comment.