ASoC: amd: pcm-dma: Use platform_get_irq() to get the interrupt
authorMeng Tang <tangmeng@uniontech.com>
Sun, 27 Feb 2022 05:09:28 +0000 (13:09 +0800)
committerMark Brown <broonie@kernel.org>
Mon, 28 Feb 2022 13:33:35 +0000 (13:33 +0000)
platform_get_resource(pdev, IORESOURCE_IRQ, ..) relies on static
allocation of IRQ resources in DT core code, this causes an issue
when using hierarchical interrupt domains using "interrupts" property
in the node as this bypassed the hierarchical setup and messed up the
irq chaining.

In preparation for removal of static setup of IRQ resource from DT core
code use platform_get_irq().

Signed-off-by: Meng Tang <tangmeng@uniontech.com>
Link: https://lore.kernel.org/r/20220227050928.32270-1-tangmeng@uniontech.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/amd/acp-pcm-dma.c
sound/soc/amd/raven/acp3x-pcm-dma.c
sound/soc/amd/renoir/acp3x-pdm-dma.c
sound/soc/amd/vangogh/acp5x-pcm-dma.c

index 8fa2e2fde4f1f6b47aef79c2de79068a6ce05e1d..1cd2e70a57dfc1ff29277cd30e8f3b1846583d37 100644 (file)
@@ -1217,9 +1217,8 @@ static const struct snd_soc_component_driver acp_asoc_platform = {
 
 static int acp_audio_probe(struct platform_device *pdev)
 {
-       int status;
+       int status, irq;
        struct audio_drv_data *audio_drv_data;
-       struct resource *res;
        const u32 *pdata = pdev->dev.platform_data;
 
        if (!pdata) {
@@ -1249,13 +1248,11 @@ static int acp_audio_probe(struct platform_device *pdev)
 
        audio_drv_data->asic_type =  *pdata;
 
-       res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
-       if (!res) {
-               dev_err(&pdev->dev, "IORESOURCE_IRQ FAILED\n");
+       irq = platform_get_irq(pdev, 0);
+       if (irq < 0)
                return -ENODEV;
-       }
 
-       status = devm_request_irq(&pdev->dev, res->start, dma_irq_handler,
+       status = devm_request_irq(&pdev->dev, irq, dma_irq_handler,
                                  0, "ACP_IRQ", &pdev->dev);
        if (status) {
                dev_err(&pdev->dev, "ACP IRQ request failed\n");
index 75c06697fa092b865820f2b444634d4e8bb665a7..e4f8dbf0d11dcff4fed7cc3b7dc768aeb4422e95 100644 (file)
@@ -394,13 +394,9 @@ static int acp3x_audio_probe(struct platform_device *pdev)
        if (!adata->acp3x_base)
                return -ENOMEM;
 
-       res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
-       if (!res) {
-               dev_err(&pdev->dev, "IORESOURCE_IRQ FAILED\n");
+       adata->i2s_irq =  platform_get_irq(pdev, 0);
+       if (adata->i2s_irq < 0)
                return -ENODEV;
-       }
-
-       adata->i2s_irq = res->start;
 
        dev_set_drvdata(&pdev->dev, adata);
        status = devm_snd_soc_register_component(&pdev->dev,
index 9dd22a2fa2e5c38cd0c8118d441cbd3196b96229..88a242538461915ebcff79b643fd43bc2dc1aa30 100644 (file)
@@ -399,13 +399,10 @@ static int acp_pdm_audio_probe(struct platform_device *pdev)
        if (!adata->acp_base)
                return -ENOMEM;
 
-       res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
-       if (!res) {
-               dev_err(&pdev->dev, "IORESOURCE_IRQ FAILED\n");
+       adata->pdm_irq = platform_get_irq(pdev, 0);
+       if (adata->pdm_irq < 0)
                return -ENODEV;
-       }
 
-       adata->pdm_irq = res->start;
        adata->capture_stream = NULL;
 
        dev_set_drvdata(&pdev->dev, adata);
index f10de38976cb54cd1067115ba0084e89f355f2ed..c8cd1777a63ce0e9c46891e68ecfdd7d2dd04a5b 100644 (file)
@@ -388,13 +388,10 @@ static int acp5x_audio_probe(struct platform_device *pdev)
        if (!adata->acp5x_base)
                return -ENOMEM;
 
-       res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
-       if (!res) {
-               dev_err(&pdev->dev, "IORESOURCE_IRQ FAILED\n");
+       adata->i2s_irq = platform_get_irq(pdev, 0);
+       if (adata->i2s_irq < 0)
                return -ENODEV;
-       }
 
-       adata->i2s_irq = res->start;
        dev_set_drvdata(&pdev->dev, adata);
        status = devm_snd_soc_register_component(&pdev->dev,
                                                 &acp5x_i2s_component,