[Sound-open-firmware] [PATCH 2/5] host: only update host_avail and host_free in host_update_buffer_xx()
Keyon Jie
yang.jie at linux.intel.com
Wed Feb 15 11:07:56 CET 2017
We should not modify host_avail or host_free directly, and need
replace that with host_update_buffer_produce/consume().
Theoretically, each time we update host_app_pos, host_pos_read,
or host_size, we should call host_update_buffer_xx() to update
the buffer.
Here we add update to buffer new, host prepare, AVAIL_UPDATE cmd,
and pointer_reset.
Signed-off-by: Keyon Jie <yang.jie at linux.intel.com>
---
src/audio/host.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/src/audio/host.c b/src/audio/host.c
index 12aee59..b604ddc 100644
--- a/src/audio/host.c
+++ b/src/audio/host.c
@@ -638,6 +638,8 @@ static int host_prepare(struct comp_dev *dev)
hd->params.period_frames * hd->params.frame_size;
hd->split_remaining = 0;
+ host_update_buffer_consume(hd);
+
dev->preload = PLAT_HOST_PERIODS;
dev->state = COMP_STATE_PREPARE;
@@ -674,8 +676,8 @@ static int host_pointer_reset(struct comp_dev *dev)
hd->host_app_pos = 0;
hd->host_pos_read = 0;
hd->host_period_pos = 0;
- hd->host_size = 0;
- hd->host_avail= 0;
+
+ host_update_buffer_consume(hd);
return 0;
}
@@ -732,7 +734,11 @@ static int host_cmd(struct comp_dev *dev, int cmd, void *data)
case COMP_CMD_AVAIL_UPDATE:
app_pos = (struct ipc_intel_ipc_stream_set_position *)data;
hd->host_app_pos = app_pos->position;
- host_update_buffer_produce(hd);
+
+ if (hd->params.direction == STREAM_DIRECTION_PLAYBACK)
+ host_update_buffer_produce(hd);
+ else
+ host_update_buffer_consume(hd);
break;
case COMP_CMD_VOLUME:
vol_dev = host_volume_component(dev);
@@ -760,6 +766,8 @@ static int host_buffer(struct comp_dev *dev, struct dma_sg_elem *elem,
*e = *elem;
hd->host_size = host_size;
+ host_update_buffer_consume(hd);
+
list_item_append(&e->list, &hd->host.elem_list);
return 0;
}
--
2.7.4
More information about the Sound-open-firmware
mailing list