mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-11-05 13:30:00 -05:00
topology: update ABI to improve support for different TLV object types.
Currently the TLV topology structure is targeted at only supporting the DB scale data. This patch extends support for the other TLV types so they can be easily added at a later stage. TLV structure is moved to common topology control header since it's a common field for controls and can be processed in a general way. Users must set a proper access flag for a control since it's used to decide if the TLV field is valid and if a TLV callback is needed. Removed the following fields from topology TLV struct: - size/count: type can decide the size. - numid: not needed to initialize TLV for kcontrol. - data: replaced by the type specific struct. Added TLV structure to generic control header and removed TLV structure from mixer control. Signed-off-by: Mengdong Lin <mengdong.lin@intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
d5e7e8bb38
commit
8c8372cc06
2 changed files with 21 additions and 18 deletions
|
|
@ -28,10 +28,7 @@ static int copy_tlv(struct tplg_elem *elem, struct tplg_elem *ref)
|
|||
tplg_dbg("TLV '%s' used by '%s\n", ref->id, elem->id);
|
||||
|
||||
/* TLV has a fixed size */
|
||||
mixer_ctrl->tlv = *tlv;
|
||||
|
||||
/* set size of TLV data */
|
||||
mixer_ctrl->hdr.tlv_size = tlv->count * sizeof(uint32_t);
|
||||
mixer_ctrl->hdr.tlv = *tlv;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -209,20 +206,19 @@ static int tplg_parse_tlv_dbscale(snd_config_t *cfg, struct tplg_elem *elem)
|
|||
snd_config_iterator_t i, next;
|
||||
snd_config_t *n;
|
||||
struct snd_soc_tplg_ctl_tlv *tplg_tlv;
|
||||
struct snd_soc_tplg_tlv_dbscale *scale;
|
||||
const char *id = NULL, *value = NULL;
|
||||
int *data;
|
||||
|
||||
tplg_dbg(" scale: %s\n", elem->id);
|
||||
|
||||
tplg_tlv = calloc(1, sizeof(*tplg_tlv));
|
||||
if (!tplg_tlv)
|
||||
return -ENOMEM;
|
||||
data = (int*)(tplg_tlv->data);
|
||||
|
||||
elem->tlv = tplg_tlv;
|
||||
tplg_tlv->numid = SNDRV_CTL_TLVT_DB_SCALE;
|
||||
tplg_tlv->count = 8;
|
||||
tplg_tlv->size = sizeof(*tplg_tlv);
|
||||
tplg_tlv->size = sizeof(struct snd_soc_tplg_ctl_tlv);
|
||||
tplg_tlv->type = SNDRV_CTL_TLVT_DB_SCALE;
|
||||
scale = &tplg_tlv->scale;
|
||||
|
||||
snd_config_for_each(i, next, cfg) {
|
||||
|
||||
|
|
@ -242,11 +238,11 @@ static int tplg_parse_tlv_dbscale(snd_config_t *cfg, struct tplg_elem *elem)
|
|||
|
||||
/* get TLV data */
|
||||
if (strcmp(id, "min") == 0)
|
||||
data[0] = atoi(value);
|
||||
scale->min = atoi(value);
|
||||
else if (strcmp(id, "step") == 0)
|
||||
data[1] = atoi(value);
|
||||
scale->step = atoi(value);
|
||||
else if (strcmp(id, "mute") == 0)
|
||||
data[2] = atoi(value);
|
||||
scale->mute = atoi(value);
|
||||
else
|
||||
SNDERR("error: unknown key %s\n", id);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue