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.
Showing the changes to include (1 of 2 files). Show all
Unified · Split
| @@ -137,11 +137,19 @@ struct snd_soc_tplg_private { · 136 unmodified lines | |||
| 137 | /* | 137 | /* |
| 138 | * Kcontrol TLV data. | 138 | * Kcontrol TLV data. |
| 139 | */ | 139 | */ |
| 140 | struct snd_soc_tplg_tlv_dbscale { | ||
| 141 | __le32 min; | ||
| 142 | __le32 step; | ||
| 143 | __le32 mute; | ||
| 144 | } __attribute__((packed)); | ||
| 145 | |||
| 140 | struct snd_soc_tplg_ctl_tlv { | 146 | struct 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 | ||