|
@@ -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 */
|