ASoC: rt5645: Lock mutex in rt5645_enable_push_button_irq
authorNicolas Boichat <drinkcat@chromium.org>
Wed, 10 Jun 2015 03:54:13 +0000 (11:54 +0800)
committerMark Brown <broonie@kernel.org>
Wed, 10 Jun 2015 17:30:13 +0000 (18:30 +0100)
rt5645_enable_push_button_irq uses snd_soc_dapm_*_unlocked
functions, so it needs to lock the required dapm mutex.

Signed-off-by: Nicolas Boichat <drinkcat@chromium.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/rt5645.c

index aaede45..abedf35 100644 (file)
@@ -2762,6 +2762,7 @@ static void rt5645_enable_push_button_irq(struct snd_soc_codec *codec,
        struct rt5645_priv *rt5645 = snd_soc_codec_get_drvdata(codec);
 
        if (enable) {
+               snd_soc_dapm_mutex_lock(&codec->dapm);
                snd_soc_dapm_force_enable_pin_unlocked(&codec->dapm,
                                                        "ADC L power");
                snd_soc_dapm_force_enable_pin_unlocked(&codec->dapm,
@@ -2771,6 +2772,8 @@ static void rt5645_enable_push_button_irq(struct snd_soc_codec *codec,
                snd_soc_dapm_force_enable_pin_unlocked(&codec->dapm,
                                                        "Mic Det Power");
                snd_soc_dapm_sync_unlocked(&codec->dapm);
+               snd_soc_dapm_mutex_unlock(&codec->dapm);
+
                snd_soc_update_bits(codec,
                                        RT5645_INT_IRQ_ST, 0x8, 0x8);
                snd_soc_update_bits(codec,
@@ -2781,6 +2784,8 @@ static void rt5645_enable_push_button_irq(struct snd_soc_codec *codec,
        } else {
                snd_soc_update_bits(codec, RT5650_4BTN_IL_CMD2, 0x8000, 0x0);
                snd_soc_update_bits(codec, RT5645_INT_IRQ_ST, 0x8, 0x0);
+
+               snd_soc_dapm_mutex_lock(&codec->dapm);
                snd_soc_dapm_disable_pin_unlocked(&codec->dapm,
                                                        "ADC L power");
                snd_soc_dapm_disable_pin_unlocked(&codec->dapm,
@@ -2791,6 +2796,7 @@ static void rt5645_enable_push_button_irq(struct snd_soc_codec *codec,
                snd_soc_dapm_disable_pin_unlocked(&codec->dapm,
                                                        "Mic Det Power");
                snd_soc_dapm_sync_unlocked(&codec->dapm);
+               snd_soc_dapm_mutex_unlock(&codec->dapm);
        }
 }