diff options
author | Charles Keepax <ckeepax@opensource.wolfsonmicro.com> | 2015-12-15 11:29:43 +0000 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2015-12-23 00:20:50 +0000 |
commit | 14197095e14a4ad2afb6c8c1ca8e41852382481d (patch) | |
tree | e317b6c75440ba7a505a5d77e741f272ee98bdc1 /sound/soc/codecs/wm_adsp.c | |
parent | 1d981e0a5af78339d55085041c6eb3b9a8626920 (diff) | |
download | lwn-14197095e14a4ad2afb6c8c1ca8e41852382481d.tar.gz lwn-14197095e14a4ad2afb6c8c1ca8e41852382481d.zip |
ASoC: wm_adsp: Factor out finding the location of an algorithm region
Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.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 | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c index d1e0826c7db2..27abad9c6e73 100644 --- a/sound/soc/codecs/wm_adsp.c +++ b/sound/soc/codecs/wm_adsp.c @@ -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: |