From 192030b3b3365c71360a64b847ba9887c1a15cb1 Mon Sep 17 00:00:00 2001 From: Rander Wang Date: Thu, 8 Sep 2022 18:01:39 +0800 Subject: [PATCH] module_adpter: add get_data support Get_data returns binary data to host. Signed-off-by: Rander Wang --- src/audio/module_adapter/module_adapter.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/audio/module_adapter/module_adapter.c b/src/audio/module_adapter/module_adapter.c index c6c1e588c..751a6f702 100644 --- a/src/audio/module_adapter/module_adapter.c +++ b/src/audio/module_adapter/module_adapter.c @@ -715,7 +715,8 @@ out: return ret; } -static int module_adapter_set_params(struct comp_dev *dev, struct sof_ipc_ctrl_data *cdata) +static int module_adapter_get_set_params(struct comp_dev *dev, struct sof_ipc_ctrl_data *cdata, + bool set) { struct processing_module *mod = comp_get_drvdata(dev); struct module_data *md = &mod->priv; @@ -743,17 +744,22 @@ static int module_adapter_set_params(struct comp_dev *dev, struct sof_ipc_ctrl_d } /* IPC3 does not use config_id, so pass 0 for config ID as it will be ignored anyway */ - if (md->ops->set_configuration) + if (set && md->ops->set_configuration) return md->ops->set_configuration(mod, 0, pos, data_offset_size, (const uint8_t *)cdata->data[0].data, cdata->num_elems, NULL, 0); + else if (!set && md->ops->get_configuration) + return md->ops->get_configuration(mod, pos, &data_offset_size, + (uint8_t *)cdata->data[0].data, + cdata->num_elems); - comp_warn(dev, "module_adapter_set_params(): no set_configuration op set for %d", + comp_warn(dev, "module_adapter_get_set_params(): no configuration op set for %d", dev_comp_id(dev)); return 0; } -static int module_adapter_ctrl_set_data(struct comp_dev *dev, struct sof_ipc_ctrl_data *cdata) +static int module_adapter_ctrl_get_set_data(struct comp_dev *dev, struct sof_ipc_ctrl_data *cdata, + bool set) { int ret; struct processing_module *mod = comp_get_drvdata(dev); @@ -773,7 +779,7 @@ static int module_adapter_ctrl_set_data(struct comp_dev *dev, struct sof_ipc_ctr ret = -EIO; break; case SOF_CTRL_CMD_BINARY: - ret = module_adapter_set_params(dev, cdata); + ret = module_adapter_get_set_params(dev, cdata, set); break; default: comp_err(dev, "module_adapter_ctrl_set_data error: unknown set data command"); @@ -796,11 +802,10 @@ int module_adapter_cmd(struct comp_dev *dev, int cmd, void *data, int max_data_s switch (cmd) { case COMP_CMD_SET_DATA: - ret = module_adapter_ctrl_set_data(dev, cdata); + ret = module_adapter_ctrl_get_set_data(dev, cdata, true); break; case COMP_CMD_GET_DATA: - comp_err(dev, "module_adapter_cmd() get_data not implemented yet."); - ret = -ENODATA; + ret = module_adapter_ctrl_get_set_data(dev, cdata, false); break; case COMP_CMD_SET_VALUE: /*