History

ASoC: topology: Update TLV support so we can support more TLV 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.

Mengdong Lin committed 11 years ago

Commit 28a87ee1 parent 113adf22 files · +54 −23Browse files

Showing the changes to include/uapi (1 of 2 files). Show all

Unified · Split

include/uapi/sound/asoc.h+13−6
@@ -137,11 +137,19 @@ struct snd_soc_tplg_private { · 136 unmodified lines
137/*137/*
138 * Kcontrol TLV data.138 * Kcontrol TLV data.
139 */139 */
140struct snd_soc_tplg_tlv_dbscale {
141 __le32 min;
142 __le32 step;
143 __le32 mute;
144} __attribute__((packed));
145
140struct snd_soc_tplg_ctl_tlv {146struct snd_soc_tplg_ctl_tlv {
141 __le32 size; /* in bytes aligned to 4 */147 __le32 size; /* in bytes of this structure */
142 __le32 numid; /* control element numeric identification */148 __le32 type; /* SNDRV_CTL_TLVT_*, type of TLV */
143 __le32 count; /* number of elem in data array */149 union {
144 __le32 data[SND_SOC_TPLG_TLV_SIZE];150 __le32 data[SND_SOC_TPLG_TLV_SIZE];
151 struct snd_soc_tplg_tlv_dbscale scale;
152 };
145} __attribute__((packed));153} __attribute__((packed));
146 154
147/*155/*
@@ -172,7 +180,7 @@ struct snd_soc_tplg_ctl_hdr { · 24 unmodified lines
172 char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];180 char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
173 __le32 access;181 __le32 access;
174 struct snd_soc_tplg_kcontrol_ops_id ops;182 struct snd_soc_tplg_kcontrol_ops_id ops;
175 __le32 tlv_size; /* non zero means control has TLV data */183 struct snd_soc_tplg_ctl_tlv tlv;
176} __attribute__((packed));184} __attribute__((packed));
177 185
178/*186/*
@@ -260,7 +268,6 @@ struct snd_soc_tplg_mixer_control { · 81 unmodified lines
260 __le32 invert;268 __le32 invert;
261 __le32 num_channels;269 __le32 num_channels;
262 struct snd_soc_tplg_channel channel[SND_SOC_TPLG_MAX_CHAN];270 struct snd_soc_tplg_channel channel[SND_SOC_TPLG_MAX_CHAN];
263 struct snd_soc_tplg_ctl_tlv tlv;
264 struct snd_soc_tplg_private priv;271 struct snd_soc_tplg_private priv;
265} __attribute__((packed));272} __attribute__((packed));
266 273