[alsa-devel] [PATCH] ASoC: rt5640: change widgetsequencefordepop

Lars-Peter Clausen lars at metafoo.de
Tue Aug 6 11:35:37 CEST 2013


On 08/06/2013 11:13 AM, Bard Liao wrote:
>>> I think I need to use SND_SOC_DAPM_SWITCH with
>> SOC_DAPM_SINGLE_AUTODISABLE for this control.
>>> Am I right?
>>> I am trying to do that, but meet a problem.
>>> If I set speaker switch unmute before playing music, dapm will mute it
>> automatically in power on sequence.
>>> The only way I can unmute speaker is set speaker switch unmute while
>> playing music.
>>
>> DAPM should unmute the switch on power up and mute it on power down. The
>> Speaker Channel Switch control has the invert flag set did you also set the
>> invert flag for the new autodisable control?
>
> Yes, the related code is as below.
> static const struct snd_kcontrol_new spk_l_enable_control =
> 	SOC_DAPM_SINGLE_AUTODISABLE("Switch", RT5640_SPK_VOL,
> 		RT5640_L_MUTE_SFT, 1, 1);
>
> static const struct snd_kcontrol_new spk_r_enable_control =
> 	SOC_DAPM_SINGLE_AUTODISABLE("Switch", RT5640_SPK_VOL,
> 		RT5640_R_MUTE_SFT, 1, 1);
>
> 	SND_SOC_DAPM_SWITCH("Speaker L Playback", SND_SOC_NOPM, 0, 0,
> 			&spk_l_enable_control),
> 	SND_SOC_DAPM_SWITCH("Speaker R Playback", SND_SOC_NOPM, 0, 0,
> 			&spk_r_enable_control),

Looks good. Maybe I got the invert = 1 case wrong somewhere. Can you add a 
couple of printks and send me the result?

diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
index 2da258b..18c62ae 100644
--- a/sound/soc/soc-dapm.c
+++ b/sound/soc/soc-dapm.c
@@ -229,6 +229,9 @@
  			template.id = snd_soc_dapm_kcontrol;
  			template.name = kcontrol->id.name;

+			printk("new control: %s %d\n", template->name,
+				template->off_val);
+
  			data->widget = snd_soc_dapm_new_control(widget->dapm,
  				&template);
  			if (!data->widget) {
@@ -337,8 +340,10 @@
  	if (data->value == value)
  		return false;

-	if (data->widget)
+	if (data->widget) {
  		data->widget->on_val = value;
+		printk("%s->on_val = %d\n", data->widget->name, value);
+	}

  	data->value = value;



More information about the Alsa-devel mailing list