[Sound-open-firmware] [RFC PATCH v2] tone: add command handler to return tone state and compute tone sample rate

Ranjani Sridharan ranjani.sridharan at linux.intel.com
Sat Jun 9 08:29:17 CEST 2018


This patch adds the get() handler to respond to requests for the current
tone state.

It also modifies the set() handler to return the
previous state in the ipc reply. This will help the driver in
determining if the tone pipeline needs to be triggered or not.

Lastly, it modifies the tone sample rate to be computed from the
pipeline deadline and frames per sched.

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

diff --git a/src/audio/tone.c b/src/audio/tone.c
index eee6091..839a0f6 100644
--- a/src/audio/tone.c
+++ b/src/audio/tone.c
@@ -462,6 +462,25 @@ static int tone_params(struct comp_dev *dev)
 	return 0;
 }
 
+static int tone_cmd_get_value(struct comp_dev *dev,
+			      struct sof_ipc_ctrl_data *cdata)
+{
+	struct comp_data *cd = comp_get_drvdata(dev);
+	int j;
+
+	trace_tone("mgt");
+
+	if (cdata->cmd == SOF_CTRL_CMD_SWITCH) {
+		for (j = 0; j < cdata->num_elems; j++) {
+			cdata->chanv[j].channel = j;
+			cdata->chanv[j].value = !cd->sg[j].mute;
+			trace_value(j);
+			trace_value(cd->sg[j].mute);
+		}
+	}
+	return 0;
+}
+
 static int tone_cmd_set_value(struct comp_dev *dev, struct sof_ipc_ctrl_data *cdata)
 {
 	struct comp_data *cd = comp_get_drvdata(dev);
@@ -480,6 +499,10 @@ static int tone_cmd_set_value(struct comp_dev *dev, struct sof_ipc_ctrl_data *cd
 				trace_tone_error("che");
 				return -EINVAL;
 			}
+
+			/* send current state back to the driver */
+			cdata->chanv[j].value = !cd->sg[ch].mute;
+
 			if (val)
 				tonegen_unmute(&cd->sg[ch]);
 			else
@@ -583,6 +606,9 @@ static int tone_cmd(struct comp_dev *dev, int cmd, void *data)
 	case COMP_CMD_SET_VALUE:
 		ret = tone_cmd_set_value(dev, cdata);
 		break;
+	case COMP_CMD_GET_VALUE:
+		ret = tone_cmd_get_value(dev, cdata);
+		break;
 	}
 
 	return ret;
@@ -641,7 +667,7 @@ static int tone_prepare(struct comp_dev * dev)
 		return ret;
 
 	cd->channels = dev->params.channels;
-	cd->rate = dev->params.rate;
+	cd->rate = dev->frames * dev->pipeline->ipc_pipe.deadline;
 	tracev_value(cd->channels);
 	tracev_value(cd->rate);
 
-- 
2.17.1



More information about the Sound-open-firmware mailing list