[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