OSDN Git Service

ASoC: wm_adsp: Move check for control existence
authorCharles Keepax <ckeepax@opensource.cirrus.com>
Mon, 13 Sep 2021 16:00:43 +0000 (17:00 +0100)
committerMark Brown <broonie@kernel.org>
Mon, 27 Sep 2021 12:00:29 +0000 (13:00 +0100)
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>
sound/soc/codecs/wm_adsp.c

index f5db6e3..b300af6 100644 (file)
@@ -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;