From 155ed460b6a93ce374437a82d59def7dba71156d Mon Sep 17 00:00:00 2001 From: Adrian Warecki Date: Wed, 8 Nov 2023 13:11:27 +0100 Subject: [PATCH] module_adapter: Make free and prepare methods optional Simple modules may not need to provide free and prepare functions. To avoid having to provide dummy methods, added an if to check if a module implemented these methods. This will prevent null reference if a module doesn't implement these methods. Signed-off-by: Adrian Warecki --- src/audio/module_adapter/module/generic.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/audio/module_adapter/module/generic.c b/src/audio/module_adapter/module/generic.c index ed19c62d69c4..7d2fd0fa42d9 100644 --- a/src/audio/module_adapter/module/generic.c +++ b/src/audio/module_adapter/module/generic.c @@ -211,11 +211,13 @@ int module_prepare(struct processing_module *mod, if (mod->priv.state < MODULE_INITIALIZED) return -EPERM; #endif - ret = md->ops->prepare(mod, sources, num_of_sources, sinks, num_of_sinks); - if (ret) { - comp_err(dev, "module_prepare() error %d: module specific prepare failed, comp_id %d", - ret, dev_comp_id(dev)); - return ret; + if (md->ops->prepare) { + ret = md->ops->prepare(mod, sources, num_of_sources, sinks, num_of_sinks); + if (ret) { + comp_err(dev, "module_prepare() error %d: module specific prepare failed, comp_id %d", + ret, dev_comp_id(dev)); + return ret; + } } /* After prepare is done we no longer need runtime configuration @@ -376,10 +378,12 @@ int module_free(struct processing_module *mod) int ret; struct module_data *md = &mod->priv; - ret = md->ops->free(mod); - if (ret) - comp_warn(mod->dev, "module_free(): error: %d for %d", - ret, dev_comp_id(mod->dev)); + if (md->ops->free) { + ret = md->ops->free(mod); + if (ret) + comp_warn(mod->dev, "module_free(): error: %d for %d", + ret, dev_comp_id(mod->dev)); + } /* Free all memory shared by module_adapter & module */ md->cfg.avail = false;