diff options
Diffstat (limited to 'sound/soc/soc-dapm.c')
| -rw-r--r-- | sound/soc/soc-dapm.c | 15 | 
1 files changed, 10 insertions, 5 deletions
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index c8a780d0d057..6d6ceee447d5 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c @@ -254,7 +254,6 @@ static int dapm_kcontrol_data_alloc(struct snd_soc_dapm_widget *widget,  static void dapm_kcontrol_free(struct snd_kcontrol *kctl)  {  	struct dapm_kcontrol_data *data = snd_kcontrol_chip(kctl); -	kfree(data->widget);  	kfree(data->wlist);  	kfree(data);  } @@ -1613,8 +1612,11 @@ static void dapm_pre_sequence_async(void *data, async_cookie_t cookie)  				"ASoC: Failed to turn on bias: %d\n", ret);  	} -	/* Prepare for a STADDBY->ON or ON->STANDBY transition */ -	if (d->bias_level != d->target_bias_level) { +	/* Prepare for a transition to ON or away from ON */ +	if ((d->target_bias_level == SND_SOC_BIAS_ON && +	     d->bias_level != SND_SOC_BIAS_ON) || +	    (d->target_bias_level != SND_SOC_BIAS_ON && +	     d->bias_level == SND_SOC_BIAS_ON)) {  		ret = snd_soc_dapm_set_bias_level(d, SND_SOC_BIAS_PREPARE);  		if (ret != 0)  			dev_err(d->dev, @@ -3476,8 +3478,11 @@ void snd_soc_dapm_connect_dai_link_widgets(struct snd_soc_card *card)  		cpu_dai = rtd->cpu_dai;  		codec_dai = rtd->codec_dai; -		/* dynamic FE links have no fixed DAI mapping */ -		if (rtd->dai_link->dynamic) +		/* +		 * dynamic FE links have no fixed DAI mapping. +		 * CODEC<->CODEC links have no direct connection. +		 */ +		if (rtd->dai_link->dynamic || rtd->dai_link->params)  			continue;  		/* there is no point in connecting BE DAI links with dummies */  | 

