[Sound-open-firmware] [RFC PATCH 4/6] comp: ignore state set request when the old state is unchanged

Ranjani Sridharan ranjani.sridharan at linux.intel.com
Thu Jun 14 05:29:55 CEST 2018


Component should ignore repeated requests to set the same state
and return with a value >0 so the state doesn't get propagated
further down the pipeline.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan at linux.intel.com>
---
 src/audio/component.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/src/audio/component.c b/src/audio/component.c
index 319b401..8f8ddde 100644
--- a/src/audio/component.c
+++ b/src/audio/component.c
@@ -122,6 +122,15 @@ int comp_set_state(struct comp_dev *dev, int cmd)
 
 	switch (cmd) {
 	case COMP_TRIGGER_START:
+
+		/*
+		 * No state change.
+		 * Return a value >0 so the state won't be propagated further
+		 */
+		if (dev->state == COMP_STATE_ACTIVE)
+			return 1;
+
+		/* Set new state */
 		if (dev->state == COMP_STATE_PREPARE ||
 			dev->state == COMP_STATE_PAUSED) {
 			dev->state = COMP_STATE_ACTIVE;
@@ -132,6 +141,7 @@ int comp_set_state(struct comp_dev *dev, int cmd)
 		}
 		break;
 	case COMP_TRIGGER_RELEASE:
+
 		if (dev->state == COMP_STATE_PAUSED) {
 			dev->state = COMP_STATE_ACTIVE;
 		} else {
@@ -142,6 +152,15 @@ int comp_set_state(struct comp_dev *dev, int cmd)
 		break;
 	case COMP_TRIGGER_STOP:
 	case COMP_TRIGGER_XRUN:
+
+		/*
+		 * No state change.
+		 * Return a value >0 so the state won't be propagated further
+		 */
+		if (dev->state == COMP_STATE_PREPARE)
+			return 1;
+
+		/* set new state */
 		if (dev->state == COMP_STATE_ACTIVE) {
 			dev->state = COMP_STATE_PREPARE;
 		} else {
-- 
2.17.1



More information about the Sound-open-firmware mailing list