Loading sound/soc/intel/mfld_machine.c +41 −24 Original line number Diff line number Diff line Loading @@ -101,20 +101,27 @@ static int headset_set_switch(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); struct snd_soc_dapm_context *dapm = &codec->dapm; if (ucontrol->value.integer.value[0] == hs_switch) return 0; snd_soc_dapm_mutex_lock(dapm); if (ucontrol->value.integer.value[0]) { pr_debug("hs_set HS path\n"); snd_soc_dapm_enable_pin(&codec->dapm, "Headphones"); snd_soc_dapm_disable_pin(&codec->dapm, "EPOUT"); snd_soc_dapm_enable_pin_unlocked(dapm, "Headphones"); snd_soc_dapm_disable_pin_unlocked(dapm, "EPOUT"); } else { pr_debug("hs_set EP path\n"); snd_soc_dapm_disable_pin(&codec->dapm, "Headphones"); snd_soc_dapm_enable_pin(&codec->dapm, "EPOUT"); snd_soc_dapm_disable_pin_unlocked(dapm, "Headphones"); snd_soc_dapm_enable_pin_unlocked(dapm, "EPOUT"); } snd_soc_dapm_sync(&codec->dapm); snd_soc_dapm_sync_unlocked(dapm); snd_soc_dapm_mutex_unlock(dapm); hs_switch = ucontrol->value.integer.value[0]; return 0; Loading @@ -122,18 +129,20 @@ static int headset_set_switch(struct snd_kcontrol *kcontrol, static void lo_enable_out_pins(struct snd_soc_codec *codec) { snd_soc_dapm_enable_pin(&codec->dapm, "IHFOUTL"); snd_soc_dapm_enable_pin(&codec->dapm, "IHFOUTR"); snd_soc_dapm_enable_pin(&codec->dapm, "LINEOUTL"); snd_soc_dapm_enable_pin(&codec->dapm, "LINEOUTR"); snd_soc_dapm_enable_pin(&codec->dapm, "VIB1OUT"); snd_soc_dapm_enable_pin(&codec->dapm, "VIB2OUT"); struct snd_soc_dapm_context *dapm = &codec->dapm; snd_soc_dapm_enable_pin_unlocked(dapm, "IHFOUTL"); snd_soc_dapm_enable_pin_unlocked(dapm, "IHFOUTR"); snd_soc_dapm_enable_pin_unlocked(dapm, "LINEOUTL"); snd_soc_dapm_enable_pin_unlocked(dapm, "LINEOUTR"); snd_soc_dapm_enable_pin_unlocked(dapm, "VIB1OUT"); snd_soc_dapm_enable_pin_unlocked(dapm, "VIB2OUT"); if (hs_switch) { snd_soc_dapm_enable_pin(&codec->dapm, "Headphones"); snd_soc_dapm_disable_pin(&codec->dapm, "EPOUT"); snd_soc_dapm_enable_pin_unlocked(dapm, "Headphones"); snd_soc_dapm_disable_pin_unlocked(dapm, "EPOUT"); } else { snd_soc_dapm_disable_pin(&codec->dapm, "Headphones"); snd_soc_dapm_enable_pin(&codec->dapm, "EPOUT"); snd_soc_dapm_disable_pin_unlocked(dapm, "Headphones"); snd_soc_dapm_enable_pin_unlocked(dapm, "EPOUT"); } } Loading @@ -148,44 +157,52 @@ static int lo_set_switch(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); struct snd_soc_dapm_context *dapm = &codec->dapm; if (ucontrol->value.integer.value[0] == lo_dac) return 0; snd_soc_dapm_mutex_lock(dapm); /* we dont want to work with last state of lineout so just enable all * pins and then disable pins not required */ lo_enable_out_pins(codec); switch (ucontrol->value.integer.value[0]) { case 0: pr_debug("set vibra path\n"); snd_soc_dapm_disable_pin(&codec->dapm, "VIB1OUT"); snd_soc_dapm_disable_pin(&codec->dapm, "VIB2OUT"); snd_soc_dapm_disable_pin_unlocked(dapm, "VIB1OUT"); snd_soc_dapm_disable_pin_unlocked(dapm, "VIB2OUT"); snd_soc_update_bits(codec, SN95031_LOCTL, 0x66, 0); break; case 1: pr_debug("set hs path\n"); snd_soc_dapm_disable_pin(&codec->dapm, "Headphones"); snd_soc_dapm_disable_pin(&codec->dapm, "EPOUT"); snd_soc_dapm_disable_pin_unlocked(dapm, "Headphones"); snd_soc_dapm_disable_pin_unlocked(dapm, "EPOUT"); snd_soc_update_bits(codec, SN95031_LOCTL, 0x66, 0x22); break; case 2: pr_debug("set spkr path\n"); snd_soc_dapm_disable_pin(&codec->dapm, "IHFOUTL"); snd_soc_dapm_disable_pin(&codec->dapm, "IHFOUTR"); snd_soc_dapm_disable_pin_unlocked(dapm, "IHFOUTL"); snd_soc_dapm_disable_pin_unlocked(dapm, "IHFOUTR"); snd_soc_update_bits(codec, SN95031_LOCTL, 0x66, 0x44); break; case 3: pr_debug("set null path\n"); snd_soc_dapm_disable_pin(&codec->dapm, "LINEOUTL"); snd_soc_dapm_disable_pin(&codec->dapm, "LINEOUTR"); snd_soc_dapm_disable_pin_unlocked(dapm, "LINEOUTL"); snd_soc_dapm_disable_pin_unlocked(dapm, "LINEOUTR"); snd_soc_update_bits(codec, SN95031_LOCTL, 0x66, 0x66); break; } snd_soc_dapm_sync(&codec->dapm); snd_soc_dapm_sync_unlocked(dapm); snd_soc_dapm_mutex_unlock(dapm); lo_dac = ucontrol->value.integer.value[0]; return 0; } Loading Loading
sound/soc/intel/mfld_machine.c +41 −24 Original line number Diff line number Diff line Loading @@ -101,20 +101,27 @@ static int headset_set_switch(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); struct snd_soc_dapm_context *dapm = &codec->dapm; if (ucontrol->value.integer.value[0] == hs_switch) return 0; snd_soc_dapm_mutex_lock(dapm); if (ucontrol->value.integer.value[0]) { pr_debug("hs_set HS path\n"); snd_soc_dapm_enable_pin(&codec->dapm, "Headphones"); snd_soc_dapm_disable_pin(&codec->dapm, "EPOUT"); snd_soc_dapm_enable_pin_unlocked(dapm, "Headphones"); snd_soc_dapm_disable_pin_unlocked(dapm, "EPOUT"); } else { pr_debug("hs_set EP path\n"); snd_soc_dapm_disable_pin(&codec->dapm, "Headphones"); snd_soc_dapm_enable_pin(&codec->dapm, "EPOUT"); snd_soc_dapm_disable_pin_unlocked(dapm, "Headphones"); snd_soc_dapm_enable_pin_unlocked(dapm, "EPOUT"); } snd_soc_dapm_sync(&codec->dapm); snd_soc_dapm_sync_unlocked(dapm); snd_soc_dapm_mutex_unlock(dapm); hs_switch = ucontrol->value.integer.value[0]; return 0; Loading @@ -122,18 +129,20 @@ static int headset_set_switch(struct snd_kcontrol *kcontrol, static void lo_enable_out_pins(struct snd_soc_codec *codec) { snd_soc_dapm_enable_pin(&codec->dapm, "IHFOUTL"); snd_soc_dapm_enable_pin(&codec->dapm, "IHFOUTR"); snd_soc_dapm_enable_pin(&codec->dapm, "LINEOUTL"); snd_soc_dapm_enable_pin(&codec->dapm, "LINEOUTR"); snd_soc_dapm_enable_pin(&codec->dapm, "VIB1OUT"); snd_soc_dapm_enable_pin(&codec->dapm, "VIB2OUT"); struct snd_soc_dapm_context *dapm = &codec->dapm; snd_soc_dapm_enable_pin_unlocked(dapm, "IHFOUTL"); snd_soc_dapm_enable_pin_unlocked(dapm, "IHFOUTR"); snd_soc_dapm_enable_pin_unlocked(dapm, "LINEOUTL"); snd_soc_dapm_enable_pin_unlocked(dapm, "LINEOUTR"); snd_soc_dapm_enable_pin_unlocked(dapm, "VIB1OUT"); snd_soc_dapm_enable_pin_unlocked(dapm, "VIB2OUT"); if (hs_switch) { snd_soc_dapm_enable_pin(&codec->dapm, "Headphones"); snd_soc_dapm_disable_pin(&codec->dapm, "EPOUT"); snd_soc_dapm_enable_pin_unlocked(dapm, "Headphones"); snd_soc_dapm_disable_pin_unlocked(dapm, "EPOUT"); } else { snd_soc_dapm_disable_pin(&codec->dapm, "Headphones"); snd_soc_dapm_enable_pin(&codec->dapm, "EPOUT"); snd_soc_dapm_disable_pin_unlocked(dapm, "Headphones"); snd_soc_dapm_enable_pin_unlocked(dapm, "EPOUT"); } } Loading @@ -148,44 +157,52 @@ static int lo_set_switch(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); struct snd_soc_dapm_context *dapm = &codec->dapm; if (ucontrol->value.integer.value[0] == lo_dac) return 0; snd_soc_dapm_mutex_lock(dapm); /* we dont want to work with last state of lineout so just enable all * pins and then disable pins not required */ lo_enable_out_pins(codec); switch (ucontrol->value.integer.value[0]) { case 0: pr_debug("set vibra path\n"); snd_soc_dapm_disable_pin(&codec->dapm, "VIB1OUT"); snd_soc_dapm_disable_pin(&codec->dapm, "VIB2OUT"); snd_soc_dapm_disable_pin_unlocked(dapm, "VIB1OUT"); snd_soc_dapm_disable_pin_unlocked(dapm, "VIB2OUT"); snd_soc_update_bits(codec, SN95031_LOCTL, 0x66, 0); break; case 1: pr_debug("set hs path\n"); snd_soc_dapm_disable_pin(&codec->dapm, "Headphones"); snd_soc_dapm_disable_pin(&codec->dapm, "EPOUT"); snd_soc_dapm_disable_pin_unlocked(dapm, "Headphones"); snd_soc_dapm_disable_pin_unlocked(dapm, "EPOUT"); snd_soc_update_bits(codec, SN95031_LOCTL, 0x66, 0x22); break; case 2: pr_debug("set spkr path\n"); snd_soc_dapm_disable_pin(&codec->dapm, "IHFOUTL"); snd_soc_dapm_disable_pin(&codec->dapm, "IHFOUTR"); snd_soc_dapm_disable_pin_unlocked(dapm, "IHFOUTL"); snd_soc_dapm_disable_pin_unlocked(dapm, "IHFOUTR"); snd_soc_update_bits(codec, SN95031_LOCTL, 0x66, 0x44); break; case 3: pr_debug("set null path\n"); snd_soc_dapm_disable_pin(&codec->dapm, "LINEOUTL"); snd_soc_dapm_disable_pin(&codec->dapm, "LINEOUTR"); snd_soc_dapm_disable_pin_unlocked(dapm, "LINEOUTL"); snd_soc_dapm_disable_pin_unlocked(dapm, "LINEOUTR"); snd_soc_update_bits(codec, SN95031_LOCTL, 0x66, 0x66); break; } snd_soc_dapm_sync(&codec->dapm); snd_soc_dapm_sync_unlocked(dapm); snd_soc_dapm_mutex_unlock(dapm); lo_dac = ucontrol->value.integer.value[0]; return 0; } Loading