Commit 435e2573 authored by Cezary Rojewski's avatar Cezary Rojewski Committed by Mark Brown

ASoC: Intel: avs: Prepare modules before bindings them

When binding modules to pins other than pin0, sometimes additional
preparations need to be made, depending on the module type.
Add function that prepares modules when necessary before binding them.
Signed-off-by: default avatarAmadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
Signed-off-by: default avatarCezary Rojewski <cezary.rojewski@intel.com>
Link: https://lore.kernel.org/r/20220331135246.993089-14-cezary.rojewski@intel.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 84a99908
......@@ -463,6 +463,37 @@ struct avs_path *avs_path_create(struct avs_dev *adev, u32 dma_id,
return path;
}
static int avs_path_bind_prepare(struct avs_dev *adev,
struct avs_path_binding *binding)
{
const struct avs_audio_format *src_fmt, *sink_fmt;
struct avs_tplg_module *tsource = binding->source->template;
struct avs_path_module *source = binding->source;
int ret;
/*
* only copier modules about to be bound
* to output pin other than 0 need preparation
*/
if (!binding->source_pin)
return 0;
if (!guid_equal(&tsource->cfg_ext->type, &AVS_COPIER_MOD_UUID))
return 0;
src_fmt = tsource->in_fmt;
sink_fmt = binding->sink->template->in_fmt;
ret = avs_ipc_copier_set_sink_format(adev, source->module_id,
source->instance_id, binding->source_pin,
src_fmt, sink_fmt);
if (ret) {
dev_err(adev->dev, "config copier failed: %d\n", ret);
return AVS_IPC_RET(ret);
}
return 0;
}
int avs_path_bind(struct avs_path *path)
{
struct avs_path_pipeline *ppl;
......@@ -478,6 +509,10 @@ int avs_path_bind(struct avs_path *path)
source = binding->source;
sink = binding->sink;
ret = avs_path_bind_prepare(adev, binding);
if (ret < 0)
return ret;
ret = avs_ipc_bind(adev, source->module_id,
source->instance_id, sink->module_id,
sink->instance_id, binding->sink_pin,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment