Commit 79323dc8 authored by Amadeusz Sławiński's avatar Amadeusz Sławiński Committed by Mark Brown

ASoC: dapm: Simplify widget clone

New DAPM widgets are created based on a provided template. When cloning
the data, the name and stream name also need to be cloned. Currently the
data and the names are initialized in different places. Simplify the
code by having entire initialization in one place.
Reviewed-by: default avatarCezary Rojewski <cezary.rojewski@intel.com>
Signed-off-by: default avatarAmadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
Reviewed-by: default avatarCharles Keepax <ckeepax@opensource.cirrus.com>
Link: https://lore.kernel.org/r/20231026113549.1897368-1-amadeuszx.slawinski@linux.intel.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent bb341f75
...@@ -320,7 +320,8 @@ EXPORT_SYMBOL_GPL(dapm_mark_endpoints_dirty); ...@@ -320,7 +320,8 @@ EXPORT_SYMBOL_GPL(dapm_mark_endpoints_dirty);
/* create a new dapm widget */ /* create a new dapm widget */
static inline struct snd_soc_dapm_widget *dapm_cnew_widget( static inline struct snd_soc_dapm_widget *dapm_cnew_widget(
const struct snd_soc_dapm_widget *_widget) const struct snd_soc_dapm_widget *_widget,
const char *prefix)
{ {
struct snd_soc_dapm_widget *w; struct snd_soc_dapm_widget *w;
...@@ -328,13 +329,19 @@ static inline struct snd_soc_dapm_widget *dapm_cnew_widget( ...@@ -328,13 +329,19 @@ static inline struct snd_soc_dapm_widget *dapm_cnew_widget(
if (!w) if (!w)
return NULL; return NULL;
/* if (prefix)
* w->name is duplicated in caller, but w->sname isn't. w->name = kasprintf(GFP_KERNEL, "%s %s", prefix, _widget->name);
* Duplicate it here if defined else
*/ w->name = kstrdup_const(_widget->name, GFP_KERNEL);
if (!w->name) {
kfree(w);
return NULL;
}
if (_widget->sname) { if (_widget->sname) {
w->sname = kstrdup_const(_widget->sname, GFP_KERNEL); w->sname = kstrdup_const(_widget->sname, GFP_KERNEL);
if (!w->sname) { if (!w->sname) {
kfree_const(w->name);
kfree(w); kfree(w);
return NULL; return NULL;
} }
...@@ -3629,20 +3636,12 @@ snd_soc_dapm_new_control_unlocked(struct snd_soc_dapm_context *dapm, ...@@ -3629,20 +3636,12 @@ snd_soc_dapm_new_control_unlocked(struct snd_soc_dapm_context *dapm,
{ {
enum snd_soc_dapm_direction dir; enum snd_soc_dapm_direction dir;
struct snd_soc_dapm_widget *w; struct snd_soc_dapm_widget *w;
const char *prefix;
int ret = -ENOMEM; int ret = -ENOMEM;
if ((w = dapm_cnew_widget(widget)) == NULL) w = dapm_cnew_widget(widget, soc_dapm_prefix(dapm));
if (!w)
goto cnew_failed; goto cnew_failed;
prefix = soc_dapm_prefix(dapm);
if (prefix)
w->name = kasprintf(GFP_KERNEL, "%s %s", prefix, widget->name);
else
w->name = kstrdup_const(widget->name, GFP_KERNEL);
if (!w->name)
goto name_failed;
switch (w->id) { switch (w->id) {
case snd_soc_dapm_regulator_supply: case snd_soc_dapm_regulator_supply:
w->regulator = devm_regulator_get(dapm->dev, widget->name); w->regulator = devm_regulator_get(dapm->dev, widget->name);
...@@ -3767,7 +3766,6 @@ snd_soc_dapm_new_control_unlocked(struct snd_soc_dapm_context *dapm, ...@@ -3767,7 +3766,6 @@ snd_soc_dapm_new_control_unlocked(struct snd_soc_dapm_context *dapm,
dev_err_probe(dapm->dev, ret, "ASoC: Failed to request %s\n", dev_err_probe(dapm->dev, ret, "ASoC: Failed to request %s\n",
w->name); w->name);
kfree_const(w->name); kfree_const(w->name);
name_failed:
kfree_const(w->sname); kfree_const(w->sname);
kfree(w); kfree(w);
cnew_failed: cnew_failed:
......
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