diff mbox

ASoC: max98090: Fix missing free_irq (part 2)

Message ID 1411037324-5996-1-git-send-email-jarkko.nikula@linux.intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Jarkko Nikula Sept. 18, 2014, 10:48 a.m. UTC
I was blind to see interrupt was requested in codec probe instead of i2c
probe when doing commit 4adeb0ccf86a ("ASoC: max98090: Fix missing free_irq")
and there is still a case where interrupt is kept requested. Although not as
fatal as original issue.

Since codec can be reprobed while driver is loaded the subsequent
max98090_probe() call will fail in interrupt request since it wasn't freed.

Fix this by explicitly freeing irq in max98090_remove().

Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
---
for-next, I don't think this is critical enough for stable.
---
 sound/soc/codecs/max98090.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Mark Brown Sept. 18, 2014, 5:54 p.m. UTC | #1
On Thu, Sep 18, 2014 at 01:48:44PM +0300, Jarkko Nikula wrote:

> ---
> for-next, I don't think this is critical enough for stable.
> ---

> @@ -2413,6 +2413,7 @@ static int max98090_remove(struct snd_soc_codec *codec)
>  {
>  	struct max98090_priv *max98090 = snd_soc_codec_get_drvdata(codec);
>  
> +	devm_free_irq(codec->dev, max98090->irq, codec);

If this is a fix for -next shouldn't we be doing the proper fix and
moving the resource acquisition to the bus probe?
Jarkko Nikula Sept. 19, 2014, 7:51 a.m. UTC | #2
On 09/18/2014 08:54 PM, Mark Brown wrote:
> On Thu, Sep 18, 2014 at 01:48:44PM +0300, Jarkko Nikula wrote:
>
>> ---
>> for-next, I don't think this is critical enough for stable.
>> ---
>> @@ -2413,6 +2413,7 @@ static int max98090_remove(struct snd_soc_codec *codec)
>>   {
>>   	struct max98090_priv *max98090 = snd_soc_codec_get_drvdata(codec);
>>   
>> +	devm_free_irq(codec->dev, max98090->irq, codec);
> If this is a fix for -next shouldn't we be doing the proper fix and
> moving the resource acquisition to the bus probe?
Fair enough. I'll cook another version.
diff mbox

Patch

diff --git a/sound/soc/codecs/max98090.c b/sound/soc/codecs/max98090.c
index f1543653a699..ccc1466c0440 100644
--- a/sound/soc/codecs/max98090.c
+++ b/sound/soc/codecs/max98090.c
@@ -2413,6 +2413,7 @@  static int max98090_remove(struct snd_soc_codec *codec)
 {
 	struct max98090_priv *max98090 = snd_soc_codec_get_drvdata(codec);
 
+	devm_free_irq(codec->dev, max98090->irq, codec);
 	cancel_delayed_work_sync(&max98090->jack_work);
 	cancel_delayed_work_sync(&max98090->pll_det_enable_work);
 	cancel_work_sync(&max98090->pll_det_disable_work);