Merge remote-tracking branches 'asoc/topic/ml26124', 'asoc/topic/of', 'asoc/topic...
[deliverable/linux.git] / sound / soc / omap / ams-delta.c
index 629446482a917267706c76982863577a426da11c..f141435b0b4ad7f19a8e0b5069e016cfdebb121d 100644 (file)
@@ -103,60 +103,62 @@ static int ams_delta_set_audio_mode(struct snd_kcontrol *kcontrol,
        if (!codec->hw_write)
                return -EUNATCH;
 
-       if (ucontrol->value.enumerated.item[0] >= control->max)
+       if (ucontrol->value.enumerated.item[0] >= control->items)
                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;
 }
@@ -194,13 +196,11 @@ static int ams_delta_get_audio_mode(struct snd_kcontrol *kcontrol,
        return 0;
 }
 
-static const struct soc_enum ams_delta_audio_enum[] = {
-       SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(ams_delta_audio_mode),
-                                               ams_delta_audio_mode),
-};
+static const SOC_ENUM_SINGLE_EXT_DECL(ams_delta_audio_enum,
+                                     ams_delta_audio_mode);
 
 static const struct snd_kcontrol_new ams_delta_audio_controls[] = {
-       SOC_ENUM_EXT("Audio Mode", ams_delta_audio_enum[0],
+       SOC_ENUM_EXT("Audio Mode", ams_delta_audio_enum,
                        ams_delta_get_audio_mode, ams_delta_set_audio_mode),
 };
 
@@ -315,12 +315,17 @@ static void cx81801_close(struct tty_struct *tty)
        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() */
This page took 0.031046 seconds and 5 git commands to generate.