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

Commit 9200ebd8 authored by Vinod Koul's avatar Vinod Koul
Browse files

dmaengine: s3c24xx: explicitly freeup irq



dmaengine device should explicitly call devm_free_irq() when using
devm_request_irq().

The irq is still ON when devices remove is executed and irq should be
quiesced before remove is completed.

Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
Reviewed-by: default avatarKrzysztof Kozlowski <k.kozlowski@samsung.com>
parent 46cf94d6
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -1359,6 +1359,18 @@ static int s3c24xx_dma_probe(struct platform_device *pdev)
	return ret;
}

static void s3c24xx_dma_free_irq(struct platform_device *pdev,
				struct s3c24xx_dma_engine *s3cdma)
{
	int i;

	for (i = 0; i < s3cdma->pdata->num_phy_channels; i++) {
		struct s3c24xx_dma_phy *phy = &s3cdma->phy_chans[i];

		devm_free_irq(&pdev->dev, phy->irq, phy);
	}
}

static int s3c24xx_dma_remove(struct platform_device *pdev)
{
	const struct s3c24xx_dma_platdata *pdata = dev_get_platdata(&pdev->dev);
@@ -1369,6 +1381,8 @@ static int s3c24xx_dma_remove(struct platform_device *pdev)
	dma_async_device_unregister(&s3cdma->slave);
	dma_async_device_unregister(&s3cdma->memcpy);

	s3c24xx_dma_free_irq(pdev, s3cdma);

	s3c24xx_dma_free_virtual_channels(&s3cdma->slave);
	s3c24xx_dma_free_virtual_channels(&s3cdma->memcpy);