Lines Matching +full:3 +full:- +full:tuples
1 // SPDX-License-Identifier: GPL-2.0-only
12 #include <sound/soc-acpi.h>
13 #include <sound/soc-topology.h>
26 (avs_tplg_vendor_array_at(array, le32_to_cpu((array)->size)))
29 * Scan provided block of tuples for the specified token. If found,
33 * Returns 0 on success, -ENOENT if not found and error code otherwise.
36 avs_tplg_vendor_array_lookup(struct snd_soc_tplg_vendor_array *tuples, in avs_tplg_vendor_array_lookup() argument
43 u32 tuples_size = le32_to_cpu(tuples->size); in avs_tplg_vendor_array_lookup()
46 return -EINVAL; in avs_tplg_vendor_array_lookup()
48 tuple = tuples->value; in avs_tplg_vendor_array_lookup()
49 if (le32_to_cpu(tuple->token) == token) { in avs_tplg_vendor_array_lookup()
54 block_size -= tuples_size; in avs_tplg_vendor_array_lookup()
56 tuples = avs_tplg_vendor_array_next(tuples); in avs_tplg_vendor_array_lookup()
59 return -ENOENT; in avs_tplg_vendor_array_lookup()
68 * several vendor tuples and a specific token marks the beginning of
72 avs_tplg_vendor_array_lookup_next(struct snd_soc_tplg_vendor_array *tuples, in avs_tplg_vendor_array_lookup_next() argument
75 u32 tuples_size = le32_to_cpu(tuples->size); in avs_tplg_vendor_array_lookup_next()
79 return -EINVAL; in avs_tplg_vendor_array_lookup_next()
81 tuples = avs_tplg_vendor_array_next(tuples); in avs_tplg_vendor_array_lookup_next()
82 block_size -= tuples_size; in avs_tplg_vendor_array_lookup_next()
84 ret = avs_tplg_vendor_array_lookup(tuples, block_size, token, offset); in avs_tplg_vendor_array_lookup_next()
91 * Scan provided block of tuples for the specified token which marks
101 avs_tplg_vendor_entry_size(struct snd_soc_tplg_vendor_array *tuples, in avs_tplg_vendor_entry_size() argument
106 ret = avs_tplg_vendor_array_lookup_next(tuples, block_size, entry_id_token, size); in avs_tplg_vendor_entry_size()
107 if (ret == -ENOENT) { in avs_tplg_vendor_entry_size()
136 guid_copy((guid_t *)val, (const guid_t *)&tuple->uuid); in avs_parse_uuid_token()
147 *val = le32_to_cpu(tuple->value); in avs_parse_bool_token()
158 *val = le32_to_cpu(tuple->value); in avs_parse_byte_token()
169 *val = le32_to_cpu(tuple->value); in avs_parse_short_token()
180 *val = le32_to_cpu(tuple->value); in avs_parse_word_token()
191 snprintf(val, SNDRV_CTL_ELEM_ID_NAME_MAXLEN, "%s", tuple->string); in avs_parse_string_token()
198 struct snd_soc_tplg_vendor_array *tuples) in avs_parse_uuid_tokens() argument
204 for (i = 0; i < le32_to_cpu(tuples->num_elems); i++) { in avs_parse_uuid_tokens()
205 tuple = &tuples->uuid[i]; in avs_parse_uuid_tokens()
208 /* Ignore non-UUID tokens. */ in avs_parse_uuid_tokens()
210 parsers[j].token != le32_to_cpu(tuple->token)) in avs_parse_uuid_tokens()
224 struct snd_soc_tplg_vendor_array *tuples) in avs_parse_string_tokens() argument
230 for (i = 0; i < le32_to_cpu(tuples->num_elems); i++) { in avs_parse_string_tokens()
231 tuple = &tuples->string[i]; in avs_parse_string_tokens()
234 /* Ignore non-string tokens. */ in avs_parse_string_tokens()
236 parsers[j].token != le32_to_cpu(tuple->token)) in avs_parse_string_tokens()
250 struct snd_soc_tplg_vendor_array *tuples) in avs_parse_word_tokens() argument
256 for (i = 0; i < le32_to_cpu(tuples->num_elems); i++) { in avs_parse_word_tokens()
257 tuple = &tuples->value[i]; in avs_parse_word_tokens()
260 /* Ignore non-integer tokens. */ in avs_parse_word_tokens()
267 if (parsers[j].token != le32_to_cpu(tuple->token)) in avs_parse_word_tokens()
281 struct snd_soc_tplg_vendor_array *tuples, int priv_size) in avs_parse_tokens() argument
286 array_size = le32_to_cpu(tuples->size); in avs_parse_tokens()
289 dev_err(comp->dev, "invalid array size 0x%x\n", array_size); in avs_parse_tokens()
290 return -EINVAL; in avs_parse_tokens()
294 priv_size -= array_size; in avs_parse_tokens()
296 dev_err(comp->dev, "invalid array size 0x%x\n", array_size); in avs_parse_tokens()
297 return -EINVAL; in avs_parse_tokens()
300 switch (le32_to_cpu(tuples->type)) { in avs_parse_tokens()
302 ret = avs_parse_uuid_tokens(comp, object, parsers, count, tuples); in avs_parse_tokens()
305 ret = avs_parse_string_tokens(comp, object, parsers, count, tuples); in avs_parse_tokens()
311 ret = avs_parse_word_tokens(comp, object, parsers, count, tuples); in avs_parse_tokens()
314 dev_err(comp->dev, "unknown token type %d\n", tuples->type); in avs_parse_tokens()
315 ret = -EINVAL; in avs_parse_tokens()
319 dev_err(comp->dev, "parsing %zu tokens of %d type failed: %d\n", in avs_parse_tokens()
320 count, tuples->type, ret); in avs_parse_tokens()
324 tuples = avs_tplg_vendor_array_next(tuples); in avs_parse_tokens()
339 idx = le32_to_cpu(tuple->value); \
340 if (idx >= acomp->tplg->num_##member) \
341 return -EINVAL; \
343 *val = &acomp->tplg->member[idx]; \
362 audio_format->num_channels = le32_to_cpu(velem->value); in parse_audio_format_bitfield()
365 audio_format->valid_bit_depth = le32_to_cpu(velem->value); in parse_audio_format_bitfield()
368 audio_format->sample_type = le32_to_cpu(velem->value); in parse_audio_format_bitfield()
386 retsize = scnprintf(buf, min_t(size_t, size, needle - fmt + 1), "%s", fmt); in avs_ssp_sprint()
387 retsize += scnprintf(buf + retsize, size - retsize, "%d", port); in avs_ssp_sprint()
389 retsize += scnprintf(buf + retsize, size - retsize, ":%d", tdm); in avs_ssp_sprint()
390 retsize += scnprintf(buf + retsize, size - retsize, "%s", needle + 2); in avs_ssp_sprint()
401 struct snd_soc_acpi_mach *mach = dev_get_platdata(comp->card->dev); in parse_link_formatted_string()
406 * Dynamic naming - string formats, e.g.: ssp%d - supported only for in parse_link_formatted_string()
418 avs_ssp_sprint(val, SNDRV_CTL_ELEM_ID_NAME_MAXLEN, tuple->string, ssp_port, tdm_slot); in parse_link_formatted_string()
425 struct snd_soc_tplg_vendor_array *tuples, in parse_dictionary_header() argument
431 /* Dictionary header consists of single tuple - entry count. */ in parse_dictionary_header()
432 tuple = tuples->value; in parse_dictionary_header()
433 if (le32_to_cpu(tuple->token) != num_entries_token) { in parse_dictionary_header()
434 dev_err(comp->dev, "invalid dictionary header, expected: %d\n", in parse_dictionary_header()
436 return -EINVAL; in parse_dictionary_header()
439 *num_entries = le32_to_cpu(tuple->value); in parse_dictionary_header()
440 *dict = devm_kcalloc(comp->card->dev, *num_entries, entry_size, GFP_KERNEL); in parse_dictionary_header()
442 return -ENOMEM; in parse_dictionary_header()
449 struct snd_soc_tplg_vendor_array *tuples, u32 block_size, in parse_dictionary_entries() argument
461 ret = avs_tplg_vendor_entry_size(tuples, block_size, in parse_dictionary_entries()
466 ret = avs_parse_tokens(comp, pos, parsers, num_parsers, tuples, esize); in parse_dictionary_entries()
468 dev_err(comp->dev, "parse entry: %d of type: %d failed: %d\n", in parse_dictionary_entries()
474 block_size -= esize; in parse_dictionary_entries()
475 tuples = avs_tplg_vendor_array_at(tuples, esize); in parse_dictionary_entries()
482 struct snd_soc_tplg_vendor_array *tuples, u32 block_size, in parse_dictionary() argument
489 ret = parse_dictionary_header(comp, tuples, dict, num_entries, in parse_dictionary()
494 block_size -= le32_to_cpu(tuples->size); in parse_dictionary()
496 tuples = avs_tplg_vendor_array_next(tuples); in parse_dictionary()
498 return parse_dictionary_entries(comp, tuples, block_size, *dict, in parse_dictionary()
513 struct snd_soc_tplg_vendor_array *tuples, u32 block_size) in avs_tplg_parse_libraries() argument
516 struct avs_tplg *tplg = acomp->tplg; in avs_tplg_parse_libraries()
518 return parse_dictionary(comp, tuples, block_size, (void **)&tplg->libs, in avs_tplg_parse_libraries()
519 &tplg->num_libs, sizeof(*tplg->libs), in avs_tplg_parse_libraries()
577 struct snd_soc_tplg_vendor_array *tuples, in avs_tplg_parse_audio_formats() argument
581 struct avs_tplg *tplg = acomp->tplg; in avs_tplg_parse_audio_formats()
583 return parse_dictionary(comp, tuples, block_size, (void **)&tplg->fmts, in avs_tplg_parse_audio_formats()
584 &tplg->num_fmts, sizeof(*tplg->fmts), in avs_tplg_parse_audio_formats()
618 struct snd_soc_tplg_vendor_array *tuples, in avs_tplg_parse_modcfgs_base() argument
622 struct avs_tplg *tplg = acomp->tplg; in avs_tplg_parse_modcfgs_base()
624 return parse_dictionary(comp, tuples, block_size, (void **)&tplg->modcfgs_base, in avs_tplg_parse_modcfgs_base()
625 &tplg->num_modcfgs_base, sizeof(*tplg->modcfgs_base), in avs_tplg_parse_modcfgs_base()
773 .offset = offsetof(struct avs_tplg_modcfg_ext, updown_mix.coefficients[3]),
847 if (!guid_equal(&cfg->type, &AVS_COPIER_MOD_UUID)) in assign_copier_gtw_instance()
850 /* Only I2S boards assign port instance in ->i2s_link_mask. */ in assign_copier_gtw_instance()
851 switch (cfg->copier.dma_type) { in assign_copier_gtw_instance()
860 if (cfg->copier.vindex.val) in assign_copier_gtw_instance()
863 mach = dev_get_platdata(comp->card->dev); in assign_copier_gtw_instance()
873 cfg->copier.vindex.i2s.instance = ssp_port; in assign_copier_gtw_instance()
874 cfg->copier.vindex.i2s.time_slot = tdm_slot; in assign_copier_gtw_instance()
879 struct snd_soc_tplg_vendor_array *tuples, in avs_tplg_parse_modcfg_ext() argument
886 ret = avs_tplg_vendor_entry_size(tuples, block_size, in avs_tplg_parse_modcfg_ext()
892 ARRAY_SIZE(modcfg_ext_parsers), tuples, esize); in avs_tplg_parse_modcfg_ext()
899 block_size -= esize; in avs_tplg_parse_modcfg_ext()
905 num_pins = cfg->generic.num_input_pins + cfg->generic.num_output_pins; in avs_tplg_parse_modcfg_ext()
907 return -EINVAL; in avs_tplg_parse_modcfg_ext()
909 pins = devm_kcalloc(comp->card->dev, num_pins, sizeof(*pins), GFP_KERNEL); in avs_tplg_parse_modcfg_ext()
911 return -ENOMEM; in avs_tplg_parse_modcfg_ext()
913 tuples = avs_tplg_vendor_array_at(tuples, esize); in avs_tplg_parse_modcfg_ext()
914 ret = parse_dictionary_entries(comp, tuples, block_size, in avs_tplg_parse_modcfg_ext()
921 cfg->generic.pin_fmts = pins; in avs_tplg_parse_modcfg_ext()
928 struct snd_soc_tplg_vendor_array *tuples, in avs_tplg_parse_modcfgs_ext() argument
932 struct avs_tplg *tplg = acomp->tplg; in avs_tplg_parse_modcfgs_ext()
935 ret = parse_dictionary_header(comp, tuples, (void **)&tplg->modcfgs_ext, in avs_tplg_parse_modcfgs_ext()
936 &tplg->num_modcfgs_ext, in avs_tplg_parse_modcfgs_ext()
937 sizeof(*tplg->modcfgs_ext), in avs_tplg_parse_modcfgs_ext()
942 block_size -= le32_to_cpu(tuples->size); in avs_tplg_parse_modcfgs_ext()
944 tuples = avs_tplg_vendor_array_next(tuples); in avs_tplg_parse_modcfgs_ext()
946 for (i = 0; i < tplg->num_modcfgs_ext; i++) { in avs_tplg_parse_modcfgs_ext()
947 struct avs_tplg_modcfg_ext *cfg = &tplg->modcfgs_ext[i]; in avs_tplg_parse_modcfgs_ext()
950 ret = avs_tplg_vendor_entry_size(tuples, block_size, in avs_tplg_parse_modcfgs_ext()
955 ret = avs_tplg_parse_modcfg_ext(comp, cfg, tuples, esize); in avs_tplg_parse_modcfgs_ext()
959 block_size -= esize; in avs_tplg_parse_modcfgs_ext()
960 tuples = avs_tplg_vendor_array_at(tuples, esize); in avs_tplg_parse_modcfgs_ext()
1000 struct snd_soc_tplg_vendor_array *tuples, in avs_tplg_parse_pplcfgs() argument
1004 struct avs_tplg *tplg = acomp->tplg; in avs_tplg_parse_pplcfgs()
1006 return parse_dictionary(comp, tuples, block_size, (void **)&tplg->pplcfgs, in avs_tplg_parse_pplcfgs()
1007 &tplg->num_pplcfgs, sizeof(*tplg->pplcfgs), in avs_tplg_parse_pplcfgs()
1065 struct snd_soc_tplg_vendor_array *tuples, in avs_tplg_parse_bindings() argument
1069 struct avs_tplg *tplg = acomp->tplg; in avs_tplg_parse_bindings()
1071 return parse_dictionary(comp, tuples, block_size, (void **)&tplg->bindings, in avs_tplg_parse_bindings()
1072 &tplg->num_bindings, sizeof(*tplg->bindings), in avs_tplg_parse_bindings()
1140 struct snd_soc_tplg_vendor_array *tuples, u32 block_size) in avs_tplg_module_create() argument
1147 ret = avs_tplg_vendor_entry_size(tuples, block_size, in avs_tplg_module_create()
1152 module = devm_kzalloc(comp->card->dev, sizeof(*module), GFP_KERNEL); in avs_tplg_module_create()
1154 return ERR_PTR(-ENOMEM); in avs_tplg_module_create()
1157 ARRAY_SIZE(module_parsers), tuples, esize); in avs_tplg_module_create()
1161 block_size -= esize; in avs_tplg_module_create()
1164 u32 num_config_ids = module->num_config_ids; in avs_tplg_module_create()
1168 return ERR_PTR(-EINVAL); in avs_tplg_module_create()
1170 config_ids = devm_kcalloc(comp->card->dev, num_config_ids, sizeof(*config_ids), in avs_tplg_module_create()
1173 return ERR_PTR(-ENOMEM); in avs_tplg_module_create()
1175 tuples = avs_tplg_vendor_array_at(tuples, esize); in avs_tplg_module_create()
1176 ret = parse_dictionary_entries(comp, tuples, block_size, in avs_tplg_module_create()
1184 module->config_ids = config_ids; in avs_tplg_module_create()
1187 module->owner = owner; in avs_tplg_module_create()
1188 INIT_LIST_HEAD(&module->node); in avs_tplg_module_create()
1218 .offset = 0, /* to treat pipeline->bindings as dictionary */
1225 struct snd_soc_tplg_vendor_array *tuples, u32 block_size) in avs_tplg_pipeline_create() argument
1231 pipeline = devm_kzalloc(comp->card->dev, sizeof(*pipeline), GFP_KERNEL); in avs_tplg_pipeline_create()
1233 return ERR_PTR(-ENOMEM); in avs_tplg_pipeline_create()
1235 pipeline->owner = owner; in avs_tplg_pipeline_create()
1236 INIT_LIST_HEAD(&pipeline->mod_list); in avs_tplg_pipeline_create()
1239 ret = avs_tplg_vendor_array_lookup(tuples, block_size, in avs_tplg_pipeline_create()
1242 ret = -EINVAL; in avs_tplg_pipeline_create()
1248 ARRAY_SIZE(pipeline_parsers), tuples, offset); in avs_tplg_pipeline_create()
1252 block_size -= offset; in avs_tplg_pipeline_create()
1253 tuples = avs_tplg_vendor_array_at(tuples, offset); in avs_tplg_pipeline_create()
1256 ret = avs_tplg_vendor_array_lookup_next(tuples, block_size, in avs_tplg_pipeline_create()
1259 if (ret != -ENOENT) in avs_tplg_pipeline_create()
1263 if (pipeline->num_bindings) in avs_tplg_pipeline_create()
1264 return ERR_PTR(-EINVAL); in avs_tplg_pipeline_create()
1268 pipeline->bindings = devm_kcalloc(comp->card->dev, pipeline->num_bindings, in avs_tplg_pipeline_create()
1269 sizeof(*pipeline->bindings), GFP_KERNEL); in avs_tplg_pipeline_create()
1270 if (!pipeline->bindings) in avs_tplg_pipeline_create()
1271 return ERR_PTR(-ENOMEM); in avs_tplg_pipeline_create()
1276 block_size -= modblk_size; in avs_tplg_pipeline_create()
1281 ret = avs_tplg_vendor_entry_size(tuples, modblk_size, in avs_tplg_pipeline_create()
1286 module = avs_tplg_module_create(comp, pipeline, tuples, esize); in avs_tplg_pipeline_create()
1288 dev_err(comp->dev, "parse module failed: %ld\n", in avs_tplg_pipeline_create()
1293 list_add_tail(&module->node, &pipeline->mod_list); in avs_tplg_pipeline_create()
1294 modblk_size -= esize; in avs_tplg_pipeline_create()
1295 tuples = avs_tplg_vendor_array_at(tuples, esize); in avs_tplg_pipeline_create()
1299 ret = parse_dictionary_entries(comp, tuples, block_size, pipeline->bindings, in avs_tplg_pipeline_create()
1300 pipeline->num_bindings, sizeof(*pipeline->bindings), in avs_tplg_pipeline_create()
1332 struct snd_soc_tplg_vendor_array *tuples, u32 block_size, in avs_tplg_path_create() argument
1340 path = devm_kzalloc(comp->card->dev, sizeof(*path), GFP_KERNEL); in avs_tplg_path_create()
1342 return ERR_PTR(-ENOMEM); in avs_tplg_path_create()
1344 path->owner = owner; in avs_tplg_path_create()
1345 INIT_LIST_HEAD(&path->ppl_list); in avs_tplg_path_create()
1346 INIT_LIST_HEAD(&path->node); in avs_tplg_path_create()
1349 ret = avs_tplg_vendor_array_lookup(tuples, block_size, in avs_tplg_path_create()
1351 if (ret == -ENOENT) in avs_tplg_path_create()
1356 return ERR_PTR(-EINVAL); in avs_tplg_path_create()
1359 ret = avs_parse_tokens(comp, path, parsers, num_parsers, tuples, offset); in avs_tplg_path_create()
1363 block_size -= offset; in avs_tplg_path_create()
1364 tuples = avs_tplg_vendor_array_at(tuples, offset); in avs_tplg_path_create()
1368 ret = avs_tplg_vendor_entry_size(tuples, block_size, in avs_tplg_path_create()
1373 pipeline = avs_tplg_pipeline_create(comp, path, tuples, esize); in avs_tplg_path_create()
1375 dev_err(comp->dev, "parse pipeline failed: %ld\n", in avs_tplg_path_create()
1380 list_add_tail(&pipeline->node, &path->ppl_list); in avs_tplg_path_create()
1381 block_size -= esize; in avs_tplg_path_create()
1382 tuples = avs_tplg_vendor_array_at(tuples, esize); in avs_tplg_path_create()
1398 struct snd_soc_tplg_vendor_array *tuples, u32 block_size, in parse_path_template() argument
1408 ret = avs_tplg_vendor_array_lookup(tuples, block_size, in parse_path_template()
1414 ret = avs_parse_tokens(comp, template, tmpl_tokens, num_tmpl_tokens, tuples, offset); in parse_path_template()
1418 block_size -= offset; in parse_path_template()
1419 tuples = avs_tplg_vendor_array_at(tuples, offset); in parse_path_template()
1423 ret = avs_tplg_vendor_entry_size(tuples, block_size, in parse_path_template()
1428 path = avs_tplg_path_create(comp, template, tuples, esize, path_tokens, in parse_path_template()
1431 dev_err(comp->dev, "parse path failed: %ld\n", PTR_ERR(path)); in parse_path_template()
1435 list_add_tail(&path->node, &template->path_list); in parse_path_template()
1436 block_size -= esize; in parse_path_template()
1437 tuples = avs_tplg_vendor_array_at(tuples, esize); in parse_path_template()
1445 struct snd_soc_tplg_vendor_array *tuples, u32 block_size) in avs_tplg_path_template_create() argument
1450 template = devm_kzalloc(comp->card->dev, sizeof(*template), GFP_KERNEL); in avs_tplg_path_template_create()
1452 return ERR_PTR(-ENOMEM); in avs_tplg_path_template_create()
1454 template->owner = owner; /* Used to access component tplg is assigned to. */ in avs_tplg_path_template_create()
1455 INIT_LIST_HEAD(&template->path_list); in avs_tplg_path_template_create()
1456 INIT_LIST_HEAD(&template->node); in avs_tplg_path_template_create()
1458 ret = parse_path_template(comp, tuples, block_size, template, path_tmpl_parsers, in avs_tplg_path_template_create()
1489 struct snd_soc_tplg_vendor_array *tuples, in avs_tplg_parse_initial_configs() argument
1493 struct avs_tplg *tplg = acomp->tplg; in avs_tplg_parse_initial_configs()
1497 ret = parse_dictionary_header(comp, tuples, (void **)&tplg->init_configs, in avs_tplg_parse_initial_configs()
1498 &tplg->num_init_configs, in avs_tplg_parse_initial_configs()
1499 sizeof(*tplg->init_configs), in avs_tplg_parse_initial_configs()
1504 block_size -= le32_to_cpu(tuples->size); in avs_tplg_parse_initial_configs()
1506 tuples = avs_tplg_vendor_array_next(tuples); in avs_tplg_parse_initial_configs()
1508 for (i = 0; i < tplg->num_init_configs && block_size > 0; i++) { in avs_tplg_parse_initial_configs()
1509 struct avs_tplg_init_config *config = &tplg->init_configs[i]; in avs_tplg_parse_initial_configs()
1516 * but in this case we can't as tuples are followed by raw data. in avs_tplg_parse_initial_configs()
1518 tmp = avs_tplg_vendor_array_next(tuples); in avs_tplg_parse_initial_configs()
1519 esize = le32_to_cpu(tuples->size) + le32_to_cpu(tmp->size); in avs_tplg_parse_initial_configs()
1521 ret = parse_dictionary_entries(comp, tuples, esize, config, 1, sizeof(*config), in avs_tplg_parse_initial_configs()
1526 block_size -= esize; in avs_tplg_parse_initial_configs()
1529 init_config_data = (void *)tuples + esize; in avs_tplg_parse_initial_configs()
1530 esize = config->length; in avs_tplg_parse_initial_configs()
1532 config->data = devm_kmemdup(comp->card->dev, init_config_data, esize, GFP_KERNEL); in avs_tplg_parse_initial_configs()
1533 if (!config->data) in avs_tplg_parse_initial_configs()
1534 return -ENOMEM; in avs_tplg_parse_initial_configs()
1536 tuples = init_config_data + esize; in avs_tplg_parse_initial_configs()
1537 block_size -= esize; in avs_tplg_parse_initial_configs()
1546 struct snd_soc_acpi_mach *mach = dev_get_platdata(comp->card->dev); in avs_route_load()
1560 buf = devm_kzalloc(comp->card->dev, len, GFP_KERNEL); in avs_route_load()
1562 return -ENOMEM; in avs_route_load()
1563 avs_ssp_sprint(buf, len, route->source, ssp_port, tdm_slot); in avs_route_load()
1564 route->source = buf; in avs_route_load()
1566 buf = devm_kzalloc(comp->card->dev, len, GFP_KERNEL); in avs_route_load()
1568 return -ENOMEM; in avs_route_load()
1569 avs_ssp_sprint(buf, len, route->sink, ssp_port, tdm_slot); in avs_route_load()
1570 route->sink = buf; in avs_route_load()
1572 if (route->control) { in avs_route_load()
1573 buf = devm_kzalloc(comp->card->dev, len, GFP_KERNEL); in avs_route_load()
1575 return -ENOMEM; in avs_route_load()
1576 avs_ssp_sprint(buf, len, route->control, ssp_port, tdm_slot); in avs_route_load()
1577 route->control = buf; in avs_route_load()
1593 if (!le32_to_cpu(dw->priv.size)) in avs_widget_load()
1596 w->no_wname_in_kcontrol_name = true; in avs_widget_load()
1598 if (w->ignore_suspend && !AVS_S0IX_SUPPORTED) { in avs_widget_load()
1599 dev_info_once(comp->dev, "Device does not support S0IX, check BIOS settings\n"); in avs_widget_load()
1600 w->ignore_suspend = false; in avs_widget_load()
1603 tplg = acomp->tplg; in avs_widget_load()
1604 mach = dev_get_platdata(comp->card->dev); in avs_widget_load()
1611 /* size is based on possible %d -> SSP:TDM, where SSP and TDM < 10 + '\0' */ in avs_widget_load()
1612 size_t size = strlen(dw->name) + 2; in avs_widget_load()
1619 return -ENOMEM; in avs_widget_load()
1620 avs_ssp_sprint(buf, size, dw->name, ssp_port, tdm_slot); in avs_widget_load()
1621 kfree(w->name); in avs_widget_load()
1622 /* w->name is freed later by soc_tplg_dapm_widget_create() */ in avs_widget_load()
1623 w->name = buf; in avs_widget_load()
1627 template = avs_tplg_path_template_create(comp, tplg, dw->priv.array, in avs_widget_load()
1628 le32_to_cpu(dw->priv.size)); in avs_widget_load()
1630 dev_err(comp->dev, "widget %s load failed: %ld\n", dw->name, in avs_widget_load()
1635 w->priv = template; /* link path information to widget */ in avs_widget_load()
1636 list_add_tail(&template->node, &tplg->path_tmpl_list); in avs_widget_load()
1644 struct avs_tplg_path_template *template = w->priv; in avs_widget_ready()
1646 template->w = w; in avs_widget_ready()
1659 dai_drv->ops = &avs_dai_fe_ops; in avs_dai_load()
1660 dai_drv->capture.subformats = fe_subformats; in avs_dai_load()
1661 dai_drv->playback.subformats = fe_subformats; in avs_dai_load()
1670 if (link->ignore_suspend && !AVS_S0IX_SUPPORTED) { in avs_link_load()
1671 dev_info_once(comp->dev, "Device does not support S0IX, check BIOS settings\n"); in avs_link_load()
1672 link->ignore_suspend = false; in avs_link_load()
1675 if (!link->no_pcm) { in avs_link_load()
1677 link->nonatomic = true; in avs_link_load()
1680 link->trigger[0] = SND_SOC_DPCM_TRIGGER_PRE; in avs_link_load()
1681 link->trigger[1] = SND_SOC_DPCM_TRIGGER_PRE; in avs_link_load()
1684 link->dpcm_merged_format = 1; in avs_link_load()
1708 struct snd_soc_tplg_vendor_array *tuples = manifest->priv.array; in avs_manifest() local
1710 size_t remaining = le32_to_cpu(manifest->priv.size); in avs_manifest()
1715 ret = avs_tplg_vendor_array_lookup(tuples, remaining, in avs_manifest()
1719 ret = -EINVAL; in avs_manifest()
1721 dev_err(comp->dev, "incorrect manifest format: %d\n", ret); in avs_manifest()
1726 ret = avs_parse_tokens(comp, acomp->tplg, manifest_parsers, in avs_manifest()
1727 ARRAY_SIZE(manifest_parsers), tuples, offset); in avs_manifest()
1731 remaining -= offset; in avs_manifest()
1732 tuples = avs_tplg_vendor_array_at(tuples, offset); in avs_manifest()
1734 ret = avs_tplg_vendor_array_lookup(tuples, remaining, in avs_manifest()
1737 dev_err(comp->dev, "audio formats lookup failed: %d\n", ret); in avs_manifest()
1742 ret = avs_tplg_parse_libraries(comp, tuples, offset); in avs_manifest()
1746 remaining -= offset; in avs_manifest()
1747 tuples = avs_tplg_vendor_array_at(tuples, offset); in avs_manifest()
1749 ret = avs_tplg_vendor_array_lookup(tuples, remaining, in avs_manifest()
1752 dev_err(comp->dev, "modcfgs_base lookup failed: %d\n", ret); in avs_manifest()
1757 ret = avs_tplg_parse_audio_formats(comp, tuples, offset); in avs_manifest()
1761 remaining -= offset; in avs_manifest()
1762 tuples = avs_tplg_vendor_array_at(tuples, offset); in avs_manifest()
1764 ret = avs_tplg_vendor_array_lookup(tuples, remaining, in avs_manifest()
1767 dev_err(comp->dev, "modcfgs_ext lookup failed: %d\n", ret); in avs_manifest()
1771 /* Module configs-base dictionary. */ in avs_manifest()
1772 ret = avs_tplg_parse_modcfgs_base(comp, tuples, offset); in avs_manifest()
1776 remaining -= offset; in avs_manifest()
1777 tuples = avs_tplg_vendor_array_at(tuples, offset); in avs_manifest()
1779 ret = avs_tplg_vendor_array_lookup(tuples, remaining, in avs_manifest()
1782 dev_err(comp->dev, "pplcfgs lookup failed: %d\n", ret); in avs_manifest()
1786 /* Module configs-ext dictionary. */ in avs_manifest()
1787 ret = avs_tplg_parse_modcfgs_ext(comp, tuples, offset); in avs_manifest()
1791 remaining -= offset; in avs_manifest()
1792 tuples = avs_tplg_vendor_array_at(tuples, offset); in avs_manifest()
1794 ret = avs_tplg_vendor_array_lookup(tuples, remaining, in avs_manifest()
1797 dev_err(comp->dev, "bindings lookup failed: %d\n", ret); in avs_manifest()
1802 ret = avs_tplg_parse_pplcfgs(comp, tuples, offset); in avs_manifest()
1806 remaining -= offset; in avs_manifest()
1807 tuples = avs_tplg_vendor_array_at(tuples, offset); in avs_manifest()
1809 ret = avs_tplg_vendor_array_lookup(tuples, remaining, in avs_manifest()
1812 dev_err(comp->dev, "condpath lookup failed: %d\n", ret); in avs_manifest()
1817 ret = avs_tplg_parse_bindings(comp, tuples, offset); in avs_manifest()
1821 remaining -= offset; in avs_manifest()
1822 tuples = avs_tplg_vendor_array_at(tuples, offset); in avs_manifest()
1824 ret = avs_tplg_vendor_array_lookup(tuples, remaining, in avs_manifest()
1826 if (ret == -ENOENT) { in avs_manifest()
1827 dev_dbg(comp->dev, "init config lookup failed: %d\n", ret); in avs_manifest()
1830 dev_err(comp->dev, "init config lookup failed: %d\n", ret); in avs_manifest()
1837 remaining -= offset; in avs_manifest()
1838 tuples = avs_tplg_vendor_array_at(tuples, offset); in avs_manifest()
1841 ret = avs_tplg_parse_initial_configs(comp, tuples, remaining); in avs_manifest()
1871 struct snd_soc_tplg_vendor_array *tuples; in avs_control_load() local
1878 switch (le32_to_cpu(hdr->type)) { in avs_control_load()
1881 tuples = tmc->priv.array; in avs_control_load()
1882 block_size = le32_to_cpu(tmc->priv.size); in avs_control_load()
1885 return -EINVAL; in avs_control_load()
1888 ctl_data = devm_kzalloc(comp->card->dev, sizeof(*ctl_data), GFP_KERNEL); in avs_control_load()
1890 return -ENOMEM; in avs_control_load()
1892 ret = parse_dictionary_entries(comp, tuples, block_size, ctl_data, 1, sizeof(*ctl_data), in avs_control_load()
1898 mc = (struct soc_mixer_control *)ctmpl->private_value; in avs_control_load()
1899 mc->dobj.private = ctl_data; in avs_control_load()
1919 tplg = devm_kzalloc(comp->card->dev, sizeof(*tplg), GFP_KERNEL); in avs_tplg_new()
1923 tplg->comp = comp; in avs_tplg_new()
1924 INIT_LIST_HEAD(&tplg->path_tmpl_list); in avs_tplg_new()
1934 ret = request_firmware(&fw, filename, comp->dev); in avs_load_topology()
1936 dev_err(comp->dev, "request topology \"%s\" failed: %d\n", filename, ret); in avs_load_topology()
1942 dev_err(comp->dev, "load topology \"%s\" failed: %d\n", filename, ret); in avs_load_topology()