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>
This commit is contained in:
Родитель
1d981e0a5a
Коммит
14197095e1
|
@ -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:
|
||||
|
|
Загрузка…
Ссылка в новой задаче