summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Simek2013-09-30 08:50:48 +0200
committerVinod Koul2013-10-13 18:06:22 +0200
commite98b3cafe5f048be40ff6acb18dfa7c9a0e9423e (patch)
tree65b908bef1949539300861be0f52936206be07f6
parentdma: mmp_tdma: add multiple burst size support for 910-squ (diff)
downloadkernel-qcow2-linux-e98b3cafe5f048be40ff6acb18dfa7c9a0e9423e.tar.gz
kernel-qcow2-linux-e98b3cafe5f048be40ff6acb18dfa7c9a0e9423e.tar.xz
kernel-qcow2-linux-e98b3cafe5f048be40ff6acb18dfa7c9a0e9423e.zip
dma: pl330: Support per channel irq allocation
Some pl330 have per channel irq and it is necessary to allocate all of them. Loop over irq assigned for this device to support these pl330 IPs. For example this IP is available on Xilinx Zynq platform. Signed-off-by: Michal Simek <michal.simek@xilinx.com> Tested-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
-rw-r--r--drivers/dma/pl330.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
index 58623dc474d1..96de393aaf4f 100644
--- a/drivers/dma/pl330.c
+++ b/drivers/dma/pl330.c
@@ -2922,11 +2922,18 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id)
amba_set_drvdata(adev, pdmac);
- irq = adev->irq[0];
- ret = devm_request_irq(&adev->dev, irq, pl330_irq_handler, 0,
- dev_name(&adev->dev), pi);
- if (ret)
- return ret;
+ for (i = 0; i <= AMBA_NR_IRQS; i++) {
+ irq = adev->irq[i];
+ if (irq) {
+ ret = devm_request_irq(&adev->dev, irq,
+ pl330_irq_handler, 0,
+ dev_name(&adev->dev), pi);
+ if (ret)
+ return ret;
+ } else {
+ break;
+ }
+ }
pi->pcfg.periph_id = adev->periphid;
ret = pl330_add(pi);