Browse Source

Merge remote-tracking branch 'asoc/fix/dapm' into asoc-linus

Mark Brown 11 years ago
parent
commit
0d1203f291
1 changed files with 10 additions and 5 deletions
  1. 10 5
      sound/soc/soc-dapm.c

+ 10 - 5
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)
 static void dapm_kcontrol_free(struct snd_kcontrol *kctl)
 {
 {
 	struct dapm_kcontrol_data *data = snd_kcontrol_chip(kctl);
 	struct dapm_kcontrol_data *data = snd_kcontrol_chip(kctl);
-	kfree(data->widget);
 	kfree(data->wlist);
 	kfree(data->wlist);
 	kfree(data);
 	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);
 				"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);
 		ret = snd_soc_dapm_set_bias_level(d, SND_SOC_BIAS_PREPARE);
 		if (ret != 0)
 		if (ret != 0)
 			dev_err(d->dev,
 			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;
 		cpu_dai = rtd->cpu_dai;
 		codec_dai = rtd->codec_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;
 			continue;
 
 
 		/* there is no point in connecting BE DAI links with dummies */
 		/* there is no point in connecting BE DAI links with dummies */