Merge remote-tracking branch 'asoc/topic/adsp' into asoc-next
authorMark Brown <broonie@linaro.org>
Fri, 8 Nov 2013 10:43:21 +0000 (10:43 +0000)
committerMark Brown <broonie@linaro.org>
Fri, 8 Nov 2013 10:43:21 +0000 (10:43 +0000)
sound/soc/codecs/wm_adsp.c

index 60b6b593c4072c843335c9df295dc3d56132bc5b..df95e5a83889a1fd315c58c70256ab9fd7ea2acd 100644 (file)
@@ -396,11 +396,12 @@ static int wm_coeff_write_control(struct snd_kcontrol *kcontrol,
        ret = regmap_raw_write(adsp->regmap, reg, scratch,
                               ctl->len);
        if (ret) {
-               adsp_err(adsp, "Failed to write %zu bytes to %x\n",
-                        ctl->len, reg);
+               adsp_err(adsp, "Failed to write %zu bytes to %x: %d\n",
+                        ctl->len, reg, ret);
                kfree(scratch);
                return ret;
        }
+       adsp_dbg(adsp, "Wrote %zu bytes to %x\n", ctl->len, reg);
 
        kfree(scratch);
 
@@ -450,11 +451,12 @@ static int wm_coeff_read_control(struct snd_kcontrol *kcontrol,
 
        ret = regmap_raw_read(adsp->regmap, reg, scratch, ctl->len);
        if (ret) {
-               adsp_err(adsp, "Failed to read %zu bytes from %x\n",
-                        ctl->len, reg);
+               adsp_err(adsp, "Failed to read %zu bytes from %x: %d\n",
+                        ctl->len, reg, ret);
                kfree(scratch);
                return ret;
        }
+       adsp_dbg(adsp, "Read %zu bytes from %x\n", ctl->len, reg);
 
        memcpy(buf, scratch, ctl->len);
        kfree(scratch);
@@ -568,6 +570,7 @@ static int wm_adsp_load(struct wm_adsp *dsp)
                         file, header->ver);
                goto out_fw;
        }
+       adsp_info(dsp, "Firmware version: %d\n", header->ver);
 
        if (header->core != dsp->type) {
                adsp_err(dsp, "%s: invalid core %d != %d\n",
@@ -689,7 +692,8 @@ static int wm_adsp_load(struct wm_adsp *dsp)
                                                &buf_list);
                        if (!buf) {
                                adsp_err(dsp, "Out of memory\n");
-                               return -ENOMEM;
+                               ret = -ENOMEM;
+                               goto out_fw;
                        }
 
                        ret = regmap_raw_write_async(regmap, reg, buf->buf,
@@ -1318,8 +1322,8 @@ static int wm_adsp_load_coeff(struct wm_adsp *dsp)
                                                     le32_to_cpu(blk->len));
                        if (ret != 0) {
                                adsp_err(dsp,
-                                       "%s.%d: Failed to write to %x in %s\n",
-                                       file, blocks, reg, region_name);
+                                       "%s.%d: Failed to write to %x in %s: %d\n",
+                                       file, blocks, reg, region_name, ret);
                        }
                }
 
@@ -1363,6 +1367,7 @@ int wm_adsp1_event(struct snd_soc_dapm_widget *w,
        struct snd_soc_codec *codec = w->codec;
        struct wm_adsp *dsps = snd_soc_codec_get_drvdata(codec);
        struct wm_adsp *dsp = &dsps[w->shift];
+       struct wm_adsp_alg_region *alg_region;
        struct wm_coeff_ctl *ctl;
        int ret;
        int val;
@@ -1440,6 +1445,14 @@ int wm_adsp1_event(struct snd_soc_dapm_widget *w,
 
                list_for_each_entry(ctl, &dsp->ctl_list, list)
                        ctl->enabled = 0;
+
+               while (!list_empty(&dsp->alg_regions)) {
+                       alg_region = list_first_entry(&dsp->alg_regions,
+                                                     struct wm_adsp_alg_region,
+                                                     list);
+                       list_del(&alg_region->list);
+                       kfree(alg_region);
+               }
                break;
 
        default: