OSDN Git Service

ASoC: rsnd: don't use devm_request_irq() for SSI
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Tue, 25 Oct 2016 00:36:34 +0000 (00:36 +0000)
committerMark Brown <broonie@kernel.org>
Tue, 25 Oct 2016 14:02:43 +0000 (15:02 +0100)
SSI will use DMA mode, and migh be fallback to PIO mode.
Using devm_request_irq() makes its operation more complex when
it fallbacks to PIO mode.
Let's use manual request_irq()/free_irq()

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sh/rcar/ssi.c

index 59cd982..b0338d0 100644 (file)
@@ -644,10 +644,14 @@ static int rsnd_ssi_common_probe(struct rsnd_mod *mod,
        if (ret < 0)
                return ret;
 
-       ret = devm_request_irq(dev, ssi->irq,
-                              rsnd_ssi_interrupt,
-                              IRQF_SHARED,
-                              dev_name(dev), mod);
+       /*
+        * SSI might be called again as PIO fallback
+        * It is easy to manual handling for IRQ request/free
+        */
+       ret = request_irq(ssi->irq,
+                         rsnd_ssi_interrupt,
+                         IRQF_SHARED,
+                         dev_name(dev), mod);
 
        return ret;
 }
@@ -693,12 +697,9 @@ static int rsnd_ssi_dma_remove(struct rsnd_mod *mod,
                               struct rsnd_priv *priv)
 {
        struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
-       struct device *dev = rsnd_priv_to_dev(priv);
-       int irq = ssi->irq;
 
        /* PIO will request IRQ again */
-       if (ssi->dma)
-               devm_free_irq(dev, irq, mod);
+       free_irq(ssi->irq, mod);
 
        rsnd_dma_detach(mod, &ssi->dma);