topology: Merge private data before embedded controls of a widget

For a widget ABI object, its private data sits before the embedded
controls, so we should merge the private data blocks at first, and
then the embedded controls.

Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
Acked-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Mengdong Lin 2016-11-24 09:33:52 +08:00 committed by Takashi Iwai
parent fa7a52e636
commit f9633ed852

View file

@ -160,7 +160,21 @@ static int tplg_build_widget(snd_tplg_t *tplg,
base = &elem->ref_list;
/* for each ref in this control elem */
/* A widget's private data sits before the embedded controls.
* So merge the private data blocks at first
*/
list_for_each(pos, base) {
ref = list_entry(pos, struct tplg_ref, list);
if (ref->type != SND_TPLG_TYPE_DATA)
continue;
err = tplg_copy_data(tplg, elem, ref);
if (err < 0)
return err;
}
/* Merge the embedded controls */
list_for_each(pos, base) {
ref = list_entry(pos, struct tplg_ref, list);
@ -190,12 +204,6 @@ static int tplg_build_widget(snd_tplg_t *tplg,
err = copy_dapm_control(elem, ref->elem);
break;
case SND_TPLG_TYPE_DATA:
err = tplg_copy_data(tplg, elem, ref);
if (err < 0)
return err;
break;
default:
break;
}