Merge remote-tracking branches 'asoc/topic/wm9090', 'asoc/topic/wm9712', 'asoc/topic/wm9713' and 'asoc/topic/wm_adsp' into asoc-next
This commit is contained in:
@@ -1239,9 +1239,16 @@ static int wm_coeff_init_control_caches(struct wm_adsp *dsp)
|
||||
if (ctl->flags & WMFW_CTL_FLAG_VOLATILE)
|
||||
continue;
|
||||
|
||||
ret = wm_coeff_read_control(ctl, ctl->cache, ctl->len);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
/*
|
||||
* For readable controls populate the cache from the DSP memory.
|
||||
* For non-readable controls the cache was zero-filled when
|
||||
* created so we don't need to do anything.
|
||||
*/
|
||||
if (!ctl->flags || (ctl->flags & WMFW_CTL_FLAG_READABLE)) {
|
||||
ret = wm_coeff_read_control(ctl, ctl->cache, ctl->len);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -3253,6 +3260,13 @@ static int wm_adsp_buffer_populate(struct wm_adsp_compr_buf *buf)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void wm_adsp_buffer_clear(struct wm_adsp_compr_buf *buf)
|
||||
{
|
||||
buf->irq_count = 0xFFFFFFFF;
|
||||
buf->read_index = -1;
|
||||
buf->avail = 0;
|
||||
}
|
||||
|
||||
static int wm_adsp_buffer_init(struct wm_adsp *dsp)
|
||||
{
|
||||
struct wm_adsp_compr_buf *buf;
|
||||
@@ -3263,8 +3277,8 @@ static int wm_adsp_buffer_init(struct wm_adsp *dsp)
|
||||
return -ENOMEM;
|
||||
|
||||
buf->dsp = dsp;
|
||||
buf->read_index = -1;
|
||||
buf->irq_count = 0xFFFFFFFF;
|
||||
|
||||
wm_adsp_buffer_clear(buf);
|
||||
|
||||
ret = wm_adsp_buffer_locate(buf);
|
||||
if (ret < 0) {
|
||||
@@ -3322,16 +3336,17 @@ int wm_adsp_compr_trigger(struct snd_compr_stream *stream, int cmd)
|
||||
|
||||
switch (cmd) {
|
||||
case SNDRV_PCM_TRIGGER_START:
|
||||
if (wm_adsp_compr_attached(compr))
|
||||
break;
|
||||
|
||||
ret = wm_adsp_compr_attach(compr);
|
||||
if (ret < 0) {
|
||||
adsp_err(dsp, "Failed to link buffer and stream: %d\n",
|
||||
ret);
|
||||
break;
|
||||
if (!wm_adsp_compr_attached(compr)) {
|
||||
ret = wm_adsp_compr_attach(compr);
|
||||
if (ret < 0) {
|
||||
adsp_err(dsp, "Failed to link buffer and stream: %d\n",
|
||||
ret);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
wm_adsp_buffer_clear(compr->buf);
|
||||
|
||||
/* Trigger the IRQ at one fragment of data */
|
||||
ret = wm_adsp_buffer_write(compr->buf,
|
||||
HOST_BUFFER_FIELD(high_water_mark),
|
||||
|
Reference in New Issue
Block a user