goto err;
                }
 
+               dsp->running = true;
+
                if (wm_adsp_fw[dsp->fw].num_caps != 0) {
                        ret = wm_adsp_buffer_init(dsp);
                        if (ret < 0)
                                goto err;
                }
 
-               dsp->running = true;
-
                mutex_unlock(&dsp->pwr_lock);
                break;
 
 {
        struct wm_adsp_host_buf_coeff_v1 coeff_v1;
        struct wm_adsp_compr_buf *buf;
-       unsigned int reg, version;
-       __be32 bufp;
+       unsigned int version;
        int ret, i;
 
-       ret = wm_coeff_base_reg(ctl, ®);
-       if (ret)
-               return ret;
-
        for (i = 0; i < 5; ++i) {
-               ret = regmap_raw_read(ctl->dsp->regmap, reg, &bufp, sizeof(bufp));
+               ret = wm_coeff_read_ctrl(ctl, &coeff_v1, sizeof(coeff_v1));
                if (ret < 0)
                        return ret;
 
-               if (bufp)
+               if (coeff_v1.host_buf_ptr)
                        break;
 
                usleep_range(1000, 2000);
        }
 
-       if (!bufp) {
+       if (!coeff_v1.host_buf_ptr) {
                adsp_err(ctl->dsp, "Failed to acquire host buffer\n");
                return -EIO;
        }
                return -ENOMEM;
 
        buf->host_buf_mem_type = ctl->alg_region.type;
-       buf->host_buf_ptr = be32_to_cpu(bufp);
+       buf->host_buf_ptr = be32_to_cpu(coeff_v1.host_buf_ptr);
 
        ret = wm_adsp_buffer_populate(buf);
        if (ret < 0)
                return 0;
        }
 
-       ret = regmap_raw_read(ctl->dsp->regmap, reg, &coeff_v1,
-                             sizeof(coeff_v1));
-       if (ret < 0)
-               return ret;
-
        version = be32_to_cpu(coeff_v1.versions) & HOST_BUF_COEFF_COMPAT_VER_MASK;
        version >>= HOST_BUF_COEFF_COMPAT_VER_SHIFT;