ASoC: wm_adsp: Factor out finding the location of an algorithm region
authorCharles Keepax <ckeepax@opensource.wolfsonmicro.com>
Tue, 15 Dec 2015 11:29:43 +0000 (11:29 +0000)
committerMark Brown <broonie@kernel.org>
Wed, 23 Dec 2015 00:20:50 +0000 (00:20 +0000)
Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/wm_adsp.c

index d1e0826c7db234cc60b8bba5c81bb031ef462baa..27abad9c6e73b0c896f6bfa6bb34eca79a211494 100644 (file)
@@ -1365,6 +1365,19 @@ static void *wm_adsp_read_algs(struct wm_adsp *dsp, size_t n_algs,
        return alg;
 }
 
+static struct wm_adsp_alg_region *
+       wm_adsp_find_alg_region(struct wm_adsp *dsp, int type, unsigned int id)
+{
+       struct wm_adsp_alg_region *alg_region;
+
+       list_for_each_entry(alg_region, &dsp->alg_regions, list) {
+               if (id == alg_region->alg && type == alg_region->type)
+                       return alg_region;
+       }
+
+       return NULL;
+}
+
 static struct wm_adsp_alg_region *wm_adsp_create_region(struct wm_adsp *dsp,
                                                        int type, __be32 id,
                                                        __be32 base)
@@ -1737,22 +1750,16 @@ static int wm_adsp_load_coeff(struct wm_adsp *dsp)
                                break;
                        }
 
-                       reg = 0;
-                       list_for_each_entry(alg_region,
-                                           &dsp->alg_regions, list) {
-                               if (le32_to_cpu(blk->id) == alg_region->alg &&
-                                   type == alg_region->type) {
-                                       reg = alg_region->base;
-                                       reg = wm_adsp_region_to_reg(mem,
-                                                                   reg);
-                                       reg += offset;
-                                       break;
-                               }
-                       }
-
-                       if (reg == 0)
+                       alg_region = wm_adsp_find_alg_region(dsp, type,
+                                               le32_to_cpu(blk->id));
+                       if (alg_region) {
+                               reg = alg_region->base;
+                               reg = wm_adsp_region_to_reg(mem, reg);
+                               reg += offset;
+                       } else {
                                adsp_err(dsp, "No %x for algorithm %x\n",
                                         type, le32_to_cpu(blk->id));
+                       }
                        break;
 
                default: