From 421a6dff039ea1188a9c4d7804655ad595a61a86 Mon Sep 17 00:00:00 2001 From: Seppo Ingalsuo Date: Mon, 30 Sep 2024 18:55:07 +0300 Subject: [PATCH] Audio: Mux: Handle correctly mux/demux mode Since with module adapter the component type from init IPC is no more SOF_COMP_MUX or SOF_COMP_DEMUX but SOF_COMP_MODULE_ADAPTER, the mux mode check needs to be change. The type is set in init() based on which init function was used. All checks for dev->ipc_config.type are changed to check of cd->comp_type. The set of type in mux_ipc4.c is removed. Signed-off-by: Seppo Ingalsuo --- src/audio/mux/mux.c | 9 +++++---- src/audio/mux/mux.h | 1 + src/audio/mux/mux_ipc3.c | 6 +++--- src/audio/mux/mux_ipc4.c | 1 - 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/audio/mux/mux.c b/src/audio/mux/mux.c index 2b8f6c4710f5..d2445390527c 100644 --- a/src/audio/mux/mux.c +++ b/src/audio/mux/mux.c @@ -79,7 +79,7 @@ bool mux_mix_check(struct sof_mux_config *cfg) return false; } -static int mux_demux_common_init(struct processing_module *mod) +static int mux_demux_common_init(struct processing_module *mod, enum sof_comp_type type) { struct module_data *module_data = &mod->priv; struct comp_dev *dev = mod->dev; @@ -116,6 +116,7 @@ static int mux_demux_common_init(struct processing_module *mod) mod->verify_params_flags = BUFF_PARAMS_CHANNELS; mod->no_pause = true; + cd->comp_type = type; return 0; err_init: @@ -130,14 +131,14 @@ static int mux_init(struct processing_module *mod) { mod->max_sources = MUX_MAX_STREAMS; - return mux_demux_common_init(mod); + return mux_demux_common_init(mod, SOF_COMP_MUX); } static int demux_init(struct processing_module *mod) { mod->max_sinks = MUX_MAX_STREAMS; - return mux_demux_common_init(mod); + return mux_demux_common_init(mod, SOF_COMP_DEMUX); } static int mux_free(struct processing_module *mod) @@ -386,7 +387,7 @@ static int mux_prepare(struct processing_module *mod, if (ret < 0) return ret; - if (dev->ipc_config.type == SOF_COMP_MUX) + if (cd->comp_type == SOF_COMP_MUX) cd->mux = mux_get_processing_function(mod); else cd->demux = demux_get_processing_function(mod); diff --git a/src/audio/mux/mux.h b/src/audio/mux/mux.h index f3b2cbc50a89..526d70ecb870 100644 --- a/src/audio/mux/mux.h +++ b/src/audio/mux/mux.h @@ -174,6 +174,7 @@ struct comp_data { struct mux_look_up lookup[MUX_MAX_STREAMS]; struct mux_look_up active_lookup; struct comp_data_blob_handler *model_handler; + enum sof_comp_type comp_type; struct sof_mux_config config; /* Keep last due to flexible array member in end */ }; diff --git a/src/audio/mux/mux_ipc3.c b/src/audio/mux/mux_ipc3.c index e5f44c781da7..4c658d8e588d 100644 --- a/src/audio/mux/mux_ipc3.c +++ b/src/audio/mux/mux_ipc3.c @@ -68,7 +68,7 @@ static int mux_set_values(struct processing_module *mod) } } - if (dev->ipc_config.type == SOF_COMP_MUX) { + if (cd->comp_type == SOF_COMP_MUX) { if (mux_mix_check(cfg)) comp_err(dev, "mux_set_values(): mux component is not able to mix channels"); } @@ -81,13 +81,13 @@ static int mux_set_values(struct processing_module *mod) cd->config.num_streams = cfg->num_streams; - if (dev->ipc_config.type == SOF_COMP_MUX) + if (cd->comp_type == SOF_COMP_MUX) mux_prepare_look_up_table(mod); else demux_prepare_look_up_table(mod); if (dev->state > COMP_STATE_INIT) { - if (dev->ipc_config.type == SOF_COMP_MUX) + if (cd->comp_type == SOF_COMP_MUX) cd->mux = mux_get_processing_function(mod); else cd->demux = demux_get_processing_function(mod); diff --git a/src/audio/mux/mux_ipc4.c b/src/audio/mux/mux_ipc4.c index dd6315b3bcd0..446ad2f566ae 100644 --- a/src/audio/mux/mux_ipc4.c +++ b/src/audio/mux/mux_ipc4.c @@ -38,7 +38,6 @@ static int build_config(struct processing_module *mod) int mask = 1; int i; - dev->ipc_config.type = SOF_COMP_MUX; cd->config.num_streams = MUX_MAX_STREAMS; /* clear masks */