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]),
907 if (!guid_equal(&cfg->type, &AVS_COPIER_MOD_UUID)) in assign_copier_gtw_instance()
910 /* Only I2S boards assign port instance in ->i2s_link_mask. */ in assign_copier_gtw_instance()
911 switch (cfg->copier.dma_type) { in assign_copier_gtw_instance()
920 if (cfg->copier.vindex.val) in assign_copier_gtw_instance()
923 mach = dev_get_platdata(comp->card->dev); in assign_copier_gtw_instance()
933 cfg->copier.vindex.i2s.instance = ssp_port; in assign_copier_gtw_instance()
934 cfg->copier.vindex.i2s.time_slot = tdm_slot; in assign_copier_gtw_instance()
939 struct snd_soc_tplg_vendor_array *tuples, in avs_tplg_parse_modcfg_ext() argument
946 ret = avs_tplg_vendor_entry_size(tuples, block_size, in avs_tplg_parse_modcfg_ext()
952 ARRAY_SIZE(modcfg_ext_parsers), tuples, esize); in avs_tplg_parse_modcfg_ext()
959 block_size -= esize; in avs_tplg_parse_modcfg_ext()
965 num_pins = cfg->generic.num_input_pins + cfg->generic.num_output_pins; in avs_tplg_parse_modcfg_ext()
967 return -EINVAL; in avs_tplg_parse_modcfg_ext()
969 pins = devm_kcalloc(comp->card->dev, num_pins, sizeof(*pins), GFP_KERNEL); in avs_tplg_parse_modcfg_ext()
971 return -ENOMEM; in avs_tplg_parse_modcfg_ext()
973 tuples = avs_tplg_vendor_array_at(tuples, esize); in avs_tplg_parse_modcfg_ext()
974 ret = parse_dictionary_entries(comp, tuples, block_size, in avs_tplg_parse_modcfg_ext()
981 cfg->generic.pin_fmts = pins; in avs_tplg_parse_modcfg_ext()
988 struct snd_soc_tplg_vendor_array *tuples, in avs_tplg_parse_modcfgs_ext() argument
992 struct avs_tplg *tplg = acomp->tplg; in avs_tplg_parse_modcfgs_ext()
995 ret = parse_dictionary_header(comp, tuples, (void **)&tplg->modcfgs_ext, in avs_tplg_parse_modcfgs_ext()
996 &tplg->num_modcfgs_ext, in avs_tplg_parse_modcfgs_ext()
997 sizeof(*tplg->modcfgs_ext), in avs_tplg_parse_modcfgs_ext()
1002 block_size -= le32_to_cpu(tuples->size); in avs_tplg_parse_modcfgs_ext()
1004 tuples = avs_tplg_vendor_array_next(tuples); in avs_tplg_parse_modcfgs_ext()
1006 for (i = 0; i < tplg->num_modcfgs_ext; i++) { in avs_tplg_parse_modcfgs_ext()
1007 struct avs_tplg_modcfg_ext *cfg = &tplg->modcfgs_ext[i]; in avs_tplg_parse_modcfgs_ext()
1010 ret = avs_tplg_vendor_entry_size(tuples, block_size, in avs_tplg_parse_modcfgs_ext()
1015 ret = avs_tplg_parse_modcfg_ext(comp, cfg, tuples, esize); in avs_tplg_parse_modcfgs_ext()
1019 block_size -= esize; in avs_tplg_parse_modcfgs_ext()
1020 tuples = avs_tplg_vendor_array_at(tuples, esize); in avs_tplg_parse_modcfgs_ext()
1060 struct snd_soc_tplg_vendor_array *tuples, in avs_tplg_parse_pplcfgs() argument
1064 struct avs_tplg *tplg = acomp->tplg; in avs_tplg_parse_pplcfgs()
1066 return parse_dictionary(comp, tuples, block_size, (void **)&tplg->pplcfgs, in avs_tplg_parse_pplcfgs()
1067 &tplg->num_pplcfgs, sizeof(*tplg->pplcfgs), in avs_tplg_parse_pplcfgs()
1125 struct snd_soc_tplg_vendor_array *tuples, in avs_tplg_parse_bindings() argument
1129 struct avs_tplg *tplg = acomp->tplg; in avs_tplg_parse_bindings()
1131 return parse_dictionary(comp, tuples, block_size, (void **)&tplg->bindings, in avs_tplg_parse_bindings()
1132 &tplg->num_bindings, sizeof(*tplg->bindings), in avs_tplg_parse_bindings()
1200 struct snd_soc_tplg_vendor_array *tuples, u32 block_size) in avs_tplg_module_create() argument
1207 ret = avs_tplg_vendor_entry_size(tuples, block_size, in avs_tplg_module_create()
1212 module = devm_kzalloc(comp->card->dev, sizeof(*module), GFP_KERNEL); in avs_tplg_module_create()
1214 return ERR_PTR(-ENOMEM); in avs_tplg_module_create()
1217 ARRAY_SIZE(module_parsers), tuples, esize); in avs_tplg_module_create()
1221 block_size -= esize; in avs_tplg_module_create()
1224 u32 num_config_ids = module->num_config_ids; in avs_tplg_module_create()
1228 return ERR_PTR(-EINVAL); in avs_tplg_module_create()
1230 config_ids = devm_kcalloc(comp->card->dev, num_config_ids, sizeof(*config_ids), in avs_tplg_module_create()
1233 return ERR_PTR(-ENOMEM); in avs_tplg_module_create()
1235 tuples = avs_tplg_vendor_array_at(tuples, esize); in avs_tplg_module_create()
1236 ret = parse_dictionary_entries(comp, tuples, block_size, in avs_tplg_module_create()
1244 module->config_ids = config_ids; in avs_tplg_module_create()
1247 module->owner = owner; in avs_tplg_module_create()
1248 INIT_LIST_HEAD(&module->node); in avs_tplg_module_create()
1278 .offset = 0, /* to treat pipeline->bindings as dictionary */
1285 struct snd_soc_tplg_vendor_array *tuples, u32 block_size) in avs_tplg_pipeline_create() argument
1291 pipeline = devm_kzalloc(comp->card->dev, sizeof(*pipeline), GFP_KERNEL); in avs_tplg_pipeline_create()
1293 return ERR_PTR(-ENOMEM); in avs_tplg_pipeline_create()
1295 pipeline->owner = owner; in avs_tplg_pipeline_create()
1296 INIT_LIST_HEAD(&pipeline->mod_list); in avs_tplg_pipeline_create()
1299 ret = avs_tplg_vendor_array_lookup(tuples, block_size, in avs_tplg_pipeline_create()
1302 ret = -EINVAL; in avs_tplg_pipeline_create()
1308 ARRAY_SIZE(pipeline_parsers), tuples, offset); in avs_tplg_pipeline_create()
1312 block_size -= offset; in avs_tplg_pipeline_create()
1313 tuples = avs_tplg_vendor_array_at(tuples, offset); in avs_tplg_pipeline_create()
1316 ret = avs_tplg_vendor_array_lookup_next(tuples, block_size, in avs_tplg_pipeline_create()
1319 if (ret != -ENOENT) in avs_tplg_pipeline_create()
1323 if (pipeline->num_bindings) in avs_tplg_pipeline_create()
1324 return ERR_PTR(-EINVAL); in avs_tplg_pipeline_create()
1328 pipeline->bindings = devm_kcalloc(comp->card->dev, pipeline->num_bindings, in avs_tplg_pipeline_create()
1329 sizeof(*pipeline->bindings), GFP_KERNEL); in avs_tplg_pipeline_create()
1330 if (!pipeline->bindings) in avs_tplg_pipeline_create()
1331 return ERR_PTR(-ENOMEM); in avs_tplg_pipeline_create()
1336 block_size -= modblk_size; in avs_tplg_pipeline_create()
1341 ret = avs_tplg_vendor_entry_size(tuples, modblk_size, in avs_tplg_pipeline_create()
1346 module = avs_tplg_module_create(comp, pipeline, tuples, esize); in avs_tplg_pipeline_create()
1348 dev_err(comp->dev, "parse module failed: %ld\n", in avs_tplg_pipeline_create()
1353 list_add_tail(&module->node, &pipeline->mod_list); in avs_tplg_pipeline_create()
1354 modblk_size -= esize; in avs_tplg_pipeline_create()
1355 tuples = avs_tplg_vendor_array_at(tuples, esize); in avs_tplg_pipeline_create()
1359 ret = parse_dictionary_entries(comp, tuples, block_size, pipeline->bindings, in avs_tplg_pipeline_create()
1360 pipeline->num_bindings, sizeof(*pipeline->bindings), in avs_tplg_pipeline_create()
1392 struct snd_soc_tplg_vendor_array *tuples, u32 block_size, in avs_tplg_path_create() argument
1400 path = devm_kzalloc(comp->card->dev, sizeof(*path), GFP_KERNEL); in avs_tplg_path_create()
1402 return ERR_PTR(-ENOMEM); in avs_tplg_path_create()
1404 path->owner = owner; in avs_tplg_path_create()
1405 INIT_LIST_HEAD(&path->ppl_list); in avs_tplg_path_create()
1406 INIT_LIST_HEAD(&path->node); in avs_tplg_path_create()
1409 ret = avs_tplg_vendor_array_lookup(tuples, block_size, in avs_tplg_path_create()
1411 if (ret == -ENOENT) in avs_tplg_path_create()
1416 return ERR_PTR(-EINVAL); in avs_tplg_path_create()
1419 ret = avs_parse_tokens(comp, path, parsers, num_parsers, tuples, offset); in avs_tplg_path_create()
1423 block_size -= offset; in avs_tplg_path_create()
1424 tuples = avs_tplg_vendor_array_at(tuples, offset); in avs_tplg_path_create()
1428 ret = avs_tplg_vendor_entry_size(tuples, block_size, in avs_tplg_path_create()
1433 pipeline = avs_tplg_pipeline_create(comp, path, tuples, esize); in avs_tplg_path_create()
1435 dev_err(comp->dev, "parse pipeline failed: %ld\n", in avs_tplg_path_create()
1440 list_add_tail(&pipeline->node, &path->ppl_list); in avs_tplg_path_create()
1441 block_size -= esize; in avs_tplg_path_create()
1442 tuples = avs_tplg_vendor_array_at(tuples, esize); in avs_tplg_path_create()
1458 struct snd_soc_tplg_vendor_array *tuples, u32 block_size, in parse_path_template() argument
1468 ret = avs_tplg_vendor_array_lookup(tuples, block_size, in parse_path_template()
1474 ret = avs_parse_tokens(comp, template, tmpl_tokens, num_tmpl_tokens, tuples, offset); in parse_path_template()
1478 block_size -= offset; in parse_path_template()
1479 tuples = avs_tplg_vendor_array_at(tuples, offset); in parse_path_template()
1483 ret = avs_tplg_vendor_entry_size(tuples, block_size, in parse_path_template()
1488 path = avs_tplg_path_create(comp, template, tuples, esize, path_tokens, in parse_path_template()
1491 dev_err(comp->dev, "parse path failed: %ld\n", PTR_ERR(path)); in parse_path_template()
1495 list_add_tail(&path->node, &template->path_list); in parse_path_template()
1496 block_size -= esize; in parse_path_template()
1497 tuples = avs_tplg_vendor_array_at(tuples, esize); in parse_path_template()
1505 struct snd_soc_tplg_vendor_array *tuples, u32 block_size) in avs_tplg_path_template_create() argument
1510 template = devm_kzalloc(comp->card->dev, sizeof(*template), GFP_KERNEL); in avs_tplg_path_template_create()
1512 return ERR_PTR(-ENOMEM); in avs_tplg_path_template_create()
1514 template->owner = owner; /* Used to access component tplg is assigned to. */ in avs_tplg_path_template_create()
1515 INIT_LIST_HEAD(&template->path_list); in avs_tplg_path_template_create()
1516 INIT_LIST_HEAD(&template->node); in avs_tplg_path_template_create()
1518 ret = parse_path_template(comp, tuples, block_size, template, path_tmpl_parsers, in avs_tplg_path_template_create()
1549 struct snd_soc_tplg_vendor_array *tuples, in avs_tplg_parse_initial_configs() argument
1553 struct avs_tplg *tplg = acomp->tplg; in avs_tplg_parse_initial_configs()
1557 ret = parse_dictionary_header(comp, tuples, (void **)&tplg->init_configs, in avs_tplg_parse_initial_configs()
1558 &tplg->num_init_configs, in avs_tplg_parse_initial_configs()
1559 sizeof(*tplg->init_configs), in avs_tplg_parse_initial_configs()
1564 block_size -= le32_to_cpu(tuples->size); in avs_tplg_parse_initial_configs()
1566 tuples = avs_tplg_vendor_array_next(tuples); in avs_tplg_parse_initial_configs()
1568 for (i = 0; i < tplg->num_init_configs && block_size > 0; i++) { in avs_tplg_parse_initial_configs()
1569 struct avs_tplg_init_config *config = &tplg->init_configs[i]; in avs_tplg_parse_initial_configs()
1576 * but in this case we can't as tuples are followed by raw data. in avs_tplg_parse_initial_configs()
1578 tmp = avs_tplg_vendor_array_next(tuples); in avs_tplg_parse_initial_configs()
1579 esize = le32_to_cpu(tuples->size) + le32_to_cpu(tmp->size); in avs_tplg_parse_initial_configs()
1581 ret = parse_dictionary_entries(comp, tuples, esize, config, 1, sizeof(*config), in avs_tplg_parse_initial_configs()
1586 block_size -= esize; in avs_tplg_parse_initial_configs()
1589 init_config_data = (void *)tuples + esize; in avs_tplg_parse_initial_configs()
1590 esize = config->length; in avs_tplg_parse_initial_configs()
1592 config->data = devm_kmemdup(comp->card->dev, init_config_data, esize, GFP_KERNEL); in avs_tplg_parse_initial_configs()
1593 if (!config->data) in avs_tplg_parse_initial_configs()
1594 return -ENOMEM; in avs_tplg_parse_initial_configs()
1596 tuples = init_config_data + esize; in avs_tplg_parse_initial_configs()
1597 block_size -= esize; in avs_tplg_parse_initial_configs()
1606 struct snd_soc_acpi_mach *mach = dev_get_platdata(comp->card->dev); in avs_route_load()
1620 buf = devm_kzalloc(comp->card->dev, len, GFP_KERNEL); in avs_route_load()
1622 return -ENOMEM; in avs_route_load()
1623 avs_ssp_sprint(buf, len, route->source, ssp_port, tdm_slot); in avs_route_load()
1624 route->source = buf; in avs_route_load()
1626 buf = devm_kzalloc(comp->card->dev, len, GFP_KERNEL); in avs_route_load()
1628 return -ENOMEM; in avs_route_load()
1629 avs_ssp_sprint(buf, len, route->sink, ssp_port, tdm_slot); in avs_route_load()
1630 route->sink = buf; in avs_route_load()
1632 if (route->control) { in avs_route_load()
1633 buf = devm_kzalloc(comp->card->dev, len, GFP_KERNEL); in avs_route_load()
1635 return -ENOMEM; in avs_route_load()
1636 avs_ssp_sprint(buf, len, route->control, ssp_port, tdm_slot); in avs_route_load()
1637 route->control = buf; in avs_route_load()
1653 if (!le32_to_cpu(dw->priv.size)) in avs_widget_load()
1656 w->no_wname_in_kcontrol_name = true; in avs_widget_load()
1658 if (w->ignore_suspend && !AVS_S0IX_SUPPORTED) { in avs_widget_load()
1659 dev_info_once(comp->dev, "Device does not support S0IX, check BIOS settings\n"); in avs_widget_load()
1660 w->ignore_suspend = false; in avs_widget_load()
1663 tplg = acomp->tplg; in avs_widget_load()
1664 mach = dev_get_platdata(comp->card->dev); in avs_widget_load()
1671 /* size is based on possible %d -> SSP:TDM, where SSP and TDM < 10 + '\0' */ in avs_widget_load()
1672 size_t size = strlen(dw->name) + 2; in avs_widget_load()
1679 return -ENOMEM; in avs_widget_load()
1680 avs_ssp_sprint(buf, size, dw->name, ssp_port, tdm_slot); in avs_widget_load()
1681 kfree(w->name); in avs_widget_load()
1682 /* w->name is freed later by soc_tplg_dapm_widget_create() */ in avs_widget_load()
1683 w->name = buf; in avs_widget_load()
1687 template = avs_tplg_path_template_create(comp, tplg, dw->priv.array, in avs_widget_load()
1688 le32_to_cpu(dw->priv.size)); in avs_widget_load()
1690 dev_err(comp->dev, "widget %s load failed: %ld\n", dw->name, in avs_widget_load()
1695 w->priv = template; /* link path information to widget */ in avs_widget_load()
1696 list_add_tail(&template->node, &tplg->path_tmpl_list); in avs_widget_load()
1704 struct avs_tplg_path_template *template = w->priv; in avs_widget_ready()
1706 template->w = w; in avs_widget_ready()
1719 dai_drv->ops = &avs_dai_fe_ops; in avs_dai_load()
1720 dai_drv->capture.subformats = fe_subformats; in avs_dai_load()
1721 dai_drv->playback.subformats = fe_subformats; in avs_dai_load()
1730 if (link->ignore_suspend && !AVS_S0IX_SUPPORTED) { in avs_link_load()
1731 dev_info_once(comp->dev, "Device does not support S0IX, check BIOS settings\n"); in avs_link_load()
1732 link->ignore_suspend = false; in avs_link_load()
1735 if (!link->no_pcm) { in avs_link_load()
1737 link->nonatomic = true; in avs_link_load()
1740 link->trigger[0] = SND_SOC_DPCM_TRIGGER_PRE; in avs_link_load()
1741 link->trigger[1] = SND_SOC_DPCM_TRIGGER_PRE; in avs_link_load()
1744 link->dpcm_merged_format = 1; in avs_link_load()
1768 struct snd_soc_tplg_vendor_array *tuples = manifest->priv.array; in avs_manifest() local
1770 size_t remaining = le32_to_cpu(manifest->priv.size); in avs_manifest()
1775 ret = avs_tplg_vendor_array_lookup(tuples, remaining, in avs_manifest()
1779 ret = -EINVAL; in avs_manifest()
1781 dev_err(comp->dev, "incorrect manifest format: %d\n", ret); in avs_manifest()
1786 ret = avs_parse_tokens(comp, acomp->tplg, manifest_parsers, in avs_manifest()
1787 ARRAY_SIZE(manifest_parsers), 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, "audio formats lookup failed: %d\n", ret); in avs_manifest()
1802 ret = avs_tplg_parse_libraries(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, "modcfgs_base lookup failed: %d\n", ret); in avs_manifest()
1817 ret = avs_tplg_parse_audio_formats(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()
1827 dev_err(comp->dev, "modcfgs_ext lookup failed: %d\n", ret); in avs_manifest()
1831 /* Module configs-base dictionary. */ in avs_manifest()
1832 ret = avs_tplg_parse_modcfgs_base(comp, tuples, offset); in avs_manifest()
1836 remaining -= offset; in avs_manifest()
1837 tuples = avs_tplg_vendor_array_at(tuples, offset); in avs_manifest()
1839 ret = avs_tplg_vendor_array_lookup(tuples, remaining, in avs_manifest()
1842 dev_err(comp->dev, "pplcfgs lookup failed: %d\n", ret); in avs_manifest()
1846 /* Module configs-ext dictionary. */ in avs_manifest()
1847 ret = avs_tplg_parse_modcfgs_ext(comp, tuples, offset); in avs_manifest()
1851 remaining -= offset; in avs_manifest()
1852 tuples = avs_tplg_vendor_array_at(tuples, offset); in avs_manifest()
1854 ret = avs_tplg_vendor_array_lookup(tuples, remaining, in avs_manifest()
1857 dev_err(comp->dev, "bindings lookup failed: %d\n", ret); in avs_manifest()
1862 ret = avs_tplg_parse_pplcfgs(comp, tuples, offset); in avs_manifest()
1866 remaining -= offset; in avs_manifest()
1867 tuples = avs_tplg_vendor_array_at(tuples, offset); in avs_manifest()
1869 ret = avs_tplg_vendor_array_lookup(tuples, remaining, in avs_manifest()
1872 dev_err(comp->dev, "condpath lookup failed: %d\n", ret); in avs_manifest()
1877 ret = avs_tplg_parse_bindings(comp, tuples, offset); in avs_manifest()
1881 remaining -= offset; in avs_manifest()
1882 tuples = avs_tplg_vendor_array_at(tuples, offset); in avs_manifest()
1884 ret = avs_tplg_vendor_array_lookup(tuples, remaining, in avs_manifest()
1886 if (ret == -ENOENT) { in avs_manifest()
1887 dev_dbg(comp->dev, "init config lookup failed: %d\n", ret); in avs_manifest()
1890 dev_err(comp->dev, "init config lookup failed: %d\n", ret); in avs_manifest()
1897 remaining -= offset; in avs_manifest()
1898 tuples = avs_tplg_vendor_array_at(tuples, offset); in avs_manifest()
1901 ret = avs_tplg_parse_initial_configs(comp, tuples, remaining); in avs_manifest()
1941 struct snd_soc_tplg_vendor_array *tuples; in avs_control_load() local
1948 switch (le32_to_cpu(hdr->type)) { in avs_control_load()
1952 return -EINVAL; in avs_control_load()
1955 mc = (struct soc_mixer_control *)ctmpl->private_value; in avs_control_load()
1957 tuples = tmc->priv.array; in avs_control_load()
1958 block_size = le32_to_cpu(tmc->priv.size); in avs_control_load()
1960 ctl_data = devm_kzalloc(comp->card->dev, sizeof(*ctl_data), GFP_KERNEL); in avs_control_load()
1962 return -ENOMEM; in avs_control_load()
1964 ret = parse_dictionary_entries(comp, tuples, block_size, ctl_data, 1, sizeof(*ctl_data), in avs_control_load()
1970 mc->dobj.private = ctl_data; in avs_control_load()
1971 if (tmc->invert) { in avs_control_load()
1972 ctl_data->values[0] = mc->max; in avs_control_load()
1973 for (i = 1; i < mc->num_channels; i++) in avs_control_load()
1974 ctl_data->values[i] = mc->max; in avs_control_load()
1996 tplg = devm_kzalloc(comp->card->dev, sizeof(*tplg), GFP_KERNEL); in avs_tplg_new()
2000 tplg->comp = comp; in avs_tplg_new()
2001 INIT_LIST_HEAD(&tplg->path_tmpl_list); in avs_tplg_new()
2011 ret = request_firmware(&fw, filename, comp->dev); in avs_load_topology()
2013 dev_err(comp->dev, "request topology \"%s\" failed: %d\n", filename, ret); in avs_load_topology()
2019 dev_err(comp->dev, "load topology \"%s\" failed: %d\n", filename, ret); in avs_load_topology()