ASoC: wm_adsp: Implement support for coefficeint file format 1
Implement support for a new revision of the coefficeint file format for ADSP cores. Since coefficient file format 0 has not been widely deployed and is very unlikely to ever be used with this driver code support for it has been removed. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
5e7a7a221f
commit
c712326d6c
2 changed files with 25 additions and 10 deletions
|
@ -686,6 +686,16 @@ static int wm_adsp_load_coeff(struct wm_adsp *dsp)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch (be32_to_cpu(hdr->rev) & 0xff) {
|
||||||
|
case 1:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
adsp_err(dsp, "%s: Unsupported coefficient file format %d\n",
|
||||||
|
file, be32_to_cpu(hdr->rev) & 0xff);
|
||||||
|
ret = -EINVAL;
|
||||||
|
goto out_fw;
|
||||||
|
}
|
||||||
|
|
||||||
adsp_dbg(dsp, "%s: v%d.%d.%d\n", file,
|
adsp_dbg(dsp, "%s: v%d.%d.%d\n", file,
|
||||||
(le32_to_cpu(hdr->ver) >> 16) & 0xff,
|
(le32_to_cpu(hdr->ver) >> 16) & 0xff,
|
||||||
(le32_to_cpu(hdr->ver) >> 8) & 0xff,
|
(le32_to_cpu(hdr->ver) >> 8) & 0xff,
|
||||||
|
@ -698,8 +708,8 @@ static int wm_adsp_load_coeff(struct wm_adsp *dsp)
|
||||||
pos - firmware->size > sizeof(*blk)) {
|
pos - firmware->size > sizeof(*blk)) {
|
||||||
blk = (void*)(&firmware->data[pos]);
|
blk = (void*)(&firmware->data[pos]);
|
||||||
|
|
||||||
type = be32_to_cpu(blk->type) & 0xff;
|
type = le16_to_cpu(blk->type);
|
||||||
offset = le32_to_cpu(blk->offset) & 0xffffff;
|
offset = le16_to_cpu(blk->offset);
|
||||||
|
|
||||||
adsp_dbg(dsp, "%s.%d: %x v%d.%d.%d\n",
|
adsp_dbg(dsp, "%s.%d: %x v%d.%d.%d\n",
|
||||||
file, blocks, le32_to_cpu(blk->id),
|
file, blocks, le32_to_cpu(blk->id),
|
||||||
|
@ -712,10 +722,10 @@ static int wm_adsp_load_coeff(struct wm_adsp *dsp)
|
||||||
reg = 0;
|
reg = 0;
|
||||||
region_name = "Unknown";
|
region_name = "Unknown";
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case WMFW_NAME_TEXT:
|
case (WMFW_NAME_TEXT << 8):
|
||||||
case WMFW_INFO_TEXT:
|
case (WMFW_INFO_TEXT << 8):
|
||||||
break;
|
break;
|
||||||
case WMFW_ABSOLUTE:
|
case (WMFW_ABSOLUTE << 8):
|
||||||
region_name = "register";
|
region_name = "register";
|
||||||
reg = offset;
|
reg = offset;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -93,15 +93,20 @@ struct wmfw_adsp2_alg_hdr {
|
||||||
struct wmfw_coeff_hdr {
|
struct wmfw_coeff_hdr {
|
||||||
u8 magic[4];
|
u8 magic[4];
|
||||||
__le32 len;
|
__le32 len;
|
||||||
|
union {
|
||||||
|
__be32 rev;
|
||||||
__le32 ver;
|
__le32 ver;
|
||||||
|
};
|
||||||
|
union {
|
||||||
|
__be32 core;
|
||||||
|
__le32 core_ver;
|
||||||
|
};
|
||||||
u8 data[];
|
u8 data[];
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
struct wmfw_coeff_item {
|
struct wmfw_coeff_item {
|
||||||
union {
|
__le16 offset;
|
||||||
__be32 type;
|
__le16 type;
|
||||||
__le32 offset;
|
|
||||||
};
|
|
||||||
__le32 id;
|
__le32 id;
|
||||||
__le32 ver;
|
__le32 ver;
|
||||||
__le32 sr;
|
__le32 sr;
|
||||||
|
|
Loading…
Add table
Reference in a new issue