mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 12:44:03 +02:00
ASoC: Add a component fixup_controls callback
A card level fixup_controls callback was added in:
commit df4d27b19b ("ASoC: Introduce 'fixup_controls' card method")
This allowed the machine driver to take actions after all the
card controls have been added. However, there are times when a
codec driver would also want to do things like obtain references
to controls for later use, which require all the controls to be
present. Add a component level fixup_controls callback, echoing
the card level option.
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Link: https://patch.msgid.link/20260721143636.361814-6-ckeepax@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
050406cbd6
commit
3e81e2fb21
|
|
@ -78,6 +78,7 @@ struct snd_soc_component_driver {
|
|||
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);
|
||||
|
|
@ -380,6 +381,7 @@ void snd_soc_component_suspend(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);
|
||||
|
|
|
|||
|
|
@ -310,6 +310,16 @@ int snd_soc_component_probe(struct snd_soc_component *component)
|
|||
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)
|
||||
|
|
|
|||
|
|
@ -2162,6 +2162,11 @@ static int snd_soc_bind_card(struct snd_soc_card *card)
|
|||
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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user