unsigned int num_dapm_routes;
int (*probe)(struct snd_soc_component *component);
+ int (*fixup_controls)(struct snd_soc_component *component);
void (*remove)(struct snd_soc_component *component);
int (*suspend)(struct snd_soc_component *component);
int (*resume)(struct snd_soc_component *component);
void snd_soc_component_resume(struct snd_soc_component *component);
int snd_soc_component_is_suspended(struct snd_soc_component *component);
int snd_soc_component_probe(struct snd_soc_component *component);
+int snd_soc_component_fixup_controls(struct snd_soc_component *component);
void snd_soc_component_remove(struct snd_soc_component *component);
int snd_soc_component_of_xlate_dai_id(struct snd_soc_component *component,
struct device_node *ep);
return soc_component_ret(component, ret);
}
+int snd_soc_component_fixup_controls(struct snd_soc_component *component)
+{
+ int ret = 0;
+
+ if (component->driver->fixup_controls)
+ ret = component->driver->fixup_controls(component);
+
+ return soc_component_ret(component, ret);
+}
+
void snd_soc_component_remove(struct snd_soc_component *component)
{
if (component->driver->remove)
goto probe_end;
snd_soc_dapm_new_widgets(card);
+ for_each_card_components(card, component) {
+ ret = snd_soc_component_fixup_controls(component);
+ if (ret < 0)
+ goto probe_end;
+ }
snd_soc_card_fixup_controls(card);
ret = snd_card_register(card->snd_card);