Merge remote-tracking branches 'asoc/topic/wm5100', 'asoc/topic/wm8523', 'asoc/topic...
[linux.git] / sound / soc / pxa / spitz.c
index fc052d8247ff245aa6b5baead314ac893e77930c..1373b017a9514f379bf8f111afad10ddac640d6f 100644 (file)
@@ -46,74 +46,74 @@ static int spitz_mic_gpio;
 
 static void spitz_ext_control(struct snd_soc_dapm_context *dapm)
 {
+       snd_soc_dapm_mutex_lock(dapm);
+
        if (spitz_spk_func == SPITZ_SPK_ON)
-               snd_soc_dapm_enable_pin(dapm, "Ext Spk");
+               snd_soc_dapm_enable_pin_unlocked(dapm, "Ext Spk");
        else
-               snd_soc_dapm_disable_pin(dapm, "Ext Spk");
+               snd_soc_dapm_disable_pin_unlocked(dapm, "Ext Spk");
 
        /* set up jack connection */
        switch (spitz_jack_func) {
        case SPITZ_HP:
                /* enable and unmute hp jack, disable mic bias */
-               snd_soc_dapm_disable_pin(dapm, "Headset Jack");
-               snd_soc_dapm_disable_pin(dapm, "Mic Jack");
-               snd_soc_dapm_disable_pin(dapm, "Line Jack");
-               snd_soc_dapm_enable_pin(dapm, "Headphone Jack");
+               snd_soc_dapm_disable_pin_unlocked(dapm, "Headset Jack");
+               snd_soc_dapm_disable_pin_unlocked(dapm, "Mic Jack");
+               snd_soc_dapm_disable_pin_unlocked(dapm, "Line Jack");
+               snd_soc_dapm_enable_pin_unlocked(dapm, "Headphone Jack");
                gpio_set_value(SPITZ_GPIO_MUTE_L, 1);
                gpio_set_value(SPITZ_GPIO_MUTE_R, 1);
                break;
        case SPITZ_MIC:
                /* enable mic jack and bias, mute hp */
-               snd_soc_dapm_disable_pin(dapm, "Headphone Jack");
-               snd_soc_dapm_disable_pin(dapm, "Headset Jack");
-               snd_soc_dapm_disable_pin(dapm, "Line Jack");
-               snd_soc_dapm_enable_pin(dapm, "Mic Jack");
+               snd_soc_dapm_disable_pin_unlocked(dapm, "Headphone Jack");
+               snd_soc_dapm_disable_pin_unlocked(dapm, "Headset Jack");
+               snd_soc_dapm_disable_pin_unlocked(dapm, "Line Jack");
+               snd_soc_dapm_enable_pin_unlocked(dapm, "Mic Jack");
                gpio_set_value(SPITZ_GPIO_MUTE_L, 0);
                gpio_set_value(SPITZ_GPIO_MUTE_R, 0);
                break;
        case SPITZ_LINE:
                /* enable line jack, disable mic bias and mute hp */
-               snd_soc_dapm_disable_pin(dapm, "Headphone Jack");
-               snd_soc_dapm_disable_pin(dapm, "Headset Jack");
-               snd_soc_dapm_disable_pin(dapm, "Mic Jack");
-               snd_soc_dapm_enable_pin(dapm, "Line Jack");
+               snd_soc_dapm_disable_pin_unlocked(dapm, "Headphone Jack");
+               snd_soc_dapm_disable_pin_unlocked(dapm, "Headset Jack");
+               snd_soc_dapm_disable_pin_unlocked(dapm, "Mic Jack");
+               snd_soc_dapm_enable_pin_unlocked(dapm, "Line Jack");
                gpio_set_value(SPITZ_GPIO_MUTE_L, 0);
                gpio_set_value(SPITZ_GPIO_MUTE_R, 0);
                break;
        case SPITZ_HEADSET:
                /* enable and unmute headset jack enable mic bias, mute L hp */
-               snd_soc_dapm_disable_pin(dapm, "Headphone Jack");
-               snd_soc_dapm_enable_pin(dapm, "Mic Jack");
-               snd_soc_dapm_disable_pin(dapm, "Line Jack");
-               snd_soc_dapm_enable_pin(dapm, "Headset Jack");
+               snd_soc_dapm_disable_pin_unlocked(dapm, "Headphone Jack");
+               snd_soc_dapm_enable_pin_unlocked(dapm, "Mic Jack");
+               snd_soc_dapm_disable_pin_unlocked(dapm, "Line Jack");
+               snd_soc_dapm_enable_pin_unlocked(dapm, "Headset Jack");
                gpio_set_value(SPITZ_GPIO_MUTE_L, 0);
                gpio_set_value(SPITZ_GPIO_MUTE_R, 1);
                break;
        case SPITZ_HP_OFF:
 
                /* jack removed, everything off */
-               snd_soc_dapm_disable_pin(dapm, "Headphone Jack");
-               snd_soc_dapm_disable_pin(dapm, "Headset Jack");
-               snd_soc_dapm_disable_pin(dapm, "Mic Jack");
-               snd_soc_dapm_disable_pin(dapm, "Line Jack");
+               snd_soc_dapm_disable_pin_unlocked(dapm, "Headphone Jack");
+               snd_soc_dapm_disable_pin_unlocked(dapm, "Headset Jack");
+               snd_soc_dapm_disable_pin_unlocked(dapm, "Mic Jack");
+               snd_soc_dapm_disable_pin_unlocked(dapm, "Line Jack");
                gpio_set_value(SPITZ_GPIO_MUTE_L, 0);
                gpio_set_value(SPITZ_GPIO_MUTE_R, 0);
                break;
        }
-       snd_soc_dapm_sync(dapm);
+
+       snd_soc_dapm_sync_unlocked(dapm);
+
+       snd_soc_dapm_mutex_unlock(dapm);
 }
 
 static int spitz_startup(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_codec *codec = rtd->codec;
-
-       mutex_lock(&codec->mutex);
 
        /* check the jack status at stream startup */
-       spitz_ext_control(&codec->dapm);
-
-       mutex_unlock(&codec->mutex);
+       spitz_ext_control(&rtd->card->dapm);
 
        return 0;
 }