aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Brown <broonie@opensource.wolfsonmicro.com>2013-04-09 12:08:24 -0400
committerMark Brown <broonie@opensource.wolfsonmicro.com>2013-04-11 13:14:47 -0400
commitac50009f64c65f0ec8406a33846c1e41d3b33ff7 (patch)
tree57dd82d893d527beb886c55c8b60576d00fa5822
parentdd84f9259bfe8454ee7c9e6faf6ac13f45bb1ed2 (diff)
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>
-rw-r--r--sound/soc/codecs/wm_adsp.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c
index 68eda929fbde..a793c7d951ce 100644
--- a/sound/soc/codecs/wm_adsp.c
+++ b/sound/soc/codecs/wm_adsp.c
@@ -565,6 +565,22 @@ static int wm_adsp_setup_algs(struct wm_adsp *dsp)
565 be32_to_cpu(adsp1_id.fw.ver) & 0xff, 565 be32_to_cpu(adsp1_id.fw.ver) & 0xff,
566 algs); 566 algs);
567 567
568 region = kzalloc(sizeof(*region), GFP_KERNEL);
569 if (!region)
570 return -ENOMEM;
571 region->type = WMFW_ADSP1_ZM;
572 region->alg = be32_to_cpu(adsp1_id.fw.id);
573 region->base = be32_to_cpu(adsp1_id.zm);
574 list_add_tail(&region->list, &dsp->alg_regions);
575
576 region = kzalloc(sizeof(*region), GFP_KERNEL);
577 if (!region)
578 return -ENOMEM;
579 region->type = WMFW_ADSP1_DM;
580 region->alg = be32_to_cpu(adsp1_id.fw.id);
581 region->base = be32_to_cpu(adsp1_id.dm);
582 list_add_tail(&region->list, &dsp->alg_regions);
583
568 pos = sizeof(adsp1_id) / 2; 584 pos = sizeof(adsp1_id) / 2;
569 term = pos + ((sizeof(*adsp1_alg) * algs) / 2); 585 term = pos + ((sizeof(*adsp1_alg) * algs) / 2);
570 break; 586 break;
@@ -590,6 +606,30 @@ static int wm_adsp_setup_algs(struct wm_adsp *dsp)
590 be32_to_cpu(adsp2_id.fw.ver) & 0xff, 606 be32_to_cpu(adsp2_id.fw.ver) & 0xff,
591 algs); 607 algs);
592 608
609 region = kzalloc(sizeof(*region), GFP_KERNEL);
610 if (!region)
611 return -ENOMEM;
612 region->type = WMFW_ADSP2_XM;
613 region->alg = be32_to_cpu(adsp2_id.fw.id);
614 region->base = be32_to_cpu(adsp2_id.xm);
615 list_add_tail(&region->list, &dsp->alg_regions);
616
617 region = kzalloc(sizeof(*region), GFP_KERNEL);
618 if (!region)
619 return -ENOMEM;
620 region->type = WMFW_ADSP2_YM;
621 region->alg = be32_to_cpu(adsp2_id.fw.id);
622 region->base = be32_to_cpu(adsp2_id.ym);
623 list_add_tail(&region->list, &dsp->alg_regions);
624
625 region = kzalloc(sizeof(*region), GFP_KERNEL);
626 if (!region)
627 return -ENOMEM;
628 region->type = WMFW_ADSP2_ZM;
629 region->alg = be32_to_cpu(adsp2_id.fw.id);
630 region->base = be32_to_cpu(adsp2_id.zm);
631 list_add_tail(&region->list, &dsp->alg_regions);
632
593 pos = sizeof(adsp2_id) / 2; 633 pos = sizeof(adsp2_id) / 2;
594 term = pos + ((sizeof(*adsp2_alg) * algs) / 2); 634 term = pos + ((sizeof(*adsp2_alg) * algs) / 2);
595 break; 635 break;