volume: don't modify IPC data

In volume_init() use a temporary local array instead of modifying
IPC data, that can be stored in a host IPC memory window.

Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
This commit is contained in:
Guennadi Liakhovetski 2022-10-18 14:27:59 +02:00 committed by Liam Girdwood
parent eda36261fc
commit f748461ffc
1 changed files with 4 additions and 3 deletions

View File

@ -541,6 +541,7 @@ static int volume_init(struct processing_module *mod)
struct module_config *cfg = &md->cfg;
struct comp_dev *dev = mod->dev;
struct ipc4_peak_volume_module_cfg *vol = cfg->data;
uint32_t target_volume[SOF_IPC_MAX_CHANNELS];
struct vol_data *cd;
const size_t vol_size = sizeof(int32_t) * SOF_IPC_MAX_CHANNELS * 4;
uint32_t channels_count;
@ -575,16 +576,16 @@ static int volume_init(struct processing_module *mod)
else
channel_cfg = channel;
vol->config[channel].target_volume =
target_volume[channel] =
convert_volume_ipc4_to_ipc3(dev, vol->config[channel].target_volume);
set_volume_ipc4(cd, channel,
vol->config[channel_cfg].target_volume,
target_volume[channel_cfg],
vol->config[channel_cfg].curve_type,
vol->config[channel_cfg].curve_duration);
}
init_ramp(cd, vol->config[0].curve_duration, vol->config[0].target_volume);
init_ramp(cd, vol->config[0].curve_duration, target_volume[0]);
instance_id = IPC4_INST_ID(dev_comp_id(dev));
if (instance_id >= IPC4_MAX_PEAK_VOL_REG_SLOTS) {