Merge remote-tracking branches 'asoc/topic/ml26124', 'asoc/topic/of', 'asoc/topic...
[deliverable/linux.git] / sound / soc / pxa / corgi.c
index 1853d41034bfa0c17d752f6191e4346e1cc06725..5a88136aa800bc827db543543aa018f701002d14 100644 (file)
@@ -47,64 +47,63 @@ static int corgi_spk_func;
 
 static void corgi_ext_control(struct snd_soc_dapm_context *dapm)
 {
+       snd_soc_dapm_mutex_lock(dapm);
+
        /* set up jack connection */
        switch (corgi_jack_func) {
        case CORGI_HP:
                /* set = unmute headphone */
                gpio_set_value(CORGI_GPIO_MUTE_L, 1);
                gpio_set_value(CORGI_GPIO_MUTE_R, 1);
-               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(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");
+               snd_soc_dapm_disable_pin_unlocked(dapm, "Headset Jack");
                break;
        case CORGI_MIC:
                /* reset = mute headphone */
                gpio_set_value(CORGI_GPIO_MUTE_L, 0);
                gpio_set_value(CORGI_GPIO_MUTE_R, 0);
-               snd_soc_dapm_enable_pin(dapm, "Mic Jack");
-               snd_soc_dapm_disable_pin(dapm, "Line Jack");
-               snd_soc_dapm_disable_pin(dapm, "Headphone Jack");
-               snd_soc_dapm_disable_pin(dapm, "Headset Jack");
+               snd_soc_dapm_enable_pin_unlocked(dapm, "Mic Jack");
+               snd_soc_dapm_disable_pin_unlocked(dapm, "Line Jack");
+               snd_soc_dapm_disable_pin_unlocked(dapm, "Headphone Jack");
+               snd_soc_dapm_disable_pin_unlocked(dapm, "Headset Jack");
                break;
        case CORGI_LINE:
                gpio_set_value(CORGI_GPIO_MUTE_L, 0);
                gpio_set_value(CORGI_GPIO_MUTE_R, 0);
-               snd_soc_dapm_disable_pin(dapm, "Mic Jack");
-               snd_soc_dapm_enable_pin(dapm, "Line Jack");
-               snd_soc_dapm_disable_pin(dapm, "Headphone Jack");
-               snd_soc_dapm_disable_pin(dapm, "Headset Jack");
+               snd_soc_dapm_disable_pin_unlocked(dapm, "Mic Jack");
+               snd_soc_dapm_enable_pin_unlocked(dapm, "Line Jack");
+               snd_soc_dapm_disable_pin_unlocked(dapm, "Headphone Jack");
+               snd_soc_dapm_disable_pin_unlocked(dapm, "Headset Jack");
                break;
        case CORGI_HEADSET:
                gpio_set_value(CORGI_GPIO_MUTE_L, 0);
                gpio_set_value(CORGI_GPIO_MUTE_R, 1);
-               snd_soc_dapm_enable_pin(dapm, "Mic Jack");
-               snd_soc_dapm_disable_pin(dapm, "Line Jack");
-               snd_soc_dapm_disable_pin(dapm, "Headphone Jack");
-               snd_soc_dapm_enable_pin(dapm, "Headset Jack");
+               snd_soc_dapm_enable_pin_unlocked(dapm, "Mic Jack");
+               snd_soc_dapm_disable_pin_unlocked(dapm, "Line Jack");
+               snd_soc_dapm_disable_pin_unlocked(dapm, "Headphone Jack");
+               snd_soc_dapm_enable_pin_unlocked(dapm, "Headset Jack");
                break;
        }
 
        if (corgi_spk_func == CORGI_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");
 
        /* signal a DAPM event */
-       snd_soc_dapm_sync(dapm);
+       snd_soc_dapm_sync_unlocked(dapm);
+
+       snd_soc_dapm_mutex_unlock(dapm);
 }
 
 static int corgi_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 */
-       corgi_ext_control(&codec->dapm);
-
-       mutex_unlock(&codec->mutex);
+       corgi_ext_control(&rtd->card->dapm);
 
        return 0;
 }
This page took 0.026372 seconds and 5 git commands to generate.