|
@@ -1220,8 +1220,11 @@ static int skl_pcm_new(struct snd_soc_pcm_runtime *rtd)
|
|
|
static int skl_get_module_info(struct skl *skl, struct skl_module_cfg *mconfig)
|
|
|
{
|
|
|
struct skl_sst *ctx = skl->skl_sst;
|
|
|
+ struct skl_module_inst_id *pin_id;
|
|
|
+ uuid_le *uuid_mod, *uuid_tplg;
|
|
|
+ struct skl_module *skl_module;
|
|
|
struct uuid_module *module;
|
|
|
- uuid_le *uuid_mod;
|
|
|
+ int i, ret = -EIO;
|
|
|
|
|
|
uuid_mod = (uuid_le *)mconfig->guid;
|
|
|
|
|
@@ -1235,11 +1238,43 @@ static int skl_get_module_info(struct skl *skl, struct skl_module_cfg *mconfig)
|
|
|
mconfig->id.module_id = module->id;
|
|
|
if (mconfig->module)
|
|
|
mconfig->module->loadable = module->is_loadable;
|
|
|
- return 0;
|
|
|
+ ret = 0;
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- return -EIO;
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+ uuid_mod = &module->uuid;
|
|
|
+ ret = -EIO;
|
|
|
+ for (i = 0; i < skl->nr_modules; i++) {
|
|
|
+ skl_module = skl->modules[i];
|
|
|
+ uuid_tplg = &skl_module->uuid;
|
|
|
+ if (!uuid_le_cmp(*uuid_mod, *uuid_tplg)) {
|
|
|
+ mconfig->module = skl_module;
|
|
|
+ ret = 0;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (skl->nr_modules && ret)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+ list_for_each_entry(module, &ctx->uuid_list, list) {
|
|
|
+ for (i = 0; i < MAX_IN_QUEUE; i++) {
|
|
|
+ pin_id = &mconfig->m_in_pin[i].id;
|
|
|
+ if (!uuid_le_cmp(pin_id->mod_uuid, module->uuid))
|
|
|
+ pin_id->module_id = module->id;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (i = 0; i < MAX_OUT_QUEUE; i++) {
|
|
|
+ pin_id = &mconfig->m_out_pin[i].id;
|
|
|
+ if (!uuid_le_cmp(pin_id->mod_uuid, module->uuid))
|
|
|
+ pin_id->module_id = module->id;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static int skl_populate_modules(struct skl *skl)
|