ASoC: fsl_(e)sai: introduce "shared-interrupt" DT flag
authorViorel Suman <viorel.suman@nxp.com>
Sun, 30 Apr 2017 09:41:33 +0000 (12:41 +0300)
committerNitin Garg <nitin.garg@nxp.com>
Mon, 19 Mar 2018 20:22:06 +0000 (15:22 -0500)
SAI & ESAI interfaces may share the same interrupt with EDMA,
so that we need a flag to trigger proper shared interrupt
handling. For compatibility the same DT flag, "shared-interrupt",
is introduced as the one used in drivers/dma/fsl-edma-v3.c.

Signed-off-by: Viorel Suman <viorel.suman@nxp.com>
sound/soc/fsl/fsl_esai.c
sound/soc/fsl/fsl_sai.c

index 9a29997..70e6f35 100644 (file)
@@ -910,6 +910,7 @@ static int fsl_esai_probe(struct platform_device *pdev)
        void __iomem *regs;
        int irq, ret;
        u32 buffer_size;
+       unsigned long irqflag = 0;
 
        esai_priv = devm_kzalloc(&pdev->dev, sizeof(*esai_priv), GFP_KERNEL);
        if (!esai_priv)
@@ -960,7 +961,11 @@ static int fsl_esai_probe(struct platform_device *pdev)
                return irq;
        }
 
-       ret = devm_request_irq(&pdev->dev, irq, esai_isr, 0,
+       /* ESAI shared interrupt */
+       if (of_property_read_bool(np, "shared-interrupt"))
+               irqflag = IRQF_SHARED;
+
+       ret = devm_request_irq(&pdev->dev, irq, esai_isr, irqflag,
                               esai_priv->name, esai_priv);
        if (ret) {
                dev_err(&pdev->dev, "failed to claim irq %u\n", irq);
index 4e354fc..a295cee 100644 (file)
@@ -924,6 +924,7 @@ static int fsl_sai_probe(struct platform_device *pdev)
        int irq, ret, i;
        int index;
        u32 buffer_size;
+       unsigned long irqflag = 0;
 
        sai = devm_kzalloc(&pdev->dev, sizeof(*sai), GFP_KERNEL);
        if (!sai)
@@ -993,7 +994,12 @@ static int fsl_sai_probe(struct platform_device *pdev)
                return irq;
        }
 
-       ret = devm_request_irq(&pdev->dev, irq, fsl_sai_isr, 0, np->name, sai);
+       /* SAI shared interrupt */
+       if (of_property_read_bool(np, "shared-interrupt"))
+               irqflag = IRQF_SHARED;
+
+       ret = devm_request_irq(&pdev->dev, irq, fsl_sai_isr, irqflag,
+                               np->name, sai);
        if (ret) {
                dev_err(&pdev->dev, "failed to claim irq %u\n", irq);
                return ret;