[Sound-open-firmware] [PATCH 2/5] Volume: Replace SOF_CTRL_CMD_MUTE/UNMUTE with SOF_CTRL_CMD_SWITCH
Seppo Ingalsuo
seppo.ingalsuo at linux.intel.com
Fri Oct 20 19:15:55 CEST 2017
Due to previous patch the volume mute is updated to be controlled with
SOF_CTRL_CMD_SWITCH that maps to ALSA switch style control. Mute for a
channel is set with an (unsigned) value larger than zero. Zero value
unmutes the channel.
In both mute and volume set code the if statement to compare component
channel map is changed to compare to chanv[j].channel instead of used
chanv[j].value that looks incorrect.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo at linux.intel.com>
---
src/audio/volume.c | 29 ++++++++++++++---------------
1 file changed, 14 insertions(+), 15 deletions(-)
diff --git a/src/audio/volume.c b/src/audio/volume.c
index 137be3c..28d3225 100644
--- a/src/audio/volume.c
+++ b/src/audio/volume.c
@@ -449,36 +449,35 @@ static int volume_ctrl_set_cmd(struct comp_dev *dev, struct sof_ipc_ctrl_data *c
switch (cdata->cmd) {
case SOF_CTRL_CMD_VOLUME:
-
+ trace_volume("vst");
for (i = 0; i < SOF_IPC_MAX_CHANNELS; i++) {
for (j = 0; j < cdata->num_elems; j++) {
- if (cdata->chanv[j].value == cd->chan[i])
+ tracev_value(cdata->chanv[j].channel);
+ tracev_value(cdata->chanv[j].value);
+ if (cdata->chanv[j].channel == cd->chan[i])
volume_set_chan(dev, i, cdata->chanv[j].value);
}
}
-
work_schedule_default(&cd->volwork, VOL_RAMP_US);
break;
- case SOF_CTRL_CMD_MUTE:
+ case SOF_CTRL_CMD_SWITCH:
+ trace_volume("mst");
for (i = 0; i < SOF_IPC_MAX_CHANNELS; i++) {
for (j = 0; j < cdata->num_elems; j++) {
- if (cdata->chanv[j].value == cd->chan[i])
- volume_set_chan_mute(dev, i);
+ tracev_value(cdata->chanv[j].channel);
+ tracev_value(cdata->chanv[j].value);
+ if (cdata->chanv[j].channel == cd->chan[i]) {
+ if (cdata->chanv[j].value > 0)
+ volume_set_chan_mute(dev, i);
+ else
+ volume_set_chan_unmute(dev, i);
+ }
}
}
work_schedule_default(&cd->volwork, VOL_RAMP_US);
break;
- case SOF_CTRL_CMD_UNMUTE:
- for (i = 0; i < SOF_IPC_MAX_CHANNELS; i++) {
- for (j = 0; j < cdata->num_elems; j++) {
- if (cdata->chanv[j].value == cd->chan[i])
- volume_set_chan_unmute(dev, i);
- }
- }
- work_schedule_default(&cd->volwork, VOL_RAMP_US);
- break;
default:
trace_volume_error("gs1");
return -EINVAL;
--
2.11.0
More information about the Sound-open-firmware
mailing list