diff options
author | Charles Keepax <ckeepax@opensource.cirrus.com> | 2021-09-13 17:00:43 +0100 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2021-09-27 13:00:29 +0100 |
commit | 6477960755fb2c0ca9b0497bc86abfa4ee173556 (patch) | |
tree | 5fff915263426620d64de8844cde48884c9fb8f4 /sound/soc/codecs/wm_adsp.c | |
parent | d07a6d454ffa310ee306d57f486eb64380bbdfff (diff) | |
download | lwn-6477960755fb2c0ca9b0497bc86abfa4ee173556.tar.gz lwn-6477960755fb2c0ca9b0497bc86abfa4ee173556.zip |
ASoC: wm_adsp: Move check for control existence
Checking earlier in the function if a control already exists avoids
superfluous string construction and also prepares for future
refactoring.
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Signed-off-by: Simon Trimmer <simont@opensource.cirrus.com>
Link: https://lore.kernel.org/r/20210913160057.103842-3-simont@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/codecs/wm_adsp.c')
-rw-r--r-- | sound/soc/codecs/wm_adsp.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c index f5db6e3b9f60..b300af6fdd41 100644 --- a/sound/soc/codecs/wm_adsp.c +++ b/sound/soc/codecs/wm_adsp.c @@ -1422,6 +1422,19 @@ static int wm_adsp_create_control(struct wm_adsp *dsp, const char *region_name; int ret; + list_for_each_entry(ctl, &dsp->ctl_list, list) { + if (ctl->fw_name == wm_adsp_fw_text[dsp->fw] && + ctl->alg_region.alg == alg_region->alg && + ctl->alg_region.type == alg_region->type) { + if ((!subname && !ctl->subname) || + (subname && !strncmp(ctl->subname, subname, ctl->subname_len))) { + if (!ctl->enabled) + ctl->enabled = 1; + return 0; + } + } + } + region_name = wm_adsp_mem_region_name(alg_region->type); if (!region_name) { adsp_err(dsp, "Unknown region type: %d\n", alg_region->type); @@ -1462,14 +1475,6 @@ static int wm_adsp_create_control(struct wm_adsp *dsp, " %.*s", subname_len - skip, subname + skip); } - list_for_each_entry(ctl, &dsp->ctl_list, list) { - if (!strcmp(ctl->name, name)) { - if (!ctl->enabled) - ctl->enabled = 1; - return 0; - } - } - ctl = kzalloc(sizeof(*ctl), GFP_KERNEL); if (!ctl) return -ENOMEM; |