Commit 19532a24 authored by Mark Brown's avatar Mark Brown

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

parents 389dcb9d 639467c8
...@@ -363,6 +363,10 @@ static int dapm_kcontrol_data_alloc(struct snd_soc_dapm_widget *widget, ...@@ -363,6 +363,10 @@ static int dapm_kcontrol_data_alloc(struct snd_soc_dapm_widget *widget,
snd_soc_dapm_new_control_unlocked(widget->dapm, snd_soc_dapm_new_control_unlocked(widget->dapm,
&template); &template);
kfree(name); kfree(name);
if (IS_ERR(data->widget)) {
ret = PTR_ERR(data->widget);
goto err_data;
}
if (!data->widget) { if (!data->widget) {
ret = -ENOMEM; ret = -ENOMEM;
goto err_data; goto err_data;
...@@ -397,6 +401,10 @@ static int dapm_kcontrol_data_alloc(struct snd_soc_dapm_widget *widget, ...@@ -397,6 +401,10 @@ static int dapm_kcontrol_data_alloc(struct snd_soc_dapm_widget *widget,
data->widget = snd_soc_dapm_new_control_unlocked( data->widget = snd_soc_dapm_new_control_unlocked(
widget->dapm, &template); widget->dapm, &template);
kfree(name); kfree(name);
if (IS_ERR(data->widget)) {
ret = PTR_ERR(data->widget);
goto err_data;
}
if (!data->widget) { if (!data->widget) {
ret = -ENOMEM; ret = -ENOMEM;
goto err_data; goto err_data;
...@@ -3403,11 +3411,22 @@ snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm, ...@@ -3403,11 +3411,22 @@ snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm,
mutex_lock_nested(&dapm->card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME); mutex_lock_nested(&dapm->card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME);
w = snd_soc_dapm_new_control_unlocked(dapm, widget); w = snd_soc_dapm_new_control_unlocked(dapm, widget);
/* Do not nag about probe deferrals */
if (IS_ERR(w)) {
int ret = PTR_ERR(w);
if (ret != -EPROBE_DEFER)
dev_err(dapm->dev,
"ASoC: Failed to create DAPM control %s (%d)\n",
widget->name, ret);
goto out_unlock;
}
if (!w) if (!w)
dev_err(dapm->dev, dev_err(dapm->dev,
"ASoC: Failed to create DAPM control %s\n", "ASoC: Failed to create DAPM control %s\n",
widget->name); widget->name);
out_unlock:
mutex_unlock(&dapm->card->dapm_mutex); mutex_unlock(&dapm->card->dapm_mutex);
return w; return w;
} }
...@@ -3430,6 +3449,8 @@ snd_soc_dapm_new_control_unlocked(struct snd_soc_dapm_context *dapm, ...@@ -3430,6 +3449,8 @@ snd_soc_dapm_new_control_unlocked(struct snd_soc_dapm_context *dapm,
w->regulator = devm_regulator_get(dapm->dev, w->name); w->regulator = devm_regulator_get(dapm->dev, w->name);
if (IS_ERR(w->regulator)) { if (IS_ERR(w->regulator)) {
ret = PTR_ERR(w->regulator); ret = PTR_ERR(w->regulator);
if (ret == -EPROBE_DEFER)
return ERR_PTR(ret);
dev_err(dapm->dev, "ASoC: Failed to request %s: %d\n", dev_err(dapm->dev, "ASoC: Failed to request %s: %d\n",
w->name, ret); w->name, ret);
return NULL; return NULL;
...@@ -3448,6 +3469,8 @@ snd_soc_dapm_new_control_unlocked(struct snd_soc_dapm_context *dapm, ...@@ -3448,6 +3469,8 @@ snd_soc_dapm_new_control_unlocked(struct snd_soc_dapm_context *dapm,
w->clk = devm_clk_get(dapm->dev, w->name); w->clk = devm_clk_get(dapm->dev, w->name);
if (IS_ERR(w->clk)) { if (IS_ERR(w->clk)) {
ret = PTR_ERR(w->clk); ret = PTR_ERR(w->clk);
if (ret == -EPROBE_DEFER)
return ERR_PTR(ret);
dev_err(dapm->dev, "ASoC: Failed to request %s: %d\n", dev_err(dapm->dev, "ASoC: Failed to request %s: %d\n",
w->name, ret); w->name, ret);
return NULL; return NULL;
...@@ -3566,6 +3589,16 @@ int snd_soc_dapm_new_controls(struct snd_soc_dapm_context *dapm, ...@@ -3566,6 +3589,16 @@ int snd_soc_dapm_new_controls(struct snd_soc_dapm_context *dapm,
mutex_lock_nested(&dapm->card->dapm_mutex, SND_SOC_DAPM_CLASS_INIT); mutex_lock_nested(&dapm->card->dapm_mutex, SND_SOC_DAPM_CLASS_INIT);
for (i = 0; i < num; i++) { for (i = 0; i < num; i++) {
w = snd_soc_dapm_new_control_unlocked(dapm, widget); w = snd_soc_dapm_new_control_unlocked(dapm, widget);
if (IS_ERR(w)) {
ret = PTR_ERR(w);
/* Do not nag about probe deferrals */
if (ret == -EPROBE_DEFER)
break;
dev_err(dapm->dev,
"ASoC: Failed to create DAPM control %s (%d)\n",
widget->name, ret);
break;
}
if (!w) { if (!w) {
dev_err(dapm->dev, dev_err(dapm->dev,
"ASoC: Failed to create DAPM control %s\n", "ASoC: Failed to create DAPM control %s\n",
...@@ -3842,6 +3875,15 @@ int snd_soc_dapm_new_pcm(struct snd_soc_card *card, ...@@ -3842,6 +3875,15 @@ int snd_soc_dapm_new_pcm(struct snd_soc_card *card,
dev_dbg(card->dev, "ASoC: adding %s widget\n", link_name); dev_dbg(card->dev, "ASoC: adding %s widget\n", link_name);
w = snd_soc_dapm_new_control_unlocked(&card->dapm, &template); w = snd_soc_dapm_new_control_unlocked(&card->dapm, &template);
if (IS_ERR(w)) {
ret = PTR_ERR(w);
/* Do not nag about probe deferrals */
if (ret != -EPROBE_DEFER)
dev_err(card->dev,
"ASoC: Failed to create %s widget (%d)\n",
link_name, ret);
goto outfree_kcontrol_news;
}
if (!w) { if (!w) {
dev_err(card->dev, "ASoC: Failed to create %s widget\n", dev_err(card->dev, "ASoC: Failed to create %s widget\n",
link_name); link_name);
...@@ -3893,6 +3935,16 @@ int snd_soc_dapm_new_dai_widgets(struct snd_soc_dapm_context *dapm, ...@@ -3893,6 +3935,16 @@ int snd_soc_dapm_new_dai_widgets(struct snd_soc_dapm_context *dapm,
template.name); template.name);
w = snd_soc_dapm_new_control_unlocked(dapm, &template); w = snd_soc_dapm_new_control_unlocked(dapm, &template);
if (IS_ERR(w)) {
int ret = PTR_ERR(w);
/* Do not nag about probe deferrals */
if (ret != -EPROBE_DEFER)
dev_err(dapm->dev,
"ASoC: Failed to create %s widget (%d)\n",
dai->driver->playback.stream_name, ret);
return ret;
}
if (!w) { if (!w) {
dev_err(dapm->dev, "ASoC: Failed to create %s widget\n", dev_err(dapm->dev, "ASoC: Failed to create %s widget\n",
dai->driver->playback.stream_name); dai->driver->playback.stream_name);
...@@ -3912,6 +3964,16 @@ int snd_soc_dapm_new_dai_widgets(struct snd_soc_dapm_context *dapm, ...@@ -3912,6 +3964,16 @@ int snd_soc_dapm_new_dai_widgets(struct snd_soc_dapm_context *dapm,
template.name); template.name);
w = snd_soc_dapm_new_control_unlocked(dapm, &template); w = snd_soc_dapm_new_control_unlocked(dapm, &template);
if (IS_ERR(w)) {
int ret = PTR_ERR(w);
/* Do not nag about probe deferrals */
if (ret != -EPROBE_DEFER)
dev_err(dapm->dev,
"ASoC: Failed to create %s widget (%d)\n",
dai->driver->playback.stream_name, ret);
return ret;
}
if (!w) { if (!w) {
dev_err(dapm->dev, "ASoC: Failed to create %s widget\n", dev_err(dapm->dev, "ASoC: Failed to create %s widget\n",
dai->driver->capture.stream_name); dai->driver->capture.stream_name);
......
...@@ -1555,6 +1555,15 @@ static int soc_tplg_dapm_widget_create(struct soc_tplg *tplg, ...@@ -1555,6 +1555,15 @@ static int soc_tplg_dapm_widget_create(struct soc_tplg *tplg,
widget = snd_soc_dapm_new_control(dapm, &template); widget = snd_soc_dapm_new_control(dapm, &template);
else else
widget = snd_soc_dapm_new_control_unlocked(dapm, &template); widget = snd_soc_dapm_new_control_unlocked(dapm, &template);
if (IS_ERR(widget)) {
ret = PTR_ERR(widget);
/* Do not nag about probe deferrals */
if (ret != -EPROBE_DEFER)
dev_err(tplg->dev,
"ASoC: failed to create widget %s controls (%d)\n",
w->name, ret);
goto hdr_err;
}
if (widget == NULL) { if (widget == NULL) {
dev_err(tplg->dev, "ASoC: failed to create widget %s controls\n", dev_err(tplg->dev, "ASoC: failed to create widget %s controls\n",
w->name); w->name);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment