From: Ranjani Sridharan Date: Mon, 26 Apr 2021 19:49:51 +0000 (-0700) Subject: topology: pre-process-dapm: Add support for tlv objects X-Git-Tag: v1.2.5~12 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=96b5e5a87536f57566fd59d89789a243f82e890e;p=alsa-utils.git topology: pre-process-dapm: Add support for tlv objects Add support for pre-processing TLV objects For example: Object.Base.tlv."vtlv_m64s2" {} will be converted to: SectionTLV.'vtlv_m64s2' {} And the mixer controle section will be updated to add the reference to the tlv object. Signed-off-by: Ranjani Sridharan Signed-off-by: Jaroslav Kysela --- diff --git a/topology/Makefile.am b/topology/Makefile.am index 8efbf4f..7c9392c 100644 --- a/topology/Makefile.am +++ b/topology/Makefile.am @@ -8,7 +8,8 @@ endif %.1: %.rst rst2man $< > $@ -alsatplg_SOURCES = topology.c pre-processor.c pre-process-class.c pre-process-object.c +alsatplg_SOURCES = topology.c pre-processor.c pre-process-class.c pre-process-object.c \ + pre-process-dapm.c noinst_HEADERS = topology.h pre-processor.h diff --git a/topology/pre-process-dapm.c b/topology/pre-process-dapm.c new file mode 100644 index 0000000..372ac65 --- /dev/null +++ b/topology/pre-process-dapm.c @@ -0,0 +1,47 @@ +/* + Copyright(c) 2021 Intel Corporation + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of version 2 of the GNU General Public License as + published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + The full GNU General Public License is included in this distribution + in the file called LICENSE.GPL. +*/ +#include +#include +#include +#include +#include +#include +#include "topology.h" +#include "pre-processor.h" + +int tplg_build_tlv_object(struct tplg_pre_processor *tplg_pp, snd_config_t *obj_cfg, + snd_config_t *parent) +{ + snd_config_t *cfg; + const char *name; + int ret; + + cfg = tplg_object_get_instance_config(tplg_pp, obj_cfg); + + name = tplg_object_get_name(tplg_pp, cfg); + if (!name) + return -EINVAL; + + ret = tplg_build_object_from_template(tplg_pp, obj_cfg, &cfg, NULL, false); + if (ret < 0) + return ret; + + return tplg_parent_update(tplg_pp, parent, "tlv", name); +} diff --git a/topology/pre-process-object.c b/topology/pre-process-object.c index 22f4d48..64e1689 100644 --- a/topology/pre-process-object.c +++ b/topology/pre-process-object.c @@ -113,6 +113,18 @@ int tplg_parent_update(struct tplg_pre_processor *tplg_pp, snd_config_t *parent, return ret; /* get section config */ + if (!strcmp(section_name, "tlv")) { + ret = tplg_config_make_add(&item_config, section_name, + SND_CONFIG_TYPE_STRING, cfg); + if (ret < 0) { + SNDERR("Error creating section config widget %s for %s\n", + section_name, parent_name); + return ret; + } + + return snd_config_set_string(item_config, item_name); + } + ret = snd_config_search(cfg, section_name, &item_config); if (ret < 0) { ret = tplg_config_make_add(&item_config, section_name, @@ -859,6 +871,7 @@ const struct config_template_items data_config = { const struct build_function_map object_build_map[] = { {"Base", "manifest", "SectionManifest", &tplg_build_generic_object, NULL}, {"Base", "data", "SectionData", &tplg_build_data_object, &data_config}, + {"Base", "tlv", "SectionTLV", &tplg_build_tlv_object, NULL}, {"Base", "VendorToken", "SectionVendorTokens", &tplg_build_vendor_token_object, NULL}, {"Widget", "", "SectionWidget", &tplg_build_generic_object, &widget_config}, }; diff --git a/topology/pre-processor.h b/topology/pre-processor.h index c6d2df8..34fb723 100644 --- a/topology/pre-processor.h +++ b/topology/pre-processor.h @@ -53,6 +53,8 @@ void tplg_pp_config_debug(struct tplg_pre_processor *tplg_pp, snd_config_t *cfg) int tplg_build_object_from_template(struct tplg_pre_processor *tplg_pp, snd_config_t *obj_cfg, snd_config_t **wtop, snd_config_t *top_config, bool skip_name); +int tplg_build_tlv_object(struct tplg_pre_processor *tplg_pp, snd_config_t *obj_cfg, + snd_config_t *parent); int tplg_parent_update(struct tplg_pre_processor *tplg_pp, snd_config_t *parent, const char *section_name, const char *item_name);