diff options
author | Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> | 2016-10-25 00:36:34 +0000 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2016-10-25 15:02:43 +0100 |
commit | 701172dca15ba9860ba73d3e18082fbd2a78f2c9 (patch) | |
tree | b112f545bdd07a8631699cb9ce2288552b592137 /sound/soc/sh | |
parent | b99305d20122174c9fd0469bae036f0c401999b5 (diff) |
ASoC: rsnd: don't use devm_request_irq() for SSI
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>
Diffstat (limited to 'sound/soc/sh')
-rw-r--r-- | sound/soc/sh/rcar/ssi.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c index 59cd9824d8a4..b0338d0a4cde 100644 --- a/sound/soc/sh/rcar/ssi.c +++ b/sound/soc/sh/rcar/ssi.c @@ -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); |