if (ucontrol->value.enumerated.item[0] >= control->max)
                return -EINVAL;
 
-       mutex_lock(&codec->mutex);
+       snd_soc_dapm_mutex_lock(dapm);
 
        /* Translate selection to bitmap */
        pins = ams_delta_audio_mode_pins[ucontrol->value.enumerated.item[0]];
 
        /* Setup pins after corresponding bits if changed */
        pin = !!(pins & (1 << AMS_DELTA_MOUTHPIECE));
+
        if (pin != snd_soc_dapm_get_pin_status(dapm, "Mouthpiece")) {
                changed = 1;
                if (pin)
-                       snd_soc_dapm_enable_pin(dapm, "Mouthpiece");
+                       snd_soc_dapm_enable_pin_unlocked(dapm, "Mouthpiece");
                else
-                       snd_soc_dapm_disable_pin(dapm, "Mouthpiece");
+                       snd_soc_dapm_disable_pin_unlocked(dapm, "Mouthpiece");
        }
        pin = !!(pins & (1 << AMS_DELTA_EARPIECE));
        if (pin != snd_soc_dapm_get_pin_status(dapm, "Earpiece")) {
                changed = 1;
                if (pin)
-                       snd_soc_dapm_enable_pin(dapm, "Earpiece");
+                       snd_soc_dapm_enable_pin_unlocked(dapm, "Earpiece");
                else
-                       snd_soc_dapm_disable_pin(dapm, "Earpiece");
+                       snd_soc_dapm_disable_pin_unlocked(dapm, "Earpiece");
        }
        pin = !!(pins & (1 << AMS_DELTA_MICROPHONE));
        if (pin != snd_soc_dapm_get_pin_status(dapm, "Microphone")) {
                changed = 1;
                if (pin)
-                       snd_soc_dapm_enable_pin(dapm, "Microphone");
+                       snd_soc_dapm_enable_pin_unlocked(dapm, "Microphone");
                else
-                       snd_soc_dapm_disable_pin(dapm, "Microphone");
+                       snd_soc_dapm_disable_pin_unlocked(dapm, "Microphone");
        }
        pin = !!(pins & (1 << AMS_DELTA_SPEAKER));
        if (pin != snd_soc_dapm_get_pin_status(dapm, "Speaker")) {
                changed = 1;
                if (pin)
-                       snd_soc_dapm_enable_pin(dapm, "Speaker");
+                       snd_soc_dapm_enable_pin_unlocked(dapm, "Speaker");
                else
-                       snd_soc_dapm_disable_pin(dapm, "Speaker");
+                       snd_soc_dapm_disable_pin_unlocked(dapm, "Speaker");
        }
        pin = !!(pins & (1 << AMS_DELTA_AGC));
        if (pin != ams_delta_audio_agc) {
                ams_delta_audio_agc = pin;
                changed = 1;
                if (pin)
-                       snd_soc_dapm_enable_pin(dapm, "AGCIN");
+                       snd_soc_dapm_enable_pin_unlocked(dapm, "AGCIN");
                else
-                       snd_soc_dapm_disable_pin(dapm, "AGCIN");
+                       snd_soc_dapm_disable_pin_unlocked(dapm, "AGCIN");
        }
+
        if (changed)
-               snd_soc_dapm_sync(dapm);
+               snd_soc_dapm_sync_unlocked(dapm);
 
-       mutex_unlock(&codec->mutex);
+       snd_soc_dapm_mutex_unlock(dapm);
 
        return changed;
 }
        v253_ops.close(tty);
 
        /* Revert back to default audio input/output constellation */
-       snd_soc_dapm_disable_pin(dapm, "Mouthpiece");
-       snd_soc_dapm_enable_pin(dapm, "Earpiece");
-       snd_soc_dapm_enable_pin(dapm, "Microphone");
-       snd_soc_dapm_disable_pin(dapm, "Speaker");
-       snd_soc_dapm_disable_pin(dapm, "AGCIN");
-       snd_soc_dapm_sync(dapm);
+       snd_soc_dapm_mutex_lock(dapm);
+
+       snd_soc_dapm_disable_pin_unlocked(dapm, "Mouthpiece");
+       snd_soc_dapm_enable_pin_unlocked(dapm, "Earpiece");
+       snd_soc_dapm_enable_pin_unlocked(dapm, "Microphone");
+       snd_soc_dapm_disable_pin_unlocked(dapm, "Speaker");
+       snd_soc_dapm_disable_pin_unlocked(dapm, "AGCIN");
+
+       snd_soc_dapm_sync_unlocked(dapm);
+
+       snd_soc_dapm_mutex_unlock(codec);
 }
 
 /* Line discipline .hangup() */