ASoC: wm_adsp: Add support for firmware wide coefficient blocks
Firmwares may provide some firmware wide configuration regions which can be configured by the coefficient files using the firmware ID as the algorithm ID, include these in the algorithm list. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
dd84f9259b
commit
ac50009f64
|
@ -565,6 +565,22 @@ static int wm_adsp_setup_algs(struct wm_adsp *dsp)
|
||||||
be32_to_cpu(adsp1_id.fw.ver) & 0xff,
|
be32_to_cpu(adsp1_id.fw.ver) & 0xff,
|
||||||
algs);
|
algs);
|
||||||
|
|
||||||
|
region = kzalloc(sizeof(*region), GFP_KERNEL);
|
||||||
|
if (!region)
|
||||||
|
return -ENOMEM;
|
||||||
|
region->type = WMFW_ADSP1_ZM;
|
||||||
|
region->alg = be32_to_cpu(adsp1_id.fw.id);
|
||||||
|
region->base = be32_to_cpu(adsp1_id.zm);
|
||||||
|
list_add_tail(®ion->list, &dsp->alg_regions);
|
||||||
|
|
||||||
|
region = kzalloc(sizeof(*region), GFP_KERNEL);
|
||||||
|
if (!region)
|
||||||
|
return -ENOMEM;
|
||||||
|
region->type = WMFW_ADSP1_DM;
|
||||||
|
region->alg = be32_to_cpu(adsp1_id.fw.id);
|
||||||
|
region->base = be32_to_cpu(adsp1_id.dm);
|
||||||
|
list_add_tail(®ion->list, &dsp->alg_regions);
|
||||||
|
|
||||||
pos = sizeof(adsp1_id) / 2;
|
pos = sizeof(adsp1_id) / 2;
|
||||||
term = pos + ((sizeof(*adsp1_alg) * algs) / 2);
|
term = pos + ((sizeof(*adsp1_alg) * algs) / 2);
|
||||||
break;
|
break;
|
||||||
|
@ -590,6 +606,30 @@ static int wm_adsp_setup_algs(struct wm_adsp *dsp)
|
||||||
be32_to_cpu(adsp2_id.fw.ver) & 0xff,
|
be32_to_cpu(adsp2_id.fw.ver) & 0xff,
|
||||||
algs);
|
algs);
|
||||||
|
|
||||||
|
region = kzalloc(sizeof(*region), GFP_KERNEL);
|
||||||
|
if (!region)
|
||||||
|
return -ENOMEM;
|
||||||
|
region->type = WMFW_ADSP2_XM;
|
||||||
|
region->alg = be32_to_cpu(adsp2_id.fw.id);
|
||||||
|
region->base = be32_to_cpu(adsp2_id.xm);
|
||||||
|
list_add_tail(®ion->list, &dsp->alg_regions);
|
||||||
|
|
||||||
|
region = kzalloc(sizeof(*region), GFP_KERNEL);
|
||||||
|
if (!region)
|
||||||
|
return -ENOMEM;
|
||||||
|
region->type = WMFW_ADSP2_YM;
|
||||||
|
region->alg = be32_to_cpu(adsp2_id.fw.id);
|
||||||
|
region->base = be32_to_cpu(adsp2_id.ym);
|
||||||
|
list_add_tail(®ion->list, &dsp->alg_regions);
|
||||||
|
|
||||||
|
region = kzalloc(sizeof(*region), GFP_KERNEL);
|
||||||
|
if (!region)
|
||||||
|
return -ENOMEM;
|
||||||
|
region->type = WMFW_ADSP2_ZM;
|
||||||
|
region->alg = be32_to_cpu(adsp2_id.fw.id);
|
||||||
|
region->base = be32_to_cpu(adsp2_id.zm);
|
||||||
|
list_add_tail(®ion->list, &dsp->alg_regions);
|
||||||
|
|
||||||
pos = sizeof(adsp2_id) / 2;
|
pos = sizeof(adsp2_id) / 2;
|
||||||
term = pos + ((sizeof(*adsp2_alg) * algs) / 2);
|
term = pos + ((sizeof(*adsp2_alg) * algs) / 2);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue