Merge tag 'armsoc-dt' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
[cascardo/linux.git] / drivers / dma / pl330.c
index 372b435..4fc3ffb 100644 (file)
@@ -2828,10 +2828,8 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id)
 
        /* Allocate a new DMAC and its Channels */
        pl330 = devm_kzalloc(&adev->dev, sizeof(*pl330), GFP_KERNEL);
-       if (!pl330) {
-               dev_err(&adev->dev, "unable to allocate mem\n");
+       if (!pl330)
                return -ENOMEM;
-       }
 
        pd = &pl330->ddma;
        pd->dev = &adev->dev;
@@ -2890,7 +2888,6 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id)
        pl330->peripherals = kzalloc(num_chan * sizeof(*pch), GFP_KERNEL);
        if (!pl330->peripherals) {
                ret = -ENOMEM;
-               dev_err(&adev->dev, "unable to allocate pl330->peripherals\n");
                goto probe_err2;
        }
 
@@ -3005,12 +3002,18 @@ static int pl330_remove(struct amba_device *adev)
 {
        struct pl330_dmac *pl330 = amba_get_drvdata(adev);
        struct dma_pl330_chan *pch, *_p;
+       int i, irq;
 
        pm_runtime_get_noresume(pl330->ddma.dev);
 
        if (adev->dev.of_node)
                of_dma_controller_free(adev->dev.of_node);
 
+       for (i = 0; i < AMBA_NR_IRQS; i++) {
+               irq = adev->irq[i];
+               devm_free_irq(&adev->dev, irq, pl330);
+       }
+
        dma_async_device_unregister(&pl330->ddma);
 
        /* Idle the DMAC */