Commit d4cd9daa authored by Vaibhav Agarwal's avatar Vaibhav Agarwal Committed by Alex Elder

greybus: audio: topology: Use csize while computing next_ptr in parser

Size of control elements vary in case of enumerated controls. As a
preparation to enable enumerated control in topology parser, this patch
uses csize while parsing controls & wsize while parsing widgets & its
control to update next pointer.
Signed-off-by: default avatarVaibhav Agarwal <vaibhav.agarwal@linaro.org>
Reviewed-by: default avatarMark Greer <mark.greer@animalcreek.com>
Signed-off-by: default avatarAlex Elder <elder@linaro.org>
parent bb296b48
...@@ -624,9 +624,9 @@ static int gbaudio_widget_event(struct snd_soc_dapm_widget *w, ...@@ -624,9 +624,9 @@ static int gbaudio_widget_event(struct snd_soc_dapm_widget *w,
static int gbaudio_tplg_create_widget(struct gbaudio_module_info *module, static int gbaudio_tplg_create_widget(struct gbaudio_module_info *module,
struct snd_soc_dapm_widget *dw, struct snd_soc_dapm_widget *dw,
struct gb_audio_widget *w) struct gb_audio_widget *w, int *w_size)
{ {
int i, ret; int i, ret, csize;
struct snd_kcontrol_new *widget_kctls; struct snd_kcontrol_new *widget_kctls;
struct gb_audio_control *curr; struct gb_audio_control *curr;
struct gbaudio_control *control, *_control; struct gbaudio_control *control, *_control;
...@@ -648,9 +648,11 @@ static int gbaudio_tplg_create_widget(struct gbaudio_module_info *module, ...@@ -648,9 +648,11 @@ static int gbaudio_tplg_create_widget(struct gbaudio_module_info *module,
return -ENOMEM; return -ENOMEM;
} }
*w_size = sizeof(struct gb_audio_widget);
/* create relevant kcontrols */ /* create relevant kcontrols */
curr = w->ctl;
for (i = 0; i < w->ncontrols; i++) { for (i = 0; i < w->ncontrols; i++) {
curr = &w->ctl[i];
ret = gbaudio_tplg_create_wcontrol(module, &widget_kctls[i], ret = gbaudio_tplg_create_wcontrol(module, &widget_kctls[i],
curr); curr);
if (ret) { if (ret) {
...@@ -673,6 +675,9 @@ static int gbaudio_tplg_create_widget(struct gbaudio_module_info *module, ...@@ -673,6 +675,9 @@ static int gbaudio_tplg_create_widget(struct gbaudio_module_info *module,
if (curr->info.type == GB_AUDIO_CTL_ELEM_TYPE_ENUMERATED) if (curr->info.type == GB_AUDIO_CTL_ELEM_TYPE_ENUMERATED)
control->texts = (const char * const *) control->texts = (const char * const *)
curr->info.value.enumerated.names; curr->info.value.enumerated.names;
csize = sizeof(struct gb_audio_control);
*w_size += csize;
curr = (void *)curr + csize;
list_add(&control->list, &module->widget_ctl_list); list_add(&control->list, &module->widget_ctl_list);
dev_dbg(module->dev, "%s: control of type %d created\n", dev_dbg(module->dev, "%s: control of type %d created\n",
widget_kctls[i].name, widget_kctls[i].iface); widget_kctls[i].name, widget_kctls[i].iface);
...@@ -771,7 +776,7 @@ static int gbaudio_tplg_create_widget(struct gbaudio_module_info *module, ...@@ -771,7 +776,7 @@ static int gbaudio_tplg_create_widget(struct gbaudio_module_info *module,
static int gbaudio_tplg_process_kcontrols(struct gbaudio_module_info *module, static int gbaudio_tplg_process_kcontrols(struct gbaudio_module_info *module,
struct gb_audio_control *controls) struct gb_audio_control *controls)
{ {
int i, ret; int i, csize, ret;
struct snd_kcontrol_new *dapm_kctls; struct snd_kcontrol_new *dapm_kctls;
struct gb_audio_control *curr; struct gb_audio_control *curr;
struct gbaudio_control *control, *_control; struct gbaudio_control *control, *_control;
...@@ -808,10 +813,12 @@ static int gbaudio_tplg_process_kcontrols(struct gbaudio_module_info *module, ...@@ -808,10 +813,12 @@ static int gbaudio_tplg_process_kcontrols(struct gbaudio_module_info *module,
if (curr->info.type == GB_AUDIO_CTL_ELEM_TYPE_ENUMERATED) if (curr->info.type == GB_AUDIO_CTL_ELEM_TYPE_ENUMERATED)
control->texts = (const char * const *) control->texts = (const char * const *)
curr->info.value.enumerated.names; curr->info.value.enumerated.names;
csize = sizeof(struct gb_audio_control);
list_add(&control->list, &module->ctl_list); list_add(&control->list, &module->ctl_list);
dev_dbg(module->dev, "%d:%s created of type %d\n", curr->id, dev_dbg(module->dev, "%d:%s created of type %d\n", curr->id,
curr->name, curr->info.type); curr->name, curr->info.type);
curr++; curr = (void *)curr + csize;
} }
module->controls = dapm_kctls; module->controls = dapm_kctls;
...@@ -829,7 +836,7 @@ static int gbaudio_tplg_process_kcontrols(struct gbaudio_module_info *module, ...@@ -829,7 +836,7 @@ static int gbaudio_tplg_process_kcontrols(struct gbaudio_module_info *module,
static int gbaudio_tplg_process_widgets(struct gbaudio_module_info *module, static int gbaudio_tplg_process_widgets(struct gbaudio_module_info *module,
struct gb_audio_widget *widgets) struct gb_audio_widget *widgets)
{ {
int i, ret, ncontrols; int i, ret, w_size;
struct snd_soc_dapm_widget *dapm_widgets; struct snd_soc_dapm_widget *dapm_widgets;
struct gb_audio_widget *curr; struct gb_audio_widget *curr;
struct gbaudio_widget *widget, *_widget; struct gbaudio_widget *widget, *_widget;
...@@ -843,7 +850,7 @@ static int gbaudio_tplg_process_widgets(struct gbaudio_module_info *module, ...@@ -843,7 +850,7 @@ static int gbaudio_tplg_process_widgets(struct gbaudio_module_info *module,
curr = widgets; curr = widgets;
for (i = 0; i < module->num_dapm_widgets; i++) { for (i = 0; i < module->num_dapm_widgets; i++) {
ret = gbaudio_tplg_create_widget(module, &dapm_widgets[i], ret = gbaudio_tplg_create_widget(module, &dapm_widgets[i],
curr); curr, &w_size);
if (ret) { if (ret) {
dev_err(module->dev, "%s:%d type not supported\n", dev_err(module->dev, "%s:%d type not supported\n",
curr->name, curr->type); curr->name, curr->type);
...@@ -859,9 +866,7 @@ static int gbaudio_tplg_process_widgets(struct gbaudio_module_info *module, ...@@ -859,9 +866,7 @@ static int gbaudio_tplg_process_widgets(struct gbaudio_module_info *module,
widget->id = curr->id; widget->id = curr->id;
widget->name = curr->name; widget->name = curr->name;
list_add(&widget->list, &module->widget_list); list_add(&widget->list, &module->widget_list);
ncontrols = curr->ncontrols; curr = (void *)curr + w_size;
curr++;
curr = (void *)curr + ncontrols*sizeof(struct gb_audio_control);
} }
module->dapm_widgets = dapm_widgets; module->dapm_widgets = dapm_widgets;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment